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

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

admin 楼主

2017-5-6 13:17:52

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

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

x
CATIA二次开发入门教程---15 通过点击屏幕创建点& q/ r" z' H" [6 f
通过点击屏幕,自动创建点, 这里直接建立了一个简单的对话框,通过pushbutton来添加一个回掉函数,函数里面去执行创建点的类。  E) N* b$ Q) ^, }1 o1 d
createPoint.PNG ! k2 j0 t0 g1 d
* o- ?3 {2 y  w& N8 C
void DialogTesTCmdDialog::OnPushButtonCreatePointPushBActivateNotification(CATCommand* cmd, CATNotification* evt, CATCommandClientData data), X9 U, g. q: N7 y
{  z, {3 C- l$ w! ?9 |( @
  // Add your code here
# @) g3 w% V& S. @      CreatePointCmd *createPoint = new CreatePointCmd();
" Z$ j7 w+ ~3 m+ h" A}
' X1 M1 b+ s3 D6 Z0 p3 d& j" _/ }  D, p5 v; l" a
新建一个catia 的命令,名称为 CreatePointCmd ,接下来要做的就是在 action one 里面进行点的创建,代码如下:1 G  Q6 h" o4 }- m
  ?3 \) J" z7 y9 W8 d. i; S) N
CATBoolean CreatePointCmd::ActionOne( void *data )
0 n  h7 u: \7 R  m! x0 N5 a{
! ~5 j' N: N# _; y! X2 \) c  // TODO: Define the action associated with the transition
! B- q3 G& J. M/ b! |9 I  // ------------------------------------------------------$ ~8 ]) `. t" l* O" T
CATMathPoint2D point2D =  _Indication->GetValue();
3 N3 [9 Y4 }% ~ CATMathPlane plane = _Indication->GetMathPlane();' l% e# F( W& E2 i
CATMathPoint point3D;
! n4 C) X2 ?' _" x! K" ~3 ~ plane.EvalPoint(point2D.GetX(),point2D.GetY(),point3D);
! [2 y* c4 K, p! |, l4 u6 d) L! e( |; Q) B3 X' c/ E3 Z+ \: r
cout<<"Point coordinates:" << point3D.GetX() << "," << point3D.GetY() << "," << point3D.GetZ()<<endl;
: j1 n1 w; a. U1 {; `    2 G: v% ?% c( I! W, r
  //设置Container(非根节点)3 _" F/ a" }$ R, k' L: \
  //获得Editor
+ @0 j2 r3 ^, o# U* F  CATFrmEditor* pEditor = CATFrmEditor::GetCurrentEditor();% @* g6 f( M( {  C* j
  //得到当前对象的文档! V8 m# N7 k& j/ q8 \
  CATDocument * pDocument = NULL ;! n7 R+ ?! C3 Z
  //取得当前活动对象) U; V9 b& F/ ~4 y" J
  CATPathElement activePath = pEditor->GetUIActiveObject();! i' o9 a- _3 P  w8 G/ H
  //取得当前活动的product
* f: O. o+ b4 H0 b; S! p- }. k2 Z: u* e  CATIProduct *pActiveProduct = (CATIProduct *)activePath.SearchObject(CATIProduct::ClassName());
& C1 W5 J7 Y+ G+ j, {) X1 R! F  //当前活动对象不存在
# @9 P2 \$ Q, V8 p  if (pActiveProduct == NULL)
7 l0 D* d, E9 D' G& R5 l% q/ l  {
/ u, e; V7 Y. R  b- B/ ]    pDocument = pEditor->GetDocument();# Y) N/ y$ X+ g5 C; s
  }" B  g2 _# y7 p, b; S
  else
( N5 c/ {8 s$ y" u9 C& V) E  {
, O) X$ b  [8 P1 \! ~7 \    CATIProduct_var spRef = pActiveProduct->GetReferenceProduct();
7 T1 ~# J2 ^% {  h    //当前对象的引用对象是否存在( h/ b$ R  h) n7 a, W
    if ( NULL_var == spRef )% T; H$ p; `( M+ d7 y
    {
7 {5 U" r1 }" e  J      return FALSE;
  t1 q: \& W' r; }    }$ n6 I2 b6 u* j0 b, F+ m
    //当前对象的链接对象. E+ e2 m. d' U1 K- ?
    CATILinkableObject * piLinkableObject = NULL;- m- s) I% M& E( r4 \
    HRESULT rc = spRef->QueryInterface( IID_CATILinkableObject, (void**)& piLinkableObject );                           
5 Z" {9 r/ e& C3 a- o5 ^    if ( FAILED(rc) )/ p6 i3 u' a: t; p/ p
    {
  G9 o% z! }' h) g, e5 }      piLinkableObject->Release();
; S" H+ v9 o2 g% u4 j: y; G      piLinkableObject = NULL ;
/ b6 {6 I, C& ~' ~5 z7 ?      return FALSE;
' M" z) y* {2 `    }( P& N. |! {  g( U7 F) D! G, u2 |
    //得到当前对象的文档% q. Q6 }. F- y
    pDocument = piLinkableObject->GetDocument();
1 H  e. h+ o- j* a  m    piLinkableObject->Release();
3 D1 w8 F# {  [& m, m/ T/ {6 L    piLinkableObject = NULL ;
! C6 j$ T: @0 O9 g; F    if ( NULL == pDocument)
5 W: ]* ^7 m! Q# w( }0 F* k    {
" j% `1 g9 i' }# F" L! X      return FALSE;; l: _; |5 u6 B8 ]# R
    }0 v" E  \, k' _
  }  b3 I9 ?3 B6 E
  //得到文档容器集
" w% k# I2 H* _6 e2 |/ G! G4 Y  CATIContainerOfDocument * pIContainerOfDocument = NULL;  h. }9 [, b! G: f0 k6 X( ?' @
  HRESULT rc = pDocument->QueryInterface(IID_CATIContainerOfDocument, (void**)&pIContainerOfDocument);# M  t8 r& v0 s" P3 z
  if (FAILED(rc))
  o) q- U$ @, k  {
$ d$ j4 |0 O: D    //pIContainerOfDocument->Release();
) u3 w4 |. r! t6 z5 r. D2 J5 d) E    pIContainerOfDocument = NULL ;
4 l9 E1 O' R; A/ {    return FALSE;9 m) k8 e6 o+ J' l$ D. x
  }9 W& p% W0 l+ a% c7 }- e9 I
  ( u% d8 T7 \, Y' c! o, s% U
  //获得Document
# w$ @- T/ N1 ~4 i2 Z' x* g  A0 W. H8 F  CATIContainer* _pContainer = NULL;
1 a6 h! I. t7 U4 X0 \% @  //获得SpecContainer
' Y6 K0 @* C- ^: v* d  HRESULT hr = pIContainerOfDocument->GetSpecContainer(_pContainer);
2 H% y* p' Y( m3 V  C: e
# N! H7 p; d7 ^' f  //GSM工厂
, H1 E* P' H5 D$ ]! U( W( Z! p; L4 [  CATIGSMFactory_var spGSMFactory = NULL_var;
8 ]$ ]/ F+ a# b( M  //设置工厂  * O, e1 z  V2 ~5 Y. ~- P
  spGSMFactory = _pContainer;         
5 y6 i, B  Q. W; w  CATIGSMPoint_var spPoint = spGSMFactory->CreatePoint(point3D);
, k  `- S/ }$ I! i5 p  CATISpecObject_var spSpecPoint= spPoint;     
- h! T7 J3 r6 e& e- V! `- m# {  CATIGSMProceduralView_var spSndPntObj = spSpecPoint;
& u# C0 ~) `. m7 g6 Q0 d) ~. m$ s" W; C, ]2 d2 j2 E+ @
  //*将点显示在屏幕上
" `8 V; Q4 P! K3 }1 n  spSndPntObj->InsertInProceduralView();5 @+ `) Y4 k2 R* s8 O: h8 b
  //更新点对象) K, R, T8 z' s
  spSpecPoint->Update();+ b; g  X2 Z7 F8 `5 E# t
0 @' }9 [1 D! g- b* ?* e
  return TRUE;9 V  X- ~/ ]9 i* N( I' i
}: c! [( W4 Q3 `; @* Q! c
6 v% n2 h: A" C4 H- s% g- F6 K

" D: g6 `2 D/ b8 }% V' G% O效果如下:: S3 P* V3 ^, O, c1 x
# a9 J2 @( o" K: {* P
8 m! J1 }4 [; o: _# a$ ]7 u
1 b5 P8 l/ H% G2 K$ ?$ F
上海点团信息科技有限公司,承接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指的是什么呀
6 L1 W+ s. y# X
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了