|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
PLM之家-NX9.0 二次开发实例视频31 NXOpen C++创建基本特征 <1>-草图的创建
7 H- h* L% c+ F4 G- T) U1 d内容:. b: P# R* v5 ?9 T5 Q
草图作为参数化建模的基础,使用代码实现草图的创建过程,主要是对草图环境的初始化,以及草图约束的添加等问题。
( ~% Y# S$ T( _, a目的:1 V" |' l4 q8 U
在NX中,使用NXOpen C++可以很方便的进行JA的录制,从而发掘草图约束中尺寸约束和几何约束的规律,通过这种方式,可以快速的完成开发。& j* g7 }" p M7 X6 B0 Q, u) S
NXOpen C++创建草图基本特征
+ S. ]. q& t( K8 S 31 NXOpen C++创建基本特征-草图的创建(1)项目介绍
, c" Y; G/ {$ o, ^3 O* S8 }4 D 31 NXOpen C++创建基本特征-草图的创建(2)UI设计
5 A! Q- L# q) h" f 31 NXOpen C++创建基本特征-草图的创建(3)项目创建
6 X+ r, ^; J0 D# E" ]% ~& D 31 NXOpen C++创建基本特征-草图的创建(4)草图特征创建
1 ]1 @! f4 }3 G5 H& ]" ` N y 31 NXOpen C++创建基本特征-草图的创建(5)添加几何到草图1 a9 S' m0 n7 F7 l+ M
31 NXOpen C++创建基本特征-草图的创建(6)添加草图几何约束% ?- S5 Z$ W/ |/ B
31 NXOpen C++创建基本特征-草图的创建(7)添加草图尺寸约束& ]& F! V" `8 @* U" [, R. m
31 NXOpen C++创建基本特征-草图的创建(8)尺寸和UI关联2 n( j8 {( `3 U" o
6 B; ^ i' K. B H# _# X3 r7 e
O- ]& c5 E) i/ ~1 J7 m/ U) J4 |, J
, E* j$ Q% E& f9 l( q- {: I) w' D+ V9 V. O0 G1 m8 G1 h+ ?
关键代码分享: f/ v. Y$ g8 _2 w, k
& A% c, G+ ]8 `) W, _( Z/ A+ u3 ^ R) j
- ) ], R: y6 P- k/ Q2 E. m8 ~' [0 L
- void lesson31_createSkeTCh::createIPSketch()1 \: A- c1 T+ b& |* ^0 h: X) V
- {
0 {& w( L% D% h M - : W' _# k5 \7 e$ F0 m7 [4 H& N
- Sketch *nullSketch(NULL);3 h% w. W- v* O |! Z' Y' U
- SketchInPlaceBuilder *sketchInPlaceBuilder1;
- L' R" J }/ ~$ m - sketchInPlaceBuilder1 = workPart->Sketches()->CreateNewSketchInPlaceBuilder(nullSketch);7 T' I! u; G6 U: Z. f) I( h7 v
- sketchInPlaceBuilder1->SetPlaneOption(Sketch::PlaneOptionNewPlane);
$ e% b6 k4 o. k3 M) R" [" l2 F - ) O5 H- C' ~9 T" s
- //sketchInPlaceBuilder1->Plane()->SetMethod(PlaneTypes::MethodTypeFixedZ);
: k$ [5 j7 c- H. h1 D - # ?& j- N* N, z. ?% D
+ b0 v# O6 @; D. }( a S% f" T* \- // add preference" M9 g R$ _$ J3 O; S0 ?
0 v5 L1 y# G# C4 w8 p* M: h) ]# N- theSession->Preferences()->Sketch()->SetContinuousAutoDimensioning(false);+ v6 o2 X: R5 x3 f6 S
$ d# u, r7 k# |0 Q- Drafting::PreferencesBuilder *preferencesBuilder1;
8 R2 g6 V' N! l- ? - preferencesBuilder1 = workPart->SettingsManager()->CreatePreferencesBuilder();. ]3 p- L4 X# Y+ T1 S' a$ s; I: p% y
- preferencesBuilder1->AnnotationStyle()->DimensionStyle()->SetAngularDimensionValuePrecision(3);+ k$ s [ z9 f8 x1 I$ ]
- preferencesBuilder1->AnnotationStyle()->DimensionStyle()->SetDimensionValuePrecision(3); v; P P" q9 z
- preferencesBuilder1->Commit();8 N; N% e Z5 K- [6 x5 K- e: H
# n* R9 o# w4 n4 Y/ {2 n, S- preferencesBuilder1->Destroy();
3 V) C, p1 Y( b, t
( r: ?! j* U! M# U
# t5 i$ K& B; ~, U9 L- NXObject *nXObject1;) D: u8 L, G3 |. b2 A2 H8 }
- nXObject1 = sketchInPlaceBuilder1->Commit();
) x7 ?) [% p+ | - ! d: G" B& `+ n! z) _
- Sketch *sketch1(dynamic_cast<Sketch *>(nXObject1));
- M' `2 N, B* _9 I1 H* Y9 ~ - Features::Feature *feature1;
- r$ A$ A+ J. E! x( r- k$ G - feature1 = sketch1->Feature();$ [6 N4 r& Y# i2 l1 _ P2 Q7 G8 W
- feature1->SetName("XY-Plane-Sketch");
# ^5 V; T) v* C -
% ~1 c) K( y( _9 }0 H0 W& S - sketchInPlaceBuilder1->Destroy();
0 s3 G1 P: o( ^( N; e/ @ - % D* c- [: B" M3 ^% J3 h# q
- //1 active sketch
6 g! t V" _ j& A$ T2 w
; a0 G5 Z# ^/ S) n" J7 ~6 g& J: K- sketch1->Activate(Sketch::ViewReorientFalse);
1 x0 C! ]& t6 i6 w I - 4 U+ R+ G; R- m* R. ?
- double height1 = this->expressionHeight1->GetProperties()->GetDouble("Value");0 g7 X+ I/ U, m0 R( B9 a* n& f
- double height2 = this->expressionHeight2->GetProperties()->GetDouble("Value");
- f8 j& j# @0 q( K1 S! W - double length = this->expressionLength->GetProperties()->GetDouble("Value");7 X K9 v$ g8 x4 s/ _
- // 2.1 create geometry& ?; b4 u% v3 e) m
) m% z$ F# v1 B1 }' j3 j R3 u+ ^4 j- Point3d startPoint1(0.0, 0.0, 0.0);( E: e# y2 w) B; [5 F0 U
- Point3d endPoint1(0, height1, 0.0);; O6 @- d# U2 f8 K! a/ ?
- Point3d endPoint2(length, height1, 0.0);. ^, _1 P U* G/ b. g
- Point3d endPoint3(length, height1-height2, 0.0);
: K0 }4 P0 H5 o6 [, m" i1 z - Point3d origin = sketch1->Origin();
3 q, V; X% Y9 b; s% i z6 A& `' r2 i2 ? - Point *originPoint = workPart->Points()->CreatePoint(origin);5 x# p- G. F/ H1 E- e
- 8 o5 i% Z% k% h- @' }# ~' q* c
- Line *line1,*line2,*line3,*line4;* N- G3 l0 U1 ~% Z8 K5 f2 ~: u
- line1 = workPart->Curves()->CreateLine(startPoint1, endPoint1);
+ @+ r" ?- `, m. _. P. E/ o( j - line2 = workPart->Curves()->CreateLine(endPoint1, endPoint2);+ S$ l# i& X' H# Z% `
- line3 = workPart->Curves()->CreateLine(endPoint2, endPoint3);
# ]( K- H0 @% b; F! i1 C& A# S* D - line4 = workPart->Curves()->CreateLine(endPoint3, startPoint1);. T6 e5 c& [. c; f6 V9 H' _9 u9 M
- // 2.2 add geometry* L% F S2 ^" e! v" J4 E2 c
1 t$ j+ G! m$ Z$ C* I/ ]3 u' a# K- sketch1->AddGeometry(line1,Sketch::InferConstraintsOptionInferCoincidentConstraints);: s/ N7 L7 a% ~) j3 R
- sketch1->AddGeometry(line2,Sketch::InferConstraintsOptionInferCoincidentConstraints);, I) G0 O5 F" I7 H5 |# e
- sketch1->AddGeometry(line3,Sketch::InferConstraintsOptionInferCoincidentConstraints);
8 ]) i# S$ c4 H, l. W5 _: Y - sketch1->AddGeometry(line4,Sketch::InferConstraintsOptionInferCoincidentConstraints);/ i* ?; |" h0 X/ Q8 J. u# c0 `
) y2 c4 F0 T/ l- //3 add constraints ( gemo)
. Q+ ^) U T, R" C: Y$ L- | - $ U/ j% l' V, W# ^3 A- R' _, m6 F
- Sketch::ConstraintGeometry geomline1;) N5 ^# k* Q% D$ Q! S
- geomline1.Geometry = line1;
5 ?5 ~8 J# u( g" U2 x7 K+ U - geomline1.PointType = Sketch::ConstraintPointTypeNone;5 B* V% V/ f. P) y* m8 C
- geomline1.SplineDefiningPointIndex = 0;8 r$ w0 z1 s/ \2 G* K
- sketch1->CreateVerticalConstraint(geomline1);( }4 {* L! _ I0 C6 s
- ?: j: } t9 Q+ s0 U- Sketch::ConstraintGeometry geomline2;
: a, x. J" S( i+ F6 @ - geomline2.Geometry = line2;/ F! u& ~5 d- ]2 c% f- y
- geomline2.PointType = Sketch::ConstraintPointTypeNone;
+ ]$ n4 @! s7 S5 H/ H8 B - geomline2.SplineDefiningPointIndex = 0;& Y. d z x) b- l8 S2 L9 g/ x
- sketch1->CreateHorizontalConstraint(geomline2);
$ \1 i9 v* o z) j
8 Q$ O; L9 s0 H6 D. \- _- Sketch::ConstraintGeometry geomline3;. D2 A2 V& A' D+ C6 B) e0 ~
- geomline3.Geometry = line3;! I4 ^2 I: g4 y, u9 h. O
- geomline3.PointType = Sketch::ConstraintPointTypeNone;
0 s; P h8 I. c; U: [ J% n# w - geomline3.SplineDefiningPointIndex = 0;
' s' v; F2 s- t - sketch1->CreateVerticalConstraint(geomline3);0 \0 d8 B$ T) }
; k" h0 C: r6 X! ?1 |- Sketch::ConstraintGeometry geomline1_startPoint;
9 ^' Z% j( \2 a) \/ E - geomline1_startPoint.Geometry = line1;: N" P3 _. G2 i
- geomline1_startPoint.PointType = Sketch::ConstraintPointTypeStartVertex;/ ?; M3 R& H3 l( H8 k
- geomline1.SplineDefiningPointIndex = 0;( \0 t, n+ h" n J
- Sketch::ConstraintGeometry geomline2_originPoint;( K5 Y; _6 {/ q' u% P6 B
- geomline2_originPoint.Geometry = originPoint;* L) t }, f' w0 `' h% q- d
- geomline2_originPoint.PointType = Sketch::ConstraintPointTypeNone;/ p8 j! \% Y4 }* l3 c$ g0 [( W
- geomline2_originPoint.SplineDefiningPointIndex = 0;0 ]/ Y( H; F9 _6 T
- sketch1->CreateCoincidentConstraint(geomline1_startPoint,geomline2_originPoint);
6 B6 a ~* h, T9 `3 n M$ O - , \+ t8 B1 E4 M$ m
- //4 add constraints (dimension)
4 h8 k/ ?- o6 D- C; r - 8 w/ F- Y; h q6 x, S
- NXObject *nullNXObject(NULL);
# h: J. }+ D; ]) ~/ p$ b - 5 h7 k7 g3 \9 t8 r
# M2 F8 [( n' {4 q: f" h/ |: L- stringstream s_height1,s_height2,s_length;* d% c& Y1 ?3 {9 Z) T9 {1 O9 T
- s_height1 <<height1;0 {! Z, f. }' r. \! ^8 e) ^: Z
- s_height2 <<height2;3 n8 M+ w0 f1 t5 K" W
- s_length <<length;4 E9 _1 h3 u; P3 j3 ?2 ?
- 0 W. X' A/ \5 v+ G. x; `" D/ y
- Expression *expression1,*expression2,*expression3;
! k" L" s4 G) y4 @% S8 L - expression1 = workPart->Expressions()->CreateSystemExpression(s_height1.str());6 s. A9 H$ t& |+ `# R
- expression2 = workPart->Expressions()->CreateSystemExpression(s_length.str());
) G% b6 B3 y$ a8 f+ d - expression3 = workPart->Expressions()->CreateSystemExpression(s_height2.str());5 [# I! ` T1 J' A3 A+ n( t; H2 h. [# \; [
. ]' b( n, }; S4 v+ I, G- // line1 dimension 3 b" ^' ^. P1 O1 K- C$ d: N
- % ]5 B: r0 h) G: {7 r, d
- Sketch::DimensionGeometry dimLine1_startPoint;/ L2 p% n$ y+ p: A" I! [
- dimLine1_startPoint.Geometry = line1;$ n8 I K6 X0 `) o- e
- dimLine1_startPoint.AssocType = Sketch::AssocTypeStartPoint;6 t/ N5 D8 z9 K2 r
- dimLine1_startPoint.AssocValue = 0;6 n% u, }8 K- e Q N a5 b
- dimLine1_startPoint.HelpPoint.X = 0.0;6 L* U- _3 r: w' G* P: I
- dimLine1_startPoint.HelpPoint.Y = 0.0;; i7 h' N0 i1 M. S. ?" Q8 T, A! Z
- dimLine1_startPoint.HelpPoint.Z = 0.0;
4 F5 t: l0 N H2 X c - dimLine1_startPoint.View = nullNXObject;7 q2 a$ ~( D' t& j& J$ P
- , W9 J0 M' L% }* _/ K
- Sketch::DimensionGeometry dimLine1_endPoint;
9 |! v& _. K& O+ x - dimLine1_endPoint.Geometry = line1;3 j+ F& P0 ^: \
- dimLine1_endPoint.AssocType = Sketch::AssocTypeEndPoint;
1 z( o1 o/ e+ k8 c8 O8 u - dimLine1_endPoint.AssocValue = 0;7 F7 R1 P! ?! `% R/ H& e
- dimLine1_endPoint.HelpPoint.X = 0.0;
& r0 Y- O& }3 _' \2 {. R - dimLine1_endPoint.HelpPoint.Y = 0.0;
! q- j0 e: g& H) ^ - dimLine1_endPoint.HelpPoint.Z = 0.0;
- u- A* `, E9 i. K2 h% b - dimLine1_endPoint.View = nullNXObject;: T) X3 P0 G P% E
- ; p) E3 Z {8 D6 B. M
- Point3d dimOrigin1(-100, height1/2, 0.0);# r3 F, V& N/ j
- Q- |7 F* P# T$ R4 i( A
- sketch1->CreateDimension(Sketch::ConstraintTypeParallelDim, dimLine1_startPoint, dimLine1_endPoint, dimOrigin1, expression1, Sketch::DimensionOptionCreateAsDriving);$ m' ^5 B' r# K2 F6 E
- / z: r- x# X! z
- 5 Q; o- e: }* O+ E* j8 n2 J) ^
- % b* N7 G. D# b) |" Y" h
- // line2 dimension
2 B6 v" Z( N1 o5 P - , K, {3 J# s* G+ T2 K
- Sketch::DimensionGeometry dimLine2_startPoint;
- q2 [, t; e3 I I8 g - dimLine2_startPoint.Geometry = line2;7 U# ? E) K3 \" @+ [
- dimLine2_startPoint.AssocType = Sketch::AssocTypeStartPoint;
+ v( y4 u0 d5 K" s - dimLine2_startPoint.AssocValue = 0;
G }+ |$ f; _ - dimLine2_startPoint.HelpPoint.X = 0.0;
" ~1 z6 c0 |; G% _* \2 U - dimLine2_startPoint.HelpPoint.Y = 0.0;; w7 y4 k% A9 `, u; h' z" \5 d1 w
- dimLine2_startPoint.HelpPoint.Z = 0.0;
1 O6 T9 x; ^! ?4 w( o; Q: | l - dimLine2_startPoint.View = nullNXObject;6 @& ]1 s6 z |- D1 D4 w3 l# a# l
" \# n! F, {+ a7 _$ O5 I2 n- Sketch::DimensionGeometry dimLine2_endPoint;: J; d8 O8 k' R& l i! m6 L
- dimLine2_endPoint.Geometry = line2;
. m. _4 g# ?9 v - dimLine2_endPoint.AssocType = Sketch::AssocTypeEndPoint;% C2 c% N' G1 X+ U/ a4 N1 R. v
- dimLine2_endPoint.AssocValue = 0;
' P, |; {( v& A: e+ x# R - dimLine2_endPoint.HelpPoint.X = 0.0;
$ Z& K& x6 @: U, H9 i5 S! v - dimLine2_endPoint.HelpPoint.Y = 0.0;6 q6 G5 y' W9 n2 O
- dimLine2_endPoint.HelpPoint.Z = 0.0;
- {/ I2 z* H# u- \- l L2 I - dimLine2_endPoint.View = nullNXObject;
2 Q4 x$ I' g8 b; r' u# T+ ~8 |
1 D0 O& f5 t2 ]4 \- Point3d dimOrigin2(length /2,100 + height1, 0.0);9 P) ]! m a2 d: L3 C
- / X5 a5 E% r1 y+ c
- sketch1->CreateDimension(Sketch::ConstraintTypeParallelDim, dimLine2_startPoint, dimLine2_endPoint, dimOrigin2, expression2, Sketch::DimensionOptionCreateAsDriving);# N; ]% y% r9 e/ N2 C' [( h
- ' d$ U! h0 }" k' U/ A0 X
- 5 L, {4 l; P% u8 ~1 K
- ; C9 ~# H! g" \% V& j3 |9 T* b
- // line3 dimension
7 C0 B% g' J u" } - 4 s" K9 x0 h$ A3 `) v" [
- Sketch::DimensionGeometry dimLine3_startPoint;
1 T& `2 ]3 b6 B- x - dimLine3_startPoint.Geometry = line3;
, ?; f5 F! Z: Y o7 `1 d - dimLine3_startPoint.AssocType = Sketch::AssocTypeStartPoint;
& H; [( x2 k9 ]1 C0 _6 H - dimLine3_startPoint.AssocValue = 0;& J5 D# \) J& k4 y# [
- dimLine3_startPoint.HelpPoint.X = 0.0;
! X1 [6 H; t! v3 F- N f& Z - dimLine3_startPoint.HelpPoint.Y = 0.0;
' E( T' {2 J! \" y0 z$ k1 F7 L# F - dimLine3_startPoint.HelpPoint.Z = 0.0;
+ n2 O! G q, C) m! `0 m9 s - dimLine3_startPoint.View = nullNXObject;& v9 V3 R; Z) N. A
5 q+ n# r" V; g: K0 a4 {! J; O) H- Sketch::DimensionGeometry dimLine3_endPoint;
1 o: K, d( C; P. m' t. X% x0 T - dimLine3_endPoint.Geometry = line3;2 v8 r, A5 A& M
- dimLine3_endPoint.AssocType = Sketch::AssocTypeEndPoint;
1 I, n9 J" w4 F0 D - dimLine3_endPoint.AssocValue = 0;; K! f: f, V: L' U2 [
- dimLine3_endPoint.HelpPoint.X = 0.0;5 |9 [5 f2 n+ z+ Z+ W$ Q+ N
- dimLine3_endPoint.HelpPoint.Y = 0.0;
0 v- C9 u/ R9 l7 o: [; F* q/ w; \ - dimLine3_endPoint.HelpPoint.Z = 0.0;
8 E* `* W4 k; A7 I - dimLine3_endPoint.View = nullNXObject;: |! z2 U9 O; s
* P* H/ K* Y4 l+ {( X$ D- Point3d dimOrigin3( 100 + length, height1-height2+ height2 /2 , 0.0);3 p( C( \2 ^2 T& N9 r+ Y4 W$ q. h
-
8 V% C" M& x) [, ^+ }( }& } - sketch1->CreateDimension(Sketch::ConstraintTypeParallelDim, dimLine3_startPoint, dimLine3_endPoint, dimOrigin3, expression3, Sketch::DimensionOptionCreateAsDriving);' ?9 w2 b' p* g9 K% d4 p
- 0 G$ s/ P! D& c, K; z. K+ _3 P
: b: W0 B6 ~4 {8 |5 c: y" P: S
. D: A5 y3 L; s- B4 F2 E- //5 update & deactive
, @6 H7 W. K1 L( V k - sketch1->Update();
- {; ^& y' Z4 A
7 g: V4 d. ]5 `$ @; l- sketch1->Deactivate(Sketch::ViewReorientFalse,Sketch::UpdateLevelModel);
0 l% h2 F4 T9 U, z+ s4 A/ M - + c" \* K6 D0 F" V. p
- delete expression1;
. a4 D- k/ e9 B0 ^+ q2 a0 y7 C - delete expression2;
1 W. b- ?. R3 Z( U1 D V - delete expression3;
+ i' S g2 @' f3 S - 3 y9 u' N# @# I- L
- }
/ V3 B% B/ ]% N% f
复制代码 4 {; w0 X! c4 q7 w1 o; _
9 O& r7 F! K7 d/ c$ X: m9 j, e/ O3 u% J) q3 ?
$ v0 D/ B j' @6 |) ~" S0 } |
|