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

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

[复制链接]

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

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

admin 楼主

2017-5-6 13:17:52

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

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

x
CATIA二次开发入门教程---15 通过点击屏幕创建点
7 O% b5 R/ A5 q) w5 {通过点击屏幕,自动创建点, 这里直接建立了一个简单的对话框,通过pushbutton来添加一个回掉函数,函数里面去执行创建点的类。) ]& ^# b$ J( D) h4 o
createPoint.PNG
% F! o! _2 G+ v* _( D: v: H: G/ ^; R
! A; Z* s( j" @( E' M* `# c1 avoid DialogTesTCmdDialog::OnPushButtonCreatePointPushBActivateNotification(CATCommand* cmd, CATNotification* evt, CATCommandClientData data). v# Y7 q* T* O0 J* J0 f
{
1 b: H( f: S/ w$ G4 R  // Add your code here
0 J# E  [5 |6 p9 c3 b& D      CreatePointCmd *createPoint = new CreatePointCmd();
  x# _( f4 N) f$ @}
: H) i9 ?3 N& T. S0 V# {4 m( d3 I6 [, F" f% B0 Q
新建一个catia 的命令,名称为 CreatePointCmd ,接下来要做的就是在 action one 里面进行点的创建,代码如下:
8 H- V' L% d1 G) |0 b3 U7 `3 N8 @. x: E: R  \1 e
CATBoolean CreatePointCmd::ActionOne( void *data )' t) ^% r$ M& |2 P
{' ]7 R( X2 e, J
  // TODO: Define the action associated with the transition
: m0 ~% n2 G0 |  // ------------------------------------------------------+ V1 S5 K1 v  Y! a) O) O2 i7 R9 U
CATMathPoint2D point2D =  _Indication->GetValue();
  a  ~  i0 g4 H CATMathPlane plane = _Indication->GetMathPlane();9 \+ v- L8 v& F
CATMathPoint point3D;; M8 {5 A3 ^4 E8 R  f& Y
plane.EvalPoint(point2D.GetX(),point2D.GetY(),point3D);
+ K0 o  F* m# n  J4 W/ o7 G' r  r, L2 {: e+ g: `6 O: X
cout<<"Point coordinates:" << point3D.GetX() << "," << point3D.GetY() << "," << point3D.GetZ()<<endl;
" U& @9 C% @, J% h% u1 E0 n   
. h- M3 x8 q/ i* l2 v/ a1 L: {1 w  //设置Container(非根节点)* L7 W  y. z# u8 M# S- g& L6 }
  //获得Editor; Q. v+ F- Y$ I' @5 d1 w+ y
  CATFrmEditor* pEditor = CATFrmEditor::GetCurrentEditor();
9 L- k' w8 n: I+ ~; u  //得到当前对象的文档
' P7 D: k0 X. O! O  CATDocument * pDocument = NULL ;
9 Q* P4 ?" I% n$ e4 J( o; p  //取得当前活动对象! u+ |3 V5 D4 P* Y2 Q) y
  CATPathElement activePath = pEditor->GetUIActiveObject();0 o# Z" r) i+ H
  //取得当前活动的product& ?9 a. k3 Y6 S! m
  CATIProduct *pActiveProduct = (CATIProduct *)activePath.SearchObject(CATIProduct::ClassName());
- g1 ~/ }8 J: p  //当前活动对象不存在
0 a9 w/ v# Y( d; Z5 x  if (pActiveProduct == NULL)
; Z1 Y1 w3 ?, K7 C; B9 ]% I( L/ y  {
, j5 V# u: {" y) O% J8 n. Q7 G    pDocument = pEditor->GetDocument();6 \2 J) D$ }' d8 k: |
  }9 E) s8 D% J( Z. r
  else( f8 y2 U  r- K- p0 n
  {4 P5 J4 j4 N" T* [  {" V* ~
    CATIProduct_var spRef = pActiveProduct->GetReferenceProduct();4 Z2 E* G, V$ b- U
    //当前对象的引用对象是否存在
: ]( P4 h0 M' r5 c3 q" ]4 x  z    if ( NULL_var == spRef ), b; p0 T0 C) _1 C+ b5 Q$ F! v
    {
6 _. f3 y& D4 u2 r7 N! g- ]; a      return FALSE;2 N$ T/ i5 Q; |; v' ?
    }# Z; C2 U: p6 C" m9 G/ `
    //当前对象的链接对象
0 o! ~8 I: A0 W$ {2 c) B4 n3 G1 d- |- M    CATILinkableObject * piLinkableObject = NULL;; ~" O' c3 b9 y* d
    HRESULT rc = spRef->QueryInterface( IID_CATILinkableObject, (void**)& piLinkableObject );                           
2 z0 T" {# P9 E8 }3 p    if ( FAILED(rc) )3 d* o( A2 E, t! M1 m3 J
    {3 t8 j+ ^7 ?3 \2 T9 N
      piLinkableObject->Release();
0 L) S. A3 n1 x) [* _      piLinkableObject = NULL ;
8 T4 g0 F4 H, R; c% ~1 Q      return FALSE;
5 a% w( \% P' C    }
0 m" ^$ g# \6 w  I    //得到当前对象的文档9 T7 o& }, f$ Y+ n7 r
    pDocument = piLinkableObject->GetDocument();
: P9 Y: |* c& F, O* F2 Y    piLinkableObject->Release();
) v: I. n# l6 B# G5 d8 q6 `    piLinkableObject = NULL ;
, P1 p* |+ y" z+ ?9 k  P4 Z    if ( NULL == pDocument)- ^# C( \' u0 O1 g& Z! J
    {
: _0 C, b! T$ T9 ~. m) m# B, t! O      return FALSE;
  l6 T6 I0 ]8 I- x" h3 B0 @( |    }
9 x3 I: M8 M+ w! ?# {" P+ J4 g  }) V! }8 n7 O4 B4 ^$ y) ~* K
  //得到文档容器集5 V, N0 d$ V" ~( O  [; {
  CATIContainerOfDocument * pIContainerOfDocument = NULL;
" j" e5 T$ w+ Y" k, s3 b1 g  HRESULT rc = pDocument->QueryInterface(IID_CATIContainerOfDocument, (void**)&pIContainerOfDocument);
8 n: W' a2 _, U. z( T. Z3 L  if (FAILED(rc))
( Y. o3 {9 L- s' K; |( x! `; N  {* D, g3 A* ?0 ^$ @5 P- x' j
    //pIContainerOfDocument->Release();3 s& N0 B3 E0 O9 u
    pIContainerOfDocument = NULL ;
1 ^6 e/ e: D: B+ i2 L    return FALSE;3 A9 |% |& \& u2 _8 R$ O
  }
5 q1 H) ~  `2 {  ' m* _2 F: `: j* B- A
  //获得Document
4 X/ s- Z; h1 z% h# d9 D. F+ s  CATIContainer* _pContainer = NULL;
& n$ t5 H" K  K" K' Y, v/ H; q  //获得SpecContainer
7 a- w4 H4 e( Z" k  HRESULT hr = pIContainerOfDocument->GetSpecContainer(_pContainer);
6 X, }! A# ?  c5 b8 I( X
2 ], j8 P! y- w( X( @  //GSM工厂: K4 c2 u  T4 [
  CATIGSMFactory_var spGSMFactory = NULL_var;
) S6 f; p; D* h, Z1 x: y* m" A2 I  //设置工厂  , j- W1 |, E, ~3 v
  spGSMFactory = _pContainer;         ! H2 Q/ J0 J: X& L( a
  CATIGSMPoint_var spPoint = spGSMFactory->CreatePoint(point3D);. j% G, W! i$ M0 H4 C# B
  CATISpecObject_var spSpecPoint= spPoint;     
, h. Z5 Y; w. q# e' u/ x' R  CATIGSMProceduralView_var spSndPntObj = spSpecPoint;( n- R4 I6 M! m# |& r

2 n, Y( A1 N7 q% S/ Q0 U6 y, M( I  //*将点显示在屏幕上
" k5 u! Y" |$ S6 w. n  spSndPntObj->InsertInProceduralView();
9 Q0 D" ]7 V+ @( G  v2 y  //更新点对象, r! j9 z# Q4 n( A9 M. x3 K- W
  spSpecPoint->Update();3 R, u, @4 L! |5 W# ?  p- [

* s& n9 S2 b) u1 q1 C, J  return TRUE;
) D4 m4 G. z) J: g# C/ o}
$ k6 N! A- h" R, p4 L5 s5 g4 M2 [& w1 j7 q$ }5 K7 O6 ^

( \9 s8 B$ A3 @* |  l效果如下:
6 r; B, V! v8 M* M5 w0 L+ D) |, o, O" r1 ^

5 J+ R: B9 S) }3 n& Y1 p6 N9 d8 x1 r- Y! g9 ^
上海点团信息科技有限公司,承接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指的是什么呀* v& N; S* s6 ^5 f# _' t0 B
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了