PLM之家PLMHome-工业软件与AI结合践行者

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

[复制链接]

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

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

admin 楼主

2017-5-6 13:17:52

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

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

x
CATIA二次开发入门教程---15 通过点击屏幕创建点/ u0 ?& p1 s4 D$ N4 S
通过点击屏幕,自动创建点, 这里直接建立了一个简单的对话框,通过pushbutton来添加一个回掉函数,函数里面去执行创建点的类。
8 d3 D, ?! r$ s  Q createPoint.PNG
8 N6 ]# a0 H5 \6 c
! i& V- U: S) j' jvoid DialogTesTCmdDialog::OnPushButtonCreatePointPushBActivateNotification(CATCommand* cmd, CATNotification* evt, CATCommandClientData data)* O/ N" S" N6 \* M0 |$ J' X$ Q$ R
{+ X% l  H- \. ?8 L+ c" D
  // Add your code here9 H8 F8 a( k: w. h0 h4 z' G9 N/ G
      CreatePointCmd *createPoint = new CreatePointCmd();
7 R; c: i3 E# f! s( k, W" n* ]}
2 Q3 K4 L: p5 e( b8 H( I5 \6 H
! v; W7 ]/ M/ n! p# u9 W, e% `5 h新建一个catia 的命令,名称为 CreatePointCmd ,接下来要做的就是在 action one 里面进行点的创建,代码如下:
. R/ B; @& w7 {' v3 D0 t1 H& {
3 e0 [  k4 \8 R- Z) vCATBoolean CreatePointCmd::ActionOne( void *data )
- O9 P* @8 a' n. H2 S- q- a{% q4 h7 A( {; O% e, U% c
  // TODO: Define the action associated with the transition 6 R8 y/ Z6 `: [2 a- _8 u+ a
  // ------------------------------------------------------
3 y2 M3 {$ k! @# B& l% F CATMathPoint2D point2D =  _Indication->GetValue();
1 O8 y$ M' F3 J9 ]* Q+ ^ CATMathPlane plane = _Indication->GetMathPlane();7 p5 L+ m% b: L6 Z; \+ O
CATMathPoint point3D;
' S" c0 d& }8 e; N plane.EvalPoint(point2D.GetX(),point2D.GetY(),point3D);
; I0 J' m& n. P: h5 c9 ~
( b/ V) e6 U4 w, m* ?9 d% N cout<<"Point coordinates:" << point3D.GetX() << "," << point3D.GetY() << "," << point3D.GetZ()<<endl;
! a: j, y, A: {    8 X# d1 d% v9 |) R7 ~& R( U
  //设置Container(非根节点)8 [+ C* H* }7 `
  //获得Editor2 U* w0 ?4 p. {4 ?
  CATFrmEditor* pEditor = CATFrmEditor::GetCurrentEditor();, I6 i/ G: w7 `
  //得到当前对象的文档: ]+ ?# ]! i  K5 U! ~( k
  CATDocument * pDocument = NULL ;: |4 c. }6 d8 L; f) V
  //取得当前活动对象- c7 S6 `* [& ]  P4 Q% e  T" T0 V/ B' T% ?
  CATPathElement activePath = pEditor->GetUIActiveObject();
. W7 B% [, C0 Q  //取得当前活动的product# p8 B! G: \; J8 k
  CATIProduct *pActiveProduct = (CATIProduct *)activePath.SearchObject(CATIProduct::ClassName());
) g/ H( O, k3 r" T. R# ~  //当前活动对象不存在
: I! y; j$ p# a3 @  if (pActiveProduct == NULL)
& ?' J6 G0 Y( V9 Z7 y+ p  {! N0 A# t4 A- z$ k' t4 a7 a
    pDocument = pEditor->GetDocument();
5 ~; {: t& I1 s/ g0 ?  }" g( r2 M2 C  H: s  p" y
  else
- T' F. y8 [2 B; t- V: j  {
& D  E9 ^( K" C! u/ ?    CATIProduct_var spRef = pActiveProduct->GetReferenceProduct();
/ d( }; _6 C0 e    //当前对象的引用对象是否存在
+ ]) w  H; l' P# j    if ( NULL_var == spRef )% X4 _9 f3 r& b6 g' b, _
    {
0 Z) b) M, {8 w0 p1 {: L7 F      return FALSE;
: \0 u! u6 f( f% A    }
2 f* d6 b# Y" q4 `, ^! _    //当前对象的链接对象8 e& i9 i* D- N5 S# j* v# j: t( {
    CATILinkableObject * piLinkableObject = NULL;( d9 v7 y3 n) u  v
    HRESULT rc = spRef->QueryInterface( IID_CATILinkableObject, (void**)& piLinkableObject );                            / g& a& A3 T. ~# l7 A8 O
    if ( FAILED(rc) )
# x9 _8 V' v- W    {
4 q& [& @8 b3 h5 W      piLinkableObject->Release();% J- G0 J5 I% G' o& q( a/ c* v8 r
      piLinkableObject = NULL ;
: |/ O1 F% b: D: E, o4 L4 X      return FALSE;
# A8 b! p( C% n& _* a2 p1 }    }
; G% [' p7 C$ U$ A    //得到当前对象的文档
  v! _2 L# B5 I$ q1 s    pDocument = piLinkableObject->GetDocument();
2 Z) U9 v; }. y6 h) w7 b& c    piLinkableObject->Release();
& z* W4 i% n9 n$ h- \    piLinkableObject = NULL ;
9 C; w4 ]9 Y. v! ]  O3 I    if ( NULL == pDocument)
9 A: ]* L, R- j8 ^    {# `* U0 T$ Q' l- r$ T
      return FALSE;$ ], q: ~% k) l6 {# k- [
    }
* T' a! ]+ M4 g1 Y$ }* }  }
# ]0 G% `) M2 Z  ]8 u1 J" M2 z  //得到文档容器集( S# r3 a4 R( ?8 |$ ~* e
  CATIContainerOfDocument * pIContainerOfDocument = NULL;
) p3 X  z# [/ u9 P8 U3 n3 x- L; y  G  HRESULT rc = pDocument->QueryInterface(IID_CATIContainerOfDocument, (void**)&pIContainerOfDocument);
1 B2 L' u: g/ P  c$ G- i/ k  if (FAILED(rc))/ @& |' P/ Y- F
  {% @. O# A% v1 ], ]* r, A
    //pIContainerOfDocument->Release();5 H* M6 L( ^& W* W9 b
    pIContainerOfDocument = NULL ;
! N! Q. H. x- G4 ]2 j    return FALSE;) g4 x  W& Q; _3 h$ C+ R
  }
0 H& x: G1 X9 x; Y* @& N2 j  
0 K, O. b0 V) D( s# M* ^7 T  //获得Document# ]& j5 I: {( i& b2 G' r1 s
  CATIContainer* _pContainer = NULL; : l* X+ G: n$ E9 S9 G, ]: f
  //获得SpecContainer( F! n9 @6 o/ G- Q
  HRESULT hr = pIContainerOfDocument->GetSpecContainer(_pContainer);( D& a+ h- S* D7 T, X" M
" U  q' @" ]. X9 F' n3 M# m
  //GSM工厂% \+ G1 i* |, m# M  P5 I! _
  CATIGSMFactory_var spGSMFactory = NULL_var;2 T, R# g8 L( G2 a% _& }
  //设置工厂  & |6 a$ }0 D9 @7 i+ c
  spGSMFactory = _pContainer;         
& v8 e+ V0 B0 d2 ]  CATIGSMPoint_var spPoint = spGSMFactory->CreatePoint(point3D);5 q( D# r: M0 s: ~1 t: ^4 [
  CATISpecObject_var spSpecPoint= spPoint;     ' g" U9 u5 q( y! m$ D
  CATIGSMProceduralView_var spSndPntObj = spSpecPoint;
# m  j* P3 u; Y1 L. S5 G' g2 T3 D- z! \! a( Y5 c- I
  //*将点显示在屏幕上- Z! X, E$ V# a  S" {8 H* ?
  spSndPntObj->InsertInProceduralView();# P( z2 z! M2 X: k& z# K+ @
  //更新点对象3 j! D4 K3 X$ \1 H' c" n
  spSpecPoint->Update();
' A1 u3 |- s. l0 f3 t, f* x " E- N5 f5 B, a* K$ U# ]8 D8 F
  return TRUE;* Y2 I' f! `: s: W/ R5 g
}* L% T3 O9 w" a. l! T2 M

) |2 v3 O& y- k5 U; H, E! E& L0 P0 L: x8 ^( n! r  s
效果如下:; ~) [0 q( T8 W  `! b0 p! J. t. k
0 m) _/ r6 s$ ^
; i2 l# a9 R4 i& _( u
" b  e$ o9 t$ V3 W7 g0 d0 p
上海点团信息科技有限公司,承接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指的是什么呀
/ K1 S; L( {& c
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了