|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
PLM之家-NX9.0 二次开发实例视频31 NXOpen C++创建基本特征 <1>-草图的创建
1 p) q5 Y! E: {2 g( S内容:
4 R2 p% I( u* L草图作为参数化建模的基础,使用代码实现草图的创建过程,主要是对草图环境的初始化,以及草图约束的添加等问题。9 ]5 F) O$ g1 K( W9 X$ n
目的:$ d3 \* {5 Y% E% }
在NX中,使用NXOpen C++可以很方便的进行JA的录制,从而发掘草图约束中尺寸约束和几何约束的规律,通过这种方式,可以快速的完成开发。8 D- L% Z, w8 \8 C% i o
NXOpen C++创建草图基本特征
" b& z% d! a+ l& E
31 NXOpen C++创建基本特征-草图的创建(1)项目介绍8 N' M- W( R% \3 T
31 NXOpen C++创建基本特征-草图的创建(2)UI设计8 y- ^, [+ a& \. h# [4 m
31 NXOpen C++创建基本特征-草图的创建(3)项目创建
5 m: y0 ]8 g8 ?6 p: I. e 31 NXOpen C++创建基本特征-草图的创建(4)草图特征创建
" ^5 W8 x( J8 g" ]& |* A6 K 31 NXOpen C++创建基本特征-草图的创建(5)添加几何到草图
! r! ^7 z4 @: f3 B% c8 D 31 NXOpen C++创建基本特征-草图的创建(6)添加草图几何约束
, n( t- g& f' V, }8 P 31 NXOpen C++创建基本特征-草图的创建(7)添加草图尺寸约束9 R$ {/ O# ]# S& f& w- E# r
31 NXOpen C++创建基本特征-草图的创建(8)尺寸和UI关联
7 K4 [# W$ ?8 Y# m( C& b1 ], [/ M
! P) u0 i! M* b7 x
. m# S0 e: |. w/ t- Z0 L7 ?- l& Y* D* u. T: ]
5 P& x0 M+ ?4 m+ ?! Q. p, ^, T$ ]0 W0 B关键代码分享:+ {" V$ a. |$ c' C7 i/ u7 ~9 ~7 B
& f+ b0 {) V" |0 `+ T, |3 S8 B
" t- ?9 m* ?% |' M
) n) g1 Z- w+ A+ e* D3 h/ O! m- void lesson31_createSkeTCh::createIPSketch()' C% v9 r5 Y: ?' V ~0 Y
- {
$ i, ~. u5 W# p! O. w - $ a/ z1 ^. | N. U+ }3 ~% v' S
- Sketch *nullSketch(NULL);, Q4 U4 j I( M4 x a
- SketchInPlaceBuilder *sketchInPlaceBuilder1;9 A; g) {! L3 a# P4 Y4 H$ h6 }9 Y
- sketchInPlaceBuilder1 = workPart->Sketches()->CreateNewSketchInPlaceBuilder(nullSketch);: B( m1 @( l2 s4 X6 l
- sketchInPlaceBuilder1->SetPlaneOption(Sketch::PlaneOptionNewPlane);
2 o* c$ l0 @ O2 l6 u
' X- }! S/ ~( p- a! A- //sketchInPlaceBuilder1->Plane()->SetMethod(PlaneTypes::MethodTypeFixedZ);+ g8 u8 _" b) [ y
$ }3 |) y* F4 `
. y$ W' C8 V$ g2 N! i- // add preference- I8 s% z% c9 k
- + A0 }0 y$ d2 g
- theSession->Preferences()->Sketch()->SetContinuousAutoDimensioning(false);
2 z8 o8 y6 ]6 }* a
" n$ U& T+ W+ r6 z! D- Drafting::PreferencesBuilder *preferencesBuilder1;, o- s( f& u( F' e$ k3 G* @5 _
- preferencesBuilder1 = workPart->SettingsManager()->CreatePreferencesBuilder();. Y4 b8 R6 d$ F/ `, W$ L z
- preferencesBuilder1->AnnotationStyle()->DimensionStyle()->SetAngularDimensionValuePrecision(3);
- l0 s0 ^" F. w1 r( F7 m - preferencesBuilder1->AnnotationStyle()->DimensionStyle()->SetDimensionValuePrecision(3);8 c9 v9 p$ t, T# R
- preferencesBuilder1->Commit();; A7 i) u; q" l! U
/ T: S, }3 L1 v1 C- [# } b- @- preferencesBuilder1->Destroy();2 v5 |# m3 c& b$ D" h: j
S" B* V2 Z+ O0 q
9 z' C+ m% _- r; {, H+ ^) Y- NXObject *nXObject1;
' U" m9 a( d8 K% E7 t - nXObject1 = sketchInPlaceBuilder1->Commit();
# D* m6 L& @- s' w
( U: N. w) e f l- Sketch *sketch1(dynamic_cast<Sketch *>(nXObject1));
0 r' u6 J5 P+ g3 p6 @; H: B - Features::Feature *feature1;
- |% d/ f& P. g% Z5 @. k& Q - feature1 = sketch1->Feature();+ B; ]& g. C4 u) Q0 o4 G/ m
- feature1->SetName("XY-Plane-Sketch");0 Q3 {4 Y. w1 S7 e
- ! a; E1 n# c& J& b3 K/ Q
- sketchInPlaceBuilder1->Destroy();$ G$ {# Y0 Z4 L: w* i" G- I P
# J/ i- D2 w! j4 C9 f8 P- //1 active sketch + a j+ q7 s. f4 O A* R
- % I: g2 Q( w9 H6 B
- sketch1->Activate(Sketch::ViewReorientFalse);( s! M/ p0 \- M
- 3 p' ~( u* x; b" k) M
- double height1 = this->expressionHeight1->GetProperties()->GetDouble("Value");
' F2 d4 T% _, J* O% d3 c# O3 v8 l - double height2 = this->expressionHeight2->GetProperties()->GetDouble("Value");
* t- i6 R' D, U/ y F - double length = this->expressionLength->GetProperties()->GetDouble("Value");9 n# A& M/ q9 X8 Z2 _5 y& x
- // 2.1 create geometry8 b% q/ @( M" b6 e# e+ E
- % c( W, W" m& _& m8 }
- Point3d startPoint1(0.0, 0.0, 0.0);
& A! b% D1 x, M3 C$ e. [2 d, B$ w - Point3d endPoint1(0, height1, 0.0);
4 l% `1 n* x8 `! r+ p0 f$ B( g - Point3d endPoint2(length, height1, 0.0);" _! ?5 U7 i p& I$ o! ~# F
- Point3d endPoint3(length, height1-height2, 0.0);
. N, E4 F0 @# Y. L- K. b7 e! V7 z - Point3d origin = sketch1->Origin();7 |' U. N7 K: q0 S1 T
- Point *originPoint = workPart->Points()->CreatePoint(origin);. e5 v+ K, \- [& t( b" q; p. k9 G: z
- * ]* ]% }: M. d: l
- Line *line1,*line2,*line3,*line4;
" i" r* c% X, D, w& ~/ A - line1 = workPart->Curves()->CreateLine(startPoint1, endPoint1);
( X9 ^: ~& g: p. F- _3 d/ `! l - line2 = workPart->Curves()->CreateLine(endPoint1, endPoint2);
: V: Y1 p2 x$ ? - line3 = workPart->Curves()->CreateLine(endPoint2, endPoint3);* V/ d$ a' b. E. O/ Z' ?2 m
- line4 = workPart->Curves()->CreateLine(endPoint3, startPoint1);/ m6 K# z6 W9 I3 `
- // 2.2 add geometry; T. Y* O( g$ Y2 p
- " U) i! i5 n, y
- sketch1->AddGeometry(line1,Sketch::InferConstraintsOptionInferCoincidentConstraints);6 ~) r; B) ~6 _/ V8 U' a2 p% r/ t+ D
- sketch1->AddGeometry(line2,Sketch::InferConstraintsOptionInferCoincidentConstraints);
, Q; f. f& q- t1 D1 n% f - sketch1->AddGeometry(line3,Sketch::InferConstraintsOptionInferCoincidentConstraints);
$ i) s8 z/ l& v" h* G1 [4 d - sketch1->AddGeometry(line4,Sketch::InferConstraintsOptionInferCoincidentConstraints);4 Z9 D1 M2 b7 P
4 Z G, t; n+ j6 o- //3 add constraints ( gemo)5 O6 ]' H$ V+ \- J
- " k+ |- m: e6 d! v8 G* [
- Sketch::ConstraintGeometry geomline1;' H( a! ]" L0 k6 b9 @, H8 j
- geomline1.Geometry = line1;
8 ]$ b3 T# A. {; X! k0 F9 U - geomline1.PointType = Sketch::ConstraintPointTypeNone;
. W' K* x. D9 i) i n7 q7 h+ d - geomline1.SplineDefiningPointIndex = 0;5 O: i$ \* ^5 o3 K; t v
- sketch1->CreateVerticalConstraint(geomline1);( Y9 }0 w0 g! g( K. L M7 {' [ ^
- ! W: ^- K4 @" N2 X
- Sketch::ConstraintGeometry geomline2;! h; `0 }, _3 }
- geomline2.Geometry = line2;
1 H, c( A* E( H& ]! {/ v - geomline2.PointType = Sketch::ConstraintPointTypeNone;' N2 k" n; ~# r
- geomline2.SplineDefiningPointIndex = 0;
# P p+ [' a/ h+ e2 _- k. m4 @ - sketch1->CreateHorizontalConstraint(geomline2);
: `4 }: ~& {7 d2 l2 E2 ?6 L, e7 N
9 W# H/ w4 t! o! P" H) X- Sketch::ConstraintGeometry geomline3;
/ y5 {; S# l& ^4 o. G( _/ e: _ - geomline3.Geometry = line3;
9 i5 q6 m" C+ l+ V9 b0 } - geomline3.PointType = Sketch::ConstraintPointTypeNone;4 a+ q0 V% O( }' w
- geomline3.SplineDefiningPointIndex = 0;" O# e7 t/ g" c
- sketch1->CreateVerticalConstraint(geomline3);) R9 |, K1 R3 p; P# \
F4 U- K/ g) j+ ]( C- Sketch::ConstraintGeometry geomline1_startPoint;
! x, ^& j U0 V1 Z) Y" y - geomline1_startPoint.Geometry = line1;. f% Q9 O) u1 f7 i6 }( n9 ]
- geomline1_startPoint.PointType = Sketch::ConstraintPointTypeStartVertex;: i2 \" L3 F9 D' u5 B% i
- geomline1.SplineDefiningPointIndex = 0;7 G0 O5 J" c! E/ b! K, a9 p
- Sketch::ConstraintGeometry geomline2_originPoint;
4 w+ C. G0 F) f' m) C- P- j+ |9 W - geomline2_originPoint.Geometry = originPoint;- n3 _0 n q1 O2 x! h
- geomline2_originPoint.PointType = Sketch::ConstraintPointTypeNone;
, s* E) n# |# h0 Z: X - geomline2_originPoint.SplineDefiningPointIndex = 0;
* q( E8 x" x- g* k - sketch1->CreateCoincidentConstraint(geomline1_startPoint,geomline2_originPoint);
4 W( F& P4 w1 y0 q$ u( Y - 4 r. S5 P$ \& w- N- [. `# h z8 W
- //4 add constraints (dimension)
# v0 l1 h: t6 v2 @9 Q
( @. a1 I2 Y: i# T- NXObject *nullNXObject(NULL);$ W( v1 \" O& x) x9 l
' V. Y8 _" N9 W6 s- 6 W( V/ z: E, `+ O1 z/ @; a; j) z
- stringstream s_height1,s_height2,s_length;
V2 b! B( l$ Y( c7 R - s_height1 <<height1;
6 M( S; Q7 `0 r7 { q - s_height2 <<height2;
& c% p0 D5 |" T2 h% _3 S - s_length <<length;9 g# U% p$ O- R$ i7 \& K- ~4 L
- ( O' p. ~( [1 Y- i0 w9 [
- Expression *expression1,*expression2,*expression3;- b7 t$ ^8 {2 ]* J g$ J
- expression1 = workPart->Expressions()->CreateSystemExpression(s_height1.str());) Y* [4 O1 a6 _% Q8 r+ \
- expression2 = workPart->Expressions()->CreateSystemExpression(s_length.str());
1 ]5 y7 B! F( o - expression3 = workPart->Expressions()->CreateSystemExpression(s_height2.str());' r# C( f+ h; c! ^) @% L- A
2 ]1 v7 Y7 }6 x# H4 v; m. x& v+ F2 K- // line1 dimension
) S. C R$ q: ]7 A) ?( }+ a - 4 F/ Q/ p% r: d0 k. y* L
- Sketch::DimensionGeometry dimLine1_startPoint;9 _9 q, A$ R) g6 [" M
- dimLine1_startPoint.Geometry = line1;
9 M! b8 s' t: C: N8 u - dimLine1_startPoint.AssocType = Sketch::AssocTypeStartPoint;
* c8 D4 }3 N6 Q - dimLine1_startPoint.AssocValue = 0;+ X2 N! X. Y7 V: I
- dimLine1_startPoint.HelpPoint.X = 0.0;4 Y+ b2 F$ V% O1 U
- dimLine1_startPoint.HelpPoint.Y = 0.0;
5 D3 k9 w8 _; C- {+ s( A Y/ E - dimLine1_startPoint.HelpPoint.Z = 0.0;
0 b, C2 x& |- R& U - dimLine1_startPoint.View = nullNXObject;, C5 _) ]7 ?8 E z6 Q( _
- z& m$ D. I* }1 U# G
- Sketch::DimensionGeometry dimLine1_endPoint;
5 P' D: A$ I' j: v - dimLine1_endPoint.Geometry = line1;
! M2 `7 j& \+ [& T5 \& l0 P - dimLine1_endPoint.AssocType = Sketch::AssocTypeEndPoint;
! Q: y3 E- W0 b* f/ x( Q - dimLine1_endPoint.AssocValue = 0;
- w. M6 O; {6 F9 ~ - dimLine1_endPoint.HelpPoint.X = 0.0;
3 D! R$ Z2 p. f- E: K# t - dimLine1_endPoint.HelpPoint.Y = 0.0;0 y" y6 H. G8 e: l
- dimLine1_endPoint.HelpPoint.Z = 0.0;! f( @+ g* Q; V8 R* c
- dimLine1_endPoint.View = nullNXObject;
+ l/ l. N X8 f% f+ s# i I$ `
! q+ Q5 y1 I9 j" ^3 f2 W- Point3d dimOrigin1(-100, height1/2, 0.0);# ]$ ~8 F2 Z1 v! V" Q0 g
# M* f* a( F, o6 G- ]- ?- sketch1->CreateDimension(Sketch::ConstraintTypeParallelDim, dimLine1_startPoint, dimLine1_endPoint, dimOrigin1, expression1, Sketch::DimensionOptionCreateAsDriving);5 T# r$ l2 u. y
8 I `; s! K4 K5 }
3 w" I& ^6 u: u5 x3 g, v- ! `* g; t! ?' X$ z, K: h9 S V
- // line2 dimension
$ o0 o, l( u' w- x$ W
% o( t2 k4 L# p4 _- Sketch::DimensionGeometry dimLine2_startPoint;7 t4 s0 r) q5 S% z
- dimLine2_startPoint.Geometry = line2;
/ J& F7 z8 n$ S5 ]: Z - dimLine2_startPoint.AssocType = Sketch::AssocTypeStartPoint;' Q5 x, n) U3 n& I/ A( R6 o6 ?$ X
- dimLine2_startPoint.AssocValue = 0;0 j- L* K8 R5 I7 ]
- dimLine2_startPoint.HelpPoint.X = 0.0;
) }. l9 ^+ x- l- F - dimLine2_startPoint.HelpPoint.Y = 0.0;; A) Z/ Y0 Y! E) B
- dimLine2_startPoint.HelpPoint.Z = 0.0;
. E- M- M9 F7 ?. f3 h+ { N1 O1 ^* {. Q+ p - dimLine2_startPoint.View = nullNXObject;( r/ ~9 l7 m: `- L0 \5 t2 {( L
6 y4 ~5 L* q# T/ N% ?4 v- Sketch::DimensionGeometry dimLine2_endPoint;
& x9 N! K& C# F1 N) d9 \5 F - dimLine2_endPoint.Geometry = line2;& Z5 c2 G: i ^% q6 l9 r u
- dimLine2_endPoint.AssocType = Sketch::AssocTypeEndPoint;' M" B8 S1 \( J/ G
- dimLine2_endPoint.AssocValue = 0;
) m$ x) \7 {) V8 y4 b3 Q - dimLine2_endPoint.HelpPoint.X = 0.0;. w+ p+ k4 \0 |2 m1 l" Q
- dimLine2_endPoint.HelpPoint.Y = 0.0;
& N1 `0 K( A* A+ Z - dimLine2_endPoint.HelpPoint.Z = 0.0;
( w; D" o( b- M+ d* E& T' v - dimLine2_endPoint.View = nullNXObject;4 @8 z7 P9 x% o4 ^$ l1 y: R: e
" B J! I* G# |$ N/ t- Point3d dimOrigin2(length /2,100 + height1, 0.0);; O" s' b) O2 A( ~
- + @ j- r! U8 f8 }7 F( x
- sketch1->CreateDimension(Sketch::ConstraintTypeParallelDim, dimLine2_startPoint, dimLine2_endPoint, dimOrigin2, expression2, Sketch::DimensionOptionCreateAsDriving);7 j4 a4 M; c# Z& q
- 0 D: _6 n w2 o4 j% Q Y7 t1 I' @
2 y& E6 k O: U2 I' j q-
, z8 |- w" b: D- Y& k7 B - // line3 dimension
8 [5 u. F( I W M$ W - : A; g x8 A9 |5 B2 H
- Sketch::DimensionGeometry dimLine3_startPoint;7 z8 H8 B5 g' l% t1 o% r" d
- dimLine3_startPoint.Geometry = line3;
: ]. N: a- K% H( j1 w$ I# c: n% h - dimLine3_startPoint.AssocType = Sketch::AssocTypeStartPoint;/ Z7 o0 ~$ y+ {" {, a
- dimLine3_startPoint.AssocValue = 0; M1 W {1 U; W! }5 L b0 E
- dimLine3_startPoint.HelpPoint.X = 0.0;6 g1 @: w" ?3 y- \/ ^" a" U+ z
- dimLine3_startPoint.HelpPoint.Y = 0.0;: R# M3 r, t" r( K+ Q6 C4 R; j
- dimLine3_startPoint.HelpPoint.Z = 0.0;* D1 Q9 N8 L* V3 u& N6 U0 [
- dimLine3_startPoint.View = nullNXObject;' b7 N; p; S8 z3 v) _* k( w2 }
- 5 V& e8 y. }/ k7 ~
- Sketch::DimensionGeometry dimLine3_endPoint;
P$ f$ p0 K" V, d4 c; }! M* [ - dimLine3_endPoint.Geometry = line3;
6 a0 e/ e. U# h+ _ - dimLine3_endPoint.AssocType = Sketch::AssocTypeEndPoint;+ `$ H5 E# Q$ X" k) B
- dimLine3_endPoint.AssocValue = 0;$ A7 t: j% U* \3 l
- dimLine3_endPoint.HelpPoint.X = 0.0;
: i# b& h: b) ?. F% p - dimLine3_endPoint.HelpPoint.Y = 0.0;: e: }; X4 j" F Q" f# i
- dimLine3_endPoint.HelpPoint.Z = 0.0;) y( ]. q2 P# ^$ ~/ |/ L# K1 e
- dimLine3_endPoint.View = nullNXObject;! m' K* Q4 F' a) M9 b& B
- ; x% l& J H7 G4 s2 x. B# C5 O
- Point3d dimOrigin3( 100 + length, height1-height2+ height2 /2 , 0.0);) y' W |9 p7 b
- 3 c$ q) c& ]$ a
- sketch1->CreateDimension(Sketch::ConstraintTypeParallelDim, dimLine3_startPoint, dimLine3_endPoint, dimOrigin3, expression3, Sketch::DimensionOptionCreateAsDriving);
' s* }6 w+ R5 P5 K& ?( I7 u - 7 `! `- K$ D1 a& U: X; A
" \- T" K4 F0 h- ( ? Z# ^. t% P+ K; K
- //5 update & deactive
+ r# Z5 C, R. ~ H- [& p6 k - sketch1->Update();1 p9 j, e9 ]$ d4 ?
- . a/ M5 o7 t2 E+ c1 _) J
- sketch1->Deactivate(Sketch::ViewReorientFalse,Sketch::UpdateLevelModel);
" G# E0 ]: M: E9 [; q: ^2 O7 U - - k1 o5 y" |1 Q9 p/ o
- delete expression1;
+ A. Z; e- W4 @4 p. }& j - delete expression2;
3 {( X' p, c3 u) d3 H, f6 ? a - delete expression3;2 |6 S) J9 S( `
-
1 G. O/ O: u6 ]* y - }
# s/ l; I# y# k" h
复制代码
& F0 g" j$ ~2 {$ m5 T
. }1 K$ u0 i! ~. h/ l* V" A0 R/ U, H0 z
8 I+ ]7 {' x! d' o! K/ E2 \
|
|