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

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

查看: 702|回复: 0

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

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

    前天 13:24
  • 签到天数: 52 天

    [LV.5]常住居民I

    1692

    主题

    3259

    帖子

    5万

    积分

    管理员

    PLM之家mildcat

    Rank: 9Rank: 9Rank: 9

    积分
    54587
    发表于 2017-5-6 13:17:52 | 显示全部楼层 |阅读模式
    CATIA二次开发入门教程---15 通过点击屏幕创建点+ y4 m# @! x: O8 {! `* a& }. v9 t
    通过点击屏幕,自动创建点, 这里直接建立了一个简单的对话框,通过pushbutton来添加一个回掉函数,函数里面去执行创建点的类。
    # L# A3 W# \4 {* M/ c createPoint.PNG 0 y6 Z* S+ s# c# e

    6 n  n4 ]9 z' g2 K% L& {- X7 v& Xvoid DialogTesTCmdDialog::OnPushButtonCreatePointPushBActivateNotification(CATCommand* cmd, CATNotification* evt, CATCommandClientData data)
    ) r& A% K- ^4 ^4 C{* J. D" t+ h' o. ?# w
      // Add your code here  A) E  L- t, X
          CreatePointCmd *createPoint = new CreatePointCmd();" V% j/ r9 W1 t' r9 w. g5 h
    }' b1 l" r2 a; S5 V% P" W8 I; ]& y+ L

    5 {, ?. o$ _  q( I0 a' F" [. f# \新建一个catia 的命令,名称为 CreatePointCmd ,接下来要做的就是在 action one 里面进行点的创建,代码如下:5 ~% x7 g: c: u
    6 J' y0 h3 x# l- w' U4 H
    CATBoolean CreatePointCmd::ActionOne( void *data )
    ( T. L/ n: B# ?: N& w8 _1 v3 t4 h{- h3 S! {9 U+ A. t9 h" K# o
      // TODO: Define the action associated with the transition ) J% v7 f6 X* k7 N$ I$ Q+ E
      // ------------------------------------------------------( p% H6 U4 F# `/ Q% B% `$ F
    CATMathPoint2D point2D =  _Indication->GetValue();
    & ?2 l+ ]1 v4 C CATMathPlane plane = _Indication->GetMathPlane();( F3 r5 F4 Q1 Z) M1 |. }/ c( g* q. T( U% i) v
    CATMathPoint point3D;
    " p' Z* Z# Y) E5 r: D% e plane.EvalPoint(point2D.GetX(),point2D.GetY(),point3D);! g9 m+ `" ?1 f- |5 T* |$ {$ d$ e8 j
    $ S  q2 I  D  i, j. f
    cout<<"Point coordinates:" << point3D.GetX() << "," << point3D.GetY() << "," << point3D.GetZ()<<endl;
    6 @5 w" O$ Y# b    / e! x! F6 p- x) Z3 d; |) P
      //设置Container(非根节点)
    # M, j" S- v8 m9 ^  //获得Editor
    ; a# Y9 p# A% C6 T7 n  CATFrmEditor* pEditor = CATFrmEditor::GetCurrentEditor();6 U) Q: p; t: P+ A
      //得到当前对象的文档
    ; t' k2 G7 H( w( S  |, K  CATDocument * pDocument = NULL ;% F+ @5 s+ `2 S: W
      //取得当前活动对象, k! d$ v9 H$ O" x' M
      CATPathElement activePath = pEditor->GetUIActiveObject();
    & M9 C, i4 `" M: T) Y! z  //取得当前活动的product
    1 Y, b" t+ \  d( E2 g. y  CATIProduct *pActiveProduct = (CATIProduct *)activePath.SearchObject(CATIProduct::ClassName());+ _( f. K. r( ?/ ~
      //当前活动对象不存在: q( T7 t/ r- `. W7 _
      if (pActiveProduct == NULL)
    % Y" T$ d& {3 A- K% {- O  {
    / n- p3 @9 E1 K7 F4 D7 Y    pDocument = pEditor->GetDocument();, f4 [; @$ y- R4 u& N) W. O
      }6 S& E" j5 _; q, w8 s; @2 b; a6 a
      else
    # j6 a& P  J6 E1 {7 W" x  {
    3 s0 q9 ?* O# ~! ?    CATIProduct_var spRef = pActiveProduct->GetReferenceProduct();
    + S2 d& j7 i" N3 P! [    //当前对象的引用对象是否存在2 F, @  S! g6 _4 w
        if ( NULL_var == spRef )
    + i4 Z7 G+ t6 S4 S2 U/ K! Y4 a8 W    {
    / d2 a( m* U+ k% {      return FALSE;* V6 @) E( c1 J* G! ]; a0 i
        }3 \8 `6 Q, z3 U& {, K
        //当前对象的链接对象9 N$ p2 S, {3 j$ w  H6 F
        CATILinkableObject * piLinkableObject = NULL;4 r( W& E. i1 |+ J) [" p! @
        HRESULT rc = spRef->QueryInterface( IID_CATILinkableObject, (void**)& piLinkableObject );                           
    8 |0 u, ^& v6 B; x    if ( FAILED(rc) )8 b/ ^, q* _5 e; [% A3 s
        {
    # q  n' o* t* i. l$ L- ?      piLinkableObject->Release();2 m; ~) `. G, d* b" |% K
          piLinkableObject = NULL ;
    ( W0 X6 G* j5 S/ Y$ L! z$ y      return FALSE;7 |- W) R4 e' j8 q8 l& k( [; @
        }% u. D$ t5 W1 c1 T8 r
        //得到当前对象的文档4 L7 N6 d/ _* H3 @
        pDocument = piLinkableObject->GetDocument();. F/ d/ y; Z" B, T7 I- ^4 I
        piLinkableObject->Release();
    - v! B4 T, Q* d6 ~, ]    piLinkableObject = NULL ;
    4 [3 ]) R! Y, M! c5 \% w- H7 Y    if ( NULL == pDocument)( w8 P( D* k7 l2 P: w, G" f8 ^# p
        {
    ; j# Y. K( ?0 x' c      return FALSE;
    7 S8 x" U+ Q* {  p    }, ?; P3 f8 C+ @: l0 f" G
      }
    2 n, A& b4 U9 F' w  //得到文档容器集! e8 L5 W& ~: Z8 i4 g, ?& z0 q
      CATIContainerOfDocument * pIContainerOfDocument = NULL;% K1 D6 m. W! K
      HRESULT rc = pDocument->QueryInterface(IID_CATIContainerOfDocument, (void**)&pIContainerOfDocument);
    8 h9 D4 L4 A  W/ g) m% M  if (FAILED(rc))
    $ A  {6 J4 l( l  {
    & }- {0 W7 x& T0 U- p# y1 Z    //pIContainerOfDocument->Release();
    3 i/ y7 Y  d4 I    pIContainerOfDocument = NULL ;
    5 s- F( S# w7 Q( Z    return FALSE;) S& n7 _* ~9 b5 ?# z; q
      }# ^& q! [" l  u1 m
      4 C0 ?3 B" P7 n: c8 g9 R
      //获得Document4 a: X( a7 X% E' n( i
      CATIContainer* _pContainer = NULL; ' _8 Q# X1 l' @) A+ W, z
      //获得SpecContainer, R" h8 T; r% B( d( o( V
      HRESULT hr = pIContainerOfDocument->GetSpecContainer(_pContainer);1 @. f! A7 b' o* K) @
    : n& v$ ^9 |; j# s4 e0 [
      //GSM工厂
    4 L1 R! b$ B! o  CATIGSMFactory_var spGSMFactory = NULL_var;
    - E$ @# j( }2 \8 ]5 V  //设置工厂  8 r4 F- A3 n2 M- S# M. U6 f
      spGSMFactory = _pContainer;         4 A+ V, L3 W* y+ {4 S- M" N
      CATIGSMPoint_var spPoint = spGSMFactory->CreatePoint(point3D);% k  N2 p# I5 Y3 T" e# @# H
      CATISpecObject_var spSpecPoint= spPoint;     6 v) G( B& I; M
      CATIGSMProceduralView_var spSndPntObj = spSpecPoint;) J  n/ W9 [% H8 z3 g7 x
    ; g& Z- s5 [; w
      //*将点显示在屏幕上
    6 _2 K6 n/ Q: J  spSndPntObj->InsertInProceduralView();
      t4 R9 R+ b+ ?1 ^+ M  //更新点对象! p+ ^2 u9 ?6 h# }9 Y( C# M2 Q
      spSpecPoint->Update();. v: q- f" V5 e1 l: Z" n& c

    # l1 Q+ |# p4 W1 Y6 u  return TRUE;. [- r8 H, a0 v) `4 `
    }
    - P7 B5 v( i6 V  ^( v1 Z
    & B: p; @8 I. T% j2 R7 v8 R+ ?) b) t
    效果如下:$ L4 a+ i8 F& w- Q( x
    8 `6 ^/ p( Q8 h$ N" N; p1 P
    , H% _1 s1 r- g9 ~6 d( ~1 A
    0 Y8 W! C& n/ u4 @, N2 p% ^" D/ i
    PLM之家,专业的NX,Teamcenter学习视频网。PLM之家科技,承接二次开发,视频定制,实施培训等业务。www.plmhome.com; && www.plmhome.net-->-->点团信息科技-->-->欢迎联系我们--QQ 939801026
    回复

    使用道具 举报

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

    本版积分规则

    关闭

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

    <

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

    GMT+8, 2017-10-18 12:03 , Processed in 0.133809 second(s), 35 queries .

    Powered by PLM之家科技! X3.2

    © 2001-2013 PLMHome Inc.

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