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

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

admin 楼主

2017-5-6 13:17:52

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

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

x
CATIA二次开发入门教程---15 通过点击屏幕创建点/ `+ q9 n+ `9 O
通过点击屏幕,自动创建点, 这里直接建立了一个简单的对话框,通过pushbutton来添加一个回掉函数,函数里面去执行创建点的类。' N! e" X: n  k' M. F1 h) Z- D7 L8 j
createPoint.PNG 3 _6 }5 k! b7 w# o1 w
+ E% D. }: m5 f: Z3 K
void DialogTesTCmdDialog::OnPushButtonCreatePointPushBActivateNotification(CATCommand* cmd, CATNotification* evt, CATCommandClientData data)
  G, }: ]) @& W  A% L; o9 j5 Q- n0 V{
; o: x- d# A" c2 V& |$ \  // Add your code here
' w% T; W9 w& l0 E$ \9 g) b      CreatePointCmd *createPoint = new CreatePointCmd();) {2 K+ _4 n$ z- S7 |" F
}
2 J: J5 A/ e# E' i- N3 S8 G( o! Z) o* M, U5 L
新建一个catia 的命令,名称为 CreatePointCmd ,接下来要做的就是在 action one 里面进行点的创建,代码如下:
1 e1 M% a/ h) ]& S- p) Q& j  K0 p' x6 \9 e% n# J- G5 A. o  Z; I
CATBoolean CreatePointCmd::ActionOne( void *data )
2 c5 N5 J$ I1 q. x6 z! \{) ]  b: i" V3 r- ^. I. Z
  // TODO: Define the action associated with the transition
& }6 ]- o0 m* z8 _+ s! e9 z1 V  // ------------------------------------------------------  R& u0 k- c, d- o& w0 z7 {' P
CATMathPoint2D point2D =  _Indication->GetValue();4 o. M- Z  Q3 c% |- m
CATMathPlane plane = _Indication->GetMathPlane();6 K' [' j$ P/ k9 F
CATMathPoint point3D;; f! D2 [( [/ [  r- k! y
plane.EvalPoint(point2D.GetX(),point2D.GetY(),point3D);2 k- m6 s: L; i. k
) |* ^  A5 W* a
cout<<"Point coordinates:" << point3D.GetX() << "," << point3D.GetY() << "," << point3D.GetZ()<<endl;7 r# c- k/ F' P9 I4 l1 P
      H  r' L2 I( D  {
  //设置Container(非根节点)
5 O! B1 x* T/ P6 E# i, l( z0 L; G* u  //获得Editor8 i# K! x8 q! Y9 r$ D) J5 F
  CATFrmEditor* pEditor = CATFrmEditor::GetCurrentEditor();
* \# g- o. D$ l* Q  //得到当前对象的文档' i1 C! ^# z# [: I/ Z
  CATDocument * pDocument = NULL ;0 g! E4 q! `( v- Y2 s" L. S
  //取得当前活动对象" n. _0 v" y; w2 c8 r  F9 ~/ M
  CATPathElement activePath = pEditor->GetUIActiveObject();' ?5 T8 k. N! G
  //取得当前活动的product' x# P/ O! j- Z  F5 @
  CATIProduct *pActiveProduct = (CATIProduct *)activePath.SearchObject(CATIProduct::ClassName());
$ n: g' F( t: m# |& w  //当前活动对象不存在
; b* Y, X) K4 J+ n1 d; i: O: o  if (pActiveProduct == NULL)
' B7 P& j& Q$ @9 j: o! N+ X% V  {, I* z. o- b1 g' k4 i
    pDocument = pEditor->GetDocument();
0 \) c: I1 @- h% d, }- m% k  }
! P# d  W* x  b; |+ u2 P, M  h  else
0 P( z* ^0 o, X# [( M; G! g# z  {
9 }0 U) s& s, \0 K2 }6 L    CATIProduct_var spRef = pActiveProduct->GetReferenceProduct();
7 l5 v% S$ n1 E6 w, G    //当前对象的引用对象是否存在3 j, c. F. T6 F
    if ( NULL_var == spRef )$ o9 c$ ~: b. [9 q' z
    {. F" N$ k2 K; W9 C( l
      return FALSE;
) x9 U' A1 E% d3 F    }
0 t; w4 l! V' N* S    //当前对象的链接对象6 D; M' _' f- k9 q" @
    CATILinkableObject * piLinkableObject = NULL;
0 J5 M7 F0 M# R0 L  z: I, \    HRESULT rc = spRef->QueryInterface( IID_CATILinkableObject, (void**)& piLinkableObject );                           
8 s6 Z+ G+ o: R+ @    if ( FAILED(rc) )7 f, d0 G* q/ K5 Y
    {% L" ^" Q3 w! ~+ _! F
      piLinkableObject->Release();4 v' ~5 o& t7 s4 W# F
      piLinkableObject = NULL ;
0 B- I4 d$ ~6 n: n7 C      return FALSE;
% O% Y  w1 ?) @2 c" y9 Z    }
/ l  s+ ~% \+ X* s% f    //得到当前对象的文档
( {: o( o; Z  @    pDocument = piLinkableObject->GetDocument();" t, S# q( [* P* a- p
    piLinkableObject->Release();$ A4 m5 _0 i; J7 c) X. J1 k
    piLinkableObject = NULL ;! P! g4 U2 q$ W8 |  F, D3 w! E) U
    if ( NULL == pDocument)
" `" c+ d1 P7 g    {
" e  r+ Y, _5 Y) l, t2 O      return FALSE;$ x, X( W, @3 B" S# Z2 r
    }
/ _* |. I3 H8 Z: z  }
0 e: N3 ?" Y# ~/ ]' Y6 k/ c$ l4 D8 y  //得到文档容器集# U$ E! b! X+ Y" a
  CATIContainerOfDocument * pIContainerOfDocument = NULL;
- p* T4 ?5 }' v; {1 z& X( H/ T  HRESULT rc = pDocument->QueryInterface(IID_CATIContainerOfDocument, (void**)&pIContainerOfDocument);
9 J. J$ @$ K/ |7 s! w2 I1 R  if (FAILED(rc))
0 e( `, J% S7 p  {# O' M2 [. F7 @- R% O5 _  z4 j
    //pIContainerOfDocument->Release();
1 X  Z% A* V: m! G* q  l0 I    pIContainerOfDocument = NULL ;3 k0 B# U; G; B- e4 x% z! g
    return FALSE;: m' l1 D3 W! H2 T& U/ v
  }
4 p# C( i2 @; r3 _7 H( r( c! @, ~* {8 }2 l  
7 W+ R. {# @) r2 R9 v  //获得Document
7 L8 B+ s+ t, m) B& S/ V. G* v: J  CATIContainer* _pContainer = NULL; ! _8 K, F9 D) j- I, G3 d
  //获得SpecContainer
' \/ K3 ^( ~) i2 s- S( y  HRESULT hr = pIContainerOfDocument->GetSpecContainer(_pContainer);$ f, w2 N- V( {- c
7 o% A" a7 v- x. I6 l' U, Q( ?
  //GSM工厂6 o+ L9 v' K3 s- r
  CATIGSMFactory_var spGSMFactory = NULL_var;
% n1 d$ }9 ]5 E) V# o  //设置工厂  
3 f- D( [  W- p% |! U! x. p6 ~5 |  spGSMFactory = _pContainer;         9 u) L* r$ O$ `
  CATIGSMPoint_var spPoint = spGSMFactory->CreatePoint(point3D);
+ X2 F4 `  g3 `2 w7 d9 k2 J  CATISpecObject_var spSpecPoint= spPoint;     0 g3 Z  p9 Z; l2 T1 v
  CATIGSMProceduralView_var spSndPntObj = spSpecPoint;! |+ o- e8 L# \
  F- q0 d. s% Q8 m' [% c  c8 m) j5 C
  //*将点显示在屏幕上( m3 L- I2 q3 G7 Q
  spSndPntObj->InsertInProceduralView();
0 m; K. }" ]/ S4 D, x0 S& ?  //更新点对象
; K+ _6 B3 h: l& h0 l7 ^  spSpecPoint->Update();
0 f" {3 D( _  Z' \9 o
" d. C7 x! t, F- V& u1 S  return TRUE;
/ {- W! o0 x# B* a( M}* |' L' }, }3 d$ X, C8 m

; e# |/ _- g6 G: ?5 B, D: n1 W; J' B; q2 A; E. N. F
效果如下:) w! e$ _# m- I1 ]
3 A% P* e4 c6 I9 r( l( ?  b' C' L

4 C5 N1 T7 ]' u* `4 |! \+ @& N+ U9 A. e
上海点团信息科技有限公司,承接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指的是什么呀1 V# P7 ]& [; g9 b7 k) K" I$ ?& Y
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了