|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
PLM之家-NX9.0 二次开发实例视频31 NXOpen C++创建基本特征 <1>-草图的创建
* Q' K: C, i+ w, w& i5 T. b内容:$ ]2 J P, h, F' A4 N$ c; z
草图作为参数化建模的基础,使用代码实现草图的创建过程,主要是对草图环境的初始化,以及草图约束的添加等问题。
+ u- f% r/ V' e! }, K: F4 V目的:
2 L" J4 l( r, t# S; W9 N$ l在NX中,使用NXOpen C++可以很方便的进行JA的录制,从而发掘草图约束中尺寸约束和几何约束的规律,通过这种方式,可以快速的完成开发。. R4 c5 T D x7 b
NXOpen C++创建草图基本特征
; Q# J) T# g) h8 a 31 NXOpen C++创建基本特征-草图的创建(1)项目介绍
6 ?, g6 K* P- N/ p! D 31 NXOpen C++创建基本特征-草图的创建(2)UI设计1 d3 ~, @' G& m5 B- _0 h
31 NXOpen C++创建基本特征-草图的创建(3)项目创建% Q& ~$ g% ^6 ]
31 NXOpen C++创建基本特征-草图的创建(4)草图特征创建" ~9 L- j( i' B6 N0 ~3 e& l
31 NXOpen C++创建基本特征-草图的创建(5)添加几何到草图
Q- ^, ^& |) G- z% l 31 NXOpen C++创建基本特征-草图的创建(6)添加草图几何约束! R5 d3 G: O9 ]! t
31 NXOpen C++创建基本特征-草图的创建(7)添加草图尺寸约束, Q3 g: `+ s- `# b9 R
31 NXOpen C++创建基本特征-草图的创建(8)尺寸和UI关联( ?8 p( U( x4 t$ m/ _7 m& M
( ^8 P, @ @7 j0 @3 o8 X% F$ F( G, | V1 h* x$ q
8 U2 j2 H {! W6 Z$ b7 |& C( |; Z6 \# @! i) m8 n
1 ~- R! D& R; ^; ^9 p( ]关键代码分享:
# h! x7 C# M$ e% v0 l- D# ?5 M% V1 N m O- d4 T$ ~% P
& X* z& u8 O' B3 n" D
9 j! w' y8 o& j- r G& b- void lesson31_createSkeTCh::createIPSketch()
( w3 I. |# B; q+ }9 w - {
/ H! K& U! U; z. I - : ]. N2 C) a5 `1 P( r/ B
- Sketch *nullSketch(NULL);
- a* z- ^! C. q. Q6 A - SketchInPlaceBuilder *sketchInPlaceBuilder1;
5 p* ^+ o4 m( L - sketchInPlaceBuilder1 = workPart->Sketches()->CreateNewSketchInPlaceBuilder(nullSketch);
0 X C1 x% x; S3 g/ }1 x9 o - sketchInPlaceBuilder1->SetPlaneOption(Sketch::PlaneOptionNewPlane);
9 p6 a7 R1 e- b; ?( O
) N2 H# G* p& Z2 { f- //sketchInPlaceBuilder1->Plane()->SetMethod(PlaneTypes::MethodTypeFixedZ);& \$ S! F+ O% |3 k$ b
( |4 ~: S. K& q Q' j$ q/ _- Y- ' \+ u. c' Z, _/ A& @
- // add preference" x7 Z2 p$ D# Z9 z. l# \
- ; M7 F7 b. ]+ A0 j. P
- theSession->Preferences()->Sketch()->SetContinuousAutoDimensioning(false); _2 x/ v& I* x$ K! O
3 J% e0 [# R3 r' m& R- Drafting::PreferencesBuilder *preferencesBuilder1;
5 h4 ^$ [' ^8 m3 [ - preferencesBuilder1 = workPart->SettingsManager()->CreatePreferencesBuilder();
( s& q- F& I& A$ Q7 M - preferencesBuilder1->AnnotationStyle()->DimensionStyle()->SetAngularDimensionValuePrecision(3);
5 X! } ?- m1 x) `( ?& e - preferencesBuilder1->AnnotationStyle()->DimensionStyle()->SetDimensionValuePrecision(3);% t, x5 B% C& Q6 q# B% c" ?5 F
- preferencesBuilder1->Commit();
1 `2 J) t3 n+ }6 a - / H3 Y1 G3 C) F' l" p
- preferencesBuilder1->Destroy();+ Z+ r) [" a: N2 \, S2 h
! g E! E/ G$ X/ W* u- # t2 a5 V! ?2 e( ^+ B; o7 R
- NXObject *nXObject1;
. \, ^, D2 W, V8 s - nXObject1 = sketchInPlaceBuilder1->Commit();) g+ J7 s/ }1 S' X, |
, l4 B7 @- v( z$ _1 U3 p- Sketch *sketch1(dynamic_cast<Sketch *>(nXObject1));5 I* H* t* a. w* N
- Features::Feature *feature1;* ]$ b i$ d) K+ r& J
- feature1 = sketch1->Feature();
0 i( J0 Z. t# s7 P% ]& k2 Z - feature1->SetName("XY-Plane-Sketch");
% x' u. K* q' ] L -
2 n- ]$ @- ?. n1 r0 u: L - sketchInPlaceBuilder1->Destroy();% B+ ^# I& X0 p. k+ d+ h
- 1 T$ b: L& q6 H" Z- E3 J; e1 I, g+ T2 L
- //1 active sketch
6 p4 P# i+ Z$ b$ S! m/ d - % Z' i" L! W0 h/ I7 \6 O
- sketch1->Activate(Sketch::ViewReorientFalse);: d: ? ~. r# j/ \9 q+ g
- ) N3 h6 i1 D: x, Y4 r, g" T, C
- double height1 = this->expressionHeight1->GetProperties()->GetDouble("Value");
1 r: n, B, Y. g( O1 n! D8 o - double height2 = this->expressionHeight2->GetProperties()->GetDouble("Value");) ?7 S% D- Q9 A" F
- double length = this->expressionLength->GetProperties()->GetDouble("Value");' _; W- o! {8 T+ c2 W
- // 2.1 create geometry
* \' I$ Z: J0 `. X
- z4 o- A. D( O0 @9 p- Point3d startPoint1(0.0, 0.0, 0.0);
9 D5 A6 B* h" h# ] - Point3d endPoint1(0, height1, 0.0);, P( ~# K! u/ _
- Point3d endPoint2(length, height1, 0.0);* {/ J, S; \6 }6 A' d! W
- Point3d endPoint3(length, height1-height2, 0.0);
& g5 d2 _# [. }0 D - Point3d origin = sketch1->Origin();
! |* ^0 P" ?. ^8 ] @ - Point *originPoint = workPart->Points()->CreatePoint(origin);
8 C2 O, M3 Y1 a2 G; { - , H$ d# p. h( K0 \/ E
- Line *line1,*line2,*line3,*line4;# b( r2 N* w/ v6 |. C9 u
- line1 = workPart->Curves()->CreateLine(startPoint1, endPoint1);
% O8 b' p' w$ U+ } - line2 = workPart->Curves()->CreateLine(endPoint1, endPoint2);& G" {7 b4 E t' u& v# f" X0 J5 J
- line3 = workPart->Curves()->CreateLine(endPoint2, endPoint3);! Q$ c, T# O' z- Q3 E
- line4 = workPart->Curves()->CreateLine(endPoint3, startPoint1);3 v3 I& W* B! l7 ~9 b: L9 ]
- // 2.2 add geometry% i: {' h# l7 h5 @: y# n! Y
- 7 j t- v2 Y1 \6 O
- sketch1->AddGeometry(line1,Sketch::InferConstraintsOptionInferCoincidentConstraints);- W/ {2 p4 n$ |0 D
- sketch1->AddGeometry(line2,Sketch::InferConstraintsOptionInferCoincidentConstraints);
3 ^0 d' l3 B6 _, d - sketch1->AddGeometry(line3,Sketch::InferConstraintsOptionInferCoincidentConstraints);4 D: H* x% I- Q) h! W: A, o
- sketch1->AddGeometry(line4,Sketch::InferConstraintsOptionInferCoincidentConstraints);
, d- B1 p+ }! @% D& \6 s - , ]- w8 O v& O$ F
- //3 add constraints ( gemo)) Y, D+ v2 ?* r) K6 z) u2 ]
* P. `- J. u0 d6 y7 h( ~* `- Sketch::ConstraintGeometry geomline1;- R2 \/ J3 C( t/ c$ _* @
- geomline1.Geometry = line1;
: i, F1 _$ K% I) l5 s - geomline1.PointType = Sketch::ConstraintPointTypeNone;
2 T0 T/ [* R% W a& W* S# C0 F - geomline1.SplineDefiningPointIndex = 0;
/ u) V7 I. J4 e0 m1 W! J O& Y - sketch1->CreateVerticalConstraint(geomline1);
' u2 a8 h( J" l/ P, w- G% E
, t! W7 B. u: U; \- g, D- Sketch::ConstraintGeometry geomline2;
( n4 V/ m1 b% n+ N# }& B1 a - geomline2.Geometry = line2;
9 c4 X' V: y5 W1 @! [ - geomline2.PointType = Sketch::ConstraintPointTypeNone;
# F" i7 l' j1 H/ i9 n. G - geomline2.SplineDefiningPointIndex = 0;
, c" ?: {0 x; j- n- ~ - sketch1->CreateHorizontalConstraint(geomline2);% `9 K0 s, s4 E) I- B; ?, N
: Y4 N2 S M0 a l: ?. J- Sketch::ConstraintGeometry geomline3;4 j3 N' ^. Z, O5 r# x2 l) L+ Z
- geomline3.Geometry = line3;
3 n; q6 m$ H E7 s3 M9 r6 r) ^ - geomline3.PointType = Sketch::ConstraintPointTypeNone;+ Q6 ]1 C N$ z0 ]! d/ D
- geomline3.SplineDefiningPointIndex = 0;
% b. E; C. Q# d, b - sketch1->CreateVerticalConstraint(geomline3);
8 D; i1 ?& P) L7 I - , K1 m% o' [" S! ^, j4 i% }
- Sketch::ConstraintGeometry geomline1_startPoint;$ C# w2 Q: I" j* ?6 a4 n
- geomline1_startPoint.Geometry = line1;, u6 M6 N& j* h) i2 _' n8 X% _8 X- k
- geomline1_startPoint.PointType = Sketch::ConstraintPointTypeStartVertex;
$ G. j- ~: O8 X0 U - geomline1.SplineDefiningPointIndex = 0;6 z$ [1 N, M: E- C4 z
- Sketch::ConstraintGeometry geomline2_originPoint;
2 A! u* B; r3 O! q0 [6 A3 N1 ]8 B - geomline2_originPoint.Geometry = originPoint;
: w) a+ S3 t! ^8 J5 R" l - geomline2_originPoint.PointType = Sketch::ConstraintPointTypeNone;' V1 R3 }0 ^. V, c ~6 w
- geomline2_originPoint.SplineDefiningPointIndex = 0;4 l |) ^" t* Q
- sketch1->CreateCoincidentConstraint(geomline1_startPoint,geomline2_originPoint);3 O( x: X- v9 `# C p3 f ~
- 5 u) ]' Q. R' g: O) ^+ }, v
- //4 add constraints (dimension)0 G/ g6 d# d4 N O
7 \$ V+ P9 [+ m- NXObject *nullNXObject(NULL);
7 }& B* u( C1 e: F! H$ X) Y
& w; W( G, S$ B9 F/ c
( c+ t; |4 ~# c" R& b+ Y/ L- stringstream s_height1,s_height2,s_length;
, D, l$ b: D8 v; w" z - s_height1 <<height1;
( [- [1 d* V+ v3 H- l - s_height2 <<height2;
! M; A- v9 M+ G/ t r$ X - s_length <<length;
- u; I1 {; |0 z3 U3 O, _; K - 4 ]9 R- ~+ v6 a7 K5 j
- Expression *expression1,*expression2,*expression3;
! X. A+ }) _/ F" R$ E( L+ { - expression1 = workPart->Expressions()->CreateSystemExpression(s_height1.str());
7 k z+ l- y% C" h# c! @- K1 X0 O - expression2 = workPart->Expressions()->CreateSystemExpression(s_length.str());
7 g1 [, R/ c; f- @; [* Y5 o - expression3 = workPart->Expressions()->CreateSystemExpression(s_height2.str());
7 u/ p. D( c8 |4 p/ B
2 W% }" a/ D( W, Q2 w; \- // line1 dimension $ \: U$ F$ D& ~6 E$ p
1 T5 K% ]( K6 m' ]0 v- Sketch::DimensionGeometry dimLine1_startPoint;- ^% c: J4 o* u/ D1 H& T1 r
- dimLine1_startPoint.Geometry = line1;9 ~- ~; n/ }/ k
- dimLine1_startPoint.AssocType = Sketch::AssocTypeStartPoint;. |) z2 C' O& \/ A. h' p
- dimLine1_startPoint.AssocValue = 0;( m; _" r5 K% b$ S
- dimLine1_startPoint.HelpPoint.X = 0.0;
/ W% s" ^/ K2 j5 R: i - dimLine1_startPoint.HelpPoint.Y = 0.0;
& q) }1 ?' a2 S% s( W - dimLine1_startPoint.HelpPoint.Z = 0.0;9 f# e6 ?$ d' u" R9 B, w) N
- dimLine1_startPoint.View = nullNXObject;: y1 K" R0 O8 u, b4 w
& p/ F2 z/ W) x# A4 j; K/ a- Sketch::DimensionGeometry dimLine1_endPoint; W( M3 y0 W9 Z* Z% `
- dimLine1_endPoint.Geometry = line1;/ m( M# w, h6 o
- dimLine1_endPoint.AssocType = Sketch::AssocTypeEndPoint;
: `* t; t" b) u0 a0 \) E+ S5 H& Z$ ]. s - dimLine1_endPoint.AssocValue = 0;1 |* K4 N" k) L9 n2 ]; M
- dimLine1_endPoint.HelpPoint.X = 0.0;
+ a' T2 R" Q! f! W& ]3 j - dimLine1_endPoint.HelpPoint.Y = 0.0;& ], `& e8 @+ A$ {" I, t
- dimLine1_endPoint.HelpPoint.Z = 0.0;- q' _& a) \# d) i2 b6 C3 L
- dimLine1_endPoint.View = nullNXObject;5 E M9 }& l, I" m- r7 H9 R+ U
- \) a3 G* H4 l/ K- Point3d dimOrigin1(-100, height1/2, 0.0);
- \( H; M$ N* m9 G7 {( C8 c
6 M) N# J" }1 K4 _% y- sketch1->CreateDimension(Sketch::ConstraintTypeParallelDim, dimLine1_startPoint, dimLine1_endPoint, dimOrigin1, expression1, Sketch::DimensionOptionCreateAsDriving);
& ]4 N3 E3 ^. a" `0 g/ X# \ - . S( ^" L" A; S, X8 f& n7 d1 u4 z
- ' n; D7 O* y& `5 A) {0 T' d
-
& V% x* N6 H; Y8 ~ - // line2 dimension # l4 @2 R. H* Y( y. L* L
- 2 s% a2 o& g# k" V' W) o' q% q4 [% a
- Sketch::DimensionGeometry dimLine2_startPoint;
& j! b& W3 w& X3 y* t4 C. |1 ?3 r1 Y2 O - dimLine2_startPoint.Geometry = line2;
! n0 N! _, P* e2 U: R# ^; H - dimLine2_startPoint.AssocType = Sketch::AssocTypeStartPoint;! T( g& f$ a* K% w9 y% k
- dimLine2_startPoint.AssocValue = 0;# j) E9 f8 c% t h
- dimLine2_startPoint.HelpPoint.X = 0.0;
! W. f4 S) |$ ?1 ^0 a - dimLine2_startPoint.HelpPoint.Y = 0.0;' k: s& b7 I0 |3 M# Q+ H( {8 [
- dimLine2_startPoint.HelpPoint.Z = 0.0;
, U+ \: | Q8 m4 E' q( f; P' N - dimLine2_startPoint.View = nullNXObject;
, X1 G# o& H) l - + f; V% v6 O8 D# M* X2 q8 n! X
- Sketch::DimensionGeometry dimLine2_endPoint;& ^. z! x+ _& Y7 G% Z6 @1 X
- dimLine2_endPoint.Geometry = line2;6 j( ^: V- y: A: J! C( E+ c
- dimLine2_endPoint.AssocType = Sketch::AssocTypeEndPoint;$ d; V" I* I9 m7 P3 W- s. I1 E
- dimLine2_endPoint.AssocValue = 0;
# c8 T5 N5 ?$ p! t1 h6 b - dimLine2_endPoint.HelpPoint.X = 0.0;
0 b" V, @2 q! j; m9 R - dimLine2_endPoint.HelpPoint.Y = 0.0;; Q5 B Q3 V) \) Q4 @- \/ T y2 T
- dimLine2_endPoint.HelpPoint.Z = 0.0;$ {" k$ v w5 X y1 L! H
- dimLine2_endPoint.View = nullNXObject;
5 B) m2 o3 x6 Z
1 E6 K" y+ E" w1 h( R( k- Point3d dimOrigin2(length /2,100 + height1, 0.0);, k8 ^, K3 C9 D
4 u b- u0 W6 o- sketch1->CreateDimension(Sketch::ConstraintTypeParallelDim, dimLine2_startPoint, dimLine2_endPoint, dimOrigin2, expression2, Sketch::DimensionOptionCreateAsDriving);
$ K+ O4 T# v `: b/ s: ^
& r# Q. k2 H# J( {9 \3 W! y+ T- 2 L, k2 q% T3 J/ ^3 {' a2 _; @
- + X2 @3 i4 f( h" G
- // line3 dimension . r3 t: L& c" ^' p
1 c- u( }/ F* D( ]1 f! k d! r- Sketch::DimensionGeometry dimLine3_startPoint;
2 v* K6 z& y# Z8 Z, @ - dimLine3_startPoint.Geometry = line3;: a+ {) J) R3 O- W% ^$ A& r8 }/ J7 q
- dimLine3_startPoint.AssocType = Sketch::AssocTypeStartPoint;8 i4 c3 {' {$ Y* e) x& c4 |
- dimLine3_startPoint.AssocValue = 0;
8 C$ C+ x" W& i2 [# G0 O - dimLine3_startPoint.HelpPoint.X = 0.0;5 X3 I6 S- {. k i: H6 p! ]
- dimLine3_startPoint.HelpPoint.Y = 0.0;
" ~5 Y+ l/ F9 t( G4 p6 {/ @ - dimLine3_startPoint.HelpPoint.Z = 0.0;
1 V0 c0 r7 x3 H7 m - dimLine3_startPoint.View = nullNXObject;
0 `% `& y% V {, G - - }0 Y4 E: ?& f; ?
- Sketch::DimensionGeometry dimLine3_endPoint;
$ e, r, U; C) k. E% K - dimLine3_endPoint.Geometry = line3;, w; P8 o) {5 I I. M/ x. D
- dimLine3_endPoint.AssocType = Sketch::AssocTypeEndPoint;
# U+ b+ `( J& D5 W - dimLine3_endPoint.AssocValue = 0;$ r) e3 l7 L2 F
- dimLine3_endPoint.HelpPoint.X = 0.0;7 G, n& j! g6 R+ e# _& P
- dimLine3_endPoint.HelpPoint.Y = 0.0;
! R% s! F# h4 g8 Y* T, D. o% n6 ~ - dimLine3_endPoint.HelpPoint.Z = 0.0;
" i$ E' Y: I5 i7 t6 u - dimLine3_endPoint.View = nullNXObject;* ]) e" {3 b! ?6 n5 f
- 6 l% R6 Z; I9 Y9 W/ l, T$ {4 H$ b
- Point3d dimOrigin3( 100 + length, height1-height2+ height2 /2 , 0.0);
[% g0 W4 j% f3 Z, Y! G - , l$ A5 P/ n) ?' e
- sketch1->CreateDimension(Sketch::ConstraintTypeParallelDim, dimLine3_startPoint, dimLine3_endPoint, dimOrigin3, expression3, Sketch::DimensionOptionCreateAsDriving);7 L/ M& c Q' k4 J# ^
- # m# d$ H7 {5 h* J
& w) Z, U- p' K0 K/ j9 d- {- 4 ~6 m8 n5 Q! `* ^
- //5 update & deactive
" ^, S0 E* a; u) A. U - sketch1->Update();4 _( q1 S6 }. w" B
' r \% a/ [, J8 ?' V" x# r% ?- sketch1->Deactivate(Sketch::ViewReorientFalse,Sketch::UpdateLevelModel);. q1 C0 G; d7 Q/ k1 _6 p9 q
$ H' V4 b5 |) ]; A- delete expression1;. b" }7 T X" [& b/ M
- delete expression2;6 p) [8 U3 w+ O9 }4 Z
- delete expression3;3 K4 O) ^) v* o3 N6 X
-
3 ^" U% j& n- T4 k' q" V8 J$ C - }5 w; |" s; y9 s4 g) x" a; i7 P, F- c( s; ?
复制代码 9 I: d1 P7 S& n, K7 m. c
4 ]6 V1 L( Q& ?0 e
7 m3 }) x/ U. _. w/ k" @
' @$ y! w/ F, n9 r& H
|
|