|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
PLM之家-NX9.0 二次开发实例视频31 NXOpen C++创建基本特征 <1>-草图的创建
& _. W* J S4 C内容:
M) I8 o1 {/ [: Y2 q草图作为参数化建模的基础,使用代码实现草图的创建过程,主要是对草图环境的初始化,以及草图约束的添加等问题。
j- O# |* D) n) d7 `目的:! r8 B5 ] r. ] {/ t
在NX中,使用NXOpen C++可以很方便的进行JA的录制,从而发掘草图约束中尺寸约束和几何约束的规律,通过这种方式,可以快速的完成开发。
" I ]& B4 J% X2 S5 I3 I4 K+ S
NXOpen C++创建草图基本特征
9 i+ W" b( C* r( }1 v* n* P+ r
31 NXOpen C++创建基本特征-草图的创建(1)项目介绍
' Z! ~; a, a% D X" [ 31 NXOpen C++创建基本特征-草图的创建(2)UI设计
7 @& H1 v2 G _( ^8 h7 ?' |) L$ ~ 31 NXOpen C++创建基本特征-草图的创建(3)项目创建" `/ G, c m! q" T* o) d
31 NXOpen C++创建基本特征-草图的创建(4)草图特征创建) K$ P: R$ Z( V4 B5 \5 d6 s* m1 {8 H
31 NXOpen C++创建基本特征-草图的创建(5)添加几何到草图
0 x2 J" b( D; d7 M4 j 31 NXOpen C++创建基本特征-草图的创建(6)添加草图几何约束7 ?( z6 g: ~- k+ p3 I8 @, i
31 NXOpen C++创建基本特征-草图的创建(7)添加草图尺寸约束
; m, K- i. v9 r& {" Q 31 NXOpen C++创建基本特征-草图的创建(8)尺寸和UI关联7 z. a* |% ~. }2 I+ X5 ^8 o
7 d5 a' b$ B! Z) ]/ o) \
3 T' t0 ^! c+ D+ V' d+ I: z/ B
/ G7 Z' D) p* i x v! ?$ O$ }
) a( k+ w+ M& |. p9 B1 x6 i' C% z
关键代码分享:
n2 h- l0 n' j5 y5 r
! m" L6 O- W8 E: u
6 z9 z- `# {$ ]% i" u* e- E. |, @! I; @- 6 W! y# v! l6 m
- void lesson31_createSkeTCh::createIPSketch(): t1 S# K4 b) J7 M
- {
0 ?$ S @/ U" ?1 o* p& m - 3 _6 z1 \' l8 s& y6 G- v4 [
- Sketch *nullSketch(NULL);, _7 I! e- j2 a( F% O
- SketchInPlaceBuilder *sketchInPlaceBuilder1;
9 U1 _' W# t: T# |! V - sketchInPlaceBuilder1 = workPart->Sketches()->CreateNewSketchInPlaceBuilder(nullSketch);/ A' @* Q) W% }( N
- sketchInPlaceBuilder1->SetPlaneOption(Sketch::PlaneOptionNewPlane);
& I$ @6 {: M' Z7 K$ E
# y& ]6 q7 A. y% G3 p* k- //sketchInPlaceBuilder1->Plane()->SetMethod(PlaneTypes::MethodTypeFixedZ);
' M% S2 A7 o' [9 Y3 Q - & C: `% S: [" D: U4 B% v9 D& p5 a
- 9 C- G2 h& A/ [
- // add preference
, c6 S+ Y3 q! h3 w! P4 {$ h, O7 Q - : [: a- F2 I' w0 B* `* g; q) \: o
- theSession->Preferences()->Sketch()->SetContinuousAutoDimensioning(false);7 J7 m9 q e: V# F) B# `- V, S
- - G+ {+ G4 G& b6 f W2 Z% S
- Drafting::PreferencesBuilder *preferencesBuilder1;
6 |0 s: ?- d" e" X$ K" _/ a - preferencesBuilder1 = workPart->SettingsManager()->CreatePreferencesBuilder();
% j% B* e$ b/ [ - preferencesBuilder1->AnnotationStyle()->DimensionStyle()->SetAngularDimensionValuePrecision(3);8 t7 X4 Q7 s, m8 @! {
- preferencesBuilder1->AnnotationStyle()->DimensionStyle()->SetDimensionValuePrecision(3);8 J' ^. I7 P- Y( W2 a3 L
- preferencesBuilder1->Commit();8 ?# [1 C8 h, [: f( `
- " U! a( a8 d' E1 Q3 ^5 w' |1 y
- preferencesBuilder1->Destroy();7 V0 q, q& \- A' D+ L
4 [( u. U* ]! H# p0 Q6 g2 T- ; i: a* W0 I- U T: l, \
- NXObject *nXObject1;
4 j+ ?6 k) n h( ?2 q - nXObject1 = sketchInPlaceBuilder1->Commit();
0 B( Y. u& b$ h$ N
+ `' D t. f% V6 R' G- Sketch *sketch1(dynamic_cast<Sketch *>(nXObject1));
+ I1 ]$ |. v' Y) {- o - Features::Feature *feature1;0 O. h1 q& N& p$ [
- feature1 = sketch1->Feature();, o- k. M( o d _, p% k- U
- feature1->SetName("XY-Plane-Sketch");
0 [9 o/ ^+ R8 }" l1 P3 [ I; f - : ^6 O. h6 Q4 h
- sketchInPlaceBuilder1->Destroy();
" w. H" L7 V2 ^# a& h' X
+ _' u, [! L& }7 e- //1 active sketch % l, B/ ]8 u k6 Y
5 R! D' t4 R' C8 {$ K, ?- sketch1->Activate(Sketch::ViewReorientFalse);
: V/ K, {2 R& g- v4 Q& Y' b -
$ W- _3 R2 S1 H6 l+ E, L W( k - double height1 = this->expressionHeight1->GetProperties()->GetDouble("Value");
; h S8 t7 _; u1 k3 ~ - double height2 = this->expressionHeight2->GetProperties()->GetDouble("Value");# {5 \! k0 o1 \0 ] o
- double length = this->expressionLength->GetProperties()->GetDouble("Value");8 q3 H) Q8 q0 L
- // 2.1 create geometry" N C6 N3 u1 \7 u% i: b6 Q
6 P: n% c" x4 t% N) l! z F- Point3d startPoint1(0.0, 0.0, 0.0);
4 z6 B8 V" a, @0 A0 I: L - Point3d endPoint1(0, height1, 0.0);/ e6 v- N5 T/ b
- Point3d endPoint2(length, height1, 0.0);
* H- t( E& _8 x: k. c - Point3d endPoint3(length, height1-height2, 0.0);
* Z; `& ?4 {; @ - Point3d origin = sketch1->Origin();) ?( M5 u: P# ^6 ]
- Point *originPoint = workPart->Points()->CreatePoint(origin);: }: o; S) d: ~* v8 P
- 2 f3 i4 {7 s' a# M0 b* I7 K7 F+ p- Y) E3 W
- Line *line1,*line2,*line3,*line4;/ H) g5 ]+ a% Z3 ?0 W8 z
- line1 = workPart->Curves()->CreateLine(startPoint1, endPoint1);; t u9 d7 k/ ? r
- line2 = workPart->Curves()->CreateLine(endPoint1, endPoint2);4 H; }( A8 a2 {4 r# b4 V& h1 G/ L# j
- line3 = workPart->Curves()->CreateLine(endPoint2, endPoint3);, y4 D2 x/ r1 d/ o( f7 P f) Z
- line4 = workPart->Curves()->CreateLine(endPoint3, startPoint1);
" C4 L7 p. f8 c, B( X - // 2.2 add geometry8 b( S) H2 b* [; Z5 C
; C) h. y: w& x2 }) C1 J4 D- sketch1->AddGeometry(line1,Sketch::InferConstraintsOptionInferCoincidentConstraints);. j Z6 B7 {2 s( ~( h, s
- sketch1->AddGeometry(line2,Sketch::InferConstraintsOptionInferCoincidentConstraints);5 T i' g3 k- y
- sketch1->AddGeometry(line3,Sketch::InferConstraintsOptionInferCoincidentConstraints);# M) u/ u: ?5 H9 A4 _: q8 K
- sketch1->AddGeometry(line4,Sketch::InferConstraintsOptionInferCoincidentConstraints);
. G" h7 I8 Q0 s& B8 C6 ~4 T9 @* A - * J3 b H2 w$ ~" x8 u1 N& t
- //3 add constraints ( gemo); P, S! p2 R5 c: \6 }% t- i8 h$ F8 X
- % D. U+ V1 @" }( e/ N, k* h' x
- Sketch::ConstraintGeometry geomline1;
2 Y7 w5 O8 n7 d% b6 |# E - geomline1.Geometry = line1;
5 Z; Z' g2 _' l) |) L' [! @ - geomline1.PointType = Sketch::ConstraintPointTypeNone;
3 z4 y$ o0 [9 `' g - geomline1.SplineDefiningPointIndex = 0;
1 d# }( W, F) B5 u3 E" @ - sketch1->CreateVerticalConstraint(geomline1);
; }5 u0 b$ S) n/ S3 l
! ~% e9 V- b* a4 C- Sketch::ConstraintGeometry geomline2;
3 h: ]! `$ I2 s8 P, p4 B* J - geomline2.Geometry = line2;" @7 n# e7 W/ W+ ~
- geomline2.PointType = Sketch::ConstraintPointTypeNone;3 E3 t* C" H5 N% ]' m( G
- geomline2.SplineDefiningPointIndex = 0;
4 o4 V* v% {/ s6 z - sketch1->CreateHorizontalConstraint(geomline2);( R( g9 h7 n& s [5 i1 ]/ T4 \6 | G
6 J) X# k1 y7 @+ a0 a8 S: l- Sketch::ConstraintGeometry geomline3;
: W, q3 U- n' c2 V4 L - geomline3.Geometry = line3;
. N; f; T: \% @ - geomline3.PointType = Sketch::ConstraintPointTypeNone;+ Q: S; U; M6 f) D4 R# ]2 F
- geomline3.SplineDefiningPointIndex = 0;8 [% v1 m& z1 Q! O) X- L! @
- sketch1->CreateVerticalConstraint(geomline3);7 B" w% K- G" N, J# _' o2 m; }
- ! R0 I% J1 s c
- Sketch::ConstraintGeometry geomline1_startPoint;3 P% A/ z9 L" l: b' ]- U8 j$ R9 ^
- geomline1_startPoint.Geometry = line1;) b3 R( f) d% f: ?$ m& X$ C1 l$ }
- geomline1_startPoint.PointType = Sketch::ConstraintPointTypeStartVertex; G9 w4 g5 J( W+ r
- geomline1.SplineDefiningPointIndex = 0;
1 c5 {% k6 q* ? S0 Y - Sketch::ConstraintGeometry geomline2_originPoint;
}# u ~1 g8 z; ] - geomline2_originPoint.Geometry = originPoint;
$ o# t' f; q: ~) | - geomline2_originPoint.PointType = Sketch::ConstraintPointTypeNone;! H9 d/ c# k* ^. s; Q9 O
- geomline2_originPoint.SplineDefiningPointIndex = 0;& u4 f; C+ S2 P! B8 P9 }3 }* g
- sketch1->CreateCoincidentConstraint(geomline1_startPoint,geomline2_originPoint);" [1 J; c% ~5 [8 M z
! `$ P1 K+ S) m1 q- //4 add constraints (dimension)0 o) h) H. _, z- ^
- " c. v! h$ _4 N& a4 f; |
- NXObject *nullNXObject(NULL);
2 @3 I5 ^/ G' N$ ~1 `: g - K8 e& y& K: A
- 8 l6 F" ]$ I8 f
- stringstream s_height1,s_height2,s_length;, t4 I% b3 t- Z3 y
- s_height1 <<height1;5 p {$ c. A8 Y( O$ p) T5 l
- s_height2 <<height2;2 e: \+ f1 w% r7 l
- s_length <<length;
5 o8 F% }) z+ L2 s& M, w - / s" r7 V" ^& m/ o' X
- Expression *expression1,*expression2,*expression3;
) ^* b8 G7 d4 [8 Y0 f - expression1 = workPart->Expressions()->CreateSystemExpression(s_height1.str());( F) s( c# S8 `+ B6 S+ n6 B, b
- expression2 = workPart->Expressions()->CreateSystemExpression(s_length.str());
( {# x2 P* ^. Y% Y5 _( S3 U& U - expression3 = workPart->Expressions()->CreateSystemExpression(s_height2.str());3 a( y$ i8 D2 i% o4 s
- + Q; B% E: g! ~
- // line1 dimension
$ V) F3 c) i6 N7 s/ B: G3 I
! `6 h( {9 a* e; C# i- Sketch::DimensionGeometry dimLine1_startPoint;' ]" L8 O6 B5 ^, j9 q, q D' D# v
- dimLine1_startPoint.Geometry = line1;
; I% u- ?, k7 Q' ? q0 z - dimLine1_startPoint.AssocType = Sketch::AssocTypeStartPoint;& }4 h5 A8 H Z6 \
- dimLine1_startPoint.AssocValue = 0;/ Q( _1 `% k" {
- dimLine1_startPoint.HelpPoint.X = 0.0;4 X, J A9 ^8 ?/ |9 p y0 {
- dimLine1_startPoint.HelpPoint.Y = 0.0;" @4 x3 Z9 C' f7 r+ Z) T9 S* p
- dimLine1_startPoint.HelpPoint.Z = 0.0;6 u7 j# r" ?/ Z0 U/ V3 i+ I6 ~
- dimLine1_startPoint.View = nullNXObject;
* H) A# v8 W. \% x
: G# l- t+ f. E8 {0 s- Sketch::DimensionGeometry dimLine1_endPoint;& H$ @1 k' |3 I" ?: I$ H" h9 g
- dimLine1_endPoint.Geometry = line1;
_- `) L8 H1 q, Q. m! `* q - dimLine1_endPoint.AssocType = Sketch::AssocTypeEndPoint;
) Y' w' @% k) x9 Z - dimLine1_endPoint.AssocValue = 0;# [$ a% P: O) N& b4 _1 C: K
- dimLine1_endPoint.HelpPoint.X = 0.0;
5 Z/ S7 ^+ t/ t, ~ - dimLine1_endPoint.HelpPoint.Y = 0.0;
4 Y2 ]& [8 c: _4 }; ]! u - dimLine1_endPoint.HelpPoint.Z = 0.0;5 B, a. u- O/ i, k0 Q: m
- dimLine1_endPoint.View = nullNXObject;
+ B# k# g- F0 ]; c# P* w: z - " |4 g8 I3 Z2 T. F' ?7 e7 b) v
- Point3d dimOrigin1(-100, height1/2, 0.0);0 d) T u8 x/ D: S8 F1 N
+ d) t2 X, y; I- sketch1->CreateDimension(Sketch::ConstraintTypeParallelDim, dimLine1_startPoint, dimLine1_endPoint, dimOrigin1, expression1, Sketch::DimensionOptionCreateAsDriving);/ @2 e4 D; ~5 I
. K% X4 v/ F- Y9 d @" q' T! I- ' B7 v& m* i: Q3 l
-
3 a7 s6 t$ A7 L$ k* l0 y - // line2 dimension
: q/ C, Y: l2 \ - \" C) c" N. C Z) B0 f3 N4 ?
- Sketch::DimensionGeometry dimLine2_startPoint;
# K- J2 x( }' ~ - dimLine2_startPoint.Geometry = line2;
) E! ~) ~( q& o, x8 N3 C- I! W - dimLine2_startPoint.AssocType = Sketch::AssocTypeStartPoint;
/ `2 F: V4 C, f: q- C - dimLine2_startPoint.AssocValue = 0;! I, V% ~5 O$ L
- dimLine2_startPoint.HelpPoint.X = 0.0;0 ]2 C; Y) W1 p5 C5 W: `7 v9 e
- dimLine2_startPoint.HelpPoint.Y = 0.0;
% j: K' d- a3 _' x+ D. ^ - dimLine2_startPoint.HelpPoint.Z = 0.0;
$ e0 N' _0 [" M2 j3 h: u# h7 a - dimLine2_startPoint.View = nullNXObject;
8 ~+ Z2 o% g/ i - . P8 b! W0 R1 }4 A
- Sketch::DimensionGeometry dimLine2_endPoint;$ y. w0 c& a `6 a5 c m& R
- dimLine2_endPoint.Geometry = line2;, ?' i$ `/ [' c( ~3 g: d* v# ?
- dimLine2_endPoint.AssocType = Sketch::AssocTypeEndPoint;0 ?1 o+ O4 d% U! z
- dimLine2_endPoint.AssocValue = 0;
: ]4 `, P$ ]1 j1 s7 L( ?: x; n1 c - dimLine2_endPoint.HelpPoint.X = 0.0;
I/ a+ N1 b# ~: n - dimLine2_endPoint.HelpPoint.Y = 0.0;
# h2 V+ s; W0 A) r P" u* E - dimLine2_endPoint.HelpPoint.Z = 0.0;; k" R; o+ v; m- o$ T
- dimLine2_endPoint.View = nullNXObject;& Z6 w) f& ~8 F/ m+ t7 X
- ! C( X; R. s3 G+ m
- Point3d dimOrigin2(length /2,100 + height1, 0.0);4 k6 x, x- g8 i+ p
- ' Z; k7 X; o" Z; u, q7 j
- sketch1->CreateDimension(Sketch::ConstraintTypeParallelDim, dimLine2_startPoint, dimLine2_endPoint, dimOrigin2, expression2, Sketch::DimensionOptionCreateAsDriving);# G) c" Z3 q* z; _ P
6 B1 W: A# A' s( k4 C- / a) K; d1 R- N, ?
-
5 w# N+ \2 X9 [- C- x - // line3 dimension
. \2 K3 w5 [' {- d0 E! I - 3 w* L+ N# V* ]# ~. ?/ y0 t
- Sketch::DimensionGeometry dimLine3_startPoint;
& {( A2 e# b8 S9 F9 l+ o - dimLine3_startPoint.Geometry = line3;6 C- o9 I& Y7 N! |, [
- dimLine3_startPoint.AssocType = Sketch::AssocTypeStartPoint;
, Y5 u8 |. L, Z - dimLine3_startPoint.AssocValue = 0;" J4 ^% _8 L- D3 c
- dimLine3_startPoint.HelpPoint.X = 0.0;
$ o) C; ^9 v% o l, Z - dimLine3_startPoint.HelpPoint.Y = 0.0;: R( x1 f3 U p8 b' u1 m4 U2 E
- dimLine3_startPoint.HelpPoint.Z = 0.0;; K' k% A6 F: F G8 q6 \: z
- dimLine3_startPoint.View = nullNXObject;- c: H8 _0 \* `1 [) M8 H, B
- * I/ {( C ?2 z3 U
- Sketch::DimensionGeometry dimLine3_endPoint;2 _2 D0 [+ q" {- H3 D7 L# B
- dimLine3_endPoint.Geometry = line3;+ R0 z/ X0 _' ~" S; [4 L }& W
- dimLine3_endPoint.AssocType = Sketch::AssocTypeEndPoint;
y L1 G: Y3 |" w4 Q+ a- K - dimLine3_endPoint.AssocValue = 0;9 d, ^% X+ t' ^3 o. Y# ]
- dimLine3_endPoint.HelpPoint.X = 0.0;& l' P* n/ t/ E/ U. f
- dimLine3_endPoint.HelpPoint.Y = 0.0;4 q0 J( ^4 a) Q# Y
- dimLine3_endPoint.HelpPoint.Z = 0.0;
& x& X( B. ~; Y8 o% g7 I: M - dimLine3_endPoint.View = nullNXObject;
6 M, q8 w( T% h, O) j6 F" ~2 w4 A - , {( p/ R' q$ j2 ?; R ]- Y6 T
- Point3d dimOrigin3( 100 + length, height1-height2+ height2 /2 , 0.0);
; G3 U! a' Y% m0 k0 y2 v -
- C4 P( W8 R+ w/ V5 B - sketch1->CreateDimension(Sketch::ConstraintTypeParallelDim, dimLine3_startPoint, dimLine3_endPoint, dimOrigin3, expression3, Sketch::DimensionOptionCreateAsDriving);
! B. `5 R/ Z- ^ - ; X" K! X6 w8 r7 }
- * h' X% ~5 l1 G! ]7 m0 x
5 X# n6 h* j2 m/ h- //5 update & deactive
" r5 R+ U6 \7 h9 T$ p - sketch1->Update();2 B _: c1 ?1 a6 v) F+ l; c
- + p. J" d [, S7 X
- sketch1->Deactivate(Sketch::ViewReorientFalse,Sketch::UpdateLevelModel);
/ a$ |1 Q- n& T9 ]0 I2 A3 P. N - f( M4 z- F; Z. _& @% q
- delete expression1;
; e, U6 x1 W* r, w/ } - delete expression2;
" p9 N& @) H% K) ~8 A! w5 Z - delete expression3;
) M( X6 T5 H* {/ V { - 6 i. Q5 i7 F5 i% J# @/ A
- }
( l9 X' ~- k( T7 A/ s4 F+ e
复制代码
/ j9 n, q6 {- k* N6 [" G! p" y& n: O# E* x
! Z& m2 E; Y- O6 y |8 ^1 n( z( P
8 y* ?: p P& T9 ]; l* e- b
|
|