PLM之家精品课程培训,联系电话:18301858168 QQ: 939801026

  • NX二次开培训

    NX二次开培训

    适合初级入门或想深入了解二次开发的工程师,本培训结合ufun,NXOpen C++,大量的实例及官方内部的开发技术对于老鸟也值得借鉴!.

    NX CAM二次开发培训报名 NX二次开发基础培训报名
  • PLM之家Catia CAA二次开发培训

    Catia二次开发培训

    Catia二次开发的市场大,这方面开发人才少,难度大。所以只要你掌握了开发,那么潜力巨大,随着时间的积累,你必将有所用武之地!

  • PLM之Teamcenter最佳学习方案

    Teamcenter培训

    用户应用基础培训,管理员基础培训,管理员高级培训,二次开发培训应有尽有,只要你感兴趣肯学习,专业多年经验大师级打造!

  • PLM之Tecnomatix制造领域培训

    Tecnomatix培训

    想了解制造领域数字化吗?想了解工厂,生产线设计吗?数字化双胞胎,工业4.0吗?我们的课程虚位以待!

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

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

[复制链接]

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

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

admin 楼主

2017-5-6 13:17:52

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

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

x
CATIA二次开发入门教程---15 通过点击屏幕创建点. t2 G7 L5 r1 p& x: @* }$ W
通过点击屏幕,自动创建点, 这里直接建立了一个简单的对话框,通过pushbutton来添加一个回掉函数,函数里面去执行创建点的类。0 c, c( p. v+ o, h: L& Z9 I: e  H/ Y! n
createPoint.PNG % I) Q) r4 a3 d. s7 E  @% r3 X' v

/ q* m  r! i2 H. P9 ~  g. ovoid DialogTesTCmdDialog::OnPushButtonCreatePointPushBActivateNotification(CATCommand* cmd, CATNotification* evt, CATCommandClientData data)
( i# D9 k4 v7 f- a+ [{+ {; p/ X1 u4 M$ z
  // Add your code here6 z1 x: c1 h+ C. R! E
      CreatePointCmd *createPoint = new CreatePointCmd();
0 A2 S) X/ w1 A6 A5 m8 l! k' y" ?}4 X8 L9 G6 u- s

2 D  h: y7 c! J* ?3 u* ^6 W* r6 @新建一个catia 的命令,名称为 CreatePointCmd ,接下来要做的就是在 action one 里面进行点的创建,代码如下:* C& f+ |# B+ q9 e; c3 `$ F
- o$ H0 [- I9 e" g
CATBoolean CreatePointCmd::ActionOne( void *data )9 O9 }7 [7 i' v! w, L+ T
{6 z, ^* o/ f, ^$ n5 p3 H9 I% H- [
  // TODO: Define the action associated with the transition 2 E6 ?3 a- Q/ ]/ L: M
  // ------------------------------------------------------' `2 S1 C# M- b. T- o5 w; R
CATMathPoint2D point2D =  _Indication->GetValue();( B: f2 O& l/ S0 Q. _! f
CATMathPlane plane = _Indication->GetMathPlane();
6 u! G3 C3 y; z' |9 t CATMathPoint point3D;( p. q* p: B( G
plane.EvalPoint(point2D.GetX(),point2D.GetY(),point3D);$ N' d- `$ ?- l; {8 m. H
* x$ k! E  i; ]  P
cout<<"Point coordinates:" << point3D.GetX() << "," << point3D.GetY() << "," << point3D.GetZ()<<endl;( Z  I) U8 ^5 ?0 c8 c6 F9 |3 u
   
# X+ o4 C$ X- W1 G  S  //设置Container(非根节点)
4 u9 M! b7 U$ Q! D  //获得Editor" {. x4 C* ]! i8 b; }+ C
  CATFrmEditor* pEditor = CATFrmEditor::GetCurrentEditor();# O  y& X: [5 \; p3 s2 l! p
  //得到当前对象的文档9 Q9 g( k0 I4 r& ~5 }! K
  CATDocument * pDocument = NULL ;
+ T: Y7 e  k5 S! ]# a; ]8 {  //取得当前活动对象
/ F2 x& ^+ p0 E2 j$ E  CATPathElement activePath = pEditor->GetUIActiveObject();
: P$ i) ?( [4 o' ~/ N  //取得当前活动的product
4 o' q: r  ]4 Y/ q' C3 Q  CATIProduct *pActiveProduct = (CATIProduct *)activePath.SearchObject(CATIProduct::ClassName());
1 A1 Z2 V  g$ ?$ Y: f) F$ h4 \7 J  //当前活动对象不存在2 h" O8 \; B% n0 e/ L- T8 g0 t4 p
  if (pActiveProduct == NULL)
7 I# h2 ^. H$ k% w7 p! `( g5 W- x. j  {) r% A" Y5 {3 G4 a; I+ z' ]! m
    pDocument = pEditor->GetDocument();
3 a# `3 ]" E: @5 f( ^/ w; ]  }
) x' h- I3 S$ V) p  else% G3 v3 V1 }! \; I% Z
  {2 L) l# v7 E  @& `3 }
    CATIProduct_var spRef = pActiveProduct->GetReferenceProduct();; d  `6 M6 ?7 \3 X+ Y
    //当前对象的引用对象是否存在. G* z, J4 z4 J/ l! c7 i
    if ( NULL_var == spRef )
% [5 j% G3 B: t( d8 U    {
# G( m. i) g9 }8 d      return FALSE;' Z* H: z) n9 t; v2 }2 s+ K
    }
. O+ s" f. I4 G" U, k% w3 O# h2 E    //当前对象的链接对象
! Y) p1 n% d4 l4 @) x: N# Z    CATILinkableObject * piLinkableObject = NULL;
0 W$ G5 o3 u6 x0 l$ v    HRESULT rc = spRef->QueryInterface( IID_CATILinkableObject, (void**)& piLinkableObject );                              ?1 u! U1 I, R# d
    if ( FAILED(rc) )) x" V3 m2 K& E0 o8 s1 t
    {
, u) S) J2 t4 z5 J1 a- O  g( u      piLinkableObject->Release();
* y3 f& S! K/ G3 p7 f, E      piLinkableObject = NULL ;
0 ^& c) f- P; R3 z5 U  O* H      return FALSE;7 s  J1 W( O8 Y
    }4 h9 G: H# M3 f; V5 |. m
    //得到当前对象的文档0 }9 I- j- Y, R" b
    pDocument = piLinkableObject->GetDocument();% _8 j) \4 }- _" T$ C0 Y+ q/ @# U
    piLinkableObject->Release();
( O0 y% f& \) f# ?! h    piLinkableObject = NULL ;% N/ h; o! J" S& U* c
    if ( NULL == pDocument)
0 Q  M) v3 K2 C7 t    {# t( J8 n5 O) g% V6 g4 A! E
      return FALSE;
2 o5 E/ z* @) g7 \3 g    }
0 A9 B& g. ~) X& P% g1 h  }
0 x& K3 p# O+ a( B( }% I4 n9 o  //得到文档容器集6 P0 B9 H/ {$ S
  CATIContainerOfDocument * pIContainerOfDocument = NULL;  u& s) V$ }& p  `: h) d
  HRESULT rc = pDocument->QueryInterface(IID_CATIContainerOfDocument, (void**)&pIContainerOfDocument);
4 B; Q8 ~, C  ?( e  if (FAILED(rc))
1 x) u) j5 V/ ^2 Z! H: K4 v  {0 U( Y4 n8 Z4 Y$ N
    //pIContainerOfDocument->Release();
8 u5 C/ Q1 }+ F7 I  @& V9 H    pIContainerOfDocument = NULL ;
+ f! [$ H- {( Y) Y! H  X    return FALSE;% d+ Z7 _; l% K1 _& N. m
  }
" a9 h+ y  x6 F: |5 K& i* |# J: p  
2 }; e% O' u4 j* ~- \9 r  //获得Document
. a$ a* a( r1 f, I  CATIContainer* _pContainer = NULL;
8 k1 C; Z3 }: _9 y) I* U) ^  //获得SpecContainer
' X, y5 N! |4 F4 E  HRESULT hr = pIContainerOfDocument->GetSpecContainer(_pContainer);
# l' v" p* M# h6 r3 |/ l* G4 G2 ^
6 s- u& m  k: }/ Z! j7 K  //GSM工厂8 t6 y  M+ C0 V
  CATIGSMFactory_var spGSMFactory = NULL_var;
( d( G: d2 w+ f  //设置工厂  
+ E' K( B9 Z: e& a% x+ u( p9 u# m  spGSMFactory = _pContainer;         ! I9 j, k& K6 \  U$ ]! c
  CATIGSMPoint_var spPoint = spGSMFactory->CreatePoint(point3D);
# [% l& @  {  k) Q  CATISpecObject_var spSpecPoint= spPoint;     
: S5 {, j. L/ G  CATIGSMProceduralView_var spSndPntObj = spSpecPoint;
3 J8 t& i' o2 q8 G7 L- B
( B5 {1 x& ^/ U. E  //*将点显示在屏幕上: y5 V7 k0 k( K! E% s) B  d
  spSndPntObj->InsertInProceduralView();* _  Y! R9 ~% ^: ~. Z. ?
  //更新点对象
$ D9 T# C$ ?1 _1 y  spSpecPoint->Update();
3 A4 b0 t4 S6 ?' ]% f* P
2 P* o" E7 y# C& L4 b  f  return TRUE;
0 N: N& D" k- B+ a* U}( S5 b" E+ S% t  T0 Q
4 n4 V4 C9 Q6 `2 u/ H
  D% L1 y" p- N5 f7 Q$ }/ d% _; s
效果如下:
/ p9 D& L& K: ]" B6 |& [9 {9 _9 z4 d0 k) E2 {9 {  i% \- i
  @; O9 S; b# Q- R' ~0 K

8 s9 I4 l- \# L) ^' Z, m2 M
上海点团信息科技有限公司,承接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指的是什么呀
" T. a3 z2 t6 Y. {* b5 L4 g: }  v
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了