|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
PLM之家-NX9.0 二次开发实例视频31 NXOpen C++创建基本特征 <1>-草图的创建( e2 Q% `; k! s9 F
内容:. H. P, |# S5 l
草图作为参数化建模的基础,使用代码实现草图的创建过程,主要是对草图环境的初始化,以及草图约束的添加等问题。
$ z) y5 M5 L' M! [, q9 A- q$ Q目的:
! r3 G y# c3 k# X9 Y! _2 w( C在NX中,使用NXOpen C++可以很方便的进行JA的录制,从而发掘草图约束中尺寸约束和几何约束的规律,通过这种方式,可以快速的完成开发。! h- f* d- P+ R& @& c
NXOpen C++创建草图基本特征
7 H, {3 I, f" z1 z6 M 31 NXOpen C++创建基本特征-草图的创建(1)项目介绍( }7 H+ R8 a3 ?, ]9 @
31 NXOpen C++创建基本特征-草图的创建(2)UI设计% X0 b$ }0 T+ }. [) E% N; P
31 NXOpen C++创建基本特征-草图的创建(3)项目创建0 `* @3 L% |- L0 ?* U
31 NXOpen C++创建基本特征-草图的创建(4)草图特征创建
/ c6 u. p/ H! K' ]2 u8 _ 31 NXOpen C++创建基本特征-草图的创建(5)添加几何到草图
9 X. u s6 R# K+ x5 t5 v 31 NXOpen C++创建基本特征-草图的创建(6)添加草图几何约束/ V6 h* {/ }+ g% k) e5 P, o" \
31 NXOpen C++创建基本特征-草图的创建(7)添加草图尺寸约束
8 N& t) g# D0 Z5 U 31 NXOpen C++创建基本特征-草图的创建(8)尺寸和UI关联$ |1 m6 S- |& C/ X0 H! u% @( }
8 }9 c. }5 p6 v7 a$ B. c
/ n8 M: j6 M1 H% v$ {) g+ W/ l/ R; o" h8 B5 w' k6 L
) Q0 m* [5 g; _ M* K3 h3 U
1 {- Y, k) h( }
关键代码分享:
& E1 t4 |+ |4 ?% s
7 ?) w" G" _: g/ ~& ~+ q4 ~( J6 l- m/ ~0 S& @& I- S6 S: g" I
- 6 [; P% T( w- Q, P
- void lesson31_createSkeTCh::createIPSketch()
4 j6 X6 ~& h6 v9 c) v o8 ` - {+ d- U; z6 h! K# j& |7 S7 p1 p
- 8 F D1 R1 I" y5 l7 }
- Sketch *nullSketch(NULL);
' K) J+ v; i- _+ N% P - SketchInPlaceBuilder *sketchInPlaceBuilder1;* `* b- i5 o$ ^: ?4 f) q
- sketchInPlaceBuilder1 = workPart->Sketches()->CreateNewSketchInPlaceBuilder(nullSketch);- J; A0 J. w4 p2 _8 `8 C
- sketchInPlaceBuilder1->SetPlaneOption(Sketch::PlaneOptionNewPlane);
+ G" D( L8 l2 g
! Z' R& E! H4 Q& M! t) P. _- //sketchInPlaceBuilder1->Plane()->SetMethod(PlaneTypes::MethodTypeFixedZ);5 w# b0 w# ~ e! p
- 3 O/ } I: K- u+ J7 x+ X
- + [ Q, q; @/ e8 m: V! m3 W
- // add preference. b% L* ~5 `3 w, C4 B
- ! L; A0 i# U# y# x% D
- theSession->Preferences()->Sketch()->SetContinuousAutoDimensioning(false);
( ?9 H% K. \- Z
$ g0 q9 ^* D1 p& s E: ?" z- Drafting::PreferencesBuilder *preferencesBuilder1;
! O) J# E0 O: } - preferencesBuilder1 = workPart->SettingsManager()->CreatePreferencesBuilder();
C: T+ W$ ?) P( Y - preferencesBuilder1->AnnotationStyle()->DimensionStyle()->SetAngularDimensionValuePrecision(3);* S; K6 o4 U0 ?/ V( x0 x( ]
- preferencesBuilder1->AnnotationStyle()->DimensionStyle()->SetDimensionValuePrecision(3);
( d, |$ @- N9 y% F1 M, q0 R - preferencesBuilder1->Commit();8 V0 v- i) G( C* X
- $ T: V/ C0 W7 v$ o
- preferencesBuilder1->Destroy();) S# S/ y( R5 i/ k9 I* c
- : @! O4 G: Z0 H) p0 ^
- ! @2 Q/ ]" Q) w6 R- w3 U f
- NXObject *nXObject1;
4 Z( x' z4 m: W* y8 Z$ C4 j" l - nXObject1 = sketchInPlaceBuilder1->Commit();
$ A( V* @) R8 c$ T8 M
* A5 P4 D6 p- a" @7 u- Sketch *sketch1(dynamic_cast<Sketch *>(nXObject1));, t* |( W2 K8 N
- Features::Feature *feature1;
" ~# R1 I9 Y$ v% J - feature1 = sketch1->Feature();8 i- k3 p+ ?& ~# D
- feature1->SetName("XY-Plane-Sketch");
: M2 X, Q% ~5 P! _* _' { -
- D( K# X$ d5 s0 S5 F2 T - sketchInPlaceBuilder1->Destroy();
# m: I7 a' N$ h3 g
. G) U+ k# ]( t8 J$ f- //1 active sketch
1 t& H6 M! _" P: z: y0 U1 j: [
" M9 c$ J$ k( a% k- sketch1->Activate(Sketch::ViewReorientFalse);# Y4 [) [- y! f7 _4 ~2 @6 [5 W$ w
- - A( T, R# [ h/ X9 S2 t
- double height1 = this->expressionHeight1->GetProperties()->GetDouble("Value");: o4 h ^2 G- r& X
- double height2 = this->expressionHeight2->GetProperties()->GetDouble("Value");0 s1 r3 f5 k, O; I
- double length = this->expressionLength->GetProperties()->GetDouble("Value");
- e6 ^8 D+ G6 O3 M9 Q Q - // 2.1 create geometry
- q( E1 a0 P% z' H
2 i- Z& T6 n t* d* J4 [- Point3d startPoint1(0.0, 0.0, 0.0);
% ?" O0 f" a7 }! B. [& ? - Point3d endPoint1(0, height1, 0.0);/ h, Z. \5 Q- z9 @$ }, k+ i$ `
- Point3d endPoint2(length, height1, 0.0);9 n. K2 k, _1 ?( l$ X% J7 |. I
- Point3d endPoint3(length, height1-height2, 0.0);
3 U7 i2 D+ U0 v - Point3d origin = sketch1->Origin();6 e* c( Q3 q" A) A; |# p6 @
- Point *originPoint = workPart->Points()->CreatePoint(origin);
9 H, [7 b4 U1 } _: A
. d* J1 z7 K- v) w0 R# h- Line *line1,*line2,*line3,*line4;
3 X( J$ a5 z1 T: G - line1 = workPart->Curves()->CreateLine(startPoint1, endPoint1);0 s) |. b8 V( c [6 A. U( p5 Q
- line2 = workPart->Curves()->CreateLine(endPoint1, endPoint2);' W" h& v, O! L4 G' V# x
- line3 = workPart->Curves()->CreateLine(endPoint2, endPoint3);
' r% ?2 X. @# M$ v) b3 \ - line4 = workPart->Curves()->CreateLine(endPoint3, startPoint1);
5 I% w3 i. D H' w) ]0 k - // 2.2 add geometry4 o4 w" b# K" X. j# W6 T% A! Y' a
$ Y# _: O9 q/ j+ ^5 \- sketch1->AddGeometry(line1,Sketch::InferConstraintsOptionInferCoincidentConstraints);) ~1 v+ V( X+ `4 d6 I, z
- sketch1->AddGeometry(line2,Sketch::InferConstraintsOptionInferCoincidentConstraints);) [: A6 i+ t) |
- sketch1->AddGeometry(line3,Sketch::InferConstraintsOptionInferCoincidentConstraints);8 \8 `7 E' [+ C! E. j9 F
- sketch1->AddGeometry(line4,Sketch::InferConstraintsOptionInferCoincidentConstraints);8 U: e* C) w, |8 E/ Y% h
- ' `: O% _: a1 B. V' j3 @( j4 H
- //3 add constraints ( gemo)9 S$ W( W- R, v% V- F; O
- 9 W b4 h" b# _8 f) [# k$ x# X
- Sketch::ConstraintGeometry geomline1;. m7 x# l4 P: r, y& Q1 }
- geomline1.Geometry = line1;9 |) [6 L: `7 q2 \. r$ Q' h' N" e+ v
- geomline1.PointType = Sketch::ConstraintPointTypeNone;3 {& P" F( M- U, q& x
- geomline1.SplineDefiningPointIndex = 0;
( `) T2 Q1 J' o8 p: p - sketch1->CreateVerticalConstraint(geomline1);
7 D* ?0 N+ f4 f/ G& x U v2 U - 3 k/ C- w( n3 I* x' D
- Sketch::ConstraintGeometry geomline2;# H4 y- ~) A% A7 C& Y+ z$ j2 |
- geomline2.Geometry = line2;
2 F! K. S; G5 x" } - geomline2.PointType = Sketch::ConstraintPointTypeNone;9 l7 q$ M+ a, z' a! E% Q F7 _0 N
- geomline2.SplineDefiningPointIndex = 0;
9 k8 j" ]$ _ P# u - sketch1->CreateHorizontalConstraint(geomline2);
5 X% t- [0 u6 j" I% a2 o; r* s" R- |7 c - : g/ u1 o X5 k$ c3 W4 ]3 _
- Sketch::ConstraintGeometry geomline3;
& Z/ a7 U4 ~& i& N - geomline3.Geometry = line3;4 p5 Y) a: Y' t: M
- geomline3.PointType = Sketch::ConstraintPointTypeNone;
, S! y2 h o5 e+ k; T2 q( Q+ z - geomline3.SplineDefiningPointIndex = 0;
3 j6 j5 Z+ L( n o; O" W - sketch1->CreateVerticalConstraint(geomline3);
; F2 p9 g- v8 c - 0 h7 M& Z( s, Z8 w% { a2 ~4 Q) m
- Sketch::ConstraintGeometry geomline1_startPoint;
1 Z; [# |/ D; f - geomline1_startPoint.Geometry = line1;
8 v) a. L, B0 p; J. t: U' M$ s1 a - geomline1_startPoint.PointType = Sketch::ConstraintPointTypeStartVertex;' l; K* h* J1 F6 G
- geomline1.SplineDefiningPointIndex = 0;! j8 ~2 z& n7 k, k, i7 Y7 V3 a
- Sketch::ConstraintGeometry geomline2_originPoint;! e- Y# ?# r3 F! [) s9 p0 t
- geomline2_originPoint.Geometry = originPoint;+ `& f* F+ E$ V- J3 e
- geomline2_originPoint.PointType = Sketch::ConstraintPointTypeNone;, F9 C; a0 `0 I K% H6 `
- geomline2_originPoint.SplineDefiningPointIndex = 0;! T7 e' Q, |0 I6 l$ t1 U/ e
- sketch1->CreateCoincidentConstraint(geomline1_startPoint,geomline2_originPoint);' l+ g. m$ I# }0 o
7 l/ U2 r2 J6 m2 }- //4 add constraints (dimension)# A$ n6 e+ E0 `" v9 k9 {) x
- 7 _- n! |3 J4 B: s. a" B j
- NXObject *nullNXObject(NULL);7 S2 @* c( N0 C& x; V+ E4 C
* Q N5 v6 ?+ l' v2 X- 9 \4 k) o0 ^+ ^! v* H0 n) `/ D- m
- stringstream s_height1,s_height2,s_length;) O/ `8 l1 ?# J' [+ D* S
- s_height1 <<height1;& l7 v$ Q: b. O- N
- s_height2 <<height2;
2 t4 }! f5 b4 q6 R( P+ G - s_length <<length;/ ?9 Y$ ~! j. O" f. ?9 k7 x
! P# |7 M& s4 a3 b. u1 |4 O& c# u- Expression *expression1,*expression2,*expression3;
' u, z9 E( S+ a7 e# g - expression1 = workPart->Expressions()->CreateSystemExpression(s_height1.str()); \* _' m- Y" i! ~
- expression2 = workPart->Expressions()->CreateSystemExpression(s_length.str());
9 \9 _4 c$ S9 z - expression3 = workPart->Expressions()->CreateSystemExpression(s_height2.str());8 h, h2 M2 k' Z0 N4 ]" B' r- g
$ [6 |& p& t. o' \2 q- // line1 dimension
. _; t) I f2 ^% G: \# { - 1 M* e3 d4 W# w# b* R0 a! R5 ~4 c
- Sketch::DimensionGeometry dimLine1_startPoint;" O/ B& k7 h! |2 {: g$ _, i1 s2 p
- dimLine1_startPoint.Geometry = line1;
3 C9 G1 L6 l! h3 ^6 l* d8 [* V$ @' G5 E - dimLine1_startPoint.AssocType = Sketch::AssocTypeStartPoint;
4 Z( f& O' l* F' K - dimLine1_startPoint.AssocValue = 0;
8 z' R. |& G% t+ Q- P - dimLine1_startPoint.HelpPoint.X = 0.0;" v8 R# L1 P! `4 s6 r2 l, \
- dimLine1_startPoint.HelpPoint.Y = 0.0;7 G5 V/ K5 ?) ?0 y7 o# N
- dimLine1_startPoint.HelpPoint.Z = 0.0;
' _ P; t3 m. E$ T - dimLine1_startPoint.View = nullNXObject;
5 k+ [. g% Z4 c9 R6 ?; l/ \
) Y: W* ~% `( ?# E- Sketch::DimensionGeometry dimLine1_endPoint;
% K* q% L+ Z4 s - dimLine1_endPoint.Geometry = line1;
+ w g0 i! f9 i) s6 z5 H0 L$ b - dimLine1_endPoint.AssocType = Sketch::AssocTypeEndPoint;9 g+ T" U5 p6 S8 m
- dimLine1_endPoint.AssocValue = 0;8 O/ K/ T. k- g
- dimLine1_endPoint.HelpPoint.X = 0.0;
2 F9 b) a1 f/ i - dimLine1_endPoint.HelpPoint.Y = 0.0;
, _, Z: u4 s; N9 x: V* ^& a - dimLine1_endPoint.HelpPoint.Z = 0.0;0 G- r. u5 s& k8 V
- dimLine1_endPoint.View = nullNXObject;: t8 w. h4 b7 w9 V: `8 W# _7 J
- A8 r* F& s) @4 v" w
- Point3d dimOrigin1(-100, height1/2, 0.0);
3 Y0 U3 z" G7 I/ e5 z - L1 Z7 H4 Y Z2 |1 I) N
- sketch1->CreateDimension(Sketch::ConstraintTypeParallelDim, dimLine1_startPoint, dimLine1_endPoint, dimOrigin1, expression1, Sketch::DimensionOptionCreateAsDriving);
( f \! `- L7 j1 M! d - $ B& m9 b( ?( e: m% ]& }
8 A& G- W3 H0 d4 H% d( f- 9 a) i5 P3 a6 F* w$ z9 K F4 S
- // line2 dimension
# B: Z" l" y8 M% O - * b) Z" @. F$ j+ \
- Sketch::DimensionGeometry dimLine2_startPoint;% F- t* s, y, F
- dimLine2_startPoint.Geometry = line2;
M2 G* q6 P! J4 E9 y0 u W8 ` - dimLine2_startPoint.AssocType = Sketch::AssocTypeStartPoint;
: l6 I* n/ J& d+ R5 [4 m - dimLine2_startPoint.AssocValue = 0;+ S5 F! R& v. T( m! `
- dimLine2_startPoint.HelpPoint.X = 0.0;
0 i5 O. u8 E" d# g. i - dimLine2_startPoint.HelpPoint.Y = 0.0;: {6 ?) V' J: a* ^8 c
- dimLine2_startPoint.HelpPoint.Z = 0.0;4 \+ z' ~) p* h9 v6 A
- dimLine2_startPoint.View = nullNXObject;
3 ^% C/ I# h$ ?% c3 s$ C - " c" f9 m7 J8 S( K ^
- Sketch::DimensionGeometry dimLine2_endPoint;5 _! g5 \! Q+ H# _
- dimLine2_endPoint.Geometry = line2;
6 f7 M+ V; V% b6 \% H - dimLine2_endPoint.AssocType = Sketch::AssocTypeEndPoint;" [# }' f( V* \
- dimLine2_endPoint.AssocValue = 0;
$ h" f' O+ H, E - dimLine2_endPoint.HelpPoint.X = 0.0;5 P: {( K+ q4 ]# H8 R2 m4 q5 a4 c, A
- dimLine2_endPoint.HelpPoint.Y = 0.0;
6 d- n3 [9 v9 y& R. C$ x: C - dimLine2_endPoint.HelpPoint.Z = 0.0;7 w& F1 Z: `6 ?0 D% R
- dimLine2_endPoint.View = nullNXObject;
3 H( q' x' q2 ?$ j/ C - 5 n4 ?3 @# \$ K8 \" E0 z
- Point3d dimOrigin2(length /2,100 + height1, 0.0);
+ R- [4 `: [. o) m O
% b& G- f2 W8 r2 u* P4 o& Q- sketch1->CreateDimension(Sketch::ConstraintTypeParallelDim, dimLine2_startPoint, dimLine2_endPoint, dimOrigin2, expression2, Sketch::DimensionOptionCreateAsDriving);0 Z. u& E# F; h
I- r5 S1 M1 G) ~, Y. }6 t- 2 r6 t1 b% p- G( j P: | G
-
- W* w) `0 e8 D5 z - // line3 dimension
7 I! _/ B$ h! X! r6 I9 ? - - `- Q9 ?+ d3 b- i$ ]# x
- Sketch::DimensionGeometry dimLine3_startPoint;
L& ^+ L7 i" }9 q+ S - dimLine3_startPoint.Geometry = line3;
( P) x) `* [. P, f0 N( D9 b - dimLine3_startPoint.AssocType = Sketch::AssocTypeStartPoint;/ d' A3 r3 w4 {2 j( Y
- dimLine3_startPoint.AssocValue = 0;* N% X6 L) B3 C1 V2 z
- dimLine3_startPoint.HelpPoint.X = 0.0;
3 T5 G% R `1 _# T4 f. Z \ - dimLine3_startPoint.HelpPoint.Y = 0.0;: y9 g w6 M; }$ g, a6 ^( P
- dimLine3_startPoint.HelpPoint.Z = 0.0;
- y9 R" ?1 x1 C; ^: t - dimLine3_startPoint.View = nullNXObject;( J$ C0 e+ `, y3 Q* r# T
- 6 a( a& S3 c" R2 T: g- d3 K
- Sketch::DimensionGeometry dimLine3_endPoint;! P. R( L2 {% H, G- l, |2 P
- dimLine3_endPoint.Geometry = line3;/ {: G2 H$ k) l/ r
- dimLine3_endPoint.AssocType = Sketch::AssocTypeEndPoint;
0 B0 v9 |( ?# M& g5 O - dimLine3_endPoint.AssocValue = 0; o% V1 W1 H! Z* s' T# f
- dimLine3_endPoint.HelpPoint.X = 0.0;6 _6 B# Z5 S7 I! ?
- dimLine3_endPoint.HelpPoint.Y = 0.0;
' |1 a" E# \% m# n+ l - dimLine3_endPoint.HelpPoint.Z = 0.0;
& D/ C1 |' X8 a/ ^! h$ z& l& V- n - dimLine3_endPoint.View = nullNXObject;
' E B$ O) r% r( u( Q - & [& u' l' e% b6 N. k
- Point3d dimOrigin3( 100 + length, height1-height2+ height2 /2 , 0.0);; u- s0 J4 Z$ D" D1 }2 h0 J
-
, h" N: ~: D5 J5 B+ w4 G/ f+ ~ - sketch1->CreateDimension(Sketch::ConstraintTypeParallelDim, dimLine3_startPoint, dimLine3_endPoint, dimOrigin3, expression3, Sketch::DimensionOptionCreateAsDriving);* c; d+ \2 |$ `: N5 \% j
. ^5 ]7 V9 M8 i E6 e$ j
2 J* u: O; c C* \) {3 f- ! J S0 P E& f1 u# F2 @3 x# W1 {
- //5 update & deactive
% U- I. h& {" r5 S - sketch1->Update();' U9 y' U2 I1 O8 t R0 J
- 2 K* V4 b7 l# ?) u$ G9 @: d8 _0 P
- sketch1->Deactivate(Sketch::ViewReorientFalse,Sketch::UpdateLevelModel);
4 g1 y' G6 L) }# `: [8 v - , d( s6 U# l2 |* A' o+ D
- delete expression1;
1 R9 k$ C' S' u- P$ T - delete expression2;
2 x. A' z; R- @6 H; W$ m# o - delete expression3;
4 n4 B _( P7 W0 e) w/ W8 R4 x -
5 x& j4 I# p* z, j - }$ Z( A: s7 i9 p) |9 a3 T+ l) \
复制代码
0 a4 p* \3 A. i5 F+ m5 l% e% I) n8 F" L' k% U, D, ^
9 V) E0 B2 z$ d# H& Y
9 F2 u/ X+ B/ r4 b! Q/ e |
|