|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
×
PLM之家-NX9.0 二次开发实例视频31 NXOpen C++创建基本特征 <1>-草图的创建- `" x r1 Y5 H7 V: o6 x1 p C
内容:9 j& n/ i( L$ l) u- Y
草图作为参数化建模的基础,使用代码实现草图的创建过程,主要是对草图环境的初始化,以及草图约束的添加等问题。
7 A4 k' J4 \7 \! d# d: i; [* V目的:6 N& t" A, P" D# {- B
在NX中,使用NXOpen C++可以很方便的进行JA的录制,从而发掘草图约束中尺寸约束和几何约束的规律,通过这种方式,可以快速的完成开发。
. _5 z' N5 P" v# D3 b. r
NXOpen C++创建草图基本特征
$ W* D ?" j/ C" x; p* k
31 NXOpen C++创建基本特征-草图的创建(1)项目介绍/ K. z$ Z2 S/ c' s. o
31 NXOpen C++创建基本特征-草图的创建(2)UI设计7 h6 w8 c9 \$ |5 W) L" C/ J
31 NXOpen C++创建基本特征-草图的创建(3)项目创建
" I, g6 Z( q' k 31 NXOpen C++创建基本特征-草图的创建(4)草图特征创建, F4 s% Y; q- H* J2 w$ [! d; C
31 NXOpen C++创建基本特征-草图的创建(5)添加几何到草图9 x5 V+ _5 k8 V* H- g* s
31 NXOpen C++创建基本特征-草图的创建(6)添加草图几何约束
* u3 ]; k* Z" ]* X* g 31 NXOpen C++创建基本特征-草图的创建(7)添加草图尺寸约束
" y. U( R7 s3 } P" J8 F! Z9 u" d 31 NXOpen C++创建基本特征-草图的创建(8)尺寸和UI关联# W' s: Z! z7 C' T7 [
9 U0 D* \' X4 K% I" V, l
! e$ C3 V+ ^/ c2 H; T
; N+ S D( Z" l) s! V* R! _- I) Y9 d
. d3 D+ D; [" B1 d$ K4 L+ \! a关键代码分享:% U+ U0 U/ I; H2 K* [
3 w% c: R$ f( v. [" t
1 D0 x& O/ V) J/ `" ~- n \- 7 q! S" l! C: [+ N
- void lesson31_createSkeTCh::createIPSketch()& l; M+ z1 p5 O, `# h8 D8 N: m
- {, B1 I0 h! |( V, A1 e7 \# N) E
- ) N1 ?% T6 _8 U/ f# a& z: o# e
- Sketch *nullSketch(NULL);" V' b+ M7 p6 c
- SketchInPlaceBuilder *sketchInPlaceBuilder1;! f9 @- f* S) h) `8 f' C+ y
- sketchInPlaceBuilder1 = workPart->Sketches()->CreateNewSketchInPlaceBuilder(nullSketch);& U1 B" j' B% p$ ]$ J6 Z5 t
- sketchInPlaceBuilder1->SetPlaneOption(Sketch::PlaneOptionNewPlane);' t. H: I4 F0 K J' U
- - }# Y& x. Y: f5 i; X
- //sketchInPlaceBuilder1->Plane()->SetMethod(PlaneTypes::MethodTypeFixedZ);0 J4 Y4 `; `' j$ a
- ' f; X; Q3 q! R: m4 t4 A
, I8 N( U7 p" a% ]) O! e @' k- // add preference1 g5 b! n2 S) l; g% C' D
- ) J/ v6 T: n" o( S6 k
- theSession->Preferences()->Sketch()->SetContinuousAutoDimensioning(false);
; W h* ?3 [% n% v2 Y% S
3 z8 S; X8 S7 D) L- Drafting::PreferencesBuilder *preferencesBuilder1;; P+ v; L% A2 ]6 \
- preferencesBuilder1 = workPart->SettingsManager()->CreatePreferencesBuilder();6 [# s) B1 @6 _4 j
- preferencesBuilder1->AnnotationStyle()->DimensionStyle()->SetAngularDimensionValuePrecision(3);
, Y5 Y4 d+ \$ ~/ `* _ - preferencesBuilder1->AnnotationStyle()->DimensionStyle()->SetDimensionValuePrecision(3);2 h. s2 G4 s2 j7 ]
- preferencesBuilder1->Commit();
9 P! i5 ?$ A$ Y( \( o
1 h7 y _5 {( p1 m" v- preferencesBuilder1->Destroy();% P$ ~ g' r& i* Q' F& M
0 s+ ^+ X; j# w8 t, i; S
0 y) }, @7 {; o4 b0 U; [; M, W- NXObject *nXObject1;
# ?1 w& I! z7 q5 c% j - nXObject1 = sketchInPlaceBuilder1->Commit();9 j5 ]7 J* \' t' X# P' f6 t
( I, D) Z' A) W$ p1 g. n- Sketch *sketch1(dynamic_cast<Sketch *>(nXObject1));
- x6 w4 \ v* i: B2 Z, N - Features::Feature *feature1;
4 [4 {& R2 y0 i# ^$ j* `5 k - feature1 = sketch1->Feature();0 W( i3 @$ w( V J, A
- feature1->SetName("XY-Plane-Sketch");
6 O9 W( h, I5 W! B- g -
+ P, S( c: F1 e: _ - sketchInPlaceBuilder1->Destroy();
1 L* A3 H9 [7 ]8 ?, ^7 M% S- d
0 d, k+ R$ D/ W$ R/ C; {- //1 active sketch
/ K% r, R- f0 U. u
, W) o! P) L' S- sketch1->Activate(Sketch::ViewReorientFalse); Q: s# B) e, n5 c e4 N+ a
-
. B2 r) i+ @; e3 X- M - double height1 = this->expressionHeight1->GetProperties()->GetDouble("Value");
- Q8 V0 G4 m2 f, P, t1 o# q) F - double height2 = this->expressionHeight2->GetProperties()->GetDouble("Value");" G) R5 Q* h+ I, K& M6 o, d
- double length = this->expressionLength->GetProperties()->GetDouble("Value");# j3 a6 j+ p( I. U; x6 }; C5 }
- // 2.1 create geometry
8 j b0 V. W0 n
0 T3 L- V# y; B2 e4 I8 h9 }. F- Point3d startPoint1(0.0, 0.0, 0.0);
. E1 |; M. A* _! H: W! U - Point3d endPoint1(0, height1, 0.0);
( o; L5 d8 P1 N; Y& X& b. j! |2 ~ - Point3d endPoint2(length, height1, 0.0);
3 n* H Q5 n" j7 d - Point3d endPoint3(length, height1-height2, 0.0);
: y5 u4 q7 U2 P4 \0 w - Point3d origin = sketch1->Origin();# B6 \" V- H" V. N; O0 L7 Y
- Point *originPoint = workPart->Points()->CreatePoint(origin);. D6 C/ h B# ^# u) [- B6 N
- 6 M$ [8 q0 X2 A C9 `+ N
- Line *line1,*line2,*line3,*line4;
: |% _5 D2 a- G7 t - line1 = workPart->Curves()->CreateLine(startPoint1, endPoint1);3 S# \5 d6 H& s7 g, u
- line2 = workPart->Curves()->CreateLine(endPoint1, endPoint2);3 c$ x# }1 e; f! x6 C! E
- line3 = workPart->Curves()->CreateLine(endPoint2, endPoint3);/ Y7 b8 H! z l8 M- O7 z! |( o
- line4 = workPart->Curves()->CreateLine(endPoint3, startPoint1);
8 @5 l- W- A" x, K - // 2.2 add geometry
. x9 Y4 F4 f6 S1 L! n - % K2 d/ K5 I6 P7 h3 t2 x; P7 P
- sketch1->AddGeometry(line1,Sketch::InferConstraintsOptionInferCoincidentConstraints);3 I3 L$ C7 N2 z& Y; c& }7 C; `
- sketch1->AddGeometry(line2,Sketch::InferConstraintsOptionInferCoincidentConstraints);
: j+ @# q- a7 z$ P/ w, ~- j. ? - sketch1->AddGeometry(line3,Sketch::InferConstraintsOptionInferCoincidentConstraints);8 R2 Y9 t* d o3 |: ~( h
- sketch1->AddGeometry(line4,Sketch::InferConstraintsOptionInferCoincidentConstraints);# r2 ]" @: J4 ^8 e! g
0 q, g& d' g. r/ l" B" x' G- //3 add constraints ( gemo)
) L' b, _2 {- y7 o
+ F4 N) l. \, \- Sketch::ConstraintGeometry geomline1;
8 w( x3 M" Q4 G/ }) n' z" \ - geomline1.Geometry = line1;
$ c; ^! c3 O% }0 g( y* O - geomline1.PointType = Sketch::ConstraintPointTypeNone;
, h# X* C9 ^4 a+ w: o) Z3 z/ t - geomline1.SplineDefiningPointIndex = 0;
9 o* j* h6 N: B$ o1 i - sketch1->CreateVerticalConstraint(geomline1);0 K. O' {( o0 F$ L
- & o( X0 f2 v+ ?3 D% `0 c
- Sketch::ConstraintGeometry geomline2;5 o# P" ?. l+ d; H# ^5 D! u
- geomline2.Geometry = line2;
6 y5 E9 `( Y [" {0 g9 W - geomline2.PointType = Sketch::ConstraintPointTypeNone;+ y) T6 U" w4 t! {9 V& w7 F
- geomline2.SplineDefiningPointIndex = 0;
. h9 n l/ y/ ^' f0 v5 D& B9 S/ [ - sketch1->CreateHorizontalConstraint(geomline2);
& w I& j( Z3 M8 l, ^
" O/ z* y9 u$ \+ l- Sketch::ConstraintGeometry geomline3;
8 v" @5 N; q. g4 i8 I9 W - geomline3.Geometry = line3;" ^2 L* Q4 i0 A9 P6 I. X
- geomline3.PointType = Sketch::ConstraintPointTypeNone;4 z9 z; q8 {4 Z
- geomline3.SplineDefiningPointIndex = 0;- I' \' p) a. A
- sketch1->CreateVerticalConstraint(geomline3);9 ~& s9 R1 A) {# P; ?. B
- 2 a, P5 b1 j J, Z
- Sketch::ConstraintGeometry geomline1_startPoint;
% R% L/ r* Z, ^1 ` m7 M - geomline1_startPoint.Geometry = line1;
+ g: o0 ]+ [* q8 i" W+ i I: R - geomline1_startPoint.PointType = Sketch::ConstraintPointTypeStartVertex;
' b8 h6 A0 D! [+ @, y. K; C - geomline1.SplineDefiningPointIndex = 0;
- A/ l5 D1 B- s; o! i3 `$ g - Sketch::ConstraintGeometry geomline2_originPoint;# H+ k! M, D. j+ |$ P& M9 R
- geomline2_originPoint.Geometry = originPoint;
& Q W9 i: i% x8 J; j - geomline2_originPoint.PointType = Sketch::ConstraintPointTypeNone;
) p9 X- z/ x: k2 @0 L" D( D - geomline2_originPoint.SplineDefiningPointIndex = 0;$ s2 w* _, o; ~, u
- sketch1->CreateCoincidentConstraint(geomline1_startPoint,geomline2_originPoint);
: H/ u- `# m* B& E - , Z0 h3 F6 O; C
- //4 add constraints (dimension)- x z2 C& O: L5 R4 W0 e% L
- + M E+ z/ r. o9 I7 e. P$ o
- NXObject *nullNXObject(NULL);( v3 V* O5 u$ x" \8 {* [+ ]- A
- : U! s8 S B. z v A- {
- ' M. X2 t" M1 Y% G7 N7 I/ r) u+ r
- stringstream s_height1,s_height2,s_length;" F. ]+ t2 |5 S4 [3 n4 b
- s_height1 <<height1;
& @, U1 |+ f$ O) z; B# C8 j) L - s_height2 <<height2;
7 a( j y9 M0 F - s_length <<length;1 a" R1 G# r0 B* j. f4 Q/ h
- ( K/ S, M: ~+ J z; K5 h3 }
- Expression *expression1,*expression2,*expression3;6 w7 P' b; o4 R" f
- expression1 = workPart->Expressions()->CreateSystemExpression(s_height1.str());7 v. @) x! S$ S
- expression2 = workPart->Expressions()->CreateSystemExpression(s_length.str());
3 `3 i2 i+ W) a6 S - expression3 = workPart->Expressions()->CreateSystemExpression(s_height2.str());
3 \) A+ ~8 ~& {0 ^/ C9 G1 b# |6 o - : m8 G$ j8 i5 F' `2 p
- // line1 dimension 8 ~8 L5 m5 _8 c, I
; k/ F: |' H" K8 t& r! I% N+ Y/ Y- Sketch::DimensionGeometry dimLine1_startPoint;9 A; E) Z2 B2 V5 R; `7 A
- dimLine1_startPoint.Geometry = line1;$ p9 g2 x8 A! b/ n2 b+ C
- dimLine1_startPoint.AssocType = Sketch::AssocTypeStartPoint;/ a. y/ H3 G% r3 |6 C9 K
- dimLine1_startPoint.AssocValue = 0;
2 ]# c' g8 o7 K- U: O, O- F - dimLine1_startPoint.HelpPoint.X = 0.0;
" P" J- i9 `$ z; Y: c" a - dimLine1_startPoint.HelpPoint.Y = 0.0;9 r* u# o- z" W2 a1 E+ L' Y
- dimLine1_startPoint.HelpPoint.Z = 0.0;) Z O" L: Q. y& f
- dimLine1_startPoint.View = nullNXObject;
- @% b% H0 f0 ?- j' n) D8 B8 @ - 2 i }6 `6 o7 ^* _
- Sketch::DimensionGeometry dimLine1_endPoint;4 q' ?: t c3 L6 B9 ^0 T4 y: X
- dimLine1_endPoint.Geometry = line1;* m {1 G- d7 S+ s a
- dimLine1_endPoint.AssocType = Sketch::AssocTypeEndPoint;1 F) U. c% ~9 \! R; B e" S
- dimLine1_endPoint.AssocValue = 0;+ ^1 _6 t# h% w- | `8 p% o1 Z
- dimLine1_endPoint.HelpPoint.X = 0.0;/ t! f2 U$ T/ e6 H
- dimLine1_endPoint.HelpPoint.Y = 0.0;: H) {. r0 u+ ]3 c
- dimLine1_endPoint.HelpPoint.Z = 0.0;
$ s, a$ {6 u& a7 v - dimLine1_endPoint.View = nullNXObject;8 n1 s) N8 b# p: R* Q7 p
5 ~* S' G3 D$ |% V) P: X- Point3d dimOrigin1(-100, height1/2, 0.0);' r S- z/ v% ~, Y
- ) [1 U2 H6 I2 Y9 e
- sketch1->CreateDimension(Sketch::ConstraintTypeParallelDim, dimLine1_startPoint, dimLine1_endPoint, dimOrigin1, expression1, Sketch::DimensionOptionCreateAsDriving);$ S' g% m4 B' M+ C7 z6 @
) R4 u2 v/ g) ~: F/ ]- 9 y# j- V! \- t0 o9 ]8 }; Q
- * Z+ z6 T, ~; f6 i! l- p" V
- // line2 dimension n/ f) o3 D- K3 Y/ Y) t5 Y
- ! |( S" E( S) @- Z: j+ k; N5 N+ Y
- Sketch::DimensionGeometry dimLine2_startPoint;4 N0 {$ D6 v6 x3 Q7 I
- dimLine2_startPoint.Geometry = line2;
) g, O0 R1 p1 y* O* ? - dimLine2_startPoint.AssocType = Sketch::AssocTypeStartPoint;
8 q! x/ [% v7 u+ t - dimLine2_startPoint.AssocValue = 0;
; L' Q6 h- C% d3 [" v" k: c+ C - dimLine2_startPoint.HelpPoint.X = 0.0;7 n7 K0 T& R4 \; ?7 Z
- dimLine2_startPoint.HelpPoint.Y = 0.0;* T5 ~8 Z/ Q2 k' |- ^* a' Y+ |
- dimLine2_startPoint.HelpPoint.Z = 0.0;$ v3 ?. P3 s* r" E. [" ~; Y, y
- dimLine2_startPoint.View = nullNXObject;
2 u1 o6 X; A! G8 }% g# } - w: q- D! _7 k& |/ `
- Sketch::DimensionGeometry dimLine2_endPoint;8 d2 v# a' g% L) Q& c
- dimLine2_endPoint.Geometry = line2;
" I9 N- I0 ^) E8 v; _0 } - dimLine2_endPoint.AssocType = Sketch::AssocTypeEndPoint;
9 O W: A' Y, x6 M' M1 g Q# V - dimLine2_endPoint.AssocValue = 0;
# h3 }% Z5 V4 h - dimLine2_endPoint.HelpPoint.X = 0.0;
S, }) H% _& @! A& q& ~2 T - dimLine2_endPoint.HelpPoint.Y = 0.0;5 `5 O1 b6 A1 f' W3 e
- dimLine2_endPoint.HelpPoint.Z = 0.0;+ m7 ^* ?2 ]" v8 o* h4 N v
- dimLine2_endPoint.View = nullNXObject;
2 ?% b- [) p% ~, f& q6 T
/ E2 {. r! ^) Z9 {) q" H" G e. J* g- Point3d dimOrigin2(length /2,100 + height1, 0.0);
/ \9 m3 I/ J& a) G4 G
( b# K! e' t( ^: [9 J0 E8 h- sketch1->CreateDimension(Sketch::ConstraintTypeParallelDim, dimLine2_startPoint, dimLine2_endPoint, dimOrigin2, expression2, Sketch::DimensionOptionCreateAsDriving);
, j& w# Y8 z& K( S$ L+ h! y - : x9 Z5 u% w3 L1 ]- ]: K2 t
5 G! A2 G2 Q& K( d: @" {9 i-
# K$ x8 N& f. P& f8 t$ L# }7 J' Z - // line3 dimension 6 d. d1 p+ Z+ i& X7 ^8 Z0 K& `0 ~% {! p
- $ k: a# c- m" f- A* `0 I
- Sketch::DimensionGeometry dimLine3_startPoint;
+ U# h! z0 j' M0 ?. u - dimLine3_startPoint.Geometry = line3;3 Z0 s" ]& {. }, v a9 u
- dimLine3_startPoint.AssocType = Sketch::AssocTypeStartPoint;1 i- @1 p5 l9 F7 ]6 U
- dimLine3_startPoint.AssocValue = 0;
6 B8 b, P. p9 Q - dimLine3_startPoint.HelpPoint.X = 0.0;
& }9 A5 ~% P7 Z: T; U - dimLine3_startPoint.HelpPoint.Y = 0.0;
, s0 {! K7 ~1 n) o - dimLine3_startPoint.HelpPoint.Z = 0.0;: @+ w7 r; R% x
- dimLine3_startPoint.View = nullNXObject;" |3 J+ N) x3 }/ e$ M4 b9 l
1 f0 K( t$ v6 t- Sketch::DimensionGeometry dimLine3_endPoint;
$ d* P' x/ N$ |) Q - dimLine3_endPoint.Geometry = line3;
; c! \- O* [8 {! H& \ x% f0 O3 A - dimLine3_endPoint.AssocType = Sketch::AssocTypeEndPoint;
" P) m0 M/ k0 W& a' L - dimLine3_endPoint.AssocValue = 0;( S( V! U4 o# I, V
- dimLine3_endPoint.HelpPoint.X = 0.0;
% M3 B4 m9 s$ c d - dimLine3_endPoint.HelpPoint.Y = 0.0;. A9 E( N: K4 v1 p% E
- dimLine3_endPoint.HelpPoint.Z = 0.0;7 j% H, f R. t( I0 H% t' ?+ p. R) F
- dimLine3_endPoint.View = nullNXObject;
3 R- q- m1 B* a6 b, K; L
- t$ _# L! `5 v- i1 u9 v- Point3d dimOrigin3( 100 + length, height1-height2+ height2 /2 , 0.0);
3 T1 x# \% r2 h' z/ C% n - . {0 Z$ p3 A) r* k) x
- sketch1->CreateDimension(Sketch::ConstraintTypeParallelDim, dimLine3_startPoint, dimLine3_endPoint, dimOrigin3, expression3, Sketch::DimensionOptionCreateAsDriving);# M" y! k; t: h2 v: x
- . ^5 v8 g& f+ C4 h+ u: c, u4 X
3 {$ L: R& c* Z" m" z- 3 v4 U' _# y& }. u
- //5 update & deactive
d$ W9 M r6 L3 f: J. e$ ]4 j - sketch1->Update();& I Y) q, H2 V: C _ ?
- |7 f8 A/ K) \1 E. [4 g' B- sketch1->Deactivate(Sketch::ViewReorientFalse,Sketch::UpdateLevelModel); U8 f' S+ Q8 [. [- k2 f1 [
- 0 N( h. c1 s( e: W% U
- delete expression1;! k7 K( |9 [2 V/ @
- delete expression2;& v7 W) x( |* g% d/ i6 f1 g
- delete expression3;' e3 F% ?% i1 B: P" h
- ; s7 f5 o# M- ~2 G: ?
- }
9 H1 _7 X9 i9 d. Z" o0 Q _
复制代码
* t5 @, _* ^1 N0 j4 r2 T" F; v5 ]: f9 h' ^4 ]& |- X0 X
' t/ {2 o6 K8 `, H$ U w0 n
0 q2 B' M, ~0 {3 `
|
|