|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
PLM之家-NX9.0 二次开发实例视频31 NXOpen C++创建基本特征 <1>-草图的创建
1 `) e9 O2 I3 u, {; g& @内容:
7 W. x5 ^& k3 V% V8 a! j草图作为参数化建模的基础,使用代码实现草图的创建过程,主要是对草图环境的初始化,以及草图约束的添加等问题。6 C9 K* b/ Z- f7 Y2 m! g$ X& x
目的:: E0 ]8 g$ _# P8 h# |# u
在NX中,使用NXOpen C++可以很方便的进行JA的录制,从而发掘草图约束中尺寸约束和几何约束的规律,通过这种方式,可以快速的完成开发。
4 X2 I# i& J3 U. O! K$ k* V
NXOpen C++创建草图基本特征
; T; R4 S- n* I# H7 P# k
31 NXOpen C++创建基本特征-草图的创建(1)项目介绍
- h2 P4 J8 u% v; H 31 NXOpen C++创建基本特征-草图的创建(2)UI设计6 B7 ~! x! m1 u" M2 F4 }
31 NXOpen C++创建基本特征-草图的创建(3)项目创建
2 c1 f+ Y6 r. G% L2 e* m, |* G! f 31 NXOpen C++创建基本特征-草图的创建(4)草图特征创建
7 l' A$ a- L5 H6 E7 l+ l( D) p& l 31 NXOpen C++创建基本特征-草图的创建(5)添加几何到草图* n% y& W4 |& s/ r) f' _8 t6 m
31 NXOpen C++创建基本特征-草图的创建(6)添加草图几何约束
7 g. R% k7 i# k7 u0 j 31 NXOpen C++创建基本特征-草图的创建(7)添加草图尺寸约束" f; K5 D% \5 J+ L8 P) |
31 NXOpen C++创建基本特征-草图的创建(8)尺寸和UI关联" l' L# a; o0 I
8 C6 j& _3 [% W! t1 u: u
7 L8 X h/ @$ C9 ~: d% K7 U. f
% l y* Q2 h" X7 V4 ]! V+ N7 p9 x0 C: y0 D
9 S; G8 Y Z( h5 f2 `" K, f% o关键代码分享:
- J/ ~7 p9 d6 t! N4 t
i4 c0 z8 B% X2 J* z
' ?! P( V$ r! k# w
, e' c; T# t' V! }7 h- void lesson31_createSkeTCh::createIPSketch()
/ @) ]' d* ^3 L0 S - {
' h/ D5 n. P" J1 l1 N - ) S* G2 d! C! D0 c
- Sketch *nullSketch(NULL);8 i/ o) [( F0 g, x
- SketchInPlaceBuilder *sketchInPlaceBuilder1;
8 o! [ f+ w9 G- C J. I" N - sketchInPlaceBuilder1 = workPart->Sketches()->CreateNewSketchInPlaceBuilder(nullSketch);2 J1 ?/ K! A2 |9 S: G! q! B) s
- sketchInPlaceBuilder1->SetPlaneOption(Sketch::PlaneOptionNewPlane);
7 A' r- Z' g; z5 a' t4 R* Z
1 ]& x3 @; M5 A0 C/ O1 H9 k- ?- //sketchInPlaceBuilder1->Plane()->SetMethod(PlaneTypes::MethodTypeFixedZ); ?/ R' p$ p; H" P8 A. B! m
; o! r. q3 g8 v% q6 b" f1 L+ S- ' w% R2 _, m- O3 R& [; K& d8 Y! u
- // add preference0 c8 i4 @4 E8 f/ {
- U: E2 ~% I" y+ K5 e4 ?) C
- theSession->Preferences()->Sketch()->SetContinuousAutoDimensioning(false);
! b2 g0 v6 Y& V4 t% b( W
$ N" s w9 W% `! [- Drafting::PreferencesBuilder *preferencesBuilder1;1 M- h- P# k& H& k2 U! d
- preferencesBuilder1 = workPart->SettingsManager()->CreatePreferencesBuilder();$ g3 [& I2 m) E; F) ?2 O
- preferencesBuilder1->AnnotationStyle()->DimensionStyle()->SetAngularDimensionValuePrecision(3);4 y+ ^! O5 p* X& |( j0 @$ k+ \
- preferencesBuilder1->AnnotationStyle()->DimensionStyle()->SetDimensionValuePrecision(3);
3 Y; [9 ~5 `2 ]9 ^/ ] - preferencesBuilder1->Commit();0 j: ^' O9 V2 K7 f4 V9 Y, r
3 i; d! d* X2 y# [* C- preferencesBuilder1->Destroy();" H. n9 s- N" p, f, T7 [+ Q
- ) v" {) _! v1 z
- : X" k, S% }* n, K% e
- NXObject *nXObject1;* P% C5 X, K6 k5 K5 I# w5 S% m
- nXObject1 = sketchInPlaceBuilder1->Commit();# T/ x( h8 ]3 R: l: q" s) _
9 x' z- i& b$ U9 M0 J! Z- Sketch *sketch1(dynamic_cast<Sketch *>(nXObject1));
$ o' v5 U/ H/ y* g' @ - Features::Feature *feature1;& D% C" m4 {/ d, s" v. `# i
- feature1 = sketch1->Feature();
$ o% g U k p& Y8 e% Y7 T - feature1->SetName("XY-Plane-Sketch");
5 `3 y4 k" p4 {; m" e0 h -
0 J" S7 Q0 p' s8 J, X - sketchInPlaceBuilder1->Destroy();
, ]5 y, R( L* X$ y5 p4 u3 x( n - / F6 G) b3 \1 @" w
- //1 active sketch ; ~- w* Z7 X9 v8 e7 V- @5 D L
, N# C9 ~8 x7 t; V& b+ W3 ]6 ^- sketch1->Activate(Sketch::ViewReorientFalse);
* a! ~) K' Y, r* N& H" f -
& I- f! F. F) b' y - double height1 = this->expressionHeight1->GetProperties()->GetDouble("Value");
& G$ o; x. X" j - double height2 = this->expressionHeight2->GetProperties()->GetDouble("Value");) \ k9 ^& B3 d( l* r' o
- double length = this->expressionLength->GetProperties()->GetDouble("Value");3 {( `& `' e6 q3 ]# x8 ^6 w/ ^" y# [8 y
- // 2.1 create geometry) [3 `1 Z% z! q' M
- 2 m! Q8 X2 s9 u# M X" d
- Point3d startPoint1(0.0, 0.0, 0.0);. ^9 k; `6 I, X1 H( L# v6 e* b4 h: `) |
- Point3d endPoint1(0, height1, 0.0);. T2 N$ t1 M" G
- Point3d endPoint2(length, height1, 0.0);* X8 `1 M- q1 v$ J. c: {
- Point3d endPoint3(length, height1-height2, 0.0);
' I2 x$ A; W, p) Z% Q - Point3d origin = sketch1->Origin();8 t& V: ~& o1 c3 r+ m- q5 b6 r
- Point *originPoint = workPart->Points()->CreatePoint(origin);# b; m! f. f2 X% g/ `
$ I. D4 @5 k) H1 `- Line *line1,*line2,*line3,*line4;: m6 N, h: S0 Y
- line1 = workPart->Curves()->CreateLine(startPoint1, endPoint1);3 t3 A: S0 |" k" ?# y0 V
- line2 = workPart->Curves()->CreateLine(endPoint1, endPoint2);% G) D m/ P5 B- _9 _9 p
- line3 = workPart->Curves()->CreateLine(endPoint2, endPoint3);
0 ~ d% d8 x* h7 q7 A/ h4 G: R# c - line4 = workPart->Curves()->CreateLine(endPoint3, startPoint1);
2 X/ Q& c' z; X4 M% k9 A - // 2.2 add geometry- B6 q$ D1 J2 v
- ) l' p9 O/ r! F+ t0 I' C9 k3 F/ C, l
- sketch1->AddGeometry(line1,Sketch::InferConstraintsOptionInferCoincidentConstraints);, d+ U3 ~' T( k
- sketch1->AddGeometry(line2,Sketch::InferConstraintsOptionInferCoincidentConstraints);! u5 y0 @; X% x& }/ d
- sketch1->AddGeometry(line3,Sketch::InferConstraintsOptionInferCoincidentConstraints);
, P, M b; Q; ?5 k7 [( t8 d - sketch1->AddGeometry(line4,Sketch::InferConstraintsOptionInferCoincidentConstraints);
: K# H" @0 b3 m. ^; C( s. x1 p% V1 y! x
2 U/ Z1 `) d( m& d1 B2 v- //3 add constraints ( gemo)7 A8 e+ \1 x8 u3 M- R. [; h3 T( m
- : H* f2 K; Y- w
- Sketch::ConstraintGeometry geomline1;
* D' t2 @# ~- r2 H4 P* v - geomline1.Geometry = line1;
' q# G* p8 w8 Q - geomline1.PointType = Sketch::ConstraintPointTypeNone;
! z3 T; |3 @" e* u. u - geomline1.SplineDefiningPointIndex = 0;
$ x2 i1 Z. [2 m! w/ Z0 ]1 r2 q* B' k! u - sketch1->CreateVerticalConstraint(geomline1);
' t; o3 B7 u2 s8 U - 5 T9 G0 H/ M9 _( F& R: X/ T: r0 `
- Sketch::ConstraintGeometry geomline2;
' y! }' |! v: W! R" ? - geomline2.Geometry = line2;
% \( i: T G8 p% o$ [' K8 S - geomline2.PointType = Sketch::ConstraintPointTypeNone;! ~* K* m a4 N( a7 O1 U2 Z
- geomline2.SplineDefiningPointIndex = 0;2 v1 Z- `& x8 m$ ^4 G
- sketch1->CreateHorizontalConstraint(geomline2);
7 @8 Z1 Q: N: s/ { `
8 G0 T% ^, R( q0 P; L- Sketch::ConstraintGeometry geomline3;
! R ]2 p5 b, H - geomline3.Geometry = line3;" f1 g! `; }# G" S8 L6 \0 M: ]' N
- geomline3.PointType = Sketch::ConstraintPointTypeNone;* N# n, {% U, L+ ], A- c( h
- geomline3.SplineDefiningPointIndex = 0;, F, k1 b7 m+ ^
- sketch1->CreateVerticalConstraint(geomline3);
: G$ B, `# b) e; y
% [2 X5 A+ z( r7 I- Sketch::ConstraintGeometry geomline1_startPoint;
+ R. }/ }' B | R3 a9 x( f - geomline1_startPoint.Geometry = line1;; Z8 T) S# B P% m- b" P) ~2 \6 e
- geomline1_startPoint.PointType = Sketch::ConstraintPointTypeStartVertex;+ b2 L" t; y6 A, _# ^
- geomline1.SplineDefiningPointIndex = 0;
1 M) A* E8 y, ~/ J - Sketch::ConstraintGeometry geomline2_originPoint;* R! e; U' _+ t' S' }5 ^1 S) f
- geomline2_originPoint.Geometry = originPoint;
0 A# I% c) r' W: X$ } - geomline2_originPoint.PointType = Sketch::ConstraintPointTypeNone;
/ }! m$ @3 @( @8 p - geomline2_originPoint.SplineDefiningPointIndex = 0;
4 i3 [* g, a) E3 h - sketch1->CreateCoincidentConstraint(geomline1_startPoint,geomline2_originPoint);
9 U: T) h$ I; T7 c& W - ( D& F% \4 o6 Q
- //4 add constraints (dimension)% M8 e- i, J4 P4 }) p
- , F7 u. ~9 o# B4 [6 L
- NXObject *nullNXObject(NULL);" T" r6 X: M( B& P" n0 O& |+ m- `
- : ~0 y6 k9 I7 }
- ' L) T9 x1 V; S% s p) Q/ f
- stringstream s_height1,s_height2,s_length;
" x/ k4 l8 }# ^( i, o - s_height1 <<height1;' N. X( @' x* H: S! C
- s_height2 <<height2;% M, e" n# K6 w" L
- s_length <<length;8 A9 s2 A3 S2 V0 H
. I6 L* m9 q2 H( B% K% W- Expression *expression1,*expression2,*expression3;
{9 I5 D; D$ ~ s! ~4 `$ @9 x - expression1 = workPart->Expressions()->CreateSystemExpression(s_height1.str());
8 e! a2 t, b) z8 v- l& I - expression2 = workPart->Expressions()->CreateSystemExpression(s_length.str());3 T, w! D2 V! Z) j1 m6 H
- expression3 = workPart->Expressions()->CreateSystemExpression(s_height2.str());
v# y5 C+ f7 R' C7 C - ) Z0 l, k+ `+ H' X1 A2 k
- // line1 dimension ) C. y9 E& }) d1 l5 b" [
; s& s1 Z7 G: }1 J3 J- Sketch::DimensionGeometry dimLine1_startPoint;
- Z; J1 ~9 g% t2 F - dimLine1_startPoint.Geometry = line1;$ L% L B& t# q; C( ^
- dimLine1_startPoint.AssocType = Sketch::AssocTypeStartPoint;
p3 f% I6 b2 u& | - dimLine1_startPoint.AssocValue = 0;4 D% t u8 A5 `" I. `6 ]' r2 y
- dimLine1_startPoint.HelpPoint.X = 0.0;
; r, Q8 ]$ V2 B2 i+ g - dimLine1_startPoint.HelpPoint.Y = 0.0;
3 a* R# ]. ^* V6 Z8 d" W e - dimLine1_startPoint.HelpPoint.Z = 0.0;
2 |% C$ v4 M/ c! @% N: p. _ E - dimLine1_startPoint.View = nullNXObject;
6 r$ Q# N0 g8 ~8 w8 }8 J - : v5 [7 z: c; ]2 h% y3 q- P
- Sketch::DimensionGeometry dimLine1_endPoint;
h; t5 ?5 S( N - dimLine1_endPoint.Geometry = line1;: |. J+ Q5 y0 g3 g8 Q
- dimLine1_endPoint.AssocType = Sketch::AssocTypeEndPoint;. r! J7 l% v) G( I; W
- dimLine1_endPoint.AssocValue = 0;0 F$ a6 e/ O# ]0 z: c3 z
- dimLine1_endPoint.HelpPoint.X = 0.0;
- M/ f/ [' ]* Z* R- u. E6 s - dimLine1_endPoint.HelpPoint.Y = 0.0;
1 l5 l' \, C' `8 n$ g; m - dimLine1_endPoint.HelpPoint.Z = 0.0;7 I w5 R% H! l0 r: i
- dimLine1_endPoint.View = nullNXObject;7 m9 g1 g$ W) O
/ V5 w5 A6 ~5 |1 n/ T- Point3d dimOrigin1(-100, height1/2, 0.0);
8 q& q. o; P9 e) D - 7 Y \1 Y7 o$ k/ F6 Q- b6 b
- sketch1->CreateDimension(Sketch::ConstraintTypeParallelDim, dimLine1_startPoint, dimLine1_endPoint, dimOrigin1, expression1, Sketch::DimensionOptionCreateAsDriving);* v1 m [7 z: R; ~
- 8 M/ \9 H: e7 m- i2 Q$ ?) e4 |- ^# u
1 N! f8 ^# Y* U6 |-
( b+ l8 \4 J( h/ f9 N, k( t; j - // line2 dimension
# c; ], b5 O2 H; U7 U+ G! b
! P0 M0 h: N6 \+ _$ H8 h- Sketch::DimensionGeometry dimLine2_startPoint;
, a( H( M% K/ N/ S5 j- V# U7 R- w$ _0 I - dimLine2_startPoint.Geometry = line2;, ~- R& z6 G7 h; t6 E
- dimLine2_startPoint.AssocType = Sketch::AssocTypeStartPoint;& S! x3 E' R' s+ C: ]
- dimLine2_startPoint.AssocValue = 0;
5 N7 |; N' @! ] - dimLine2_startPoint.HelpPoint.X = 0.0;
7 W0 X d6 d* ?2 L+ { - dimLine2_startPoint.HelpPoint.Y = 0.0;9 Z' ]: o, u& ` U. Y2 ^
- dimLine2_startPoint.HelpPoint.Z = 0.0;
' h" Z- |" O6 ]% A- N# |- _! f - dimLine2_startPoint.View = nullNXObject;
- N. j4 i. C+ ~2 K/ `
; u7 @# D9 } q1 g0 G! o- Sketch::DimensionGeometry dimLine2_endPoint;
" p0 {1 M. |6 b0 B7 ?7 U1 M" Q/ q - dimLine2_endPoint.Geometry = line2;
2 G4 w. u- [3 b$ [+ }# Z - dimLine2_endPoint.AssocType = Sketch::AssocTypeEndPoint;3 O: C# \( v9 K# z0 d- e
- dimLine2_endPoint.AssocValue = 0;
+ `3 Z: p9 N! \1 Z G# f1 {2 `( o - dimLine2_endPoint.HelpPoint.X = 0.0;4 Z8 ]- ~# q* W) a# Q2 c- c3 r
- dimLine2_endPoint.HelpPoint.Y = 0.0;
2 I Y0 W) L4 e! S+ M - dimLine2_endPoint.HelpPoint.Z = 0.0;8 I. N5 _& y4 s) ]5 C
- dimLine2_endPoint.View = nullNXObject;
) N' S6 X- m; b5 D0 X8 a5 P
* H( H# L2 Y9 i6 V! [8 {- Point3d dimOrigin2(length /2,100 + height1, 0.0);
N, X7 B8 T4 n# k6 A9 j# {
8 b( ]/ I, w* S4 o) m( o$ \- sketch1->CreateDimension(Sketch::ConstraintTypeParallelDim, dimLine2_startPoint, dimLine2_endPoint, dimOrigin2, expression2, Sketch::DimensionOptionCreateAsDriving);. L" i9 H) a. o+ o7 Z
1 I. p# X* J% r/ N9 ^5 k* f6 @- 9 f, Q, a1 {1 ^+ u+ u" C( g8 r0 f4 c
- 5 I( E3 {- O, B6 H9 k! `
- // line3 dimension : A8 p' c1 j3 L2 V3 d8 n
( w4 A" F1 i4 T5 R$ J- Sketch::DimensionGeometry dimLine3_startPoint;
5 O: T" F. z2 Y, H) k - dimLine3_startPoint.Geometry = line3;; ~, U* Q. a7 F: t {" I7 T& A' \
- dimLine3_startPoint.AssocType = Sketch::AssocTypeStartPoint;) b. D8 C4 \! v0 c- Q; q
- dimLine3_startPoint.AssocValue = 0;
5 o. P: A% e: G8 Z - dimLine3_startPoint.HelpPoint.X = 0.0;
$ l' l; [2 r9 \: ^7 W - dimLine3_startPoint.HelpPoint.Y = 0.0;4 J9 Z2 |# S$ N7 e
- dimLine3_startPoint.HelpPoint.Z = 0.0;, O9 B" q; ^( m8 L) g
- dimLine3_startPoint.View = nullNXObject;/ f. w7 A! u% l5 F
- z$ `; ?# r) Z) s5 v, g
- Sketch::DimensionGeometry dimLine3_endPoint;" M+ `! P! \0 K4 P6 ]$ y1 a
- dimLine3_endPoint.Geometry = line3;+ i0 x, L+ F- j3 `6 N/ N5 O6 x
- dimLine3_endPoint.AssocType = Sketch::AssocTypeEndPoint;
: _/ c- @6 x/ i& B" `# B - dimLine3_endPoint.AssocValue = 0;
+ O2 V% R& l8 T' R( v - dimLine3_endPoint.HelpPoint.X = 0.0;5 k( k* S; A: h8 f0 }
- dimLine3_endPoint.HelpPoint.Y = 0.0;
" M: l) J, y8 [ - dimLine3_endPoint.HelpPoint.Z = 0.0;
& ~6 m; m- x# ?1 @4 @ - dimLine3_endPoint.View = nullNXObject;
0 v2 S0 W) [! D9 {
0 g. M* k7 Q/ l" p4 P3 Y- Point3d dimOrigin3( 100 + length, height1-height2+ height2 /2 , 0.0);
' |9 H3 k! `0 j; L -
$ u x" ~+ p( l( h9 i2 j - sketch1->CreateDimension(Sketch::ConstraintTypeParallelDim, dimLine3_startPoint, dimLine3_endPoint, dimOrigin3, expression3, Sketch::DimensionOptionCreateAsDriving);
" y( @0 X( L$ D2 _ A - ; L1 J3 m! D) t- I: w
- 6 J. v5 i3 k8 p/ }# ~
8 Y9 z7 E2 G8 K3 l! D: p- //5 update & deactive ^# _5 i V5 s& I4 t2 p) O
- sketch1->Update();
% P9 D' C3 k9 e+ ^4 U3 A) f+ W
, K- I$ z$ A5 p& J" y6 ?- sketch1->Deactivate(Sketch::ViewReorientFalse,Sketch::UpdateLevelModel);' M% \) l, e: K5 m+ y% B9 i
- * p% P! l. D# }) a# q3 e
- delete expression1;" J( U+ J! @# j7 s% T- N$ j4 q, j
- delete expression2;6 ?& N. X% E0 z) p! s+ l$ ?: Y
- delete expression3;
9 T6 c; R* G a2 U -
3 Y" F- j+ i m r3 Q( u - }
, U9 N# U( v+ q( y2 D6 r. k
复制代码
3 J$ h! T6 M( ]1 u& e) l& O4 {# [# G* p6 t% N; m
& [$ U2 A7 {; n# g
7 H$ G# Y6 { p
|
|