|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
PLM之家-NX9.0 二次开发实例视频31 NXOpen C++创建基本特征 <1>-草图的创建
2 n/ O- }+ ]6 B) I3 F3 L1 ^5 w内容:7 ~( @) a l2 @3 D3 }8 E
草图作为参数化建模的基础,使用代码实现草图的创建过程,主要是对草图环境的初始化,以及草图约束的添加等问题。3 r* K0 T" |1 U" |- ]% U+ x
目的:
3 M7 ~$ Q* @* B- U3 x9 t在NX中,使用NXOpen C++可以很方便的进行JA的录制,从而发掘草图约束中尺寸约束和几何约束的规律,通过这种方式,可以快速的完成开发。
+ z) t+ K1 Z' S) d4 D
NXOpen C++创建草图基本特征
u s5 C# M# u
31 NXOpen C++创建基本特征-草图的创建(1)项目介绍% {6 k. C- r) T3 a" g2 |
31 NXOpen C++创建基本特征-草图的创建(2)UI设计1 F9 K3 L$ Y! U- b7 l
31 NXOpen C++创建基本特征-草图的创建(3)项目创建% w( G) p+ Q6 `( A; w% |5 d
31 NXOpen C++创建基本特征-草图的创建(4)草图特征创建
, g; K/ l/ p0 M9 t b% N! E3 i+ @ 31 NXOpen C++创建基本特征-草图的创建(5)添加几何到草图
3 q+ H7 W! Z# s' g- P 31 NXOpen C++创建基本特征-草图的创建(6)添加草图几何约束
7 \; \: U( m% D( Q 31 NXOpen C++创建基本特征-草图的创建(7)添加草图尺寸约束5 V; f) k: Y6 x4 z3 A
31 NXOpen C++创建基本特征-草图的创建(8)尺寸和UI关联+ N: L$ ?2 R0 [# p+ {
" u3 Q* @2 O( J* P3 {4 }" [
# x3 `! P2 I! [7 b: ^( ~0 ^- R+ p) L" o r4 ~" o, U0 t4 `& O
5 X( L5 [% o7 H% Y+ E: r+ h
. J6 y3 j4 o) |$ o' h2 F
关键代码分享:
7 }) B( G6 o& i( j- T" f
$ K) g6 z: y, A5 D" h5 v5 M' S0 o0 `% g! A. c
5 s n) P; c' [3 g; R# ?' _- void lesson31_createSkeTCh::createIPSketch()4 i1 c: P: I8 T# G: [
- {
% W7 p/ g% \, \4 U! G1 P- y5 _& v
3 K4 m& v4 T: p U# ~3 I( p- Sketch *nullSketch(NULL);
1 A2 l/ Y8 x& b8 S$ m. x" ` - SketchInPlaceBuilder *sketchInPlaceBuilder1;$ m8 S- R4 E" Q9 d/ W
- sketchInPlaceBuilder1 = workPart->Sketches()->CreateNewSketchInPlaceBuilder(nullSketch);& h% [9 y8 w# J% x+ X
- sketchInPlaceBuilder1->SetPlaneOption(Sketch::PlaneOptionNewPlane);, M+ K- r, [: z6 w3 H/ v) t
- 9 T+ j9 z" k: d( D7 }
- //sketchInPlaceBuilder1->Plane()->SetMethod(PlaneTypes::MethodTypeFixedZ);6 \: k- M w/ Q
/ `# s- T. B+ p2 `5 d0 S5 P% X- " i: s, H9 }& ?
- // add preference% q# V0 w' C d, W9 X
, ]& a* k; P& E/ E) m, w& r- theSession->Preferences()->Sketch()->SetContinuousAutoDimensioning(false);
5 e6 J+ G; H9 R/ P |, X5 U8 p - ) C% O* c( [6 \
- Drafting::PreferencesBuilder *preferencesBuilder1;
/ E) Y8 i- c9 k5 O& c2 r$ y: Q - preferencesBuilder1 = workPart->SettingsManager()->CreatePreferencesBuilder();
5 ]/ d/ }# {% {1 d - preferencesBuilder1->AnnotationStyle()->DimensionStyle()->SetAngularDimensionValuePrecision(3);
/ M6 F0 Z7 W* a' f# E - preferencesBuilder1->AnnotationStyle()->DimensionStyle()->SetDimensionValuePrecision(3);
& C Y W) [% G3 [; x0 P e: G - preferencesBuilder1->Commit();
! G$ f- Y) z% c1 R2 w
9 C2 k( c3 B, @: Q, g. m. o- preferencesBuilder1->Destroy();
9 ?8 k/ G8 w/ v; i3 b( u' O! [* @, F
! r0 ?2 }- t& I9 z- " I5 Y3 M9 [& a4 G# `* k
- NXObject *nXObject1;" V2 K8 v3 h" O4 f3 }, E R
- nXObject1 = sketchInPlaceBuilder1->Commit();1 b) b2 i. J& i8 Y! _$ r
8 ?" x5 |6 F8 e: t" u- Sketch *sketch1(dynamic_cast<Sketch *>(nXObject1));
. C1 s) H) |: Z2 Q+ P; O$ W9 G - Features::Feature *feature1;3 U8 c5 G! D! c' m* A
- feature1 = sketch1->Feature();$ j: y6 J, F6 Y' Z) t3 d
- feature1->SetName("XY-Plane-Sketch");
- W7 v% ]0 k f+ c. ? - 5 r$ M; \& F5 J _. m& b" e
- sketchInPlaceBuilder1->Destroy();
! y: m$ J! r6 C' q' K' i8 t$ G9 T8 v2 e
4 ^) B! b: r, B6 i0 E- //1 active sketch + A( r1 j. ~+ D% ?
2 {2 U+ h1 n- |5 s- sketch1->Activate(Sketch::ViewReorientFalse);5 V) @8 m3 z) B
-
) f9 m$ y2 P6 \$ H$ r - double height1 = this->expressionHeight1->GetProperties()->GetDouble("Value");
* p8 W( X" S/ c: [' ~6 G+ j2 I7 K - double height2 = this->expressionHeight2->GetProperties()->GetDouble("Value");
2 g5 S/ X* y1 z9 h- [7 I/ A V - double length = this->expressionLength->GetProperties()->GetDouble("Value");9 V) s6 u! N; R7 E8 ?
- // 2.1 create geometry
1 T4 j1 L. b. O6 Q# V" S
r9 E! f. `8 e: U) G+ F, }, R- Point3d startPoint1(0.0, 0.0, 0.0);
o7 x$ e% y A& t2 i5 u8 d& s - Point3d endPoint1(0, height1, 0.0);
# K9 ^: I0 {! d; k. O/ r5 w' \ - Point3d endPoint2(length, height1, 0.0);
+ j n; y, w, [ - Point3d endPoint3(length, height1-height2, 0.0); Y L( B) R7 s4 U3 k1 W! E
- Point3d origin = sketch1->Origin();- g- U2 ^) a) ?7 F* _2 X6 o- \
- Point *originPoint = workPart->Points()->CreatePoint(origin);0 C/ L# @5 ?# G) A q
4 Q# S/ n0 s$ r# @, ^( o- Line *line1,*line2,*line3,*line4;
0 S! \# j$ _5 n- Y" z4 b, X - line1 = workPart->Curves()->CreateLine(startPoint1, endPoint1);1 J( z( l& l' N$ ~: X8 b! s
- line2 = workPart->Curves()->CreateLine(endPoint1, endPoint2);
0 f1 h) I1 a8 [! }2 a - line3 = workPart->Curves()->CreateLine(endPoint2, endPoint3);, V. N" M' G6 n0 I7 b3 P
- line4 = workPart->Curves()->CreateLine(endPoint3, startPoint1);
& V& j7 K" K5 [0 E5 H3 ? - // 2.2 add geometry; I7 B6 W* J3 y9 S$ Q
, Z. ]1 ~( ~1 y6 H+ i0 a" W- sketch1->AddGeometry(line1,Sketch::InferConstraintsOptionInferCoincidentConstraints);
2 D" x, S% o3 y/ a - sketch1->AddGeometry(line2,Sketch::InferConstraintsOptionInferCoincidentConstraints);6 u+ U+ {- d+ ^4 ?: o7 k
- sketch1->AddGeometry(line3,Sketch::InferConstraintsOptionInferCoincidentConstraints);, e+ Q A3 }* w7 y. Z8 d3 F. r
- sketch1->AddGeometry(line4,Sketch::InferConstraintsOptionInferCoincidentConstraints);+ z3 [$ n: `" V) z* S
4 D6 C+ N4 A0 T! \- //3 add constraints ( gemo)2 ?) B8 e( E% R" m, j, m
- 4 P) F, D8 M9 [. |$ c, E1 q- p
- Sketch::ConstraintGeometry geomline1;9 H n; w# b. L; b8 ]% _
- geomline1.Geometry = line1;7 @ _! S' ~0 j ~- S9 {
- geomline1.PointType = Sketch::ConstraintPointTypeNone;
W; C7 A+ J6 @: e ^ - geomline1.SplineDefiningPointIndex = 0;
# N n2 {7 ~: y. k - sketch1->CreateVerticalConstraint(geomline1);( d1 B) `9 V; a8 i* G& C
- * o4 z! ]+ Q' G" d
- Sketch::ConstraintGeometry geomline2;
! ]/ O5 C u- ~5 d( ~5 p/ }7 l - geomline2.Geometry = line2;
5 I V8 t6 p( f4 o - geomline2.PointType = Sketch::ConstraintPointTypeNone;
9 `* @' Y+ Q- X - geomline2.SplineDefiningPointIndex = 0;- [: R/ S& y. E; f! L4 o
- sketch1->CreateHorizontalConstraint(geomline2); b v3 Z# `2 V- f9 g
- & b/ {( ~* h; r3 s% @) F2 P4 w
- Sketch::ConstraintGeometry geomline3;" q. S* V# N% U8 Q) z" q) f+ N, X
- geomline3.Geometry = line3;4 f2 i: x3 t. N; T3 J0 o" x
- geomline3.PointType = Sketch::ConstraintPointTypeNone;
% H. l: g& m7 y" b - geomline3.SplineDefiningPointIndex = 0;9 {; {8 }' ]# T. ^
- sketch1->CreateVerticalConstraint(geomline3);
/ V" _ u% D; |; Z; ^! B
2 e2 l5 A9 O% m' n: n- Sketch::ConstraintGeometry geomline1_startPoint;: ^4 R: i' s3 U. g8 U- e7 H r
- geomline1_startPoint.Geometry = line1;
. w3 f* G0 K/ N! x - geomline1_startPoint.PointType = Sketch::ConstraintPointTypeStartVertex;
3 G$ i. V ]2 d( l$ w - geomline1.SplineDefiningPointIndex = 0;) P% u: x, u, F# ~$ C3 p; U
- Sketch::ConstraintGeometry geomline2_originPoint;
( [- C! ~' p! i5 V6 R+ } - geomline2_originPoint.Geometry = originPoint;. _4 W. o6 X ^. g
- geomline2_originPoint.PointType = Sketch::ConstraintPointTypeNone;
- E$ {7 ]$ ?$ M9 ~6 `2 ` - geomline2_originPoint.SplineDefiningPointIndex = 0;. s* M; ~# L% ~+ n
- sketch1->CreateCoincidentConstraint(geomline1_startPoint,geomline2_originPoint);+ | J4 B/ u$ r; A) n5 r# W5 ?5 Y
; K% H' `% d( ?3 h9 E; D$ T- V- //4 add constraints (dimension)3 p: X, G2 |5 C0 Y2 k* I
- * v& ]) a0 Q/ L; H0 K, m8 d
- NXObject *nullNXObject(NULL);
; S1 L6 _1 Q7 c K! M+ y$ E X0 \
( i3 n" r+ k( H# l6 Q
2 T2 F4 e$ @/ k+ p) O- stringstream s_height1,s_height2,s_length;
9 |7 I' _) U; ]3 x2 x' Z$ |: p - s_height1 <<height1;1 O( |- `. M* p; C! ~$ ?
- s_height2 <<height2;2 P9 w* _; X# X, {8 ~# ~5 J1 n8 N u7 G3 j
- s_length <<length;
. W3 m4 _' F% a1 O* {; X) s - ! }5 h5 U. ` k3 h' l% {2 w
- Expression *expression1,*expression2,*expression3;/ ~ T" H! A7 l' y( P
- expression1 = workPart->Expressions()->CreateSystemExpression(s_height1.str());
) [& O' X9 R+ t1 c0 e/ o - expression2 = workPart->Expressions()->CreateSystemExpression(s_length.str());
`1 u) \" a" ^, E8 i ` - expression3 = workPart->Expressions()->CreateSystemExpression(s_height2.str());7 E+ Z( v2 [. }$ Q2 ~" Z( m$ t
2 r' ?, F* p" G9 W- // line1 dimension
! X& R9 n4 L- {" g+ n# { - 0 Q) }( a1 `- m, l2 d
- Sketch::DimensionGeometry dimLine1_startPoint;
, r4 k' R! @1 n. @6 B+ e) V - dimLine1_startPoint.Geometry = line1;- X$ T: m3 _% I5 b3 h9 f3 O" |
- dimLine1_startPoint.AssocType = Sketch::AssocTypeStartPoint;
& J6 J9 g# H: U1 h" D% K - dimLine1_startPoint.AssocValue = 0;
% w' |4 I0 g" o2 L; ? - dimLine1_startPoint.HelpPoint.X = 0.0;8 q' G, u D/ g8 j
- dimLine1_startPoint.HelpPoint.Y = 0.0;; `7 r1 D+ X* F7 @0 I3 q
- dimLine1_startPoint.HelpPoint.Z = 0.0;
+ Q; F" Q" v5 u6 O - dimLine1_startPoint.View = nullNXObject;
& p7 i- {4 p, q( o. S
2 v6 R" b* p( [! _( o6 U- Sketch::DimensionGeometry dimLine1_endPoint;
/ c& ` f+ D9 M; z - dimLine1_endPoint.Geometry = line1;9 v# M6 z7 s2 D# ]7 [
- dimLine1_endPoint.AssocType = Sketch::AssocTypeEndPoint;
3 y1 Q0 W7 I1 Z; } - dimLine1_endPoint.AssocValue = 0;7 z" t; l/ L9 K* Q1 k1 ?+ r# l4 I
- dimLine1_endPoint.HelpPoint.X = 0.0;
7 a* [; _2 c, b# N$ h - dimLine1_endPoint.HelpPoint.Y = 0.0;, @8 _; y! ^' E, K% C
- dimLine1_endPoint.HelpPoint.Z = 0.0;
' O# {0 t# J0 u8 W8 b, K" Q9 o2 o - dimLine1_endPoint.View = nullNXObject;
( ^% G2 A5 V' ^
$ i1 x- M4 m! e- P! e: D- Point3d dimOrigin1(-100, height1/2, 0.0);
5 j. v: D& w9 m7 R& U3 o
: a9 |) R. e7 _( D- sketch1->CreateDimension(Sketch::ConstraintTypeParallelDim, dimLine1_startPoint, dimLine1_endPoint, dimOrigin1, expression1, Sketch::DimensionOptionCreateAsDriving);
$ y/ e* ^) T2 V5 _
5 H8 x" a( \$ ]2 G- 6 q9 W* m6 z0 `/ f: U
-
, [/ ]4 g8 m* \) T - // line2 dimension , C% z8 p. m A9 A" K/ R! H
9 L, {% ]; S% c- x+ m& P! x- Sketch::DimensionGeometry dimLine2_startPoint;1 t' Q' x7 w: }, N/ z& Q
- dimLine2_startPoint.Geometry = line2; H6 M' @" Q, ]9 c
- dimLine2_startPoint.AssocType = Sketch::AssocTypeStartPoint;
1 {+ P' ^) [+ U- M, u3 n0 x - dimLine2_startPoint.AssocValue = 0;0 ]- P4 l# w; S: n
- dimLine2_startPoint.HelpPoint.X = 0.0;
1 c a- l. j5 Y8 q; W& l - dimLine2_startPoint.HelpPoint.Y = 0.0;
u2 s. }7 s% W3 B - dimLine2_startPoint.HelpPoint.Z = 0.0;
* Y' {, @# t6 K7 j5 B - dimLine2_startPoint.View = nullNXObject;/ H" q9 X4 c& q# g
- % R( |0 @0 v- j2 D( {
- Sketch::DimensionGeometry dimLine2_endPoint;
7 x% t/ h. I. G2 n% @; D5 A5 S# u - dimLine2_endPoint.Geometry = line2;
/ S5 E' k2 h, ]! g, y, v - dimLine2_endPoint.AssocType = Sketch::AssocTypeEndPoint;) m/ q- y& z2 N9 J+ J
- dimLine2_endPoint.AssocValue = 0;
+ |9 j4 m# u0 ~5 O) n7 L - dimLine2_endPoint.HelpPoint.X = 0.0;3 u5 z+ ?" t U, w: `
- dimLine2_endPoint.HelpPoint.Y = 0.0; n/ _3 u; G, t; `* }) ~: s1 W! d
- dimLine2_endPoint.HelpPoint.Z = 0.0;, T; `6 ^& u ~
- dimLine2_endPoint.View = nullNXObject;
3 Y* S* c$ }3 T: {) Z, N4 d' X
/ P$ D8 j) O7 [- Point3d dimOrigin2(length /2,100 + height1, 0.0);8 v' x$ u! M/ ]. _. y
- 1 u& h% p& w7 X$ I- V$ b
- sketch1->CreateDimension(Sketch::ConstraintTypeParallelDim, dimLine2_startPoint, dimLine2_endPoint, dimOrigin2, expression2, Sketch::DimensionOptionCreateAsDriving);
2 B( m: F8 y( `
, a9 V& Y6 c/ l: a0 k. X, @- 3 [9 F* b" R$ k: I
-
2 I: {5 N$ X: S% A" Y - // line3 dimension
3 }1 N/ g- o0 y7 S. i- R* h - 0 _2 E! x9 `0 w* r
- Sketch::DimensionGeometry dimLine3_startPoint;
8 b- Q% `) i% p$ G6 z - dimLine3_startPoint.Geometry = line3; x( a$ l; D( W2 V6 R4 C
- dimLine3_startPoint.AssocType = Sketch::AssocTypeStartPoint;* i! N2 l B" q. C& E9 C0 X! @
- dimLine3_startPoint.AssocValue = 0;
t W; @5 M3 H# S9 N - dimLine3_startPoint.HelpPoint.X = 0.0;* i& _# k$ M; g- j0 B% x
- dimLine3_startPoint.HelpPoint.Y = 0.0;, c0 }5 m* y/ |- d& v7 {
- dimLine3_startPoint.HelpPoint.Z = 0.0;0 G9 k( U; b2 [. p. l/ C
- dimLine3_startPoint.View = nullNXObject;, j& t* I$ c7 O! N7 \" P
! z( P: l) Q2 o- Sketch::DimensionGeometry dimLine3_endPoint;& k) Z1 D7 r1 I( K3 ?
- dimLine3_endPoint.Geometry = line3;9 Z X* y% a8 t* A. w
- dimLine3_endPoint.AssocType = Sketch::AssocTypeEndPoint;4 L* h% i: ]5 h- @0 m- g: L
- dimLine3_endPoint.AssocValue = 0;
( k# h7 @- B. J% a" b - dimLine3_endPoint.HelpPoint.X = 0.0;
( n5 z" Y5 \5 i0 h+ p& P; V' j - dimLine3_endPoint.HelpPoint.Y = 0.0;
; _! v; ~* W8 u6 b! A - dimLine3_endPoint.HelpPoint.Z = 0.0;4 Q( p. ~' L8 t7 y
- dimLine3_endPoint.View = nullNXObject;- K) A# O2 C* \* |) z
: V9 d, ]8 y' Y# [( C- Point3d dimOrigin3( 100 + length, height1-height2+ height2 /2 , 0.0);
, K% V; e" u4 G; \9 k5 `- d, D -
+ k, K j4 ^ R - sketch1->CreateDimension(Sketch::ConstraintTypeParallelDim, dimLine3_startPoint, dimLine3_endPoint, dimOrigin3, expression3, Sketch::DimensionOptionCreateAsDriving);
@2 p, D3 _ k& S - 4 _/ h6 c$ J0 z. w
6 ?1 l6 d/ ?* v) J' `0 r7 i# I- " P( d$ E/ q* P6 ^
- //5 update & deactive; L$ A9 K7 t0 f1 g. R/ m& a
- sketch1->Update();
. c4 {% Q9 s ~2 E$ j7 I
5 X* U& G: m1 a f- sketch1->Deactivate(Sketch::ViewReorientFalse,Sketch::UpdateLevelModel);5 ~1 i: h3 |% }/ |& X2 S
- - G" ^* Z$ c! l6 U% p
- delete expression1;0 f7 h& D8 W# F
- delete expression2;1 n, \6 r4 g' Q; S' m8 ]& z+ Y
- delete expression3;6 i1 c4 W) X9 B- w; j
-
1 S! |& o& `6 O0 d6 l - }5 s, H# P( S3 s2 Q" v4 b
复制代码 & J% L: @& n. X
/ Y9 u) s" w4 e; O E" U: h& l: O. F# Z
- e4 U: I: R+ m: ~. N |
|