|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
PLM之家-NX9.0 二次开发实例视频31 NXOpen C++创建基本特征 <1>-草图的创建6 Q8 e; a ]$ c$ j. O/ K
内容:- |) j7 K; K$ R- q
草图作为参数化建模的基础,使用代码实现草图的创建过程,主要是对草图环境的初始化,以及草图约束的添加等问题。
# ]+ H6 B6 W( N( c4 w! \. R目的:
2 r% y7 p* X2 m4 V2 w1 V在NX中,使用NXOpen C++可以很方便的进行JA的录制,从而发掘草图约束中尺寸约束和几何约束的规律,通过这种方式,可以快速的完成开发。2 k, o3 R% d2 @2 ^: \! m
NXOpen C++创建草图基本特征
V9 Q5 L0 \% u
31 NXOpen C++创建基本特征-草图的创建(1)项目介绍8 J: ^# l+ Q: C7 f5 a$ X- s. V
31 NXOpen C++创建基本特征-草图的创建(2)UI设计5 }6 h% p# i0 p: S* \
31 NXOpen C++创建基本特征-草图的创建(3)项目创建
% }/ k+ n$ {) J: z. ~ 31 NXOpen C++创建基本特征-草图的创建(4)草图特征创建$ r$ k: D6 R) q5 L; _
31 NXOpen C++创建基本特征-草图的创建(5)添加几何到草图% n+ n# ?2 `3 K/ ^
31 NXOpen C++创建基本特征-草图的创建(6)添加草图几何约束
l4 R+ X( n* R. y$ v* i0 E& k( _ 31 NXOpen C++创建基本特征-草图的创建(7)添加草图尺寸约束
& b; X) @9 \( Y" A 31 NXOpen C++创建基本特征-草图的创建(8)尺寸和UI关联: w* ^8 _4 O. W% r* U. M
/ [ h# |6 w' g
3 d0 X8 P' s6 h! Y/ ?9 a+ @
0 B1 X6 r5 u- h; K
( c% q( E8 v- S' c8 P7 W
; O; ?4 a6 `& h5 ^ @关键代码分享:: g0 ?, u! y7 f' [. t
' j8 [9 i0 \+ v$ W9 W. E2 ?8 z
( b1 a c# y: }/ Z) x1 ~( [- % n- E2 N9 g: K, M! O) s* F, B
- void lesson31_createSkeTCh::createIPSketch()1 Q& L8 k. T8 q7 f* ]
- {7 N' j5 M, n4 R' Y" H
1 U6 H) c* n Y+ ~" f8 t- Sketch *nullSketch(NULL);
% _8 L! r( q; B/ q( T* o - SketchInPlaceBuilder *sketchInPlaceBuilder1;
& s$ y$ z7 U; P; ~- z7 z, | - sketchInPlaceBuilder1 = workPart->Sketches()->CreateNewSketchInPlaceBuilder(nullSketch);
" D. e% c" m( s5 W4 V - sketchInPlaceBuilder1->SetPlaneOption(Sketch::PlaneOptionNewPlane);0 g1 B/ G, f; Q6 E6 [7 p2 `1 ?
- # ~: ^1 T a7 L/ s( o
- //sketchInPlaceBuilder1->Plane()->SetMethod(PlaneTypes::MethodTypeFixedZ);
7 K/ @5 x# w; v Q/ d1 u- }0 r
& Z( I7 E. ~! v7 F% h- - I9 h1 m, Y* N3 {, F
- // add preference
" }1 l( V( ]% I0 ~! c% p, ~8 A
* h! u1 G. L7 p$ N0 O: L: u& Q- theSession->Preferences()->Sketch()->SetContinuousAutoDimensioning(false);* `8 ^- z0 t1 D( |3 R1 Y g
- ) d+ |' E. T) P) l# C4 f
- Drafting::PreferencesBuilder *preferencesBuilder1;1 X& p5 h4 ~& r* P
- preferencesBuilder1 = workPart->SettingsManager()->CreatePreferencesBuilder();2 B2 S; H- n5 w5 T+ H
- preferencesBuilder1->AnnotationStyle()->DimensionStyle()->SetAngularDimensionValuePrecision(3);
- r( k- M9 M* z: d3 ` - preferencesBuilder1->AnnotationStyle()->DimensionStyle()->SetDimensionValuePrecision(3);
4 Q. y0 [" q3 h9 e: o" y - preferencesBuilder1->Commit();
: {8 x6 n2 S3 w7 z t, a
2 _0 P, y" Y0 w( [+ d- preferencesBuilder1->Destroy();
$ @* s% E, ?; x2 N, a4 G - : b* o- B0 C" R" Z# C$ j' w; A
- % }3 v% C6 q, j- O- H7 q" @
- NXObject *nXObject1;
1 T7 ]- `! A0 { - nXObject1 = sketchInPlaceBuilder1->Commit();
* N6 u4 Y5 C! Y
1 q4 D- h2 y4 I6 P9 Z- Sketch *sketch1(dynamic_cast<Sketch *>(nXObject1));( n( e; \, B; z( X
- Features::Feature *feature1;, M6 r( h: V# w7 t
- feature1 = sketch1->Feature();8 K) n0 w: a# d1 p+ V/ ^
- feature1->SetName("XY-Plane-Sketch");- l3 q: x k9 o
-
& f+ O: |2 G( l( _ - sketchInPlaceBuilder1->Destroy();% K$ ^" ?! O: W( R0 g8 z% T
+ n3 i2 ^ }4 N% Z R( O5 C- S, h- //1 active sketch 0 ]! d- i2 p4 P& y4 H
- ) w, }% B6 @ u$ s) m- C- q( d
- sketch1->Activate(Sketch::ViewReorientFalse);
5 V. d O2 |/ r -
1 E7 m) B* `9 h0 p c! h2 |0 c - double height1 = this->expressionHeight1->GetProperties()->GetDouble("Value");
& ?" ~! \) L& t. X - double height2 = this->expressionHeight2->GetProperties()->GetDouble("Value");; v4 @0 E/ ~) C& U
- double length = this->expressionLength->GetProperties()->GetDouble("Value");
' n5 L% F; f& L3 g* L - // 2.1 create geometry9 Q" [" ~: t% Z/ q
- v) l# T9 M1 N1 p9 M% T- Point3d startPoint1(0.0, 0.0, 0.0);
+ T: y3 d# M# C; L/ Y) @ - Point3d endPoint1(0, height1, 0.0);
/ v$ {* \+ e+ i% h, O) R" ` - Point3d endPoint2(length, height1, 0.0);8 g$ V3 j o, x
- Point3d endPoint3(length, height1-height2, 0.0);5 a! D) H* e- C8 W" w& E7 U; t- {
- Point3d origin = sketch1->Origin();
( T/ W8 w0 S! t+ f/ O( E8 D - Point *originPoint = workPart->Points()->CreatePoint(origin);
1 B! t5 B" x. l% I. r" ~9 [' R+ p - # r6 ^, f; D d- r
- Line *line1,*line2,*line3,*line4;
2 X! C/ o- @! \" R+ u, X9 v - line1 = workPart->Curves()->CreateLine(startPoint1, endPoint1);
+ \/ |) w! j& J4 D - line2 = workPart->Curves()->CreateLine(endPoint1, endPoint2);3 h, w# y1 d8 Q2 Y0 J
- line3 = workPart->Curves()->CreateLine(endPoint2, endPoint3);
, R2 r" R, j2 v3 M$ x - line4 = workPart->Curves()->CreateLine(endPoint3, startPoint1);
# A# S) w9 n$ F* P. j" s5 L - // 2.2 add geometry
8 |' E0 J7 G& Q( d
' ]% X7 |. B( n3 G5 z" M4 f- sketch1->AddGeometry(line1,Sketch::InferConstraintsOptionInferCoincidentConstraints);% o* Y4 l# v" V3 W& Q
- sketch1->AddGeometry(line2,Sketch::InferConstraintsOptionInferCoincidentConstraints);
/ z- X6 N4 x9 P6 g- n - sketch1->AddGeometry(line3,Sketch::InferConstraintsOptionInferCoincidentConstraints);
C, s( g6 p, I7 @ - sketch1->AddGeometry(line4,Sketch::InferConstraintsOptionInferCoincidentConstraints);
, [$ j) n5 z) v- u' w& i
/ I3 D. u# E/ e: \7 I* r) f% N- //3 add constraints ( gemo)
3 f# H: V8 \' g4 h - ( d( G5 Z$ ?( T/ z; D, z
- Sketch::ConstraintGeometry geomline1;
4 i% W( M. y3 `0 D% R, L% b* C$ | - geomline1.Geometry = line1;- M$ G7 _) y/ W7 o7 }
- geomline1.PointType = Sketch::ConstraintPointTypeNone;
3 l0 ^4 q4 J l: i1 Q( C - geomline1.SplineDefiningPointIndex = 0;9 G, U$ ~. {% B$ S% x
- sketch1->CreateVerticalConstraint(geomline1);
" S7 [$ R2 F! c9 }/ j# e
" y1 i" @+ f1 S6 J; T7 ]/ N7 i8 X- Sketch::ConstraintGeometry geomline2;! R) Z7 R' H0 ^6 g1 F) P j% X* u7 b# e
- geomline2.Geometry = line2;
4 F# ~" p' s9 X) U# f# V9 J - geomline2.PointType = Sketch::ConstraintPointTypeNone;
# w/ L! F% W- N9 e - geomline2.SplineDefiningPointIndex = 0;& c9 A. X; K, Z8 j: L2 s! \
- sketch1->CreateHorizontalConstraint(geomline2);1 ^: P) q3 y: @
- 4 n* s' M# s6 q. e+ z# }
- Sketch::ConstraintGeometry geomline3;) O8 ?0 N/ M" j" ^
- geomline3.Geometry = line3;3 I/ c( S* `8 c
- geomline3.PointType = Sketch::ConstraintPointTypeNone;
* C9 n. p% k$ V7 Q3 J - geomline3.SplineDefiningPointIndex = 0;5 y( Z# [9 K+ O( _/ k+ T$ K
- sketch1->CreateVerticalConstraint(geomline3);* n; r* C0 R3 ~: Y6 t! R
- 9 U1 S0 j6 ^6 Z( o. b- I8 h
- Sketch::ConstraintGeometry geomline1_startPoint;
1 ~! h$ t& U6 l$ p - geomline1_startPoint.Geometry = line1; ^) g+ q) |7 O* a$ c9 ?/ H
- geomline1_startPoint.PointType = Sketch::ConstraintPointTypeStartVertex;
( E; W% r1 s4 ?2 I" j$ p. ]+ v - geomline1.SplineDefiningPointIndex = 0;/ d2 L# K; E7 N: v# d: r3 F
- Sketch::ConstraintGeometry geomline2_originPoint;
# ]" g& ]2 P1 R8 G6 f& d! ?& u - geomline2_originPoint.Geometry = originPoint;
9 K! m) P) n5 c9 M. Y- M - geomline2_originPoint.PointType = Sketch::ConstraintPointTypeNone;
2 v: o) L3 r& y$ a# T) p - geomline2_originPoint.SplineDefiningPointIndex = 0;
8 P- V! D; N$ z! N/ J" I5 `* L - sketch1->CreateCoincidentConstraint(geomline1_startPoint,geomline2_originPoint);! F* b" A' t) c% h" U5 H
7 y: }; W/ P% Y0 _- //4 add constraints (dimension)5 \8 ]+ m% w) z; O! r. k2 R
+ q& R2 H, Q) m- NXObject *nullNXObject(NULL);
$ E: Q$ _, H: z& P$ }5 F$ L' B
1 G+ x1 X( A* |) a0 K- - ?3 U/ {5 u" Z7 }% e P7 `+ D n. K
- stringstream s_height1,s_height2,s_length;
- S* {2 G8 [7 w7 e+ A6 M: S% j1 j - s_height1 <<height1;7 N8 d% q6 h T8 J# \
- s_height2 <<height2;
h; R! e; \$ ~6 x- V - s_length <<length;
- p4 V6 {* X/ ?/ L) l" G( o - + q' d+ [' I ] e( ~* r
- Expression *expression1,*expression2,*expression3;
A5 w" M. I. t; |$ t v - expression1 = workPart->Expressions()->CreateSystemExpression(s_height1.str());: I% e9 {, m. H) O) F" S
- expression2 = workPart->Expressions()->CreateSystemExpression(s_length.str());
/ o2 y+ l+ I0 _ - expression3 = workPart->Expressions()->CreateSystemExpression(s_height2.str());1 J. A. f; _4 o8 ?$ _" y/ Q, j% o
2 p( N$ a- W# ~) S8 @: v& J) W- // line1 dimension
% I% e7 U- k/ m7 ^2 b - j/ g3 g, k! u# R% z
- Sketch::DimensionGeometry dimLine1_startPoint;/ y. {. e& Y. G) b5 L
- dimLine1_startPoint.Geometry = line1;
# L6 l7 C8 C' [ - dimLine1_startPoint.AssocType = Sketch::AssocTypeStartPoint;
- f2 K$ m& J5 R9 j - dimLine1_startPoint.AssocValue = 0;( M. m7 i/ |" E; H
- dimLine1_startPoint.HelpPoint.X = 0.0;
2 B8 B0 ]1 v/ w& { - dimLine1_startPoint.HelpPoint.Y = 0.0;
+ j# f7 [6 ^4 p! d - dimLine1_startPoint.HelpPoint.Z = 0.0;, ?" C, e" S# o5 C
- dimLine1_startPoint.View = nullNXObject;
* w5 f( D- H$ m
2 n& O5 |, a' T8 I5 ]0 d; T- Sketch::DimensionGeometry dimLine1_endPoint;! a0 y$ h' e6 q- m! d a: r
- dimLine1_endPoint.Geometry = line1;
2 h5 x' D, [' x/ B% U0 z/ X - dimLine1_endPoint.AssocType = Sketch::AssocTypeEndPoint;# k6 v4 X( S% _6 s
- dimLine1_endPoint.AssocValue = 0;
) N4 [3 Y) V3 B% q - dimLine1_endPoint.HelpPoint.X = 0.0;
' }/ v$ t0 g. X+ h. _- ]: w - dimLine1_endPoint.HelpPoint.Y = 0.0;" ]& A- K" A/ ]1 m2 P: Y. {( s' r
- dimLine1_endPoint.HelpPoint.Z = 0.0;
+ ~! ~5 J1 r1 {! K8 G' ^* R) w - dimLine1_endPoint.View = nullNXObject;
3 G7 N# t# E9 E$ E" A
: n! L% c, V0 X% K- @0 b! ^- C- Point3d dimOrigin1(-100, height1/2, 0.0);- Q( M" h# m+ Q% x/ r; j9 i& t2 D
2 B6 O1 X. _( |# B8 \& ]- sketch1->CreateDimension(Sketch::ConstraintTypeParallelDim, dimLine1_startPoint, dimLine1_endPoint, dimOrigin1, expression1, Sketch::DimensionOptionCreateAsDriving);
4 \7 n+ s! O' g1 c' \* M, W8 u - ) Y- H- T1 j2 V4 t3 T/ q* ]" u
8 r0 N. n! r3 g+ B N" W4 R, U- ! D3 F) v: M, n- v$ }
- // line2 dimension
1 p7 A# {; q8 ?+ W! k- K/ \0 s - 0 ^8 u: \7 [+ U0 }+ Y- P0 W
- Sketch::DimensionGeometry dimLine2_startPoint;
$ w( x3 c1 I% Q - dimLine2_startPoint.Geometry = line2;
& E0 J: J1 u7 s/ N7 q7 g - dimLine2_startPoint.AssocType = Sketch::AssocTypeStartPoint;
7 e- j1 W, m% y1 |, a - dimLine2_startPoint.AssocValue = 0;
, N8 [: d6 g4 `7 s4 t" r1 {. i7 g - dimLine2_startPoint.HelpPoint.X = 0.0;+ g" n( A( ^: R- F0 F7 K4 p" T
- dimLine2_startPoint.HelpPoint.Y = 0.0;
4 F' y9 r6 D& {+ L - dimLine2_startPoint.HelpPoint.Z = 0.0;* a+ r1 X0 g% s4 s+ @" }
- dimLine2_startPoint.View = nullNXObject;
1 X3 }: U. O7 U- ~) r+ `( _
# k( R3 y0 E4 z4 e: q9 T- Sketch::DimensionGeometry dimLine2_endPoint;8 O7 c0 f$ t8 J6 `
- dimLine2_endPoint.Geometry = line2;! ^) [& s+ R2 M, E h$ d
- dimLine2_endPoint.AssocType = Sketch::AssocTypeEndPoint;
2 m6 W7 D" e7 k - dimLine2_endPoint.AssocValue = 0;; g0 \& ?, Y6 w7 g5 _2 j! v6 `
- dimLine2_endPoint.HelpPoint.X = 0.0;$ n) @& q/ `$ G/ p: B2 ^0 M/ p
- dimLine2_endPoint.HelpPoint.Y = 0.0;6 L7 j3 k5 V: F7 @4 z
- dimLine2_endPoint.HelpPoint.Z = 0.0;9 z4 \3 u( A/ Z) q
- dimLine2_endPoint.View = nullNXObject;
' j+ S. x8 m' p8 A6 E9 Q3 Z - 7 h% ]+ Q7 ?0 u9 o/ D i1 L
- Point3d dimOrigin2(length /2,100 + height1, 0.0);
! i' l# E4 a$ G D* C - 9 F5 l2 Z* n) A4 c M# N
- sketch1->CreateDimension(Sketch::ConstraintTypeParallelDim, dimLine2_startPoint, dimLine2_endPoint, dimOrigin2, expression2, Sketch::DimensionOptionCreateAsDriving);3 @. D! L2 ]$ m9 z
- , B6 X% G* c# I( ?
0 m. t- A% ]1 E4 v- 2 b; F4 }9 b, m- O) M1 H& V5 t; y
- // line3 dimension
: _/ L$ G( l9 q( y) H+ l: p% z - , ] X) u. N2 e' j
- Sketch::DimensionGeometry dimLine3_startPoint;
4 W: d" j% t: x8 p) c( O# a- G! X - dimLine3_startPoint.Geometry = line3;+ m _0 y% n& b; `! [5 g
- dimLine3_startPoint.AssocType = Sketch::AssocTypeStartPoint;7 e4 k! Q9 E+ Y
- dimLine3_startPoint.AssocValue = 0; ~& L( u6 Y* I' [: Y) f
- dimLine3_startPoint.HelpPoint.X = 0.0;
5 E. z$ A: h( K* {. v+ c - dimLine3_startPoint.HelpPoint.Y = 0.0;8 z% c' }2 L$ _
- dimLine3_startPoint.HelpPoint.Z = 0.0;5 P5 R- u9 J* X* x6 Q
- dimLine3_startPoint.View = nullNXObject;/ t2 [3 s5 G1 C
5 {* r$ t, _$ f& w5 Q$ [7 e- Sketch::DimensionGeometry dimLine3_endPoint;2 Y1 H" y3 S. @) c6 m$ r9 D6 Z
- dimLine3_endPoint.Geometry = line3;
G; J+ g8 ~+ _5 }9 r6 p- q - dimLine3_endPoint.AssocType = Sketch::AssocTypeEndPoint;- w. m5 w) ^/ e; I7 S
- dimLine3_endPoint.AssocValue = 0;
% p- X7 M% o& f' ? - dimLine3_endPoint.HelpPoint.X = 0.0;* y5 b- g- B" B! v
- dimLine3_endPoint.HelpPoint.Y = 0.0;) e7 i! w0 d% a1 {. u$ U
- dimLine3_endPoint.HelpPoint.Z = 0.0;; }; k% k( `! ~. ^
- dimLine3_endPoint.View = nullNXObject;
4 V% E7 h, N" {0 f, }: p& P - 9 T7 J0 i& g; e- s7 F0 z' G
- Point3d dimOrigin3( 100 + length, height1-height2+ height2 /2 , 0.0);& q) r2 A5 D( d! a3 M% B# B
-
- }) p, E! e# V) g+ v2 @ - sketch1->CreateDimension(Sketch::ConstraintTypeParallelDim, dimLine3_startPoint, dimLine3_endPoint, dimOrigin3, expression3, Sketch::DimensionOptionCreateAsDriving);
# P& `& C) u' a1 M, p/ `2 J, x - 5 r$ E/ x) `" w. p, U
$ y6 o1 b) K) u e3 {2 i1 J- - b# \ ^2 k+ z V# f L! s1 `1 y' D
- //5 update & deactive
* u, F2 x+ M+ Q1 ^; y4 s- Y( P& E - sketch1->Update();' C/ g9 X4 c2 z2 \
- ; J% l9 O' D. U1 N# \, k7 f
- sketch1->Deactivate(Sketch::ViewReorientFalse,Sketch::UpdateLevelModel);4 o1 V2 V4 H$ b, l* R% \& M
- 4 A7 b# {4 l* l2 T/ Y3 _/ |5 t
- delete expression1;
S1 A- K$ k) w9 T/ t - delete expression2;
2 b* x2 |0 i% m! M - delete expression3;
" X- H$ P9 v- N1 Y* ~3 r -
0 v4 Q5 o& l- p2 n+ e - }
* [/ K7 d8 f" Q
复制代码 . Y: N8 f, m: R
: O" W- \0 u* G! D* V+ Z2 N# `
4 y1 w, D7 u% h" m6 P% G2 z3 m6 V; U1 o6 C7 T, V
|
|