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

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

查看: 536|回复: 0

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

[复制链接]
  • TA的每日心情
    无聊
    前天 07:16
  • 签到天数: 33 天

    [LV.5]常住居民I

    1650

    主题

    3156

    帖子

    5万

    积分

    管理员

    PLM之家mildcat

    Rank: 9Rank: 9Rank: 9

    积分
    53281
    发表于 2017-5-6 13:17:52 | 显示全部楼层 |阅读模式
    CATIA二次开发入门教程---15 通过点击屏幕创建点+ O6 S8 U" s2 N. v0 G# q  V
    通过点击屏幕,自动创建点, 这里直接建立了一个简单的对话框,通过pushbutton来添加一个回掉函数,函数里面去执行创建点的类。
    ( U; Q8 W0 J- [$ U$ o createPoint.PNG $ Y1 J" o/ @( x5 `# h8 {

    ( X" {$ _5 G8 z: fvoid DialogTesTCmdDialog::OnPushButtonCreatePointPushBActivateNotification(CATCommand* cmd, CATNotification* evt, CATCommandClientData data)
    2 m- L  [$ x( J' k5 N$ F{
    % z5 f$ \- B( j  // Add your code here
    : `- _. m! H3 \% U      CreatePointCmd *createPoint = new CreatePointCmd();" p! b' _, x0 s7 Q
    }
    ; Y  D  C/ C7 M8 W. P8 j
    ' F, `! ~7 O, S6 ?: S; `/ ?+ |& w新建一个catia 的命令,名称为 CreatePointCmd ,接下来要做的就是在 action one 里面进行点的创建,代码如下:# B& @8 `. i# q$ L# ?- x

    " \% Z" E9 X9 o( G8 ~4 `. ]& oCATBoolean CreatePointCmd::ActionOne( void *data )
    3 C' S; x; z$ y{
    * @8 d% l: |7 H$ f. `5 K4 E, Q4 N  // TODO: Define the action associated with the transition
    9 t' z4 l6 [" P/ R# X, p  // ------------------------------------------------------8 ^* h4 h( W& D
    CATMathPoint2D point2D =  _Indication->GetValue();
      r: W  n% E9 F, i# A- x/ c CATMathPlane plane = _Indication->GetMathPlane();
    " [5 J7 i$ e0 ~+ K! s- X" [9 P CATMathPoint point3D;
    6 r: b, F9 I3 Q# |2 ^: B% S7 P% x plane.EvalPoint(point2D.GetX(),point2D.GetY(),point3D);& H" u* V5 E+ `) t( S. P% T6 A+ ]2 L4 }, o

    # |5 W% t9 ?% `- s5 L8 v9 Y, l: V cout<<"Point coordinates:" << point3D.GetX() << "," << point3D.GetY() << "," << point3D.GetZ()<<endl;
    : O5 t3 i- o- _  t' J1 |4 y5 [% X9 M    ) m  H: M2 U7 X3 V2 W
      //设置Container(非根节点)8 U4 u; ^7 I7 i$ f& v2 b
      //获得Editor. W% P" b- _! ^2 I
      CATFrmEditor* pEditor = CATFrmEditor::GetCurrentEditor();
    * Y9 N$ J. s  w! `  //得到当前对象的文档& o1 h/ q: n% h0 p; A
      CATDocument * pDocument = NULL ;9 E5 }# q/ d7 ^' F1 x
      //取得当前活动对象- @! [, t  I# Q7 V/ p4 E4 j1 Y
      CATPathElement activePath = pEditor->GetUIActiveObject();& j" C* T. ]5 `; e' H7 X
      //取得当前活动的product
    7 u. N4 B* ^) y( b4 j  CATIProduct *pActiveProduct = (CATIProduct *)activePath.SearchObject(CATIProduct::ClassName());8 s0 [7 [0 l8 y5 l% e! i+ I
      //当前活动对象不存在
    5 {  [+ m9 ?$ Q/ d  if (pActiveProduct == NULL)  N1 d. v, p. N. k. [4 u" b! D
      {
    ! |4 B, `/ W3 C  w    pDocument = pEditor->GetDocument();8 e; H5 r- Y% Y4 h0 C5 E
      }
    ; M4 E0 i, ?) i/ ]6 h6 ?# U. a  else
    0 N& D% Z  U1 V6 }6 A) ^  {1 G4 E6 d* a9 L& j$ M
        CATIProduct_var spRef = pActiveProduct->GetReferenceProduct();8 U$ l: h+ R" B8 e7 u- y
        //当前对象的引用对象是否存在6 p7 K5 ?' N5 C4 p0 M, y# h
        if ( NULL_var == spRef ), t' u  U; D- u- ^. ]  H
        {
    3 Y4 h, P7 `+ j  s      return FALSE;! [, r1 E: |4 ?0 y, v; U
        }
    6 {: J/ S7 A9 B# Q/ G  ]    //当前对象的链接对象
    7 s' V, p, ]) M5 x2 q    CATILinkableObject * piLinkableObject = NULL;2 p% a8 H  w. Y6 S+ R( A- A
        HRESULT rc = spRef->QueryInterface( IID_CATILinkableObject, (void**)& piLinkableObject );                           
    . B) D; A7 A4 U1 U    if ( FAILED(rc) )- B) H' p: j7 V5 |, v3 {
        {
    ; G2 _7 C; w; T, t      piLinkableObject->Release();  f% U9 F9 m- y" I' ]. ^, `8 [" F
          piLinkableObject = NULL ;/ G+ X8 b9 s1 f: M
          return FALSE;+ r* s0 ?2 U# K0 r( m
        }' u" P6 I9 \' S! Q& H
        //得到当前对象的文档
    1 Y4 \) c9 \1 U6 C    pDocument = piLinkableObject->GetDocument();
    1 G5 f4 N& f& ]1 v, q    piLinkableObject->Release();) K" y) Z+ k: M* q$ {  z/ N
        piLinkableObject = NULL ;& j' E) l  o8 V' M/ E2 a  ?8 P7 ~
        if ( NULL == pDocument)
    8 I+ ?! y8 Y+ t; v. _2 _' _    {: A) U5 m& E$ l! c( h' |3 R
          return FALSE;
    ! S$ ^0 j, J6 R7 |4 Y    }2 ^# M5 c' J0 o' a
      }  J- Q- a  t) f' k
      //得到文档容器集
    & ^9 {2 ?$ V/ L* x5 A# C' h  CATIContainerOfDocument * pIContainerOfDocument = NULL;
    * j8 v2 K! m0 n* l/ V' m  HRESULT rc = pDocument->QueryInterface(IID_CATIContainerOfDocument, (void**)&pIContainerOfDocument);7 A' {$ M' u0 k  ~! `: P
      if (FAILED(rc))
    % l8 H5 D- C2 V2 x0 x- K8 U1 S  {7 A& s5 K: V$ }- w# j0 R! [1 N/ s) b1 i
        //pIContainerOfDocument->Release();
    - ^% G( |- R9 l. H& `8 ^    pIContainerOfDocument = NULL ;: H# [* T5 p- I! I
        return FALSE;5 `0 J3 t4 L: \+ C# ?8 E8 d
      }; S' ~" C. t  b. L: s
      
    , {7 U; Z3 Y( I; M! D4 J1 i" H  //获得Document3 z8 \# B$ E  z$ O0 I1 ^* V9 w3 a
      CATIContainer* _pContainer = NULL;   ~' J! [# [+ d& ~  |& I
      //获得SpecContainer
    2 e$ j& o  B) J, C! R8 Q9 }  HRESULT hr = pIContainerOfDocument->GetSpecContainer(_pContainer);  G& s# Y  b; E, X, }5 _3 Q: D
    $ T7 B9 r4 ?& J0 H; V6 J; P; r% K
      //GSM工厂( l# }* w& c) a8 i  i
      CATIGSMFactory_var spGSMFactory = NULL_var;& z1 |& @0 m2 ^  {; {$ a
      //设置工厂  
    % B/ q* z; \: D" a2 [/ r% b  spGSMFactory = _pContainer;         7 a1 J8 j  M# b, u; i  k& s6 e
      CATIGSMPoint_var spPoint = spGSMFactory->CreatePoint(point3D);
    , N0 T4 j3 X$ q% n4 U/ g  CATISpecObject_var spSpecPoint= spPoint;     
    3 u: G1 ~, m/ L9 T. e  CATIGSMProceduralView_var spSndPntObj = spSpecPoint;' l1 H3 l# c. m' r1 N* E: S

    ) \% G# j6 b6 W: ^  //*将点显示在屏幕上
    & O% g& R- q9 f+ _1 g% Y, ]2 M  spSndPntObj->InsertInProceduralView();
    % h" T$ R1 S# s  |* W7 P' c  //更新点对象3 d. x2 z" d4 k8 i7 {& R/ _. B
      spSpecPoint->Update();
    # m" p2 N5 H7 Y$ y" B
    . J4 s4 z( B1 ^2 b* h  return TRUE;
    ( S$ i! q* D9 h" j  w}
    ! }- \0 m& j: a/ Z' r. T$ ~# [% u, M; g
    / W2 H% A5 O0 k6 T
    效果如下:
    * @" X8 b8 k1 m' G. w
    5 o# ~$ @2 E$ {' w" V9 p3 E8 E: g# [% ^) o9 J
    ; s9 x, K8 W- i; r! T
    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-8-18 22:40 , Processed in 0.152493 second(s), 35 queries .

    Powered by PLM之家科技! X3.2

    © 2001-2013 PLMHome Inc.

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