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

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

admin 楼主

2017-5-6 13:17:52

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

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

x
CATIA二次开发入门教程---15 通过点击屏幕创建点5 _3 b: Q) E, n; r4 u" H- A
通过点击屏幕,自动创建点, 这里直接建立了一个简单的对话框,通过pushbutton来添加一个回掉函数,函数里面去执行创建点的类。
) Q* P) ?7 Y9 L/ V  j createPoint.PNG 8 r, Z/ N9 c; V
0 H5 V7 O2 C7 S/ r
void DialogTesTCmdDialog::OnPushButtonCreatePointPushBActivateNotification(CATCommand* cmd, CATNotification* evt, CATCommandClientData data)
, G& u" G. }4 P) c  d0 \2 {% P: J{! i- e& w& \- |! Q1 _
  // Add your code here: G* {. U" h8 S
      CreatePointCmd *createPoint = new CreatePointCmd();
; P7 x8 U( Y  i. _3 z}: D7 n( {# B1 {* S- d9 r" v

! n& U4 g0 T1 X( w; V1 P8 k新建一个catia 的命令,名称为 CreatePointCmd ,接下来要做的就是在 action one 里面进行点的创建,代码如下:
, G( |' H3 C* v5 o# T9 w
4 |- J' G( f' L" `& A. _8 sCATBoolean CreatePointCmd::ActionOne( void *data )8 M7 ^2 B* i% ^: m/ h" j
{
5 z2 F, a% [8 ?6 m$ T  // TODO: Define the action associated with the transition ( m' u5 u2 U+ {' W- ?/ ^* C6 o
  // ------------------------------------------------------7 @) ~; {9 Z/ W6 j2 L! P
CATMathPoint2D point2D =  _Indication->GetValue();
% x* V. V& f: L' x; ~4 w CATMathPlane plane = _Indication->GetMathPlane();
' A5 d+ s2 Q2 e" ~% U) M  G CATMathPoint point3D;6 C1 o# W" l0 e
plane.EvalPoint(point2D.GetX(),point2D.GetY(),point3D);5 Q/ Y8 U. m! ~( k) ]! f
' M  ?6 z& U. \/ {& D
cout<<"Point coordinates:" << point3D.GetX() << "," << point3D.GetY() << "," << point3D.GetZ()<<endl;* B2 q4 V' w# D
    0 x3 u. R& Z' w( d0 ~, O/ n+ k
  //设置Container(非根节点)
' d$ \, \( ]0 ^. U* ?  //获得Editor0 a5 t' R) p# W" a& W" U
  CATFrmEditor* pEditor = CATFrmEditor::GetCurrentEditor();$ F% d/ I& g, j0 k* X
  //得到当前对象的文档
& Y0 ^; a* R2 E, S  CATDocument * pDocument = NULL ;4 \, v/ z, }/ a9 m+ Z* M
  //取得当前活动对象
" g; e6 K% C; [0 N( W  CATPathElement activePath = pEditor->GetUIActiveObject();
3 B6 x3 _+ ?1 y0 @+ \  //取得当前活动的product) I8 x' f8 X1 |: M
  CATIProduct *pActiveProduct = (CATIProduct *)activePath.SearchObject(CATIProduct::ClassName());' a# x$ g3 g) _* m
  //当前活动对象不存在: z4 P( @2 \( _7 _
  if (pActiveProduct == NULL)
5 W2 {& z! K& L9 |1 j8 P  {8 Z& `& {) [. P. \/ @, Q* Q# k
    pDocument = pEditor->GetDocument();5 Q8 l4 U4 m5 P2 l% X" u, Y; T4 D
  }0 z9 l* D8 U5 o4 V+ C* F
  else
3 S( ~& a- T# i+ M; B  {1 l- T0 D& h( H8 H3 \# x9 n' g. o& y
    CATIProduct_var spRef = pActiveProduct->GetReferenceProduct();& r- }* t- g& h( ?, k# j/ s1 q
    //当前对象的引用对象是否存在
/ w! H& t- m# \6 w    if ( NULL_var == spRef )
/ i2 |: J% {4 `8 n3 \. o8 _    {9 G# c, m# Z1 F, Q( f% q- X
      return FALSE;# `$ @/ J& B5 l. Y
    }
& I; a8 J2 F9 _5 H7 Z3 o) e4 d- R    //当前对象的链接对象
9 z. |5 q. c6 G& Y7 S. s& q8 P# G    CATILinkableObject * piLinkableObject = NULL;" I+ w- D- Y9 {- Y9 ~
    HRESULT rc = spRef->QueryInterface( IID_CATILinkableObject, (void**)& piLinkableObject );                           
7 W9 w  n( P! E5 P" @: ~$ }* u9 }    if ( FAILED(rc) )
( h- F+ m, R7 c1 C* |5 E    {
, O- g# P0 k% ~      piLinkableObject->Release();7 Q/ f5 ~4 w; M' R  y2 m
      piLinkableObject = NULL ;
. y& G: F4 Y+ P6 k0 O, r; d      return FALSE;% \! e% Q) y7 w& H
    }) T; E! H2 N3 Y  l; t
    //得到当前对象的文档# i; `+ a' J) P! w8 q6 @7 B. |3 R
    pDocument = piLinkableObject->GetDocument();2 R: d/ r/ O( W2 B
    piLinkableObject->Release();
9 J0 p  H7 U$ A9 G- g: d- w4 s    piLinkableObject = NULL ;
( v  P3 E0 a- `1 O, Y$ ~* T- N    if ( NULL == pDocument)/ |8 R8 N; Z2 |, w! d% Z: f
    {
0 _+ g$ e# s3 M/ O- h      return FALSE;& F% C$ i3 J: r$ f2 r2 O
    }
4 h$ Y( m0 t8 {: i  }3 M6 [% r; ^. E+ q2 ]( k% x
  //得到文档容器集
6 A8 J! B- N7 C2 T2 J  CATIContainerOfDocument * pIContainerOfDocument = NULL;
- v( Z- d" e* G( D) {  HRESULT rc = pDocument->QueryInterface(IID_CATIContainerOfDocument, (void**)&pIContainerOfDocument);
0 Y: g0 p, u: x9 ?+ H2 }  if (FAILED(rc))1 }4 }. v) T. a3 w
  {
3 J& @- ~0 J4 f    //pIContainerOfDocument->Release();& l8 m! r* D; w% g' C
    pIContainerOfDocument = NULL ;
# M, q$ c# D) H, @    return FALSE;& ^" c3 y1 W! @+ D# Q
  }1 z' t# P* o$ X2 e3 l" W
  
' m' C; [4 {& C0 C  //获得Document9 }. w9 h( _  F% @
  CATIContainer* _pContainer = NULL;
. |8 z) A% |" q7 t2 e  //获得SpecContainer# ?2 U: ^( H" F2 K' @
  HRESULT hr = pIContainerOfDocument->GetSpecContainer(_pContainer);
0 }0 w: \* r1 r4 G/ V9 i
4 t1 A0 q) Q" b1 e: A; X  //GSM工厂8 K( a( a1 [- O4 O' `/ D9 z
  CATIGSMFactory_var spGSMFactory = NULL_var;
$ j. J& u- y4 E5 ~, ~  //设置工厂  : }  F: O$ ]% U$ ?4 |, n6 Q5 [5 v8 A2 Z
  spGSMFactory = _pContainer;         - j+ c8 G, _* t6 B9 t7 F; r
  CATIGSMPoint_var spPoint = spGSMFactory->CreatePoint(point3D);/ s+ T& y) K# D2 q
  CATISpecObject_var spSpecPoint= spPoint;     3 O% |9 r7 i: x: b
  CATIGSMProceduralView_var spSndPntObj = spSpecPoint;
. n5 O8 a- d' l$ ?! [" X3 s  k% V
% g  K6 k1 Z7 _0 ^, i  //*将点显示在屏幕上
& ^) {# G1 D2 k; I0 A% d% P  spSndPntObj->InsertInProceduralView();
; P' t/ L2 @! e# A  //更新点对象
4 v+ y4 @& P$ s  spSpecPoint->Update();' h8 o+ Q2 W5 a$ x* M% k/ N

( t" Q9 S9 e9 j$ T  return TRUE;
' Z& \6 N  c& x! m4 Y: H7 w1 Q4 Y}) M3 Z: N2 v* a5 o5 k1 y
  ^+ N$ y2 Y" W5 ?' ]+ i: y7 V

: g5 Y" k+ ?  Y1 o, ^效果如下:, s8 n" a; y& l( a- u
- n6 E+ R1 k+ o
/ O2 e9 B* w  `0 V; }

4 A+ p8 }' u* I# b" _1 }: x
上海点团信息科技有限公司,承接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指的是什么呀
; O/ \" t; N, B1 v! t
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了