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 通过点击屏幕创建点

[复制链接]

2017-5-6 13:17:52 3946 0

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

admin 楼主

2017-5-6 13:17:52

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

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

x
CATIA二次开发入门教程---15 通过点击屏幕创建点
1 j. E( K, {1 n2 w通过点击屏幕,自动创建点, 这里直接建立了一个简单的对话框,通过pushbutton来添加一个回掉函数,函数里面去执行创建点的类。' f$ h, J4 r' k1 V
createPoint.PNG
. @9 ?8 s/ e/ {3 f" a! A6 \) a& Q8 N* P- r  |, h" t+ `
void DialogTesTCmdDialog::OnPushButtonCreatePointPushBActivateNotification(CATCommand* cmd, CATNotification* evt, CATCommandClientData data)
& R; T. J" J: W- Q) Z5 ?- p{- [% i7 q' e; O2 X: }/ h" I
  // Add your code here% v' X* C0 R2 E; N  R
      CreatePointCmd *createPoint = new CreatePointCmd();
! W: l2 K  z" u) A4 }! g" o. \( x; L3 q  H}
' ?" T' N6 x4 X7 W/ D3 B- r, x3 T0 m; [! l6 o5 S
新建一个catia 的命令,名称为 CreatePointCmd ,接下来要做的就是在 action one 里面进行点的创建,代码如下:
) ]7 r3 p& U' k6 _4 T. W& x
% j0 s1 x8 c3 d2 J, [CATBoolean CreatePointCmd::ActionOne( void *data )
9 L7 Q1 Y% ~. o+ S: D- M{. D5 l8 E4 K1 E; A9 q
  // TODO: Define the action associated with the transition # ^* T5 t4 n; y& O7 h
  // ------------------------------------------------------5 w$ }4 d9 P1 k4 }- R
CATMathPoint2D point2D =  _Indication->GetValue();, B7 k: T$ z* J# Q
CATMathPlane plane = _Indication->GetMathPlane();, [% C6 ]: o5 h+ b6 A: `
CATMathPoint point3D;
4 o$ [- n$ `" z  q' D: Z7 E plane.EvalPoint(point2D.GetX(),point2D.GetY(),point3D);2 D% {" H  I( {; u* P5 p
' v: o2 D* Q1 H  Y/ I' q: L/ W7 `
cout<<"Point coordinates:" << point3D.GetX() << "," << point3D.GetY() << "," << point3D.GetZ()<<endl;/ [' g* f# C5 u4 n% j( ~# d
    4 H1 [, {. R9 W. \, X! Z
  //设置Container(非根节点)8 X) I, V. d- q9 K+ ]
  //获得Editor# I) p# o' j! h; ^
  CATFrmEditor* pEditor = CATFrmEditor::GetCurrentEditor();! a% H9 e& x6 ~! r# m
  //得到当前对象的文档2 Q( p9 G! ~: P% l) ]6 j
  CATDocument * pDocument = NULL ;
2 a6 u/ ^8 C0 Y3 L  R- w5 ]  //取得当前活动对象  N; X" G+ G4 o( v
  CATPathElement activePath = pEditor->GetUIActiveObject();
& Y5 e; F& Y! B  //取得当前活动的product
* A' w5 n" `: [( e  CATIProduct *pActiveProduct = (CATIProduct *)activePath.SearchObject(CATIProduct::ClassName());
# w& _9 y' S7 d- x5 Z# s  //当前活动对象不存在
5 @, Z: w# A( r: G2 Q  if (pActiveProduct == NULL)
/ u4 q9 h; C# H  {
* y  ^: `- [2 V- B2 q; @    pDocument = pEditor->GetDocument();
$ I# N5 `( n' I  }
& [, |1 }6 ^' Z, z# D& \8 S! z  else3 d( q0 b- I0 d
  {2 J& X2 l4 y+ p, s
    CATIProduct_var spRef = pActiveProduct->GetReferenceProduct();
  _& t6 D+ g% C7 T( k    //当前对象的引用对象是否存在- F# v5 C4 S0 B$ I& g+ D
    if ( NULL_var == spRef )1 B. F' z2 Q- F+ d
    {3 K- Z- b, [! V% m
      return FALSE;, C1 U! x2 m! x$ G) V; X
    }
+ [+ Q. R% K. a: x. r    //当前对象的链接对象
7 V' k9 \. {- g# i( C    CATILinkableObject * piLinkableObject = NULL;8 ~/ }. I8 Z, X/ U- r( C
    HRESULT rc = spRef->QueryInterface( IID_CATILinkableObject, (void**)& piLinkableObject );                            # l" v3 q1 r. x, ^
    if ( FAILED(rc) )
$ f( R& }5 p4 l* c2 x5 B8 G' u# o: P    {
2 Q2 g) L! K# S0 ^" J8 J$ Q8 n      piLinkableObject->Release();
3 s+ l4 P6 F. w      piLinkableObject = NULL ;9 W' ?1 U& t' |  C, {
      return FALSE;( l$ l, Z: |7 i3 e- j; e1 B
    }
  r4 x* z& g; [. C* C    //得到当前对象的文档
) C! s3 U1 G& @2 I+ Q6 L; ]    pDocument = piLinkableObject->GetDocument();+ N/ M5 v2 `4 N5 t0 M9 g
    piLinkableObject->Release();9 i# Y) |3 f' s2 M; p
    piLinkableObject = NULL ;
' i  n  k3 M6 b+ t+ q, _    if ( NULL == pDocument)
5 K, {+ F/ u4 \    {6 n7 m; `: g$ [) A2 E4 \+ U( I
      return FALSE;
' v& X4 p# s: h4 a    }2 S: I  b! X$ t0 q
  }; C7 H0 s+ M% ]9 U2 m9 }/ U2 l0 v
  //得到文档容器集' K! o# _( z9 o  `2 l
  CATIContainerOfDocument * pIContainerOfDocument = NULL;& p: O4 s, a2 j$ r
  HRESULT rc = pDocument->QueryInterface(IID_CATIContainerOfDocument, (void**)&pIContainerOfDocument);# N8 r' F* h5 K  U% B3 Z1 n# a7 D
  if (FAILED(rc))+ o+ S; x+ ?$ P# n
  {
8 X* ?: k* X. Y4 z    //pIContainerOfDocument->Release();0 t" u/ s7 u' N, P* x* M3 U- Y) d
    pIContainerOfDocument = NULL ;5 s5 E& @0 ]( R% S" S' B
    return FALSE;
+ G! o4 F) n  _) m% q! n$ r  }
" m  ?2 Q* q+ t% ]  + B  P0 r; `' d
  //获得Document9 Y6 M# C( }3 Z/ ^7 ~. Q
  CATIContainer* _pContainer = NULL;
* Y3 o( S2 g* c7 q5 y" u  //获得SpecContainer
% e0 W0 }# a7 \  z  HRESULT hr = pIContainerOfDocument->GetSpecContainer(_pContainer);
7 q( Y4 U" F9 P/ m! s 9 ]- X8 [  x+ ^" d7 H! m
  //GSM工厂- `* J' d+ L# I* V# v3 U! g3 l
  CATIGSMFactory_var spGSMFactory = NULL_var;) M. }0 J. Y( [" T( i. ?
  //设置工厂  
- x- P0 o8 L  [! j  spGSMFactory = _pContainer;         
3 b% T  o! V3 |3 p4 r  CATIGSMPoint_var spPoint = spGSMFactory->CreatePoint(point3D);
; z& F% [( T, E0 T8 b% j% \% v  CATISpecObject_var spSpecPoint= spPoint;     
& Z3 ~  t1 _4 Q; v% A$ I" n1 B' w1 t* {  CATIGSMProceduralView_var spSndPntObj = spSpecPoint;
* {+ O4 @+ H% B) J9 ]' l. I! s) P; b
  //*将点显示在屏幕上
( r) I! t7 T3 \- G9 E. _/ c  spSndPntObj->InsertInProceduralView();
+ o0 _7 i6 d7 Y6 q  //更新点对象
* k. K* p) V) `  spSpecPoint->Update();( C% ?: h% ^* \$ q9 N8 F; ~

# E5 I" x5 ~' W8 u. I( J  return TRUE;
; @; y7 ?0 v& V0 a+ }* t3 W4 f}
9 y' T0 `2 [4 ?6 G. a) h
% z: Q. g+ G: q; ^
6 @- Q) m8 Y2 x9 u$ u效果如下:% {( h6 K4 V! {: R! k0 _
$ G; |- v$ n* v- V" Y. F2 t& e
: r' X! ~) x9 ~) Y9 u% J
/ v( [* G6 e1 C- L+ f7 l2 v
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了