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

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

admin 楼主

2017-5-6 13:17:52

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

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

x
CATIA二次开发入门教程---15 通过点击屏幕创建点
; H0 q. s' ]0 U$ q2 `通过点击屏幕,自动创建点, 这里直接建立了一个简单的对话框,通过pushbutton来添加一个回掉函数,函数里面去执行创建点的类。: [$ \- k3 f7 b* A. A) l
createPoint.PNG
- E0 v& M0 K, T. f' n
# l" r; }/ R4 P3 j- ^7 a. A8 Yvoid DialogTesTCmdDialog::OnPushButtonCreatePointPushBActivateNotification(CATCommand* cmd, CATNotification* evt, CATCommandClientData data)
' S! G4 t* e6 s{) H- e4 K# ~! N7 U) I
  // Add your code here6 X' r' G. H0 Y9 \2 ^
      CreatePointCmd *createPoint = new CreatePointCmd();4 _- d/ P$ w- B* S3 m/ {
}
: s1 D0 U$ e% h* b
4 ]. d) `2 f# D1 i7 R- z新建一个catia 的命令,名称为 CreatePointCmd ,接下来要做的就是在 action one 里面进行点的创建,代码如下:
* V2 `" i3 W% M5 W/ u( h. M# D* \, c& K- q# p6 m( B: _# z0 Z. m
CATBoolean CreatePointCmd::ActionOne( void *data )7 w1 `# D2 _3 `0 R% j8 n
{
9 F5 V' l* O. h& R' k& ?  X& ?8 M$ N  // TODO: Define the action associated with the transition / {* t) P0 D" f2 D; h( j7 ^7 G
  // ------------------------------------------------------* z5 ]' R6 J  ~: j/ J1 U6 K
CATMathPoint2D point2D =  _Indication->GetValue();
* Q% x7 d( Y2 ~  _/ l CATMathPlane plane = _Indication->GetMathPlane();6 s7 E6 Q1 }2 G" d4 r
CATMathPoint point3D;: y1 j* w1 z- x& z
plane.EvalPoint(point2D.GetX(),point2D.GetY(),point3D);
  d1 \1 D6 F0 A$ @7 p( p2 Y( u
- k9 p6 Z2 j1 i  B: h; G' W cout<<"Point coordinates:" << point3D.GetX() << "," << point3D.GetY() << "," << point3D.GetZ()<<endl;0 I2 ?- R+ c3 f* y
    6 n" T+ Z$ o& l  F
  //设置Container(非根节点)9 m' E$ b2 a4 \7 ~
  //获得Editor
/ s$ M& K5 T: t: u5 u( ^, F  CATFrmEditor* pEditor = CATFrmEditor::GetCurrentEditor();
1 s) `; N( k' A( ?# Z( }) m  //得到当前对象的文档1 j3 S' _% A( R2 }- ?
  CATDocument * pDocument = NULL ;
# S' A5 h% ~1 D0 M& K% g  //取得当前活动对象
* K( J! ^/ T: O# d! u' [% U, u  CATPathElement activePath = pEditor->GetUIActiveObject();
3 @( u# E8 {! y4 w  //取得当前活动的product( S) J  J* I8 P% i
  CATIProduct *pActiveProduct = (CATIProduct *)activePath.SearchObject(CATIProduct::ClassName());3 c; {( Y1 k( W+ C1 q: r
  //当前活动对象不存在
! c( J/ |) ]& @  if (pActiveProduct == NULL)2 u$ B9 ]3 f7 h+ C) G
  {) `2 ~- p; M* F6 M3 N
    pDocument = pEditor->GetDocument();6 k9 _5 E* P  @; f1 D4 T
  }
+ v* l$ W8 s( C% ~0 z  else) l3 T/ c7 q  K8 c; ~3 g3 h' Y3 ~
  {7 m$ n$ V! ?4 d$ J
    CATIProduct_var spRef = pActiveProduct->GetReferenceProduct();' n! n) K  |. A3 h0 G2 v2 C$ O7 q
    //当前对象的引用对象是否存在+ c) q: }  _! ?; E3 J
    if ( NULL_var == spRef )
: ]0 X4 r- i2 l; G* `    {! \9 f& G  k1 ]$ L7 `* K
      return FALSE;5 p8 T7 i, r* f3 ^
    }9 n" Y4 v5 K3 E0 X2 n5 h# N
    //当前对象的链接对象
9 l; c, w# J7 S- ?$ K    CATILinkableObject * piLinkableObject = NULL;' F# |9 Y4 p. O+ C+ B/ P
    HRESULT rc = spRef->QueryInterface( IID_CATILinkableObject, (void**)& piLinkableObject );                           
9 x, T; G3 S/ u8 q1 o% ]    if ( FAILED(rc) )! p1 T9 S0 a$ I, k/ Y2 Y) ?
    {
  H) F0 J/ `) \      piLinkableObject->Release();' u# [; d4 G4 w- F% ?
      piLinkableObject = NULL ;! U3 e8 V" n7 s
      return FALSE;  w# d. W% N0 d; M; E
    }. i$ D9 n9 r0 U3 `
    //得到当前对象的文档
2 u& g2 n3 X$ K2 z8 F) z' g0 f% C    pDocument = piLinkableObject->GetDocument();4 d+ V8 L' n) ]- b/ e  v* L  V
    piLinkableObject->Release();
5 S3 H3 D" q4 N0 V$ b: e    piLinkableObject = NULL ;
& w& V0 x" T& V& J    if ( NULL == pDocument)
+ Q1 D4 F6 H# n+ r0 e    {0 h0 P- E7 k$ O: Y; x* \: W
      return FALSE;
/ E- Y( T$ B8 a# F$ p    }
5 B% e! L/ g( H" u  }
3 W2 ~1 n6 d& W% m: n: o+ L8 `7 ~  //得到文档容器集3 b+ P: Q, R/ M# V1 j: o
  CATIContainerOfDocument * pIContainerOfDocument = NULL;
1 m' I0 b( U5 \. q  G* q$ `  HRESULT rc = pDocument->QueryInterface(IID_CATIContainerOfDocument, (void**)&pIContainerOfDocument);4 u' W: U" J: h6 \% T) N
  if (FAILED(rc))0 n* n: K8 q; L+ T  k
  {
! q! Z& h# P: a) r9 N& s: x    //pIContainerOfDocument->Release();5 ]$ Q4 _( H- n* I2 K0 w2 [
    pIContainerOfDocument = NULL ;
9 A; J2 X: i3 f, c) T2 e    return FALSE;$ Y* g. b, J4 ]
  }1 Y* Y' \" o$ H/ a% y) O( a; w
  & ]5 L2 {6 b. z5 u
  //获得Document+ O$ F" \3 X7 {' _, b+ t' Q2 x+ b
  CATIContainer* _pContainer = NULL;
3 r# A* `4 o& m$ Z  //获得SpecContainer
" Y$ ~3 u- j. D6 g6 W  HRESULT hr = pIContainerOfDocument->GetSpecContainer(_pContainer);
; Z$ P1 L4 X7 w- q4 |; M
5 f7 K- A& T3 l( |9 e  //GSM工厂
2 |: M2 N, V7 D( Q$ B, C- Z$ f) S  CATIGSMFactory_var spGSMFactory = NULL_var;
: z2 J8 h1 K) L: y1 X6 b9 E4 d  //设置工厂  5 |; Y8 a. q1 [5 q
  spGSMFactory = _pContainer;         2 T" E8 }& t9 l6 Z
  CATIGSMPoint_var spPoint = spGSMFactory->CreatePoint(point3D);$ v/ G) a- K8 z) d
  CATISpecObject_var spSpecPoint= spPoint;     
) E2 v4 H2 {# c7 n  CATIGSMProceduralView_var spSndPntObj = spSpecPoint;6 t+ m4 p0 v+ C* X4 J% z% H; j

4 b3 k2 u- `6 k$ z' k( J  //*将点显示在屏幕上' @' J4 ~9 g% c9 P
  spSndPntObj->InsertInProceduralView();
* G/ D  b6 O6 J4 {, w" J  //更新点对象7 P" B- J# c3 w" d$ Y" e: {& r
  spSpecPoint->Update();3 J; l: c& C  L: |% k# U5 Y

) m1 b7 \8 }. J! ]* H  return TRUE;
& T8 b- X  d+ o, d+ u% d- [" n1 c. ]}
% v" N3 Z3 {+ X: L
5 n/ R  q/ a! S5 y2 D- Z5 T) W! R1 D9 C2 Z$ r" x
效果如下:
1 {+ F# ~8 P- k' ^  x: V2 b7 u+ P% d% S

: m* x( \+ J5 s7 `, `6 ?" W
$ p0 m2 m3 u# K# j% e. L" i
上海点团信息科技有限公司,承接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指的是什么呀  e+ V+ H. W9 R  y1 j
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了