|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
PLM之家-NX9.0 二次开发实例视频31 NXOpen C++创建基本特征 <1>-草图的创建/ t) G* B8 @8 ^& V8 X/ F5 _& n- X
内容:: E1 @3 z6 A& g# B: [- A4 o& a
草图作为参数化建模的基础,使用代码实现草图的创建过程,主要是对草图环境的初始化,以及草图约束的添加等问题。
# Q$ t- i, B/ h" g目的:# C) J& }9 E! y; u) r$ r. q' b
在NX中,使用NXOpen C++可以很方便的进行JA的录制,从而发掘草图约束中尺寸约束和几何约束的规律,通过这种方式,可以快速的完成开发。
& l: ~3 }/ S+ l' \
NXOpen C++创建草图基本特征
9 U( @0 r4 l5 A& x4 G" R, R. a
31 NXOpen C++创建基本特征-草图的创建(1)项目介绍
+ h7 z+ k# `/ b, j* r8 R 31 NXOpen C++创建基本特征-草图的创建(2)UI设计& N9 M9 z* ^: R8 k
31 NXOpen C++创建基本特征-草图的创建(3)项目创建
7 |. D$ X$ q6 @3 k0 M9 ` 31 NXOpen C++创建基本特征-草图的创建(4)草图特征创建& a& y2 i5 [7 f
31 NXOpen C++创建基本特征-草图的创建(5)添加几何到草图
' D9 J. L) t* J, O9 r z 31 NXOpen C++创建基本特征-草图的创建(6)添加草图几何约束- k& @" x1 P% m$ g: o
31 NXOpen C++创建基本特征-草图的创建(7)添加草图尺寸约束( |% }6 K% ^: v1 r# p2 X4 @' f
31 NXOpen C++创建基本特征-草图的创建(8)尺寸和UI关联
$ }3 w& ^+ N- Y, `8 Y& S1 M W+ V2 C( G) y( x H5 H+ M
4 D4 H* w1 V% f' i* {# R* l( M3 T3 d
; Y: M4 Y% h' D) U
& l, J4 t" h' P% s A- O) m
7 v$ g6 Z0 ]2 V) E
关键代码分享:# y% j0 D" J* G3 l- o% Q8 H
* B, |* n' C: O# _
& ^' |5 V. N" }% o8 i& G3 h
- M+ d. p. ~% t. L# R- ?' _- void lesson31_createSkeTCh::createIPSketch()3 b% ^. m- q! k& Y
- {
" h$ ~) v) E. T9 \% L# s - _, e& o2 [6 L Q: u
- Sketch *nullSketch(NULL);- V9 A V$ L% [0 x9 P
- SketchInPlaceBuilder *sketchInPlaceBuilder1;
" L% W2 b6 N: F% W M' v- G - sketchInPlaceBuilder1 = workPart->Sketches()->CreateNewSketchInPlaceBuilder(nullSketch);
0 Z9 Q9 F6 X1 i/ L# n - sketchInPlaceBuilder1->SetPlaneOption(Sketch::PlaneOptionNewPlane);6 D( @: b- M9 |) L
2 N- }. Q7 [9 S7 Q( X! f1 o- //sketchInPlaceBuilder1->Plane()->SetMethod(PlaneTypes::MethodTypeFixedZ);) U# d; d! |* I$ Z: L# Q2 M% x
% _' p1 O2 j6 ]: x- 0 o3 ~, b6 n& p4 L9 I% r
- // add preference, T* _$ B" c' W: `9 x! I
- - T3 o \2 ~3 K- H2 ?( q( } _
- theSession->Preferences()->Sketch()->SetContinuousAutoDimensioning(false);9 `% U) ^: X( f" V0 w
- " Z5 J# r6 a* ]& f6 j o8 B
- Drafting::PreferencesBuilder *preferencesBuilder1; ]. p$ k# t$ Q9 _6 k9 ?
- preferencesBuilder1 = workPart->SettingsManager()->CreatePreferencesBuilder();+ {% ^2 p7 a1 Z2 F9 G1 E4 l c
- preferencesBuilder1->AnnotationStyle()->DimensionStyle()->SetAngularDimensionValuePrecision(3);* w$ Y% h0 Y2 R& i% [* k6 n
- preferencesBuilder1->AnnotationStyle()->DimensionStyle()->SetDimensionValuePrecision(3);
5 |3 V( h/ l5 V* z - preferencesBuilder1->Commit();3 L. V* w# R3 v `( J; K- n7 b# r" K
- ( s/ T+ L* c9 j
- preferencesBuilder1->Destroy();( E3 c( m* Z% C2 |6 @! Y8 n' x' m
9 W3 W4 d' m- R" v- # r" k/ {0 `- z; @6 P4 h
- NXObject *nXObject1;3 j" _+ ?: K6 R% ?4 M
- nXObject1 = sketchInPlaceBuilder1->Commit();
2 |, M/ V/ o8 ?/ V, Q
# U2 f# |4 ^% {( L- Sketch *sketch1(dynamic_cast<Sketch *>(nXObject1));; \. |: [; v: O. O- _
- Features::Feature *feature1;' ?/ I# ~* H' H7 k; k5 Q1 B* F6 h
- feature1 = sketch1->Feature();* Z% X9 Y# S2 Y* B9 L/ ^
- feature1->SetName("XY-Plane-Sketch");: C' N5 J& n% N3 F8 l' k
-
9 l8 d) J m% O - sketchInPlaceBuilder1->Destroy();6 H, T3 T0 d- e1 h7 y
- H/ Y+ ?& w; z w
- //1 active sketch
2 H: y( R0 w7 D - 7 J2 O; `& G2 p& }" e% a
- sketch1->Activate(Sketch::ViewReorientFalse);) |/ [5 _# \8 Q2 p6 G0 |
-
D0 [+ ?& q6 K; n7 t; `4 @ @ - double height1 = this->expressionHeight1->GetProperties()->GetDouble("Value");+ N. O \5 K# d! [$ t9 J. `. g: B
- double height2 = this->expressionHeight2->GetProperties()->GetDouble("Value");! }2 q4 A) U. \ k7 Y; B
- double length = this->expressionLength->GetProperties()->GetDouble("Value");
( P6 P# b1 A9 ?% t - // 2.1 create geometry
- K+ \- u: c! j) w - 4 q) k1 }$ l" {6 u8 e
- Point3d startPoint1(0.0, 0.0, 0.0);
4 h0 w: F8 J4 Y3 U$ C8 y - Point3d endPoint1(0, height1, 0.0);3 O2 |/ @8 n1 T q3 l/ h' k
- Point3d endPoint2(length, height1, 0.0);+ T( [' P6 G+ w: F' C& i3 S
- Point3d endPoint3(length, height1-height2, 0.0);$ `% D4 N( a0 f. `% @; o
- Point3d origin = sketch1->Origin();
X" z! {2 @) s2 B - Point *originPoint = workPart->Points()->CreatePoint(origin);
% f; k5 l% G7 l; {3 S
0 E5 n. R, P6 R- ]. m0 g0 Q- Line *line1,*line2,*line3,*line4;8 v8 ?! {+ g9 e* I
- line1 = workPart->Curves()->CreateLine(startPoint1, endPoint1);/ k" }6 j. E1 d
- line2 = workPart->Curves()->CreateLine(endPoint1, endPoint2);
. x& H6 [* b) q1 v - line3 = workPart->Curves()->CreateLine(endPoint2, endPoint3);
+ j, x; M+ M* V+ U - line4 = workPart->Curves()->CreateLine(endPoint3, startPoint1);
. q2 _2 y D, Y - // 2.2 add geometry8 C+ Z$ A+ a8 b
9 T. O, }: x# Y8 s$ j7 u% F; m- w- sketch1->AddGeometry(line1,Sketch::InferConstraintsOptionInferCoincidentConstraints);
& t$ p; ?" |9 u e" X - sketch1->AddGeometry(line2,Sketch::InferConstraintsOptionInferCoincidentConstraints);
9 z; j; L, w& u9 g8 B - sketch1->AddGeometry(line3,Sketch::InferConstraintsOptionInferCoincidentConstraints);. @, k* A7 M+ ?7 j
- sketch1->AddGeometry(line4,Sketch::InferConstraintsOptionInferCoincidentConstraints);
4 t. j5 k( h, h5 B W - 5 }' V# s- r: S3 i7 h
- //3 add constraints ( gemo); H- H- p2 W- s7 M+ Y7 a+ p
5 _/ i$ \5 k4 b) t2 }- Sketch::ConstraintGeometry geomline1;% S$ e# O9 Y( w
- geomline1.Geometry = line1;4 X& \1 j% \: }7 e/ N+ S
- geomline1.PointType = Sketch::ConstraintPointTypeNone;
3 M. W( S; T7 A- t4 O3 o - geomline1.SplineDefiningPointIndex = 0;
* v. y3 |! X% P' m) [ - sketch1->CreateVerticalConstraint(geomline1);
: F( E% B5 t/ U, O# Q4 N* _0 ~
8 F, G( z$ W) v- T8 y- Sketch::ConstraintGeometry geomline2;+ |, a* ~) I% d4 `" O
- geomline2.Geometry = line2; u4 {) J" a( W( |; `
- geomline2.PointType = Sketch::ConstraintPointTypeNone;+ y0 P" l* ]' n
- geomline2.SplineDefiningPointIndex = 0;
% P. ?+ r, r% U9 R7 c - sketch1->CreateHorizontalConstraint(geomline2);0 ^2 g. @9 `+ x
- . z; b% Q6 A1 L8 Q1 L' U& s
- Sketch::ConstraintGeometry geomline3;: C* i# N2 ^5 p# L+ \, n8 B
- geomline3.Geometry = line3;
% ]2 r6 Z4 j3 q4 n4 G - geomline3.PointType = Sketch::ConstraintPointTypeNone;
/ w0 C. X5 y, ~' d - geomline3.SplineDefiningPointIndex = 0;
6 Z0 M+ U7 @/ z$ j+ b4 Q4 W - sketch1->CreateVerticalConstraint(geomline3);
/ V$ S3 H5 E. ] - % F* P) P! P# Y# Q6 S# Y. P
- Sketch::ConstraintGeometry geomline1_startPoint;
0 d6 n1 D _4 a8 B' U. u - geomline1_startPoint.Geometry = line1;
( C9 n8 S( D& D2 [8 V - geomline1_startPoint.PointType = Sketch::ConstraintPointTypeStartVertex;- `/ W$ }, b; s8 Q( G$ k: u
- geomline1.SplineDefiningPointIndex = 0;
) W& x: p% a# y$ q5 T - Sketch::ConstraintGeometry geomline2_originPoint;
! s) K1 {; Y0 b) l* F) C5 \# Z" i7 z - geomline2_originPoint.Geometry = originPoint;' S r7 y/ ?( \" h& Z3 C7 L/ u( P
- geomline2_originPoint.PointType = Sketch::ConstraintPointTypeNone;
% |2 O1 T" T$ i2 o - geomline2_originPoint.SplineDefiningPointIndex = 0;3 Z! u( O9 U& m3 n
- sketch1->CreateCoincidentConstraint(geomline1_startPoint,geomline2_originPoint);
: S+ q( J9 E9 t$ }+ Y
6 M+ h3 I2 g* s) \- //4 add constraints (dimension)5 T+ P% G: T7 O4 o
' B L0 Z2 A, l: {( g- NXObject *nullNXObject(NULL);
/ R. F( @$ @0 D- F - ) I# E1 q; A0 }7 O' ~
1 \% ]) r2 Q8 D: q4 i( j5 Z- stringstream s_height1,s_height2,s_length;# q A9 g$ b9 K/ s: {
- s_height1 <<height1;
* i) U' F: a9 Y" \7 d/ f3 m1 N- R. B - s_height2 <<height2;7 }$ k6 l7 z0 C. `+ u. A
- s_length <<length;
@# ~2 `0 C9 [) ` |7 O0 W8 {2 M - $ C& F' l5 H2 B) i1 L
- Expression *expression1,*expression2,*expression3;' ~4 X# e4 o7 l: P! i' o
- expression1 = workPart->Expressions()->CreateSystemExpression(s_height1.str()); X5 h" W9 U5 d& d# C% j' [! x
- expression2 = workPart->Expressions()->CreateSystemExpression(s_length.str());
/ L# {; S V& x% E - expression3 = workPart->Expressions()->CreateSystemExpression(s_height2.str());
: O% y: C( s S! x2 V1 Y9 e" R! t
5 s& W$ X' ]5 w; L% V2 f- // line1 dimension
0 I6 E5 f9 d* c7 f9 d, `% e/ D* _4 v - $ \. z3 i/ t* N2 q/ f7 T- [
- Sketch::DimensionGeometry dimLine1_startPoint;( B1 ?. x4 T" N' {( `8 K% R
- dimLine1_startPoint.Geometry = line1;% _8 n6 R( M9 s
- dimLine1_startPoint.AssocType = Sketch::AssocTypeStartPoint;2 g% C% A2 x4 }& x: [0 M$ i% v8 ?0 U
- dimLine1_startPoint.AssocValue = 0;% `/ Q6 ?# X/ Z+ W
- dimLine1_startPoint.HelpPoint.X = 0.0;
! N4 x! F, Q# A+ y q+ R% M - dimLine1_startPoint.HelpPoint.Y = 0.0;( p$ s% ~; i( i& j/ k
- dimLine1_startPoint.HelpPoint.Z = 0.0;
. k2 i( E& J2 K" Y6 l' ] - dimLine1_startPoint.View = nullNXObject;
: t9 @1 C3 J; I4 ~
# t8 e T. w; A' f! C+ k. w- Sketch::DimensionGeometry dimLine1_endPoint;
/ Q1 w T; s4 l0 ^( x - dimLine1_endPoint.Geometry = line1;5 m }7 L9 i! t
- dimLine1_endPoint.AssocType = Sketch::AssocTypeEndPoint;
7 a& s: `+ @# H9 M& v+ e4 g8 h# S - dimLine1_endPoint.AssocValue = 0;" Z7 G+ d2 R- j: A/ x4 C* b1 J
- dimLine1_endPoint.HelpPoint.X = 0.0;$ H0 ]3 l# Y0 m
- dimLine1_endPoint.HelpPoint.Y = 0.0;
+ y# e3 k$ X: J4 E; M5 w: D# n - dimLine1_endPoint.HelpPoint.Z = 0.0;
+ X) e& h* ]' I) ?; J - dimLine1_endPoint.View = nullNXObject;( M; G' E3 T b# V& F
- ' S: X: y9 ] W6 U
- Point3d dimOrigin1(-100, height1/2, 0.0);
# l3 z5 w4 t: H$ p# s$ z* m - 6 C' |3 Y- G1 e+ \6 l
- sketch1->CreateDimension(Sketch::ConstraintTypeParallelDim, dimLine1_startPoint, dimLine1_endPoint, dimOrigin1, expression1, Sketch::DimensionOptionCreateAsDriving);7 q% K- N Z+ B+ P
- 2 L1 L* {) t a
! V8 l% u/ f3 X6 g2 B-
' M9 a! v& t6 O* u2 I - // line2 dimension 8 O; ], [+ R0 I! S @- c ]- M
- 8 Q; O& @9 ~ S( t) e- D- o4 M
- Sketch::DimensionGeometry dimLine2_startPoint;
8 t- g( R2 W9 \2 j - dimLine2_startPoint.Geometry = line2;! J3 m3 t! K; ]7 h( f" r
- dimLine2_startPoint.AssocType = Sketch::AssocTypeStartPoint;; |* A! t, E, ` [
- dimLine2_startPoint.AssocValue = 0;
" x1 m1 p, [+ ]% k - dimLine2_startPoint.HelpPoint.X = 0.0;/ P# f+ P7 Z# S( F% W
- dimLine2_startPoint.HelpPoint.Y = 0.0;5 H! D6 ~) ?) l k* X" d# h
- dimLine2_startPoint.HelpPoint.Z = 0.0;+ j9 E9 T1 U5 k$ ]% |2 e
- dimLine2_startPoint.View = nullNXObject;
, o; R' w! f5 u- {% M6 a - 7 k/ Z, m U0 l# u. U( g8 ?% M- t
- Sketch::DimensionGeometry dimLine2_endPoint;
5 @! N7 }; H$ ~5 X- P - dimLine2_endPoint.Geometry = line2;
) ~, s* z- m6 B - dimLine2_endPoint.AssocType = Sketch::AssocTypeEndPoint;
6 g( B( V- D% Q* s" { - dimLine2_endPoint.AssocValue = 0;9 X# V6 I0 B" [$ O$ q# Q
- dimLine2_endPoint.HelpPoint.X = 0.0;! S* ~* a1 ^7 J9 f7 V
- dimLine2_endPoint.HelpPoint.Y = 0.0;1 g0 u/ e$ v* L
- dimLine2_endPoint.HelpPoint.Z = 0.0;2 ?1 H2 K1 Y; X/ S9 h( j4 ?0 R3 m& B, A
- dimLine2_endPoint.View = nullNXObject;
, E2 P- B) z* X, o f, t1 v - 9 \& s/ d9 y4 K7 \1 |9 s* U
- Point3d dimOrigin2(length /2,100 + height1, 0.0);
3 L! B x% ]. |# z( b - , N( O$ L) C T' D9 H U! c
- sketch1->CreateDimension(Sketch::ConstraintTypeParallelDim, dimLine2_startPoint, dimLine2_endPoint, dimOrigin2, expression2, Sketch::DimensionOptionCreateAsDriving);
0 I# t4 J" i3 B& f3 m( `
9 ~/ } `9 N+ [ s& E2 t. e- 1 u0 ?' b& ?8 v f8 D& C+ i
-
* }1 a4 p. F# W! u* X2 g) P - // line3 dimension ; E$ A, t* {) ?& @8 R0 \$ @9 Y
3 _' \$ Z% a; J: I3 [3 ~& q- Sketch::DimensionGeometry dimLine3_startPoint;
8 n( Q, _% Y' V- H# _+ N, b* X - dimLine3_startPoint.Geometry = line3;" O/ Z" f: i6 C* p4 A( y9 e8 S
- dimLine3_startPoint.AssocType = Sketch::AssocTypeStartPoint;, G. I+ o& E. P' h) l3 o; D
- dimLine3_startPoint.AssocValue = 0;
0 J& W4 T4 `5 o6 s4 t" J0 g8 Q - dimLine3_startPoint.HelpPoint.X = 0.0;
: w6 u' D) y# H( d7 \! |' ? - dimLine3_startPoint.HelpPoint.Y = 0.0;
0 m) g* ]) p+ l" u - dimLine3_startPoint.HelpPoint.Z = 0.0;
0 I p1 ^" ^: k4 z2 m4 b7 q4 J - dimLine3_startPoint.View = nullNXObject;2 M! w, D9 K% f) i! M. y+ [% l
- 2 I; D8 U6 x% F
- Sketch::DimensionGeometry dimLine3_endPoint;# O! T+ O; S0 j6 n
- dimLine3_endPoint.Geometry = line3;
; @- ~9 \$ y4 u I - dimLine3_endPoint.AssocType = Sketch::AssocTypeEndPoint;
9 w! a7 N6 B7 w7 a- ^! W - dimLine3_endPoint.AssocValue = 0;2 B+ |1 q4 C" J/ c& ^3 ~& _; T$ o: e
- dimLine3_endPoint.HelpPoint.X = 0.0;: _7 V- b6 J, K
- dimLine3_endPoint.HelpPoint.Y = 0.0;2 O- |- N/ }' `3 }/ y
- dimLine3_endPoint.HelpPoint.Z = 0.0;
8 K7 M% G! f9 s# k( u \4 U1 ~% Z - dimLine3_endPoint.View = nullNXObject;2 Q; U# W% u3 q# O8 C
3 s/ D: x; t; o- Point3d dimOrigin3( 100 + length, height1-height2+ height2 /2 , 0.0);6 t; X7 p4 a$ v4 p/ G# L. r
- ( P; ~" q8 S. q: t
- sketch1->CreateDimension(Sketch::ConstraintTypeParallelDim, dimLine3_startPoint, dimLine3_endPoint, dimOrigin3, expression3, Sketch::DimensionOptionCreateAsDriving);/ v0 |' }. d8 L0 C% a$ G
- 4 ~1 ?+ z" B4 Z- x; ]3 R
- , b1 ]8 H) }$ [9 Q8 x
. ]" l* V( X: r7 R$ |5 z- M- //5 update & deactive
, m. K5 a7 C( o P - sketch1->Update();' @0 Y7 C7 {" G- ~7 @
8 W1 q# S, Y9 ~2 ?! M- sketch1->Deactivate(Sketch::ViewReorientFalse,Sketch::UpdateLevelModel);
& v! T# E# }0 {& U( i - 3 ~+ j9 Z6 c' [( @; v: Y
- delete expression1;
( p% s( h% i/ l* \1 Y4 E4 a - delete expression2;
& ?% `- u0 Q' V9 W - delete expression3;
' Y: f# C. X1 r5 E8 c6 { - 6 S- }1 k" L7 f0 N( H8 ^6 Z
- }. \, _& u3 N- t- I) w
复制代码 - T' Y- Z% q9 j- |; W+ c& R
/ S6 l% r" J+ Y: A, ^
4 m6 U1 O8 u k) }3 j* u2 y# |+ j7 l0 |% l# o
|
|