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

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

[复制链接]

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

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

admin 楼主

2017-5-6 13:17:52

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

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

x
CATIA二次开发入门教程---15 通过点击屏幕创建点
) J( `& e; g6 U& u# X& W! K通过点击屏幕,自动创建点, 这里直接建立了一个简单的对话框,通过pushbutton来添加一个回掉函数,函数里面去执行创建点的类。! |3 \5 u, ]3 T2 M, @% z, o3 B2 l( W
createPoint.PNG
- i. H2 ~0 t3 H) b1 }
. i- h9 Q7 {* V! ?7 R" ivoid DialogTesTCmdDialog::OnPushButtonCreatePointPushBActivateNotification(CATCommand* cmd, CATNotification* evt, CATCommandClientData data)1 r% P! t7 y) X% y2 }  M" ^6 N0 n) I1 U
{
1 C& A% z5 Q: M9 @$ e7 t  // Add your code here5 K- o6 N$ E$ C  j! h
      CreatePointCmd *createPoint = new CreatePointCmd();1 L( q; X/ K: {0 |; T! d) w
}
& |" u: |' x+ r. Z
1 T$ K8 l/ [, W4 K0 k9 {$ W9 `新建一个catia 的命令,名称为 CreatePointCmd ,接下来要做的就是在 action one 里面进行点的创建,代码如下:; w9 P! E1 P! d4 S
* j: y6 A8 Y) t- a% H
CATBoolean CreatePointCmd::ActionOne( void *data )
# n5 `: P. a0 x. R{
9 Z" K. c! q' M0 x( H+ A. A" P; z  // TODO: Define the action associated with the transition " @1 H' ]( [2 d  F4 {
  // ------------------------------------------------------
! }6 Y) s" O; L2 k CATMathPoint2D point2D =  _Indication->GetValue();' k. a# L( ~7 O1 y% b
CATMathPlane plane = _Indication->GetMathPlane();# J5 ]- B1 E* n
CATMathPoint point3D;
' m1 F) \3 `! t3 i plane.EvalPoint(point2D.GetX(),point2D.GetY(),point3D);6 K9 Z2 X2 h; E# E. X! k, L( g" C

1 X- d5 g7 S0 m: O cout<<"Point coordinates:" << point3D.GetX() << "," << point3D.GetY() << "," << point3D.GetZ()<<endl;
  G  L8 d/ d& l/ d5 a   
" K. q2 D% i, p# S9 _, o1 D6 }& j  //设置Container(非根节点)6 L0 g% o) f9 ~; Z: v" e% K
  //获得Editor1 o* ?5 ^8 i5 }- J& s, w# {1 ^2 i$ x
  CATFrmEditor* pEditor = CATFrmEditor::GetCurrentEditor();
# l( s+ {( @: [; M2 Y* B0 @6 S  //得到当前对象的文档+ z6 K' d5 g1 N# j
  CATDocument * pDocument = NULL ;
% {' z/ l  `7 I& I  k$ D2 h  //取得当前活动对象* t7 w, f$ O% }
  CATPathElement activePath = pEditor->GetUIActiveObject();3 n- b% V. u( ~6 @, v9 t+ F! q
  //取得当前活动的product
' y0 F: i; y% s  CATIProduct *pActiveProduct = (CATIProduct *)activePath.SearchObject(CATIProduct::ClassName());
, p. h- y( U5 }; K# f  //当前活动对象不存在& W( s* m# E. A1 L/ s# X* L
  if (pActiveProduct == NULL)
) g* V; q8 L" g7 Q  {
- _% m/ ^! W2 Y6 g    pDocument = pEditor->GetDocument();
" X  H/ z8 F3 M' k* o, p  _, a  }6 `) O2 p6 Z' a9 n" ]
  else
: P( ~* _2 s3 f; X, I3 }. v: P0 S  {
3 v1 d! B6 l( x1 i# @& R* [    CATIProduct_var spRef = pActiveProduct->GetReferenceProduct();
; E  t- `! o) b& f    //当前对象的引用对象是否存在
+ E" Z% k& t( P4 s9 ?/ `8 X    if ( NULL_var == spRef )! o- W8 C6 T; h7 [5 x
    {9 i& r+ Z. v+ ]5 v: s9 N
      return FALSE;
& m- o2 k  j) A    }, Q0 `7 l/ [7 K5 c( j6 \
    //当前对象的链接对象
2 z( d2 q# v" z/ `) \. [5 X) q    CATILinkableObject * piLinkableObject = NULL;
& X8 R4 g+ |4 f7 p4 B0 ]( _    HRESULT rc = spRef->QueryInterface( IID_CATILinkableObject, (void**)& piLinkableObject );                            9 }% j) h# H; ]! Y
    if ( FAILED(rc) )
9 G. N1 g# a; F: y( @9 e  ^; _    {. T# w$ \  d' e' |* P# j3 z
      piLinkableObject->Release();: [/ @  Y4 k$ ^3 m! C
      piLinkableObject = NULL ;/ r+ [) W: ~4 w/ T' l. ^2 O* i% X4 O. H
      return FALSE;8 e* C: Q- Z) P" |3 f6 c
    }
8 `: E: x. D0 u: V" S0 l    //得到当前对象的文档
% l* Z- H* V7 N/ D4 t    pDocument = piLinkableObject->GetDocument();
, O' x$ [: i0 l. G  `) W+ F6 z    piLinkableObject->Release();
9 d, c5 \. _. g, x9 g    piLinkableObject = NULL ;, f' S& p7 w) ]7 w: m6 x6 R, I$ H# T5 x
    if ( NULL == pDocument)& M! c0 F, l8 |" s* R/ r
    {6 G; U6 F# `. Q5 K, A+ |! n1 v
      return FALSE;% C8 z7 B6 T. I% A
    }
( a; S" Y* P$ n) E& p  }" @$ x, ^4 k0 t* y
  //得到文档容器集1 t: b. j# {! F
  CATIContainerOfDocument * pIContainerOfDocument = NULL;* _" r0 _/ C% W: K) A% I# c
  HRESULT rc = pDocument->QueryInterface(IID_CATIContainerOfDocument, (void**)&pIContainerOfDocument);/ m5 s  p& J" q' V
  if (FAILED(rc))! ]  c" W" g5 ]+ x# V6 C& L5 [, G% h
  {
: O1 U; R1 |4 J4 h- x0 `    //pIContainerOfDocument->Release();
" v2 S  v' V% E) \0 D1 K* U7 ^    pIContainerOfDocument = NULL ;7 l# X3 c3 r6 N; [
    return FALSE;
8 f3 S4 W0 H" i+ C! g  }/ U( C  L$ Y7 C6 L
  . ^/ ]4 ?" h$ [" g# h7 [) d
  //获得Document
# O- Q- a! U5 ?! g3 W4 B  CATIContainer* _pContainer = NULL; 9 N! A# a: D! K
  //获得SpecContainer
; p9 h5 Y  P# Z1 w0 a+ l  HRESULT hr = pIContainerOfDocument->GetSpecContainer(_pContainer);
2 l# }- T  ~. c/ T7 Z3 i+ n
5 L9 G0 T/ h' t1 A  //GSM工厂
% [+ u, l* z( Q! t( Z0 F! Z  CATIGSMFactory_var spGSMFactory = NULL_var;8 H3 n5 T- L* \  r6 U( m  v- y
  //设置工厂  
  m9 t* y- j' l- p6 K5 Z" ^$ _  spGSMFactory = _pContainer;         
% s0 K) G# `& R9 w, y$ C3 x1 U( X  CATIGSMPoint_var spPoint = spGSMFactory->CreatePoint(point3D);1 [: b. B- L( r" y
  CATISpecObject_var spSpecPoint= spPoint;     
7 @$ f: |) e/ {1 b# Q  CATIGSMProceduralView_var spSndPntObj = spSpecPoint;& A+ G( X' b: o8 Q! y
( R/ }4 y8 }# `7 m% z
  //*将点显示在屏幕上$ N% J9 y+ i/ O4 x9 B" l9 \$ N
  spSndPntObj->InsertInProceduralView();+ y* x; ?" p& N8 p
  //更新点对象
! n  e: W) b$ ^/ d& y4 v4 q  spSpecPoint->Update();
: u& z* S$ [: f# v" d& V0 c # Y4 u* [* ]: Q8 \: i
  return TRUE;4 p9 s; U0 g/ V! w
}
1 k; V9 ~. |" ]
! E6 X% g+ V, T) n' z0 r, L$ M' e
3 b* l% w: Z4 o1 o. l效果如下:
2 K) w) `) S# l0 A, h
  u; L& X% [# u" S* P  ?
3 N% A5 }: A# C) J. C
" [, A7 a0 R$ w0 M+ |! j2 B
上海点团信息科技有限公司,承接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指的是什么呀
' u- B/ B: i) T6 K. \% U# @. u4 m$ ~
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了