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

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

查看: 369|回复: 0

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

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

    3 天前
  • 签到天数: 27 天

    [LV.4]偶尔看看III

    1638

    主题

    3137

    帖子

    5万

    积分

    管理员

    PLM之家mildcat

    Rank: 9Rank: 9Rank: 9

    积分
    52637
    发表于 2017-5-6 13:17:52 | 显示全部楼层 |阅读模式
    CATIA二次开发入门教程---15 通过点击屏幕创建点
    # N4 o5 p: d6 i- _& d通过点击屏幕,自动创建点, 这里直接建立了一个简单的对话框,通过pushbutton来添加一个回掉函数,函数里面去执行创建点的类。1 P. G# f5 z5 F7 c) b" B
    createPoint.PNG 2 x, ^5 s" i9 U$ O

    , h! Y' F- H, n0 U) D! Fvoid DialogTesTCmdDialog::OnPushButtonCreatePointPushBActivateNotification(CATCommand* cmd, CATNotification* evt, CATCommandClientData data). U- P; b, w% x8 T& s6 Z* H
    {
    : P6 j; s5 }  A+ K3 s  // Add your code here
    $ b. _, j, @$ _0 b' Z. |! \      CreatePointCmd *createPoint = new CreatePointCmd();' e1 D" W  ^2 R
    }
    % N$ U* y2 w' C0 M4 [' j6 ]# S7 I; ^- v- C$ U% S
    新建一个catia 的命令,名称为 CreatePointCmd ,接下来要做的就是在 action one 里面进行点的创建,代码如下:0 F( w, Y+ B9 o

    * ~# m" k2 ]- n1 Y; `* W/ fCATBoolean CreatePointCmd::ActionOne( void *data )4 J" Y, [8 [/ b
    {
    2 R  e( F) Y  J, [! }  // TODO: Define the action associated with the transition
    4 E# H) s  X. N$ d9 q% |4 d  // ------------------------------------------------------7 @7 @; ?) z! y* @0 W" L
    CATMathPoint2D point2D =  _Indication->GetValue();7 _1 i  e/ ~: F( f+ ]2 O; V, Y
    CATMathPlane plane = _Indication->GetMathPlane();
    7 Y+ _3 ^% ^+ p CATMathPoint point3D;
    * w, ^- \3 ]3 y plane.EvalPoint(point2D.GetX(),point2D.GetY(),point3D);& t1 V; _8 ^* ?* `
    + C" L# _  k" U7 C- C5 _9 A% t
    cout<<"Point coordinates:" << point3D.GetX() << "," << point3D.GetY() << "," << point3D.GetZ()<<endl;
    1 c: @2 w) q8 H4 b( B/ M    * k8 b; V) S9 l; K! k
      //设置Container(非根节点)
    ; Q8 ?9 w/ g. W3 j" T  //获得Editor
    ( g9 j. L( G  a: U8 P  CATFrmEditor* pEditor = CATFrmEditor::GetCurrentEditor();7 N4 F0 F$ w- ]
      //得到当前对象的文档7 _$ ?7 e& Y4 |
      CATDocument * pDocument = NULL ;
    1 G  p! x! S! C. |  //取得当前活动对象7 o" U/ H2 q1 _  f) E2 B2 z
      CATPathElement activePath = pEditor->GetUIActiveObject();
    6 }8 m4 W7 X9 B  //取得当前活动的product% k- H. x3 h/ |  N, l  \
      CATIProduct *pActiveProduct = (CATIProduct *)activePath.SearchObject(CATIProduct::ClassName());
    : E7 Q6 |3 v- l7 D8 o1 D9 @  //当前活动对象不存在( ?5 w- p% }% }8 R
      if (pActiveProduct == NULL)
    1 s: R+ {; t' T7 C+ S7 P. o& K0 }  {
    % g0 |% k* x1 q4 e% y. U3 T    pDocument = pEditor->GetDocument();
    ) R1 A  I* J8 w1 t* ?1 N9 ~  }
    # B* g4 _$ Y3 s' Y* e) J8 I8 T* g  else
    8 a0 E5 d0 l2 t  j  Y7 p  {  j* E) n& u0 ^7 G& q& G
        CATIProduct_var spRef = pActiveProduct->GetReferenceProduct();" [/ Y& x3 Y6 {3 y; a& v
        //当前对象的引用对象是否存在3 r- s; U) _) D/ a0 \% k8 |3 p
        if ( NULL_var == spRef )$ k6 q6 {; l9 P) u5 w! E
        {( {8 T6 Q) U8 R
          return FALSE;
    % k- S' l% }  }- y    }3 Y5 a! ?! g/ m. J3 \+ a
        //当前对象的链接对象
    , s+ t7 r( W# |    CATILinkableObject * piLinkableObject = NULL;
    8 X8 Y& `; |2 O" Y    HRESULT rc = spRef->QueryInterface( IID_CATILinkableObject, (void**)& piLinkableObject );                            4 x) B1 @# A0 l6 T
        if ( FAILED(rc) )7 ?1 h4 C: L. j4 a: ^% q5 U0 X
        {
    - k/ _1 O8 W% `/ [. z/ Q% K4 D+ j      piLinkableObject->Release();% x9 P! E) m  l
          piLinkableObject = NULL ;, ?( j) d/ ^6 H
          return FALSE;: `! h3 \/ a& ?" p: X! W
        }7 H  q& y. v6 \; H& O7 |6 c
        //得到当前对象的文档" ]) a8 b1 l% r
        pDocument = piLinkableObject->GetDocument();5 N6 v0 g9 }/ v# i
        piLinkableObject->Release();
    , _# E0 I$ ]- C7 |    piLinkableObject = NULL ;( B. V! U' j1 u4 p) V* i0 j
        if ( NULL == pDocument)! J1 z, r* S+ [: b! V4 ~
        {5 _; j. @# g. D! r# v. U8 ?' W
          return FALSE;
    * i1 [1 J8 K5 a1 Q' ]& s* z9 y, u: r    }
    $ H! o7 X: L( L  }# w; N: T4 _& q( _4 p  r: A  o7 N
      //得到文档容器集
    # S1 U+ S/ z, _: t! G0 j; Q4 \2 l# n  CATIContainerOfDocument * pIContainerOfDocument = NULL;2 C4 s2 E+ g; B) h
      HRESULT rc = pDocument->QueryInterface(IID_CATIContainerOfDocument, (void**)&pIContainerOfDocument);
    7 z9 |& \0 l& ]# Y. D+ R  if (FAILED(rc))
    ; @+ F7 ?/ X/ U6 C" R  {
    , i1 X- B% ]3 `# X  ?3 L    //pIContainerOfDocument->Release();
    - e; o" i. k  J* L" ~+ V8 X! e3 l5 X    pIContainerOfDocument = NULL ;; c  E3 v  X) U/ U6 X% {  g
        return FALSE;* o$ Y$ \: j: {6 k
      }) Y: l8 R9 l* A; O" m
      : F9 |! T/ v" L5 h6 X
      //获得Document9 B$ c! i9 Y1 N5 N  J5 s: e
      CATIContainer* _pContainer = NULL; # Q6 C1 {  O; ~
      //获得SpecContainer
    3 q  @+ s8 Z' [, ^- }, j0 a" ?  HRESULT hr = pIContainerOfDocument->GetSpecContainer(_pContainer);
    / `! M; b, |4 n/ Q" A ! W, x! d  W$ N* e, @- [
      //GSM工厂
    ' c. [6 j! s$ S( `3 ^  CATIGSMFactory_var spGSMFactory = NULL_var;
    / F0 b  s1 f' z6 `  //设置工厂  
    0 f  ]! U% w4 r5 b  spGSMFactory = _pContainer;         
    ! }1 h7 s& e& W  CATIGSMPoint_var spPoint = spGSMFactory->CreatePoint(point3D);
    1 O! C% r/ i+ |. n- @6 b  CATISpecObject_var spSpecPoint= spPoint;     
      F/ F+ ^9 q+ x: t! F' l- X  CATIGSMProceduralView_var spSndPntObj = spSpecPoint;9 p7 s) y3 `% v) N
    2 v7 q6 `" ~( v5 A
      //*将点显示在屏幕上
    * H; D$ K/ p" K2 o" Q  spSndPntObj->InsertInProceduralView();  T! y! X/ A- R% y. ^
      //更新点对象! t2 x- Y8 R# O* C3 V) I
      spSpecPoint->Update();5 S; H6 Y5 w4 x8 s

    + E0 s. u8 |0 h/ [  return TRUE;
    3 a8 r: f7 X4 O5 T9 }& y}% o4 K% I: `1 M" }
    " ~5 C- O1 N& |. J' O8 a% O
    8 Z1 M$ @& m; p4 ]' s
    效果如下:
    5 _0 a$ X* n5 x; b+ z
    $ S0 |6 G6 n& K( O$ Z$ d: @  O! p
    0 N7 L. F; Z+ n
    # Y- s6 T" M6 H2 q7 {' r
    PLM之家,专业的NX,Teamcenter学习视频网。PLM之家科技,承接二次开发,视频定制,实施培训等业务。www.plmhome.com; && www.plmhome.net-->-->点团信息科技-->-->欢迎联系我们--QQ 939801026
    回复

    使用道具 举报

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

    本版积分规则

    关闭

    站长推荐 上一条 /1 下一条

    <

    QQ|小黑屋|手机版|Archiver|PLM之家-NX|Catia|Teamcenter|Tecnomatix数字化软件学习网 ( 沪ICP备13003373-3

    GMT+8, 2017-6-26 04:34 , Processed in 0.228176 second(s), 35 queries .

    Powered by PLM之家科技! X3.2

    © 2001-2013 PLMHome Inc.

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