|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
×
PLM之家-NX9.0 二次开发实例视频31 NXOpen C++创建基本特征 <1>-草图的创建% w7 ~$ ~: L, u; |+ n
内容:) U; Q7 c3 M1 | g
草图作为参数化建模的基础,使用代码实现草图的创建过程,主要是对草图环境的初始化,以及草图约束的添加等问题。% c9 v3 E( V2 J7 [7 }) D- @. P
目的:
7 Y9 C) p- \) g, o3 _7 |在NX中,使用NXOpen C++可以很方便的进行JA的录制,从而发掘草图约束中尺寸约束和几何约束的规律,通过这种方式,可以快速的完成开发。
: x% X. e* C! t9 @& f+ J
NXOpen C++创建草图基本特征
* V9 J, @* }* x0 ~7 Y: l( Q: U
31 NXOpen C++创建基本特征-草图的创建(1)项目介绍3 ?% ^4 f3 |5 D9 o5 Y
31 NXOpen C++创建基本特征-草图的创建(2)UI设计% N* F: u6 w% A( F0 a
31 NXOpen C++创建基本特征-草图的创建(3)项目创建" h: C1 X+ ~: d A) W6 u) m
31 NXOpen C++创建基本特征-草图的创建(4)草图特征创建
; A9 o# ]) b5 r3 s9 V3 R+ l6 I2 P 31 NXOpen C++创建基本特征-草图的创建(5)添加几何到草图
1 ?& s1 e& f+ w; L/ t+ y9 m 31 NXOpen C++创建基本特征-草图的创建(6)添加草图几何约束
4 g) R3 {3 Q9 S; \2 c# `( e 31 NXOpen C++创建基本特征-草图的创建(7)添加草图尺寸约束
r; @) T1 z/ N8 a6 S- F 31 NXOpen C++创建基本特征-草图的创建(8)尺寸和UI关联! W# Y6 D5 C) |, }4 Q, `
5 ?9 |9 S: n2 q
; A/ C; J, K& O8 f' M2 R6 g6 g0 K8 l6 g; j; x. @, @
, m; v0 K5 U) T$ |5 N2 L- l4 m1 E* ?
关键代码分享:, x# `- y/ g5 t, U& f
; R$ W% J, H( R S5 l8 C* U4 x% j6 U |8 p M# ^4 U4 I: I
) z. b8 ~- F' P) s& J# v, \7 m- void lesson31_createSkeTCh::createIPSketch()
X, H9 X& L* ]& v - {
* U) H# @, N' y. G6 j
9 j2 u+ d$ u) p1 Z9 Z- Sketch *nullSketch(NULL);
( q7 A& R. E U* B - SketchInPlaceBuilder *sketchInPlaceBuilder1;' ^3 t7 s' C" s7 e! \ C) z2 _
- sketchInPlaceBuilder1 = workPart->Sketches()->CreateNewSketchInPlaceBuilder(nullSketch);$ [9 A' M( \) T! |* S( A b
- sketchInPlaceBuilder1->SetPlaneOption(Sketch::PlaneOptionNewPlane);0 j* N# ^ I3 g3 d
- / V- s4 ~9 j/ }; n# V
- //sketchInPlaceBuilder1->Plane()->SetMethod(PlaneTypes::MethodTypeFixedZ);4 }+ _1 m6 ?; B
- 0 E( n6 j3 J/ Y' |2 m" |; x
' ]" m% H8 ^/ H1 P: r" ~( H- // add preference
/ f% p, Z8 t& X9 m
N9 G) m8 d% w( z5 E4 X- theSession->Preferences()->Sketch()->SetContinuousAutoDimensioning(false);% q/ r: t9 N5 p" g t' k
- 7 y5 p' @+ t x: S+ O4 U* D5 s D
- Drafting::PreferencesBuilder *preferencesBuilder1;
5 p a+ X3 h. }; j% I0 w - preferencesBuilder1 = workPart->SettingsManager()->CreatePreferencesBuilder();8 |! K9 H7 X( l' A3 b
- preferencesBuilder1->AnnotationStyle()->DimensionStyle()->SetAngularDimensionValuePrecision(3);
. w7 d4 F* v# j7 Z* ^ - preferencesBuilder1->AnnotationStyle()->DimensionStyle()->SetDimensionValuePrecision(3);
8 p* D* O% U) O& r- c( X3 r - preferencesBuilder1->Commit();9 `- }$ q0 v0 ^2 l
# v$ z* ^/ q6 W& I- preferencesBuilder1->Destroy();
) I, C9 e# Z9 ]' `: | - / S. c, e `# U0 _0 `- L
! B5 X' l9 t: n7 U4 {- NXObject *nXObject1;
, e: {. w* G: ^, S9 F - nXObject1 = sketchInPlaceBuilder1->Commit();8 i, p) w; i, }7 w6 t' {% `# I
* O: N& p: }% v. L- Sketch *sketch1(dynamic_cast<Sketch *>(nXObject1));! h& G0 _% q, ^3 S5 m
- Features::Feature *feature1;
& N, Z2 R1 j) W8 h- n1 }* W - feature1 = sketch1->Feature();
. a0 {! ]1 T! K3 K B& t - feature1->SetName("XY-Plane-Sketch");9 q' `* m$ C9 t8 h) ^4 o7 l; f n
- - \6 {. w5 A* X6 F) i. s
- sketchInPlaceBuilder1->Destroy();; F" ]1 s" G4 q/ o
6 N/ C9 w9 o' I6 ]- //1 active sketch
% U2 l0 N5 d8 u/ J/ o! L. U
; ]1 p# v, H9 b0 |9 K" T- sketch1->Activate(Sketch::ViewReorientFalse);$ P; u0 L. [8 b
- ( v+ w$ @( o6 C# v7 w+ u* I
- double height1 = this->expressionHeight1->GetProperties()->GetDouble("Value");
5 z* z% A* p3 w7 r0 J& _ - double height2 = this->expressionHeight2->GetProperties()->GetDouble("Value");; u3 q+ ]& p5 R* U) `. o; ~* q6 L
- double length = this->expressionLength->GetProperties()->GetDouble("Value");
: C2 ]4 o O+ f8 B% R: i - // 2.1 create geometry; s) E2 I) A. @* P* F% m
- , a% t$ Z3 b* J0 U
- Point3d startPoint1(0.0, 0.0, 0.0);
4 y0 l! q4 ]$ ] - Point3d endPoint1(0, height1, 0.0);
$ G: [9 [/ q; S8 N2 C- M5 x - Point3d endPoint2(length, height1, 0.0);
% E. C2 G4 S# L2 v - Point3d endPoint3(length, height1-height2, 0.0);
7 g: k$ x) Y [8 z7 Q( d& J- M - Point3d origin = sketch1->Origin();
; ]% W' H- T( X* w4 _. a0 [ - Point *originPoint = workPart->Points()->CreatePoint(origin);
( K: F- f- U1 g
/ s; f$ d2 ~" q- Line *line1,*line2,*line3,*line4;$ C' z$ P6 d9 X* L
- line1 = workPart->Curves()->CreateLine(startPoint1, endPoint1);! ?1 F1 B. Q9 N# Q
- line2 = workPart->Curves()->CreateLine(endPoint1, endPoint2);
+ _. _ W) }2 j3 u4 ~( _9 g; R( x - line3 = workPart->Curves()->CreateLine(endPoint2, endPoint3);
- f: G# M1 x n* \$ Q0 Y - line4 = workPart->Curves()->CreateLine(endPoint3, startPoint1);, F+ g% X5 A3 m
- // 2.2 add geometry
+ n/ o+ V7 R* G% j* }2 j
2 s- t1 w% `" w; u" P- sketch1->AddGeometry(line1,Sketch::InferConstraintsOptionInferCoincidentConstraints);
* T, B* \' P3 a+ x3 m" ^ - sketch1->AddGeometry(line2,Sketch::InferConstraintsOptionInferCoincidentConstraints);
: C# j, R; p# @' T. S' h; G& \+ u) ~ - sketch1->AddGeometry(line3,Sketch::InferConstraintsOptionInferCoincidentConstraints);
; S& a7 [$ e+ U4 W% g5 k - sketch1->AddGeometry(line4,Sketch::InferConstraintsOptionInferCoincidentConstraints);! z5 m$ _9 ^: b1 c( n- f3 G' z
3 m/ x6 p: [1 Q% S: o- //3 add constraints ( gemo)0 ^6 Q' _% x; t) y8 E& ]
- 9 X, B- o# T. s$ p- B
- Sketch::ConstraintGeometry geomline1;* E b4 e2 ]" u5 ?+ `: Z. [3 M8 D
- geomline1.Geometry = line1;
$ H4 [6 U0 N/ ^) ]9 P - geomline1.PointType = Sketch::ConstraintPointTypeNone;7 R6 Z* v0 M' B8 a- G" U3 q
- geomline1.SplineDefiningPointIndex = 0;4 z4 }3 \/ n3 T
- sketch1->CreateVerticalConstraint(geomline1);
1 s. H7 _. `" C% e* ~
3 e# Z8 T* B' @/ a1 L, M1 e- Sketch::ConstraintGeometry geomline2;9 D6 s& m/ {4 q0 ^! M' _4 G
- geomline2.Geometry = line2;8 P0 J \! ]& R! p
- geomline2.PointType = Sketch::ConstraintPointTypeNone;/ T/ G* G- W/ Y/ X) X' D
- geomline2.SplineDefiningPointIndex = 0;
8 N6 q5 P& Z( F) B6 e) J - sketch1->CreateHorizontalConstraint(geomline2);
) [9 y, f$ @ o" C* c
6 k. U' d- [" F; X# \* h! `+ v; [- Sketch::ConstraintGeometry geomline3;4 {4 `6 Y7 q8 @; H
- geomline3.Geometry = line3;
. R" S$ r8 c2 `9 r' }5 s - geomline3.PointType = Sketch::ConstraintPointTypeNone;
5 I8 m. @( i8 q6 m0 O - geomline3.SplineDefiningPointIndex = 0;
3 o. b6 F H9 s, g7 D" u - sketch1->CreateVerticalConstraint(geomline3);
6 V o# \' T! [) V. T5 v* Z) r
7 }" G# y* m& G# { |- Sketch::ConstraintGeometry geomline1_startPoint;
, n8 j- k( J& z" F8 [) I - geomline1_startPoint.Geometry = line1;
, g9 M6 F4 R$ F4 T - geomline1_startPoint.PointType = Sketch::ConstraintPointTypeStartVertex;- U$ Z) C" w5 q0 F5 y& b
- geomline1.SplineDefiningPointIndex = 0;
6 @) R S& g* Y5 ?" n6 J8 H - Sketch::ConstraintGeometry geomline2_originPoint;1 p" Y0 Q9 S. o7 m5 _/ @# H
- geomline2_originPoint.Geometry = originPoint;6 p R7 f% n" [& G
- geomline2_originPoint.PointType = Sketch::ConstraintPointTypeNone;
: E) z9 L, y9 Z4 ]" u) ? - geomline2_originPoint.SplineDefiningPointIndex = 0;
S9 j0 T& d9 y3 t( B - sketch1->CreateCoincidentConstraint(geomline1_startPoint,geomline2_originPoint);+ a5 P! I R& R
- 4 A% k5 D9 h1 G4 }
- //4 add constraints (dimension)
g$ ]1 k }$ d/ H - 6 ~. M( c* w7 Y, ?
- NXObject *nullNXObject(NULL);! G. q! G% n) y2 \! }6 K
- 7 H0 ^6 m! x; c7 [) U2 ]
- 4 t' I6 Z' i ~! P
- stringstream s_height1,s_height2,s_length;: m' H/ e9 e" D) C. G2 @! N
- s_height1 <<height1;
% b) W9 V* O3 u. i: ` - s_height2 <<height2;$ G- b5 i1 u7 y1 y2 Q" A6 z
- s_length <<length;
# R5 D" M) G6 |# f2 | - 0 _) r4 O# U' h3 S0 z$ U% d
- Expression *expression1,*expression2,*expression3;
, x! L. T) p0 B& ~' [' I6 V" `$ t - expression1 = workPart->Expressions()->CreateSystemExpression(s_height1.str());' ]: f& \- Y3 \
- expression2 = workPart->Expressions()->CreateSystemExpression(s_length.str());
! y5 [& e9 ^1 u. F2 `$ W# s2 S - expression3 = workPart->Expressions()->CreateSystemExpression(s_height2.str());
3 Y1 U1 Y2 h: U# t: l- M
2 w% _0 h6 m2 W4 p5 A8 h7 Y- // line1 dimension
8 j* j; g! [- E# a% V" _ - & d) B8 a. z* m4 H0 q+ ?! M
- Sketch::DimensionGeometry dimLine1_startPoint;+ ~2 T5 r1 ~3 W: b3 J) o8 P% P
- dimLine1_startPoint.Geometry = line1;
1 T* _) i( Z8 d9 S; W# b - dimLine1_startPoint.AssocType = Sketch::AssocTypeStartPoint;
/ g' i, W& u) C - dimLine1_startPoint.AssocValue = 0;
4 `& R. K# s; w5 ]3 S - dimLine1_startPoint.HelpPoint.X = 0.0;4 h4 y& y! g+ \- r8 {% @) B- P' _
- dimLine1_startPoint.HelpPoint.Y = 0.0;# h* ?, s1 Q5 H- ?( Q/ G
- dimLine1_startPoint.HelpPoint.Z = 0.0;/ g! v' S. j3 M$ E0 V, w
- dimLine1_startPoint.View = nullNXObject;! S- B# g% s2 e0 S6 ]- v5 H; G" l
- * C* W) }# u7 \* Y8 \+ D
- Sketch::DimensionGeometry dimLine1_endPoint;- [/ E3 t+ Q8 r( f
- dimLine1_endPoint.Geometry = line1;( w& e B. c* N' S" O" q: I1 m
- dimLine1_endPoint.AssocType = Sketch::AssocTypeEndPoint;
1 B& y& n; K X9 m" }8 |1 D - dimLine1_endPoint.AssocValue = 0;" j0 O) Z1 ]2 z7 i- o! C; [4 G
- dimLine1_endPoint.HelpPoint.X = 0.0;$ S# A# t- T2 }$ l6 R
- dimLine1_endPoint.HelpPoint.Y = 0.0;
: H! f! `9 f% |3 H6 |$ [2 V - dimLine1_endPoint.HelpPoint.Z = 0.0;
* b6 l5 W1 b& h+ D/ V - dimLine1_endPoint.View = nullNXObject;
+ V# B0 c) H; n! O, m
. h# w* @; r% t) X0 Q6 D$ ^& @0 G- Point3d dimOrigin1(-100, height1/2, 0.0);# ^% M8 ?. N: a: B. ~& f
) N i( Z; V4 P/ D* f- sketch1->CreateDimension(Sketch::ConstraintTypeParallelDim, dimLine1_startPoint, dimLine1_endPoint, dimOrigin1, expression1, Sketch::DimensionOptionCreateAsDriving);! u6 y7 X* @+ X2 ?
. V0 g8 ?- D) x0 l) C: W7 k p
, g3 J' ?( b* H" F' B- * @( [* W' K" V" {7 i
- // line2 dimension : ~. Z/ O! k2 s1 |) j/ q/ N
) T4 s; y* `% S+ d& P" }- Sketch::DimensionGeometry dimLine2_startPoint;
8 {; q O1 L& P8 I6 N - dimLine2_startPoint.Geometry = line2;1 m! }! X( N% R* U$ D* @/ M
- dimLine2_startPoint.AssocType = Sketch::AssocTypeStartPoint;
, t+ D" a: p1 A$ L: @) U0 ~ - dimLine2_startPoint.AssocValue = 0;
; J6 B- d/ ~7 M5 f$ k& H - dimLine2_startPoint.HelpPoint.X = 0.0;
# |# r2 J; G5 j - dimLine2_startPoint.HelpPoint.Y = 0.0;0 ]! G6 Y; [6 m/ f9 R2 W
- dimLine2_startPoint.HelpPoint.Z = 0.0;+ j7 z$ j" ^4 S* n# t
- dimLine2_startPoint.View = nullNXObject;) P) b4 G' N% ^' c" `7 w
- 1 J+ v* _ Z6 b2 \2 S( n, v7 H
- Sketch::DimensionGeometry dimLine2_endPoint;
5 z; a) Z+ n' o% P- Y - dimLine2_endPoint.Geometry = line2;
$ A- F" T3 w& o* L6 U3 y- r; F! J: P - dimLine2_endPoint.AssocType = Sketch::AssocTypeEndPoint;
* ^% I$ G1 v) t; F - dimLine2_endPoint.AssocValue = 0;
! P m" \* X8 B" x) }1 B! s - dimLine2_endPoint.HelpPoint.X = 0.0;
; X) W: u+ h5 Q0 R/ u' Q, q# j6 t - dimLine2_endPoint.HelpPoint.Y = 0.0;( u; A2 T( q- u- t
- dimLine2_endPoint.HelpPoint.Z = 0.0;! S7 \/ q3 M7 G0 k9 m
- dimLine2_endPoint.View = nullNXObject;
9 s+ c ^. g; L- ^ - . g6 m& ~3 M. `$ e, k+ I: n! c
- Point3d dimOrigin2(length /2,100 + height1, 0.0);5 \, W9 [, e4 |2 b: A, M; H+ \
/ ?+ P/ s! M' G) W7 S' Y- sketch1->CreateDimension(Sketch::ConstraintTypeParallelDim, dimLine2_startPoint, dimLine2_endPoint, dimOrigin2, expression2, Sketch::DimensionOptionCreateAsDriving);1 c% Y( x! p& |% q1 j; T& a
- ! H, f }, ~. _2 i
- / c6 }, r; k+ Y0 _
-
* @/ T9 @) K; X - // line3 dimension . S- F& z, J Y
- 9 }7 n$ a7 w: B9 p6 k5 q
- Sketch::DimensionGeometry dimLine3_startPoint; g7 h$ R: ^& B6 q
- dimLine3_startPoint.Geometry = line3;
8 S$ R6 I# {9 X8 R. i$ @2 V - dimLine3_startPoint.AssocType = Sketch::AssocTypeStartPoint;
: z5 R# X0 ]) w- u( S - dimLine3_startPoint.AssocValue = 0;2 ~0 Y8 d' H, ]* y8 A. n3 v A
- dimLine3_startPoint.HelpPoint.X = 0.0;& z2 j+ m2 P1 q4 C
- dimLine3_startPoint.HelpPoint.Y = 0.0;
( d7 e5 Q1 t& f9 R& Q - dimLine3_startPoint.HelpPoint.Z = 0.0;
4 `& d- j" r* s, L: P& Y& N - dimLine3_startPoint.View = nullNXObject;
0 l) j& }" V+ G% I7 A8 d3 E3 }8 i+ l
4 }9 Z& G/ g% \' x- Sketch::DimensionGeometry dimLine3_endPoint;
' I( @, H. t- Q4 A - dimLine3_endPoint.Geometry = line3;
/ z8 L% U9 p7 [; R2 D: L4 d# i - dimLine3_endPoint.AssocType = Sketch::AssocTypeEndPoint;
+ F9 B9 X# L/ k - dimLine3_endPoint.AssocValue = 0;
: U5 {& s5 h/ h! ^ - dimLine3_endPoint.HelpPoint.X = 0.0;: x* `9 ?' T. D! t$ G
- dimLine3_endPoint.HelpPoint.Y = 0.0;
* |% J# x+ S0 y q& E1 n* i& Q - dimLine3_endPoint.HelpPoint.Z = 0.0;
" x3 d4 J' \# b - dimLine3_endPoint.View = nullNXObject;
/ i' P. M" V0 k7 J! o: J/ X - + o7 k6 k: F/ n( e
- Point3d dimOrigin3( 100 + length, height1-height2+ height2 /2 , 0.0);) X8 |% ?/ k/ A. G# v
-
: J' B! E* ~8 v3 _) W/ c( T - sketch1->CreateDimension(Sketch::ConstraintTypeParallelDim, dimLine3_startPoint, dimLine3_endPoint, dimOrigin3, expression3, Sketch::DimensionOptionCreateAsDriving);
. o; Q. t3 i/ n5 n, R5 r/ |5 O* C
# J! r9 u' i+ B, l) P- # O* H( {; V5 j2 {$ n) Q
/ V2 ?5 k) x" o6 w! [- //5 update & deactive
/ [! k/ Y! V# t - sketch1->Update();
. l" a% i, ?) q, w0 J5 { - 8 d! S# f6 B% R# Y5 N; ]3 t7 b0 G
- sketch1->Deactivate(Sketch::ViewReorientFalse,Sketch::UpdateLevelModel);
8 R' d/ [( x' H( P. D( X& ~9 h - + p3 q: Z, U4 ]5 f& l# P# ~0 ~% ? i
- delete expression1;: r# j6 I' B2 ]( V& y: n
- delete expression2;0 m7 H3 C8 Z% Q/ B3 W
- delete expression3;% S; @. _0 Q# n- A
- 1 r; G0 m1 M! L l, z& {( V
- }3 N" c- G# o' G
复制代码 , B$ `/ G$ C$ |( g7 {
! `/ G5 q- T$ Z8 y* @6 r! W! G, [' F
) Q- t: l. m' s; j# _7 e7 h$ N( S0 r, s- o: Q6 H9 c
|
|