|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
PLM之家-NX9.0 二次开发实例视频31 NXOpen C++创建基本特征 <1>-草图的创建
: s' Y& H2 U6 P7 k* P0 O' ~内容:
$ _8 U2 j3 j( A5 R1 d: \, w" r: O. C草图作为参数化建模的基础,使用代码实现草图的创建过程,主要是对草图环境的初始化,以及草图约束的添加等问题。
) a) F3 F0 V6 J; ~# x目的:
6 W+ b1 R4 v5 G: ^- r% u0 n在NX中,使用NXOpen C++可以很方便的进行JA的录制,从而发掘草图约束中尺寸约束和几何约束的规律,通过这种方式,可以快速的完成开发。9 I/ o4 e8 z# ^/ r) o& @% H6 Z
NXOpen C++创建草图基本特征
( `5 ^; ~# Z: c/ U' G
31 NXOpen C++创建基本特征-草图的创建(1)项目介绍
9 u) } H' L$ D8 v% D; ]9 C 31 NXOpen C++创建基本特征-草图的创建(2)UI设计
- |( U% h; Q& ?& E 31 NXOpen C++创建基本特征-草图的创建(3)项目创建
2 B$ B3 g: p e' _2 G9 U. b2 G 31 NXOpen C++创建基本特征-草图的创建(4)草图特征创建
# \; C7 Z3 m7 c' | 31 NXOpen C++创建基本特征-草图的创建(5)添加几何到草图8 m2 d1 ?+ a m# y
31 NXOpen C++创建基本特征-草图的创建(6)添加草图几何约束
& D5 N. d% J f `, R 31 NXOpen C++创建基本特征-草图的创建(7)添加草图尺寸约束1 _; o# h/ _3 u
31 NXOpen C++创建基本特征-草图的创建(8)尺寸和UI关联# _ p* ^: z; r, M
( ]" |8 Q H( Q* G" e9 L/ D
8 O4 X7 n& ^2 T. D6 N9 X/ ^
: H1 _% o- z/ J7 p/ T
% N$ S" m% g0 [" j$ ~- G) E% y# ]9 h4 d( {% X
关键代码分享:! [0 d( i. U" g' i6 `. |7 Q+ `6 ]
, A( p' x3 \, ?8 ]7 ~% D
5 O; a) l# N+ p( K# U" a
, \* m% G8 ~& Z" ^5 j- void lesson31_createSkeTCh::createIPSketch()
, N9 I1 _5 z: b* h3 L; _' F - {
) q, z! _& C d0 O# t: R( M
$ H) d, z7 @. G6 I- Sketch *nullSketch(NULL);+ q% f/ v& [) O" R( e7 q/ k* a
- SketchInPlaceBuilder *sketchInPlaceBuilder1;" s+ G6 i6 ~# i9 Z/ L& j. D
- sketchInPlaceBuilder1 = workPart->Sketches()->CreateNewSketchInPlaceBuilder(nullSketch);* D, r8 @+ \9 e7 G% H. x
- sketchInPlaceBuilder1->SetPlaneOption(Sketch::PlaneOptionNewPlane);- Y/ k4 J( m6 z
- # }5 u5 _/ |- Y8 E( S# |4 l
- //sketchInPlaceBuilder1->Plane()->SetMethod(PlaneTypes::MethodTypeFixedZ);
3 X5 i' O' C, B+ f5 Y- h8 C - , _" W# ]/ U; L' U& x* N
- 4 t$ E& s0 Y* J( ^9 ~7 ]% a, K
- // add preference" _( J& ~. w4 L; R! R% ]& c
( j, f/ o$ K( X! n; Q# K- theSession->Preferences()->Sketch()->SetContinuousAutoDimensioning(false);& o- k9 F- L/ s: w+ ?7 Z' \0 a
- % m8 w- z+ B- t' v
- Drafting::PreferencesBuilder *preferencesBuilder1;3 B6 c9 n# q8 D! z* |' Z
- preferencesBuilder1 = workPart->SettingsManager()->CreatePreferencesBuilder();6 O+ s8 t* c/ K; J8 o5 F# x
- preferencesBuilder1->AnnotationStyle()->DimensionStyle()->SetAngularDimensionValuePrecision(3);
4 D( V; f: R+ a6 W1 S8 q( m, b - preferencesBuilder1->AnnotationStyle()->DimensionStyle()->SetDimensionValuePrecision(3);
2 a1 }" P3 C$ `0 H. T d4 N+ _ - preferencesBuilder1->Commit();
+ e1 O! l ?" ^% J" x* h
, R; v7 r" P' w. Z7 ~! q- preferencesBuilder1->Destroy();
3 w- X7 y8 e3 u) K7 G3 l* B& E$ ?
6 a; i. P7 T; z6 b# v& [0 x
) n& O8 t' \8 E9 }- NXObject *nXObject1;' s9 R/ `% M8 V$ n" E# X2 y# e
- nXObject1 = sketchInPlaceBuilder1->Commit();
. ~4 q4 x9 ] X E; b - % v6 O; {2 k0 ?: r! {
- Sketch *sketch1(dynamic_cast<Sketch *>(nXObject1));
, n1 z4 e0 u8 R" z; s( I - Features::Feature *feature1;( H( ^" N# f: s/ G$ L5 Q% I
- feature1 = sketch1->Feature();, ^+ x2 a: L9 M% Z
- feature1->SetName("XY-Plane-Sketch");
0 V3 G7 K+ |, D% H1 w$ a% R -
7 I8 H& [& G. g) F - sketchInPlaceBuilder1->Destroy();0 h" E( F* O. g% w6 b s
W; Z, t# i$ @% m6 L0 C- //1 active sketch $ h) I& c* @" R7 q
" l1 b/ d/ Y2 h3 I# k" E4 v- sketch1->Activate(Sketch::ViewReorientFalse);( @. v1 ~2 D* S" C
-
* U2 i9 z5 N5 X3 ~% K - double height1 = this->expressionHeight1->GetProperties()->GetDouble("Value");
/ b4 F* [, o$ ?; P - double height2 = this->expressionHeight2->GetProperties()->GetDouble("Value");, |# _, Q7 Z# e
- double length = this->expressionLength->GetProperties()->GetDouble("Value");
' C- S- x7 ~) ]; S4 \' \ - // 2.1 create geometry
3 Q% ^6 k1 r- |
1 W5 d6 C4 W3 e x6 ^- f- Point3d startPoint1(0.0, 0.0, 0.0);1 n. t& `5 b7 H
- Point3d endPoint1(0, height1, 0.0);
4 \) s7 n) F- D' L+ A6 z - Point3d endPoint2(length, height1, 0.0);8 G% Z, O: Q2 Y& v
- Point3d endPoint3(length, height1-height2, 0.0);
- ]1 I# ^% n1 V: ` - Point3d origin = sketch1->Origin();
h/ ]7 ?% G5 v1 w - Point *originPoint = workPart->Points()->CreatePoint(origin);
- n# k' G! U$ w! }2 `6 h, e - & O" q& Z% p" I- Y8 I8 g8 a
- Line *line1,*line2,*line3,*line4;
2 H/ S, U5 [, r3 Q2 M - line1 = workPart->Curves()->CreateLine(startPoint1, endPoint1);
6 I' i1 r9 o: R8 @' w+ c; G7 H - line2 = workPart->Curves()->CreateLine(endPoint1, endPoint2);' n. \2 z, y- }
- line3 = workPart->Curves()->CreateLine(endPoint2, endPoint3);
+ T$ B& K5 d) Q8 |6 }: r) w" i - line4 = workPart->Curves()->CreateLine(endPoint3, startPoint1);
" L# F& \2 X' K - // 2.2 add geometry
9 P9 n) j( x! q+ o - % j0 l/ a2 e. g- A
- sketch1->AddGeometry(line1,Sketch::InferConstraintsOptionInferCoincidentConstraints);
1 i4 n! m' k$ T) y2 S - sketch1->AddGeometry(line2,Sketch::InferConstraintsOptionInferCoincidentConstraints);8 E) }3 A' Q* W8 D6 h
- sketch1->AddGeometry(line3,Sketch::InferConstraintsOptionInferCoincidentConstraints);; X9 i0 j y( z
- sketch1->AddGeometry(line4,Sketch::InferConstraintsOptionInferCoincidentConstraints);. j3 v. ~. w! ^: t0 n& |
8 L% {, `& `- `) i- //3 add constraints ( gemo)
) d6 C& D, {- |% g0 V' I& R2 Z, C
! P$ ^. t: E+ x0 [8 }- Sketch::ConstraintGeometry geomline1;+ c; s9 b8 B1 u9 d! [; g
- geomline1.Geometry = line1;
/ {: |7 ~- b' {0 R - geomline1.PointType = Sketch::ConstraintPointTypeNone;/ M2 e* e3 w( t. i1 ]) T
- geomline1.SplineDefiningPointIndex = 0;6 l. R) {$ \) N% z" B
- sketch1->CreateVerticalConstraint(geomline1);9 e. T8 Z6 n7 _
* y; H) @6 P( t( q( O- {- Sketch::ConstraintGeometry geomline2;: r, |& t8 H2 G) O5 ^2 ^0 G
- geomline2.Geometry = line2;, m0 E. X6 Y! ?1 {
- geomline2.PointType = Sketch::ConstraintPointTypeNone;7 ]0 V- m# w8 M# z7 ^
- geomline2.SplineDefiningPointIndex = 0;
6 f9 d4 o$ |7 S- _ - sketch1->CreateHorizontalConstraint(geomline2);3 T$ ^, L/ J" X) I r6 ]/ A1 }/ B& ?
4 n& ] ]" Z( N/ Y- Sketch::ConstraintGeometry geomline3;3 s1 B7 J+ I9 @9 N0 D6 T
- geomline3.Geometry = line3;
: } b; Q- w$ q* h- z0 A# p6 v: J' Z - geomline3.PointType = Sketch::ConstraintPointTypeNone;
, N9 w* {0 _' N/ u& R/ V! O9 A - geomline3.SplineDefiningPointIndex = 0;
$ q+ N9 h% R& ?: [ - sketch1->CreateVerticalConstraint(geomline3);
3 z6 j# Q% P+ s - ; b9 E3 _* }% | f' Q
- Sketch::ConstraintGeometry geomline1_startPoint;, ?7 K. q* t$ w6 D1 ~4 z+ M; b
- geomline1_startPoint.Geometry = line1;
3 C ]5 l) M; V# m; ?* U) k+ {# g* _ - geomline1_startPoint.PointType = Sketch::ConstraintPointTypeStartVertex;+ R8 Y4 F/ z) g
- geomline1.SplineDefiningPointIndex = 0;
# ?$ K/ r a4 q% f8 ` - Sketch::ConstraintGeometry geomline2_originPoint;4 C, X Z8 r4 |
- geomline2_originPoint.Geometry = originPoint;5 F" f5 g4 }( d0 c z
- geomline2_originPoint.PointType = Sketch::ConstraintPointTypeNone;
0 s* A6 w h0 Z- t6 ?+ o - geomline2_originPoint.SplineDefiningPointIndex = 0;" ]0 v3 {$ w2 w0 q- U& N" _' X
- sketch1->CreateCoincidentConstraint(geomline1_startPoint,geomline2_originPoint);
1 X' g: m. V' L# L( p - F3 Q( K3 k$ p3 K; {! D
- //4 add constraints (dimension)
% d$ k+ u8 r0 f& \6 q
; J6 Y6 f5 s( k# m" `/ L9 b5 Z- NXObject *nullNXObject(NULL);+ m- q3 q) j0 J. Q
- ; i; T4 ]) j6 n. Y+ ?
: N( p1 }- c8 i; ?2 n- stringstream s_height1,s_height2,s_length;2 T7 M. ]; l5 ]9 ]/ {, O* F4 X" I
- s_height1 <<height1;
! I& R1 m. o9 c q4 t: m - s_height2 <<height2;
% K+ N! M/ A- D& K - s_length <<length;& g4 j g3 Y; Y
- 6 Z1 r$ v6 P. V* Q1 U M
- Expression *expression1,*expression2,*expression3;' J: ~; T9 W/ ?: G
- expression1 = workPart->Expressions()->CreateSystemExpression(s_height1.str());
! M# T, o( P6 J' T7 s6 e0 v2 _ - expression2 = workPart->Expressions()->CreateSystemExpression(s_length.str());
, q) l9 W: ]; C- k8 {2 [1 v) ] - expression3 = workPart->Expressions()->CreateSystemExpression(s_height2.str());
5 E2 i; z; k t% f: ?2 J( w
: k2 U; [. m- [% h+ Y0 H- // line1 dimension
0 H* o1 r& w6 A9 _* } - 4 Z, S7 F3 v. T B0 k
- Sketch::DimensionGeometry dimLine1_startPoint;
5 Y. m! f; o V% x( _ - dimLine1_startPoint.Geometry = line1;
7 I" U$ y# }( N6 M$ l0 q* R2 R - dimLine1_startPoint.AssocType = Sketch::AssocTypeStartPoint;, O, m- x4 Q/ w# w4 K& l# O) f
- dimLine1_startPoint.AssocValue = 0; o3 M/ \1 l$ _8 B
- dimLine1_startPoint.HelpPoint.X = 0.0;, l+ o. ^1 W P, C* G. T3 s8 s% q
- dimLine1_startPoint.HelpPoint.Y = 0.0;
' o5 _0 n) F. `1 k3 C- W/ M1 T - dimLine1_startPoint.HelpPoint.Z = 0.0;
9 J% z( c6 ]9 _& @/ M1 h - dimLine1_startPoint.View = nullNXObject;
3 i/ m3 _9 l0 v+ l! ^3 U$ Q4 M
m8 a& ~5 t; G$ e3 D. w, S2 R- Sketch::DimensionGeometry dimLine1_endPoint;/ s1 I3 _4 J/ `5 R0 Z
- dimLine1_endPoint.Geometry = line1;+ B" r2 w+ B) M# y9 l( N: H
- dimLine1_endPoint.AssocType = Sketch::AssocTypeEndPoint;
. O- v" Z# W' [2 o5 x - dimLine1_endPoint.AssocValue = 0;
! ]! p( ]# ^# I2 K+ L - dimLine1_endPoint.HelpPoint.X = 0.0;
6 h1 \; {9 x5 G" s# ? - dimLine1_endPoint.HelpPoint.Y = 0.0;0 t: ?- c# {& Y2 n( o/ O; t$ \
- dimLine1_endPoint.HelpPoint.Z = 0.0;+ F4 d2 |4 o; K0 @# \2 L+ m
- dimLine1_endPoint.View = nullNXObject;
/ w; p- v4 Z3 I" P" m. L/ J
1 N! C" ?& I, s7 K1 n: b+ E5 z9 \- Point3d dimOrigin1(-100, height1/2, 0.0);
* {" a" f- C. G' k" K x0 J
( G+ l5 T: y! S8 K8 a- sketch1->CreateDimension(Sketch::ConstraintTypeParallelDim, dimLine1_startPoint, dimLine1_endPoint, dimOrigin1, expression1, Sketch::DimensionOptionCreateAsDriving);
7 Q; I7 s! A" l( S5 r
5 z% R- m+ F$ ]2 S8 K* g
+ F9 a. e7 `9 u7 e7 j' y1 f4 L-
& y0 _( L" X3 F* z4 y - // line2 dimension
/ Q2 {; }1 e4 M0 k3 Z5 a$ k% L
9 R `8 P: p. v- Sketch::DimensionGeometry dimLine2_startPoint;9 {1 W- X# w7 s( i1 R# K- C/ R2 \
- dimLine2_startPoint.Geometry = line2;; I I7 `- S- a9 l
- dimLine2_startPoint.AssocType = Sketch::AssocTypeStartPoint;, G+ f4 z8 q# |9 f6 g/ L
- dimLine2_startPoint.AssocValue = 0;, Z5 x. v" S' X: o
- dimLine2_startPoint.HelpPoint.X = 0.0;& z) w; B1 c1 a' Q
- dimLine2_startPoint.HelpPoint.Y = 0.0;* L& z( P+ L$ v8 c
- dimLine2_startPoint.HelpPoint.Z = 0.0;
: J T {; g+ R8 U" H - dimLine2_startPoint.View = nullNXObject;
- g6 z7 |' p3 N' A - & @; ]% m' U' V8 Y7 j- V
- Sketch::DimensionGeometry dimLine2_endPoint;
7 b- {; }" x7 e0 | - dimLine2_endPoint.Geometry = line2;% n5 E7 x( q: V' J" C v6 V; K! U
- dimLine2_endPoint.AssocType = Sketch::AssocTypeEndPoint;
9 M: C3 O7 ^' q$ M5 A) M5 U/ }, D - dimLine2_endPoint.AssocValue = 0;
% }1 W- p% x7 q& Q, H - dimLine2_endPoint.HelpPoint.X = 0.0;: ?: J+ L3 X3 s
- dimLine2_endPoint.HelpPoint.Y = 0.0;+ y+ J/ o! y, N$ w. e
- dimLine2_endPoint.HelpPoint.Z = 0.0;( _$ M5 J6 |1 T3 M0 G7 f; U
- dimLine2_endPoint.View = nullNXObject;
; m3 J' @( t2 z. L; @# V- Y - / P+ @) u( v0 P
- Point3d dimOrigin2(length /2,100 + height1, 0.0);' s( u% L0 A7 O6 C$ N. x
' p! X N/ n6 g* s# c' o- sketch1->CreateDimension(Sketch::ConstraintTypeParallelDim, dimLine2_startPoint, dimLine2_endPoint, dimOrigin2, expression2, Sketch::DimensionOptionCreateAsDriving);
8 F- g" y Z8 _) \+ a$ c" m/ Q. q
: X3 l" Z' K- E4 J7 x
6 V8 t. w7 T! g1 l- ; B4 Q( ^2 f# I
- // line3 dimension
; |: v/ d% Q/ h2 V& P
. |& J1 M/ ?+ h- Q- Sketch::DimensionGeometry dimLine3_startPoint;
: X7 ?: d; Z) Q- }% C- g - dimLine3_startPoint.Geometry = line3;* I( e/ a% G; G2 Z0 c
- dimLine3_startPoint.AssocType = Sketch::AssocTypeStartPoint;
- T& g4 C: o% U8 h8 g$ ^; ]* A - dimLine3_startPoint.AssocValue = 0;
; J0 K- ]$ `3 l8 k - dimLine3_startPoint.HelpPoint.X = 0.0;8 y6 L7 ~4 L9 i( t6 P
- dimLine3_startPoint.HelpPoint.Y = 0.0;
( e8 m& C l8 B" S - dimLine3_startPoint.HelpPoint.Z = 0.0;
7 H$ M3 }* D1 D% G0 W# S+ [ - dimLine3_startPoint.View = nullNXObject;
9 F6 G" T" K0 W! W2 p& k4 {' s
8 G& ^8 |! k7 r0 r# F# t% W- Sketch::DimensionGeometry dimLine3_endPoint;5 S0 z3 ]+ M5 p5 P4 w
- dimLine3_endPoint.Geometry = line3;
. s3 S! h( |; p/ X$ t - dimLine3_endPoint.AssocType = Sketch::AssocTypeEndPoint;
+ k% G. i* s5 h- l( { Z - dimLine3_endPoint.AssocValue = 0;4 @: D9 D" Q7 J9 o% {# O) }: ^
- dimLine3_endPoint.HelpPoint.X = 0.0;
" a$ l3 _) | Z3 \2 N: \7 b - dimLine3_endPoint.HelpPoint.Y = 0.0;
( n7 o4 _% D+ m+ X - dimLine3_endPoint.HelpPoint.Z = 0.0;
7 n! i* ?, Z! v - dimLine3_endPoint.View = nullNXObject;0 c* A3 T# P, Z* T H
- l( z0 l" k+ T/ `0 z1 w# \" k- Point3d dimOrigin3( 100 + length, height1-height2+ height2 /2 , 0.0);8 r5 a4 W P/ d, n! s/ d% M: o
- # `+ W6 b4 }3 R! X% J* P- k$ {
- sketch1->CreateDimension(Sketch::ConstraintTypeParallelDim, dimLine3_startPoint, dimLine3_endPoint, dimOrigin3, expression3, Sketch::DimensionOptionCreateAsDriving);
+ o! C- r* j; f0 l
3 `* B% s2 A4 P2 r9 b
5 k0 d5 d/ N; O8 t1 `! c8 Y- 1 _4 o1 F2 r" w5 `4 @, k2 Z1 K8 I
- //5 update & deactive
1 a& m# Q, _( V% h' n( g - sketch1->Update();1 N+ z8 |% F1 k1 q7 }8 h) ~
- 2 i+ C R! \6 c6 r, Q, Z/ ^
- sketch1->Deactivate(Sketch::ViewReorientFalse,Sketch::UpdateLevelModel);6 Q" }; K: i# F8 R
1 e0 I- Z8 G9 y G. S2 t- delete expression1;. ?, E. A' Q8 A& H% z
- delete expression2;( g0 N- t- V+ e7 ~- I% Z) S
- delete expression3;6 t0 p) w t& z8 Y+ ]' s
-
; `/ @+ D4 K0 N) B% D# l+ [2 V; j - }+ \0 c4 a; I8 q
复制代码
; Y) x) l( O# _, F- Y" P6 y& U/ |! `9 j% }
; z# u2 Z" R# k6 r+ `/ G: |0 k* z
|
|