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 4467 1

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

admin 楼主

2017-5-6 13:17:52

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

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

x
CATIA二次开发入门教程---15 通过点击屏幕创建点
  }" A" c* [# j6 e  v6 ~% e通过点击屏幕,自动创建点, 这里直接建立了一个简单的对话框,通过pushbutton来添加一个回掉函数,函数里面去执行创建点的类。" G* ]6 {" h6 `0 X- w. D- o
createPoint.PNG 2 U* b* |! h5 g: V; C% E
% t" T! u9 M2 M# b& _) }( h
void DialogTesTCmdDialog::OnPushButtonCreatePointPushBActivateNotification(CATCommand* cmd, CATNotification* evt, CATCommandClientData data)
) m9 [/ C4 j# K. M{* O4 L. f9 {% q. k+ N/ g) e% r4 w
  // Add your code here
- }$ u7 V( T' L8 g* E4 c      CreatePointCmd *createPoint = new CreatePointCmd();
7 r1 {* W; Q5 B! g7 P6 P0 v  s* n}
5 w! P1 u3 D" d; y/ \5 x- e; |2 P" |+ N' G3 E1 Y5 i
新建一个catia 的命令,名称为 CreatePointCmd ,接下来要做的就是在 action one 里面进行点的创建,代码如下:. y8 I3 D! `% {8 A+ W. j6 V4 z

' ?- k+ b4 `# _CATBoolean CreatePointCmd::ActionOne( void *data )" s( h/ y/ J/ g* b! Q4 z
{
1 ?: \( ~% j( f& L  // TODO: Define the action associated with the transition
5 u/ Q, D0 i# [. x7 }+ A# `  // ------------------------------------------------------/ m9 P* ~2 V3 k% B: p* X, d- j
CATMathPoint2D point2D =  _Indication->GetValue();3 n* j' `* \% u! e
CATMathPlane plane = _Indication->GetMathPlane();9 k1 z8 Z0 a4 p7 ]% [- K" D
CATMathPoint point3D;: T1 ~$ x6 Y3 X7 ^% r4 N, g/ g2 B
plane.EvalPoint(point2D.GetX(),point2D.GetY(),point3D);
1 w  o7 B/ W! w, o' l! Q/ L/ s3 q1 W$ P3 `
cout<<"Point coordinates:" << point3D.GetX() << "," << point3D.GetY() << "," << point3D.GetZ()<<endl;8 o) I" ?0 d7 k2 @1 D1 \7 q1 a
    * N/ d, L5 M7 T; W
  //设置Container(非根节点)
5 W+ e: j" |/ {" K+ n  //获得Editor
4 E, N2 ~6 _1 M/ b  CATFrmEditor* pEditor = CATFrmEditor::GetCurrentEditor();* f) i1 m/ N  M* F( J+ [
  //得到当前对象的文档
' \+ I/ `* g) h3 j: m, G+ C  CATDocument * pDocument = NULL ;
' s- M* d1 R. R9 L  //取得当前活动对象
" P" \9 _, M3 n. D' m) ^" L% t  CATPathElement activePath = pEditor->GetUIActiveObject();+ R; X" `2 |  C( k2 m# p+ k
  //取得当前活动的product
# G# W3 q, q  F2 ~/ J" U  CATIProduct *pActiveProduct = (CATIProduct *)activePath.SearchObject(CATIProduct::ClassName());  }# X. b) s+ G9 S8 @% Y* H
  //当前活动对象不存在
0 N6 T, \! P9 f7 u. Q' p& V; ^  if (pActiveProduct == NULL)
% Q4 v. D1 e: q  {4 m9 D( ?$ w0 C! U
    pDocument = pEditor->GetDocument();9 T9 ]) h3 J! s
  }4 V9 G, D% x# ~; }7 g! l
  else
, c# R% u# h4 }0 b  {7 y; g+ Z4 y# W2 w% E/ m* I
    CATIProduct_var spRef = pActiveProduct->GetReferenceProduct();
* q3 U9 F* j! v+ e; V    //当前对象的引用对象是否存在0 {/ }3 T+ {7 |% D2 @$ ?3 b
    if ( NULL_var == spRef )( l  a/ ]+ c8 @, L& U+ u  [% p
    {
* Y0 @/ v0 G' y% [# C; Z; r6 U, i      return FALSE;
  m% L( X3 s- n, ~1 J& ]    }8 [* B) H) W5 _
    //当前对象的链接对象9 O, a# O0 y/ Z4 B& o
    CATILinkableObject * piLinkableObject = NULL;
- S, c# d0 ~7 a8 T$ E    HRESULT rc = spRef->QueryInterface( IID_CATILinkableObject, (void**)& piLinkableObject );                            3 w  E% p; g. y1 ^6 Y, [& B
    if ( FAILED(rc) )+ s% U! E7 O4 l9 V
    {
5 f' {- v4 K3 z+ M1 ?5 T7 `3 a' K      piLinkableObject->Release();
" g# E5 m2 ~1 G  z! Q9 Z, \  j' M      piLinkableObject = NULL ;
# n4 H' E' H1 q2 L! C      return FALSE;
( V7 M8 k. `4 y# O0 V! _/ M. g( i    }
/ d+ z/ f' Z* e, A    //得到当前对象的文档# K# ~6 _+ C2 Y5 o
    pDocument = piLinkableObject->GetDocument();
+ o3 C* p. @' V7 q- C* l9 P    piLinkableObject->Release();
& V. `. s5 F9 T8 v8 B. `1 r: ?    piLinkableObject = NULL ;
) K6 ?# [' s% W1 u    if ( NULL == pDocument)
; ~0 y% x( ~+ W$ S' x7 {% C    {/ r' p' X! o7 r" S) l$ Y
      return FALSE;7 ]3 X5 y) e) d  d
    }
! S& w9 T5 p) u# ?  }' O0 T2 Q1 l2 t/ _
  //得到文档容器集
3 W4 c) E6 p9 {! x2 M; }  CATIContainerOfDocument * pIContainerOfDocument = NULL;& e& t' s1 P8 q0 Q; @
  HRESULT rc = pDocument->QueryInterface(IID_CATIContainerOfDocument, (void**)&pIContainerOfDocument);
2 m" r% `5 e/ F. u7 L' R+ z4 s1 B% L1 q. g  if (FAILED(rc)): k+ j, w2 G* Z# Y3 j* C4 l' h7 Q
  {
( |. |, H* @! P6 }. [1 n* X    //pIContainerOfDocument->Release();8 S/ F  D- A  r& B# w+ {, S
    pIContainerOfDocument = NULL ;
4 H* T8 S- g& \7 B/ {0 L9 J% m0 z) c    return FALSE;
# q/ r  S8 O, m  }, c! r& u6 _4 o% {
  
' {7 `* K7 {# ]/ T# @/ u. O9 Z, U  //获得Document  a) Z2 e# u6 S! l# |- p
  CATIContainer* _pContainer = NULL; ; q1 e- {2 ^  _' j( Z
  //获得SpecContainer
& K5 X: b  `' F& j3 J& M/ }  HRESULT hr = pIContainerOfDocument->GetSpecContainer(_pContainer);& o- t6 V. V  l$ r: ]: y
1 q. Q! z+ u, i& N
  //GSM工厂
+ C0 m2 w6 b9 J- c+ D) s  CATIGSMFactory_var spGSMFactory = NULL_var;* f( @  ?. `8 b
  //设置工厂  
# p6 T0 c& H( a( b  spGSMFactory = _pContainer;         ' k  |# W' ?5 i% E0 R7 B! H
  CATIGSMPoint_var spPoint = spGSMFactory->CreatePoint(point3D);7 l) h: M) m) J$ @7 l+ C5 n
  CATISpecObject_var spSpecPoint= spPoint;     0 g5 E* q8 i1 y
  CATIGSMProceduralView_var spSndPntObj = spSpecPoint;+ k8 M$ g" Z/ V- [2 ?6 f. B

7 ^% m1 W, e" R7 y  //*将点显示在屏幕上
6 D+ |5 B0 y0 Z$ @2 ^  spSndPntObj->InsertInProceduralView();
  O1 ]! w9 m) M5 H* N  //更新点对象
9 w: q( N2 x0 O4 h/ J/ h: y  spSpecPoint->Update();
6 Z% g; t! |8 {2 @( z0 w 8 J5 F6 K4 h. t- u$ U
  return TRUE;
" M+ n1 t0 Y3 ]" C}
  U5 \5 i. B: E1 H7 r
2 J" R5 O  W- _. N2 E* X& H$ k- L9 x9 @% G# p5 o
效果如下:
7 O# E, C9 Q" i; Z3 F
. U# U6 D% N6 U; W) m/ U1 e; V! s1 [, x
$ G( g' Q' V& V% v( t* |% d
上海点团信息科技有限公司,承接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指的是什么呀  u* z3 \3 X3 I1 a- t* K5 g$ t2 L
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了