|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
PLM之家-NX9.0 二次开发实例视频31 NXOpen C++创建基本特征 <1>-草图的创建
1 I1 U9 [" t0 u3 E* w9 }内容:
& V8 P4 M$ D! A' I* j( ^草图作为参数化建模的基础,使用代码实现草图的创建过程,主要是对草图环境的初始化,以及草图约束的添加等问题。# ]2 E; V# z- O0 }! I0 e# a
目的:
, C8 m* x1 _' ]- s. Q( L. p) c4 M6 L' q% _在NX中,使用NXOpen C++可以很方便的进行JA的录制,从而发掘草图约束中尺寸约束和几何约束的规律,通过这种方式,可以快速的完成开发。7 P+ F& N* _ ?& w* T% j$ ~6 u. P
NXOpen C++创建草图基本特征
4 s) I( F! k; M; s3 a# e$ R% s* K 31 NXOpen C++创建基本特征-草图的创建(1)项目介绍
: {+ d" `' S- h% T0 v8 D3 O5 B$ W 31 NXOpen C++创建基本特征-草图的创建(2)UI设计
: y! J. v: s9 i$ }" k2 s& W1 ?0 m: S 31 NXOpen C++创建基本特征-草图的创建(3)项目创建
' M8 ?& s; z* f3 z. E$ T. c! a* H 31 NXOpen C++创建基本特征-草图的创建(4)草图特征创建; t+ a5 X+ _1 t; X
31 NXOpen C++创建基本特征-草图的创建(5)添加几何到草图
- Y! \& X f7 [ 31 NXOpen C++创建基本特征-草图的创建(6)添加草图几何约束
. \, ^$ l% `+ @2 N' e3 G 31 NXOpen C++创建基本特征-草图的创建(7)添加草图尺寸约束: T7 Y& B/ K7 T$ j# y% \
31 NXOpen C++创建基本特征-草图的创建(8)尺寸和UI关联5 K( y- m" Z+ s* |
4 w+ P0 A8 ?+ P% d7 c# L7 b; Z$ p1 E
+ R3 ^8 p! @/ v9 c ?2 y2 ~1 W2 a- T) L2 ~ H3 k
2 y' w& ~% G2 V5 X. V: E: m- `% f, L
0 |; g d, { {关键代码分享:& r# A+ I9 `7 Q3 a; p
' O9 o; t/ i' Y+ a, v5 X" N1 {' f4 E3 ?6 ~9 @9 j9 Q
- " m% t! I) s; y5 L- ]3 X
- void lesson31_createSkeTCh::createIPSketch()
3 A( T: h8 J+ I5 v/ s' o - {) U& c& S1 ?/ k# y- h0 f
$ t: d( L6 W. ^+ a: z- Sketch *nullSketch(NULL);
2 I i8 o4 U$ P3 k) `$ E) _ - SketchInPlaceBuilder *sketchInPlaceBuilder1;, ] ?- b9 J; U/ K% }0 \
- sketchInPlaceBuilder1 = workPart->Sketches()->CreateNewSketchInPlaceBuilder(nullSketch);1 y( J" L0 l) x* p. I; e
- sketchInPlaceBuilder1->SetPlaneOption(Sketch::PlaneOptionNewPlane);$ @& T8 b/ e0 ] C0 B+ E& f
1 R9 Q8 I6 O$ u3 b3 t- x- //sketchInPlaceBuilder1->Plane()->SetMethod(PlaneTypes::MethodTypeFixedZ);
8 y/ A6 u' _- v: k8 n% |1 |
: F" W/ S; \# O9 F2 u3 l
& v4 B/ @! y. V! i. @- // add preference
' }# o: \' U, c. U: e2 H - 0 V5 v% f+ f+ x$ B
- theSession->Preferences()->Sketch()->SetContinuousAutoDimensioning(false);7 E4 c( O$ B' @4 H( ~
' y' F8 y4 B+ p: X6 V- Drafting::PreferencesBuilder *preferencesBuilder1;
8 p/ ~1 _' e+ `2 k( z/ L' y7 h - preferencesBuilder1 = workPart->SettingsManager()->CreatePreferencesBuilder();
7 d, @5 s5 b/ F7 @; U& E$ R0 n/ k - preferencesBuilder1->AnnotationStyle()->DimensionStyle()->SetAngularDimensionValuePrecision(3);; `# N1 i) s6 p2 s
- preferencesBuilder1->AnnotationStyle()->DimensionStyle()->SetDimensionValuePrecision(3);
) o5 O; Z8 r6 Z" [6 D1 m2 ` - preferencesBuilder1->Commit();2 c1 C, z6 z7 o
- % K& p) ^! j* d+ ^
- preferencesBuilder1->Destroy(); f2 B: |5 Z+ n' l9 p6 p
3 \4 ^( A: Y( U3 K- / J7 n! n( V1 E: a- s" v
- NXObject *nXObject1;3 ~4 U2 o' S* G* B: w; {2 n
- nXObject1 = sketchInPlaceBuilder1->Commit();) [. L, \1 _- c8 v- D/ W# g' E
- 6 k% p. b3 e% o1 m7 u* A& `( ]# L
- Sketch *sketch1(dynamic_cast<Sketch *>(nXObject1));' Z9 X- H% ~! A. Z, A, @
- Features::Feature *feature1;
: I: u: V: @; h - feature1 = sketch1->Feature();
0 d5 A# X; V6 e - feature1->SetName("XY-Plane-Sketch");
9 {, P- X3 Q2 Y0 X* T- ~ - 7 j+ f8 h: p( k
- sketchInPlaceBuilder1->Destroy();
# T) B! C' @; ~3 L
% |5 }0 r B k# ]- //1 active sketch
, {( h$ ~6 w) U( e" V - / y. r+ \! l; H& u+ e1 Q
- sketch1->Activate(Sketch::ViewReorientFalse);7 h4 ^ O6 e5 {( V. }) T& b
-
5 X. f( ?: a: Y* y' e# B - double height1 = this->expressionHeight1->GetProperties()->GetDouble("Value");% R& N* y! \/ ?8 }% {- l3 o
- double height2 = this->expressionHeight2->GetProperties()->GetDouble("Value");, s n/ R; ]8 U, M' l
- double length = this->expressionLength->GetProperties()->GetDouble("Value");1 i t4 X! t1 l5 d: F' j
- // 2.1 create geometry
Z" O' C ^" ]7 s - / e R+ v) U0 v1 P i& \) I
- Point3d startPoint1(0.0, 0.0, 0.0);6 Q! k( n! o$ }5 V
- Point3d endPoint1(0, height1, 0.0);% B. h6 m/ _$ A
- Point3d endPoint2(length, height1, 0.0);# n7 W( `4 |! p3 g
- Point3d endPoint3(length, height1-height2, 0.0);. O* p+ D L$ N9 k1 J# P( v6 I
- Point3d origin = sketch1->Origin();3 T. I ]# }2 k4 }3 z. o2 Z
- Point *originPoint = workPart->Points()->CreatePoint(origin);! p6 ^5 }, e) [
1 D ^5 D. o1 c; D/ ]- Line *line1,*line2,*line3,*line4;8 Y: {) _% L5 Z( ^) K
- line1 = workPart->Curves()->CreateLine(startPoint1, endPoint1);* m% q$ i% V4 u
- line2 = workPart->Curves()->CreateLine(endPoint1, endPoint2);
' c. N* X9 I1 N1 l - line3 = workPart->Curves()->CreateLine(endPoint2, endPoint3);4 I) `) f" B8 j0 `8 p) B! P. T
- line4 = workPart->Curves()->CreateLine(endPoint3, startPoint1);
- [5 J. |9 y K, v - // 2.2 add geometry
; \1 s2 x) [, y, j
# k# z2 Q1 ]# I7 Q! E$ T- sketch1->AddGeometry(line1,Sketch::InferConstraintsOptionInferCoincidentConstraints);( c$ j! M# N) Q; h. c
- sketch1->AddGeometry(line2,Sketch::InferConstraintsOptionInferCoincidentConstraints);
" [+ Z: J/ Y/ m( T" x+ o - sketch1->AddGeometry(line3,Sketch::InferConstraintsOptionInferCoincidentConstraints);; e9 e z/ I6 S+ Y0 e Z
- sketch1->AddGeometry(line4,Sketch::InferConstraintsOptionInferCoincidentConstraints);4 O# v3 x( R3 n- e9 p
- + V1 {" C3 h: S, Q
- //3 add constraints ( gemo)
, R- Z* g0 \+ t' P$ K
) h T& C5 O; M9 E- ?- Sketch::ConstraintGeometry geomline1;
1 c( C" v7 B* k: a6 a9 z2 n - geomline1.Geometry = line1;
" B1 T' [( o- h% [# ?- \2 y3 ^/ ]9 D - geomline1.PointType = Sketch::ConstraintPointTypeNone;2 P; a# P% C9 e
- geomline1.SplineDefiningPointIndex = 0;
' R% o$ q# g8 o5 ^+ K7 C, c; F: X - sketch1->CreateVerticalConstraint(geomline1);
S3 B, B5 d( | - : { j( k: `4 [# }3 i
- Sketch::ConstraintGeometry geomline2;
7 \7 i5 h0 l4 [" d7 Y. y" s& m - geomline2.Geometry = line2;5 H3 u8 A0 t1 l4 L6 d: N! c
- geomline2.PointType = Sketch::ConstraintPointTypeNone;8 v V2 A6 m, w. P* \
- geomline2.SplineDefiningPointIndex = 0;
; g# e* @. S: m1 F" e3 f - sketch1->CreateHorizontalConstraint(geomline2);
1 h( V& G) i0 n: `* a6 [ N! N - 6 _7 e) |* ?9 Z2 s: x3 t+ e
- Sketch::ConstraintGeometry geomline3;$ l. O" e) y, G+ c. O7 v8 i2 }
- geomline3.Geometry = line3;
. ?* w1 h# d1 @' S+ j) e9 s1 f M - geomline3.PointType = Sketch::ConstraintPointTypeNone;
: ` a/ Y+ k7 M* Z! l - geomline3.SplineDefiningPointIndex = 0;
! G g. g' Y6 |9 R3 S% Q2 k$ j4 { - sketch1->CreateVerticalConstraint(geomline3);
6 X' A5 S3 n6 F" ]( O
) z4 d7 I4 S- t. n9 M5 ^- Sketch::ConstraintGeometry geomline1_startPoint;2 k _0 E0 r9 t1 S
- geomline1_startPoint.Geometry = line1;
5 ? @" d! T7 l% n - geomline1_startPoint.PointType = Sketch::ConstraintPointTypeStartVertex;; E2 U9 b: s/ C/ E$ \" z' X$ j
- geomline1.SplineDefiningPointIndex = 0;1 o4 S2 O; {; h1 }: l0 W
- Sketch::ConstraintGeometry geomline2_originPoint;# r- Z! c S7 O, }9 f8 ], ^
- geomline2_originPoint.Geometry = originPoint;
3 H0 }( d9 {: E e - geomline2_originPoint.PointType = Sketch::ConstraintPointTypeNone;/ J; O( t% M) Q2 x- W. A
- geomline2_originPoint.SplineDefiningPointIndex = 0;
* I W5 g1 [6 }) D* Z% ^3 L. w - sketch1->CreateCoincidentConstraint(geomline1_startPoint,geomline2_originPoint);+ ~% C8 q4 q/ B" l+ ]- _: W
. ]% i9 C- e2 q- A, Z/ e2 U- //4 add constraints (dimension)9 X0 _* z1 Q8 [& S# E# X
4 ~+ U2 r% Z" Q5 [5 F3 s- NXObject *nullNXObject(NULL);
' k$ u2 R& \6 k0 ~. \; d
7 H. j7 J9 E* D
/ I' D. h1 k+ v' Z- stringstream s_height1,s_height2,s_length;" }% g/ [3 S8 W4 p! N/ I8 H
- s_height1 <<height1; M+ V; A7 R- \! C0 Y2 ~- F
- s_height2 <<height2;
) [1 _/ G- r3 _! n# L! A2 Q - s_length <<length;) p- i' e1 Z( J+ m: l; B
- 1 t \4 i! f! F- K5 i F
- Expression *expression1,*expression2,*expression3;" a9 L3 F1 ?4 ^- p9 V4 |+ }9 p8 E5 s
- expression1 = workPart->Expressions()->CreateSystemExpression(s_height1.str());: A; N; H. K/ ~0 D$ b) z
- expression2 = workPart->Expressions()->CreateSystemExpression(s_length.str());2 ?0 a* F9 s5 T/ G8 j: l. |& X7 J3 ~
- expression3 = workPart->Expressions()->CreateSystemExpression(s_height2.str());! C6 ^" m) Z& r( P3 u- q) f' x; X
- # p9 n6 A$ q& ?- C
- // line1 dimension
) m' h1 L* |- w# j - . Y3 f7 `, w) c8 n5 E6 Y3 s
- Sketch::DimensionGeometry dimLine1_startPoint;( |. B: o* z5 v, @% o8 i* v
- dimLine1_startPoint.Geometry = line1;
; v- N5 r1 L& _6 P4 J L - dimLine1_startPoint.AssocType = Sketch::AssocTypeStartPoint;
3 p0 z* ^, C& l" U - dimLine1_startPoint.AssocValue = 0;
, D' e% l0 r1 }0 n; r - dimLine1_startPoint.HelpPoint.X = 0.0;
. h l' V3 y" L - dimLine1_startPoint.HelpPoint.Y = 0.0;
/ D. J6 r. y5 N - dimLine1_startPoint.HelpPoint.Z = 0.0;8 F1 j6 z7 O C4 [0 @: c
- dimLine1_startPoint.View = nullNXObject;
6 _4 }( j8 B5 |% | `* [9 J2 }8 Z) l
2 p. v, ~& l. ~& p& c/ Y- Sketch::DimensionGeometry dimLine1_endPoint;
) ^# Y4 F2 V" m# f5 T( Z - dimLine1_endPoint.Geometry = line1;2 Z, {* Z" ]! E- k; K. ^% g6 o
- dimLine1_endPoint.AssocType = Sketch::AssocTypeEndPoint;
& T& V% G. ^( f f0 p, T: `! J - dimLine1_endPoint.AssocValue = 0;
3 g _9 H; G9 i; P* i - dimLine1_endPoint.HelpPoint.X = 0.0;* S7 L* ?" M. T& h V5 ?
- dimLine1_endPoint.HelpPoint.Y = 0.0;2 u8 H- J: |6 C9 d$ t+ w& _- x8 K
- dimLine1_endPoint.HelpPoint.Z = 0.0;% B) L) t* Z( [6 G2 ~4 w* B7 [
- dimLine1_endPoint.View = nullNXObject;
1 n. D8 h- T6 t( S8 v: Z - 0 R7 h8 l/ y0 a
- Point3d dimOrigin1(-100, height1/2, 0.0);( t5 k i3 j* ~ v
2 {) e1 P- } _4 D1 M& @- sketch1->CreateDimension(Sketch::ConstraintTypeParallelDim, dimLine1_startPoint, dimLine1_endPoint, dimOrigin1, expression1, Sketch::DimensionOptionCreateAsDriving);6 Z3 x3 B& E: z. q# I
3 I& X( A E# D5 V; o
2 Y( t0 ]) E S-
+ U x) Z, T0 N3 Y q - // line2 dimension " H- r) c: T0 R4 R" X
5 k! b4 p# ~/ l" }3 Z- Sketch::DimensionGeometry dimLine2_startPoint;
: F) i2 K2 s. b7 m3 J - dimLine2_startPoint.Geometry = line2;/ N; ~/ G" W: A; S
- dimLine2_startPoint.AssocType = Sketch::AssocTypeStartPoint;( Z7 v% l- M5 `% J; h
- dimLine2_startPoint.AssocValue = 0;
0 ]" T' O; d% {! Y" C1 S5 H - dimLine2_startPoint.HelpPoint.X = 0.0;- F! Z# Z @- u; q n7 n0 b
- dimLine2_startPoint.HelpPoint.Y = 0.0;5 P0 @( l; k p
- dimLine2_startPoint.HelpPoint.Z = 0.0;" d! G+ ~" s+ W6 X0 }- p8 p; ^
- dimLine2_startPoint.View = nullNXObject;6 j" Z+ d8 H2 c- l& v( P0 ^" X
- ) W+ ?9 o/ {$ |1 J e
- Sketch::DimensionGeometry dimLine2_endPoint;
. A6 k! |; G' l1 c* K! ? - dimLine2_endPoint.Geometry = line2;
7 E2 ?4 H' _4 m" f5 ~1 x - dimLine2_endPoint.AssocType = Sketch::AssocTypeEndPoint;) R. B% [% Y8 Y9 r
- dimLine2_endPoint.AssocValue = 0;
5 Y3 E% A& \& \- Q& ^/ q+ C& R - dimLine2_endPoint.HelpPoint.X = 0.0;: |/ L2 B3 C$ p u4 h8 V3 ?; s
- dimLine2_endPoint.HelpPoint.Y = 0.0;
6 _+ o; y5 v1 P' o' D* @$ O - dimLine2_endPoint.HelpPoint.Z = 0.0;" }. i0 o0 T3 f6 u' t/ x& o' m
- dimLine2_endPoint.View = nullNXObject;
5 C, [4 c1 ]) G
, O' E: v* K) v( N N4 ]- Point3d dimOrigin2(length /2,100 + height1, 0.0);
5 @& m$ n. W( j1 F& D
4 u K0 m7 K; c- sketch1->CreateDimension(Sketch::ConstraintTypeParallelDim, dimLine2_startPoint, dimLine2_endPoint, dimOrigin2, expression2, Sketch::DimensionOptionCreateAsDriving);
1 [$ X' s# ?1 K0 L& R2 S) X- Y - : p) g4 h2 }8 h& U
" c& {; _# Y! k8 T' v2 |) ]- - D* W- i S( @* l' ?4 K
- // line3 dimension
) g. y" I: J4 }/ K% i& y - " k4 Y( p; m, l/ k, H% {
- Sketch::DimensionGeometry dimLine3_startPoint;( K) i* E, T- N2 N% k- n
- dimLine3_startPoint.Geometry = line3;6 E1 g K# C S: i6 o; n% l1 R) L2 l
- dimLine3_startPoint.AssocType = Sketch::AssocTypeStartPoint;
' @2 M7 O/ U" p O& Y# M1 l - dimLine3_startPoint.AssocValue = 0;
D% z: l3 \) V; z9 X; c1 g - dimLine3_startPoint.HelpPoint.X = 0.0;9 |( |. n: t5 T' {- `
- dimLine3_startPoint.HelpPoint.Y = 0.0;
$ b/ h6 ` a+ h3 \$ N - dimLine3_startPoint.HelpPoint.Z = 0.0;, A1 \0 z( _! G
- dimLine3_startPoint.View = nullNXObject;
% B$ c2 ~& O9 f9 y5 ]
, o0 Z: |; ?/ ^5 e- Sketch::DimensionGeometry dimLine3_endPoint;
% e7 X8 T3 d1 |# f& ?$ F - dimLine3_endPoint.Geometry = line3;: G% v D. u; m3 u! }
- dimLine3_endPoint.AssocType = Sketch::AssocTypeEndPoint;
: Y; V6 p4 X3 A( j - dimLine3_endPoint.AssocValue = 0;
% B" o5 a: c6 z, L8 P+ t6 D: ? - dimLine3_endPoint.HelpPoint.X = 0.0;( M$ \8 g+ ?3 ~" V% ~3 U
- dimLine3_endPoint.HelpPoint.Y = 0.0;
6 G) Z) A1 E' c- q: m - dimLine3_endPoint.HelpPoint.Z = 0.0;6 c( b# h8 B" F( W' I' h
- dimLine3_endPoint.View = nullNXObject;
& h4 m7 |8 W% I' ^- ?9 _- O
/ @" F n- V: Z9 g- Point3d dimOrigin3( 100 + length, height1-height2+ height2 /2 , 0.0);* ]# j& J1 F* z1 r
-
+ b# e) X% b3 q - sketch1->CreateDimension(Sketch::ConstraintTypeParallelDim, dimLine3_startPoint, dimLine3_endPoint, dimOrigin3, expression3, Sketch::DimensionOptionCreateAsDriving);
* I4 _6 |& D/ t" ]
, f+ j/ W. Z4 [ ?. N- 9 _2 L' v' W# e
- + U0 d) F3 ?" M: k
- //5 update & deactive
1 F9 b! O3 e8 b: ~0 W+ g/ ] - sketch1->Update();
" X* G3 a+ v# X z
. p+ T7 j0 z+ o; w3 ~- sketch1->Deactivate(Sketch::ViewReorientFalse,Sketch::UpdateLevelModel);
; w1 a% Y! P% O. x. v9 h. d - * y3 s, j; V1 e1 \& x5 [
- delete expression1;+ [# \9 Z" c2 ^, r' e6 ^' u9 b
- delete expression2;
; r( S6 C: O- @* o& F - delete expression3;
( O4 G$ i* K1 l - 9 j# R+ o, h& A9 M7 J! }! j, C
- }
+ h1 E9 d( x! Q
复制代码
; Q+ P0 m! ~7 e1 B( ?
, Z9 |: |! n( H' U4 R+ f& d
9 ^6 S; M3 }, E+ \0 Z
& X& V7 w- X; J$ T F |
|