PLM之家精品课程培训,联系电话:18301858168 QQ: 939801026

  • NX二次开培训

    NX二次开培训

    适合初级入门或想深入了解二次开发的工程师,本培训结合ufun,NXOpen C++,大量的实例及官方内部的开发技术对于老鸟也值得借鉴!.

    NX CAM二次开发培训报名 NX二次开发基础培训报名
  • PLM之家Catia CAA二次开发培训

    Catia二次开发培训

    Catia二次开发的市场大,这方面开发人才少,难度大。所以只要你掌握了开发,那么潜力巨大,随着时间的积累,你必将有所用武之地!

  • PLM之Teamcenter最佳学习方案

    Teamcenter培训

    用户应用基础培训,管理员基础培训,管理员高级培训,二次开发培训应有尽有,只要你感兴趣肯学习,专业多年经验大师级打造!

  • PLM之Tecnomatix制造领域培训

    Tecnomatix培训

    想了解制造领域数字化吗?想了解工厂,生产线设计吗?数字化双胞胎,工业4.0吗?我们的课程虚位以待!

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

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

[复制链接]

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

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

admin 楼主

2017-5-6 13:17:52

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

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

x
CATIA二次开发入门教程---15 通过点击屏幕创建点6 S/ l& M( Z+ |" e# p0 U
通过点击屏幕,自动创建点, 这里直接建立了一个简单的对话框,通过pushbutton来添加一个回掉函数,函数里面去执行创建点的类。7 e6 h1 f& b; H" ?, C& u
createPoint.PNG
$ h6 P/ k; Z0 W8 c& v% Y9 {6 s: c" J
void DialogTesTCmdDialog::OnPushButtonCreatePointPushBActivateNotification(CATCommand* cmd, CATNotification* evt, CATCommandClientData data)
+ P: y+ d' }) N7 V4 J7 u6 {' |{
* `& G5 }% c9 x  {) C  // Add your code here3 p2 z  x) n1 C1 q5 M
      CreatePointCmd *createPoint = new CreatePointCmd();. G, j2 X) X6 p( v, |( Q
}2 q- {% [) K/ j6 _3 q% }

: w) h3 t- f: [8 ^% x5 e! |新建一个catia 的命令,名称为 CreatePointCmd ,接下来要做的就是在 action one 里面进行点的创建,代码如下:) Q  [7 q1 \& _5 r6 t# w$ B4 Y

( L& p7 p$ N+ x  ], O, VCATBoolean CreatePointCmd::ActionOne( void *data )
1 W$ _( ], C; G' o5 S$ S{- w8 W# C# ?6 e) D  W3 q5 m
  // TODO: Define the action associated with the transition
! p2 _2 d, j$ {! {0 q  // ------------------------------------------------------
8 T0 X* i9 T+ |1 B CATMathPoint2D point2D =  _Indication->GetValue();  m8 Z' N8 `$ e: k& f! [* ?9 s3 d
CATMathPlane plane = _Indication->GetMathPlane();6 R0 e. b+ u) c! ?% ~
CATMathPoint point3D;6 X1 r+ y' ~6 Z
plane.EvalPoint(point2D.GetX(),point2D.GetY(),point3D);, S9 A; j. h" }; }+ l" J: I' ]+ A0 f
2 Y2 _! W+ _. z3 M0 X, m5 J) s2 ?
cout<<"Point coordinates:" << point3D.GetX() << "," << point3D.GetY() << "," << point3D.GetZ()<<endl;5 D# m( |0 _) M4 d% n6 E2 V$ o
    2 D. C& L. g( a1 h  L* h
  //设置Container(非根节点)
+ j2 _5 e. e5 N0 I5 W' F" A  //获得Editor# _! f% J; Y- K1 F. t3 F% f
  CATFrmEditor* pEditor = CATFrmEditor::GetCurrentEditor();7 H' \2 a/ T& C- G" M/ c8 W6 N8 V
  //得到当前对象的文档
# u4 y9 N- o5 g  G  CATDocument * pDocument = NULL ;
) D5 K# X7 P4 x$ i5 m  //取得当前活动对象
0 x. }+ x& x, @9 [: s/ r4 D  CATPathElement activePath = pEditor->GetUIActiveObject();
9 Z+ ^, R5 q- f5 T  //取得当前活动的product5 u7 y6 ?3 g/ O3 n3 {5 A) X7 B
  CATIProduct *pActiveProduct = (CATIProduct *)activePath.SearchObject(CATIProduct::ClassName());
) K9 e. @. r5 M. G! e& p  //当前活动对象不存在
" }$ c1 B5 A# B4 ?  if (pActiveProduct == NULL); L  }2 D; w# G2 B( x+ q
  {
+ h" U* V; v' f* _; R! m1 Z% w    pDocument = pEditor->GetDocument();
- e: F7 S. `2 X) ^/ _! d  }
: G6 _$ K. o1 c  else9 a1 ~2 u0 m) V! }+ n/ t" `& J% ~
  {/ H) F3 x0 G! J; D& i, X' n
    CATIProduct_var spRef = pActiveProduct->GetReferenceProduct();
) F3 O" ?; ?+ O$ b! q    //当前对象的引用对象是否存在0 l9 ]* n2 [" X
    if ( NULL_var == spRef )
5 k2 L  Q* A1 G+ s( Q: G) f    {
, D6 P1 x( N6 X( T! s, Y      return FALSE;
; R8 g" U3 \. r    }
) u3 O, V& R; K; z) Q    //当前对象的链接对象2 V9 [% C$ L, x* g
    CATILinkableObject * piLinkableObject = NULL;
  O/ G3 }- U0 p' D. }3 }    HRESULT rc = spRef->QueryInterface( IID_CATILinkableObject, (void**)& piLinkableObject );                            ' F4 {3 R& |$ h9 @
    if ( FAILED(rc) )
1 j9 K1 j3 M0 U9 I$ b  K    {( ~* s& y7 T2 L9 E' f
      piLinkableObject->Release();
( x% e8 v/ A9 M: F: X9 Y5 b      piLinkableObject = NULL ;  K) h; y+ S9 ]% d' _
      return FALSE;
: y" F( I, T$ a: i" x# E. X    }
3 S$ D) L+ [/ U5 V4 a0 Q2 R; P    //得到当前对象的文档
* c! d8 f% s( N4 P2 i    pDocument = piLinkableObject->GetDocument();/ F. d" B, C: J: T
    piLinkableObject->Release();
# w! g1 R+ ~5 w3 e; f! i0 L6 p    piLinkableObject = NULL ;/ \+ m) k9 L) b: @9 T! |, o/ u( X
    if ( NULL == pDocument)8 K# R8 q, B: J) B
    {
) ~, d8 U6 X" E' H" R7 b      return FALSE;5 g/ F. ~& r$ n
    }$ e" |$ p! n* g. W
  }
. @$ `8 \, e  `7 a! w; Y+ h5 h1 b  //得到文档容器集; X& n  ?8 ^/ T9 X% ~
  CATIContainerOfDocument * pIContainerOfDocument = NULL;
( h! V8 h  y! K4 ?, E  HRESULT rc = pDocument->QueryInterface(IID_CATIContainerOfDocument, (void**)&pIContainerOfDocument);
* ^+ T# O0 |' N* _  if (FAILED(rc))
% f+ d6 _+ G8 L$ P) f. R' r6 ^  {" u, [) c  l; h0 F
    //pIContainerOfDocument->Release();. y3 A/ F) _2 t; _4 K
    pIContainerOfDocument = NULL ;( _8 i3 H" s' t! t! M
    return FALSE;& }' W6 m' r2 x* F
  }
% l4 ]9 A2 t# P5 R  9 n- q1 ~; V* t9 s3 X: |
  //获得Document, V7 k* h$ f1 z7 O. v. G2 e* L
  CATIContainer* _pContainer = NULL; ) b: O8 {. z4 `8 h; b0 a! E: n' l
  //获得SpecContainer" J6 y+ j! I, x- W
  HRESULT hr = pIContainerOfDocument->GetSpecContainer(_pContainer);
7 S$ n) F6 i/ e1 v 9 F: |$ D$ c) U& Q! }
  //GSM工厂! {8 s# ~/ h  s' k' E% n
  CATIGSMFactory_var spGSMFactory = NULL_var;( z- u# B5 T. N
  //设置工厂  & r( R/ ]; x6 {9 I5 e* L  d
  spGSMFactory = _pContainer;         
: R. Y6 _# s8 S2 C" [! V  CATIGSMPoint_var spPoint = spGSMFactory->CreatePoint(point3D);3 O$ V, j, S- L3 D9 B
  CATISpecObject_var spSpecPoint= spPoint;     7 I8 q  v/ B0 m9 L$ v/ n3 o
  CATIGSMProceduralView_var spSndPntObj = spSpecPoint;. q# Y4 B$ ~+ B" ~+ G8 |+ q$ E
, x+ H9 c6 J' l% E/ M
  //*将点显示在屏幕上
* I; {  b3 l# s. S  spSndPntObj->InsertInProceduralView();" U! [$ Q0 U7 ~! {7 d3 v# P
  //更新点对象
8 A* a5 {. B$ y3 A% a$ ?  spSpecPoint->Update();+ [3 I4 r; C( }
. T: @# t1 F& j. \$ j( O
  return TRUE;
2 Z5 V$ @- S4 M  o. V! P% q}& _5 i: i  N) Q1 @; k) `

. z7 b4 |: K7 {* L8 |% g% i6 z: D7 Q1 x6 A
效果如下:
' L% l- f$ |4 s$ s1 O* `: P1 e  ~( D" i4 Q

. J: }7 y# c6 I: `
- d7 e& x( a/ a* U  a, n8 }3 ^4 k! t
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复

使用道具 举报

全部回复1

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

onerice 沙发

2024-6-12 17:01:01

  _Indication指的是什么呀
1 M7 m( ^: a# e5 c% q5 E6 ~4 m
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了