|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
CATIA二次开发入门教程---15 通过点击屏幕创建点
7 O% b5 R/ A5 q) w5 {通过点击屏幕,自动创建点, 这里直接建立了一个简单的对话框,通过pushbutton来添加一个回掉函数,函数里面去执行创建点的类。) ]& ^# b$ J( D) h4 o
% F! o! _2 G+ v* _( D: v: H: G/ ^; R
! A; Z* s( j" @( E' M* `# c1 avoid DialogTesTCmdDialog::OnPushButtonCreatePointPushBActivateNotification(CATCommand* cmd, CATNotification* evt, CATCommandClientData data). v# Y7 q* T* O0 J* J0 f
{
1 b: H( f: S/ w$ G4 R // Add your code here
0 J# E [5 |6 p9 c3 b& D CreatePointCmd *createPoint = new CreatePointCmd();
x# _( f4 N) f$ @}
: H) i9 ?3 N& T. S0 V# {4 m( d3 I6 [, F" f% B0 Q
新建一个catia 的命令,名称为 CreatePointCmd ,接下来要做的就是在 action one 里面进行点的创建,代码如下:
8 H- V' L% d1 G) |0 b3 U7 `3 N8 @. x: E: R \1 e
CATBoolean CreatePointCmd::ActionOne( void *data )' t) ^% r$ M& |2 P
{' ]7 R( X2 e, J
// TODO: Define the action associated with the transition
: m0 ~% n2 G0 | // ------------------------------------------------------+ V1 S5 K1 v Y! a) O) O2 i7 R9 U
CATMathPoint2D point2D = _Indication->GetValue();
a ~ i0 g4 H CATMathPlane plane = _Indication->GetMathPlane();9 \+ v- L8 v& F
CATMathPoint point3D;; M8 {5 A3 ^4 E8 R f& Y
plane.EvalPoint(point2D.GetX(),point2D.GetY(),point3D);
+ K0 o F* m# n J4 W/ o7 G' r r, L2 {: e+ g: `6 O: X
cout<<"Point coordinates:" << point3D.GetX() << "," << point3D.GetY() << "," << point3D.GetZ()<<endl;
" U& @9 C% @, J% h% u1 E0 n
. h- M3 x8 q/ i* l2 v/ a1 L: {1 w //设置Container(非根节点)* L7 W y. z# u8 M# S- g& L6 }
//获得Editor; Q. v+ F- Y$ I' @5 d1 w+ y
CATFrmEditor* pEditor = CATFrmEditor::GetCurrentEditor();
9 L- k' w8 n: I+ ~; u //得到当前对象的文档
' P7 D: k0 X. O! O CATDocument * pDocument = NULL ;
9 Q* P4 ?" I% n$ e4 J( o; p //取得当前活动对象! u+ |3 V5 D4 P* Y2 Q) y
CATPathElement activePath = pEditor->GetUIActiveObject();0 o# Z" r) i+ H
//取得当前活动的product& ?9 a. k3 Y6 S! m
CATIProduct *pActiveProduct = (CATIProduct *)activePath.SearchObject(CATIProduct::ClassName());
- g1 ~/ }8 J: p //当前活动对象不存在
0 a9 w/ v# Y( d; Z5 x if (pActiveProduct == NULL)
; Z1 Y1 w3 ?, K7 C; B9 ]% I( L/ y {
, j5 V# u: {" y) O% J8 n. Q7 G pDocument = pEditor->GetDocument();6 \2 J) D$ }' d8 k: |
}9 E) s8 D% J( Z. r
else( f8 y2 U r- K- p0 n
{4 P5 J4 j4 N" T* [ {" V* ~
CATIProduct_var spRef = pActiveProduct->GetReferenceProduct();4 Z2 E* G, V$ b- U
//当前对象的引用对象是否存在
: ]( P4 h0 M' r5 c3 q" ]4 x z if ( NULL_var == spRef ), b; p0 T0 C) _1 C+ b5 Q$ F! v
{
6 _. f3 y& D4 u2 r7 N! g- ]; a return FALSE;2 N$ T/ i5 Q; |; v' ?
}# Z; C2 U: p6 C" m9 G/ `
//当前对象的链接对象
0 o! ~8 I: A0 W$ {2 c) B4 n3 G1 d- |- M CATILinkableObject * piLinkableObject = NULL;; ~" O' c3 b9 y* d
HRESULT rc = spRef->QueryInterface( IID_CATILinkableObject, (void**)& piLinkableObject );
2 z0 T" {# P9 E8 }3 p if ( FAILED(rc) )3 d* o( A2 E, t! M1 m3 J
{3 t8 j+ ^7 ?3 \2 T9 N
piLinkableObject->Release();
0 L) S. A3 n1 x) [* _ piLinkableObject = NULL ;
8 T4 g0 F4 H, R; c% ~1 Q return FALSE;
5 a% w( \% P' C }
0 m" ^$ g# \6 w I //得到当前对象的文档9 T7 o& }, f$ Y+ n7 r
pDocument = piLinkableObject->GetDocument();
: P9 Y: |* c& F, O* F2 Y piLinkableObject->Release();
) v: I. n# l6 B# G5 d8 q6 ` piLinkableObject = NULL ;
, P1 p* |+ y" z+ ?9 k P4 Z if ( NULL == pDocument)- ^# C( \' u0 O1 g& Z! J
{
: _0 C, b! T$ T9 ~. m) m# B, t! O return FALSE;
l6 T6 I0 ]8 I- x" h3 B0 @( | }
9 x3 I: M8 M+ w! ?# {" P+ J4 g }) V! }8 n7 O4 B4 ^$ y) ~* K
//得到文档容器集5 V, N0 d$ V" ~( O [; {
CATIContainerOfDocument * pIContainerOfDocument = NULL;
" j" e5 T$ w+ Y" k, s3 b1 g HRESULT rc = pDocument->QueryInterface(IID_CATIContainerOfDocument, (void**)&pIContainerOfDocument);
8 n: W' a2 _, U. z( T. Z3 L if (FAILED(rc))
( Y. o3 {9 L- s' K; |( x! `; N {* D, g3 A* ?0 ^$ @5 P- x' j
//pIContainerOfDocument->Release();3 s& N0 B3 E0 O9 u
pIContainerOfDocument = NULL ;
1 ^6 e/ e: D: B+ i2 L return FALSE;3 A9 |% |& \& u2 _8 R$ O
}
5 q1 H) ~ `2 { ' m* _2 F: `: j* B- A
//获得Document
4 X/ s- Z; h1 z% h# d9 D. F+ s CATIContainer* _pContainer = NULL;
& n$ t5 H" K K" K' Y, v/ H; q //获得SpecContainer
7 a- w4 H4 e( Z" k HRESULT hr = pIContainerOfDocument->GetSpecContainer(_pContainer);
6 X, }! A# ? c5 b8 I( X
2 ], j8 P! y- w( X( @ //GSM工厂: K4 c2 u T4 [
CATIGSMFactory_var spGSMFactory = NULL_var;
) S6 f; p; D* h, Z1 x: y* m" A2 I //设置工厂 , j- W1 |, E, ~3 v
spGSMFactory = _pContainer; ! H2 Q/ J0 J: X& L( a
CATIGSMPoint_var spPoint = spGSMFactory->CreatePoint(point3D);. j% G, W! i$ M0 H4 C# B
CATISpecObject_var spSpecPoint= spPoint;
, h. Z5 Y; w. q# e' u/ x' R CATIGSMProceduralView_var spSndPntObj = spSpecPoint;( n- R4 I6 M! m# |& r
2 n, Y( A1 N7 q% S/ Q0 U6 y, M( I //*将点显示在屏幕上
" k5 u! Y" |$ S6 w. n spSndPntObj->InsertInProceduralView();
9 Q0 D" ]7 V+ @( G v2 y //更新点对象, r! j9 z# Q4 n( A9 M. x3 K- W
spSpecPoint->Update();3 R, u, @4 L! |5 W# ? p- [
* s& n9 S2 b) u1 q1 C, J return TRUE;
) D4 m4 G. z) J: g# C/ o}
$ k6 N! A- h" R, p4 L5 s5 g4 M2 [& w1 j7 q$ }5 K7 O6 ^
( \9 s8 B$ A3 @* | l效果如下:
6 r; B, V! v8 M* M5 w0 L+ D) |, o, O" r1 ^
5 J+ R: B9 S) }3 n& Y1 p6 N9 d8 x1 r- Y! g9 ^
|
|