|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
PLM之家-NX9.0 二次开发实例视频31 NXOpen C++创建基本特征 <1>-草图的创建
0 N" ?; ]" Q- m) P- J; `内容:4 \( e9 ^4 i' d
草图作为参数化建模的基础,使用代码实现草图的创建过程,主要是对草图环境的初始化,以及草图约束的添加等问题。
?! _, A9 |% G( W# ^1 z* u目的:
+ Q I" x& p( `5 J! I1 Z在NX中,使用NXOpen C++可以很方便的进行JA的录制,从而发掘草图约束中尺寸约束和几何约束的规律,通过这种方式,可以快速的完成开发。
& W: E* g$ T& s8 Z* T: x0 q
NXOpen C++创建草图基本特征
0 e. r; H, G( Q1 }) n5 L
31 NXOpen C++创建基本特征-草图的创建(1)项目介绍. g0 \1 p- F' G
31 NXOpen C++创建基本特征-草图的创建(2)UI设计
( B B/ A: \/ M5 w- _2 B 31 NXOpen C++创建基本特征-草图的创建(3)项目创建+ S6 }# {2 S# y A V& Z7 ?
31 NXOpen C++创建基本特征-草图的创建(4)草图特征创建+ t& f w u9 B. n6 _. h
31 NXOpen C++创建基本特征-草图的创建(5)添加几何到草图; O. u# L; o4 X: D9 s
31 NXOpen C++创建基本特征-草图的创建(6)添加草图几何约束! a' r3 D( ?; j' w
31 NXOpen C++创建基本特征-草图的创建(7)添加草图尺寸约束# s! n$ b4 y0 `
31 NXOpen C++创建基本特征-草图的创建(8)尺寸和UI关联& k9 C) @' n' v
+ H$ X" r8 o' I
$ M( z9 Y* k1 K- g8 p9 U
( ], b8 m1 a5 y4 L T4 Q; ~. P, o- D3 k) [0 W
3 r8 k* ^3 `) |1 @; U9 [
关键代码分享:2 H' \5 P* G0 @; P% Z% V
6 Z1 B3 ]8 b- p- u7 ~4 ?3 o: w2 y% x5 p* l# }# A
- " M1 ]8 K+ ~3 g0 c
- void lesson31_createSkeTCh::createIPSketch(): m) Y+ R4 L8 _, M
- {
1 ]8 x3 P1 D9 e6 r/ ~
5 g" z: z, @+ [% W- Sketch *nullSketch(NULL);% l( E7 |# t2 B7 T0 f* Y! p
- SketchInPlaceBuilder *sketchInPlaceBuilder1;, {# q' l! C' |8 z! o7 @6 V
- sketchInPlaceBuilder1 = workPart->Sketches()->CreateNewSketchInPlaceBuilder(nullSketch);) H, E$ r3 }& q! s4 s
- sketchInPlaceBuilder1->SetPlaneOption(Sketch::PlaneOptionNewPlane);
3 W' u2 [( w" [( B. R( p: R( S0 A - - ?2 j4 S# c1 u W
- //sketchInPlaceBuilder1->Plane()->SetMethod(PlaneTypes::MethodTypeFixedZ);
; O- A$ d3 C/ e$ S
% @7 l0 V) ^0 V2 s) R$ r- ( D0 D/ P& u, N* g: K Q( S9 A
- // add preference
9 G6 V+ p/ ]' f9 W, r) a - / J! K. ]5 u4 R+ L& w; h
- theSession->Preferences()->Sketch()->SetContinuousAutoDimensioning(false);3 B9 L) @& d1 n& P2 k+ u; J
, p7 l3 I) u. E! P' V" ]* q- Drafting::PreferencesBuilder *preferencesBuilder1;- O2 f* R$ Y* |" V
- preferencesBuilder1 = workPart->SettingsManager()->CreatePreferencesBuilder();
: ?4 k1 r1 Q; ~1 R1 Q - preferencesBuilder1->AnnotationStyle()->DimensionStyle()->SetAngularDimensionValuePrecision(3);0 O% |# n1 O& p5 @4 D1 }3 h
- preferencesBuilder1->AnnotationStyle()->DimensionStyle()->SetDimensionValuePrecision(3);
. g: z* p9 L) [ - preferencesBuilder1->Commit();
, k$ J0 s. z5 t9 G y" S
9 ~, M `: `$ y) p* m# `- preferencesBuilder1->Destroy();
+ g0 b6 ?& X) h' G1 c - K1 p7 s& e$ M7 q+ \+ l O [' X; P
, P% u! G5 q# v5 {' p8 `% n3 i- NXObject *nXObject1;9 N; L. Z( L/ o( {# _- o
- nXObject1 = sketchInPlaceBuilder1->Commit();
2 \( \% q& `3 S( W0 s( e - ( W' u" J& q# X$ m% u
- Sketch *sketch1(dynamic_cast<Sketch *>(nXObject1));9 s2 W9 b8 d9 _) L% a' B/ n5 M- x" H
- Features::Feature *feature1;
3 z, \, j y1 h. c) Y - feature1 = sketch1->Feature();
+ K m! ?3 ~' X - feature1->SetName("XY-Plane-Sketch");4 E' f. B' ^ R
-
+ W6 Y2 p6 g5 h2 E5 D6 t# X$ l - sketchInPlaceBuilder1->Destroy();
7 F& {3 B+ A$ L9 A0 R4 m
- ~0 Z+ L- o' c( o; a' d- //1 active sketch
$ p6 D# Q7 w+ U2 G+ M- S( w9 ?
* S( L) S/ |8 D( R! L- sketch1->Activate(Sketch::ViewReorientFalse);
% L3 d; u& w3 E" F. M: T - 3 u8 n, ~/ d$ B& _; ]/ M4 r5 x% x2 y
- double height1 = this->expressionHeight1->GetProperties()->GetDouble("Value");% j. r. v6 o" f6 N
- double height2 = this->expressionHeight2->GetProperties()->GetDouble("Value");: F% w5 f7 h+ `: Y
- double length = this->expressionLength->GetProperties()->GetDouble("Value");
1 d# l5 L Y+ e1 \+ Y$ _) }6 b - // 2.1 create geometry
) l. Q* n6 q% M2 J r7 A
8 j6 v# t. y* I. [% }0 A- Y- Point3d startPoint1(0.0, 0.0, 0.0);7 T. a* M L6 I
- Point3d endPoint1(0, height1, 0.0);6 t& |) G+ d" e" {% J- m2 ]
- Point3d endPoint2(length, height1, 0.0);! \# Q4 O- v) Q( Q
- Point3d endPoint3(length, height1-height2, 0.0);
/ e* L/ a9 u* W3 a. {7 }# k+ B - Point3d origin = sketch1->Origin();
" E0 q# a+ r% b c) e# [0 L, S/ Q* X - Point *originPoint = workPart->Points()->CreatePoint(origin);% M, u: U4 l& |3 U
- 6 o) l( ?3 Q) z
- Line *line1,*line2,*line3,*line4;
( R L( y; K: }. t7 t9 x - line1 = workPart->Curves()->CreateLine(startPoint1, endPoint1);
7 I1 v I9 g* Y; B0 ^$ ^ - line2 = workPart->Curves()->CreateLine(endPoint1, endPoint2); L6 Y5 |3 M+ X+ |) L( H
- line3 = workPart->Curves()->CreateLine(endPoint2, endPoint3);
; x. ^* H* i$ B5 l; h - line4 = workPart->Curves()->CreateLine(endPoint3, startPoint1);
8 S6 f! u5 \4 I3 _" F, q- W - // 2.2 add geometry
0 C, R4 v: A, Z) v/ o - 7 q2 X( F5 t$ `, n$ }0 M
- sketch1->AddGeometry(line1,Sketch::InferConstraintsOptionInferCoincidentConstraints);% b6 e, Z( Y4 g g% Q
- sketch1->AddGeometry(line2,Sketch::InferConstraintsOptionInferCoincidentConstraints);# J1 r3 G) h0 @
- sketch1->AddGeometry(line3,Sketch::InferConstraintsOptionInferCoincidentConstraints);
, R: N# z4 X h( K3 Q, M6 N& u* c - sketch1->AddGeometry(line4,Sketch::InferConstraintsOptionInferCoincidentConstraints);
8 }4 W/ Z; z" v* p: h( \ - 8 {# |( c5 A8 J" `0 }* X4 J: `
- //3 add constraints ( gemo)
( d4 ?! K; V o
/ l3 I2 Z0 d& {+ I4 c! y: ^- Sketch::ConstraintGeometry geomline1;' |9 o6 ~4 o/ d5 h1 z' I# Z; X x
- geomline1.Geometry = line1;: J" \2 }+ e+ h7 ~* I% G( ]
- geomline1.PointType = Sketch::ConstraintPointTypeNone;
5 }* B& X" }+ ^% G& S - geomline1.SplineDefiningPointIndex = 0;$ J; p+ E" m# k% X8 Z6 [* T
- sketch1->CreateVerticalConstraint(geomline1);* k* B* s2 d. q" e2 b" c7 Z# }
4 \ ]: c" q3 W- Sketch::ConstraintGeometry geomline2;
5 H; j; B; I& ]: j3 z5 _ - geomline2.Geometry = line2;% d6 L& c$ q* h7 s n: _
- geomline2.PointType = Sketch::ConstraintPointTypeNone;
0 y# m1 a6 q% ]# ?' z! y2 z - geomline2.SplineDefiningPointIndex = 0;
9 n: B7 b4 W( S! ?' _ - sketch1->CreateHorizontalConstraint(geomline2);
/ a0 a: h: G7 k5 u- J( M( J/ x - + u; d6 t. `7 T" ]. l
- Sketch::ConstraintGeometry geomline3;' B/ I! u4 @8 J1 N* Y
- geomline3.Geometry = line3;
/ }. `$ g" T* P* J/ S( _6 }3 M - geomline3.PointType = Sketch::ConstraintPointTypeNone;
' o# a* M/ ~# P# Q9 n - geomline3.SplineDefiningPointIndex = 0;$ O) v- d' J! y+ D/ r' a
- sketch1->CreateVerticalConstraint(geomline3);; y) d5 K& r- R
: n5 {: r( i3 N- Sketch::ConstraintGeometry geomline1_startPoint;8 Y) N8 ]; |8 q, W5 B
- geomline1_startPoint.Geometry = line1;, O2 j0 h" _' d' h7 f2 ~$ f. I
- geomline1_startPoint.PointType = Sketch::ConstraintPointTypeStartVertex;6 `7 D7 Q' D" `
- geomline1.SplineDefiningPointIndex = 0;
5 p/ \: Q$ _6 @. i. q - Sketch::ConstraintGeometry geomline2_originPoint;
& b7 V, P# Z9 ^ - geomline2_originPoint.Geometry = originPoint;$ A* H3 s. L& R* _) {2 B
- geomline2_originPoint.PointType = Sketch::ConstraintPointTypeNone;5 W/ D- e! ^' ?" X0 c" J
- geomline2_originPoint.SplineDefiningPointIndex = 0;
7 G' I3 \, u3 x, I2 j1 v& B - sketch1->CreateCoincidentConstraint(geomline1_startPoint,geomline2_originPoint);# [1 \+ W0 i+ l, v' P! U
- " a( A# C% U7 o- U
- //4 add constraints (dimension). e+ g. m- G! m! @ v1 G: j
4 b7 }3 P- e8 q3 v/ _0 \1 S1 X- NXObject *nullNXObject(NULL);
0 l% r3 V) s- p3 o0 }- [ - 5 w E9 `2 W/ }( X3 S/ j
- 9 t$ t& q: s# f0 S8 X8 Y
- stringstream s_height1,s_height2,s_length;
% {- F7 C7 l' D5 a - s_height1 <<height1;
$ `* g0 o* m; @1 X3 s - s_height2 <<height2;' @7 k- T7 \4 x6 g
- s_length <<length;& i( `' G5 S1 Q0 f0 `0 K
- 6 ]1 a9 M" V8 }4 `+ ]
- Expression *expression1,*expression2,*expression3;) h! V& l3 ^; S- }1 A2 s# Q
- expression1 = workPart->Expressions()->CreateSystemExpression(s_height1.str());
) i8 d' P1 s/ Z+ B - expression2 = workPart->Expressions()->CreateSystemExpression(s_length.str());! f# l1 t/ c- ]& z) N
- expression3 = workPart->Expressions()->CreateSystemExpression(s_height2.str());7 Q0 j7 [7 r) b. u @
" C4 _6 N& d" o- // line1 dimension
: g. L2 q6 y) S$ S
* z( ?7 ?8 h. v! d- Sketch::DimensionGeometry dimLine1_startPoint;
1 ]" O/ t+ j" t! z9 A - dimLine1_startPoint.Geometry = line1;
1 g7 U& \; N& s- F - dimLine1_startPoint.AssocType = Sketch::AssocTypeStartPoint;
( K4 e, v- T( y z - dimLine1_startPoint.AssocValue = 0;
( R3 d% j9 L; S9 |7 s# [ - dimLine1_startPoint.HelpPoint.X = 0.0;
0 u& Y1 e6 \- }1 Q+ H5 _ - dimLine1_startPoint.HelpPoint.Y = 0.0;
: s+ r" k/ t( R- ?* P7 e6 _/ h - dimLine1_startPoint.HelpPoint.Z = 0.0;
% Z: G& `8 g* U' R$ r! _- u3 Z - dimLine1_startPoint.View = nullNXObject;" i, u Q5 v- k! {$ P2 a; v6 ]( j
8 D8 r2 H& [% Y8 H }' Q$ i+ ~- Sketch::DimensionGeometry dimLine1_endPoint;
7 U @6 ]+ e" q4 t+ t - dimLine1_endPoint.Geometry = line1;& ^5 N9 L5 x5 @* y6 f- N9 V
- dimLine1_endPoint.AssocType = Sketch::AssocTypeEndPoint;) }# k" x5 D: x+ `) g2 [% Q ~
- dimLine1_endPoint.AssocValue = 0; U* ]- d6 c7 ~ Z: a9 g/ [' \1 B* y
- dimLine1_endPoint.HelpPoint.X = 0.0;3 r, W M# `$ A6 v) ^/ g) K# c
- dimLine1_endPoint.HelpPoint.Y = 0.0;4 z& r' S1 m+ d) a* @) m! m2 s
- dimLine1_endPoint.HelpPoint.Z = 0.0;' ^6 y8 C1 r5 ~; J$ ]) L
- dimLine1_endPoint.View = nullNXObject;. Q( f4 m& D3 a, e. v
" ?% g/ z1 q4 c$ L* l! |- Point3d dimOrigin1(-100, height1/2, 0.0);6 I6 ]/ S9 S$ A/ k, R- q- n
# ]' O7 r5 s J; S! ]6 q- sketch1->CreateDimension(Sketch::ConstraintTypeParallelDim, dimLine1_startPoint, dimLine1_endPoint, dimOrigin1, expression1, Sketch::DimensionOptionCreateAsDriving);
6 h8 d5 P4 I% c3 T' c
6 C8 }2 u+ g9 z- H% P- * r1 Z; P+ J0 |$ f/ Q2 z- s' E
-
6 F+ I7 W" ]$ t( K - // line2 dimension ! m* u* I5 C# _/ i/ o1 b
- ]' X6 _% i. U& s+ O
- Sketch::DimensionGeometry dimLine2_startPoint;
; d5 o q+ y3 \ [( x. j6 Q0 X4 c - dimLine2_startPoint.Geometry = line2;
" [) Z, Y# r1 y - dimLine2_startPoint.AssocType = Sketch::AssocTypeStartPoint;
/ Z8 y$ v! w' u7 `0 r; l6 K) I) C - dimLine2_startPoint.AssocValue = 0;
3 [- a+ j7 N- t- r9 g - dimLine2_startPoint.HelpPoint.X = 0.0;
* }" Q! e, @# C0 F9 @: T - dimLine2_startPoint.HelpPoint.Y = 0.0;6 j C+ y+ r% p( ^5 r/ D! O
- dimLine2_startPoint.HelpPoint.Z = 0.0;
7 s) S n9 Y. B* D/ H - dimLine2_startPoint.View = nullNXObject;: B0 g/ N, V- F" i6 d* G, ?& X: [
- 3 x% n% X" I. n0 B' G7 f+ [
- Sketch::DimensionGeometry dimLine2_endPoint;
/ a n$ H& N! K% q& U1 Z+ g; U - dimLine2_endPoint.Geometry = line2;- e, W" W& D% ~' G1 O* v% \
- dimLine2_endPoint.AssocType = Sketch::AssocTypeEndPoint;* f5 `5 n$ o: |3 C- I0 v' t) `
- dimLine2_endPoint.AssocValue = 0;
- Z% |! l& I5 z: I - dimLine2_endPoint.HelpPoint.X = 0.0; [9 r) k6 F7 v A2 A5 k
- dimLine2_endPoint.HelpPoint.Y = 0.0;
5 u' X% g5 _+ G; \( e& u8 K. Q$ C - dimLine2_endPoint.HelpPoint.Z = 0.0;* N3 R" N0 n' x- }: E2 ?% W
- dimLine2_endPoint.View = nullNXObject;, a8 o8 Y& W1 O- u$ i$ K0 e7 N
- F2 k1 t* U* ~- Point3d dimOrigin2(length /2,100 + height1, 0.0);
! H: x9 G/ k9 F2 h - - A% @: |) @8 F# r8 _
- sketch1->CreateDimension(Sketch::ConstraintTypeParallelDim, dimLine2_startPoint, dimLine2_endPoint, dimOrigin2, expression2, Sketch::DimensionOptionCreateAsDriving);
& Q M: P- I) x/ b/ }5 N
! x0 P; p3 n3 {9 @( C- : ~" h6 T4 b/ k7 h& _
- ( E& O8 N5 @4 b* k- q p
- // line3 dimension 8 f+ Y' n8 q6 F) i* C) g
# r& @! _8 u0 n) }" x: n2 E- Sketch::DimensionGeometry dimLine3_startPoint;4 @. R( z3 z P4 R# O1 I! J q7 p
- dimLine3_startPoint.Geometry = line3;
% p% q6 y" i: S7 b T% j6 `8 V - dimLine3_startPoint.AssocType = Sketch::AssocTypeStartPoint;/ F" B7 u8 W# o7 e
- dimLine3_startPoint.AssocValue = 0;6 [( B" h; B& B I! y
- dimLine3_startPoint.HelpPoint.X = 0.0;
# k y; b+ O( H: z - dimLine3_startPoint.HelpPoint.Y = 0.0;+ f; _3 i% P4 F% O2 Y
- dimLine3_startPoint.HelpPoint.Z = 0.0;
9 }% g/ c+ U5 X - dimLine3_startPoint.View = nullNXObject;
) Z$ {2 A" p9 Y, S! [! h! K
" d# u p; r l, @ ]- Sketch::DimensionGeometry dimLine3_endPoint;& Y. ~4 T) w* P' J" N5 |
- dimLine3_endPoint.Geometry = line3;) x- T; w) f) k
- dimLine3_endPoint.AssocType = Sketch::AssocTypeEndPoint;, [$ j* n+ {! T2 o
- dimLine3_endPoint.AssocValue = 0;5 h9 T/ [$ U0 b" G' ^
- dimLine3_endPoint.HelpPoint.X = 0.0;& a+ D) b% M. m, F$ u( Y
- dimLine3_endPoint.HelpPoint.Y = 0.0;
6 m4 \" E9 q& c: u - dimLine3_endPoint.HelpPoint.Z = 0.0;4 B: H; w/ ~8 ^
- dimLine3_endPoint.View = nullNXObject;
& v, _ e/ a1 J' B: F; K
! \7 L4 A+ p/ S" Y. k- Point3d dimOrigin3( 100 + length, height1-height2+ height2 /2 , 0.0);+ a6 s! C. N( S" ]. H2 q
-
" L1 V+ e6 ]4 d) y' y - sketch1->CreateDimension(Sketch::ConstraintTypeParallelDim, dimLine3_startPoint, dimLine3_endPoint, dimOrigin3, expression3, Sketch::DimensionOptionCreateAsDriving);
) R- U2 o1 }( P! X: \7 Z; |1 `- { - / g! f! z' c z3 _4 Y
- 6 v; H0 M! }8 M+ D% g
0 P0 x8 }! a I% `- //5 update & deactive
6 Y" H, y0 y4 m6 f0 e6 { - sketch1->Update();
D) p+ E- b/ M, a9 {; z
, b% D* o! W$ |9 I# ?- sketch1->Deactivate(Sketch::ViewReorientFalse,Sketch::UpdateLevelModel);2 Z- ~+ o6 v3 W, G7 T N4 S+ J# @
- 2 u: o; R+ T( s8 m
- delete expression1;
' W/ ]# m, j& E, W - delete expression2;! z/ e! W6 f7 z$ R
- delete expression3;: d4 W$ }$ i a. e+ y% R+ l7 N
- " r# X, G4 ]3 S- ~
- }# g0 `; C& U* w3 I1 p9 g; ^4 g
复制代码 , z/ s* b- x! U3 ~% y) J3 _! }
5 A! c! B; k8 {5 b8 c& [
P& k* O8 x u3 b i( Q
9 S6 y, f8 a" q+ v |
|