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

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

[复制链接]

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

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

admin 楼主

2017-5-6 13:17:52

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

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

x
CATIA二次开发入门教程---15 通过点击屏幕创建点+ |5 R) J, i" t* Q, D
通过点击屏幕,自动创建点, 这里直接建立了一个简单的对话框,通过pushbutton来添加一个回掉函数,函数里面去执行创建点的类。7 D& |5 ^2 X& o3 E3 p
createPoint.PNG
0 ^' Q* _8 g. ~! _5 P3 G  a$ Z  I
: y: U8 W# F  nvoid DialogTesTCmdDialog::OnPushButtonCreatePointPushBActivateNotification(CATCommand* cmd, CATNotification* evt, CATCommandClientData data)
3 y" ], R0 n9 a' M4 F- m{" i7 g3 ~* @  {2 ~8 j' z, R) ~
  // Add your code here" w* Y3 T" P% T; e! L. E- ]
      CreatePointCmd *createPoint = new CreatePointCmd();
6 w6 v8 I* J0 D) Z}( J- Y1 n# c. H- |! y! _" z

% u- r* q9 J( e新建一个catia 的命令,名称为 CreatePointCmd ,接下来要做的就是在 action one 里面进行点的创建,代码如下:
, v7 H7 ?7 P- [- R8 ?& q; n! B
" \+ [. y, L- {* TCATBoolean CreatePointCmd::ActionOne( void *data )$ V! _6 L! u6 \, j
{
0 o6 F( T' e' p* S0 z9 m" q. J  // TODO: Define the action associated with the transition 5 u1 ^+ ^+ I2 i
  // ------------------------------------------------------6 y. G, N6 R9 U2 M6 D4 o
CATMathPoint2D point2D =  _Indication->GetValue();
* z4 V2 ]- u6 s. B4 | CATMathPlane plane = _Indication->GetMathPlane();
$ A. s8 q( T% M6 T7 ~. R2 E0 P* c CATMathPoint point3D;+ _& X$ b, L% Q- V' X+ g
plane.EvalPoint(point2D.GetX(),point2D.GetY(),point3D);3 z: A- Y! e7 \' ^9 V

$ f5 C/ ?2 [* J' r: g* S* R cout<<"Point coordinates:" << point3D.GetX() << "," << point3D.GetY() << "," << point3D.GetZ()<<endl;( [: F- B/ C7 j$ g/ X$ j5 b
   
; i. d* k9 Z1 ?. n% R  //设置Container(非根节点)5 k: e/ w9 D+ J) C5 }" e# ]
  //获得Editor
- ?3 w  f9 m5 M5 N* n  CATFrmEditor* pEditor = CATFrmEditor::GetCurrentEditor();7 w7 B7 L& J+ U  U2 w
  //得到当前对象的文档# F2 @7 s2 ]# a( l6 T
  CATDocument * pDocument = NULL ;, l  |: N( g7 G: [+ }
  //取得当前活动对象
$ U/ U" m. O' w8 c  CATPathElement activePath = pEditor->GetUIActiveObject();7 H! ]) J9 y5 f2 q
  //取得当前活动的product
, R! E# [5 }* ^: U" V0 }  CATIProduct *pActiveProduct = (CATIProduct *)activePath.SearchObject(CATIProduct::ClassName());
, H5 h" d5 O1 \' Z7 B6 i  //当前活动对象不存在0 t' Q& e( D+ d% o
  if (pActiveProduct == NULL)2 g6 I" o$ D/ s7 J+ U9 J$ E
  {4 G3 P9 S1 s0 |4 _4 i9 y! R
    pDocument = pEditor->GetDocument();
2 S( W2 \4 o6 e" Q1 _  }
2 G; H- r, [- p8 ~2 l: i. J% ?: n  else( s2 a* e9 L6 p$ _% n0 M6 q
  {: ^) q- T* B5 _# p3 I
    CATIProduct_var spRef = pActiveProduct->GetReferenceProduct();9 c8 g" ~) M' o3 V7 V) ~
    //当前对象的引用对象是否存在
, y4 \8 c/ r; Q8 f. t    if ( NULL_var == spRef ), u  j9 t6 {  m" R' |2 J9 ^7 }6 l3 p: i
    {4 u' G2 h  v* a1 b/ W, t( C
      return FALSE;
0 Y9 i# d: F, J+ j; u& {1 K0 z6 E$ }    }: b; W5 q. P& e8 P$ N8 X2 _
    //当前对象的链接对象; v# T$ ~% d9 d! D" G
    CATILinkableObject * piLinkableObject = NULL;
9 |( N% I4 j) M+ q% u& w0 m& ^' {    HRESULT rc = spRef->QueryInterface( IID_CATILinkableObject, (void**)& piLinkableObject );                           
1 W, _; T9 j+ r9 t7 S8 t8 A    if ( FAILED(rc) )
9 b$ i4 P0 ^* |- ~7 _    {( L) k+ u2 `+ y$ b, r+ n9 P& o
      piLinkableObject->Release();! ]3 n1 _) c* J! o- y6 o1 S
      piLinkableObject = NULL ;3 r( O, Q+ I, y4 R3 m
      return FALSE;; _( |3 b* X1 A6 u( u
    }5 o; [5 g3 p: T
    //得到当前对象的文档
6 b4 `2 b. x9 e% j& i+ L5 ~    pDocument = piLinkableObject->GetDocument();* y6 R# X; r0 ?& N' K$ e& {* v! d. W4 p
    piLinkableObject->Release();5 N' Z; N3 p; ?- `4 c
    piLinkableObject = NULL ;$ f# _- _" g' T, J8 L- f$ Y- d
    if ( NULL == pDocument)
: K: L: }9 K0 \; x    {9 s' l- h# I. n$ H  V1 v
      return FALSE;6 H, Q5 E! L, P. ?" r) x$ {
    }: _+ N0 i" x7 v+ C
  }4 Z9 v& v- a5 r9 N
  //得到文档容器集
3 ]& B$ Z* L3 A3 D2 w9 w  CATIContainerOfDocument * pIContainerOfDocument = NULL;
0 H5 V" X% Y5 a5 w  HRESULT rc = pDocument->QueryInterface(IID_CATIContainerOfDocument, (void**)&pIContainerOfDocument);
3 y9 Z" _$ `2 S) L& g: S9 P  if (FAILED(rc))# C8 X* P% Y* M: i
  {
  g% _* L+ F! i( Q- T    //pIContainerOfDocument->Release();
. J# J- I# n% Q/ k- W    pIContainerOfDocument = NULL ;
6 Q; y! ]; Q7 f4 I0 j8 t; O    return FALSE;
! z) c: y# C# t5 r  }
+ F3 D9 _, v# w% y& ]  ! R" l' [# @( U0 Z. b  Y! k
  //获得Document) M6 w: S( F: z
  CATIContainer* _pContainer = NULL;
& A( s1 C  F" X  e. I  //获得SpecContainer3 j8 X% w/ {9 b* A( Y; T  ~* K( C
  HRESULT hr = pIContainerOfDocument->GetSpecContainer(_pContainer);* o) g9 d/ \  ?% ], U, ]

" G! {4 O% A4 M; u3 d& l* h  //GSM工厂# l! }$ H( e  U6 W8 [! O6 I
  CATIGSMFactory_var spGSMFactory = NULL_var;- N. f* P3 b( z- i! m
  //设置工厂  
5 e8 ~1 g0 z, A# A/ G4 P  o  spGSMFactory = _pContainer;         ) h/ o5 V. m% [9 X( c& x2 W/ T
  CATIGSMPoint_var spPoint = spGSMFactory->CreatePoint(point3D);7 Z0 U& ~% o- U: f" D
  CATISpecObject_var spSpecPoint= spPoint;     . P% z3 }, ^# o  x4 j" l4 {. B; n1 i+ [
  CATIGSMProceduralView_var spSndPntObj = spSpecPoint;/ ?  A0 v% R/ S3 y  q
" W# z- U6 l/ g  Q8 J7 G8 _; q0 z
  //*将点显示在屏幕上
1 T& A, f! K( _; y0 M# q" D  spSndPntObj->InsertInProceduralView();1 w4 n% k: O* b2 h
  //更新点对象
3 \9 |* D! t: F) c/ J. l5 E  spSpecPoint->Update();
% l% t# ~5 J6 {
; d  m% L$ l+ R* w# j  return TRUE;  w6 r: g; B7 H  F4 Y
}
6 Y2 |* k6 E9 p$ w  T' a
7 S# J8 G+ e1 Y
3 Y: t/ k' d& H( ?2 v* k' X效果如下:
: e" }, e1 \0 G
5 T/ k+ w7 ~( ~+ I) V4 p; }9 \3 E# l/ A) B  e2 \
. L4 s1 ]; X8 H1 L: _4 k( H2 N
上海点团信息科技有限公司,承接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指的是什么呀
; }, v2 d3 E  L4 P! s" ]$ ?3 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二次开发专题模块培训报名开始啦

    我知道了