PLM之家 UG NX10.0二次开发(ufun和NXOpen C++)网络培训火热报名

PLM之家-上海点团信息科技有限公司工业4.0数字化软件官方知识管理平台

查看: 851|回复: 0

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

[复制链接]
  • TA的每日心情

    昨天 19:55
  • 签到天数: 78 天

    [LV.6]常住居民II

    1834

    主题

    3495

    帖子

    5万

    积分

    管理员

    PLM之家mildcat

    Rank: 9Rank: 9Rank: 9

    积分
    56754
    发表于 2017-5-6 13:17:52 | 显示全部楼层 |阅读模式
    CATIA二次开发入门教程---15 通过点击屏幕创建点0 r* u! {" R6 Y( E
    通过点击屏幕,自动创建点, 这里直接建立了一个简单的对话框,通过pushbutton来添加一个回掉函数,函数里面去执行创建点的类。8 l8 l$ W2 I: x8 J, P
    createPoint.PNG 0 C9 P7 T0 |( d6 m# o6 W

    - w4 `* B: `! G+ _! q8 g5 k9 n) {void DialogTesTCmdDialog::OnPushButtonCreatePointPushBActivateNotification(CATCommand* cmd, CATNotification* evt, CATCommandClientData data)
    1 H/ a- j# _0 }9 O  N{
    * _6 L6 e. g$ H" O: F  // Add your code here
    : ^3 v) [" ~; z9 m& u0 {- P$ G      CreatePointCmd *createPoint = new CreatePointCmd();# k% k$ j$ C. D3 ~) r$ E
    }$ ^& _  i, P& `4 ]7 [; m7 S

    : I  r8 Q/ [; U) H* u' v新建一个catia 的命令,名称为 CreatePointCmd ,接下来要做的就是在 action one 里面进行点的创建,代码如下:
    + b/ S7 d0 G( _
    5 M$ _2 P" V+ g3 w7 jCATBoolean CreatePointCmd::ActionOne( void *data )
    2 F8 r; E( C& D& C+ U& ^6 f{
    & ~- c, v3 C0 D8 w2 Q/ p3 R  // TODO: Define the action associated with the transition   X: T# @* [& O! S( z0 i1 T) m' o0 U
      // ------------------------------------------------------! ~( }+ J, z7 C1 e1 q
    CATMathPoint2D point2D =  _Indication->GetValue();
    # d* Q2 _( q- P9 f  {& P CATMathPlane plane = _Indication->GetMathPlane();
    : ]  x8 r' T  a$ |' F CATMathPoint point3D;
    + J+ u/ {7 N, }! \" r+ D! l! J, O plane.EvalPoint(point2D.GetX(),point2D.GetY(),point3D);6 q, U( D9 S0 u0 }
    * O. Q/ p  N6 W6 i( r5 U. q4 s1 x
    cout<<"Point coordinates:" << point3D.GetX() << "," << point3D.GetY() << "," << point3D.GetZ()<<endl;5 |3 I' X. c6 j* K2 A
        3 k& l$ S; |% T/ s! ^( x1 Q& ~
      //设置Container(非根节点)+ b$ W; E/ e: N+ m/ i7 C; Q" d
      //获得Editor( g8 G! j$ n' \" P4 b
      CATFrmEditor* pEditor = CATFrmEditor::GetCurrentEditor();. U5 L/ m0 i, a
      //得到当前对象的文档
    1 p1 h6 z: f2 _( Q% n  CATDocument * pDocument = NULL ;4 S7 B4 q6 p. f; b' h% Y* r1 A
      //取得当前活动对象
    , w9 y2 W* M( m# u3 H. `  CATPathElement activePath = pEditor->GetUIActiveObject();1 l/ l; v$ p: i8 ~
      //取得当前活动的product
    1 ?; }+ j8 w9 t1 j- f  CATIProduct *pActiveProduct = (CATIProduct *)activePath.SearchObject(CATIProduct::ClassName());, y& X) A1 ~! u; R, g. Z
      //当前活动对象不存在
    - S0 i0 a* o* D5 ^$ ^3 `5 D  if (pActiveProduct == NULL)
    ! [% F: h$ @) O, D2 v  {; n  `! w) k* a" G. H
        pDocument = pEditor->GetDocument();
    $ r  P/ J# R4 n  }/ r" n! K2 G. D3 P5 M1 M. \
      else  P% p) [& O% C& {5 a7 G8 z3 X7 N
      {
    4 Z1 w) q) I/ Q5 B* V    CATIProduct_var spRef = pActiveProduct->GetReferenceProduct();
    * K0 o  b' Z, Z% E3 r    //当前对象的引用对象是否存在
    9 E  x( g  M( \. Y; k& c; W1 ]    if ( NULL_var == spRef )- g; W/ Y# Z0 r  W' ?8 X: `& d
        {
    1 y9 b1 e7 R2 d. B      return FALSE;0 e! J! q9 k0 q' D. l7 J2 {! _
        }- D" j, K8 @& k3 C" f# a, b  ~- E
        //当前对象的链接对象
    5 S, M6 R. }: ?4 `- N8 u7 I    CATILinkableObject * piLinkableObject = NULL;
    ) y. k3 n$ p& Y! q4 o    HRESULT rc = spRef->QueryInterface( IID_CATILinkableObject, (void**)& piLinkableObject );                           
    7 P" e, L& Q. W5 m& f2 i    if ( FAILED(rc) )1 X4 [' R' D% [, C( t! B
        {6 C) Z& j4 F. @% q4 a7 z
          piLinkableObject->Release();
    $ N7 G) P3 n* }) o) m* d      piLinkableObject = NULL ;
    % O8 ]3 a- `4 l      return FALSE;
    0 f, P% \5 x# Z    }: l, l9 L8 ^* e, p7 l
        //得到当前对象的文档8 s$ Z9 m) \1 {+ z, D
        pDocument = piLinkableObject->GetDocument();3 f( p  o# f& M! \
        piLinkableObject->Release();3 @! c: H; k2 h* n5 J
        piLinkableObject = NULL ;
    ( M4 _8 y! Y: R    if ( NULL == pDocument)8 I, @5 A. ?# e; a
        {
    0 p4 N+ }  _" e      return FALSE;9 s% w0 W" g4 B8 X3 M6 [3 a0 f$ n
        }
    2 a) W  F; B& M  }/ r2 |  b/ b0 Z" i& o
      //得到文档容器集
    , V; B- ]- Y/ S6 c4 X$ j. ^: S/ U  CATIContainerOfDocument * pIContainerOfDocument = NULL;
    6 G$ K/ L( @3 G1 f. h# Y  HRESULT rc = pDocument->QueryInterface(IID_CATIContainerOfDocument, (void**)&pIContainerOfDocument);' y( X2 G5 Q) {) _7 e
      if (FAILED(rc))
    / l, i0 D8 \/ e2 `: }  {
    5 ?( h3 d! ~: D% X9 D    //pIContainerOfDocument->Release();+ r& e: j& }, O; ?7 n. F0 a$ I
        pIContainerOfDocument = NULL ;8 j2 T; C( ]* {- D5 p" L" Y
        return FALSE;( F5 R4 m- ~) c/ U* g$ Q7 c- p9 H
      }
    / f7 |, q0 W: n7 r9 N, v9 R3 H" a3 h  6 h/ z- {$ A% k0 q/ o. X+ J9 ^2 o
      //获得Document+ p; D; I  _' n/ _
      CATIContainer* _pContainer = NULL;
    5 t5 Y' ]& _. d* X  //获得SpecContainer& ^/ R; ]1 b- @7 g* W2 i+ ]. g7 Z, I
      HRESULT hr = pIContainerOfDocument->GetSpecContainer(_pContainer);
    / l. B  o  z6 I+ a, i   ^7 S) F; }% q; K4 o$ d" ]1 Z
      //GSM工厂: S8 a/ R2 s- x6 g. V! Y$ o- I+ H3 z
      CATIGSMFactory_var spGSMFactory = NULL_var;
    1 m6 c2 X+ t0 f; M; M  //设置工厂  
    3 W+ K8 n2 K8 |  spGSMFactory = _pContainer;         2 ]$ m8 Z0 z- y  _/ [! ~
      CATIGSMPoint_var spPoint = spGSMFactory->CreatePoint(point3D);
    2 t5 y. O, g/ U$ P/ G  CATISpecObject_var spSpecPoint= spPoint;       O, v* Q& L+ m( G, A1 f" ]
      CATIGSMProceduralView_var spSndPntObj = spSpecPoint;
    % E# r; |& [. F1 E/ h& _
    2 L5 L$ Z# S# ?' U) N  //*将点显示在屏幕上
    7 D' g. X  E* l) u  spSndPntObj->InsertInProceduralView();+ C' k# j1 m0 [; Q8 Y
      //更新点对象
    2 C: q7 P( V* P1 L  spSpecPoint->Update();
    9 \4 ^* f% F0 S& D" y) Z * f& a3 y/ Z5 n+ N# N7 U
      return TRUE;$ d% ]. x1 N4 j8 v/ D: U
    }: ^3 z# d6 R# @1 U# m

    2 _, R/ E: f; J  ~0 C0 R. e9 E: C3 ?; a
    9 w* f( ^, |* v# h* {6 ~效果如下:
    . a1 Y" T; p  H0 v/ S1 `. \5 g- |. m% Z( O1 q+ Q

    + ~1 f# b( W! x, C& ?: l4 w: I: k' p% N0 |5 W
    PLM之家,专业的NX,Teamcenter学习视频网。PLM之家科技,承接二次开发,视频定制,实施培训等业务。www.plmhome.com; && www.plmhome.net-->-->点团信息科技-->-->欢迎联系我们--QQ 939801026
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | QQ关联注册

    本版积分规则



    <

    QQ|小黑屋|手机版|Archiver|PLM之家-工业4.0数字化驱动之家 ( 沪ICP备13003373-3

    GMT+8, 2017-12-12 07:28 , Processed in 0.280853 second(s), 36 queries .

    Powered by PLM之家科技! X3.2

    © 2001-2013 PLMHome Inc.

    快速回复 返回顶部 返回列表