PLM之家PLMHome-国产软件践行者

[原创] CATIA二次开发入门教程---15 通过点击屏幕创建点

[复制链接]

2024-6-12 17:01:01 4678 1

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

admin 楼主

2017-5-6 13:17:52

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

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

x
CATIA二次开发入门教程---15 通过点击屏幕创建点- Z3 K4 p9 y/ b+ O* p
通过点击屏幕,自动创建点, 这里直接建立了一个简单的对话框,通过pushbutton来添加一个回掉函数,函数里面去执行创建点的类。4 x. f4 n! D3 d* L6 o9 S
createPoint.PNG % L; ?7 |* m: l. l/ O" v
4 d$ m& ?; S0 f- i; S9 R/ w4 [! o
void DialogTesTCmdDialog::OnPushButtonCreatePointPushBActivateNotification(CATCommand* cmd, CATNotification* evt, CATCommandClientData data)
# ~% S& P3 b2 e) f' Q, ^( a{
/ `6 x6 l5 u  O3 z; g, k  // Add your code here
# ^) ^. \4 l' M! P      CreatePointCmd *createPoint = new CreatePointCmd();
' G' d- y- L- K  @3 g9 T}
# g6 k7 B& ]* r) I. O! m, Q
8 r5 g6 [2 r) T新建一个catia 的命令,名称为 CreatePointCmd ,接下来要做的就是在 action one 里面进行点的创建,代码如下:
# {* g3 o; B- A' D% c) k
7 A3 p: b% j1 N' y  ~CATBoolean CreatePointCmd::ActionOne( void *data )6 C& y0 d- X9 G
{
* e& F# E: V- ]  // TODO: Define the action associated with the transition
# z# J3 S8 u1 R; U" I  // ------------------------------------------------------
/ @( u6 \2 c" F CATMathPoint2D point2D =  _Indication->GetValue();& [6 |% z; O; R5 ]8 z! {
CATMathPlane plane = _Indication->GetMathPlane();  L5 S" F1 r2 W& a7 O* I5 }
CATMathPoint point3D;/ d5 @: h/ C( v
plane.EvalPoint(point2D.GetX(),point2D.GetY(),point3D);
$ [* g4 p3 f6 @, L: p. ]( V! A/ S* g4 _7 y
cout<<"Point coordinates:" << point3D.GetX() << "," << point3D.GetY() << "," << point3D.GetZ()<<endl;
5 \& w- Y1 _& h- f! m   
4 F2 t) f2 O4 `8 L  //设置Container(非根节点)
1 X9 g) d2 C7 r7 {0 q7 f  //获得Editor4 I# y& P" q2 u! _( P/ M
  CATFrmEditor* pEditor = CATFrmEditor::GetCurrentEditor();8 j% ^" c6 e  T. A9 B
  //得到当前对象的文档
4 N# ]) z: x! J# ]  CATDocument * pDocument = NULL ;
! b7 x' \9 h9 k7 l4 t( }  //取得当前活动对象6 A. Z2 I0 k4 {  s" c2 `
  CATPathElement activePath = pEditor->GetUIActiveObject();
: t8 p4 X0 x% O  Q4 ?3 R  //取得当前活动的product
0 o5 l7 Q* ~  U; E  o  CATIProduct *pActiveProduct = (CATIProduct *)activePath.SearchObject(CATIProduct::ClassName());
1 T( X) l9 Y6 w! K; r  //当前活动对象不存在
8 M+ a, A$ a; J. @1 i$ h$ {  W0 c: v  if (pActiveProduct == NULL)
- n& ]/ X2 A; S" x' H; O  {
3 W( {# J, B& T. \% h    pDocument = pEditor->GetDocument();
0 i- ?; k  J6 L' W8 p3 e& a; y  }9 {8 C" }# l' g. Q0 N8 _2 U9 e
  else* X+ m; W. m  q7 }) a( n& M0 C
  {
( f) y& O) H% L: r; Z5 c    CATIProduct_var spRef = pActiveProduct->GetReferenceProduct();3 W$ N2 ~0 M$ ^0 y: H2 a. p
    //当前对象的引用对象是否存在
( Y9 V/ ~0 n  t    if ( NULL_var == spRef )/ d9 u& P/ l# Y; n
    {- t  S& G  O% N5 r5 {, I
      return FALSE;
! b  h9 _$ ^5 U7 r, n    }4 o2 n1 c/ C0 n" D
    //当前对象的链接对象7 s3 ]8 S. z9 t
    CATILinkableObject * piLinkableObject = NULL;' L" i, V$ }* D9 c) }
    HRESULT rc = spRef->QueryInterface( IID_CATILinkableObject, (void**)& piLinkableObject );                           
4 v- O3 }- d/ M1 i8 \    if ( FAILED(rc) )
0 q, l, e. P0 I: l1 n    {* J# f' S7 Z- i
      piLinkableObject->Release();
; S: W0 p1 f5 U" {  X      piLinkableObject = NULL ;
. U7 e# c6 K; `      return FALSE;
! ?6 Z& |. H* o+ b: g( _8 ?    }
3 C& V& M8 _5 k; \& T* U    //得到当前对象的文档, h; r& q- }- s+ `2 G9 e
    pDocument = piLinkableObject->GetDocument();
5 s& J3 u4 ]+ G. J    piLinkableObject->Release();# k2 K0 g+ A7 L8 T& j& e
    piLinkableObject = NULL ;  |6 @; V9 h: d, Z
    if ( NULL == pDocument)
# c/ R) [5 ]& G    {& F$ b, ^9 s0 k1 ~, {  l4 c
      return FALSE;
" ?" @3 M7 h# T4 ~/ T  {  l    }
7 p% F2 ?0 D# v: c+ g* d/ Z/ t. J  }; Z% ?( d! j: |9 G6 O+ `" t, p' \
  //得到文档容器集' t( H5 n2 g; g
  CATIContainerOfDocument * pIContainerOfDocument = NULL;) i! F0 x9 q1 |8 M% e: g  _4 X
  HRESULT rc = pDocument->QueryInterface(IID_CATIContainerOfDocument, (void**)&pIContainerOfDocument);4 }: f( ^% G1 L  {
  if (FAILED(rc))
3 h# k) h$ m/ ~8 F  {
8 p8 U2 F- `0 g' o' ]1 i    //pIContainerOfDocument->Release();) P* G# F! w/ E# Q  d0 f% g
    pIContainerOfDocument = NULL ;+ M3 A7 L6 u: ~" D) ^: z# q" S
    return FALSE;' M- K, L7 I' t2 E5 i4 P) r
  }! {' E! q8 W3 B& N/ D
  * M7 V' y8 I+ z! [$ |. i/ l
  //获得Document
2 t' |- d; v8 u' T$ H" t2 Z  CATIContainer* _pContainer = NULL; 8 f0 Z( i% U$ M6 {8 o' J
  //获得SpecContainer
3 `" J: p2 P, j5 M( x! H  HRESULT hr = pIContainerOfDocument->GetSpecContainer(_pContainer);$ T2 ^/ Q6 }  L7 F- b1 I

& V# r( y9 y. F  //GSM工厂
& ?# I  i. M& D5 ~! ^2 C  CATIGSMFactory_var spGSMFactory = NULL_var;
$ `$ w4 W+ {  a4 I" g5 f) {  //设置工厂  
* `9 t. A! j' ]  spGSMFactory = _pContainer;         0 x' o8 [) e/ O. M  O
  CATIGSMPoint_var spPoint = spGSMFactory->CreatePoint(point3D);
* F$ F% A( @$ |2 M% {! M8 R  CATISpecObject_var spSpecPoint= spPoint;     ' \& J+ X8 M5 [9 L
  CATIGSMProceduralView_var spSndPntObj = spSpecPoint;
1 @8 ?; x% Z2 R1 @( p/ ?) f  D7 a8 t. w( n% }; e. a
  //*将点显示在屏幕上
& Z6 ~- N6 @/ q- n: U/ _  spSndPntObj->InsertInProceduralView();( h, @4 s) e1 Y/ o0 j/ d
  //更新点对象
' l3 K+ q6 t) R( a+ _: ]  spSpecPoint->Update();
6 n: Q" U% G: }* V' Q# N- s $ f- `/ }% [+ X. O! j& F9 v
  return TRUE;7 R' d  k! \+ H! P
}* ^* ^2 m* v+ z. M3 l* y

) P& e& F3 [2 X  D& a0 \8 p! W1 Z7 B$ N4 e0 h, O
效果如下:+ b+ v; ^: ]. i$ A
( y2 \$ ?" P3 E; k' w( m
2 j; z- r7 S/ q

% T" Y$ N, e9 z# c5 c
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 doTeam.tech
回复

使用道具 举报

全部回复1

onerice 发表于 2024-6-12 17:01:01

onerice 沙发

2024-6-12 17:01:01

  _Indication指的是什么呀# D# D  M! f: ^& A2 D8 c. W/ i6 B. W+ @
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了