|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
PLM之家-NX9.0 二次开发实例视频31 NXOpen C++创建基本特征 <1>-草图的创建- p! K9 L6 ?1 X: ?9 O. d3 g
内容:
! V: L* d0 O1 h. F+ O$ K草图作为参数化建模的基础,使用代码实现草图的创建过程,主要是对草图环境的初始化,以及草图约束的添加等问题。% L! q" e/ B7 L# z
目的:% ^& J& D" w# }2 |7 ?
在NX中,使用NXOpen C++可以很方便的进行JA的录制,从而发掘草图约束中尺寸约束和几何约束的规律,通过这种方式,可以快速的完成开发。! f( |- C) `5 E9 Y. [! V
NXOpen C++创建草图基本特征
7 r% Z, y+ @; T8 ^* J
31 NXOpen C++创建基本特征-草图的创建(1)项目介绍: H" }* ~0 B+ d3 w1 j. y, O
31 NXOpen C++创建基本特征-草图的创建(2)UI设计
7 E4 e* I8 B/ Q- P 31 NXOpen C++创建基本特征-草图的创建(3)项目创建
+ @& Z; g0 P+ |$ f) U/ i3 S' x 31 NXOpen C++创建基本特征-草图的创建(4)草图特征创建
' N, y2 q9 }. W; k# G) { 31 NXOpen C++创建基本特征-草图的创建(5)添加几何到草图
- D, F" Q, ~2 H: W" c; R 31 NXOpen C++创建基本特征-草图的创建(6)添加草图几何约束& @6 Q/ _( S8 t' f5 X* ` Z1 S. A8 C
31 NXOpen C++创建基本特征-草图的创建(7)添加草图尺寸约束( {. y+ M/ b8 K4 W+ |8 D
31 NXOpen C++创建基本特征-草图的创建(8)尺寸和UI关联 E$ b6 |! Z+ j0 q: w/ ?
, k6 T/ t# t9 f) J8 ]( e" _
1 d! M6 J* [/ b; w0 F5 S: S1 j
: M, {* Q( h& ~1 }! C
, a8 |1 {( d( z7 Y; y' v: m1 q; E- L; I! q! x2 ]
关键代码分享:
3 N$ h( o! X( U. O( K0 k# g* F; f+ |
0 V* D( g+ a7 v1 m. f9 o- 7 q. _& S& x3 F& I
- void lesson31_createSkeTCh::createIPSketch()
. F8 d0 O1 O% L S) e - {! B$ C# F s+ h6 {4 |
2 e: w6 ?8 ]" e, }1 @% Z8 m$ T- Sketch *nullSketch(NULL);
! j/ N* i" w; k' y. v - SketchInPlaceBuilder *sketchInPlaceBuilder1;: t# O6 A7 B8 m$ K. S% T
- sketchInPlaceBuilder1 = workPart->Sketches()->CreateNewSketchInPlaceBuilder(nullSketch);0 F t% x q! V" Y# S' O
- sketchInPlaceBuilder1->SetPlaneOption(Sketch::PlaneOptionNewPlane);$ X Y2 v2 o: P6 S; {" u
$ Z$ q; n2 ~9 Z: _. x" L- //sketchInPlaceBuilder1->Plane()->SetMethod(PlaneTypes::MethodTypeFixedZ);
. {6 x( [9 x& G3 ~ - $ W4 a* i+ F+ S7 M: B6 g- Y
* g1 ~8 ? d7 [) v- // add preference
( t' q( a8 m5 C6 _# g9 @
7 H* D# D( o3 _7 T( f) u) m- theSession->Preferences()->Sketch()->SetContinuousAutoDimensioning(false);
: R' P0 q, k# k2 G
: C7 w% V) c, d5 z6 y& {( E. w4 j- Drafting::PreferencesBuilder *preferencesBuilder1;% l! @3 E% N: i, T5 E
- preferencesBuilder1 = workPart->SettingsManager()->CreatePreferencesBuilder();
( n! m1 L( F( t/ C) f7 H - preferencesBuilder1->AnnotationStyle()->DimensionStyle()->SetAngularDimensionValuePrecision(3);
. s, o) T6 `0 }+ \- g - preferencesBuilder1->AnnotationStyle()->DimensionStyle()->SetDimensionValuePrecision(3);
t3 V8 ~8 c' I0 e - preferencesBuilder1->Commit();
* O; S) a& r9 Z4 N - 3 I5 F# m1 j: L/ W# A9 j2 Z
- preferencesBuilder1->Destroy();
' f7 ^4 Z9 L6 @9 @: j1 Y1 m
c4 ?+ G: K5 E5 \& N) W. ^- 0 W: x$ g+ x4 G6 y" p) H4 X
- NXObject *nXObject1;/ V( u% W2 x+ e! ]; o; p
- nXObject1 = sketchInPlaceBuilder1->Commit();
2 f1 Q0 i5 W+ i& N5 J/ x& g - ; `, s9 o' Z( c; w
- Sketch *sketch1(dynamic_cast<Sketch *>(nXObject1));! i5 l3 R- G- w. v( G
- Features::Feature *feature1;4 O$ n) d+ }, ~, @8 q
- feature1 = sketch1->Feature();( E/ c7 H( \) J7 ~' r0 I% Y
- feature1->SetName("XY-Plane-Sketch");) ]* i) C# d0 t7 D% N+ X
-
; w2 ~9 k- v% @+ e( h - sketchInPlaceBuilder1->Destroy();
' Z) ^' M! A' d$ u/ ?
7 q; A6 P O5 b" y3 p- //1 active sketch
1 K# A; e, c& g) C
* m3 ~) D7 E: _( s; W- sketch1->Activate(Sketch::ViewReorientFalse);1 c; g4 d. Q5 ?' y
-
* f- }. {5 Y1 ^ - double height1 = this->expressionHeight1->GetProperties()->GetDouble("Value");
3 u9 X, W$ l/ h: ?& q( I - double height2 = this->expressionHeight2->GetProperties()->GetDouble("Value");1 o8 l& e# a7 U$ G
- double length = this->expressionLength->GetProperties()->GetDouble("Value");
" h8 X# `- r- {% n1 G# E( ?3 e - // 2.1 create geometry
2 r) e3 P( T# @( R0 `6 g( g
4 H5 P# I6 G* I% ?$ q$ F- Point3d startPoint1(0.0, 0.0, 0.0);0 H5 ?4 i% x* s+ u" I- R
- Point3d endPoint1(0, height1, 0.0);
1 B" Y/ }1 C; n" A9 k, o7 P2 Y6 L9 m+ R - Point3d endPoint2(length, height1, 0.0);/ b8 u9 U3 v/ g9 s( t
- Point3d endPoint3(length, height1-height2, 0.0);
9 D% U/ V& {* `) `% U. C- l1 G - Point3d origin = sketch1->Origin();1 `) ?& a$ c0 ?; w
- Point *originPoint = workPart->Points()->CreatePoint(origin);' }- q) F2 f/ t2 u0 x( T9 m. g' i
- F8 x& B+ m" p- Line *line1,*line2,*line3,*line4;
, h* ?% o- I& I: C/ E - line1 = workPart->Curves()->CreateLine(startPoint1, endPoint1);# I( j x# p* s( D+ \% k
- line2 = workPart->Curves()->CreateLine(endPoint1, endPoint2);( m# Y) ]& b I6 W7 P
- line3 = workPart->Curves()->CreateLine(endPoint2, endPoint3);
X R) s6 `* X- f t$ ^ - line4 = workPart->Curves()->CreateLine(endPoint3, startPoint1);
/ s# J6 W: E$ k* E# @/ l) V - // 2.2 add geometry# w6 ^9 h; G1 u
- n. }/ ]5 _, {0 W! i) u# l2 W
- sketch1->AddGeometry(line1,Sketch::InferConstraintsOptionInferCoincidentConstraints);
4 @: l" s9 H* n; o& q/ j d) ` - sketch1->AddGeometry(line2,Sketch::InferConstraintsOptionInferCoincidentConstraints);% {; K: T) W; r7 L$ `
- sketch1->AddGeometry(line3,Sketch::InferConstraintsOptionInferCoincidentConstraints);
" q- m8 `, k1 a9 I - sketch1->AddGeometry(line4,Sketch::InferConstraintsOptionInferCoincidentConstraints);3 J& D( v. E1 V6 [# ]
- " P" f* ]! _; l4 B" g1 n
- //3 add constraints ( gemo). H4 a4 s4 R5 W r1 e% Z6 a( F
; q6 x" z# p6 J$ M- Sketch::ConstraintGeometry geomline1;& q7 S8 Z W! p2 H5 ~; z% ?3 t
- geomline1.Geometry = line1;4 r4 I) c, X J# T. z: M
- geomline1.PointType = Sketch::ConstraintPointTypeNone;: t0 k. L5 M- V" O: l3 t+ n" S
- geomline1.SplineDefiningPointIndex = 0;
~. g/ ?& D' j% P- B! |- R0 ^ - sketch1->CreateVerticalConstraint(geomline1);
/ ^9 ^ l% P6 O+ z/ [" U& j
, e% `$ T. ~( i4 y+ \, X- Sketch::ConstraintGeometry geomline2;5 f% Z# |! f* E+ i; {) }# O3 V
- geomline2.Geometry = line2;
& W8 B( M, |0 K r7 e8 t+ D$ C - geomline2.PointType = Sketch::ConstraintPointTypeNone;" C/ `9 q* ]& ]4 D/ V* d" O8 f2 b
- geomline2.SplineDefiningPointIndex = 0;
+ w; ]; M* a* l* w I - sketch1->CreateHorizontalConstraint(geomline2);
9 Q3 w0 _* [8 l3 ~2 B# B - + S+ a$ `" t g
- Sketch::ConstraintGeometry geomline3;
& M4 d, ^7 c+ Z9 D1 K2 o - geomline3.Geometry = line3;
. c3 _+ |: P) |2 L2 o - geomline3.PointType = Sketch::ConstraintPointTypeNone; c$ {5 w7 D( n7 R% t( o
- geomline3.SplineDefiningPointIndex = 0;
$ X3 S/ ~5 p2 K - sketch1->CreateVerticalConstraint(geomline3);
4 H% ]' N# I# H$ M
4 |8 B0 R7 K' {# B) R- Sketch::ConstraintGeometry geomline1_startPoint;5 ?- G: o# }" p n# G/ J
- geomline1_startPoint.Geometry = line1;" S4 a4 X: g9 `8 g" N1 ^3 O% t2 P
- geomline1_startPoint.PointType = Sketch::ConstraintPointTypeStartVertex;& r& }! s- }; v9 K0 n1 S2 s
- geomline1.SplineDefiningPointIndex = 0;* _4 T+ j3 J4 _4 _
- Sketch::ConstraintGeometry geomline2_originPoint;
4 s, O' v! \7 x2 ] - geomline2_originPoint.Geometry = originPoint;* ]( i: I+ f( @8 t
- geomline2_originPoint.PointType = Sketch::ConstraintPointTypeNone;2 T4 a p. P; l* E( j
- geomline2_originPoint.SplineDefiningPointIndex = 0;3 u0 U$ J6 a% G1 \, i/ m8 \& L# p
- sketch1->CreateCoincidentConstraint(geomline1_startPoint,geomline2_originPoint);$ d" u+ w! A* o2 v9 ?# \; S9 X! h
- 9 p3 f u6 c. T- b: \+ F5 ]" B# O
- //4 add constraints (dimension)
# I! @- ^0 n: o- |4 {+ h% ^6 _
: k' w, S$ q3 H- NXObject *nullNXObject(NULL);% T! _! ~ F7 M6 ^" G* x9 y# C6 Y
' Y4 [- ^: G5 h+ z" p
3 a1 R9 \# W7 @6 k' s, w& g" n) ?- stringstream s_height1,s_height2,s_length;
8 z- ^) n" n0 O+ ]& v8 S: k - s_height1 <<height1;$ c" [2 l: I0 ]- V; s- T" @
- s_height2 <<height2;
+ f: F) d3 o" L+ g2 v1 P - s_length <<length;2 p3 q; t8 V/ x8 o6 @$ U
4 g; a9 `8 w6 ~9 c- Expression *expression1,*expression2,*expression3;2 g2 t# b# `" X7 a1 _. U5 g
- expression1 = workPart->Expressions()->CreateSystemExpression(s_height1.str());
8 A8 r q! X! g' M* L* h - expression2 = workPart->Expressions()->CreateSystemExpression(s_length.str());
8 o" Q# e9 E/ \% e* Q1 ]" g; I - expression3 = workPart->Expressions()->CreateSystemExpression(s_height2.str());
& c0 `$ }- M' c, \6 ]( t$ H) v$ w - # i8 g* s8 K9 G4 A, Z' k9 q( h
- // line1 dimension _/ ^, w4 E8 Q
. g# e' E5 w' ]" {5 b: t- Sketch::DimensionGeometry dimLine1_startPoint;
! Z8 D) z4 ?4 L/ x7 \' q+ @ - dimLine1_startPoint.Geometry = line1;, [; V/ f3 O C8 H( b+ H4 ~$ o
- dimLine1_startPoint.AssocType = Sketch::AssocTypeStartPoint;* Z8 V+ Y/ u8 u+ `1 [& U1 ]! L
- dimLine1_startPoint.AssocValue = 0;' {( c U4 W: }( a4 k1 ?$ V; E
- dimLine1_startPoint.HelpPoint.X = 0.0;
0 ^/ Q8 d+ ?, X - dimLine1_startPoint.HelpPoint.Y = 0.0;
' H6 R; l/ V; ^9 u. Z. \% f1 Q& k - dimLine1_startPoint.HelpPoint.Z = 0.0;
3 r( Y" v+ j1 G# Q" f& U8 w& t - dimLine1_startPoint.View = nullNXObject;
: x1 z6 z: ?8 \
9 U3 w3 ^, A/ K2 L- Sketch::DimensionGeometry dimLine1_endPoint;
$ a' ?8 F5 F+ p/ q, P# A+ ~ - dimLine1_endPoint.Geometry = line1;4 t/ b- g4 {: o+ ^
- dimLine1_endPoint.AssocType = Sketch::AssocTypeEndPoint;
2 J; r4 l5 n6 n& u) s+ r, w/ R - dimLine1_endPoint.AssocValue = 0;
% E3 y" e6 F/ r" G" z - dimLine1_endPoint.HelpPoint.X = 0.0;
; L' K/ G, h. u' z - dimLine1_endPoint.HelpPoint.Y = 0.0;
4 T" L8 J) i, O% I' u - dimLine1_endPoint.HelpPoint.Z = 0.0;
. G7 F/ } S1 ~! v - dimLine1_endPoint.View = nullNXObject;
1 E( r% m; Q# c% w* r7 ~; I
) V8 e( K, g i- Point3d dimOrigin1(-100, height1/2, 0.0);
+ h+ V' k' V) O. g$ z6 ` q% Y - 2 J8 P/ {6 h" l/ A. j
- sketch1->CreateDimension(Sketch::ConstraintTypeParallelDim, dimLine1_startPoint, dimLine1_endPoint, dimOrigin1, expression1, Sketch::DimensionOptionCreateAsDriving);
3 R' F! g. i; h7 @ @7 q - + S- p/ _/ S) l c* {
k! m) X$ g) B& ]' g% `- s8 m-
" A \) T/ B/ d - // line2 dimension 8 b$ Z4 u* I+ A7 p
- ) P5 M q7 _/ L- D' k+ l4 L
- Sketch::DimensionGeometry dimLine2_startPoint;) Y! }" O4 m3 Y, u; z( {: N& v% U
- dimLine2_startPoint.Geometry = line2;
5 L- x3 P- }+ P# M/ z' l, g - dimLine2_startPoint.AssocType = Sketch::AssocTypeStartPoint;
- I1 h/ t" q# [" ^& I - dimLine2_startPoint.AssocValue = 0;
: m4 d) a, m8 ? - dimLine2_startPoint.HelpPoint.X = 0.0;
/ M7 s3 w- ^- C. |( _; k3 e - dimLine2_startPoint.HelpPoint.Y = 0.0;7 H) Z y2 X+ A8 b5 }+ C# |
- dimLine2_startPoint.HelpPoint.Z = 0.0;
# N+ L, D+ _9 y0 y6 E - dimLine2_startPoint.View = nullNXObject;% q2 I/ D: p( ?' s! i
7 O. y% K, ` K& J- Sketch::DimensionGeometry dimLine2_endPoint;- D; S8 |- _0 w7 i2 T F* `- S8 q
- dimLine2_endPoint.Geometry = line2;( t; F, W3 l2 t7 g+ Y" l
- dimLine2_endPoint.AssocType = Sketch::AssocTypeEndPoint;
+ ^: E( M( K# p4 s - dimLine2_endPoint.AssocValue = 0;
4 r* b0 \4 U f, K - dimLine2_endPoint.HelpPoint.X = 0.0;+ b" S& v9 u" d! E
- dimLine2_endPoint.HelpPoint.Y = 0.0;# C) K2 C( E# q2 V" _
- dimLine2_endPoint.HelpPoint.Z = 0.0;
G7 M* Z+ ^) L$ h" y8 A5 \3 ?0 _7 A - dimLine2_endPoint.View = nullNXObject;
6 t7 Q9 D5 P3 W/ D* D
3 q d3 Q: a( }; |. q- F3 c" v- Point3d dimOrigin2(length /2,100 + height1, 0.0); j3 d' K. L/ Q
$ w8 n/ w' e/ c4 F- sketch1->CreateDimension(Sketch::ConstraintTypeParallelDim, dimLine2_startPoint, dimLine2_endPoint, dimOrigin2, expression2, Sketch::DimensionOptionCreateAsDriving);% j- Q# p5 G, k y, P$ }
- # x: E1 V; c* \8 Z8 o
$ W/ o, S) H7 y" U. |1 Q+ U-
" n$ G* E, l) q - // line3 dimension 0 K- V; Q z/ A4 @
- + j4 [* O. m3 }$ M! H5 W
- Sketch::DimensionGeometry dimLine3_startPoint;8 J& ~8 t# ?* k8 k# R# a! }- o/ ^9 ~
- dimLine3_startPoint.Geometry = line3;: ~5 _' o" f4 H: H' @
- dimLine3_startPoint.AssocType = Sketch::AssocTypeStartPoint;
5 M' w P& M% S' e5 L - dimLine3_startPoint.AssocValue = 0;
+ _ l9 v$ ^; J1 d - dimLine3_startPoint.HelpPoint.X = 0.0;
0 Q- e# b9 a6 ~) b& ~ - dimLine3_startPoint.HelpPoint.Y = 0.0;
) u3 i* h" U+ Y- ~ P1 J u - dimLine3_startPoint.HelpPoint.Z = 0.0;0 L) Y/ Z1 j+ e, g
- dimLine3_startPoint.View = nullNXObject;7 W3 j( V- e' l& W
- , a. ~ Y$ i! s" H0 ?
- Sketch::DimensionGeometry dimLine3_endPoint; s/ d$ \& q$ y$ L& _
- dimLine3_endPoint.Geometry = line3;
1 t- |( V$ |" ?# j; _( h% v6 K4 r - dimLine3_endPoint.AssocType = Sketch::AssocTypeEndPoint;
4 w8 j# S. X+ j6 R - dimLine3_endPoint.AssocValue = 0;
8 B( w- O/ \- s" f% w - dimLine3_endPoint.HelpPoint.X = 0.0;
8 R- x& [/ e7 {3 V& T; H; o - dimLine3_endPoint.HelpPoint.Y = 0.0;
9 }3 }* k7 u8 a0 P, o) h( m7 Q - dimLine3_endPoint.HelpPoint.Z = 0.0;9 ~9 W% g. E) G$ K8 x$ c1 j
- dimLine3_endPoint.View = nullNXObject;
6 \5 L* b5 |( L R' b; N/ C5 K - 0 _. }% v2 V* P$ I
- Point3d dimOrigin3( 100 + length, height1-height2+ height2 /2 , 0.0);# c) G4 d, J" t" M7 U2 ~4 O! t* P
- ( n4 Z- t+ o6 B3 @; @0 }
- sketch1->CreateDimension(Sketch::ConstraintTypeParallelDim, dimLine3_startPoint, dimLine3_endPoint, dimOrigin3, expression3, Sketch::DimensionOptionCreateAsDriving);
/ e, P$ h; g1 F! S# _. W$ G @8 Y
5 p$ Q. i& ~+ U& X7 ?8 G
8 M% M% N* S# B& x
: e4 l0 ^+ e7 {8 ?3 S# _- //5 update & deactive
, P* q4 E& R3 g - sketch1->Update();2 @# [3 w# ^/ k8 T3 p/ D( p4 {
- % k( p" l5 J: {: l+ Z: }
- sketch1->Deactivate(Sketch::ViewReorientFalse,Sketch::UpdateLevelModel); a+ `; {: U) w7 I7 P3 m* P5 ]
1 ^% ^/ c: q$ [3 k- delete expression1;6 \/ ^, ~& E9 \, `% @1 c3 i
- delete expression2;: q: m! q) S! v4 g) ]
- delete expression3;
( ]# I& e; P- X8 r: \/ o$ Q" e -
r2 u# P$ B- ~* Z- R( A - }+ S; ^3 }' h ~ ?) Z
复制代码 & t& u* h$ L4 j. ], }
# t9 W8 @; z4 w7 X, U5 H9 y
2 W- u; J' ^! B; H% U, [0 j
5 k: Q% A9 ~: s: f& a |
|