PLM之家PLMHome-国产软件践行者

[原创] CATIA二次开发入门教程---15 通过点击屏幕创建点

[复制链接]

2024-6-12 17:01:01 4665 1

admin 发表于 2017-5-6 13:17:52 |阅读模式

admin 楼主

2017-5-6 13:17:52

请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!

您需要 登录 才可以下载或查看,没有账号?注册

x
CATIA二次开发入门教程---15 通过点击屏幕创建点! v3 ^$ |3 h/ o! Z7 a7 i, |0 L
通过点击屏幕,自动创建点, 这里直接建立了一个简单的对话框,通过pushbutton来添加一个回掉函数,函数里面去执行创建点的类。2 o) W) i# x' s1 I9 i4 o9 l) w# }3 V
createPoint.PNG $ ?* J5 q! Z! I5 p  E5 u6 w
3 P9 m; w$ a2 ]: t! y- B
void DialogTesTCmdDialog::OnPushButtonCreatePointPushBActivateNotification(CATCommand* cmd, CATNotification* evt, CATCommandClientData data)' a% r; Q7 M5 h/ a
{
0 i1 s+ o, j9 W/ ]$ ], s+ n  // Add your code here
# c3 {; b: q) O      CreatePointCmd *createPoint = new CreatePointCmd();
0 l+ }/ D5 V7 t8 U: W4 J. W( R0 x0 P% Z}5 {) w5 {- K1 p! @1 P0 A
8 {! a) F' I: V  T2 w7 |9 X9 s# f
新建一个catia 的命令,名称为 CreatePointCmd ,接下来要做的就是在 action one 里面进行点的创建,代码如下:; d- p$ {! V( i  ~+ V

4 F/ @( c4 j. L1 N% {8 M$ eCATBoolean CreatePointCmd::ActionOne( void *data )
/ A* [% a7 K+ [5 ^& F/ V{% w& i$ I) f0 m3 [
  // TODO: Define the action associated with the transition 3 x5 I; J# S* W# s$ {, l1 p. K0 T
  // ------------------------------------------------------0 _& r9 B1 q8 _5 x" ?
CATMathPoint2D point2D =  _Indication->GetValue();
2 R% C1 [" s- [; P" b CATMathPlane plane = _Indication->GetMathPlane();. [5 ~# V- v& `) Y2 y! P' G+ |/ e
CATMathPoint point3D;' j4 W; H, q+ A( L  s1 R" V
plane.EvalPoint(point2D.GetX(),point2D.GetY(),point3D);
6 ]0 u8 W3 K# B
6 F) u$ D3 X4 A" ^0 [: ` cout<<"Point coordinates:" << point3D.GetX() << "," << point3D.GetY() << "," << point3D.GetZ()<<endl;
' |1 Z+ F2 b8 D* V4 ?/ w1 v6 h1 L   
# ~: n" c- O) k5 t  //设置Container(非根节点)# |2 ^6 H, V# y$ ]
  //获得Editor
! m3 Z1 Z; c. @4 C% ^  CATFrmEditor* pEditor = CATFrmEditor::GetCurrentEditor();
- A+ B* Z: Z  g* a  //得到当前对象的文档4 ^: l/ u3 g) _% T/ Y: R
  CATDocument * pDocument = NULL ;% y; N2 s! I4 j' ~0 c
  //取得当前活动对象
% L8 p9 O$ f/ v. F  CATPathElement activePath = pEditor->GetUIActiveObject();
, P4 W: \- q+ w4 \  //取得当前活动的product, V( n8 G* L, I2 l8 b! X
  CATIProduct *pActiveProduct = (CATIProduct *)activePath.SearchObject(CATIProduct::ClassName());* o& E3 F! Y: S7 j8 W
  //当前活动对象不存在
8 o) ?- x5 O7 a" H/ i& O  if (pActiveProduct == NULL)
  A# ]' n( S  A; G' p4 M6 N. |/ `& U  {
% A3 n* t* p4 _, L4 p5 I* u    pDocument = pEditor->GetDocument();
$ O5 ]* [3 C7 y) C& M  }
& P+ |, Y& O! o: u7 v. y  else
0 T4 c& i7 g: q% _9 x8 u3 I( S  {
- g. z* o* |! m9 |! {2 {, P2 r    CATIProduct_var spRef = pActiveProduct->GetReferenceProduct();6 O) h1 b+ b' T& [
    //当前对象的引用对象是否存在, H3 p# A/ H# S2 o3 G! P
    if ( NULL_var == spRef )4 N; s+ s" l: E7 f! w% H+ A- A
    {6 s) w; t: u: E: a% B; L: q, B3 l) F
      return FALSE;. }5 v, W9 @& \9 F/ V3 m
    }
6 u; [; e1 k: W6 M& T    //当前对象的链接对象
3 K9 l' l+ _8 d8 f9 Y% N    CATILinkableObject * piLinkableObject = NULL;# l) X  ?  k1 j7 g0 }# m9 D
    HRESULT rc = spRef->QueryInterface( IID_CATILinkableObject, (void**)& piLinkableObject );                            1 n- ~6 k" L+ h, u
    if ( FAILED(rc) )+ B/ e, a0 m# Y; s" t2 X# @& a) I
    {) {; Q! |  _! h" I  n
      piLinkableObject->Release();
! q2 u( G# R3 W/ l      piLinkableObject = NULL ;( w0 s0 M0 V' a& D
      return FALSE;5 o/ d) X3 Z1 O
    }
; Z$ Q) p% u% X    //得到当前对象的文档
- Y7 v: Z# P% D" R0 J    pDocument = piLinkableObject->GetDocument();
+ q  E& L7 E' X    piLinkableObject->Release();. n0 Z6 p+ P" l' s  j1 w7 |
    piLinkableObject = NULL ;
% t5 F% @0 F4 w) \0 ], J- ]# t. q    if ( NULL == pDocument)0 A5 ]7 h& m6 w( L
    {
& E- l8 Q2 y" G) @+ W8 v      return FALSE;
) d( S+ ]9 v' E+ m( o    }
6 ]7 R5 d2 z7 i! z! i; ^: }7 |( D  }
; r: K. H1 f& s$ m  //得到文档容器集2 A. K' P- x+ q4 B' n2 Q
  CATIContainerOfDocument * pIContainerOfDocument = NULL;
7 g# ]. H: }: s$ D+ a  HRESULT rc = pDocument->QueryInterface(IID_CATIContainerOfDocument, (void**)&pIContainerOfDocument);
: o' H8 Q0 R- q9 n( \  if (FAILED(rc))9 M- N2 v- {: ?7 }( S: Z
  {, J% P9 _' d6 c/ v: \% h% x
    //pIContainerOfDocument->Release();: ^1 g/ P0 C$ c) V. G
    pIContainerOfDocument = NULL ;) e8 G- ?6 O/ g# F
    return FALSE;
4 Z% A2 t2 g' R1 n5 [  }
9 u7 C: Z7 E0 p; q  
$ Z# X+ Z5 ^# `) v/ l  //获得Document
/ A& @9 l4 u2 c7 J8 i  CATIContainer* _pContainer = NULL;
) T, W& J5 |" A+ a" g! g  //获得SpecContainer
4 X  h* O% c& p$ \1 n/ S8 Z; x  HRESULT hr = pIContainerOfDocument->GetSpecContainer(_pContainer);
1 A; @" x  K: j9 T1 O- b
% X3 ?$ D( X: N% @& |  //GSM工厂
1 t4 V  M% ~! V  CATIGSMFactory_var spGSMFactory = NULL_var;
$ E; V0 c2 ?# E/ R  //设置工厂  
, I7 }2 n+ ~# V, g: K3 ]  `" @8 J  spGSMFactory = _pContainer;         " U: e* b; X  g5 i. [# m, F2 _
  CATIGSMPoint_var spPoint = spGSMFactory->CreatePoint(point3D);
( d  B" J" F! I6 d8 C; c2 q: I  CATISpecObject_var spSpecPoint= spPoint;     
4 ]0 s; G) }& o2 _7 R: T  CATIGSMProceduralView_var spSndPntObj = spSpecPoint;
$ ]: R: c- X+ V# l$ m5 {6 ?& X0 g# I# n) w# v! y8 w
  //*将点显示在屏幕上
+ J$ D, [, ^9 r1 m! p0 a2 z  spSndPntObj->InsertInProceduralView();. |9 w8 H1 v/ @0 S/ j+ |- T, e
  //更新点对象  U3 I- Y& K8 \3 f3 D, ?$ A
  spSpecPoint->Update();0 y4 g, F' }2 y

8 }) c& F' m: A  L  return TRUE;
( o4 a2 \) M- K( j# K3 Q9 r; z}. l- e* D1 r; a0 K2 U* ~( `( E
9 k9 G! ?5 d* @/ v  t& J; y$ t

4 r1 ~& M- U. T) L效果如下:- s7 Y/ U  p% C8 k
- e- T: p  p, |3 p) V- A1 M" M
9 _9 y- \% O. B9 Y2 v2 {: V
# t# }$ }0 i9 G1 O# x. c
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 doTeam.tech
回复

使用道具 举报

全部回复1

onerice 发表于 2024-6-12 17:01:01

onerice 沙发

2024-6-12 17:01:01

  _Indication指的是什么呀
5 N$ Q0 [! J# Z# ^: t  g/ E
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复 支持 反对

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 注册

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

    本网站(plmhome.com)为PLM之家工业软件学习官网站

    展示的视频材料全部免费,需要高清和特殊技术支持请联系 QQ: 939801026

    PLM之家NX CAM二次开发专题模块培训报名开始啦

    我知道了