PLM之家精品课程培训

PLM之家精品课程培训

联系电话:18301858168   |   QQ咨询:939801026
NX二次开发培训

NX二次开发培训

UFUN/NXOpen C++和实战案例

适合初级入门或想深入了解二次开发的工程师,本培训结合ufun,NXOpen C++,大量的实例及官方内部的开发技术。
公众号二维码

关注公众号

点击扫描二维码免费在线高清教程

课程详情
Catia二次开发培训

Catia二次开发培训

市场需求大,掌握核心技术前景广阔

Catia二次开发的市场需求大,人才稀缺。掌握开发技能潜力巨大,随着经验积累将在汽车、航空等领域有所作为。
B站二维码

在线原创B站视频

点击关注工业软件传道士主页

课程详情
Teamcenter培训

Teamcenter培训

全方位培训,从基础应用到高级开发全覆盖

涵盖用户应用基础培训、管理员基础培训、管理员高级培训及二次开发培训等全方位内容,由多年经验讲师打造。
QQ群二维码

加入同行交流

点击扫描二维码加入QQ群

课程详情
×

PLM之家plmhome公众号

课程涵盖: PLM之家所有原创视频

×

关注B站视频

所有高清视频一览无余,全部在线播放学习

×

加入PLM之家QQ群

同行交流,疑问解答,更多互助

PLM之家PLMHome-国产软件践行者

Catia二次开发源码分享:鼠标点击创建点

[复制链接]

2017-4-17 21:57:04 4721 0

admin 发表于 2017-4-17 21:57:04 |阅读模式

admin 楼主

2017-4-17 21:57:04

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

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

x

$ E7 x0 Y* R8 T8 |  FCatia二次开发源码分享:鼠标点击创建点
) N. y8 O7 \9 t* f$ z% e" |. B: U- O6 _5 D; ~% l3 v7 k

& d, k+ }0 R2 f, C" c#include "CAARCCreatePoint.h"
5 u. y% h- s* z% n0 I#include "CATIndicationAgent.h"1 }0 z3 Q" H" M! w6 h
#include "CATMathPlane.h"
* P: \! E2 S4 l% D8 I! ?$ V. I3 j
3 z' A' w+ e$ D' p3 y0 n4 `, E: u#include "CATCreateExternalObject.h"
7 X1 ^" ~$ j& g4 @; N
% [3 B3 s2 l+ |/ O) y& t, Q- W#include "CATMathPoint2D.h"3 w  q  d! D3 k0 c4 [
#include "CATMathPoint.h"/ j0 `  v# N! C9 ?* M, V+ d
#include "CATMathPlane.h"
( t$ O' ]5 L3 T' j: O! P2 _+ p$ z$ A: d
#include "CATIGSMPoint.h"
3 h4 o3 w! [6 l. n* l- `4 i+ K+ h* @: K+ m- O( m" U# J
#include "CATFrmEditor.h"
# m0 x+ E+ \# D: X#include "CATPathElement.h"
" e7 l) n4 A! _
0 Z# Q: w* q5 \8 J; {0 V" m#include "CATIProduct.h"" k$ X2 G# b; O  e- }
#include "CATILinkableObject.h"  Z  u' D6 v/ v; @1 u
#include "CATDocument.h"
! p* o9 {: V2 j2 @% Y' h* ?. ?* R8 i& r' B9 r: r  |, Q
#include "CATIContainerOfDocument.h"( [2 G* f9 O; X& F
, \' t: f- }) y/ w$ ^6 B
#include "CATIGSMProceduralView.h"3 P5 E2 q$ `  K8 u
. O9 z2 O2 @) J3 k. u, G  N5 l
#include "CATIContainer.h"
- z* X6 h* n6 F, w: m) n5 t#include "CATIGSMFactory.h"3 E# i6 e0 E) B3 F  g+ Z3 W* D; r

8 v- l5 |5 Z( [' ?4 `#include "CATISpecObject.h"
1 _+ U: q  G( l3 c. w+ W#include "CATIGSMLinePtPt.h", ]% @1 t, q" |& I( t9 n2 ^
* J5 V, }" W5 \3 J/ S3 d3 j9 `. w
#include "iostream.h"
/ ?6 H5 X9 m  P1 n, N) ]0 o- c7 H4 p' Z( V5 d& _# q3 `/ }
CATCreateClass( CAARCCreatePoint);4 J# c% q3 [4 H' H

7 N- }7 u$ X7 Z' k
( B& v5 U  J+ Q5 r. |& i//-------------------------------------------------------------------------. |. U! ^) F- u5 P1 z
// Constructor* ?4 o! m. {; h9 U. Y
//-------------------------------------------------------------------------
5 P7 c' M+ O% _' O& r, R  KCAARCCreatePoint::CAARCCreatePoint() :
* L5 ^, U7 f* q. u! ~, `9 ~! `+ m  CATStateCommand ("CAARCCreatePoint", CATDlgEngOneShot, CATCommandModeExclusive)
. o  v! X. [$ q1 c8 k8 W& G//  Valid states are CATDlgEngOneShot and CATDlgEngRepeat
( h! q- n6 C# q  ,_Indication(NULL); d8 N8 n1 {- v% j7 p0 s8 D
{
! W# M1 x* i! O}3 N4 a5 N# P4 i/ P6 N. v

5 O2 E+ J4 f6 b$ l4 g//-------------------------------------------------------------------------
, ~5 q" h# D) G, F+ T// Destructor& ^) Z2 h' u' X
//-------------------------------------------------------------------------  W) J. t# M2 W, p8 s
CAARCCreatePoint::~CAARCCreatePoint()' w' c" o( F1 j
{% ^( [% m( c: V9 S  s
   if (_Indication != NULL) 0 ^- r& j/ ^2 A2 ?- S( Y' m
      _Indication->RequestDelayedDestruction();, Y; T- T2 [1 B, X
}
4 N- [7 \+ V9 S7 h- ]  V  R3 `/ h9 P; |9 B, c0 y  H
0 O' @- j8 e8 m/ u4 \5 A
//-------------------------------------------------------------------------0 W' T5 e  M4 U! D) U+ y0 |2 k+ `  [
// BuildGraph()
; e. z3 x, N" I2 Y) U& p1 z//-------------------------------------------------------------------------
  U7 H0 T0 u3 X# E2 Evoid CAARCCreatePoint::BuildGraph()" W1 L2 e/ d) \3 @
{
' I! h+ p" n3 r4 [  // TODO: Define the StateChart
# r9 X9 \* b2 K6 N; ^" S; m  // ---------------------------
' m3 t) `% L+ U6 _5 O  _Indication = new CATIndicationAgent ("Indication");
/ i) o) l+ t0 B0 ~& ?  _Indication->SetBehavior(CATDlgEngAcceptOnPrevaluate | CATDlgEngWithPrevaluation | CATDlgEngWithUndo );
5 @: k' _# ~5 `. O) _. C2 X! \# @  X8 j4 j3 I5 l! G% x
  AddCSOClient(_Indication); 9 ?, t  y$ \5 k% `2 ?, l. Y2 Y
  //设置点所在的平面) e" H1 D  C) b5 E) F" O
  CATMathPlane PlaneXY;
3 I3 k+ O6 f" Y7 Z, |/ s" c9 j  _Indication -> SetMathPlane (PlaneXY);
( m2 z  x, W& i9 N
3 O9 J2 y  ~/ k0 T- z$ t* U  CATDialogState * initialState = GetInitialState("创建点");# }3 o. L( e/ j0 U& Z
  initialState -> AddDialogAgent (_Indication);0 Z7 c3 ~4 d  \; O/ l  o

* n! G6 G/ h9 m* H, |2 b% F  AddTransition( initialState, ( ]# G/ F  ?" l% j6 i, p: s4 c' ]
                 NULL, 0 I* k' Z. l8 J& ~* O. v
                 IsOutputSetCondition (_Indication),# W; h3 m- {% X$ M
                 Action ((ActionMethod) &CAARCCreatePoint::ActionOne));
9 I* m% I) p! q4 s}" o9 @. G3 h" M4 M/ R2 ~

0 A: _9 H" c8 Z& |4 Y. Z) [, B" v' S! H2 K4 v
//-------------------------------------------------------------------------
( m5 `, j+ |% y( R, V" _// ActionOne ()
6 R# v! W2 }( v) e# j//-------------------------------------------------------------------------
8 B+ A- Z/ P  c0 P3 k+ Y; H* [CATBoolean CAARCCreatePoint::ActionOne( void *data )
: n& N2 g1 [2 U{
2 i' `* L( A; p$ N& u7 T  // TODO: Define the action associated with the transition
1 O' c# H# G0 y- I% X  T& b" x  // ------------------------------------------------------: C* ]* g  j' N
  // 创建第一个点  P1 S0 Q$ J0 j
  CATMathPoint2D point2D = _Indication->GetValue();//获得一个2D的点
" S6 p7 p; H% O! I' {% K) m0 e, A1 ]4 U0 P4 \8 n: o
  CATMathPoint Point3D;* q7 l" w- A6 l  t( @
  CATMathPlane Plane = _Indication->GetMathPlane();
9 u2 |2 e, }  w! d9 U& ?1 s; q$ }: v- Z, U+ h& f- u& Q
  Plane.EvalPoint(point2D.GetX(),point2D.GetY(),Point3D);                //将2D点转换为3D点/ e! y& x$ y: }  g; D; G5 Q
- _0 t# ~0 [" \0 a5 c
  //设置Container(非根节点)- J7 c; g5 `9 K& B! ^; W! {
  //获得Editor
. }* L$ q! I% z9 G3 k8 j  CATFrmEditor* pEditor = CATFrmEditor::GetCurrentEditor();
. X, h6 u% ~: \# y; n' A  X- o, d2 Q
  //得到当前对象的文档3 x& ]4 ]. k1 f8 D- ^+ ]% y
  CATDocument * pDocument = NULL ;. [  D9 A% N1 Y1 p: m

3 @$ o" z2 ~: z9 [* D+ I  //取得当前活动对象
( y) I, J+ \3 h# R  CATPathElement activePath = pEditor->GetUIActiveObject();7 s# Y/ ?4 l2 o$ ~
  ]' R/ o" u" A9 x) j
  //取得当前活动的product* n* [/ D7 v8 [
  CATIProduct *pActiveProduct = (CATIProduct *)activePath.SearchObject(CATIProduct::ClassName());! }5 r& U4 E+ h. W! Z5 H, Y
( w) O7 U7 d$ }3 |3 a5 g6 R
  //当前活动对象不存在! d2 q+ D: M' Y4 k3 X0 M1 B: Q
  if (pActiveProduct == NULL)3 b' C( Y* @$ S
  {
' [; R' g2 e; z    pDocument = pEditor->GetDocument();
! N: c  a$ h3 Q8 m  }
$ v+ F1 c% x1 a) l3 x  else
/ Q. ~$ W; H* p$ ~, u7 p: h0 @* @  {
! y8 Y5 C, m) M. H# P    CATIProduct_var spRef = pActiveProduct->GetReferenceProduct();
) e7 T. V( f$ k2 Z: y    //当前对象的引用对象是否存在% @( a9 S) x) M
    if ( NULL_var == spRef )- ?$ |, J, |) f0 s9 Z# A
    {
, x. L. }) X) G3 F) k      return FALSE;
( z/ s. E' {' a/ @7 z1 H    }
1 P% }, C9 p7 A9 @, T" Q6 m' N' }' i9 o% d
    //当前对象的链接对象  S4 @1 A; a% e- u3 i, r9 K
    CATILinkableObject * piLinkableObject = NULL;. K' L3 a/ Q  j$ f; _
    HRESULT rc = spRef->QueryInterface( IID_CATILinkableObject, (void**)& piLinkableObject );                            7 D/ g% f4 w  r/ n% K  o5 F# r. I
    if ( FAILED(rc) )/ D9 j+ \5 \% Z2 N! d
    {
; N& L& c+ t5 G* @  V; P      piLinkableObject->Release();
* f. x' H' ?1 j0 h" x4 {% ?      piLinkableObject = NULL ;
. ]+ S1 o$ D. f5 f7 [! B6 U! i      return FALSE;, X9 y# _& C' b  {: j' N! |
    }; F6 C& S5 w7 ~2 W3 w/ z+ }
2 C& |% G' {2 k; _$ R& n: Q. b  X
    //得到当前对象的文档' C0 @  \; a$ `
    pDocument = piLinkableObject->GetDocument();
& x: v# R+ s& s. _* Z. C    piLinkableObject->Release();- i" Z, [" ~! b7 F" V" F! F# g/ [
    piLinkableObject = NULL ;
' }: {7 D; g1 u/ e9 w1 s% {6 C' k, B* E+ w
    if ( NULL == pDocument)# P  O9 {) s" e% U
    {9 N3 U- i' L7 r1 l4 O" x$ |
      return FALSE;
& c4 \5 O6 o7 |) I# d    }& O7 i1 N" ]1 G# `5 l
  }
7 y6 Y7 {" A) A% T# Q5 _0 _* k1 M% o8 D
  //得到文档容器集! h) i4 n" q" ^; A5 X
  CATIContainerOfDocument * pIContainerOfDocument = NULL;
9 S& T8 `1 }0 F* i8 }  HRESULT rc = pDocument->QueryInterface(IID_CATIContainerOfDocument, (void**)&pIContainerOfDocument);
- G- h* ?+ |9 E% W& }8 J& k  if (FAILED(rc))! ^5 `( ^" t5 \/ i: H
  {+ S/ W+ @; E* g' K1 f# w- B* m1 }
    //pIContainerOfDocument->Release();
( [9 M8 n. b7 [1 Q8 ~  _6 t3 y! Y4 ]& u    pIContainerOfDocument = NULL ;
2 ^2 a# `5 [) N  `/ U1 L    return FALSE;
; r" G8 x/ \- c% ~, K: G3 y  }2 a" }7 m9 }, i5 r( G/ d/ Z

; I3 B0 L% z6 H& `: p  //获得Document
* `5 b- f% r/ n# Q& _  CATIContainer* _pContainer = NULL;        8 M, M# M/ T+ \+ c. e( `' K
  //获得SpecContainer
2 r4 g" e9 q! k" b4 \7 p1 U& c+ o# C6 N  HRESULT hr = pIContainerOfDocument->GetSpecContainer(_pContainer);3 C- V, B6 L; e
       
- o# n+ M5 K4 v  //GSM工厂0 f4 T7 S7 m6 c$ l$ |
  CATIGSMFactory_var spGSMFactory = NULL_var;
- A1 m  s% n- X- _/ J9 [( d! C) U  //设置工厂               
% e5 K1 Y- n* J  spGSMFactory = _pContainer;                                                                        6 u7 N& t3 a; V) n! i

0 x* @( p4 K3 S. }/ k- ?& S  CATIGSMPoint_var spPoint = spGSMFactory->CreatePoint(Point3D);4 `6 C, r8 ~( e7 P0 d1 r: g

* u4 t  V% W' L  CATISpecObject_var spSpecPoint= spPoint;                                       
! ~# f. P! ?/ W
  p$ t/ D1 O5 s+ [2 Q0 S9 S  CATIGSMProceduralView_var spSndPntObj = spSpecPoint;
6 D' x% A/ _% T2 c; H' R6 L9 t
# A% y1 p& F  b  L6 W  //*将点显示在屏幕上+ T, V2 f" r0 B0 W! B- a; q
  spSndPntObj->InsertInProceduralView();
$ v5 |6 B$ w+ w& `( S. h: A# Z
3 P* ~$ k2 W) C! w; y* ]9 o0 F  //更新点对象$ s4 c, a3 w5 r! w: j
  spSpecPoint->Update();2 J2 U9 U) `  o, D6 u; z7 e6 w) W1 \
2 M$ i4 Z$ h! J
  return TRUE;# V& f0 `, {- ?, N. ]' a  m7 _' n, c
}
/ g% |- b; X. t/ F* N+ n% J3 C, S0 v; a" y6 W

) }9 \% y1 Q+ R+ o- \8 ~/ d' w) }
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复

使用道具 举报

发表回复

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

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

    本网站(plmhome.com)为PLM之家工业软件学习官网站

    展示的视频材料全部免费,需要高清和特殊技术支持请联系 QQ: 939801026

    PLM之家NX CAM二次开发专题模块培训报名开始啦

    我知道了