|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
PLM之家-NX9.0 二次开发实例视频31 NXOpen C++创建基本特征 <1>-草图的创建9 K2 X6 z) a# |, H) O; F: b E
内容:
; E; Z3 J! K& z1 f( g' }: X草图作为参数化建模的基础,使用代码实现草图的创建过程,主要是对草图环境的初始化,以及草图约束的添加等问题。( C& k" G* A t6 ^
目的:
, R1 Y" o9 Q5 o) `在NX中,使用NXOpen C++可以很方便的进行JA的录制,从而发掘草图约束中尺寸约束和几何约束的规律,通过这种方式,可以快速的完成开发。$ b, Y/ |! d6 L- Y8 _; d/ [
NXOpen C++创建草图基本特征
' r4 t! y; V% X6 J3 v- y2 w
31 NXOpen C++创建基本特征-草图的创建(1)项目介绍
+ y! P' \+ A8 `+ _! n( G/ p* M8 f 31 NXOpen C++创建基本特征-草图的创建(2)UI设计
$ K( b# t* D* ^6 { 31 NXOpen C++创建基本特征-草图的创建(3)项目创建( H8 g1 Y2 M8 G" O
31 NXOpen C++创建基本特征-草图的创建(4)草图特征创建* ?( E% S2 Q6 s2 i3 e$ w
31 NXOpen C++创建基本特征-草图的创建(5)添加几何到草图; A, c" h* ~- {) E6 t! [. d
31 NXOpen C++创建基本特征-草图的创建(6)添加草图几何约束, ]7 r5 Y- d: n% E& u
31 NXOpen C++创建基本特征-草图的创建(7)添加草图尺寸约束
0 }: Z0 [1 _% F9 G 31 NXOpen C++创建基本特征-草图的创建(8)尺寸和UI关联0 }0 m3 @: f- T
% o. D, q" E, j% |& q% Z* g
# ?4 L+ q; t8 U) M1 R q5 a9 ]( M* h- S. b: E* `
$ W( U3 h1 n0 B- i. M: x* ?* Q8 ~7 D7 d; B
关键代码分享:
- s9 R2 D+ j; R6 [2 M5 n
" F$ e+ r, L% X* Y0 v/ L( i8 r6 q1 p
. e6 ^" w# [; S* }- p, V" g7 s- void lesson31_createSkeTCh::createIPSketch()
( G+ Y3 z: x9 [# t8 h* s - {
1 B' @, D6 C* G
, w0 p4 t9 ^$ O' _9 }- Sketch *nullSketch(NULL);
' J' M( q7 D% ?# D - SketchInPlaceBuilder *sketchInPlaceBuilder1;. n9 P+ G) l( d c5 z, T
- sketchInPlaceBuilder1 = workPart->Sketches()->CreateNewSketchInPlaceBuilder(nullSketch);+ b; z/ c/ D6 a) w6 h j3 a
- sketchInPlaceBuilder1->SetPlaneOption(Sketch::PlaneOptionNewPlane);
" x# X L3 w( f/ h% D/ V5 h5 q
0 U) h6 F% h, `9 J9 f/ o. U- //sketchInPlaceBuilder1->Plane()->SetMethod(PlaneTypes::MethodTypeFixedZ);
( q8 X9 N# H8 X
4 g3 p: C6 Z2 M4 i7 R( A
! b1 I$ G% N0 [/ _$ J5 V- // add preference
. [- p: E1 X! F - $ _ {! C, j; h6 R' p7 {
- theSession->Preferences()->Sketch()->SetContinuousAutoDimensioning(false);
# B5 N% p; s) Q8 b8 k* N
0 t/ C9 x$ d5 C9 x, r- Drafting::PreferencesBuilder *preferencesBuilder1;- I# Q: g8 M* C# ~* R
- preferencesBuilder1 = workPart->SettingsManager()->CreatePreferencesBuilder();
$ u& ]* u/ f9 W0 B9 P' H/ r5 b' Y - preferencesBuilder1->AnnotationStyle()->DimensionStyle()->SetAngularDimensionValuePrecision(3);
1 X+ c# B% _* w9 S - preferencesBuilder1->AnnotationStyle()->DimensionStyle()->SetDimensionValuePrecision(3);
& x) h) h3 e& u$ S - preferencesBuilder1->Commit();2 J( ?' R3 U! N2 G
* B$ K4 e' }3 |* p1 g+ A. }- preferencesBuilder1->Destroy();
# Z7 j. L( f( G+ w0 u% X) \
# {' O% Q9 Y, }+ p/ \4 p- ! {7 Q( u# a: B* R2 h+ G, f
- NXObject *nXObject1;, ^ B9 k j2 D* w. f$ y) S
- nXObject1 = sketchInPlaceBuilder1->Commit();
7 m0 p% x; f. R' U - " I$ Y$ A) d6 N
- Sketch *sketch1(dynamic_cast<Sketch *>(nXObject1));
7 p8 l$ ^8 j" N6 L5 V! } F4 Z - Features::Feature *feature1;! S; @6 g2 i4 E$ m: H `6 u( T
- feature1 = sketch1->Feature();" X& L- f) [8 [7 I
- feature1->SetName("XY-Plane-Sketch");
+ G1 g7 c! C2 b( n3 U# R; X3 {# C - $ k) N# U7 o5 \ {
- sketchInPlaceBuilder1->Destroy();( t: t$ |. Z1 o1 M( O1 f
- % E" c% p8 M; s' B- g: }/ X7 [
- //1 active sketch / T+ f; d1 U5 F- a6 r7 r2 H0 I
- - V" _4 _4 I/ J1 A
- sketch1->Activate(Sketch::ViewReorientFalse);
/ w+ N6 q( ?- A+ \3 u T -
" n% b3 p* k9 Z2 P - double height1 = this->expressionHeight1->GetProperties()->GetDouble("Value");! x- Z c" A7 \& B' ` h
- double height2 = this->expressionHeight2->GetProperties()->GetDouble("Value");7 t' z3 y& i& ?3 V5 Z( A
- double length = this->expressionLength->GetProperties()->GetDouble("Value");2 ~/ E1 W. q0 \1 U. R# W4 d& E
- // 2.1 create geometry) p3 h+ T: J- I, M5 ^4 r
% U5 V# N0 j) y1 Z. t- Point3d startPoint1(0.0, 0.0, 0.0);$ L+ Z3 d8 G( s* Z
- Point3d endPoint1(0, height1, 0.0);
8 R2 c5 O7 x6 ^- u - Point3d endPoint2(length, height1, 0.0);
1 E- [& K$ N) n" c+ {2 C - Point3d endPoint3(length, height1-height2, 0.0);, z: K" i/ E+ c: M5 m
- Point3d origin = sketch1->Origin();6 n' _! t" E5 u, L
- Point *originPoint = workPart->Points()->CreatePoint(origin);: [: X1 ^( ~. h. \" n7 `( \
# B2 ]- l, C, e& K% L2 k7 V3 y- Line *line1,*line2,*line3,*line4;
5 W7 }& Z. z8 O - line1 = workPart->Curves()->CreateLine(startPoint1, endPoint1);6 I) |0 \( X+ N6 U& A S! p6 a
- line2 = workPart->Curves()->CreateLine(endPoint1, endPoint2);3 d5 p4 b: C+ o7 c1 Q0 t
- line3 = workPart->Curves()->CreateLine(endPoint2, endPoint3);
% i1 s7 K, x) m( r$ `: ~ - line4 = workPart->Curves()->CreateLine(endPoint3, startPoint1);
# W. H# n* l8 A* k& C- z2 j - // 2.2 add geometry' r6 V6 |/ R8 f2 D
$ h; ~9 ~ M9 M# \* f5 [/ T. F- sketch1->AddGeometry(line1,Sketch::InferConstraintsOptionInferCoincidentConstraints);5 y9 V, [+ a" u6 I I# o
- sketch1->AddGeometry(line2,Sketch::InferConstraintsOptionInferCoincidentConstraints);; g0 h: A/ N5 X; \8 i( j
- sketch1->AddGeometry(line3,Sketch::InferConstraintsOptionInferCoincidentConstraints);
7 N2 M: \' j% R. w - sketch1->AddGeometry(line4,Sketch::InferConstraintsOptionInferCoincidentConstraints);; D$ i8 Z. m" ~: ] i4 {$ i
" Z/ O2 Q+ Y) h5 L" c- //3 add constraints ( gemo)1 N$ _; X5 I! l# X. M7 D
- & C0 K, }) A+ N9 d5 L
- Sketch::ConstraintGeometry geomline1;
9 J: h! z+ |3 K" @7 v - geomline1.Geometry = line1;- t6 C% |3 T0 t
- geomline1.PointType = Sketch::ConstraintPointTypeNone;
$ i7 _" ]9 Q3 w- t - geomline1.SplineDefiningPointIndex = 0;7 r$ u. D" R K$ W$ H
- sketch1->CreateVerticalConstraint(geomline1);7 z9 q6 x A* A3 f5 `3 \
- $ h* y3 Y7 a& }& M
- Sketch::ConstraintGeometry geomline2;
, t8 _+ F6 B5 q; P0 m# t* H1 R - geomline2.Geometry = line2;
; `: O7 u/ N d: x1 I2 m) v" k( F, F - geomline2.PointType = Sketch::ConstraintPointTypeNone;( }% c/ P# a1 b
- geomline2.SplineDefiningPointIndex = 0;% ]+ t$ J/ O; e1 O8 ]( Y! g9 E
- sketch1->CreateHorizontalConstraint(geomline2);
( _. u3 D! c) Q, K - 1 L$ Q& Y1 L) M' f% f3 a! p8 F7 y5 }; ~6 l
- Sketch::ConstraintGeometry geomline3;9 }+ z) { Z( X
- geomline3.Geometry = line3;
* U3 m% H. E9 N - geomline3.PointType = Sketch::ConstraintPointTypeNone;
; e0 l. W. ]/ o: f - geomline3.SplineDefiningPointIndex = 0;
0 ^. n4 @, \! U m" m) c - sketch1->CreateVerticalConstraint(geomline3);+ |; ^- [. {) L& |% u' _
; c+ r J8 t6 h/ e( b- Sketch::ConstraintGeometry geomline1_startPoint;
* n; `# j; v+ W3 x: W7 s - geomline1_startPoint.Geometry = line1;
C. I, \+ A9 g1 U( _' G& j* ` - geomline1_startPoint.PointType = Sketch::ConstraintPointTypeStartVertex;. ?( Q5 y: L" [. ~$ b8 x6 [6 @
- geomline1.SplineDefiningPointIndex = 0;% ?: T$ Y! d% Z0 o9 m0 _
- Sketch::ConstraintGeometry geomline2_originPoint;) U( ?; n# ]+ E7 Y d& ~
- geomline2_originPoint.Geometry = originPoint;+ K/ i$ R- C3 N0 ^$ r! ]: e8 J- N
- geomline2_originPoint.PointType = Sketch::ConstraintPointTypeNone;
9 w: h- L. D* o+ R - geomline2_originPoint.SplineDefiningPointIndex = 0;
5 m g5 J) A: H# V& n: p% x - sketch1->CreateCoincidentConstraint(geomline1_startPoint,geomline2_originPoint);2 F6 Q0 N7 v( d* E) u* B
6 G/ u2 w* V) F% y% l' L- //4 add constraints (dimension)
8 H/ J7 J t$ w" S$ ?0 p/ V
- t, K a& @+ w1 K. s- NXObject *nullNXObject(NULL); F! X. y1 I6 U4 K
- 1 d4 s X8 r2 D+ z
' Z: Y2 a% `, Z3 @5 P8 }- stringstream s_height1,s_height2,s_length; T: k6 d% {* m% p
- s_height1 <<height1;
5 x$ |- q5 _; @8 z, D7 J - s_height2 <<height2;
" I- T- T* g& r# T' n& b - s_length <<length;
" V' ~2 ?' u$ Q - 7 M$ p# o9 x# Q* g" d2 Q, z
- Expression *expression1,*expression2,*expression3;
: n F( D+ v2 K+ f - expression1 = workPart->Expressions()->CreateSystemExpression(s_height1.str());: P. L+ j* z/ m8 J' i5 }: e3 ^
- expression2 = workPart->Expressions()->CreateSystemExpression(s_length.str());
: D3 n0 ^# [" x) ] - expression3 = workPart->Expressions()->CreateSystemExpression(s_height2.str());
, a* h j+ ^. i# M* G- Z
' [+ c, b1 u6 K8 z# i# P- // line1 dimension
8 _' n N/ K- l6 V V) s% ?
3 w; H# X9 O s% a) A9 _5 D7 _- Sketch::DimensionGeometry dimLine1_startPoint;
( N) ?/ b; ]! l0 P7 Z2 G% Y, X - dimLine1_startPoint.Geometry = line1;+ L" {& @" t' E- C- A6 a) {0 l
- dimLine1_startPoint.AssocType = Sketch::AssocTypeStartPoint;
. |' g# {5 K _4 H% \ - dimLine1_startPoint.AssocValue = 0;
0 w' X; g! X m4 O2 Y$ Z - dimLine1_startPoint.HelpPoint.X = 0.0;9 a" f, ]/ d# ?% O3 |! N( ?
- dimLine1_startPoint.HelpPoint.Y = 0.0;1 p0 e2 p% _1 `
- dimLine1_startPoint.HelpPoint.Z = 0.0;
# a8 l. \, u) `3 k/ p6 W - dimLine1_startPoint.View = nullNXObject;
7 E! I; y+ m( p% U8 f
, d4 b; a! Q" _+ G5 C- Sketch::DimensionGeometry dimLine1_endPoint;
' ]$ T0 r1 e) T% Y% u( V0 t! I - dimLine1_endPoint.Geometry = line1;
+ |) A# `2 ?; Q3 W+ b9 T6 W: Q - dimLine1_endPoint.AssocType = Sketch::AssocTypeEndPoint;' w: M+ V3 s( m$ g# z; E
- dimLine1_endPoint.AssocValue = 0;7 [# j% N. O- N S$ g( |
- dimLine1_endPoint.HelpPoint.X = 0.0;3 k3 j! u2 S: b8 {
- dimLine1_endPoint.HelpPoint.Y = 0.0;
e9 t8 D1 U) g& j2 m1 V4 \) y - dimLine1_endPoint.HelpPoint.Z = 0.0;( h3 }9 A% S+ S3 y
- dimLine1_endPoint.View = nullNXObject;% E& e; W) w) @* C4 A- U" J+ N
- 4 n( Z' K$ [6 B% [
- Point3d dimOrigin1(-100, height1/2, 0.0);8 m+ t4 e3 q9 h3 z8 n* E* e
- + ~4 x7 \ B( f8 G3 f
- sketch1->CreateDimension(Sketch::ConstraintTypeParallelDim, dimLine1_startPoint, dimLine1_endPoint, dimOrigin1, expression1, Sketch::DimensionOptionCreateAsDriving);, T. d* q2 [4 c1 p/ G
- 1 u/ `8 n$ ?+ s5 U/ m1 Y# s+ d
- 8 p5 U0 A) g$ ?8 [, r
-
( r' y9 N: U4 o0 v, Z! p$ H - // line2 dimension
) M$ Y) a5 I8 y; p$ C$ ^
0 A3 r5 _7 e0 h0 H4 P6 O- Sketch::DimensionGeometry dimLine2_startPoint;
; n9 y3 X0 c7 I e+ E% K- ? - dimLine2_startPoint.Geometry = line2;
! h: ?) D& R8 A1 e- ~ - dimLine2_startPoint.AssocType = Sketch::AssocTypeStartPoint;- m' _' N0 P& g; O ~8 T% W5 W
- dimLine2_startPoint.AssocValue = 0;2 Q2 y1 {1 q5 g" r# {! R% Z6 A: d
- dimLine2_startPoint.HelpPoint.X = 0.0;* B# z& ?6 ]8 b Z( b3 y( G/ @ L
- dimLine2_startPoint.HelpPoint.Y = 0.0;0 b/ b4 M5 m/ n* e, F' `' H
- dimLine2_startPoint.HelpPoint.Z = 0.0;' h. x# D- U9 M# v/ \- `% d
- dimLine2_startPoint.View = nullNXObject;: S3 q" d$ ^; m# N9 \! X
- 3 L# m+ j( h* O) I+ e( r9 o
- Sketch::DimensionGeometry dimLine2_endPoint;
4 }+ Z! ]8 D7 e' E0 R, } - dimLine2_endPoint.Geometry = line2;
4 D7 A+ `1 O, ~) {- ~: p) f - dimLine2_endPoint.AssocType = Sketch::AssocTypeEndPoint;
]# H G# X* r - dimLine2_endPoint.AssocValue = 0;
/ H+ b7 K6 i: F- e" h - dimLine2_endPoint.HelpPoint.X = 0.0;
5 c* L0 W9 r6 W7 b u0 `4 R - dimLine2_endPoint.HelpPoint.Y = 0.0;
+ ^* m$ l* l1 P - dimLine2_endPoint.HelpPoint.Z = 0.0;3 l9 ~" ~7 d' i& U/ c8 E& k2 n
- dimLine2_endPoint.View = nullNXObject;1 q. j) ~1 [% `6 Y
- 1 g" H. d3 l9 U# [- n
- Point3d dimOrigin2(length /2,100 + height1, 0.0);& B& l' `7 n+ R! j$ a8 ~
- # M) R2 R4 w9 y1 O( e
- sketch1->CreateDimension(Sketch::ConstraintTypeParallelDim, dimLine2_startPoint, dimLine2_endPoint, dimOrigin2, expression2, Sketch::DimensionOptionCreateAsDriving);: S5 o( e% R! o9 d
1 B7 G0 |) J' u! H- 7 j' f% j8 p7 t
- 9 j6 j! V" ~8 b% C
- // line3 dimension
: j) ?4 }! y$ i8 T
7 J% w1 v; K1 P# g& S4 w- Sketch::DimensionGeometry dimLine3_startPoint;
9 T% z r) y3 } R1 Z! T% Z - dimLine3_startPoint.Geometry = line3;/ Z/ \! ?2 U/ F7 I3 }: Q( q7 J# f% g1 U
- dimLine3_startPoint.AssocType = Sketch::AssocTypeStartPoint;" B5 z) Q' Q2 o) H5 h, f$ ` `
- dimLine3_startPoint.AssocValue = 0;
x' |+ h2 W+ s! n# ] - dimLine3_startPoint.HelpPoint.X = 0.0;
6 ]) U# |1 O' T/ f* A. f - dimLine3_startPoint.HelpPoint.Y = 0.0;
! V6 z! ?$ f6 J+ c; a$ V - dimLine3_startPoint.HelpPoint.Z = 0.0;
3 x& ?4 p) }1 A O4 R - dimLine3_startPoint.View = nullNXObject;- p! I* b0 m& l; Y
- $ ]& b7 U; E& y( s" @
- Sketch::DimensionGeometry dimLine3_endPoint;" \& t8 Q m$ k
- dimLine3_endPoint.Geometry = line3;
3 Y0 I% l. p5 W4 x# ]. x - dimLine3_endPoint.AssocType = Sketch::AssocTypeEndPoint;, f# w' k3 c7 j% }0 m+ T8 {) \' I/ x
- dimLine3_endPoint.AssocValue = 0;/ N) |% f% M! T [3 f+ ]
- dimLine3_endPoint.HelpPoint.X = 0.0;
7 N7 \( S5 y" }+ s. U - dimLine3_endPoint.HelpPoint.Y = 0.0;2 r4 G R" {9 k0 U
- dimLine3_endPoint.HelpPoint.Z = 0.0;
8 x+ Q2 ~) e5 f) k; Y - dimLine3_endPoint.View = nullNXObject;
' F8 w4 K' @9 |. P7 [$ z# Z5 ?
& @2 Z4 a3 q x, z- Point3d dimOrigin3( 100 + length, height1-height2+ height2 /2 , 0.0);* ^& @/ r7 m' b6 a9 v
-
/ I' d( B+ j* r! N - sketch1->CreateDimension(Sketch::ConstraintTypeParallelDim, dimLine3_startPoint, dimLine3_endPoint, dimOrigin3, expression3, Sketch::DimensionOptionCreateAsDriving);
$ {/ v$ h4 T [% S
! \5 D8 n6 \# _+ r
4 b$ b" ]' E* O( C- R4 @' f
' {$ o6 o$ i: v4 L; ?$ [" [4 J) J- //5 update & deactive6 t. y+ w/ ]+ X, w: {1 Y1 T
- sketch1->Update();$ r4 l u2 v5 {# p4 ~
- [0 g% B u A
- sketch1->Deactivate(Sketch::ViewReorientFalse,Sketch::UpdateLevelModel);+ T$ S# u2 S+ H. o
& S4 U) f4 y6 _9 s) K }( L2 X- delete expression1;/ ~5 b2 s [- F4 X
- delete expression2;
9 k, v R+ l9 {1 O - delete expression3;
% e2 C7 t' t4 C -
/ `4 X/ ^4 S) v! Y) |* k - }2 S6 `5 @& G) s6 m$ k: Q1 ?
复制代码
/ `, n8 q5 _$ e3 m
" J3 S9 U9 X |* B& Y _
" X4 ~% F3 M- d. _5 D c1 l V+ g; p' u" b$ j( \2 s5 B
|
|