|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
PLM之家-NX9.0 二次开发实例视频31 NXOpen C++创建基本特征 <1>-草图的创建
9 Y ?& a* Y1 \( a2 e3 _; f内容:/ @* K, R. H8 @% I( S1 W( [
草图作为参数化建模的基础,使用代码实现草图的创建过程,主要是对草图环境的初始化,以及草图约束的添加等问题。" c Y8 s, F" q3 D3 z/ j m, E
目的:
/ {4 v" m6 a# M! Z1 E+ m在NX中,使用NXOpen C++可以很方便的进行JA的录制,从而发掘草图约束中尺寸约束和几何约束的规律,通过这种方式,可以快速的完成开发。9 R- h) w7 @ H# ?/ k
NXOpen C++创建草图基本特征
+ H) I( J5 d4 k2 l. e 31 NXOpen C++创建基本特征-草图的创建(1)项目介绍9 ?& `& y9 t. a r0 F$ t2 y
31 NXOpen C++创建基本特征-草图的创建(2)UI设计* r: Q: Y5 _( \* B9 X' L$ c
31 NXOpen C++创建基本特征-草图的创建(3)项目创建
* v7 z0 o& H) z; f 31 NXOpen C++创建基本特征-草图的创建(4)草图特征创建
9 k* s9 C0 C, P* X 31 NXOpen C++创建基本特征-草图的创建(5)添加几何到草图 u* D! E @' p% I4 S1 p
31 NXOpen C++创建基本特征-草图的创建(6)添加草图几何约束5 [+ f' N# {7 l8 I* D! Q9 o
31 NXOpen C++创建基本特征-草图的创建(7)添加草图尺寸约束2 A3 V. L# O3 o
31 NXOpen C++创建基本特征-草图的创建(8)尺寸和UI关联" r$ y. I W, X
; t" ]# U1 r1 x& l1 A) I: M" b2 k& Y& r$ |! o3 k3 @1 B, n; Q
9 u& d+ ] Q- d/ ^0 x7 A |5 U) g! T5 X
/ s* o6 T: }& G4 i2 D关键代码分享:
9 G( }7 j+ j9 p& f- j) v! y" x2 M1 T. e& [! k% r2 G- X; x
- ^1 l- n9 W; g: U+ D0 q- # D# s. N8 N; P4 \/ t% j4 K6 x. k
- void lesson31_createSkeTCh::createIPSketch()
$ t* d9 c( }8 s; d' p - {
4 W6 K3 w v. @- z - & p1 J5 r9 p9 d% F A6 Y% R
- Sketch *nullSketch(NULL);7 ~% N- \0 o$ t( G
- SketchInPlaceBuilder *sketchInPlaceBuilder1;
* n7 p! N3 E. W# W; q - sketchInPlaceBuilder1 = workPart->Sketches()->CreateNewSketchInPlaceBuilder(nullSketch);$ p( @* K" ]) R) n- `% B; ~; s
- sketchInPlaceBuilder1->SetPlaneOption(Sketch::PlaneOptionNewPlane);
3 a4 f5 X+ q- \% S7 q - ' Z4 O2 x8 `' F; [6 }5 T
- //sketchInPlaceBuilder1->Plane()->SetMethod(PlaneTypes::MethodTypeFixedZ);
) n; h$ X( a) X8 z: l2 m, m# [
) G3 G P& X" |" Z* U, K& x
2 G/ ~' b- T0 P( @" v2 I- // add preference) M% }- n* j3 e2 F# f0 ~, y B; U
- # G- b6 `! a% e# D! H
- theSession->Preferences()->Sketch()->SetContinuousAutoDimensioning(false);
) B {& G! ?2 `( h; e7 C9 M$ M - 1 [: \1 |8 I- u
- Drafting::PreferencesBuilder *preferencesBuilder1;
$ _( v# g% u) z - preferencesBuilder1 = workPart->SettingsManager()->CreatePreferencesBuilder();' ?4 F, D0 P. m m
- preferencesBuilder1->AnnotationStyle()->DimensionStyle()->SetAngularDimensionValuePrecision(3);
- ]& `$ e: q" w+ T! p - preferencesBuilder1->AnnotationStyle()->DimensionStyle()->SetDimensionValuePrecision(3);( m' x- S# `' f/ P3 ?
- preferencesBuilder1->Commit();: g- O2 Z& [- l: T
* i" z- m1 F3 I2 b; a9 A" `8 s' U- preferencesBuilder1->Destroy();0 z; }$ h4 M: ]9 O
/ c7 w4 F- \2 m% B7 x u- 4 C9 [" K- b; e, X0 E% V
- NXObject *nXObject1;( Z8 C# \% \/ [- [
- nXObject1 = sketchInPlaceBuilder1->Commit();
/ [% j+ O* ? l& U" t0 J
. U7 }0 p5 I, E- Sketch *sketch1(dynamic_cast<Sketch *>(nXObject1));% `) m3 k( I) W1 }6 h0 a, B
- Features::Feature *feature1;% s2 Z9 a' a# h+ c7 Y
- feature1 = sketch1->Feature();
. w9 f$ b) }* U) {$ }/ H2 Y - feature1->SetName("XY-Plane-Sketch");8 \0 ^" R9 g) S' m7 L9 A: {& y
-
- u! S/ q( T) P! @. i, f+ T - sketchInPlaceBuilder1->Destroy();" S! X! ~! Z; E* ?9 p+ V
- 1 c' a; l1 o9 D/ j# i- F
- //1 active sketch
4 m+ F L$ r' F- ~+ k2 S3 [7 w2 Q y
' ~ g' V2 q( f" ]- sketch1->Activate(Sketch::ViewReorientFalse);
3 c2 e% D e" R* b -
2 Y5 j+ c, C# E6 s% k- v - double height1 = this->expressionHeight1->GetProperties()->GetDouble("Value");
5 Z7 \. @: K% y: Z" h6 ] - double height2 = this->expressionHeight2->GetProperties()->GetDouble("Value");
' K8 F9 }9 s' J+ X9 { M. A9 d - double length = this->expressionLength->GetProperties()->GetDouble("Value");
0 `* K, U: ]8 Y1 @9 x) V - // 2.1 create geometry$ r9 l6 p5 d9 Q4 A- t
- $ K6 N( \( L4 Z. W0 W6 L
- Point3d startPoint1(0.0, 0.0, 0.0);5 y4 G4 L6 b" U5 r2 X! u
- Point3d endPoint1(0, height1, 0.0);
& Y) U8 ?: N }9 B r, o, V+ h7 ^4 Q - Point3d endPoint2(length, height1, 0.0);( f6 \5 j/ f" u) p* y
- Point3d endPoint3(length, height1-height2, 0.0);
$ V: }! y7 U" h1 X4 E7 |! O9 r - Point3d origin = sketch1->Origin();9 ~# [' I8 f+ C8 y- y: o1 K
- Point *originPoint = workPart->Points()->CreatePoint(origin);- V; k; R6 `( Y7 p, P% x6 {
4 y9 h( @ E% d% }& u- Line *line1,*line2,*line3,*line4;
& }1 i* k# i- {* d4 z0 W - line1 = workPart->Curves()->CreateLine(startPoint1, endPoint1);9 V8 W. ?8 l" Q2 o6 S: C: |
- line2 = workPart->Curves()->CreateLine(endPoint1, endPoint2);2 U. |3 w9 [; s" m
- line3 = workPart->Curves()->CreateLine(endPoint2, endPoint3);/ A: G r7 {7 c; O
- line4 = workPart->Curves()->CreateLine(endPoint3, startPoint1);; }" ?2 F9 R. |& q5 Y q
- // 2.2 add geometry6 r. b! ?! e2 j% R, B4 f/ f
- + X. O& t: U1 o( i" c, z' ~
- sketch1->AddGeometry(line1,Sketch::InferConstraintsOptionInferCoincidentConstraints);* T% r& ]* p& {
- sketch1->AddGeometry(line2,Sketch::InferConstraintsOptionInferCoincidentConstraints);: G% M. v4 n$ @+ c. T% l
- sketch1->AddGeometry(line3,Sketch::InferConstraintsOptionInferCoincidentConstraints);/ |4 v9 F0 s* k+ q
- sketch1->AddGeometry(line4,Sketch::InferConstraintsOptionInferCoincidentConstraints);5 Q, x1 d [8 [0 z% ?4 i
- , j; r! z* {; p+ P( N( y* Z K
- //3 add constraints ( gemo)% G( n7 G2 w/ G4 X
- : M( ^: }! b$ Z! @! z( I% t
- Sketch::ConstraintGeometry geomline1; g& C5 \; r' z2 q% l; E
- geomline1.Geometry = line1;
& [ n: ^5 o$ ]4 g7 y5 M0 \+ P( Y% l' ~, w# f - geomline1.PointType = Sketch::ConstraintPointTypeNone;
+ z5 ?5 Y: E! y* f - geomline1.SplineDefiningPointIndex = 0;
5 r. W, E% ^+ Y% ?; H; ] - sketch1->CreateVerticalConstraint(geomline1);( j* l% C; S/ ^( w4 H1 t
$ b2 ?% ^' X5 j; u, U5 ^- Sketch::ConstraintGeometry geomline2;
9 K% S" c( m2 [. J2 ]9 @ - geomline2.Geometry = line2;
) U6 `4 C$ M+ `8 E, U - geomline2.PointType = Sketch::ConstraintPointTypeNone;+ `" F, p0 N3 W2 }( P
- geomline2.SplineDefiningPointIndex = 0;, _3 {; a7 \5 D! h# P
- sketch1->CreateHorizontalConstraint(geomline2);
9 C: Q# t5 R) Z8 z Y7 ?) t
- ?, {- t$ A8 V- r; q. P. D# q: g- Sketch::ConstraintGeometry geomline3;; y# H- s2 c9 l, t
- geomline3.Geometry = line3;
. ~# B! [* R9 Z9 R: o. S1 Z - geomline3.PointType = Sketch::ConstraintPointTypeNone;
9 V6 |- m0 G1 e1 K9 Q3 D - geomline3.SplineDefiningPointIndex = 0;0 V4 I% x( K8 T+ H( h7 X. L
- sketch1->CreateVerticalConstraint(geomline3);
3 c' Z! O2 i* e7 Y# T: v - ) o# }. T! y) y! A$ H
- Sketch::ConstraintGeometry geomline1_startPoint;
, |, H9 c: G; `: t - geomline1_startPoint.Geometry = line1;
V; p6 f/ ?) N Z) E1 {- q - geomline1_startPoint.PointType = Sketch::ConstraintPointTypeStartVertex;- b& Y7 y) L5 S( f" F
- geomline1.SplineDefiningPointIndex = 0;
# v# K; M* B: m& V - Sketch::ConstraintGeometry geomline2_originPoint;
" R! Y6 U v& g- `1 |+ M+ l- a2 O" c - geomline2_originPoint.Geometry = originPoint;+ x" E! E. m3 N$ x% F5 H; `% ~
- geomline2_originPoint.PointType = Sketch::ConstraintPointTypeNone;
2 H1 F- {) M6 [/ t - geomline2_originPoint.SplineDefiningPointIndex = 0;8 ?6 }: i0 T; F2 X
- sketch1->CreateCoincidentConstraint(geomline1_startPoint,geomline2_originPoint);3 E& v: p2 ]' A; h' C: ]6 ]
- ) a$ e; _7 g! B
- //4 add constraints (dimension)& m7 \( }, P/ k. G3 c6 t
2 ?0 c7 j6 g4 u3 L( D3 l- NXObject *nullNXObject(NULL);
: M) G9 y/ v* }/ ^7 n! |, y' y - 3 U8 h# i) L: R: D
- 4 R0 U, a D- `8 Q1 d' c h# T+ j- e
- stringstream s_height1,s_height2,s_length;
( U5 N0 s4 k+ ^ K - s_height1 <<height1;
, j& H+ d% ?8 i9 g1 f - s_height2 <<height2;
% t; k' d+ v6 L5 {' }$ } |# S8 ~ @1 Y- i - s_length <<length;% [/ Z( U. J8 \- k! ^! y2 f& q
- - |( a/ ^. Q$ g7 c9 P' V1 D
- Expression *expression1,*expression2,*expression3;
) n, J2 ?: ]/ z, j6 r2 i8 I - expression1 = workPart->Expressions()->CreateSystemExpression(s_height1.str());
3 b) O9 c+ w& e( p6 R1 r - expression2 = workPart->Expressions()->CreateSystemExpression(s_length.str());4 t* y7 x# o! G
- expression3 = workPart->Expressions()->CreateSystemExpression(s_height2.str());, F' x; h5 {/ ^/ z9 W7 S6 G9 l4 _
- : |* @3 }. o/ `8 T; J r: B6 T
- // line1 dimension
5 M: |" \2 V1 S' i - % t' G' D4 | m+ D
- Sketch::DimensionGeometry dimLine1_startPoint;+ E: T* T6 v/ T0 E9 P7 ]
- dimLine1_startPoint.Geometry = line1;1 U1 O. ?1 R) ?2 ?& e
- dimLine1_startPoint.AssocType = Sketch::AssocTypeStartPoint;
2 \+ z ]+ {! D% N! u) M# p: q - dimLine1_startPoint.AssocValue = 0;5 G0 N" w+ j! K9 I. M; Z5 L
- dimLine1_startPoint.HelpPoint.X = 0.0;
# }) |: K' n' B. Z! d" u5 k - dimLine1_startPoint.HelpPoint.Y = 0.0;
! ^( X5 b% {0 A' p2 S) v# F - dimLine1_startPoint.HelpPoint.Z = 0.0;" I$ {- M, l% T% `# ?2 t2 c
- dimLine1_startPoint.View = nullNXObject;
; n9 c7 _& ~' y, b; w - $ O8 U! k2 s6 {
- Sketch::DimensionGeometry dimLine1_endPoint;
- E. X! | k# t1 R. d+ w0 \! H/ Z - dimLine1_endPoint.Geometry = line1;2 j2 b9 G% F% q
- dimLine1_endPoint.AssocType = Sketch::AssocTypeEndPoint;- u9 h$ {/ `0 W: N
- dimLine1_endPoint.AssocValue = 0;' R! v. E. j o! D/ b# i
- dimLine1_endPoint.HelpPoint.X = 0.0;8 L0 O; R9 U- T: e( f$ W \
- dimLine1_endPoint.HelpPoint.Y = 0.0;4 A: s3 p9 N# \# Q# n \
- dimLine1_endPoint.HelpPoint.Z = 0.0;
8 Z- C) ?9 w# u/ K" T: N/ J - dimLine1_endPoint.View = nullNXObject;. R! X" F# U! [3 }
" i& Z1 t t/ s8 Z( T- Point3d dimOrigin1(-100, height1/2, 0.0);3 o( c$ S- b3 j/ f# B) u; j1 c
% t- a5 U$ o. Y7 Q- }7 \, a1 p- sketch1->CreateDimension(Sketch::ConstraintTypeParallelDim, dimLine1_startPoint, dimLine1_endPoint, dimOrigin1, expression1, Sketch::DimensionOptionCreateAsDriving);0 g$ ^$ E5 Q- F6 K; z; |* u( K
. G& y" q. k* E' o; g
$ s8 Y- g9 R/ ^# h6 @- # l+ o6 g' q' N* C' X
- // line2 dimension
' L" a9 b! G2 a - % S- F; k$ ?6 P! X. ~/ f
- Sketch::DimensionGeometry dimLine2_startPoint;3 p1 j( A H: k, a/ u. a0 a
- dimLine2_startPoint.Geometry = line2;
9 Z: v( Q- I9 x ~3 P - dimLine2_startPoint.AssocType = Sketch::AssocTypeStartPoint;
p; D( _" M0 v - dimLine2_startPoint.AssocValue = 0;+ \+ C! i5 x* n( v
- dimLine2_startPoint.HelpPoint.X = 0.0;
8 }. T$ T V9 W - dimLine2_startPoint.HelpPoint.Y = 0.0;
1 q- | }* u- Q8 K/ [' o0 h: [ - dimLine2_startPoint.HelpPoint.Z = 0.0;% l6 R$ M# t, l0 N
- dimLine2_startPoint.View = nullNXObject;
+ Z( Y- a0 @; @5 S - . l5 M" Z6 y$ U# x% U5 I, Y
- Sketch::DimensionGeometry dimLine2_endPoint;# O& a; H/ h8 n. R, @
- dimLine2_endPoint.Geometry = line2;
( [/ X. F$ V; t S2 S" J - dimLine2_endPoint.AssocType = Sketch::AssocTypeEndPoint;
1 W' M" e& M- Q - dimLine2_endPoint.AssocValue = 0;
6 }: c5 E" k" ?) o. } - dimLine2_endPoint.HelpPoint.X = 0.0;
K) [) @1 L& A6 t' d) g - dimLine2_endPoint.HelpPoint.Y = 0.0;8 S: f. O' q/ R; s/ |
- dimLine2_endPoint.HelpPoint.Z = 0.0;/ |+ J, r- X" B! t1 w
- dimLine2_endPoint.View = nullNXObject; V( G! @$ U( |; J
- 6 y, c9 H- |3 k* M3 p$ t3 N+ z8 M/ e
- Point3d dimOrigin2(length /2,100 + height1, 0.0);% C( ]/ }. m$ E. S- b$ u- Z5 Q
- / U, n4 L+ j1 ~0 y
- sketch1->CreateDimension(Sketch::ConstraintTypeParallelDim, dimLine2_startPoint, dimLine2_endPoint, dimOrigin2, expression2, Sketch::DimensionOptionCreateAsDriving);6 B% _, r1 S9 d" ~$ y- w' r6 s/ o0 r
! J% D" X) a* M3 z3 ?- 1 h: c4 u5 I% T9 `& ]% }( u. p
- ! o q% \% p$ `% ?- h1 Z
- // line3 dimension
, V6 J3 e+ e2 O: ~9 Q0 A# E - / `; c, B$ d% `8 D# M
- Sketch::DimensionGeometry dimLine3_startPoint;) ^( o/ J7 ^* \5 _) i4 p, V7 r
- dimLine3_startPoint.Geometry = line3;
9 }# C4 M- m) { S( t - dimLine3_startPoint.AssocType = Sketch::AssocTypeStartPoint;: R4 F" `$ _- l; r6 V; k
- dimLine3_startPoint.AssocValue = 0;, D& @% x ]2 j7 ~( e% Q% c
- dimLine3_startPoint.HelpPoint.X = 0.0;- T) s) O# P5 d
- dimLine3_startPoint.HelpPoint.Y = 0.0;
! j( F2 s/ l6 l" p - dimLine3_startPoint.HelpPoint.Z = 0.0; \+ }. J R& W
- dimLine3_startPoint.View = nullNXObject;2 F: r0 s4 k/ w1 N
- , T [: `7 L4 B- N
- Sketch::DimensionGeometry dimLine3_endPoint;) L1 \/ H/ n5 p& t3 z% N
- dimLine3_endPoint.Geometry = line3;7 c# X# n+ w- B, o: O; ] x
- dimLine3_endPoint.AssocType = Sketch::AssocTypeEndPoint;
5 I4 c A) T8 J/ h o7 V5 E - dimLine3_endPoint.AssocValue = 0;! q' D" P. i% j$ Y8 Z9 v" F8 D5 ]
- dimLine3_endPoint.HelpPoint.X = 0.0;
6 c3 {6 G& [3 i1 Y) e+ }/ g& e' A - dimLine3_endPoint.HelpPoint.Y = 0.0;( |" W! p w7 e5 K% P1 @
- dimLine3_endPoint.HelpPoint.Z = 0.0;
( Q) {, J& ?. f' p+ G* i* ^ - dimLine3_endPoint.View = nullNXObject;
! [) V3 k1 t( [
3 i% |$ g) ^, L; r8 U( A4 f; B; x# F- Point3d dimOrigin3( 100 + length, height1-height2+ height2 /2 , 0.0);; `/ ^: C# P+ n( b
-
/ O5 j+ R. F7 i: V+ _ - sketch1->CreateDimension(Sketch::ConstraintTypeParallelDim, dimLine3_startPoint, dimLine3_endPoint, dimOrigin3, expression3, Sketch::DimensionOptionCreateAsDriving);
3 a8 f) e' E) O( u! ^ - 9 \- [- C1 `: V# A- ?
4 G- p, L6 @/ f* }0 P+ q- & d1 k: u1 a! D
- //5 update & deactive, p$ n( h( G0 e+ {3 I4 q/ U7 {+ M9 T
- sketch1->Update();$ N3 q2 V4 O$ p; b
( K5 F( @: {* v+ `3 U2 N. m- sketch1->Deactivate(Sketch::ViewReorientFalse,Sketch::UpdateLevelModel);7 k2 K7 E4 z3 O: `; H. R+ g
- 7 `" Y0 W* j/ q; p4 v* y" u' {- A
- delete expression1;
0 P, U0 x7 c( i" z4 J1 ?$ t: I - delete expression2;
" d# v: @; q |/ c. p - delete expression3;. M0 p0 j( ?7 D8 a
- * G$ I R& S3 n5 K
- }
4 q) g2 e j; k( ?
复制代码
9 V" `8 g& z% @$ f8 d0 ?/ |. R5 G: m1 N" I. N
9 a+ [+ a& ?5 w& E+ \, J( G- P8 A) g) m+ P# z$ N6 X
|
|