|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
×
PLM之家-NX9.0 二次开发实例视频31 NXOpen C++创建基本特征 <1>-草图的创建, c4 e: u7 x7 s4 m2 v
内容:( h1 C% z, I6 R A; w
草图作为参数化建模的基础,使用代码实现草图的创建过程,主要是对草图环境的初始化,以及草图约束的添加等问题。
) m2 A* X5 E) _% `目的:0 q# P6 R( H" M, k8 G
在NX中,使用NXOpen C++可以很方便的进行JA的录制,从而发掘草图约束中尺寸约束和几何约束的规律,通过这种方式,可以快速的完成开发。
$ t# F: \9 t. X0 {" W
NXOpen C++创建草图基本特征
5 J k& D3 h+ z( l; R# [2 \* N5 F 31 NXOpen C++创建基本特征-草图的创建(1)项目介绍( t3 ^; O# X9 L5 d# r* K
31 NXOpen C++创建基本特征-草图的创建(2)UI设计
: [1 J) T" _ i! h) M3 e4 Z% E 31 NXOpen C++创建基本特征-草图的创建(3)项目创建' v& Y: E. H2 P# ~
31 NXOpen C++创建基本特征-草图的创建(4)草图特征创建& }/ s2 m: Z# u1 R7 _" I
31 NXOpen C++创建基本特征-草图的创建(5)添加几何到草图, X0 j4 z0 |, f3 E1 P
31 NXOpen C++创建基本特征-草图的创建(6)添加草图几何约束1 s* N& I O# L+ D! T
31 NXOpen C++创建基本特征-草图的创建(7)添加草图尺寸约束
- f) p# e! a1 C G. y 31 NXOpen C++创建基本特征-草图的创建(8)尺寸和UI关联
& R6 M" l0 ?: c2 u. t( P, r; U* L/ b3 Y: j
: ?6 ]; r4 g0 I+ s. z; r4 ?" v$ x! {# m
+ e u6 F+ {$ g/ P
3 ^8 _$ u4 \9 s% W# h. {! J# U关键代码分享:4 w' D& f! U- v' T" a
6 u- @8 Q4 W- Z! m5 L6 _9 O
, u) i. z; h& W; N' T
- 4 O8 k: L9 \# D
- void lesson31_createSkeTCh::createIPSketch()
* c" A9 O+ b' E - {- f0 |& b1 m/ \7 B$ v4 q# q5 W
- 8 d' c" \8 v$ e# m6 b) T
- Sketch *nullSketch(NULL);: x# [5 e. P2 D, i$ l' [
- SketchInPlaceBuilder *sketchInPlaceBuilder1;2 V- j) T$ m* K" Z! r
- sketchInPlaceBuilder1 = workPart->Sketches()->CreateNewSketchInPlaceBuilder(nullSketch);
* }4 D8 q3 b9 w6 ? - sketchInPlaceBuilder1->SetPlaneOption(Sketch::PlaneOptionNewPlane);% G3 I' k* a% p5 U6 |$ d) o2 \ S
6 F2 d! p6 o5 N3 }0 R' Q: g- //sketchInPlaceBuilder1->Plane()->SetMethod(PlaneTypes::MethodTypeFixedZ);
7 S a6 a( B: _% z+ u" v+ f0 v
+ e; B# V; @ k7 P( _2 q0 b
; B9 B2 M% @+ ?1 E$ w7 x. \' m6 C" J- // add preference
- Y: D4 u4 n; N( o7 e0 ~ - 3 g* a9 a6 p( z/ V$ E4 `+ j; M! n
- theSession->Preferences()->Sketch()->SetContinuousAutoDimensioning(false);+ A: A& P" [) b6 A* P
7 J* l, r6 O: U3 _) j _. S- c7 ^- Drafting::PreferencesBuilder *preferencesBuilder1;
' J S, d) V. s# E% x+ y! A: y - preferencesBuilder1 = workPart->SettingsManager()->CreatePreferencesBuilder();
$ T4 B# i4 ^, M* `+ H - preferencesBuilder1->AnnotationStyle()->DimensionStyle()->SetAngularDimensionValuePrecision(3);* ]4 G' V( V- i# N
- preferencesBuilder1->AnnotationStyle()->DimensionStyle()->SetDimensionValuePrecision(3);
; n5 D+ g. K: F - preferencesBuilder1->Commit();
# }. D- J7 e h& n5 y - " _, I$ n1 T6 M
- preferencesBuilder1->Destroy();' z5 T9 t- Z! ^, t9 S. r
- # z# e. u# Q5 P: W' Q
. y- v7 v# r2 G. R- t& q, y- NXObject *nXObject1;
# [' @3 a* `+ K' N# _ - nXObject1 = sketchInPlaceBuilder1->Commit();
6 p; K1 G3 V2 @7 H - 8 K" P8 R8 }& e" a6 a1 a0 ?
- Sketch *sketch1(dynamic_cast<Sketch *>(nXObject1));
& G) v S# J; c7 O e; h - Features::Feature *feature1;2 Z, m& U- y1 R
- feature1 = sketch1->Feature();
: c5 x6 ?/ h% I! t& v1 A- G - feature1->SetName("XY-Plane-Sketch");
1 x! `5 `3 f9 V4 ?3 \. M - 0 H& y: J/ }2 }* m) J" ]
- sketchInPlaceBuilder1->Destroy();
2 b2 x6 t9 \6 f z+ s- Q; m: J) B2 M' b - 2 j. [; B" e, ^, K
- //1 active sketch
0 x; \7 F1 G3 I g - 1 {) E3 h8 s* E
- sketch1->Activate(Sketch::ViewReorientFalse); c6 k0 x: w7 I8 o( ]
- , u* z! p# G! q5 s
- double height1 = this->expressionHeight1->GetProperties()->GetDouble("Value");+ X' N/ B, }+ [ o# M8 O
- double height2 = this->expressionHeight2->GetProperties()->GetDouble("Value");' B9 l* K( N8 y
- double length = this->expressionLength->GetProperties()->GetDouble("Value");
2 T; X5 W1 _, k# d& ] - // 2.1 create geometry
( g9 ]# t' K" ^# p5 J) Q
9 K* t4 f8 P1 N9 D- Point3d startPoint1(0.0, 0.0, 0.0);
4 Y% I# u$ G6 ~% f$ A9 f6 S - Point3d endPoint1(0, height1, 0.0);. f+ I5 c v8 K3 }) F+ @# w
- Point3d endPoint2(length, height1, 0.0);
/ M' p$ V( b7 M - Point3d endPoint3(length, height1-height2, 0.0);
+ [' u6 H6 K/ z$ X% F6 d - Point3d origin = sketch1->Origin();
9 k! \0 t3 e. D" e! j - Point *originPoint = workPart->Points()->CreatePoint(origin);* v6 U! i* d" N3 d
- . G7 o( R6 q: w% M8 L8 q b8 X; @
- Line *line1,*line2,*line3,*line4;' e5 }5 @% Y) E6 f4 o' n7 X# M8 K
- line1 = workPart->Curves()->CreateLine(startPoint1, endPoint1);3 o' S% p c. c4 Z4 X: L) c( ]# D/ ~, M" a
- line2 = workPart->Curves()->CreateLine(endPoint1, endPoint2);/ x1 G4 w ]5 U% j1 t! N, I
- line3 = workPart->Curves()->CreateLine(endPoint2, endPoint3);
& B! B; S; X2 d0 `: i- l - line4 = workPart->Curves()->CreateLine(endPoint3, startPoint1); E: g" a9 [, a: J! n& ?1 l. b9 ^
- // 2.2 add geometry$ s5 m2 P: ]9 i! L$ I. u8 a4 I
- ! _1 _& F2 V( s! k' p
- sketch1->AddGeometry(line1,Sketch::InferConstraintsOptionInferCoincidentConstraints);
2 n1 I7 g/ s6 s - sketch1->AddGeometry(line2,Sketch::InferConstraintsOptionInferCoincidentConstraints);
) {" D) _* F9 M4 B: h - sketch1->AddGeometry(line3,Sketch::InferConstraintsOptionInferCoincidentConstraints);% a# P9 d$ _$ f; q, j
- sketch1->AddGeometry(line4,Sketch::InferConstraintsOptionInferCoincidentConstraints);, c" m: `9 z2 i! B8 R4 `- L1 K
; W+ p, U$ l7 @/ g$ }0 S8 K3 n ?- //3 add constraints ( gemo)# u; w6 h+ }9 {0 T% {& b2 {$ I
- 9 X1 L4 B/ l- N. a# r1 z
- Sketch::ConstraintGeometry geomline1;
0 g3 [; j3 w# f - geomline1.Geometry = line1;
1 H. i. Z: l7 S - geomline1.PointType = Sketch::ConstraintPointTypeNone;
8 e; ^! ^7 }; N' b# T4 [ - geomline1.SplineDefiningPointIndex = 0;
0 l8 b/ @/ l" J5 a3 R1 h+ N - sketch1->CreateVerticalConstraint(geomline1);# C. E+ U B# F% C) k: B
! n% ~2 V; v [( o9 n. h; ^- `- Sketch::ConstraintGeometry geomline2;, O& q7 x+ d6 S% [- Z
- geomline2.Geometry = line2;6 t: ?& u# ?0 ~
- geomline2.PointType = Sketch::ConstraintPointTypeNone;
' n/ v6 [7 }# w" Q8 ]! n3 b$ ^8 E - geomline2.SplineDefiningPointIndex = 0;
& h( t; r K. b$ v - sketch1->CreateHorizontalConstraint(geomline2);& s) H' S% G$ J' \: |! M2 m
# V8 X7 t: M- D- [2 k- Sketch::ConstraintGeometry geomline3;& X; a- D/ n. o2 d( M/ \4 ]
- geomline3.Geometry = line3;
+ h, T9 |- p% n0 E: l - geomline3.PointType = Sketch::ConstraintPointTypeNone;1 R" z" D+ R; ~1 w
- geomline3.SplineDefiningPointIndex = 0;
) W3 d1 T/ D0 s# `$ }( G - sketch1->CreateVerticalConstraint(geomline3);
. a4 L/ p( l: U - ' E6 g, K: b9 d
- Sketch::ConstraintGeometry geomline1_startPoint;1 i" i- j3 _; _# F* [
- geomline1_startPoint.Geometry = line1;# {& P1 w; g$ y, |
- geomline1_startPoint.PointType = Sketch::ConstraintPointTypeStartVertex;0 z- O5 K* S( [6 j
- geomline1.SplineDefiningPointIndex = 0;3 h8 L ^; P ` K
- Sketch::ConstraintGeometry geomline2_originPoint;
/ ^' q: T& y* E# O - geomline2_originPoint.Geometry = originPoint;( N, m# h; r5 ~; b
- geomline2_originPoint.PointType = Sketch::ConstraintPointTypeNone;) D3 r6 C4 [$ b0 f% l F
- geomline2_originPoint.SplineDefiningPointIndex = 0;) a. Q/ Z- a+ K0 ^- L4 x
- sketch1->CreateCoincidentConstraint(geomline1_startPoint,geomline2_originPoint);
0 I0 c7 n8 s3 p6 [! z
! r7 x/ h* x# y9 d7 a& G `: b, O- //4 add constraints (dimension)
5 U; d+ P; [) ~' W, o+ ^
" H2 c2 i6 w1 F& Y7 Q- NXObject *nullNXObject(NULL);
0 A3 _; ]# @% I; ?4 V0 t% } - 6 l$ u/ y6 T( d7 _9 O( L
& _# \( H: @2 T5 D! g' K+ P$ j- stringstream s_height1,s_height2,s_length;& y( D7 X+ c9 Q1 D
- s_height1 <<height1;3 P+ l+ S- G( L* N. w
- s_height2 <<height2;
. e8 ]" p y4 g- N7 B& g - s_length <<length;
. @4 n) u$ ]5 l' ]5 ^& h
, X4 \5 A+ z2 k% \- Expression *expression1,*expression2,*expression3;) [2 ?# p6 \( m7 c' Y! g
- expression1 = workPart->Expressions()->CreateSystemExpression(s_height1.str());, J) m1 ?0 i& }
- expression2 = workPart->Expressions()->CreateSystemExpression(s_length.str());
( H; N, `* x( W( A' W - expression3 = workPart->Expressions()->CreateSystemExpression(s_height2.str());
9 A( A' e. P* a) q0 F6 G
; i! O1 `9 O# n( b# r7 ~5 U! D" Q; A8 R- // line1 dimension " i* R, o' E6 J
/ {2 p6 ?3 n( o/ W; @9 w j- Sketch::DimensionGeometry dimLine1_startPoint;% T. ]6 h; S7 k+ k, i! u
- dimLine1_startPoint.Geometry = line1;
6 ~* i+ O" _* `( n" p - dimLine1_startPoint.AssocType = Sketch::AssocTypeStartPoint;
7 G8 @! c: {3 z& F" t8 w' l - dimLine1_startPoint.AssocValue = 0;5 \' I: t4 ?& _/ O4 k
- dimLine1_startPoint.HelpPoint.X = 0.0;- Q( b8 U+ b$ x( Z' K
- dimLine1_startPoint.HelpPoint.Y = 0.0;
' M: y. \4 f& V - dimLine1_startPoint.HelpPoint.Z = 0.0;
& J, u- g( H" T) u - dimLine1_startPoint.View = nullNXObject;
) m" b) N1 Y0 M+ G: A$ I
( L, k" ^6 t5 l( [- Sketch::DimensionGeometry dimLine1_endPoint;
4 `. I; z; _% e; c, y - dimLine1_endPoint.Geometry = line1;9 c) l, y( Q. U0 B+ h$ ?2 B0 \/ j
- dimLine1_endPoint.AssocType = Sketch::AssocTypeEndPoint;
4 |" V2 z! U3 T0 m: ~6 w) D - dimLine1_endPoint.AssocValue = 0;
- M: G9 l- B; l, W - dimLine1_endPoint.HelpPoint.X = 0.0;
2 y t; N3 h" A - dimLine1_endPoint.HelpPoint.Y = 0.0;
2 {- f" j, Z) l: H - dimLine1_endPoint.HelpPoint.Z = 0.0;3 C% T; T6 _0 R6 q" u
- dimLine1_endPoint.View = nullNXObject;
% ^% z7 K+ k5 D& K- J
$ ?4 f: D, `. P' p: d5 R: L- Point3d dimOrigin1(-100, height1/2, 0.0);
3 C/ d( V$ z. s/ [ x7 t/ Y5 C D - 1 @$ }0 ^: M/ a" s/ Z) o; Y2 b
- sketch1->CreateDimension(Sketch::ConstraintTypeParallelDim, dimLine1_startPoint, dimLine1_endPoint, dimOrigin1, expression1, Sketch::DimensionOptionCreateAsDriving);
1 {% ^; i% Z2 J! \5 t% G: O
* d2 x- V1 }% i5 `! J7 Y6 ]
7 C: Y1 g+ }% P" b5 v2 e- + j; J; i, S) F; ]' a
- // line2 dimension
+ C$ a! w3 }( n* g" l ^' i - # j/ x# X6 c+ ]; _
- Sketch::DimensionGeometry dimLine2_startPoint;
; X/ p6 W* S- Q - dimLine2_startPoint.Geometry = line2;
, Z. J3 Y) W1 t; ~+ X - dimLine2_startPoint.AssocType = Sketch::AssocTypeStartPoint;
8 \% |8 X. V- G2 t. t* j - dimLine2_startPoint.AssocValue = 0;$ z% _' t/ o6 x/ h
- dimLine2_startPoint.HelpPoint.X = 0.0;' G; q8 e- X1 W1 q
- dimLine2_startPoint.HelpPoint.Y = 0.0;
8 T; {, V6 Q' ~! l2 D - dimLine2_startPoint.HelpPoint.Z = 0.0;
+ e$ [' L# q* [ R - dimLine2_startPoint.View = nullNXObject;
9 a, Q% \2 I; d - * V1 M- ]3 ]) ^7 w% q. h k4 o* n
- Sketch::DimensionGeometry dimLine2_endPoint;
# @ a6 T: _- v# b6 n - dimLine2_endPoint.Geometry = line2;
0 [7 q+ ]# @; `, x* x- a y - dimLine2_endPoint.AssocType = Sketch::AssocTypeEndPoint;9 C; ]+ a8 C3 F% v7 e& G$ y# C
- dimLine2_endPoint.AssocValue = 0;
) Z2 Z' K8 m4 B& _6 \6 W' K, G - dimLine2_endPoint.HelpPoint.X = 0.0;# y# y, q* t/ H. j* W m' i
- dimLine2_endPoint.HelpPoint.Y = 0.0;* y6 I* q# L0 z, ^4 E5 A
- dimLine2_endPoint.HelpPoint.Z = 0.0;' N( Y4 A) M5 k! f. ~& C1 |+ g% ^5 [7 D
- dimLine2_endPoint.View = nullNXObject;
8 ?% E v6 l% a% a! K+ e. d
7 M, R7 H/ L; w9 r- Point3d dimOrigin2(length /2,100 + height1, 0.0);
( i: Y7 v$ @" X# I* r( F
+ v. D% p# q f8 D% F" W0 c+ C- sketch1->CreateDimension(Sketch::ConstraintTypeParallelDim, dimLine2_startPoint, dimLine2_endPoint, dimOrigin2, expression2, Sketch::DimensionOptionCreateAsDriving);: y6 u* n, X% c$ { ^
% |0 |3 S6 Z: @" Z n4 I7 n$ L- . k! h/ W" y! U' [" }8 b
- & J8 l6 R+ C6 n- u2 j
- // line3 dimension + k; X7 x, V2 w6 e5 F/ ^# e( ~' w
9 B! I( l& Y4 A6 R3 M/ C- Sketch::DimensionGeometry dimLine3_startPoint;* H: u. ?( ~" d; ?1 x* n) o, _
- dimLine3_startPoint.Geometry = line3;0 p+ ^! f0 f+ U& I9 e* E' @" w
- dimLine3_startPoint.AssocType = Sketch::AssocTypeStartPoint;0 P$ A" @! E2 V' Y$ t
- dimLine3_startPoint.AssocValue = 0;% s8 k9 ^8 ^/ m7 }) B) d
- dimLine3_startPoint.HelpPoint.X = 0.0;
) A1 c2 X! w% o6 H: [) o P- o# \5 T - dimLine3_startPoint.HelpPoint.Y = 0.0;
: T; [5 ]: u7 E% P- m - dimLine3_startPoint.HelpPoint.Z = 0.0;
# V! Y9 E* y3 W% w L - dimLine3_startPoint.View = nullNXObject;$ m+ r2 Q- @0 C; Z' ?
- L( x- M, L0 X* j; o, k2 d4 z
- Sketch::DimensionGeometry dimLine3_endPoint;0 e f7 V# G. U4 ~/ }$ s
- dimLine3_endPoint.Geometry = line3;
2 u, h; r' b) Z. U- R3 F - dimLine3_endPoint.AssocType = Sketch::AssocTypeEndPoint;
& Z) | r# e6 ^6 W4 { - dimLine3_endPoint.AssocValue = 0;
% Z+ f3 ?- e* g" K) C - dimLine3_endPoint.HelpPoint.X = 0.0;+ L ] e. ^9 U" k4 H3 r
- dimLine3_endPoint.HelpPoint.Y = 0.0; e6 F3 Y, N3 Y5 n# I; x
- dimLine3_endPoint.HelpPoint.Z = 0.0;6 Y, A z: ]7 l; n
- dimLine3_endPoint.View = nullNXObject;
& w' e; o, ^9 k3 a+ W" P - 4 w( \1 ?8 F' O2 N
- Point3d dimOrigin3( 100 + length, height1-height2+ height2 /2 , 0.0);
; l" ?: t& j0 S4 q) _) F4 y& L$ z -
% @7 \" _6 l/ Q# U - sketch1->CreateDimension(Sketch::ConstraintTypeParallelDim, dimLine3_startPoint, dimLine3_endPoint, dimOrigin3, expression3, Sketch::DimensionOptionCreateAsDriving);
$ { |: b3 P6 U( d
" A2 j5 n7 D9 S
) T+ j" H/ v/ w+ ^
( e/ Z( C8 a9 R; y, m; ^) I- //5 update & deactive7 S/ Y8 ~; v4 P3 q- I2 r) g7 f. }( [
- sketch1->Update();
! B+ m3 h8 k! i6 d. M9 N
2 x; f. N8 ]2 k0 }7 Z- sketch1->Deactivate(Sketch::ViewReorientFalse,Sketch::UpdateLevelModel);6 @7 y: f& g! ?/ [# E' W
. [! K; N5 M. x7 I- delete expression1;
8 X5 T; x3 M7 j# C - delete expression2;7 u2 Q2 p9 e+ c
- delete expression3;
* c% \$ s4 |* `; q - 7 |; n7 {0 C1 T
- }
: j k7 C. T# h8 J
复制代码 ' |; K& B0 [+ o& j# F5 `. p( g
4 k; l3 _ E/ v [# S% a
0 r' G4 @5 }! P- ?6 l" `0 L
. P# g6 n" ~3 _5 V7 [ |
|