PLM之家PLMHome-工业软件践行者

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

[复制链接]

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

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

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

x
CATIA二次开发入门教程---15 通过点击屏幕创建点, O& |- ~, D) x4 k6 U/ e, l: I. m
通过点击屏幕,自动创建点, 这里直接建立了一个简单的对话框,通过pushbutton来添加一个回掉函数,函数里面去执行创建点的类。! ]* T' M  f% r) ~6 v* w
createPoint.PNG 0 [3 s7 B/ C$ a7 v) Y. ~6 z

* ?; r& e7 E! h: |4 z& G( ^' ~void DialogTesTCmdDialog::OnPushButtonCreatePointPushBActivateNotification(CATCommand* cmd, CATNotification* evt, CATCommandClientData data)2 u$ Q2 v' r) `
{' @2 z+ F3 W' u  ^5 T
  // Add your code here
0 }6 B) \. P( ?- O. k- Z% U      CreatePointCmd *createPoint = new CreatePointCmd();- T: @; R& S, T- \* y
}( V0 W: q0 H& P3 ^% F6 z8 i
. H; G8 Y' c. A4 j4 m5 ~
新建一个catia 的命令,名称为 CreatePointCmd ,接下来要做的就是在 action one 里面进行点的创建,代码如下:3 d# a* Z8 B1 K( r7 Q
  n4 n2 |, b$ s# C: B
CATBoolean CreatePointCmd::ActionOne( void *data )
' h- v2 k- z6 t, I5 J{+ X  E: ^; p* p. |! ^5 C
  // TODO: Define the action associated with the transition / x! ]! C* z( R. s
  // ------------------------------------------------------4 Q7 Q% p0 ^  C/ Q" ?7 e
CATMathPoint2D point2D =  _Indication->GetValue();. l6 W: h9 W) o5 d1 `% W  q: O
CATMathPlane plane = _Indication->GetMathPlane();& C8 Z$ }8 c' y3 G1 ]' P$ Y  P
CATMathPoint point3D;
- n) G" ~1 X+ o# C2 o/ i9 u1 u; s. ^ plane.EvalPoint(point2D.GetX(),point2D.GetY(),point3D);; p+ I' |' E; z5 `. k0 |

$ _" }4 N1 S5 A7 i0 ^6 {* P$ Z& u2 z cout<<"Point coordinates:" << point3D.GetX() << "," << point3D.GetY() << "," << point3D.GetZ()<<endl;( u1 L- ?5 [/ b. k
    6 A: E: m7 l5 ^  x7 @
  //设置Container(非根节点)
5 X" d  W$ e6 a- x. w# W  //获得Editor
7 L0 P9 _! H" u" f  CATFrmEditor* pEditor = CATFrmEditor::GetCurrentEditor();
6 H2 b. L% Q3 z  ~  //得到当前对象的文档) P9 I5 }- R& D$ l" T7 [. S
  CATDocument * pDocument = NULL ;* ^0 Q; R" K, [* P
  //取得当前活动对象3 w* g: I2 a& m/ ~; [
  CATPathElement activePath = pEditor->GetUIActiveObject();
! I8 c' q: \6 w  //取得当前活动的product
+ X5 K* B% R0 k; ~! u- Y  CATIProduct *pActiveProduct = (CATIProduct *)activePath.SearchObject(CATIProduct::ClassName());
9 u8 e8 K0 P0 V  //当前活动对象不存在1 u9 y$ Z$ W8 t! `/ J" {
  if (pActiveProduct == NULL)
& G0 S/ ^/ q- v5 W! N: o  {
. l, E. f) S, Z; D1 F# U% ?    pDocument = pEditor->GetDocument();
- b! q! {9 L" h% X7 z% w2 u# z  }
7 y6 l0 i6 q& s+ t, I, X( [; u  else
/ h( U) n  G+ w% n+ q+ j# [2 f7 h  {
( O' w/ \" u( e, i    CATIProduct_var spRef = pActiveProduct->GetReferenceProduct();
# d5 K+ P8 @7 Q- H0 v  c6 \% Y    //当前对象的引用对象是否存在
3 q# ?8 L# g) _( m" |) m    if ( NULL_var == spRef )
) c9 z7 p+ C' F3 E, s    {
4 z: G5 H& u. |; Z: N' a2 \5 S      return FALSE;- x- E3 O/ h3 l& q! J% m: B0 p
    }
# T! R" t' x% W; s/ r    //当前对象的链接对象
6 i' o, e+ M5 o    CATILinkableObject * piLinkableObject = NULL;
8 p3 |' d1 B4 J+ S    HRESULT rc = spRef->QueryInterface( IID_CATILinkableObject, (void**)& piLinkableObject );                           
- A( E7 V; N+ j2 t    if ( FAILED(rc) ), F% K( T$ x& U; ~- L) |5 L
    {
2 ]: x% a6 g! d6 i6 w' X      piLinkableObject->Release();
' |7 f) g% F+ C      piLinkableObject = NULL ;% `8 {0 ]% u3 U1 `" ~
      return FALSE;
9 b/ D9 N, ?$ A    }
! a8 M& T5 T$ B    //得到当前对象的文档
" y% f$ h* D0 Q" Y) ~3 H/ D5 }( ~    pDocument = piLinkableObject->GetDocument();
: h+ E1 M6 S2 [# H7 }    piLinkableObject->Release();
  q* F, F" z& ], b- D2 j! U" O    piLinkableObject = NULL ;
, K" b; ]: Z+ m    if ( NULL == pDocument)
% l- p, a( H1 K, V* M, [' J    {
9 q6 n, z7 D% w  k. Y. {      return FALSE;
9 V" Q! f+ I% I1 e2 O0 o4 Q: j    }
/ k9 b9 t' _; v9 B, t% a  }
3 j% W. h! e/ c0 |: H$ B9 d  //得到文档容器集
% ?* h- x( s6 M9 [. |5 o  CATIContainerOfDocument * pIContainerOfDocument = NULL;
; a: j6 g$ ?/ s6 I1 S$ Q  HRESULT rc = pDocument->QueryInterface(IID_CATIContainerOfDocument, (void**)&pIContainerOfDocument);
0 a# ~4 k. T7 I9 h  if (FAILED(rc))
8 T" x' }* K; K. B) r' @! G3 o2 ^  {0 H5 }. N: z9 {9 D
    //pIContainerOfDocument->Release();
; {# H7 H# [# g" V, I' _, w    pIContainerOfDocument = NULL ;8 {! s5 g& T+ H9 [+ C7 w
    return FALSE;
( G/ T/ i7 X( |7 h) L5 t! [  }* M/ s# ~% e4 h7 l
  
! [0 ?8 i8 Z" \1 }# j, q% Y  //获得Document' ]6 w- \% N- Z# |! I
  CATIContainer* _pContainer = NULL;
' g; F6 c1 W* A5 u  //获得SpecContainer
9 ~: O6 B6 W5 h+ @, Q  HRESULT hr = pIContainerOfDocument->GetSpecContainer(_pContainer);
0 Z7 P2 G$ c0 Y( n( p( c. \ ' w- F  @8 d- b4 i8 h, ]" T
  //GSM工厂$ N6 p3 U" }. R" M5 ]
  CATIGSMFactory_var spGSMFactory = NULL_var;
5 f- U/ l6 m+ B( |; w1 o2 ]  //设置工厂  
# H8 t/ [; C; f( e- z# ]  spGSMFactory = _pContainer;         
1 |4 t- H$ E/ O: I3 Q, a' }% Z, \4 `  CATIGSMPoint_var spPoint = spGSMFactory->CreatePoint(point3D);/ I3 W& ?3 Z8 O" q/ }* d
  CATISpecObject_var spSpecPoint= spPoint;     . L( f" y3 E5 Y( Q* T9 B- B' ^
  CATIGSMProceduralView_var spSndPntObj = spSpecPoint;
0 S1 h& ~5 j' C1 \9 l# O
4 A& F3 z1 b2 f2 \5 @  //*将点显示在屏幕上
' s- ?- M9 M: n8 g& X, p/ `" |4 f1 a- {  spSndPntObj->InsertInProceduralView();; Q/ {1 C, g- q6 d4 z
  //更新点对象9 W+ G/ F: g, `  K
  spSpecPoint->Update();
3 `( d+ N! T- }( h2 P* r $ k+ m, O- _  r/ D" ?& ~& _
  return TRUE;
8 w: m/ s+ W0 i6 J0 g7 h3 z1 x& T: W}
( w: p! @1 c# _" V: U* T$ T6 W. H+ Y. w3 u

1 X; j7 e# M  d/ J效果如下:
' S# _7 d1 L, w( @
9 I6 ?; B0 w+ `6 Z/ j, \% L7 b% L
7 m- R' R6 ?9 D% p% \# L- O8 S& S- V! ~& R# `0 j$ f
上海点团信息科技有限公司,承接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指的是什么呀
  k7 D7 ^3 o  A* h9 `0 m/ S. _! ?
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了