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 4722 0

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

admin 楼主

2017-4-17 21:57:04

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

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

x
. C' Z) z, e' j0 k! t
Catia二次开发源码分享:鼠标点击创建点
  G: p  G1 T4 E  x4 ^! K
% Y' @6 }/ T; n+ R6 M
* s+ o4 s2 x0 ^: [/ e: Y: D; X#include "CAARCCreatePoint.h"; P% f  m9 K' k( z) B
#include "CATIndicationAgent.h"' y$ P8 K2 _5 Z% _
#include "CATMathPlane.h"
7 ?& D; V- T5 K! t7 ?8 ~, f; P( {8 ~
#include "CATCreateExternalObject.h", p: P# [. N! `# O* k
( d% W, _. N" x3 W! U4 h
#include "CATMathPoint2D.h"
" @9 H8 e  b4 E4 E% R#include "CATMathPoint.h"
' o) ?8 [: }* A3 q#include "CATMathPlane.h"
" K4 r+ E# @  {! h" n$ n
* x7 s# ~9 B% p# w( C/ M6 Z0 Z#include "CATIGSMPoint.h"# g8 T" |* u7 t0 d; m4 H" `

" @) P: X6 `! i. W#include "CATFrmEditor.h"" y* r5 c6 r; F* e1 i) ~6 K
#include "CATPathElement.h"
% }% V( }* E, u( p* K# t- k; M, G! F5 i6 m5 R( c  K0 R0 @. E" w2 p7 V% t
#include "CATIProduct.h"
  r; n# r4 B( g/ k0 [: R+ J#include "CATILinkableObject.h"9 J. y# y& O1 U; J+ s# Z2 O
#include "CATDocument.h"
6 I4 O4 y/ ?6 e2 ]+ h- m' E* A8 B* b$ n6 w( R9 I, }
#include "CATIContainerOfDocument.h"
1 H* F+ C+ x" A" j$ L5 x* r/ ?6 P; d8 U" n$ Y6 E3 @3 ^+ j, c
#include "CATIGSMProceduralView.h"% o/ p* T  ?9 E: w$ I
4 M( ^& K& Z9 B# N, P! P: t) i3 J/ V
#include "CATIContainer.h"9 k) Y# u5 _$ I: r4 S4 p. S+ F$ H
#include "CATIGSMFactory.h": T5 U, x" f% `
1 I3 l* i- Z4 R+ V6 n' p* z3 y
#include "CATISpecObject.h"( b- z* w8 R# W6 V
#include "CATIGSMLinePtPt.h"
: a9 z2 _. D. J8 S
/ y4 b6 y, [5 n" v0 O# F#include "iostream.h"% y4 \4 b! G& s* ?" b# P
) @; g0 ]/ q3 P# p6 R! n
CATCreateClass( CAARCCreatePoint);
4 [9 O! B0 S3 F1 g
! _2 T: ^- @% O  Z; d; |: e8 ]8 M& R5 L5 U4 ^6 j" f: q6 ~
//-------------------------------------------------------------------------
" [' I2 Y( Q& C% R7 s  v/ W( i+ j; a$ R// Constructor
4 E$ q* _8 v- s9 k4 C//-------------------------------------------------------------------------: I9 ^8 P9 W0 V' I2 s/ b
CAARCCreatePoint::CAARCCreatePoint() :. j8 V& [3 W: x2 k' s4 J
  CATStateCommand ("CAARCCreatePoint", CATDlgEngOneShot, CATCommandModeExclusive)
" ?) V  O5 i3 K1 }" ^6 @( s) W//  Valid states are CATDlgEngOneShot and CATDlgEngRepeat
7 P: p  h# d  [% P  ,_Indication(NULL)
: v8 y8 r$ D0 r& D6 N& T) |{- t6 F: v  S2 x9 m. S
}6 K/ c2 k/ {$ ^: y( a4 x7 U  k/ o
6 t$ ~" ~4 n1 A& j% j, U; O
//-------------------------------------------------------------------------" i9 |' ^; o4 x% a0 ^9 P
// Destructor% c5 X) t" Z. X) |
//-------------------------------------------------------------------------3 X( `' H3 _* R" [/ y
CAARCCreatePoint::~CAARCCreatePoint()
  F2 V" t. a  b+ v" h! e% U{& c& x! n/ J2 B- i9 }
   if (_Indication != NULL) ; d" X0 {3 O* J. `1 m; }
      _Indication->RequestDelayedDestruction();
2 K4 `% J4 `4 a# g1 z}
; I4 ]* E& O$ n/ r7 }. H" L
" ~, F8 Z2 X2 k5 m  B" p( b
8 R; s( ^; D6 b; G5 Z7 E7 @% Q//-------------------------------------------------------------------------
" W6 O& ]9 m* n// BuildGraph(): a7 [) _8 _% f
//-------------------------------------------------------------------------
( Q, Q. E$ t5 P, ?. y7 R+ Bvoid CAARCCreatePoint::BuildGraph()
) L" ?7 ?7 [% z% |5 O0 w+ i0 s{6 f0 [# L% p4 J
  // TODO: Define the StateChart
7 @0 x0 p2 R- Y' ^5 x1 }6 w  // ---------------------------. r  @* ~& q0 ?4 h2 A, D
  _Indication = new CATIndicationAgent ("Indication");  E$ |/ @! Z) Q; h3 _7 `, n5 t
  _Indication->SetBehavior(CATDlgEngAcceptOnPrevaluate | CATDlgEngWithPrevaluation | CATDlgEngWithUndo );5 Q* [/ @8 o+ _8 v2 g; `
! p/ o: T; V8 I
  AddCSOClient(_Indication);
6 _+ w1 t/ v; T8 K  //设置点所在的平面+ x+ S8 }: x( Y$ d
  CATMathPlane PlaneXY;6 d+ J+ P( F3 {& p9 `
  _Indication -> SetMathPlane (PlaneXY);
% N/ w3 L( M6 Q* y: L& V0 i+ U; F
/ r" X* y: p* K5 I. @5 \* c  CATDialogState * initialState = GetInitialState("创建点");
, ?( @; A4 Y% M% q  initialState -> AddDialogAgent (_Indication);
" {- H8 }7 A( X' k& U3 w' M
0 }/ Z; B! B! \; i3 @- J  AddTransition( initialState, 5 I- {0 G& s5 S, {; f
                 NULL,
+ u! H* e1 |+ r$ M1 k! N8 c; r) n                 IsOutputSetCondition (_Indication),
* k/ b1 `" q( V3 R" l- Q! E                 Action ((ActionMethod) &CAARCCreatePoint::ActionOne));
+ p$ o2 |- a, l+ N& A0 t- r. _}* W2 M: O/ L! O6 q
8 v0 ]/ X$ I' H1 m2 O' {8 e

9 i7 r+ A7 r. h. P* C$ G//-------------------------------------------------------------------------' F, G  e6 ]' H3 [) }
// ActionOne ()
& U, T8 E2 W, g' t//-------------------------------------------------------------------------! W- @! }, G2 L6 J6 X& D- @
CATBoolean CAARCCreatePoint::ActionOne( void *data )8 D- \9 a) P) ]' H
{
3 w7 s9 E6 G0 o3 z0 Q+ w  // TODO: Define the action associated with the transition
7 l- I+ l8 w! V9 _4 ~# k0 G; |' f  // ------------------------------------------------------4 d1 o. y4 x  B& B0 k! x
  // 创建第一个点" O+ z5 l& i: ]7 U, Z# i: }
  CATMathPoint2D point2D = _Indication->GetValue();//获得一个2D的点1 s; B/ r% A( H6 m
+ d% Y9 i9 M: _$ r9 o& W0 u# E
  CATMathPoint Point3D;' x: u! W4 w( [1 `- [
  CATMathPlane Plane = _Indication->GetMathPlane();/ [% D+ Z' [- [0 E9 k* _- l
8 U7 f/ @# X1 O/ T1 D0 F" y/ Y! p
  Plane.EvalPoint(point2D.GetX(),point2D.GetY(),Point3D);                //将2D点转换为3D点
% y/ |# U# ^3 a+ Z' s
- H- U. i$ \1 s8 |5 T  //设置Container(非根节点)
3 k2 r' y( ^0 C# Z8 J' |0 W  //获得Editor. I, F& |7 U/ y2 e% d% F$ T
  CATFrmEditor* pEditor = CATFrmEditor::GetCurrentEditor();3 p0 |8 w' m$ n$ ^0 Q
9 k) l7 a& j. w$ E7 v
  //得到当前对象的文档1 A' a0 u9 B9 d2 ]. z% ]3 }
  CATDocument * pDocument = NULL ;, e9 p/ L- w2 O# {2 E( f

6 k: g8 ^# d1 a; p  //取得当前活动对象, @  J3 ?. ?4 `' E
  CATPathElement activePath = pEditor->GetUIActiveObject();1 k: h0 m% |9 _
3 @! z: }1 x. d" P9 F
  //取得当前活动的product
7 W4 h8 W" y. B/ r0 E3 @4 s$ X  CATIProduct *pActiveProduct = (CATIProduct *)activePath.SearchObject(CATIProduct::ClassName());
- U' ~2 X: N; t% ?7 L
' N* j( ~/ a" q  g  //当前活动对象不存在
/ y- v7 ?' }1 o* u8 _+ ]  if (pActiveProduct == NULL)" _8 s: H  I; Y" ~. ^# R* `8 r
  {& [# X+ O$ {: r& B, r; c) |
    pDocument = pEditor->GetDocument();
4 u6 Q3 C; o/ `7 M+ d% L' c4 g' g, Q5 J; Z  }9 f+ o: @1 G8 m$ N' Y5 T! I
  else
" b) X, M2 {* [& ?  {
: p. @5 w/ }" r1 l7 o  f* Q9 i    CATIProduct_var spRef = pActiveProduct->GetReferenceProduct();7 u0 g, a0 G3 p
    //当前对象的引用对象是否存在
4 M6 T% `3 V. x" u( N/ v    if ( NULL_var == spRef )
0 P+ A; ^" W5 E1 c3 Z6 J    {
8 \% L( Y+ S: r, |0 O* D      return FALSE;; e, @( `  P9 V) C: X
    }. \  J5 @  D, X: A6 n" W! U

4 m/ A4 E8 N0 ?7 z+ {    //当前对象的链接对象
: Z- B' ^! N0 @* c  y$ U2 K+ e! u    CATILinkableObject * piLinkableObject = NULL;9 F( g) |2 T' l6 E8 Z6 w  P
    HRESULT rc = spRef->QueryInterface( IID_CATILinkableObject, (void**)& piLinkableObject );                            9 Z. s; [' e5 I' Y5 _0 C
    if ( FAILED(rc) )
6 I  {2 E0 Z  a: J+ ]    {
* ]- W$ c6 r# S, \) N      piLinkableObject->Release();
) ?- J0 H7 N1 h/ R      piLinkableObject = NULL ;
! N) G% ~) o5 u2 s0 O. h# C      return FALSE;
; C& C: p# _9 E' b# g  X  N    }0 e* ?$ H0 W- V
+ u0 S; j* M2 f( Q$ p) S
    //得到当前对象的文档
  m; ~* W2 {* ?, x0 }  Q    pDocument = piLinkableObject->GetDocument();
: V9 y) ~$ [# R0 u% W# o6 u" I    piLinkableObject->Release();! Z9 D# O5 s$ S3 P- J# G8 v4 q/ d0 Q
    piLinkableObject = NULL ;/ P! H6 Y6 H1 c6 q6 r

, e7 s) L/ r+ x4 _    if ( NULL == pDocument)
& o# V4 N: w. b7 X- C* |; T    {
# u9 u# B/ p1 r      return FALSE;5 ?/ ]' ^* m, S
    }
/ ^& R$ u# r% n3 \5 O  }( m, D% v% C% y8 f: z
6 _8 T+ o  w) c
  //得到文档容器集
' g$ H! @4 u$ G5 W/ n  CATIContainerOfDocument * pIContainerOfDocument = NULL;
' W$ |! e4 c4 l$ ]' d8 s$ _  HRESULT rc = pDocument->QueryInterface(IID_CATIContainerOfDocument, (void**)&pIContainerOfDocument);
+ n) b4 v% s8 i8 j; J1 {: Z: ^( X7 v  if (FAILED(rc))
0 Z4 O( I: k, x- N( ?9 @  {' ~; Z/ i# o0 s! l3 U
    //pIContainerOfDocument->Release();
3 |4 `7 G) V4 e% A. B! u! f+ t2 n    pIContainerOfDocument = NULL ;
7 `; q" h& v! @  k4 t3 E    return FALSE;
! D* c, i7 L* S! ]  }+ _. W* }" `; T! w! b8 g% y

% Y1 G1 W  H8 q4 l2 r# Z  //获得Document0 ^) F, w+ ~, A3 E3 e& [' S& h
  CATIContainer* _pContainer = NULL;        $ z- R8 V% b; K2 G7 B% S+ [
  //获得SpecContainer* C3 N+ J' X, v# p" S0 r
  HRESULT hr = pIContainerOfDocument->GetSpecContainer(_pContainer);8 n! f, K5 \$ s1 R
       
% d" ]' x. s9 S2 M  //GSM工厂- o  F5 h0 `: m' {' ]. c
  CATIGSMFactory_var spGSMFactory = NULL_var;8 {+ W: L7 g; M! k: x; g: N
  //设置工厂                / ]+ @; ]4 P2 o' ~2 j. _3 p; u
  spGSMFactory = _pContainer;                                                                        ( P  I; G; Y$ n8 Z

& r+ ^5 r! w& a4 P& i' @6 F  CATIGSMPoint_var spPoint = spGSMFactory->CreatePoint(Point3D);0 H8 g/ C4 x7 [) t  V6 m
+ N- a# n; {( o4 A2 E' p
  CATISpecObject_var spSpecPoint= spPoint;                                        ' [% s* j* l3 B
9 l! f9 F) e  Z. f/ E, n
  CATIGSMProceduralView_var spSndPntObj = spSpecPoint;. i! N( j/ f' b, R4 W

6 @2 h0 s5 f4 f. Y" v2 m  //*将点显示在屏幕上; N  j7 v) Q) R9 b8 e6 ?
  spSndPntObj->InsertInProceduralView();
! ^# S3 E& p% ^9 g4 R0 p0 I6 s/ y
  //更新点对象
6 ]0 h+ |& ?$ S; S  b3 N$ j& S, x  spSpecPoint->Update();
0 H  e) N# G& p3 x# z  f- o) P' w7 i$ z8 T( T3 e
  return TRUE;
& W- N7 z) y) E# n* E$ O: H5 h}" Q8 K# i0 v$ c! ^6 l( I3 Q
3 L- q7 I: P( u5 v, K) I6 T

/ {* X# s' H( J, m4 U) X
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了