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

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

查看: 1073|回复: 0

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

[复制链接]
  • TA的每日心情
    奋斗
    4 天前
  • 签到天数: 112 天

    连续签到: 1 天

    [LV.6]常住居民II

    1917

    主题

    3193

    帖子

    5万

    积分

    管理员

    PLM之家mildcat

    Rank: 9Rank: 9Rank: 9

    积分
    58437
    发表于 2017-5-6 13:17:52 | 显示全部楼层 |阅读模式

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

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

    x
    CATIA二次开发入门教程---15 通过点击屏幕创建点/ S  y: p# ^/ R' [
    通过点击屏幕,自动创建点, 这里直接建立了一个简单的对话框,通过pushbutton来添加一个回掉函数,函数里面去执行创建点的类。, P2 @1 P+ ?+ \6 {% X$ u
    createPoint.PNG 6 A9 N3 ?+ V( U( q" a6 g3 I: a

    ' ~4 U# {" C1 N6 z+ Yvoid DialogTesTCmdDialog::OnPushButtonCreatePointPushBActivateNotification(CATCommand* cmd, CATNotification* evt, CATCommandClientData data)
    ' |  W! a+ w5 A. d6 x! P{$ ^% P- y9 F3 }: E- q" P# M
      // Add your code here
      @6 L4 I( l# p0 E      CreatePointCmd *createPoint = new CreatePointCmd();' a# C8 n( c3 L, a. x
    }
    . a' j2 u: b8 e# `, x) Y3 B$ P; t) w: x# g7 F3 u
    新建一个catia 的命令,名称为 CreatePointCmd ,接下来要做的就是在 action one 里面进行点的创建,代码如下:
    9 e/ J0 K& \: n! A( \3 {: W3 q1 H  ]" t! p) P
    CATBoolean CreatePointCmd::ActionOne( void *data )
    3 C5 Z/ c$ [) i* ?{
    ( q) o4 h" Z/ M" _4 C6 S7 d4 V  // TODO: Define the action associated with the transition
    ! m, |5 u) }* I# o2 N' O  // ------------------------------------------------------) y0 T% c+ L- w* [
    CATMathPoint2D point2D =  _Indication->GetValue();
    : A* z# {; }& T CATMathPlane plane = _Indication->GetMathPlane();3 Q8 X( T+ C* V8 H6 q& Z8 c
    CATMathPoint point3D;
    0 Z$ v5 T$ ~+ b" O, t plane.EvalPoint(point2D.GetX(),point2D.GetY(),point3D);. B' m* u5 o  |5 B2 L* p# b* k

    ' c% a: q7 e1 [4 I5 j$ _& _ cout<<"Point coordinates:" << point3D.GetX() << "," << point3D.GetY() << "," << point3D.GetZ()<<endl;. k: L* x* s0 w! J) u. f9 {
        , {. B4 g) v, v6 q* E6 K3 j
      //设置Container(非根节点)) s4 t8 o# J$ }. Z' f: y4 p/ [
      //获得Editor) Y$ a3 z' A  s8 @% d) ~6 `
      CATFrmEditor* pEditor = CATFrmEditor::GetCurrentEditor();
    # a) t% o0 D; X5 i6 _* ]  ]  //得到当前对象的文档; C: M; |5 U! l, I6 V
      CATDocument * pDocument = NULL ;
    " o: O  K. m' k& e  //取得当前活动对象
    / E; \& ^1 o7 [+ U! b3 w" E7 H8 A  CATPathElement activePath = pEditor->GetUIActiveObject();  f& P* G1 B9 q8 D9 ?
      //取得当前活动的product3 d& s  V7 p) A: f; b
      CATIProduct *pActiveProduct = (CATIProduct *)activePath.SearchObject(CATIProduct::ClassName());
    % p& t5 h  y9 L2 C" s5 ~6 X  //当前活动对象不存在
    6 V+ ?+ l5 C/ Y  if (pActiveProduct == NULL)( g; ?' D) T! Z4 w" C/ ^
      {
    . ^/ A- a- G5 K1 z9 \: W* Z" c    pDocument = pEditor->GetDocument();( j" a2 m. r) R8 z% z& ~. n- \9 j
      }' {% e* l# C, V
      else2 O! |7 g( a, q# i3 H5 c7 @
      {
    & ~' v* G. y8 L% G    CATIProduct_var spRef = pActiveProduct->GetReferenceProduct();
    3 P: t: \1 F' @/ C4 n( D+ G    //当前对象的引用对象是否存在
    + i1 ~3 O2 R$ L) t    if ( NULL_var == spRef )& Y$ Y( j6 I1 e9 p8 m9 e
        {5 Z1 d1 i: S, W$ z% ^1 }! S
          return FALSE;
    ! o& f. v% x- }    }
    2 x! J- E& S6 ?    //当前对象的链接对象6 ^+ S0 r5 k. `0 U) e2 i& I: H
        CATILinkableObject * piLinkableObject = NULL;, ~1 }% |& Y( _
        HRESULT rc = spRef->QueryInterface( IID_CATILinkableObject, (void**)& piLinkableObject );                            : q) y. V3 `- \0 e; S) A2 z( ]
        if ( FAILED(rc) ): m- Y4 J) J% [/ S0 D
        {
    * V$ p1 I6 {0 r8 F4 Z7 Y1 ~) w      piLinkableObject->Release();
    . T1 E0 ^# a2 L6 ]6 t      piLinkableObject = NULL ;8 y! s8 m' w7 g: w; Z
          return FALSE;% @3 d- a6 ~. `0 E4 h: o; X
        }
    & c! U. [, A6 a/ z# G# @2 v    //得到当前对象的文档
    8 r9 J1 n  A7 n" M( `: L7 C    pDocument = piLinkableObject->GetDocument();: b) v' q9 ~1 B; T
        piLinkableObject->Release();* }% r) Z- b1 u- e2 {' u
        piLinkableObject = NULL ;
    # w+ S4 m+ l# A' O2 M# r    if ( NULL == pDocument)- v) m" i3 `6 c
        {( T: L& S0 E* ~) C% J# r. U
          return FALSE;/ ]# K- V1 I# P# g
        }) E8 z8 l& ?( l1 B$ q1 {0 e8 k
      }
    7 X. ^5 T5 [) ~1 U- k7 R0 ^# R  //得到文档容器集+ n0 F& H- v) J2 c4 B" Z7 H
      CATIContainerOfDocument * pIContainerOfDocument = NULL;
    2 M5 u9 U: ~  z+ j! q5 A) I; c( Y  HRESULT rc = pDocument->QueryInterface(IID_CATIContainerOfDocument, (void**)&pIContainerOfDocument);
    . J" c/ t  }& U5 j- y. g" @" S  if (FAILED(rc)). Z/ E/ w% m; k* F) w: k  l
      {- r# P6 G: y6 p0 b. ]
        //pIContainerOfDocument->Release();# ], K" p0 _) |0 ]) ~
        pIContainerOfDocument = NULL ;( o& l$ K3 x1 ^$ D" [
        return FALSE;
    9 E. }+ |" G! i! H/ P6 H" I: m  }, s" g2 q" v  v+ \, \6 z* E/ H
      
    2 x* l7 ?0 ~0 a$ W/ i" ^  //获得Document8 [* ~* S) C2 [% a& B/ _
      CATIContainer* _pContainer = NULL; . G# {) T! y8 C+ v" r4 T
      //获得SpecContainer
    2 j- Y: h2 M3 A: X* v6 U5 a  HRESULT hr = pIContainerOfDocument->GetSpecContainer(_pContainer);
    3 `4 g5 ]9 P. i8 D/ F - R4 B) l# x! b4 w" J5 G: v
      //GSM工厂
    7 K9 F$ v! ]& `( I" |. @# \9 G  CATIGSMFactory_var spGSMFactory = NULL_var;
    9 l9 |+ w+ l2 M  |6 T  //设置工厂  ( {( ?; Q. P% b" z% `' r* o9 B
      spGSMFactory = _pContainer;         9 K$ D: S5 m6 e+ c6 m$ N
      CATIGSMPoint_var spPoint = spGSMFactory->CreatePoint(point3D);$ c4 j: U% N1 k
      CATISpecObject_var spSpecPoint= spPoint;     
    8 F0 O" Y/ O+ L2 G  j! t  CATIGSMProceduralView_var spSndPntObj = spSpecPoint;" _! {+ }3 ~6 E: M: q
    & I" m  y  e+ o2 A
      //*将点显示在屏幕上  I& Q5 k8 i. X1 k6 a" K- d
      spSndPntObj->InsertInProceduralView();
    8 |7 N4 l$ L7 G% B  //更新点对象5 q! N6 g, |& T, r
      spSpecPoint->Update();
    - t: Y8 p& V' M5 `% g
    ! l8 O8 d0 _. h# G  b  return TRUE;
    8 i% m3 l$ T+ W0 e- U}! ^3 p7 n- F  \( u5 {- O

    , i, I$ d$ @$ G+ \- ~# D0 O
    : @; Z7 x; h# M6 c效果如下:
    ) I! ?; D/ W# w/ N, ^9 C2 `6 Q
    ! O) i9 R7 t& ~% b; F& ~+ H4 D* `; O" Q! l. c  E& X- n

    % r; F# n0 V% ]
    上海点团信息科技有限公司,承接NX,CATIA,CREO等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施开发培训,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com
    回复

    使用道具 举报

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

    本版积分规则

    <

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

    GMT+8, 2018-2-20 06:03 , Processed in 0.130330 second(s), 32 queries .

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