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

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

[复制链接]

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

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

admin 楼主

2017-5-6 13:17:52

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

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

x
CATIA二次开发入门教程---15 通过点击屏幕创建点
$ A1 h+ D6 D& u  ^9 r) Z通过点击屏幕,自动创建点, 这里直接建立了一个简单的对话框,通过pushbutton来添加一个回掉函数,函数里面去执行创建点的类。
9 J7 V' S) I% Z" Z2 B) V" f, t createPoint.PNG
0 w/ V$ {7 l- e9 }) `4 S9 h, L( `1 u' z- H
void DialogTesTCmdDialog::OnPushButtonCreatePointPushBActivateNotification(CATCommand* cmd, CATNotification* evt, CATCommandClientData data)
/ `+ [1 q; ^& X1 R/ z" v$ P{
; x3 a2 F0 }% F" O- _  // Add your code here. G7 Z) P) q$ ]% }& T' U
      CreatePointCmd *createPoint = new CreatePointCmd();; {8 o0 e0 l. F  r' j
}
) `6 v. q5 c( ]  t8 x8 I
& b6 C" {9 ^& d# Q; {- O新建一个catia 的命令,名称为 CreatePointCmd ,接下来要做的就是在 action one 里面进行点的创建,代码如下:% l- X# P8 v1 p; d6 S1 m

, T, q% X+ n/ i8 ]. ~8 K! YCATBoolean CreatePointCmd::ActionOne( void *data )( u4 {! D. j0 [' g+ V
{
' {# I# A! M$ c6 L, W6 ~, t  // TODO: Define the action associated with the transition
) z* u! J2 i4 O1 b9 ~+ I0 e8 c  // ------------------------------------------------------
$ {; U* g5 A) C" U CATMathPoint2D point2D =  _Indication->GetValue();
8 w$ m! s" N- j) F CATMathPlane plane = _Indication->GetMathPlane();
7 A0 X9 M( Y5 o+ h3 C CATMathPoint point3D;
, E2 C& D6 G6 @% a plane.EvalPoint(point2D.GetX(),point2D.GetY(),point3D);  }3 h. @# e9 w. m3 _, `

( k6 \1 i) E6 N; X7 e7 f cout<<"Point coordinates:" << point3D.GetX() << "," << point3D.GetY() << "," << point3D.GetZ()<<endl;
; I& v9 c/ b& [' v! |0 M8 l2 @    7 n9 D, J& x/ Z" _
  //设置Container(非根节点)8 P+ D! q0 {( I! N
  //获得Editor
; C  Q2 |% s; ?1 X9 m) ?  CATFrmEditor* pEditor = CATFrmEditor::GetCurrentEditor();
% ]7 r% H( W% T7 E! g) Q0 ?7 b( U2 Z  //得到当前对象的文档
! e. h2 g) y8 N  CATDocument * pDocument = NULL ;
7 v0 U/ n( ?! t9 E9 N  //取得当前活动对象
% d* Z8 N) _0 Q! ~  CATPathElement activePath = pEditor->GetUIActiveObject();
4 i: w3 K" M& K- b  //取得当前活动的product
( K% _0 n. Z) u2 w3 l7 @  CATIProduct *pActiveProduct = (CATIProduct *)activePath.SearchObject(CATIProduct::ClassName());
) ~8 E9 c) o. t5 u" q. x: g  //当前活动对象不存在
0 L3 x: [* v3 @  a! c  if (pActiveProduct == NULL)0 D5 r/ _$ p  \, `
  {
+ z2 E  ^: R  p- b8 B- B7 z: J, l    pDocument = pEditor->GetDocument();
3 Z! d& \0 z; O* e  }$ X8 _4 e5 x6 ^8 V( e4 H! _9 L7 Y, k
  else9 J1 s3 \" v/ q5 i
  {
4 ?5 I$ h! t, p7 ~/ G    CATIProduct_var spRef = pActiveProduct->GetReferenceProduct();; ]4 f) U% p1 D  ?
    //当前对象的引用对象是否存在. S/ L& a- ^$ Q6 v. I* [) X
    if ( NULL_var == spRef )
/ I7 D& c9 b/ }) g8 X# l    {( }- I/ i# x! w- X/ G
      return FALSE;0 b( b' j: s7 `/ y! X8 t
    }
* c: q6 x; H/ ~( I2 o6 k/ w    //当前对象的链接对象
2 k9 U( r9 v) z1 y! Y    CATILinkableObject * piLinkableObject = NULL;
; l  q; q! z) _    HRESULT rc = spRef->QueryInterface( IID_CATILinkableObject, (void**)& piLinkableObject );                           
2 a) \( m; k3 }. ^" U+ e    if ( FAILED(rc) )
1 G3 x7 Y- }5 @2 h( x    {. }% x$ R0 i% W
      piLinkableObject->Release();
" P! d2 M( X1 P4 N9 p7 [3 i      piLinkableObject = NULL ;
: G* _4 r* l+ c      return FALSE;& P( F/ S3 z) G8 b$ i: v- B
    }3 d3 _" L1 a$ E
    //得到当前对象的文档
7 |9 N; Z1 c9 c& t! F0 i2 k    pDocument = piLinkableObject->GetDocument();
9 n, e* m9 y" C2 [    piLinkableObject->Release();
4 l' P4 r( r& e4 M    piLinkableObject = NULL ;+ @: O' E3 m' ?
    if ( NULL == pDocument)
! ]/ l3 Q% ?! Z8 j0 V    {
1 I- @) J6 s$ G, B      return FALSE;
* ^; [# H$ ~8 f3 h' V' U, Q    }  U+ m" l* I3 ]9 N1 ^* ]+ b" ^
  }
- Y8 Y/ B9 `5 c  M  //得到文档容器集5 q" R. T, T3 Y  D: v% S( W
  CATIContainerOfDocument * pIContainerOfDocument = NULL;
/ `: \; ~' L, u2 K, Y+ n  HRESULT rc = pDocument->QueryInterface(IID_CATIContainerOfDocument, (void**)&pIContainerOfDocument);9 S0 J: z- S+ f3 g) h
  if (FAILED(rc))
5 c: s6 X3 _2 g2 A- M! K( H/ [  {6 D4 E. @: c+ ]$ J! C
    //pIContainerOfDocument->Release();+ F$ Z! u$ R. b$ _0 f3 P' f
    pIContainerOfDocument = NULL ;
) l. r  _1 W6 Y$ c2 I. L9 k    return FALSE;& H: k: K0 K/ F0 E# K/ e) _
  }
2 |: M# {3 w) K1 @  Q$ Q  & I1 ~& v6 n! G. o( C/ _1 K
  //获得Document& d/ z/ W+ o' ^) E. L! _: L
  CATIContainer* _pContainer = NULL; 8 ^+ f/ A+ R7 L/ {9 y& ~! h
  //获得SpecContainer
* P* j# \; t% K  HRESULT hr = pIContainerOfDocument->GetSpecContainer(_pContainer);0 ^! N, d3 N7 w- k# P
; \4 }  c' d3 J0 r; e  G" y
  //GSM工厂
) s% K0 E4 n; H7 K7 \  CATIGSMFactory_var spGSMFactory = NULL_var;
' U7 j& I3 f2 T6 E5 j, k/ J  //设置工厂  
6 h: b5 w% S% g( F) J  spGSMFactory = _pContainer;         
) x4 F3 p, u, Y* Z; E. {$ g% @* S  CATIGSMPoint_var spPoint = spGSMFactory->CreatePoint(point3D);
5 d. Y# F% c; d3 a  CATISpecObject_var spSpecPoint= spPoint;     
& l; x2 r, q& W  CATIGSMProceduralView_var spSndPntObj = spSpecPoint;! _& I5 ~( a/ |9 [1 F

" b7 U* @3 e$ ~/ J% `" ^  //*将点显示在屏幕上/ X4 u3 p/ V7 O. m/ N
  spSndPntObj->InsertInProceduralView();1 C6 U! M/ j# U3 O8 `9 q! o, @
  //更新点对象' ~2 _/ j; b# I  A& f
  spSpecPoint->Update();
2 u9 ~! E" g! o0 M6 d* ?
& t" A& t5 V" M# z  return TRUE;
4 C# v3 t) J5 T* \( c5 P7 h! P) Q}
9 k+ q  Y: n: {* b& R& f* q3 P/ i: M: x" @* D  F
, s; z; A$ E$ }* v9 E/ q" |: |& Z
效果如下:- P6 v7 K, B3 ?
0 o2 i/ v) @! P4 A" ~1 R
1 d0 Y5 }! l( i' W+ s. K7 E! C
2 i9 \6 |9 E7 B2 y! z
上海点团信息科技有限公司,承接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指的是什么呀. i0 s8 K# U/ @# 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二次开发专题模块培训报名开始啦

    我知道了