|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
PLM之家-NX9.0 二次开发实例视频31 NXOpen C++创建基本特征 <1>-草图的创建
' X+ I! q R' C0 n0 q" }+ O内容:0 ?' n# t- o0 H. u2 W. y0 _3 J
草图作为参数化建模的基础,使用代码实现草图的创建过程,主要是对草图环境的初始化,以及草图约束的添加等问题。
$ }7 n! u7 d, H. n# H$ l& a目的:
* q ]/ G; |' L; N; m! { x; ?在NX中,使用NXOpen C++可以很方便的进行JA的录制,从而发掘草图约束中尺寸约束和几何约束的规律,通过这种方式,可以快速的完成开发。
* e8 k- L) O1 R+ V* C" Q
NXOpen C++创建草图基本特征
5 x& ` B" e7 k/ V8 E& f& Y 31 NXOpen C++创建基本特征-草图的创建(1)项目介绍% S5 m9 T7 W6 ]
31 NXOpen C++创建基本特征-草图的创建(2)UI设计
h6 C: `; I* D! f& r3 e 31 NXOpen C++创建基本特征-草图的创建(3)项目创建# Z! N* [$ V' h! Y& [1 I* C, R
31 NXOpen C++创建基本特征-草图的创建(4)草图特征创建
* L5 \. S0 C* C c 31 NXOpen C++创建基本特征-草图的创建(5)添加几何到草图/ K6 N# p2 o. M& H5 U+ _" f$ z
31 NXOpen C++创建基本特征-草图的创建(6)添加草图几何约束
G; h! {0 U2 B* U* v3 ^, G: a. ^ 31 NXOpen C++创建基本特征-草图的创建(7)添加草图尺寸约束
( b. `8 w1 O0 N+ F 31 NXOpen C++创建基本特征-草图的创建(8)尺寸和UI关联2 Y! g: f$ Z5 x. q8 O: f3 M, o
0 u* z4 V6 ?7 m9 d) p2 Q) E! W* ~
% Z4 m% X7 Y3 @% L/ | @5 {
8 Q% G0 Y+ Y7 ^! }
' {- O( L: q7 ~; O( `0 P
5 [6 h9 D( ^3 j- m' D" a/ Y# c关键代码分享:
, v4 e( K3 Z: v( \! W* U# ~4 Y& \4 j% r7 Q# l
* w* E t6 P! t6 B5 h2 Q& v
- # K" @8 T2 Y2 p
- void lesson31_createSkeTCh::createIPSketch(); a9 T, ~2 e( I, s" ]2 ~
- {
, l" t; Y' M. X# J1 L- q6 R0 x ? - & g, J8 a$ l% q/ R/ J6 V4 j1 `; l. m' |
- Sketch *nullSketch(NULL);
2 M* y! w8 g+ R0 l& x; N+ c6 y: k - SketchInPlaceBuilder *sketchInPlaceBuilder1;& H$ `9 Q8 O9 d; S; h8 O
- sketchInPlaceBuilder1 = workPart->Sketches()->CreateNewSketchInPlaceBuilder(nullSketch);/ y" O8 r5 t) K @* z% w3 x9 i3 a
- sketchInPlaceBuilder1->SetPlaneOption(Sketch::PlaneOptionNewPlane);8 a6 h: s: u5 \) q
# s, G- z4 v& ^2 ?4 `* }- //sketchInPlaceBuilder1->Plane()->SetMethod(PlaneTypes::MethodTypeFixedZ);! t2 L. Z' \5 e0 L* Z
- . R7 |) h9 h9 Y9 }( ?! J0 t
- 6 ?) D3 F! ^: I4 \3 [8 C- M M
- // add preference
3 Q' ?) j4 X) U* w
3 S, L' m* U2 U# L5 d! R- theSession->Preferences()->Sketch()->SetContinuousAutoDimensioning(false);/ ^, A* ~2 P% g% C% f
; l4 Q( Y7 {0 z1 T& `7 k- Drafting::PreferencesBuilder *preferencesBuilder1;7 A8 y2 ~+ [; @* J4 H
- preferencesBuilder1 = workPart->SettingsManager()->CreatePreferencesBuilder();4 r5 y% u2 P. J' t3 c
- preferencesBuilder1->AnnotationStyle()->DimensionStyle()->SetAngularDimensionValuePrecision(3);
( G! h/ U& ^" o+ Z - preferencesBuilder1->AnnotationStyle()->DimensionStyle()->SetDimensionValuePrecision(3);' ]; E9 o' ~' ~
- preferencesBuilder1->Commit();# o# p) r# T! U1 L5 ?0 A2 |
- " w) r% v) t D8 E) D6 l
- preferencesBuilder1->Destroy();
+ [% K1 W a8 w3 R
0 [" z! ~/ v0 q' ^' \8 s0 O+ e0 a- " o( L& g D1 I
- NXObject *nXObject1;
; v' W+ n' W) I! M6 E2 F - nXObject1 = sketchInPlaceBuilder1->Commit();
/ v, d8 v. ]7 e9 f8 G( Q6 e - 0 p$ `2 `. P. d9 e: ^, J4 ^* M. l( j
- Sketch *sketch1(dynamic_cast<Sketch *>(nXObject1));
: o* h/ j. k; p - Features::Feature *feature1;
5 t% }" ]/ I5 M* a Y" I - feature1 = sketch1->Feature();7 F( m+ H; N) h$ n; _, J
- feature1->SetName("XY-Plane-Sketch");% ^, R/ ^, ?* Q! J" V
-
! O# H3 G. O2 C7 ^; K - sketchInPlaceBuilder1->Destroy();8 `% @$ ]8 R7 y% `* E' C
( U1 |6 z v& m* T7 f- //1 active sketch : \! M' B/ e+ {- O/ ^ d" t
- ' ]1 ^( p& F. k, x' m! x
- sketch1->Activate(Sketch::ViewReorientFalse);/ G' Q/ n1 T' I/ {2 y9 g/ ^* S
-
! {0 }: T) D9 M) X% Z9 J x# i - double height1 = this->expressionHeight1->GetProperties()->GetDouble("Value");
/ U/ e% X6 A! @' F - double height2 = this->expressionHeight2->GetProperties()->GetDouble("Value");
5 @& w6 _# A: ~& m - double length = this->expressionLength->GetProperties()->GetDouble("Value");
; w: z3 l3 E& ^7 Y( H) \6 m4 I - // 2.1 create geometry
- D; z* t5 k3 R% I8 H
5 X( B9 l2 z3 e- Point3d startPoint1(0.0, 0.0, 0.0);
+ p B& c; w2 f - Point3d endPoint1(0, height1, 0.0);9 X+ i x/ H+ M0 @6 ]
- Point3d endPoint2(length, height1, 0.0);6 r. _3 E/ C# V( W. s3 ]
- Point3d endPoint3(length, height1-height2, 0.0);
4 P3 m2 h$ m a: v - Point3d origin = sketch1->Origin();# R8 j1 e" T6 e p) x' v
- Point *originPoint = workPart->Points()->CreatePoint(origin);3 X# @/ }2 h& x e& T# ~5 o& j8 s
+ K3 I6 G' i7 s3 ? _- Line *line1,*line2,*line3,*line4;
- F$ j/ b% v# Z' W- T - line1 = workPart->Curves()->CreateLine(startPoint1, endPoint1);
! C* R, o/ j" e0 Y2 Y - line2 = workPart->Curves()->CreateLine(endPoint1, endPoint2);
2 T0 G$ I* U$ h W - line3 = workPart->Curves()->CreateLine(endPoint2, endPoint3);
$ A% W4 ?9 j0 L; ~! V" C7 g. Y: P# { - line4 = workPart->Curves()->CreateLine(endPoint3, startPoint1);
& j5 _; U- [$ p* U; y& p - // 2.2 add geometry! Q6 v$ p# E! T3 R) G
- , ?+ b1 \. q3 `/ R( X2 Y
- sketch1->AddGeometry(line1,Sketch::InferConstraintsOptionInferCoincidentConstraints);8 a- X/ K5 x u% e/ Y6 I
- sketch1->AddGeometry(line2,Sketch::InferConstraintsOptionInferCoincidentConstraints);
@) g/ R6 b8 m1 ~+ H4 |3 h - sketch1->AddGeometry(line3,Sketch::InferConstraintsOptionInferCoincidentConstraints);' w0 e! K4 s; l( }! f) ~1 g
- sketch1->AddGeometry(line4,Sketch::InferConstraintsOptionInferCoincidentConstraints);, y/ g9 b# }6 C) a9 L! l9 i
- 7 x" q' s& i+ u; o: V# K6 z" f
- //3 add constraints ( gemo)
+ L' L9 ~4 ?3 [: W" h5 A" t - 1 I" e) N; m8 B, _. x3 |# x
- Sketch::ConstraintGeometry geomline1;
% M8 B9 {) ^/ \7 X7 a - geomline1.Geometry = line1;
1 ?) z& I' |5 Z$ a: a - geomline1.PointType = Sketch::ConstraintPointTypeNone;+ d& v4 N) a- k: `7 L
- geomline1.SplineDefiningPointIndex = 0;
4 ~4 Q/ {6 i, Z! B( e; Z - sketch1->CreateVerticalConstraint(geomline1);" m% }6 ]) X5 l/ n$ ?' y/ k) g
4 D2 H) Z, l+ @" K& R- Sketch::ConstraintGeometry geomline2;
7 y5 J& B( W; s6 } - geomline2.Geometry = line2;+ G4 b# B+ z( }5 L$ I/ t
- geomline2.PointType = Sketch::ConstraintPointTypeNone;
0 U0 ~$ }4 o- @* J6 P \2 B - geomline2.SplineDefiningPointIndex = 0;" T) \( Y6 U0 j" n8 s
- sketch1->CreateHorizontalConstraint(geomline2);* q7 i. |, g: f6 r) v/ D
- ' }) x- N0 \: `& x* S
- Sketch::ConstraintGeometry geomline3;7 s+ ?7 \- G) a7 J; r2 g
- geomline3.Geometry = line3;6 r* t% Q& _. w+ W4 @7 c8 t, D
- geomline3.PointType = Sketch::ConstraintPointTypeNone;- e9 a! v3 j u/ F4 I
- geomline3.SplineDefiningPointIndex = 0;
3 ^+ c" s9 H2 J' s - sketch1->CreateVerticalConstraint(geomline3);8 _- B& j" x: U
- 1 u9 l9 S) x& ?5 O$ X( F" ?
- Sketch::ConstraintGeometry geomline1_startPoint;
( N2 G, @: R, o2 N# R+ h - geomline1_startPoint.Geometry = line1;
! `7 O# U, U$ f9 \+ f( u s - geomline1_startPoint.PointType = Sketch::ConstraintPointTypeStartVertex;2 O0 v3 _4 Z* `* R
- geomline1.SplineDefiningPointIndex = 0;$ Q2 X" J: a: j1 n' U
- Sketch::ConstraintGeometry geomline2_originPoint;
. f, n. C0 L" X6 K- |; \ - geomline2_originPoint.Geometry = originPoint;! ]7 |* B7 r+ n8 a; p7 j/ z! }
- geomline2_originPoint.PointType = Sketch::ConstraintPointTypeNone;
0 k) C9 ~! P/ c - geomline2_originPoint.SplineDefiningPointIndex = 0;0 y5 `: Q" {8 j
- sketch1->CreateCoincidentConstraint(geomline1_startPoint,geomline2_originPoint);9 {! p; ~" |5 n
- z1 R H# w: K r8 Y- //4 add constraints (dimension)* E. k" [" K3 c" I3 O$ Y
- 6 v) M1 U' f# i! r, ~; @( ]
- NXObject *nullNXObject(NULL);
& {/ C A$ E; f ^; n! w - 7 j' ?9 e. f9 W; T
- * u$ F+ c, W- g! p. _3 s' h
- stringstream s_height1,s_height2,s_length;
: m% r$ u1 H5 |2 t- K - s_height1 <<height1;% {- [* p P2 M1 Y) M
- s_height2 <<height2;, o3 V: c2 [5 b4 n' q% j- K3 k; D# `
- s_length <<length;
8 [3 [3 u2 t& P! k1 M - 3 i5 |0 z5 M6 _6 ?9 b. n, B
- Expression *expression1,*expression2,*expression3;
8 r4 \0 v- ]& D. a* G0 Y - expression1 = workPart->Expressions()->CreateSystemExpression(s_height1.str());' H4 e: d6 [: w" x1 c3 b q" X
- expression2 = workPart->Expressions()->CreateSystemExpression(s_length.str());) b4 s1 V- v- D& ~
- expression3 = workPart->Expressions()->CreateSystemExpression(s_height2.str());7 u* K: p j0 @6 q5 l/ i2 d, T
. p: |9 i9 c; A1 R% k% Q1 F- // line1 dimension
# Y5 I; K' C1 C4 B
5 C: f! ?& q7 i9 n! M% v* q- Sketch::DimensionGeometry dimLine1_startPoint;5 x; z; ?3 d. e
- dimLine1_startPoint.Geometry = line1;. Z& m2 r7 B" B5 E: }
- dimLine1_startPoint.AssocType = Sketch::AssocTypeStartPoint;: n6 B. P0 [6 `- z7 z
- dimLine1_startPoint.AssocValue = 0;
4 Y3 k7 m/ Z/ o7 w+ U% p8 z: G$ w( l& w+ o - dimLine1_startPoint.HelpPoint.X = 0.0;& B, ~8 s, x6 U( t. a! V
- dimLine1_startPoint.HelpPoint.Y = 0.0;
7 B6 i! ?& R2 o' R! ~5 D$ s7 j - dimLine1_startPoint.HelpPoint.Z = 0.0;+ [+ ~! V/ _; ]& U! ?2 j# c' v8 M+ h
- dimLine1_startPoint.View = nullNXObject;
& J! b: ?6 T# m" G2 m3 L - R! S. D% y# F! D# @6 z# X
- Sketch::DimensionGeometry dimLine1_endPoint;
# Z; L, T: H% R - dimLine1_endPoint.Geometry = line1;! |+ f& V# m6 ?3 t7 D: B+ s9 `
- dimLine1_endPoint.AssocType = Sketch::AssocTypeEndPoint;4 e# k- w) i- |" ~$ B( m
- dimLine1_endPoint.AssocValue = 0;/ K* I7 c5 |6 I) M
- dimLine1_endPoint.HelpPoint.X = 0.0;
) d2 c+ K) I+ N: e s* Z/ j( F - dimLine1_endPoint.HelpPoint.Y = 0.0;
# g7 t& [+ S6 }1 x - dimLine1_endPoint.HelpPoint.Z = 0.0;
$ O) r2 W+ [3 h1 @1 ?# j - dimLine1_endPoint.View = nullNXObject; ? b8 X8 M$ a& s$ |- l. ^7 m& a8 l; W
7 [9 E4 ]' L7 F4 J- Point3d dimOrigin1(-100, height1/2, 0.0);8 K5 r# R; D; B* Y9 \: y
- . l: u: t$ \( g/ }3 A
- sketch1->CreateDimension(Sketch::ConstraintTypeParallelDim, dimLine1_startPoint, dimLine1_endPoint, dimOrigin1, expression1, Sketch::DimensionOptionCreateAsDriving);. y/ P# D) e/ Q2 h9 J- j& ]/ V$ {2 B
8 W( P$ _6 i$ [1 O, A4 b- & b: j1 S) \6 N: ~# v* ]
- ' A! C! z) D7 c" ]3 O9 Y
- // line2 dimension , Z2 p. M: p; {4 o! I, B
- % t: U! M( E3 ~! N8 i1 O
- Sketch::DimensionGeometry dimLine2_startPoint;
8 I( I& N# K3 o0 R( `. H% ? - dimLine2_startPoint.Geometry = line2;
& }5 P8 v& O' J, ]3 P! q2 s M - dimLine2_startPoint.AssocType = Sketch::AssocTypeStartPoint;5 Y# u8 ?' W' p* w- A2 v) C4 e
- dimLine2_startPoint.AssocValue = 0;
7 u6 q: b5 i9 q4 ]* G - dimLine2_startPoint.HelpPoint.X = 0.0;) ^2 @, h1 T. U! \
- dimLine2_startPoint.HelpPoint.Y = 0.0;
3 y# }! N9 S5 ~ a8 ~6 p - dimLine2_startPoint.HelpPoint.Z = 0.0;
% R+ ~$ y& Y; ]$ U8 w2 p9 j - dimLine2_startPoint.View = nullNXObject;
0 H% A, f% z# q; M k( _1 _
; P% A7 F, X: s3 z, F8 P. A- Sketch::DimensionGeometry dimLine2_endPoint;# T0 J! q: n% B5 p/ r
- dimLine2_endPoint.Geometry = line2;
: j5 \5 O' E7 ~2 P: j# | - dimLine2_endPoint.AssocType = Sketch::AssocTypeEndPoint;
( k1 ~! Q$ ~6 r( X8 s - dimLine2_endPoint.AssocValue = 0;
: @3 f1 L0 X. E% B - dimLine2_endPoint.HelpPoint.X = 0.0;. S0 y; d3 S8 R1 e
- dimLine2_endPoint.HelpPoint.Y = 0.0;
/ ~5 M1 m7 l+ c% _9 @8 ` F8 w - dimLine2_endPoint.HelpPoint.Z = 0.0;
- P1 f0 v( [9 H+ {# r: B' ?7 w - dimLine2_endPoint.View = nullNXObject;
# R+ D P% [7 D, E5 |; g+ _. p) S
: t% `7 m+ E; P$ z- Point3d dimOrigin2(length /2,100 + height1, 0.0);
3 v* G- C3 e) G/ N: H# L - # B: ~" Y; T. i* F1 Y9 |0 p
- sketch1->CreateDimension(Sketch::ConstraintTypeParallelDim, dimLine2_startPoint, dimLine2_endPoint, dimOrigin2, expression2, Sketch::DimensionOptionCreateAsDriving);2 L8 d* W# a; A1 F0 u; j
. E5 H7 g; J; r7 O( i8 Y- ) Y0 B- m$ W+ z% f* l
- 0 e5 U, g* V7 J7 x
- // line3 dimension
9 k4 y0 N4 o0 h$ \) U5 T
1 X2 b Z6 {( G& J- v+ k1 u- Sketch::DimensionGeometry dimLine3_startPoint;
$ |) {1 ?+ M! j3 \/ r0 X - dimLine3_startPoint.Geometry = line3;
3 Z# M9 Y8 @, _ - dimLine3_startPoint.AssocType = Sketch::AssocTypeStartPoint;
! y8 J' u6 v, f$ i. ]6 J - dimLine3_startPoint.AssocValue = 0;( m* X2 q# m4 @! @, e1 T; ~
- dimLine3_startPoint.HelpPoint.X = 0.0;6 x" p" C" i0 o( S _& q4 W9 r
- dimLine3_startPoint.HelpPoint.Y = 0.0;
( D# p+ ^/ S1 T% d - dimLine3_startPoint.HelpPoint.Z = 0.0;+ d2 o" i2 Q$ m% d
- dimLine3_startPoint.View = nullNXObject;" Z& ?! S/ B$ d3 \
- E! n' _' x; s2 k4 K
- Sketch::DimensionGeometry dimLine3_endPoint;
# B, {, W3 g a8 E6 ]$ D - dimLine3_endPoint.Geometry = line3;
, o3 \4 o. I! z2 |3 F - dimLine3_endPoint.AssocType = Sketch::AssocTypeEndPoint;
. ]5 b# [7 c, `5 \8 J - dimLine3_endPoint.AssocValue = 0;
0 p1 Q. H* w' [2 Z( k# ^ - dimLine3_endPoint.HelpPoint.X = 0.0;
! c2 z3 e5 u- M9 v5 [ c - dimLine3_endPoint.HelpPoint.Y = 0.0;
6 E, v( H: P+ m% {$ D" B - dimLine3_endPoint.HelpPoint.Z = 0.0;5 R3 ]" H5 q6 K5 }# N" w1 A
- dimLine3_endPoint.View = nullNXObject;
! c3 C7 b. }3 @ - 5 _) G+ g3 Y8 ^% t) h' p
- Point3d dimOrigin3( 100 + length, height1-height2+ height2 /2 , 0.0);
2 o6 s& ^ N5 ~, i$ q - ! F' ^# I E7 Z. a3 E
- sketch1->CreateDimension(Sketch::ConstraintTypeParallelDim, dimLine3_startPoint, dimLine3_endPoint, dimOrigin3, expression3, Sketch::DimensionOptionCreateAsDriving);: d/ l! E5 R! H' d: _) h5 J
% C+ ^ ]- t# H4 J; ^5 M& C
, x# v) |4 W8 O% m- + s7 a8 p0 ]0 y( X+ G
- //5 update & deactive) v3 W! _5 E/ u$ f% {/ b/ P0 J
- sketch1->Update();. a: P6 d9 v8 W5 C; d* j$ e% r
1 `9 |# ^' u. R2 `. \- sketch1->Deactivate(Sketch::ViewReorientFalse,Sketch::UpdateLevelModel);: }% @3 q; r% u+ { Z& C
% h% \' P& m* l& y6 J- delete expression1;
% w# C6 }$ f0 S - delete expression2;
! U0 e# }, S# L- w! ] - delete expression3;
2 n! o* Y0 P& B2 z5 T -
" Z0 w$ V. L; }5 U+ R2 q3 F - }* P6 ~, B) w9 n
复制代码
/ v- S R1 g6 R" Y9 C7 M
% f$ ^' ? K! Z5 _) d$ m6 Z3 k& g! J$ `" v+ X( U
, z5 `2 l* r+ r1 Q |
|