|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
PLM之家-NX9.0 二次开发实例视频31 NXOpen C++创建基本特征 <1>-草图的创建( [) q; H' s7 k% \3 w* U
内容:
* a+ c( |# s9 s- \/ ]7 t草图作为参数化建模的基础,使用代码实现草图的创建过程,主要是对草图环境的初始化,以及草图约束的添加等问题。
2 T# M3 v; k& _% `目的:
. g4 t; f: l& ]; O在NX中,使用NXOpen C++可以很方便的进行JA的录制,从而发掘草图约束中尺寸约束和几何约束的规律,通过这种方式,可以快速的完成开发。7 z- D( D# k: [- x
NXOpen C++创建草图基本特征
, ]# e& z. [9 b2 T' p4 F' i
31 NXOpen C++创建基本特征-草图的创建(1)项目介绍
# s: [" U( A# w8 `2 D. k 31 NXOpen C++创建基本特征-草图的创建(2)UI设计' V# ?* l$ x {! l3 O5 ]; r0 H' ?
31 NXOpen C++创建基本特征-草图的创建(3)项目创建
4 f$ ^0 j( i3 M- z4 z 31 NXOpen C++创建基本特征-草图的创建(4)草图特征创建( D5 Z: C" u% Z+ Q$ Q
31 NXOpen C++创建基本特征-草图的创建(5)添加几何到草图
( p9 \4 j2 t$ M8 X/ k 31 NXOpen C++创建基本特征-草图的创建(6)添加草图几何约束% B8 m0 H; B2 s0 |6 ~6 B
31 NXOpen C++创建基本特征-草图的创建(7)添加草图尺寸约束
; s' d T' q; p8 L8 Z: h 31 NXOpen C++创建基本特征-草图的创建(8)尺寸和UI关联; d4 j) b3 D! c/ ~- T
; k, L& ^1 h3 s) T
2 i6 t! x1 e, N( O `: B$ ]: ?1 _$ `
9 T _) u' X l5 `
/ h- H" s4 w- s4 d5 T- p关键代码分享:3 u! D* U1 G, S3 i0 b) c$ U
- p6 {! s |7 v+ r- v) x* c! k; v* @4 Y7 O/ d1 y% g
: e ]" v8 e: }! D- void lesson31_createSkeTCh::createIPSketch()
* c) | r6 }6 n: u' o% {( o! A - {. H% G2 g7 W/ Z; g) m
- / ]! }$ g. i5 H: b
- Sketch *nullSketch(NULL);8 s G4 _ t7 W- r% k) A
- SketchInPlaceBuilder *sketchInPlaceBuilder1;
2 _4 O* A9 }0 M; ? - sketchInPlaceBuilder1 = workPart->Sketches()->CreateNewSketchInPlaceBuilder(nullSketch);8 |. m/ t+ K: c7 L
- sketchInPlaceBuilder1->SetPlaneOption(Sketch::PlaneOptionNewPlane);
$ w6 ~' i) U8 H# w/ r
8 D% d- t: K1 o2 I$ [5 _ h7 h- //sketchInPlaceBuilder1->Plane()->SetMethod(PlaneTypes::MethodTypeFixedZ);
* K1 K! [; [) f! ]
" B( d# F- q: S, e4 P* t9 G `
( h: F4 e, o3 M8 |5 T- // add preference2 l- C: i9 V R9 ^2 w9 S: a4 a
- * ~3 Z( K# G+ l+ H5 U5 Z
- theSession->Preferences()->Sketch()->SetContinuousAutoDimensioning(false);
0 X* I: z" f4 y. G - + ?. q/ A! X* }3 H0 A7 d+ s5 w* p
- Drafting::PreferencesBuilder *preferencesBuilder1;% `$ y6 F) U \. l0 a
- preferencesBuilder1 = workPart->SettingsManager()->CreatePreferencesBuilder();4 t4 v& }9 _6 L( |( J6 e9 i7 i$ ]
- preferencesBuilder1->AnnotationStyle()->DimensionStyle()->SetAngularDimensionValuePrecision(3);
; n2 V( F) ?, | A4 T7 g1 r" ` - preferencesBuilder1->AnnotationStyle()->DimensionStyle()->SetDimensionValuePrecision(3);
% E8 {- `0 g5 l, q) k q; O - preferencesBuilder1->Commit();! `" C! W$ h8 y( ]" l
- ! l4 U- n5 e( _5 L# X
- preferencesBuilder1->Destroy();
! E1 o& h/ d+ _6 C+ r# I, V T. u
6 j. d& t# |: K6 }- n
, ]( l$ A3 E6 T K6 {7 e- NXObject *nXObject1;
) u- T( i. g( \, [: ]9 b" G - nXObject1 = sketchInPlaceBuilder1->Commit();9 i7 A$ S' @0 c5 W% M. {& S
- |& B4 w2 U( U$ s( \( ] ]: c( b- Sketch *sketch1(dynamic_cast<Sketch *>(nXObject1));0 o4 h3 ~/ S- G; d
- Features::Feature *feature1;
7 L# Q9 U: ~5 [7 U2 v @ - feature1 = sketch1->Feature();, j5 m& `) K7 n6 N2 ?. e Y% F
- feature1->SetName("XY-Plane-Sketch");8 y- B, E: U: N1 P) `- I
-
$ K1 S7 w9 A/ S5 E - sketchInPlaceBuilder1->Destroy();
$ |8 z8 k. o; [" Y
e' {" k4 z9 c4 a' h* ~- //1 active sketch 1 D$ k4 H; K; ^1 ~2 a$ k; ]8 t
- & W/ {8 S' J7 y `
- sketch1->Activate(Sketch::ViewReorientFalse);, ?0 j2 W3 Z" I. ^6 R
- - S# H7 O' S3 S8 c& g
- double height1 = this->expressionHeight1->GetProperties()->GetDouble("Value");: X& Q+ r2 @- O& M6 ]
- double height2 = this->expressionHeight2->GetProperties()->GetDouble("Value");
. m$ y: k% m$ } - double length = this->expressionLength->GetProperties()->GetDouble("Value");( ?4 ^' i5 h9 I( y0 u
- // 2.1 create geometry
7 K2 d3 U) h! A/ h. M - . w( V7 J" A5 ?6 k x
- Point3d startPoint1(0.0, 0.0, 0.0);
, p! X: V/ f9 Y B - Point3d endPoint1(0, height1, 0.0);
( n2 |* C! V1 _) d7 h8 I8 w - Point3d endPoint2(length, height1, 0.0);$ E b6 I6 ?8 ~ @
- Point3d endPoint3(length, height1-height2, 0.0);
$ p7 p c9 K8 V# D; x3 B* q2 M( t - Point3d origin = sketch1->Origin();
7 m5 k/ H1 n- Z$ |* A) \3 i - Point *originPoint = workPart->Points()->CreatePoint(origin);
6 K7 l/ Z: v+ V q1 d; F. `* i4 Z4 g - # r9 d. j- m v# I7 t% x
- Line *line1,*line2,*line3,*line4;' A, z: l+ g" n9 d$ ]5 k: P$ R7 u o
- line1 = workPart->Curves()->CreateLine(startPoint1, endPoint1);: J4 f) p% R3 b; b3 Z
- line2 = workPart->Curves()->CreateLine(endPoint1, endPoint2);
3 T1 @* G V( Z2 o) A$ H r- q - line3 = workPart->Curves()->CreateLine(endPoint2, endPoint3);
$ I% z7 [' g2 ]! h; S9 q - line4 = workPart->Curves()->CreateLine(endPoint3, startPoint1);2 s; ]8 \9 p/ d E* A J8 t- Q5 R
- // 2.2 add geometry7 E0 p9 o: q G$ }
- ' z: h$ n* }) U' p* p
- sketch1->AddGeometry(line1,Sketch::InferConstraintsOptionInferCoincidentConstraints);
1 h, U/ |2 ~3 S3 W - sketch1->AddGeometry(line2,Sketch::InferConstraintsOptionInferCoincidentConstraints);) @' ^0 T- t6 `7 O$ P, ?, @
- sketch1->AddGeometry(line3,Sketch::InferConstraintsOptionInferCoincidentConstraints);
4 o2 ?. H" O$ {: Q7 |) Z$ f - sketch1->AddGeometry(line4,Sketch::InferConstraintsOptionInferCoincidentConstraints);9 h; D& l: N! N; ^1 Y
( L1 t' ] z9 H7 k; W3 t3 h- //3 add constraints ( gemo)- c. Z; b4 ?' X, O# c
, J7 _9 h6 j: f- Sketch::ConstraintGeometry geomline1;
# t& c: z! y4 g, D e* W, V - geomline1.Geometry = line1;* f( C6 P+ p% e. s7 ~
- geomline1.PointType = Sketch::ConstraintPointTypeNone;8 t9 O2 J0 ?$ x7 J
- geomline1.SplineDefiningPointIndex = 0;& N/ @3 W7 n0 f6 K9 _5 O
- sketch1->CreateVerticalConstraint(geomline1);! }+ P. L4 C2 o# b
4 r/ _+ `5 ?: c7 r7 y: ^! b- Sketch::ConstraintGeometry geomline2;
; p, }0 j: _8 c# j/ H - geomline2.Geometry = line2;
2 M0 K1 k+ n# J8 s8 a# Q' C - geomline2.PointType = Sketch::ConstraintPointTypeNone;
1 `8 s" u& D6 ^5 d8 }; J - geomline2.SplineDefiningPointIndex = 0;
2 r$ J6 k9 J4 k% j( x - sketch1->CreateHorizontalConstraint(geomline2);9 j; Z- x0 C' h) e- e
9 |9 w4 u% y3 G! k- Sketch::ConstraintGeometry geomline3;
# b6 ?6 S4 o* S3 K - geomline3.Geometry = line3;
3 I* s( C$ k2 e* e8 w- t - geomline3.PointType = Sketch::ConstraintPointTypeNone;; i1 b8 ^5 \$ W, y& d
- geomline3.SplineDefiningPointIndex = 0;6 ]$ M# M; h/ \0 @8 Q) I! {8 ~8 P' ?
- sketch1->CreateVerticalConstraint(geomline3);% Q- m' g5 s3 p# i
* {( @* u4 G" F! y8 t' h" b: P" C- Sketch::ConstraintGeometry geomline1_startPoint;
1 D" t- M5 V4 ~+ |4 [' m' y - geomline1_startPoint.Geometry = line1;
$ S9 l/ [7 f9 J, i4 G2 F - geomline1_startPoint.PointType = Sketch::ConstraintPointTypeStartVertex;
) u8 K4 Y) u$ Y, d; K3 s - geomline1.SplineDefiningPointIndex = 0;
2 G: r" {/ e1 ?% S - Sketch::ConstraintGeometry geomline2_originPoint;
: J% g, K' e, ?; H- _" H# [$ W - geomline2_originPoint.Geometry = originPoint;. h( ` v0 T- q
- geomline2_originPoint.PointType = Sketch::ConstraintPointTypeNone;
0 Z# A1 v/ M5 y8 z( C' L% L$ ` - geomline2_originPoint.SplineDefiningPointIndex = 0;
* S: Z; p6 p: i. o" J$ t - sketch1->CreateCoincidentConstraint(geomline1_startPoint,geomline2_originPoint);# d M9 X* s, d: c7 X8 x; x
- ) H' Y3 V. [; ^7 H2 @; w
- //4 add constraints (dimension), ]% C5 Y5 I& D; `& P7 b
- : Z8 S1 l k- y' n+ U! t) g! M' b
- NXObject *nullNXObject(NULL);
) h% ^& e( O9 r. b
% d, I2 A, ^3 v
& h7 b) U( T# j- q" n1 B- stringstream s_height1,s_height2,s_length;5 s$ A" k" t! H( m/ O9 D8 F0 H- w
- s_height1 <<height1;
9 W6 {4 g& ]0 r4 c" K - s_height2 <<height2;: d. P% R- ~- @
- s_length <<length;5 Z3 o# }/ F; q& e& N& Q. q
8 Y+ X+ R- h& f- Expression *expression1,*expression2,*expression3;
' O3 p! u* P6 W2 [' V9 @8 t. D - expression1 = workPart->Expressions()->CreateSystemExpression(s_height1.str());
; v! V( X3 L# M8 J - expression2 = workPart->Expressions()->CreateSystemExpression(s_length.str());
! T. x$ r& W/ j+ u - expression3 = workPart->Expressions()->CreateSystemExpression(s_height2.str());# w4 Y& q4 d. a
- , l; a, w, p1 z8 z7 O' n
- // line1 dimension
& F" @5 y; C0 a- y/ D
p! z# s0 L! V3 k- V" T- Sketch::DimensionGeometry dimLine1_startPoint;
- M5 X' m, a4 O2 N$ O: [/ K4 Q) } - dimLine1_startPoint.Geometry = line1;. l5 W: G2 f9 |
- dimLine1_startPoint.AssocType = Sketch::AssocTypeStartPoint;
/ Q" l8 ^) t* `0 a- E - dimLine1_startPoint.AssocValue = 0;% \+ ?# a3 I" b) I
- dimLine1_startPoint.HelpPoint.X = 0.0;7 ^4 \+ r- J' N+ q
- dimLine1_startPoint.HelpPoint.Y = 0.0; ?! k, `' D8 ?8 i# G9 ~
- dimLine1_startPoint.HelpPoint.Z = 0.0;
( k& y7 ^6 R0 h2 L' X- h - dimLine1_startPoint.View = nullNXObject;
; y5 A( l9 S6 m. }+ i% z" w! p - 7 F' C5 {5 p$ g+ K# q
- Sketch::DimensionGeometry dimLine1_endPoint;1 p9 u# r5 k/ a' [ L+ O
- dimLine1_endPoint.Geometry = line1;5 {! W" _+ O' \
- dimLine1_endPoint.AssocType = Sketch::AssocTypeEndPoint;9 r# `% N% m9 P, p7 F" Q+ p$ W
- dimLine1_endPoint.AssocValue = 0;; a7 \+ x) m; S
- dimLine1_endPoint.HelpPoint.X = 0.0;
. _3 D; m! e# o: h" s0 p - dimLine1_endPoint.HelpPoint.Y = 0.0;
3 y& b; {) F1 J" m3 | - dimLine1_endPoint.HelpPoint.Z = 0.0;
5 |& G7 f: J9 c; W; p! F - dimLine1_endPoint.View = nullNXObject;0 b* \: N- d! }" i) A
2 K4 @' l/ O) j% V- Point3d dimOrigin1(-100, height1/2, 0.0);
9 H% N! g! A$ F0 I* U; n a
- u* i \. A) \% E0 B+ x, U- sketch1->CreateDimension(Sketch::ConstraintTypeParallelDim, dimLine1_startPoint, dimLine1_endPoint, dimOrigin1, expression1, Sketch::DimensionOptionCreateAsDriving);9 q, O# h9 V, f! x3 Y Z
- . H) T0 q4 w. ~
- 3 P# _) ~; _; o8 O1 |
- & R( w: t0 t% D9 n8 h- d% x- ~1 [- L
- // line2 dimension ; K' f3 f+ w" a: A& H
6 A5 ]. l* J) s3 j, E& ~- Sketch::DimensionGeometry dimLine2_startPoint;/ G/ p) u7 ?' `, n0 q: ]0 e' r6 i
- dimLine2_startPoint.Geometry = line2;/ C0 Y F: B# E z4 W' m
- dimLine2_startPoint.AssocType = Sketch::AssocTypeStartPoint;
# w9 K% u, N0 R4 w. @ - dimLine2_startPoint.AssocValue = 0;
9 E2 A9 q4 V4 A$ e2 w# a0 v' | - dimLine2_startPoint.HelpPoint.X = 0.0; }' U @3 Q1 u& P. u+ X
- dimLine2_startPoint.HelpPoint.Y = 0.0;
- Y+ G. s* T8 R" M" i7 k% l - dimLine2_startPoint.HelpPoint.Z = 0.0;6 G } U$ `0 o6 n5 C6 r# A
- dimLine2_startPoint.View = nullNXObject;$ p: D) E$ {" W$ p8 L) g
2 @; R; O; J; y( N1 K- Sketch::DimensionGeometry dimLine2_endPoint;
. U# |) C1 H/ p8 f - dimLine2_endPoint.Geometry = line2;; b8 e% _, a; b8 i$ ~
- dimLine2_endPoint.AssocType = Sketch::AssocTypeEndPoint;7 ~/ { e9 E; @" `
- dimLine2_endPoint.AssocValue = 0;
( ~7 }. G9 e- ]/ s1 } - dimLine2_endPoint.HelpPoint.X = 0.0;
, ~. \ z3 ]* o - dimLine2_endPoint.HelpPoint.Y = 0.0;# B5 t0 u9 }! k) H* D
- dimLine2_endPoint.HelpPoint.Z = 0.0;8 d0 c* Z7 b3 U, c& G& G3 F( @
- dimLine2_endPoint.View = nullNXObject;+ V+ _5 v) [: k7 g) o9 B
- y( V+ m# Y& k" r- r9 b
- Point3d dimOrigin2(length /2,100 + height1, 0.0);
3 h0 ^9 `& g, ~6 H7 v& }
1 B I. u- b4 f! ]- sketch1->CreateDimension(Sketch::ConstraintTypeParallelDim, dimLine2_startPoint, dimLine2_endPoint, dimOrigin2, expression2, Sketch::DimensionOptionCreateAsDriving);; k: H4 T0 P4 ^6 p% J
4 G+ b2 {; s" {8 F+ ]+ o- ) ?2 D) n7 S( f
-
& y c9 B4 H, N - // line3 dimension
1 ^2 L5 H1 Y3 m
' C/ g; c' ~9 T" v {, `, A- Sketch::DimensionGeometry dimLine3_startPoint;0 l# u& z' {2 B9 t& D$ O. R
- dimLine3_startPoint.Geometry = line3;5 e H7 S1 }# }3 G5 h5 f' H) d( A
- dimLine3_startPoint.AssocType = Sketch::AssocTypeStartPoint;
4 H5 O% a* l3 b! E' G0 C7 G- j2 ^ y+ y - dimLine3_startPoint.AssocValue = 0;+ n+ N# Z: i; r! ^" n" h
- dimLine3_startPoint.HelpPoint.X = 0.0;
! H4 v Q+ d1 `; ~9 v0 ~ - dimLine3_startPoint.HelpPoint.Y = 0.0;' ]* O0 Y, l: j* G$ J! b+ S6 r
- dimLine3_startPoint.HelpPoint.Z = 0.0;! H/ K7 i( \* K* Q) M
- dimLine3_startPoint.View = nullNXObject;
& U. y. P) h# S! i6 b
4 r9 F# G6 K, _9 K) l" c3 ]7 K, b, H- Sketch::DimensionGeometry dimLine3_endPoint;3 { F$ _' _! b- F: y
- dimLine3_endPoint.Geometry = line3;
! W$ J( ?1 F- T. j - dimLine3_endPoint.AssocType = Sketch::AssocTypeEndPoint;: ]( M* U! c: }. C! R: J
- dimLine3_endPoint.AssocValue = 0;
9 E/ |2 V8 U0 e( v% J* D - dimLine3_endPoint.HelpPoint.X = 0.0;
B! ]- D7 c. Y( V - dimLine3_endPoint.HelpPoint.Y = 0.0;
6 l6 r1 [! r1 F. Q - dimLine3_endPoint.HelpPoint.Z = 0.0;- d" m) F0 P* @4 P0 x) |
- dimLine3_endPoint.View = nullNXObject;3 D6 o' L4 I k0 Y: y
! W% i+ V' e3 S& j% f- D3 B2 y- Point3d dimOrigin3( 100 + length, height1-height2+ height2 /2 , 0.0);
( E1 ~" n+ N! U5 [: N* Y' L - 4 q$ D. I+ z, m( k" M
- sketch1->CreateDimension(Sketch::ConstraintTypeParallelDim, dimLine3_startPoint, dimLine3_endPoint, dimOrigin3, expression3, Sketch::DimensionOptionCreateAsDriving);
! I: }$ h4 R) ^4 i& @, e, y: }# g n - 2 h/ h% Q- [2 u4 t1 X& b& }" B0 k5 H( F
- % H8 R" |/ Q- l# L7 ?4 T! p
- ' J4 X% U9 d3 O* e* B
- //5 update & deactive
, ~( q; } G4 \* c Z - sketch1->Update();1 T, N& o. b4 @- D3 f1 L. o
- 1 ^6 l1 _+ X# T: V$ C: h' A
- sketch1->Deactivate(Sketch::ViewReorientFalse,Sketch::UpdateLevelModel);8 R+ L+ E% z" n& b
- 6 d/ |4 o6 j# P3 Q( c! T& ?0 Y
- delete expression1;
6 i( p8 M- s! Y' p9 U - delete expression2;
& \8 N0 t K: Q2 A# c" R3 x - delete expression3;
1 ], c5 p& c! { u: j -
5 X, R4 i5 ~" a* V$ b - }- a- ^( y# X! ?& S5 G% _
复制代码 $ D5 ?4 i" \4 z
; B2 H0 X' U0 C
9 J' t: o3 P' P7 r5 Q z# Y5 O- Z
; S1 z3 W3 s4 Z4 R |
|