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

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

admin 楼主

2017-5-6 13:17:52

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

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

x
CATIA二次开发入门教程---15 通过点击屏幕创建点
( u6 O8 @8 O. s( l  ?; C) }通过点击屏幕,自动创建点, 这里直接建立了一个简单的对话框,通过pushbutton来添加一个回掉函数,函数里面去执行创建点的类。1 H1 \4 b; P# s
createPoint.PNG
+ q' u1 @2 x0 L* h3 i" l: x; O3 j, m7 q* a6 I
void DialogTesTCmdDialog::OnPushButtonCreatePointPushBActivateNotification(CATCommand* cmd, CATNotification* evt, CATCommandClientData data)3 m9 `* W* G7 T8 U, p! W/ x
{
) P0 g/ k% I1 r% Q7 Q' L  // Add your code here; H% P% G# V6 R1 }
      CreatePointCmd *createPoint = new CreatePointCmd();
5 y) ^+ K- N7 Y$ J, D0 W2 `2 A}
. `' x( Q5 w# a/ F5 F  t8 P
! o0 u4 F7 T. u# a& I& C% \9 I/ A新建一个catia 的命令,名称为 CreatePointCmd ,接下来要做的就是在 action one 里面进行点的创建,代码如下:
& N6 @8 }% ]0 j1 v  @
# G0 b  ?6 ]( W% F' H: @CATBoolean CreatePointCmd::ActionOne( void *data )% F' m4 [7 o% a) K# o5 T
{* m' Q; G7 l: D9 a6 C7 A) G! p
  // TODO: Define the action associated with the transition
9 V. B: M: A5 @/ l+ P  H% H  // ------------------------------------------------------( Z7 g# L! X) M! M1 Y) c
CATMathPoint2D point2D =  _Indication->GetValue();9 d3 B( k9 r8 }3 y- l! e
CATMathPlane plane = _Indication->GetMathPlane();& C1 J' {* ?+ R) z
CATMathPoint point3D;: [, o: a0 l& i( B/ K, h. R# b
plane.EvalPoint(point2D.GetX(),point2D.GetY(),point3D);
5 p- ^7 W! n0 J" a* U+ x: H. s8 X. a& s  R
cout<<"Point coordinates:" << point3D.GetX() << "," << point3D.GetY() << "," << point3D.GetZ()<<endl;4 |8 X: l6 B' b0 E, ^. Q
      F' ]3 b; I4 |; m( b) z+ m7 N* a
  //设置Container(非根节点)
2 z6 W( H/ P; v  o/ b; j  //获得Editor
7 E  V* E. x$ n  CATFrmEditor* pEditor = CATFrmEditor::GetCurrentEditor();
7 P9 k' Y& c5 l; X; W  //得到当前对象的文档) j# [. S5 M1 o# u$ q: b
  CATDocument * pDocument = NULL ;1 \4 ]0 Z' p( m, }# n
  //取得当前活动对象
9 K6 e" t8 T0 G, h2 q% H7 O  CATPathElement activePath = pEditor->GetUIActiveObject();
% |# ]2 M: ?' o1 z4 N( F: w  //取得当前活动的product
# I1 z+ X% l) o- V  CATIProduct *pActiveProduct = (CATIProduct *)activePath.SearchObject(CATIProduct::ClassName());
2 I# \9 j2 K6 }+ ?: G$ b# k  //当前活动对象不存在3 Z# Z" G: k& @& s9 ?% V
  if (pActiveProduct == NULL); E! A7 p  O* C+ q: D
  {
- F# v7 v, L. U- M! s    pDocument = pEditor->GetDocument();: i% t4 ?( q9 U0 s7 x0 c6 j
  }
( o7 U& d( ^  C4 H, D2 ]  L  else' ]6 d7 B: K; b; n7 @* T; T9 t% h
  {* T/ h4 j9 P: k) `+ ?% C' V
    CATIProduct_var spRef = pActiveProduct->GetReferenceProduct();
% u5 J$ u, M- W& V) x+ J    //当前对象的引用对象是否存在) o; z/ |. x( ?! Q. b) ?/ U
    if ( NULL_var == spRef )
: F$ J# H& ]# J, e2 f3 Y    {
, H  p* L: o: c& u0 q( H: b: G      return FALSE;( P! m: O# R% Q# P5 y9 G
    }
% f# n. Q* R. N4 K  x! f* B    //当前对象的链接对象4 ]& V# O& t. l
    CATILinkableObject * piLinkableObject = NULL;- u& \( Q8 s! P( p) N0 _2 `
    HRESULT rc = spRef->QueryInterface( IID_CATILinkableObject, (void**)& piLinkableObject );                            % U" N" N* c0 F2 U2 D
    if ( FAILED(rc) )
+ P2 @8 z; A0 u- g1 S, R    {
+ A- {& I9 u) F( t1 j5 k* M      piLinkableObject->Release();
; e+ x0 q# ~+ N, t" o" ]# y      piLinkableObject = NULL ;7 D: P) l. E% H' y4 l2 a
      return FALSE;
$ B9 h/ m& G$ w# j& D4 J* C% U6 q4 j    }
; B5 y# d3 {/ x; V) r9 Q    //得到当前对象的文档" m# L4 X" N( k6 K
    pDocument = piLinkableObject->GetDocument();
/ r) ~2 R& v9 F1 b    piLinkableObject->Release();7 |% S" s! r9 O6 B% g; ]
    piLinkableObject = NULL ;
9 `$ l% w: w4 z2 g# r4 p    if ( NULL == pDocument)
- V' T" [( m1 T% b    {
$ X# u" r: q  r' W      return FALSE;" J& h, K/ y' q* f, J$ _; ~. J
    }& e$ D! \+ A% M% i3 A' P
  }
; K2 m6 v5 k- J5 \/ J: r. O  //得到文档容器集
3 J8 U) g0 z0 y" y/ l  CATIContainerOfDocument * pIContainerOfDocument = NULL;5 b9 L6 x( ~' c- l) ~
  HRESULT rc = pDocument->QueryInterface(IID_CATIContainerOfDocument, (void**)&pIContainerOfDocument);
% W) Z- E+ N2 o* v# V  if (FAILED(rc))" m1 H: c  t+ |
  {" a% Q1 [; i% q8 ~
    //pIContainerOfDocument->Release();& O! X7 f7 J# p% Y9 h4 G& `, G, S. B
    pIContainerOfDocument = NULL ;
; H2 G& l7 E0 E- H    return FALSE;
" D( Z) L  z/ J/ V7 Q$ P  }
" M- R; N) q+ e! Z$ T( _  
7 C0 c7 y+ v/ C, g; [  //获得Document
3 K( M6 C( h7 J0 Z+ m  CATIContainer* _pContainer = NULL; - O- _" M9 g0 H1 C$ g% j7 S  q
  //获得SpecContainer) |# V4 h6 E9 H
  HRESULT hr = pIContainerOfDocument->GetSpecContainer(_pContainer);0 d4 x3 Y. f. W- _$ u& M: j, ^

- i# |( L" I6 k6 y  //GSM工厂
6 c9 F. V$ e( D) n- \  CATIGSMFactory_var spGSMFactory = NULL_var;2 C6 ~. J  ]+ {. T
  //设置工厂  4 C2 K/ u% r& T6 W" x6 k8 P  E
  spGSMFactory = _pContainer;         ! q: G9 E; h5 [3 F4 ?
  CATIGSMPoint_var spPoint = spGSMFactory->CreatePoint(point3D);
7 d9 _! E" C! D* ^/ u+ m  CATISpecObject_var spSpecPoint= spPoint;       g& v3 k1 H! n6 }3 ]2 c  d
  CATIGSMProceduralView_var spSndPntObj = spSpecPoint;
; y0 J. b/ r" z  @* _2 x' e" c7 W; q) I( S  V& I
  //*将点显示在屏幕上6 ?" ?5 e5 l* |$ ]* @/ G
  spSndPntObj->InsertInProceduralView();# j, t! }+ h& K5 E! k  m
  //更新点对象
  N* y; Y2 N- J0 q  spSpecPoint->Update();
, C& s* b5 j) v7 q+ x" q) O( A ! b) v: G; q/ e3 |
  return TRUE;
* d8 x/ [- \0 o( k) Y. r) i}1 f) G1 C' H5 X. t& L, W2 ?: |2 Z

* S0 O# o4 G% E" W) \+ O! d$ m, y) r4 T2 U* o+ d
效果如下:+ y8 t! n8 t4 D8 `9 p. O3 B% H: F
% j6 w, @+ U' g/ t1 M( _2 s. a
7 H% z8 S7 O- s5 g' f
0 j$ i  i7 _- O3 u0 R0 i5 H
上海点团信息科技有限公司,承接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指的是什么呀( K) U7 I5 g6 }4 z$ 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二次开发专题模块培训报名开始啦

    我知道了