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

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

[复制链接]

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

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

admin 楼主

2017-5-6 13:17:52

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

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

x
CATIA二次开发入门教程---15 通过点击屏幕创建点! J/ {3 c! Q  Z3 k- P/ |( \
通过点击屏幕,自动创建点, 这里直接建立了一个简单的对话框,通过pushbutton来添加一个回掉函数,函数里面去执行创建点的类。
  Y( {, l# B4 E createPoint.PNG
# U% Y. k2 x$ K( u
9 h, l* Z$ y6 x' E6 nvoid DialogTesTCmdDialog::OnPushButtonCreatePointPushBActivateNotification(CATCommand* cmd, CATNotification* evt, CATCommandClientData data): b# U2 }; v& |, z* m* O, i
{
( a3 _2 W7 j/ d. |  // Add your code here
) `& V" q; h# m, V      CreatePointCmd *createPoint = new CreatePointCmd();
7 D! M4 U6 m6 V  c0 [' X}
3 A5 j  \( p. |4 U
$ I; \; X# \: w1 k* P0 K新建一个catia 的命令,名称为 CreatePointCmd ,接下来要做的就是在 action one 里面进行点的创建,代码如下:
4 k' E0 m1 Z( d/ h7 c' N5 L
$ a, Q! ~) R- i- ^, J. c- PCATBoolean CreatePointCmd::ActionOne( void *data )4 b/ ]% Z! E$ C+ p* W) D5 m" D' W
{2 K& O, _" P) Z6 P: ~7 E
  // TODO: Define the action associated with the transition ( W" m/ L' K/ J6 R* M3 u' M
  // ------------------------------------------------------4 ~+ L' K5 `4 o5 ^  `8 T0 Q* @3 {
CATMathPoint2D point2D =  _Indication->GetValue();
  W' A# t) X5 J+ |  x CATMathPlane plane = _Indication->GetMathPlane();
2 ~; F7 k1 U' d CATMathPoint point3D;& ^2 @+ A7 r# I5 G$ p6 D; ~3 \* ^3 N
plane.EvalPoint(point2D.GetX(),point2D.GetY(),point3D);
5 x8 Y  r& M8 }
6 n% {  g' s: y cout<<"Point coordinates:" << point3D.GetX() << "," << point3D.GetY() << "," << point3D.GetZ()<<endl;* \0 N% X, M, ~
   
! l; Y# ^& P: E  //设置Container(非根节点)
6 N1 _/ m! J2 @0 {  //获得Editor
7 G' p) t& r, Y- s" Y  CATFrmEditor* pEditor = CATFrmEditor::GetCurrentEditor();" B# Z5 o/ N6 n1 m( M6 N
  //得到当前对象的文档" e8 _5 \. k- E4 P( R5 V/ g/ t! P8 X. Z
  CATDocument * pDocument = NULL ;! g  `) V3 a4 Z2 l
  //取得当前活动对象
( b: a- T) _3 M2 k0 s1 g4 B! l  CATPathElement activePath = pEditor->GetUIActiveObject();& b3 q- B; j7 n
  //取得当前活动的product
2 M1 K% E. _$ \% @* e3 O4 S0 o  CATIProduct *pActiveProduct = (CATIProduct *)activePath.SearchObject(CATIProduct::ClassName());! @" q0 Z0 X3 M& X1 f9 r: E7 a" V
  //当前活动对象不存在
7 \- G. Y1 X) f  if (pActiveProduct == NULL)/ U2 j7 s3 T, u0 M5 f7 b
  {1 s. L6 V5 T& _! q, k- ]
    pDocument = pEditor->GetDocument();
. K/ w% R8 C) `  }
3 K  L1 |7 e" Y8 ?  else) n% L7 k2 h6 O' T) W
  {
) Q+ v6 Z5 D4 Z3 u; I) T    CATIProduct_var spRef = pActiveProduct->GetReferenceProduct();
; ~$ A7 p1 x4 s+ G5 K    //当前对象的引用对象是否存在
3 U9 ~" O* D0 C    if ( NULL_var == spRef )0 k, Z9 B/ ]& V. F5 X
    {7 w. w, G1 b& B! u
      return FALSE;
' l5 y4 M8 F/ p5 @    }9 K& R4 s8 t. Y) k5 p" c7 i" N
    //当前对象的链接对象0 A7 i% H5 G! N1 _1 m$ }; d
    CATILinkableObject * piLinkableObject = NULL;3 [& h" |" x9 g
    HRESULT rc = spRef->QueryInterface( IID_CATILinkableObject, (void**)& piLinkableObject );                           
1 b7 w; _& J5 R  Z    if ( FAILED(rc) )3 l  l3 U( f, e
    {. G* X; s( R$ t; J
      piLinkableObject->Release();7 r; \4 s/ ~) {  G: O3 D+ j) w; u
      piLinkableObject = NULL ;
6 U) |4 Z  S3 d8 g6 P' K3 u      return FALSE;: g$ p8 J1 |5 V" {+ }; k
    }
7 M* L8 R. I2 j; X7 p    //得到当前对象的文档- Y# p7 }- ?9 c2 K$ n5 N' O
    pDocument = piLinkableObject->GetDocument();
; F; O; A- k$ y' z* w    piLinkableObject->Release();; n; {7 Y/ o0 G4 W9 Z: X
    piLinkableObject = NULL ;
" G* ^0 M4 q# x8 W- l    if ( NULL == pDocument)3 _, x+ W; l' I8 k. Z7 ]! ?( @; Q
    {# x+ D3 U- ^5 x; G$ l- O! w
      return FALSE;
/ |( M0 q* ~8 f    }
% Y) z8 G) j  l, g! b  }
0 }. h& H9 g. @2 {/ @* x/ n  //得到文档容器集- H9 c3 G% v+ i/ F: {
  CATIContainerOfDocument * pIContainerOfDocument = NULL;
' _/ `0 J4 v) k7 y1 A/ E  HRESULT rc = pDocument->QueryInterface(IID_CATIContainerOfDocument, (void**)&pIContainerOfDocument);
/ }) j8 S4 d, r$ `  if (FAILED(rc))
& l( \3 h) y; c; s3 Z$ q$ ~% d6 `  {8 D$ r( R: J+ n* m6 M$ F. Z- s$ t
    //pIContainerOfDocument->Release();
2 G  f- c; o' m    pIContainerOfDocument = NULL ;2 K- ?6 t4 C( j: f! Z
    return FALSE;, ^8 e9 a  e- A8 f
  }1 s& {* l# n, H, b, G
  0 ~/ m' y2 P$ x3 M
  //获得Document/ ?% C9 w6 K! Y+ K
  CATIContainer* _pContainer = NULL; , D: q$ R# w: ]+ J( y$ N9 ]
  //获得SpecContainer
4 z; x) V- B! P- B  HRESULT hr = pIContainerOfDocument->GetSpecContainer(_pContainer);1 s. g# O8 b- V& ?# z! R0 [, F

3 u) {, M) S/ O  //GSM工厂
6 b; i. m3 X$ v- }  CATIGSMFactory_var spGSMFactory = NULL_var;" L( P: ^0 p( D5 {1 o1 K5 y* e
  //设置工厂  
) u- g9 u) |! b  spGSMFactory = _pContainer;         
$ N2 |* V' Y  Y# Q2 |& }  CATIGSMPoint_var spPoint = spGSMFactory->CreatePoint(point3D);, F! ?+ u1 l8 w/ }- {  Q( K  q
  CATISpecObject_var spSpecPoint= spPoint;     
2 A4 K' ], |9 P8 f  CATIGSMProceduralView_var spSndPntObj = spSpecPoint;- b" U) l. n/ e
) R$ ?' t/ k& V5 S
  //*将点显示在屏幕上& p& E. G8 l5 y' W
  spSndPntObj->InsertInProceduralView();
4 I' l3 t# d& J/ t  //更新点对象
, D1 |+ O* Z- l+ Z0 x  spSpecPoint->Update();- {" t- d: u' F" S8 B6 s+ W; D' d

$ o0 c( {* ^: ?! b$ U" e  return TRUE;
1 n4 \3 H0 \9 q2 F0 T# e$ h! ?}
" V0 j; `/ a3 D+ }: U( a: g$ w9 U/ \! G  E5 Y4 I( b' ^
. p- H9 n  k( a4 E
效果如下:
- J* ^* q: S4 `2 G' {6 X) U6 K- ]' n3 s% C4 [9 R

5 c; p6 V% O5 r% I' M7 O2 f& S( M: }4 l2 G
上海点团信息科技有限公司,承接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指的是什么呀
- N) V5 ^: U& g% |* @! o$ ~/ g) J
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了