|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
PLM之家-NX9.0 二次开发实例视频31 NXOpen C++创建基本特征 <1>-草图的创建
* t" [4 S- h9 J; Y内容:
2 F4 w6 @! K, T' P5 ?$ E' g草图作为参数化建模的基础,使用代码实现草图的创建过程,主要是对草图环境的初始化,以及草图约束的添加等问题。+ q7 i2 u( C2 J) D1 u3 M
目的:
4 p9 w- ?6 J7 V( }9 V在NX中,使用NXOpen C++可以很方便的进行JA的录制,从而发掘草图约束中尺寸约束和几何约束的规律,通过这种方式,可以快速的完成开发。. U S! G2 K- i4 E" F
NXOpen C++创建草图基本特征
" P9 L5 O4 }$ ?) ?: D0 E
31 NXOpen C++创建基本特征-草图的创建(1)项目介绍
7 V4 }7 `2 C1 g0 n/ d0 G0 ?' E 31 NXOpen C++创建基本特征-草图的创建(2)UI设计+ w |% I) S' {% s. g# _
31 NXOpen C++创建基本特征-草图的创建(3)项目创建
3 J, X! e# }8 r9 G. }' v! f5 w 31 NXOpen C++创建基本特征-草图的创建(4)草图特征创建# P+ v# N% [% G& L5 k) ^
31 NXOpen C++创建基本特征-草图的创建(5)添加几何到草图
& \7 E& e% ^" t, r" M9 X 31 NXOpen C++创建基本特征-草图的创建(6)添加草图几何约束
- U) v; }/ o6 l 31 NXOpen C++创建基本特征-草图的创建(7)添加草图尺寸约束" @9 d$ i3 _' m/ Q% o2 z
31 NXOpen C++创建基本特征-草图的创建(8)尺寸和UI关联
! m L8 ^6 X; V, m q. j I5 G$ O" v0 b. z
P* J# D+ g1 ]3 B8 D: b" y L9 ~
8 `7 ^7 q$ B4 d
7 v! Q2 \* \$ Z$ X; p
8 Y$ J3 @! n# f0 `2 u# \关键代码分享:
& O! h2 Z T% h0 P3 w& c( `. v: a- T
/ a$ I; i+ x, z6 t; B
9 ~( q$ R; B6 i* ^; a/ d- void lesson31_createSkeTCh::createIPSketch()2 j$ z9 C1 w4 b6 u, Z! A( m$ i$ C6 e$ c
- {
& \ @1 J) @( C) X' E# p9 ` - $ z7 s- P* ^: K5 F2 p4 T& n* v
- Sketch *nullSketch(NULL);
' P1 |+ A1 ?* A5 T" C4 e - SketchInPlaceBuilder *sketchInPlaceBuilder1;) f" E% h2 M: ?! v; K2 j. a2 R
- sketchInPlaceBuilder1 = workPart->Sketches()->CreateNewSketchInPlaceBuilder(nullSketch);
$ q# R+ i& L& |! f. j$ ~% D- k8 t - sketchInPlaceBuilder1->SetPlaneOption(Sketch::PlaneOptionNewPlane);% R" R# h1 O4 ~8 \0 r# F
- , F; L( Q0 I. r, z: i4 G
- //sketchInPlaceBuilder1->Plane()->SetMethod(PlaneTypes::MethodTypeFixedZ);1 M+ P1 k- G1 l7 u/ \# P1 ^8 l& }
0 B6 @, n: X1 W+ E9 F
R' K3 a6 O( T- // add preference
8 I2 _4 |8 r1 B% {( T" z o - 4 [$ u5 R( E6 w: V' v
- theSession->Preferences()->Sketch()->SetContinuousAutoDimensioning(false);
# b6 x) F! O: {- F& J
0 M" l. J7 ?, `2 J- h8 i- Drafting::PreferencesBuilder *preferencesBuilder1;
* E; F9 v- ^0 e- k. X* B+ H' n - preferencesBuilder1 = workPart->SettingsManager()->CreatePreferencesBuilder();
$ P$ l5 C. K. D- b( u3 t - preferencesBuilder1->AnnotationStyle()->DimensionStyle()->SetAngularDimensionValuePrecision(3);
3 l, d a% x+ ^! x6 I$ L. r - preferencesBuilder1->AnnotationStyle()->DimensionStyle()->SetDimensionValuePrecision(3);
! G5 c% g( g @7 Q6 Z2 n- n! P - preferencesBuilder1->Commit();; \+ H B$ t, o% _( A" H
- 5 j% n! M* ]. _' g0 f/ ^
- preferencesBuilder1->Destroy();
" l, ^. ^, y& e. q7 \ - * g$ u$ v' ^$ p% d, y) W6 M- p
- - o/ h1 {* z$ V
- NXObject *nXObject1;
1 n, i) J' ^& b3 F3 ~ - nXObject1 = sketchInPlaceBuilder1->Commit();+ L8 e' _9 H8 D; J5 L$ O" j9 a
3 @5 g; c9 K, w; o4 c- Sketch *sketch1(dynamic_cast<Sketch *>(nXObject1));
! Y/ L2 ?, y' d, S - Features::Feature *feature1;
- M/ Q4 a* V8 D( M" ]3 N) s - feature1 = sketch1->Feature();6 Z8 Z7 Q& G; Q5 | a
- feature1->SetName("XY-Plane-Sketch");( V6 j" W6 b% o% T+ w
-
A8 s, n" h g w4 m - sketchInPlaceBuilder1->Destroy();
' A8 `7 T3 Y( Q" D. m
: N9 c/ X( X2 w$ s- //1 active sketch " c& p% g- U5 d6 @; P" K
- , X, l E& K, h' |% v1 i3 l' Z
- sketch1->Activate(Sketch::ViewReorientFalse);) ]. g! K5 _& ]$ ]1 ]2 B) N
-
]( U& |+ r. {4 O - double height1 = this->expressionHeight1->GetProperties()->GetDouble("Value");+ s. G' W* Q/ h8 \$ V; H
- double height2 = this->expressionHeight2->GetProperties()->GetDouble("Value");6 n% B4 X- b! \# X
- double length = this->expressionLength->GetProperties()->GetDouble("Value");+ E) Y8 s' t* E* J9 g+ c
- // 2.1 create geometry
( n/ t8 Q( I3 [
5 X; w! H# _! X5 Z/ n& w: z e) W- Point3d startPoint1(0.0, 0.0, 0.0);
! u4 [/ z) _( }. @" j - Point3d endPoint1(0, height1, 0.0);% i! f$ N- g- z: U! ?( i- K
- Point3d endPoint2(length, height1, 0.0);/ x! V+ H2 H+ @ ~( {' f& W) I
- Point3d endPoint3(length, height1-height2, 0.0);$ [' t/ a! t9 H, N* {
- Point3d origin = sketch1->Origin();
7 x' a' l* R$ w! X" h - Point *originPoint = workPart->Points()->CreatePoint(origin);9 u4 b" A' k7 g* w& r* Z& v
- # ^9 [/ F' B+ W1 Y' I" d
- Line *line1,*line2,*line3,*line4;
3 _+ S9 |+ I% A/ l9 x# ] - line1 = workPart->Curves()->CreateLine(startPoint1, endPoint1);
- G1 l, Q" g; I' A7 g( W - line2 = workPart->Curves()->CreateLine(endPoint1, endPoint2);
9 O' L$ K" \0 _2 g' y* x) h - line3 = workPart->Curves()->CreateLine(endPoint2, endPoint3);
( M2 V+ w2 r) f2 \( U$ ]/ c/ Q3 C1 M2 U - line4 = workPart->Curves()->CreateLine(endPoint3, startPoint1);6 L% l* I _' c9 l) y
- // 2.2 add geometry
7 j) d- z' W4 X5 b3 L/ w - 0 W( u! k: P) s2 S/ W* h2 B8 y
- sketch1->AddGeometry(line1,Sketch::InferConstraintsOptionInferCoincidentConstraints);7 g+ }, h& G9 {! l* W* i! Y
- sketch1->AddGeometry(line2,Sketch::InferConstraintsOptionInferCoincidentConstraints);0 p6 B+ K. I6 H
- sketch1->AddGeometry(line3,Sketch::InferConstraintsOptionInferCoincidentConstraints);
. P0 j( w$ U' U$ c - sketch1->AddGeometry(line4,Sketch::InferConstraintsOptionInferCoincidentConstraints);
3 u- L2 T. ^: W5 h* ^ - 7 ]- L8 d" ]+ L$ E4 S3 }
- //3 add constraints ( gemo). i5 u! c0 O5 Y6 w, s
- " ^& Z4 U) B3 G3 ]
- Sketch::ConstraintGeometry geomline1;7 C4 l& h; k5 b8 O g- p/ r1 G
- geomline1.Geometry = line1;& ^* J C z$ N. m/ q+ `
- geomline1.PointType = Sketch::ConstraintPointTypeNone;
: |5 v2 K0 X, ^2 u, u0 S. C - geomline1.SplineDefiningPointIndex = 0;
& b2 t' v) B5 j% } q/ L9 S - sketch1->CreateVerticalConstraint(geomline1);7 L! _6 p! r0 N) L& k
% F2 `2 R% @( A( W2 E- Sketch::ConstraintGeometry geomline2;" ~3 x6 F2 Z, |
- geomline2.Geometry = line2;
( x4 F& v* P1 b% f - geomline2.PointType = Sketch::ConstraintPointTypeNone;% V: c$ c' ~- W) U" C- F
- geomline2.SplineDefiningPointIndex = 0;
& K1 l- n/ i. o# d4 Z) ^( V# d8 W; | - sketch1->CreateHorizontalConstraint(geomline2);
5 J2 E3 Q8 p' v. }( c - % b, u9 A0 N9 D. z. I/ F- j
- Sketch::ConstraintGeometry geomline3;4 f9 q+ _1 s3 {. ]
- geomline3.Geometry = line3;( s( @# D0 O C: X. w
- geomline3.PointType = Sketch::ConstraintPointTypeNone;
. j% a3 F8 l0 j' v4 T) \ - geomline3.SplineDefiningPointIndex = 0;/ V- y( _3 E5 r' b9 ]& L$ z
- sketch1->CreateVerticalConstraint(geomline3);6 d; J3 Z7 r! S6 Y# ?
! C5 b0 V! Q3 W; r- Sketch::ConstraintGeometry geomline1_startPoint;
9 V0 i0 a5 a4 _( H1 l l - geomline1_startPoint.Geometry = line1;
1 n8 u' H* {# `9 { - geomline1_startPoint.PointType = Sketch::ConstraintPointTypeStartVertex;2 q, e: J( @ ]* A. k8 P5 I
- geomline1.SplineDefiningPointIndex = 0;
5 D! M# a9 L8 Q% c1 I - Sketch::ConstraintGeometry geomline2_originPoint;
$ o( u( J1 o z5 e8 q - geomline2_originPoint.Geometry = originPoint;, U) ~5 C7 f: I) @& }+ q* c$ D
- geomline2_originPoint.PointType = Sketch::ConstraintPointTypeNone;
/ i# [6 O5 Q. |& Z- T - geomline2_originPoint.SplineDefiningPointIndex = 0;) g. k; R1 V5 W( z- j+ P
- sketch1->CreateCoincidentConstraint(geomline1_startPoint,geomline2_originPoint);
& ]" f0 m" m4 a" x9 R& l. r
4 t" e# G. @) Z. P' P- //4 add constraints (dimension) I' n5 U% {' v/ J: R
4 ~# T6 C& V6 J, v4 k: ^- NXObject *nullNXObject(NULL);& Z: R4 t$ z' k# O- }# k
! L5 s y; k# R/ F( X3 y8 X- - R+ S0 m1 E3 U. c8 t
- stringstream s_height1,s_height2,s_length;/ o5 F' e0 x) j2 d+ _- m
- s_height1 <<height1;' I8 |9 m- J- N0 `' q
- s_height2 <<height2;
8 k9 e/ K1 t; ]4 W. Y' K - s_length <<length;+ i) I- @1 F! {7 c \* [7 g8 r
- * U9 b# B& q) ]; s) y: V# v1 |
- Expression *expression1,*expression2,*expression3;
, V1 D# S8 U7 T# o - expression1 = workPart->Expressions()->CreateSystemExpression(s_height1.str());
/ [7 I" K3 R- H# E- r$ T - expression2 = workPart->Expressions()->CreateSystemExpression(s_length.str());/ a7 |( V( U$ Y7 C3 T4 y6 @
- expression3 = workPart->Expressions()->CreateSystemExpression(s_height2.str());$ h6 e2 v; `0 ?" S5 q
- ( E- ?/ l. d4 V# c3 |6 C
- // line1 dimension + k1 z6 y4 x- c2 ~$ N/ L6 R) z4 o
8 D, o2 t& i1 H. W- ~+ r9 H% k- Sketch::DimensionGeometry dimLine1_startPoint;* P: \8 l" ]$ u% N" o. y
- dimLine1_startPoint.Geometry = line1;. z) K, c3 R1 l3 F B# T
- dimLine1_startPoint.AssocType = Sketch::AssocTypeStartPoint;2 a+ x* O9 Q3 P. P
- dimLine1_startPoint.AssocValue = 0;
/ a9 Q3 s8 }* h9 n - dimLine1_startPoint.HelpPoint.X = 0.0;
: o) q" @5 G$ r - dimLine1_startPoint.HelpPoint.Y = 0.0;
- D! J5 F& J5 M0 n; M1 A& C% a - dimLine1_startPoint.HelpPoint.Z = 0.0;; g3 D0 i: L f3 w
- dimLine1_startPoint.View = nullNXObject;6 ] C" B; v( H% W6 a6 {& m4 x
8 e# P( ]0 F# h$ h4 W7 G, Z- Sketch::DimensionGeometry dimLine1_endPoint;) I. M% x. `9 y& N) ~# j1 |
- dimLine1_endPoint.Geometry = line1;0 @& q% e1 \* \; Z7 L* U
- dimLine1_endPoint.AssocType = Sketch::AssocTypeEndPoint;
; v3 u# F' N, e6 U - dimLine1_endPoint.AssocValue = 0;( `% y* O$ u" N% t% _
- dimLine1_endPoint.HelpPoint.X = 0.0;% A. R$ S* [. o# o
- dimLine1_endPoint.HelpPoint.Y = 0.0;
7 L7 I- A5 ~& u' V2 _- X - dimLine1_endPoint.HelpPoint.Z = 0.0;
/ t8 @3 t* i4 z - dimLine1_endPoint.View = nullNXObject;
8 R) T+ Y" s& p: c" I" p - 6 t: s! ^3 W! _+ X1 D
- Point3d dimOrigin1(-100, height1/2, 0.0);5 A) _6 i( D8 O6 [/ F/ Q
# y* K- ^" e( s, U. @8 R- sketch1->CreateDimension(Sketch::ConstraintTypeParallelDim, dimLine1_startPoint, dimLine1_endPoint, dimOrigin1, expression1, Sketch::DimensionOptionCreateAsDriving);2 Z6 V, y U" a4 ~2 o% T& w, z( v: ^
2 M+ V; ?6 a! [. G" v& z
% k* M1 C3 p1 _! v( j( f-
3 M9 E& `+ K) t8 { - // line2 dimension
& X) q/ \1 m& T- c2 d& p. w$ A - . D& O) N7 l4 X0 _7 H+ k( @
- Sketch::DimensionGeometry dimLine2_startPoint;! ~' q9 T- Q% c( U- F; G0 ^
- dimLine2_startPoint.Geometry = line2;6 V" B4 ]0 n% H2 ]
- dimLine2_startPoint.AssocType = Sketch::AssocTypeStartPoint;
( Y, ?, } R9 f/ L/ n, F( S - dimLine2_startPoint.AssocValue = 0;# b2 @+ g5 l, }
- dimLine2_startPoint.HelpPoint.X = 0.0;
* |3 v' C8 y4 l# @1 { - dimLine2_startPoint.HelpPoint.Y = 0.0;3 ~8 {; }* e% ~2 h) X- x
- dimLine2_startPoint.HelpPoint.Z = 0.0;
; l! `: Q0 y( p. P' c5 S0 v - dimLine2_startPoint.View = nullNXObject;
2 Z! Z7 ^0 _& ?! N1 a9 j
4 `# A! \: {% v/ c/ G0 j/ r- Sketch::DimensionGeometry dimLine2_endPoint;2 y+ v% z% A6 _3 G$ R9 [4 U; \
- dimLine2_endPoint.Geometry = line2;6 V4 [" C$ ` d6 F a+ ~1 s
- dimLine2_endPoint.AssocType = Sketch::AssocTypeEndPoint;( {+ u: O8 z9 F
- dimLine2_endPoint.AssocValue = 0;
0 k: x! B {) V7 _( N$ z! D: U0 e% E - dimLine2_endPoint.HelpPoint.X = 0.0;
+ G" \9 O3 v# t - dimLine2_endPoint.HelpPoint.Y = 0.0;. g% j% g6 H' K% j
- dimLine2_endPoint.HelpPoint.Z = 0.0;4 B3 N: k5 {1 t$ ~1 @ S5 K; }
- dimLine2_endPoint.View = nullNXObject;! J- z0 }+ Y6 i
- + I# n7 p$ k- R g& b
- Point3d dimOrigin2(length /2,100 + height1, 0.0);6 c$ c. u2 ?9 [3 w& E) C
+ l5 _5 l3 z4 F. ?' Q% ^$ X- sketch1->CreateDimension(Sketch::ConstraintTypeParallelDim, dimLine2_startPoint, dimLine2_endPoint, dimOrigin2, expression2, Sketch::DimensionOptionCreateAsDriving); k# K9 g& \6 r/ \; K
- 5 n H* N' K9 I7 a3 Z
- ; H' @8 U/ U) z+ B) \
- 1 x6 F, p0 B' X$ v
- // line3 dimension
/ @ _& u& d x& M7 J2 n% W
$ X X0 q/ ~! \4 t/ V- Sketch::DimensionGeometry dimLine3_startPoint; Q. G0 r0 e' w3 O
- dimLine3_startPoint.Geometry = line3;; b# A( h- t2 o% E5 Y( c3 n6 w
- dimLine3_startPoint.AssocType = Sketch::AssocTypeStartPoint;
+ Q- ~) G$ P9 ^: H4 [4 {' Z; P# z - dimLine3_startPoint.AssocValue = 0;- V1 G9 k) J2 r2 D( h' D
- dimLine3_startPoint.HelpPoint.X = 0.0;
8 O, d! A: @9 d3 M( ?7 H' p2 ~( i - dimLine3_startPoint.HelpPoint.Y = 0.0;9 c9 e4 O- |3 c; |; d, s5 X& X
- dimLine3_startPoint.HelpPoint.Z = 0.0;& x1 D3 Q @: Z5 e
- dimLine3_startPoint.View = nullNXObject;# E+ R6 C# U, E1 }) _$ U
0 I9 d7 c, a7 \8 @' L- Sketch::DimensionGeometry dimLine3_endPoint;
7 J' g& x- x4 k" ]- f3 L - dimLine3_endPoint.Geometry = line3;. A; k1 U8 L7 W' }4 z0 C
- dimLine3_endPoint.AssocType = Sketch::AssocTypeEndPoint;4 ^ F# j5 T$ I- t0 Z
- dimLine3_endPoint.AssocValue = 0;
" Q/ ]' }$ l {) K! \% `1 { - dimLine3_endPoint.HelpPoint.X = 0.0;* y0 ~/ V# Z* O
- dimLine3_endPoint.HelpPoint.Y = 0.0;
% w8 p- X# V4 V( P2 J9 Y. W1 e - dimLine3_endPoint.HelpPoint.Z = 0.0;
9 K* _. a( o; _# v& a- ]; y' W2 T - dimLine3_endPoint.View = nullNXObject;
/ c( ?0 w! U3 J: c" x L
/ ~" ]) J$ z" q h8 s+ J7 [- Point3d dimOrigin3( 100 + length, height1-height2+ height2 /2 , 0.0);
) l% s4 S* h6 C0 u5 s& j - $ w3 F! O$ H1 v
- sketch1->CreateDimension(Sketch::ConstraintTypeParallelDim, dimLine3_startPoint, dimLine3_endPoint, dimOrigin3, expression3, Sketch::DimensionOptionCreateAsDriving);9 }. |" x2 t# f7 D
" Z$ u8 p$ v, x( I1 n* G
, _1 H- P) v6 t' K- U7 Y! a; Z+ y- # x% e2 s. X% C3 A4 U1 v. c3 u
- //5 update & deactive
6 G; o( p7 n. y+ Z1 `% c9 ^5 w. S6 m c - sketch1->Update();
" _1 e/ H* w2 [$ ^% A2 T# @; D9 P
# U' e1 a+ [" o) z- sketch1->Deactivate(Sketch::ViewReorientFalse,Sketch::UpdateLevelModel);7 P/ p* u, x* u8 [4 t
- 1 P) ]- ?/ {: f, e
- delete expression1;
; f1 H2 @) u/ L" g# I! ` - delete expression2;+ A5 a. J# F$ O& f4 ?
- delete expression3;
( k0 d# t3 q$ o4 P - 3 E( x* w; L- H% {
- }( y5 U' c' w* W6 {7 o: W4 E. v
复制代码
/ i! _2 c& a# l W! Q% ^/ e
. j- X. J5 R* I/ X$ c' B0 V4 s' ]; ]' n2 s7 ?) {
; S+ y2 o. _4 B& g |
|