|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
PLM之家-NX9.0 二次开发实例视频31 NXOpen C++创建基本特征 <1>-草图的创建
: h4 q/ x. h: R% A3 l内容:, k) d9 I y2 y- {8 H
草图作为参数化建模的基础,使用代码实现草图的创建过程,主要是对草图环境的初始化,以及草图约束的添加等问题。2 d& A# d+ x/ P1 o( E3 I
目的:: B; s- i! X; u- o6 j* u, X
在NX中,使用NXOpen C++可以很方便的进行JA的录制,从而发掘草图约束中尺寸约束和几何约束的规律,通过这种方式,可以快速的完成开发。( {' \4 b" c0 }, e% d
NXOpen C++创建草图基本特征
7 D9 i' a8 l: ?, F: j2 U3 P& N 31 NXOpen C++创建基本特征-草图的创建(1)项目介绍
! ~& n) n* M- ~6 p8 a: D( D 31 NXOpen C++创建基本特征-草图的创建(2)UI设计
6 g. s2 B6 w3 y. g& W 31 NXOpen C++创建基本特征-草图的创建(3)项目创建
! B( c! t$ v: @' J 31 NXOpen C++创建基本特征-草图的创建(4)草图特征创建$ {0 ~/ [$ ~$ D' t) ?4 k" K
31 NXOpen C++创建基本特征-草图的创建(5)添加几何到草图2 {6 G5 s* i$ x. `6 h @# w. `
31 NXOpen C++创建基本特征-草图的创建(6)添加草图几何约束
6 @7 a: P4 D1 ^$ P$ i% o/ W& M& M$ I 31 NXOpen C++创建基本特征-草图的创建(7)添加草图尺寸约束& `- W0 W) J$ ]# F" m* j
31 NXOpen C++创建基本特征-草图的创建(8)尺寸和UI关联
/ v G# B# ]) N( i! L9 o" Q5 a; ]# b9 z$ i' N8 z
" R9 h3 X" Y) W$ ]' k- B% c
. h5 U- }$ h/ g& E
% i) @; s+ z9 m7 a6 @* k( f& O8 @. p5 E$ ~' [% Y
关键代码分享:
0 ?; b6 a# ^# B
- \. ?( D6 {% z5 v* E( I! [. r
3 i' s) u' j. g; c6 W; p f/ F- % g; r2 _ H; i, q# I8 m9 h. P
- void lesson31_createSkeTCh::createIPSketch()
& [* [4 A5 Z4 x o - {( D# h% o c3 Y" U* Z3 ~
# ~% K4 c8 Y$ s7 P% h- Sketch *nullSketch(NULL);
+ [" z& x! H l5 ^: Q. X2 U - SketchInPlaceBuilder *sketchInPlaceBuilder1; g- S7 V2 N0 h+ @" r" R# _4 h
- sketchInPlaceBuilder1 = workPart->Sketches()->CreateNewSketchInPlaceBuilder(nullSketch);
9 S2 P, F2 s% H" R8 i - sketchInPlaceBuilder1->SetPlaneOption(Sketch::PlaneOptionNewPlane);" c" f+ E- k% Y5 u9 Z: b' B
$ S- \% e" _* F6 L9 T( k" E- //sketchInPlaceBuilder1->Plane()->SetMethod(PlaneTypes::MethodTypeFixedZ);
1 C' _" z" B2 q- U+ I0 D0 M* g0 c
) b- z' Y$ g( e/ v8 I# d8 v3 N% w- 0 P8 g7 A7 b; ]% T# b1 r
- // add preference8 T0 q! Z z4 K& d% c0 j- }
- ) v# U4 _; Z) |5 [5 B$ w
- theSession->Preferences()->Sketch()->SetContinuousAutoDimensioning(false);
" K% t% g2 q/ k4 B - & n! R7 Q' t, f7 w, a7 V
- Drafting::PreferencesBuilder *preferencesBuilder1;
+ p# ?9 w0 z% C$ |( a1 Z/ l( P - preferencesBuilder1 = workPart->SettingsManager()->CreatePreferencesBuilder();
$ E& w$ S0 N9 P, o1 Q - preferencesBuilder1->AnnotationStyle()->DimensionStyle()->SetAngularDimensionValuePrecision(3);
: C0 i7 [2 Z& ] - preferencesBuilder1->AnnotationStyle()->DimensionStyle()->SetDimensionValuePrecision(3);/ v2 [8 @9 ] I ]1 A2 s6 K
- preferencesBuilder1->Commit();! j: ?6 a7 h$ k- Y6 @( L; u
( t! {* O4 O5 U8 z% N- preferencesBuilder1->Destroy();
& Y" A9 \6 P0 M0 {- v5 P - 1 Q3 l" O: \+ ^0 `$ X
; A) @$ Q( j5 u/ J3 E9 L- NXObject *nXObject1;
1 Y/ M9 h1 E4 P( S! K - nXObject1 = sketchInPlaceBuilder1->Commit();! l# _5 G$ A: i5 w. Y
- ! n; u1 W7 Z' F3 v, ~3 g/ R+ _2 p
- Sketch *sketch1(dynamic_cast<Sketch *>(nXObject1));
. i: D7 E- A7 a+ _& M. Y. ^ - Features::Feature *feature1;
. @% x- U. L! g$ F1 i1 X6 t - feature1 = sketch1->Feature();# u+ l) w( U; t1 v5 \
- feature1->SetName("XY-Plane-Sketch");
, Y8 D0 r/ o0 J- i$ {! R. ^ -
1 N6 B" o. f0 u! l, w6 d& { - sketchInPlaceBuilder1->Destroy();; [# L) x7 [/ f' X) t$ i4 {$ Z
- ( r- J+ r8 a6 }! a# B
- //1 active sketch
7 D. _0 T! U( v1 l - / |) s1 s" E/ [$ f, R9 k
- sketch1->Activate(Sketch::ViewReorientFalse);4 x/ k( ]9 Y$ e4 k. T
- . q$ i6 A! l6 S' `% F' s
- double height1 = this->expressionHeight1->GetProperties()->GetDouble("Value");3 n8 ]; A! X: J6 I; f% t9 c
- double height2 = this->expressionHeight2->GetProperties()->GetDouble("Value"); }3 C) F b: c
- double length = this->expressionLength->GetProperties()->GetDouble("Value");
$ `: ^5 Z5 \2 D9 x8 { - // 2.1 create geometry2 J D4 I, _- l- ]6 b7 f
4 F* L8 z) X3 I' w' B+ R- Point3d startPoint1(0.0, 0.0, 0.0);6 Z# }- M9 X2 b0 T, f$ V0 e
- Point3d endPoint1(0, height1, 0.0);
. a. q% n4 \4 A# D - Point3d endPoint2(length, height1, 0.0);
/ W! J: \0 Z: {/ r( [ - Point3d endPoint3(length, height1-height2, 0.0);
& {" y. L! Q. Q( c - Point3d origin = sketch1->Origin();
. U' P2 y9 w/ @5 a3 F! T2 N" W' C - Point *originPoint = workPart->Points()->CreatePoint(origin);2 [+ l7 R/ l1 m( k2 [+ w
* g+ B) d/ A8 F7 ~- Line *line1,*line2,*line3,*line4;
; I4 a {2 \0 Z/ I5 \, l - line1 = workPart->Curves()->CreateLine(startPoint1, endPoint1);3 N4 N% ?+ Y3 ~" G
- line2 = workPart->Curves()->CreateLine(endPoint1, endPoint2);' y8 {" ^/ ?1 O$ p4 C% l
- line3 = workPart->Curves()->CreateLine(endPoint2, endPoint3);, @/ _! i. B* K. n# _+ j
- line4 = workPart->Curves()->CreateLine(endPoint3, startPoint1);/ [* j5 y O9 `+ l9 l5 M2 l* \
- // 2.2 add geometry
) r! D0 L' s- w
- }1 S/ Z& s8 O0 h- sketch1->AddGeometry(line1,Sketch::InferConstraintsOptionInferCoincidentConstraints);8 y# ^7 `3 M3 b8 i2 I+ y; ]
- sketch1->AddGeometry(line2,Sketch::InferConstraintsOptionInferCoincidentConstraints);
2 _' Z" {8 ^( I& ? - sketch1->AddGeometry(line3,Sketch::InferConstraintsOptionInferCoincidentConstraints);
0 s/ T" l8 ~. d7 }$ V' w- ~ - sketch1->AddGeometry(line4,Sketch::InferConstraintsOptionInferCoincidentConstraints);
2 l: s: l, w% ]9 `0 F( g* a8 n- N - 3 s' E7 X" u- E1 ]: k
- //3 add constraints ( gemo)
' @5 H( P& P3 n% |
5 W# r" O) h3 `% ]: i- Sketch::ConstraintGeometry geomline1;7 y6 w. n {1 I) `: Z* H
- geomline1.Geometry = line1;
4 B3 a+ ]/ r8 C: d1 { - geomline1.PointType = Sketch::ConstraintPointTypeNone;
4 A1 j6 ^9 V; |2 u- n8 A" I+ X - geomline1.SplineDefiningPointIndex = 0;" j$ P7 o" J4 B- M0 A, U$ H
- sketch1->CreateVerticalConstraint(geomline1);
& ]+ R, Z! S" f
- c% q2 I/ q7 U$ b/ i" o" |- Sketch::ConstraintGeometry geomline2;1 N# K; H$ p( y
- geomline2.Geometry = line2;
4 T8 O3 i3 G7 p- @) c6 X - geomline2.PointType = Sketch::ConstraintPointTypeNone;
6 Q% _) l8 V9 y3 }2 B - geomline2.SplineDefiningPointIndex = 0;
% |1 V1 I9 y$ B! w - sketch1->CreateHorizontalConstraint(geomline2);
{7 K% X" d. [ b2 Z$ C# |8 P
' S* Z8 {! R6 h/ Z2 S& Q- Sketch::ConstraintGeometry geomline3;
w0 k. b$ R. S; {$ D/ S - geomline3.Geometry = line3;. q) ]0 @( S2 h: P. M P' w
- geomline3.PointType = Sketch::ConstraintPointTypeNone;
" |: U! H# v' q" s9 e" C - geomline3.SplineDefiningPointIndex = 0;
! [# c6 g5 _# S2 A+ { - sketch1->CreateVerticalConstraint(geomline3); s9 w8 ~' e: O# e% }
8 {2 B+ E7 R. v- Sketch::ConstraintGeometry geomline1_startPoint;
8 b2 S# _) W1 a8 |2 s0 l s1 n3 F - geomline1_startPoint.Geometry = line1;5 k2 [, |7 H- ]* w
- geomline1_startPoint.PointType = Sketch::ConstraintPointTypeStartVertex;
# H0 l% z. N: D8 i& `8 W1 y - geomline1.SplineDefiningPointIndex = 0;
1 r0 v; f: T: L( Z- b - Sketch::ConstraintGeometry geomline2_originPoint;
% H" e1 s8 Z3 ]4 J. r! g - geomline2_originPoint.Geometry = originPoint;' D# Z1 D$ t/ b8 u+ D. R$ C, U
- geomline2_originPoint.PointType = Sketch::ConstraintPointTypeNone;* k0 k/ e) v5 Y& `) M
- geomline2_originPoint.SplineDefiningPointIndex = 0;
2 F5 @+ x7 L! b- |+ Y: K - sketch1->CreateCoincidentConstraint(geomline1_startPoint,geomline2_originPoint);
8 C j$ [. L/ o' Z2 M1 F" b7 N' r - % Y0 O9 @) w0 W7 x
- //4 add constraints (dimension)) c8 O5 |2 w, k8 _: |) t+ O
- % t+ z- k/ ]" S1 n: u8 u: o _
- NXObject *nullNXObject(NULL);
+ R& L1 @7 i* \9 s% @ - 0 o% p2 \. l7 {5 d* F# i: I* W
- + Z- C5 m4 `/ J# Q: ]" D
- stringstream s_height1,s_height2,s_length;
/ ^* H5 l/ ^( r: t! D( n5 p - s_height1 <<height1;! |- f9 I, K+ g' `1 k
- s_height2 <<height2; T+ B& b% y5 B( K) u0 O5 A
- s_length <<length;% Z, W) U% _8 I5 y" M$ [) x
- 2 ?' q/ B- `- s C* |
- Expression *expression1,*expression2,*expression3;) C2 W" H6 T6 X Q
- expression1 = workPart->Expressions()->CreateSystemExpression(s_height1.str());
# f& O# j) z) X% U: o1 e. R - expression2 = workPart->Expressions()->CreateSystemExpression(s_length.str());
% s8 z) p8 b& i4 q2 f! Z# \# L& \ - expression3 = workPart->Expressions()->CreateSystemExpression(s_height2.str());% c1 M( h8 k" \
- 1 A" P( d% B$ \+ ?, M+ _
- // line1 dimension . H. t, ]5 s) W1 p% ? R
; g G k, \2 k4 o( L6 v% |2 g- Sketch::DimensionGeometry dimLine1_startPoint;
" p9 O {5 z# v1 e0 ~7 w4 c& k1 A, R - dimLine1_startPoint.Geometry = line1;
$ H5 J0 \) b0 K% ^! m - dimLine1_startPoint.AssocType = Sketch::AssocTypeStartPoint;
1 Y, J7 @- {) _/ v7 B3 {7 ] - dimLine1_startPoint.AssocValue = 0;6 y* b) t8 U, U$ B
- dimLine1_startPoint.HelpPoint.X = 0.0;
4 C5 y; s8 a6 ~, Y - dimLine1_startPoint.HelpPoint.Y = 0.0;
, e) `3 z2 Q, }) s! e: j6 i9 s. H - dimLine1_startPoint.HelpPoint.Z = 0.0;* [* T u4 ~+ r' I/ T- w
- dimLine1_startPoint.View = nullNXObject;( |! g' A: U7 G" B5 v+ h( I
' ]8 c* ~; P& L4 P+ n( y |2 s2 x- Sketch::DimensionGeometry dimLine1_endPoint;
, X6 O9 X8 q' R - dimLine1_endPoint.Geometry = line1;- S# r: h( L/ B4 @: ]
- dimLine1_endPoint.AssocType = Sketch::AssocTypeEndPoint;
+ t$ F* D: V( l - dimLine1_endPoint.AssocValue = 0;, a* D# f W+ D1 o
- dimLine1_endPoint.HelpPoint.X = 0.0;2 z' Z# r$ S$ A' U. }
- dimLine1_endPoint.HelpPoint.Y = 0.0;
+ @9 J$ o$ |% M' f c - dimLine1_endPoint.HelpPoint.Z = 0.0;. z! h+ } W- N; }1 c
- dimLine1_endPoint.View = nullNXObject;! u& v' J' \5 S# S$ R; z: X; }# E
. j. u( `. `% ?+ T& @& V5 u- Point3d dimOrigin1(-100, height1/2, 0.0);3 f. }' Y1 m0 O
- d# b5 z* M; _/ ?. g- sketch1->CreateDimension(Sketch::ConstraintTypeParallelDim, dimLine1_startPoint, dimLine1_endPoint, dimOrigin1, expression1, Sketch::DimensionOptionCreateAsDriving);
& r. `- Y- p+ H7 |/ h* L$ h - 1 g3 p9 `/ d4 k1 K* C7 a' _# ^
/ J x- _1 A& T- o( l% g2 z" x- 6 N* N* I3 }. ?
- // line2 dimension 2 M0 Q# Z0 H7 {$ z2 K- w
. ]# c5 B9 a i" O# G% v/ l- Sketch::DimensionGeometry dimLine2_startPoint;
% ^5 m! ?6 L* R! J- c - dimLine2_startPoint.Geometry = line2;+ _7 [+ x9 A( @$ q! E
- dimLine2_startPoint.AssocType = Sketch::AssocTypeStartPoint;( K' |9 H: \# `0 V% Z
- dimLine2_startPoint.AssocValue = 0;
6 R, m9 j B* y" J) M' R' Y$ J - dimLine2_startPoint.HelpPoint.X = 0.0;9 ?8 o7 r! z4 N2 L" `: I
- dimLine2_startPoint.HelpPoint.Y = 0.0;" j6 Z" l6 r6 d0 U* M
- dimLine2_startPoint.HelpPoint.Z = 0.0;' s2 j+ U' g- G: A1 v
- dimLine2_startPoint.View = nullNXObject;. D+ c% i: X6 ~
- 4 J9 S8 H2 K% j* _" s+ k" J
- Sketch::DimensionGeometry dimLine2_endPoint;
4 _: I8 P- Q2 c - dimLine2_endPoint.Geometry = line2;. p7 B' I8 B- C
- dimLine2_endPoint.AssocType = Sketch::AssocTypeEndPoint;& T; ]3 O4 L& Y% N* t. [
- dimLine2_endPoint.AssocValue = 0;
& O; y7 c6 ~) b+ e: {- u - dimLine2_endPoint.HelpPoint.X = 0.0;; h( J2 p' o% P% J/ m
- dimLine2_endPoint.HelpPoint.Y = 0.0;
: s; }- b" `7 E - dimLine2_endPoint.HelpPoint.Z = 0.0;% s, ^4 y( A( V/ S4 y f
- dimLine2_endPoint.View = nullNXObject;
+ O1 f" |+ v; K# s, b" p* K6 b" b - # t! O6 R) D. y5 k# R
- Point3d dimOrigin2(length /2,100 + height1, 0.0);
9 y7 E* T- M n. m' o2 L
* j+ h2 u3 O! V1 o6 {' [- sketch1->CreateDimension(Sketch::ConstraintTypeParallelDim, dimLine2_startPoint, dimLine2_endPoint, dimOrigin2, expression2, Sketch::DimensionOptionCreateAsDriving);: }8 y, g Z0 g* M
- 9 y6 E; f" G6 Y+ W4 E5 |3 c3 [
- ' P' s/ k/ M# \+ n/ [
- , V( j2 L$ N: E; H3 |' x) n& R
- // line3 dimension
' |6 a6 d1 e# `' _9 _
9 X$ X8 `0 ?, C2 u X7 Z- Sketch::DimensionGeometry dimLine3_startPoint;
0 j8 l9 I1 o2 ]% w - dimLine3_startPoint.Geometry = line3;7 s+ u9 ]! W+ O* [
- dimLine3_startPoint.AssocType = Sketch::AssocTypeStartPoint;; W e" Q8 Q. ]2 E. O/ s; n
- dimLine3_startPoint.AssocValue = 0;
8 b, O/ s4 L1 T$ D% e - dimLine3_startPoint.HelpPoint.X = 0.0;
$ T4 _* o* ?3 z - dimLine3_startPoint.HelpPoint.Y = 0.0;
" Z' E) f5 P) ^. R - dimLine3_startPoint.HelpPoint.Z = 0.0;* Q, t5 k' [' X0 P) U
- dimLine3_startPoint.View = nullNXObject;# q' r6 E, @0 o" I
?# s8 e! B Y- Sketch::DimensionGeometry dimLine3_endPoint;
6 n; o, M8 p. b6 W/ U, O( n3 O5 ]6 Q - dimLine3_endPoint.Geometry = line3;
* q" }2 c0 l/ w7 p - dimLine3_endPoint.AssocType = Sketch::AssocTypeEndPoint;& N* G! i; [8 _7 D7 g+ v
- dimLine3_endPoint.AssocValue = 0;
' o2 i; K( }% w) M. ^/ I/ A - dimLine3_endPoint.HelpPoint.X = 0.0;
& M O4 D/ U7 y1 V - dimLine3_endPoint.HelpPoint.Y = 0.0;
1 s* \/ Y4 h; t; z8 X - dimLine3_endPoint.HelpPoint.Z = 0.0;
1 U1 ^6 a5 U0 x- H - dimLine3_endPoint.View = nullNXObject;. I, b. P9 e) H; Z
- `* e7 h1 f; Z5 n" a2 f
- Point3d dimOrigin3( 100 + length, height1-height2+ height2 /2 , 0.0);
8 {% q0 u$ ^: _/ J- _) l) N - 4 Z4 r. v# r) }0 O( t
- sketch1->CreateDimension(Sketch::ConstraintTypeParallelDim, dimLine3_startPoint, dimLine3_endPoint, dimOrigin3, expression3, Sketch::DimensionOptionCreateAsDriving);
0 n m2 B1 l7 i( z+ J0 p/ P: I
4 v) Q. T1 n3 B" [/ u
5 r* j, T3 l" J' g) r5 m4 ^ E4 J k
) t" [5 i: ~' w! H- F- //5 update & deactive; K# i) E( c- h/ [5 P2 n1 [) t2 y
- sketch1->Update();
W& Z* M! p: j) A0 U - - T( P% w: g5 Q! h0 Z* ?- x
- sketch1->Deactivate(Sketch::ViewReorientFalse,Sketch::UpdateLevelModel);
T* F7 `0 T- L( [% T0 [4 m5 c - ) M `# e5 a; \4 A6 B; ~
- delete expression1;( N; f& Z! Y6 A$ N8 D& m: x0 E
- delete expression2;
9 i) o1 S* O; t( q G - delete expression3;7 ?1 }$ r2 X3 x% ?* w, b1 i2 I
- 4 a$ y2 p. e$ x6 E0 F9 l: F
- }
8 E% ?5 T7 K3 g
复制代码
8 r, l- u7 L% V
! M( p4 K- a' k6 B, a% H$ ]; [
( w. {/ ~$ ~! k" v( w% @8 `9 o7 P+ e' P$ O. `4 y5 D# G2 l! ]) {+ O+ m
|
|