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

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

[复制链接]

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

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

admin 楼主

2017-5-6 13:17:52

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

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

x
CATIA二次开发入门教程---15 通过点击屏幕创建点; ~; {4 |1 T9 V' x$ z  b
通过点击屏幕,自动创建点, 这里直接建立了一个简单的对话框,通过pushbutton来添加一个回掉函数,函数里面去执行创建点的类。" Y% j; }0 q$ A* V3 o
createPoint.PNG
  ?  o7 n; f" K3 G6 i0 V
0 m( O9 t, W4 i# @void DialogTesTCmdDialog::OnPushButtonCreatePointPushBActivateNotification(CATCommand* cmd, CATNotification* evt, CATCommandClientData data)2 ]: I( `/ C; f: V# k4 [! `
{) h; ~9 Y! H  Z8 `, K0 t4 ?1 v7 Y0 g
  // Add your code here
; h! @/ E7 ?2 k$ E" d3 _8 j      CreatePointCmd *createPoint = new CreatePointCmd();
# q$ e5 O- e& f( m}" O7 I, z, ^* O* l# u

9 d2 P( D0 m) k新建一个catia 的命令,名称为 CreatePointCmd ,接下来要做的就是在 action one 里面进行点的创建,代码如下:
, w) Z( }' T+ D6 G' G9 |' }
9 k! s9 H9 E1 [# j8 VCATBoolean CreatePointCmd::ActionOne( void *data )
0 ~; N7 h6 D/ w1 R, }5 ~# k{
. y$ D1 ^+ f  Y% v  // TODO: Define the action associated with the transition
* d0 Y% i; d- h! n  // ------------------------------------------------------( L0 \: f- ^' l$ z" l
CATMathPoint2D point2D =  _Indication->GetValue();
. W% T+ [; E) j; v& t1 c2 q" e CATMathPlane plane = _Indication->GetMathPlane();
" `& n  x- @% A6 o; V CATMathPoint point3D;+ K' `3 B! \1 n- n5 u7 |2 A
plane.EvalPoint(point2D.GetX(),point2D.GetY(),point3D);
! B- k) S, P. F+ b
/ g# ?9 L; T% r cout<<"Point coordinates:" << point3D.GetX() << "," << point3D.GetY() << "," << point3D.GetZ()<<endl;$ A9 }1 `/ U, f% y* a
    + p# w# E% t7 m# M; ~  j
  //设置Container(非根节点)4 {8 p1 y" ?5 @
  //获得Editor
- T( G3 g2 [; F! r$ u# [  CATFrmEditor* pEditor = CATFrmEditor::GetCurrentEditor();: f8 l5 ]& _* j3 H, S
  //得到当前对象的文档' Y% _/ }" N& p! \3 |3 f
  CATDocument * pDocument = NULL ;
4 _0 N4 e( F8 Q* m$ e! N- z1 A  //取得当前活动对象4 F5 N* v( @% D0 A/ }# F4 h9 V
  CATPathElement activePath = pEditor->GetUIActiveObject();3 ?3 z, a2 C5 g2 Y( P
  //取得当前活动的product% M8 L2 R( N; c) A5 V
  CATIProduct *pActiveProduct = (CATIProduct *)activePath.SearchObject(CATIProduct::ClassName());
7 _$ c. j5 u& i, j5 g' K, m9 I+ @  //当前活动对象不存在
  I- P1 j" k6 r  if (pActiveProduct == NULL)
' P; ~1 y5 ~# r/ v& _  {
  p$ H$ b0 o* ^' S$ N: L# `+ F7 e    pDocument = pEditor->GetDocument();* M: e) y5 G9 v/ |7 L# c
  }
4 o$ A+ m8 ?+ l. b" D  else
' M- ?6 Q) x# l  {- P  y3 ^: |; t1 i9 R; V" \4 D/ {
    CATIProduct_var spRef = pActiveProduct->GetReferenceProduct();
- A8 k0 [% O9 k2 T* M% H8 s2 V% ]+ E    //当前对象的引用对象是否存在# G( n% V/ J( p) E: x4 U# O* @) K
    if ( NULL_var == spRef )2 S1 }0 Q: {+ L# E9 G3 C- Y* J
    {. k' ~0 S# O0 Q& ~. T* |
      return FALSE;! `7 n) E# T; B; a* `% h+ t
    }8 ?3 g! Q3 R3 t2 y
    //当前对象的链接对象) S4 z* j# U- d/ N
    CATILinkableObject * piLinkableObject = NULL;
7 ]. B/ ~9 o0 y( S  h- _: L. S9 v    HRESULT rc = spRef->QueryInterface( IID_CATILinkableObject, (void**)& piLinkableObject );                            1 C1 D" v1 D& v7 V) H5 a
    if ( FAILED(rc) )  w: P, A+ Z/ @" k
    {
2 ~3 Q1 R. g- y- S* [      piLinkableObject->Release();+ |2 e& y1 t$ C3 f* A8 p
      piLinkableObject = NULL ;
0 D0 m5 ^- W, x% B8 f4 |      return FALSE;
, v& G& O5 x3 v8 {    }" g8 c# M# [4 {# X7 X+ V$ E
    //得到当前对象的文档# m# A% d% T) @  {9 O# r8 B( e
    pDocument = piLinkableObject->GetDocument();: w  T% j8 p* F5 O8 r, c& u
    piLinkableObject->Release();
! O9 y* I3 k  S* ?0 }3 s  |3 G3 ~) p    piLinkableObject = NULL ;
2 E. ]" v2 b+ P0 E. m9 y+ ?, h' i    if ( NULL == pDocument); `4 N3 T& p' @& ]3 R# ^
    {
* s& d- [, ^/ b& G  D  l, p      return FALSE;, F, C, E* K5 W/ ~
    }
- M! q' G2 ^3 a) e0 Y5 M  }( T* d( N, E, W7 d; V( P
  //得到文档容器集# c0 T" d& L( z5 k1 I
  CATIContainerOfDocument * pIContainerOfDocument = NULL;! t4 }" x# p" @9 d7 p
  HRESULT rc = pDocument->QueryInterface(IID_CATIContainerOfDocument, (void**)&pIContainerOfDocument);* Y* {+ ^# G- H/ O7 ~4 x, u7 @
  if (FAILED(rc))
0 {) C) Z- V/ a$ m  {
5 u5 D+ D4 H7 f3 l  w    //pIContainerOfDocument->Release();8 X0 W. \& g5 p" n: X+ ~' h# U
    pIContainerOfDocument = NULL ;  x" D' M1 l9 v* H
    return FALSE;
, O8 |5 [- A( p  }
7 G* s+ Q6 v: _1 E, S+ @1 M  " ~" [% n) K3 T: X. A
  //获得Document5 A4 u/ }# l; l" d) u4 \
  CATIContainer* _pContainer = NULL;
' D1 I- X+ n5 V+ f9 a8 q  //获得SpecContainer
8 w7 N5 S6 e9 X7 P( l/ s  HRESULT hr = pIContainerOfDocument->GetSpecContainer(_pContainer);% `% R  t) {6 a! |! X
" @3 o1 v! ^" T! Z* ]- ?+ q
  //GSM工厂0 d3 w% U: M* F+ T. p
  CATIGSMFactory_var spGSMFactory = NULL_var;
: B+ J3 J) K, |  //设置工厂  ' `; f; B0 I8 o
  spGSMFactory = _pContainer;         " @- M5 Z- p7 X! ]3 T# `
  CATIGSMPoint_var spPoint = spGSMFactory->CreatePoint(point3D);
) j1 R- f  V- w$ m2 S8 G  CATISpecObject_var spSpecPoint= spPoint;     
2 A, I' n. h2 c( L  j  CATIGSMProceduralView_var spSndPntObj = spSpecPoint;6 ~2 `0 I3 p" u! s$ ^
# t  s3 d% @0 z) [$ Z
  //*将点显示在屏幕上
" B( O( O3 J( z) }$ k( e- P  spSndPntObj->InsertInProceduralView();+ W8 i! D7 a1 A/ O' l
  //更新点对象0 ?! v5 q; t, |
  spSpecPoint->Update();
, W, q  _8 y) i- Y9 C* i 1 ^$ i4 J/ i! }) P
  return TRUE;
2 |$ c& q% z/ |( J6 u4 x}0 a9 ]8 Z2 J6 \, m! w9 b! V9 v

0 Q: ]" \8 y. a$ n! O, s9 ~7 V* P+ P/ U9 x" p+ L7 @( [( S( n! X4 `
效果如下:, i/ Q; }$ s; d7 m- T4 [( L

/ Y1 j1 ?6 K8 h3 [
6 m$ n6 R: q% o: A4 z6 i! |
" s$ U7 V8 \/ s3 [4 q
上海点团信息科技有限公司,承接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指的是什么呀4 L- Z: j; R8 H8 }" _4 f1 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二次开发专题模块培训报名开始啦

    我知道了