|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
PLM之家-NX9.0 二次开发实例视频31 NXOpen C++创建基本特征 <1>-草图的创建
6 H$ v5 V- b* m: M$ t内容:: d3 ~! L. ^1 {* o8 t E7 E
草图作为参数化建模的基础,使用代码实现草图的创建过程,主要是对草图环境的初始化,以及草图约束的添加等问题。/ {: q: |- _3 Y% u
目的:
$ l5 g( ~" L8 e3 Q, {3 x$ \在NX中,使用NXOpen C++可以很方便的进行JA的录制,从而发掘草图约束中尺寸约束和几何约束的规律,通过这种方式,可以快速的完成开发。
/ f7 s: W1 Z0 E
NXOpen C++创建草图基本特征
( o0 ^! i9 B8 H+ t5 r n6 t- P& L 31 NXOpen C++创建基本特征-草图的创建(1)项目介绍$ X* t2 }2 Z0 J5 s i' c, B" G
31 NXOpen C++创建基本特征-草图的创建(2)UI设计
: z0 q0 M* {) N, A {2 B 31 NXOpen C++创建基本特征-草图的创建(3)项目创建
9 R& T e5 j% n# O7 t0 T, q9 V4 o 31 NXOpen C++创建基本特征-草图的创建(4)草图特征创建5 D# r+ C% m6 J1 q$ Z1 R
31 NXOpen C++创建基本特征-草图的创建(5)添加几何到草图
( h7 k+ r+ M! k l 31 NXOpen C++创建基本特征-草图的创建(6)添加草图几何约束1 X% s5 ?' L" K% \1 V& ~
31 NXOpen C++创建基本特征-草图的创建(7)添加草图尺寸约束
9 s; x5 t+ \- q 31 NXOpen C++创建基本特征-草图的创建(8)尺寸和UI关联
; Q/ W: ], o% Z; e% U
* z# g: |4 K* `4 g& m
, I2 a$ V0 Z" U- _% F& U1 x0 G( D3 s* T" S( I1 c9 {6 V" X
/ { r. t. m, L$ L9 \
; _+ q) X8 C( j
关键代码分享:
) A+ o0 T% [# L$ M. Y! J6 J9 \
3 e4 v& t$ p/ O
6 ]- H v: X) P" z3 y- A7 u
) v+ S; _# j( t- c8 G; @1 X: o- void lesson31_createSkeTCh::createIPSketch()
5 V1 j3 x+ q0 u - {- v0 h1 l2 l3 U# L5 w
/ r) O- r# f; p2 _& \. y0 T$ S- Sketch *nullSketch(NULL);% F% H0 h, Y" k* s& }8 {" ?
- SketchInPlaceBuilder *sketchInPlaceBuilder1;6 J4 {/ g, i( s2 {# p/ b+ y h
- sketchInPlaceBuilder1 = workPart->Sketches()->CreateNewSketchInPlaceBuilder(nullSketch); [$ Q* l/ G# o; d& H( J( t2 m
- sketchInPlaceBuilder1->SetPlaneOption(Sketch::PlaneOptionNewPlane);
2 D) f; r( J1 s, @6 r* F - ; t8 V( g6 x% D+ g# _9 ]1 k
- //sketchInPlaceBuilder1->Plane()->SetMethod(PlaneTypes::MethodTypeFixedZ);
. g/ Z8 }6 _+ r+ _/ D - $ c) ~: C0 ?8 ?3 I
- ) ~$ g* o3 ~. v( j5 V% R+ ]
- // add preference* b/ ~1 U9 `$ w/ i1 }
- 5 J/ T5 s& H) S o: N/ ^& P
- theSession->Preferences()->Sketch()->SetContinuousAutoDimensioning(false);
2 M/ f( ^( i; S& y- y$ V
+ {# d) |6 Q' E! O9 ^; r- Drafting::PreferencesBuilder *preferencesBuilder1;
3 H6 {9 v) C" w& q - preferencesBuilder1 = workPart->SettingsManager()->CreatePreferencesBuilder();7 H$ z7 {9 N8 F# U5 q' }8 p9 z; q
- preferencesBuilder1->AnnotationStyle()->DimensionStyle()->SetAngularDimensionValuePrecision(3);
' o( c9 ~% H/ q; F - preferencesBuilder1->AnnotationStyle()->DimensionStyle()->SetDimensionValuePrecision(3);
# d1 w$ N" S! Q" ^ - preferencesBuilder1->Commit();
7 s5 x) R) `$ X1 `5 n1 w! G+ u - ! l- a }$ R1 K5 r; {) Z7 s
- preferencesBuilder1->Destroy();
* `: M. [/ p1 H2 F* } - " R, ?2 i0 [* e) t/ D
- ( o" }6 e5 d2 T
- NXObject *nXObject1;
9 K6 U: a7 R8 ]/ H - nXObject1 = sketchInPlaceBuilder1->Commit();1 e( p3 j& l: u% \1 |2 `
3 `& G: A4 D/ h3 Q* q$ ?% P- Sketch *sketch1(dynamic_cast<Sketch *>(nXObject1));) p" _! ? A7 u
- Features::Feature *feature1;+ R& z+ F+ ~/ K8 T% b2 @
- feature1 = sketch1->Feature();
+ D: r& c: O1 H- G2 w, V3 M C3 P. S - feature1->SetName("XY-Plane-Sketch");
- g3 t0 V( x/ h. U4 R - % W+ Z% W; b& @% L1 Z6 x/ Y4 b: g
- sketchInPlaceBuilder1->Destroy();( W& Y% o! L/ [ [$ |
2 @& B( z* r& O3 S- //1 active sketch
, Z" x0 D* G$ u8 {" @2 c - + f$ K- k) x! P
- sketch1->Activate(Sketch::ViewReorientFalse);
- Q3 g; k M% ?9 w" H$ r3 l, Q' M -
# w- U% z C3 D+ g, o2 I - double height1 = this->expressionHeight1->GetProperties()->GetDouble("Value");& d! O& d/ y9 `( S5 q
- double height2 = this->expressionHeight2->GetProperties()->GetDouble("Value");3 Q$ a" }3 X4 T$ K% S% \) h
- double length = this->expressionLength->GetProperties()->GetDouble("Value");
_4 [' C$ |1 I# X3 k( N2 C - // 2.1 create geometry
1 Z4 i' K. j+ @+ V9 X1 N% E
, `5 [$ y5 |; D, _0 z- Point3d startPoint1(0.0, 0.0, 0.0);
1 Z% `! y/ p$ S- X8 y - Point3d endPoint1(0, height1, 0.0);8 a! s$ T- A# e2 U- Z% W
- Point3d endPoint2(length, height1, 0.0);( w4 @7 D/ R0 e4 I
- Point3d endPoint3(length, height1-height2, 0.0);8 `0 r3 j/ w# Y/ e* t& a
- Point3d origin = sketch1->Origin();
- J' O( Z- ~. [5 {8 m: B - Point *originPoint = workPart->Points()->CreatePoint(origin);: D4 @% A$ {- M- r$ _
. T" ^- F# w* s& d* O1 i- c- Line *line1,*line2,*line3,*line4;% l0 S/ g4 I, Z' N
- line1 = workPart->Curves()->CreateLine(startPoint1, endPoint1);' \! T& t$ S) c: F9 v2 T" T
- line2 = workPart->Curves()->CreateLine(endPoint1, endPoint2); d4 A4 J# a) u5 _5 N4 O
- line3 = workPart->Curves()->CreateLine(endPoint2, endPoint3);
4 C) D2 h" ]8 n6 G4 S; c - line4 = workPart->Curves()->CreateLine(endPoint3, startPoint1);
0 B6 b2 K, _ c1 ]2 t% L9 K$ F" J - // 2.2 add geometry, R9 Z% P7 ]2 N' ^) k- s& M6 T4 c
4 ?0 E3 L( {4 q1 c4 ~( _- sketch1->AddGeometry(line1,Sketch::InferConstraintsOptionInferCoincidentConstraints);
( y. t. l/ ?5 Y: E! ? - sketch1->AddGeometry(line2,Sketch::InferConstraintsOptionInferCoincidentConstraints);6 s) q& ~0 q$ l0 r4 J2 u9 r( @; }# i
- sketch1->AddGeometry(line3,Sketch::InferConstraintsOptionInferCoincidentConstraints);' t$ m0 b; f: W3 n
- sketch1->AddGeometry(line4,Sketch::InferConstraintsOptionInferCoincidentConstraints);- l4 z+ y2 U. @6 w
, o) L3 m( u0 c4 W! L& @$ I- //3 add constraints ( gemo)% I7 {3 U! F% a7 E# @- p
- 8 y3 ?+ s" r6 a+ h+ X& U8 O! u4 ~
- Sketch::ConstraintGeometry geomline1;
+ F/ T6 W" v2 d* v; M8 y, ]% ` - geomline1.Geometry = line1;
; z3 F" u, w2 h - geomline1.PointType = Sketch::ConstraintPointTypeNone;
% @: |7 i* E) J' F - geomline1.SplineDefiningPointIndex = 0;( L' T' X" o* k% y4 A& l! U5 w
- sketch1->CreateVerticalConstraint(geomline1);
+ T5 w: O: m$ W$ a
! M( R( Q8 i8 c4 j, ^- Sketch::ConstraintGeometry geomline2;$ p1 N) i$ k" _ h* S/ P" g6 @, S
- geomline2.Geometry = line2;
1 C; d6 J; \* \1 A4 `2 g( g" d - geomline2.PointType = Sketch::ConstraintPointTypeNone;5 Q: M/ F! @5 }; J
- geomline2.SplineDefiningPointIndex = 0;
/ V, I, o: i; u - sketch1->CreateHorizontalConstraint(geomline2);. f$ m1 f3 c8 X1 |
; h, m3 G5 {' S+ t, j4 |- Sketch::ConstraintGeometry geomline3;
' D5 z6 E' c" y2 \; Q+ z - geomline3.Geometry = line3;
6 l& q; I1 O" q- C$ j# t - geomline3.PointType = Sketch::ConstraintPointTypeNone;
* W9 w+ V$ @, }) s2 f - geomline3.SplineDefiningPointIndex = 0; T- b. i8 R3 o1 u: b) V( O/ @1 p5 @
- sketch1->CreateVerticalConstraint(geomline3);
$ C0 W1 Z" Q; N( d. w
8 \$ P7 o- J R u; c/ [- Sketch::ConstraintGeometry geomline1_startPoint;
; j3 s7 c3 Q; u) Z - geomline1_startPoint.Geometry = line1;
2 d) `, I1 h( F, n0 x - geomline1_startPoint.PointType = Sketch::ConstraintPointTypeStartVertex;
# E% c4 v3 z" a0 W: C( w# a5 [ - geomline1.SplineDefiningPointIndex = 0;- X. S0 @. f0 T6 A! G1 h
- Sketch::ConstraintGeometry geomline2_originPoint;
' R- r0 @: }1 \) z* O/ f - geomline2_originPoint.Geometry = originPoint;
/ x; \' K. E1 r& I2 H - geomline2_originPoint.PointType = Sketch::ConstraintPointTypeNone;
- B' W! U* N" N1 T( T; \ - geomline2_originPoint.SplineDefiningPointIndex = 0;
* m" s7 v7 X: S3 q9 l8 w2 E - sketch1->CreateCoincidentConstraint(geomline1_startPoint,geomline2_originPoint);3 G7 W( t5 W. u3 }
; i9 d; U% j' p+ [( L) q- //4 add constraints (dimension): r& K* u; W% F4 O. [
" G" z; Q/ t9 Y' h$ R- NXObject *nullNXObject(NULL);# r M2 n4 n5 P
/ y- U) g* w5 n- T
$ p4 }0 P) u4 O- stringstream s_height1,s_height2,s_length;
/ _$ c) s7 W O$ c- F* e# D - s_height1 <<height1;% L3 c1 |& X2 Q% L. }) i
- s_height2 <<height2;, d& Z7 [1 e) _6 Y
- s_length <<length;
7 B1 T. M4 @+ t# V) |$ a
8 \# @6 v4 y/ ^6 z1 E1 h- Expression *expression1,*expression2,*expression3;! d0 r* e) Y1 @2 h8 B$ q% w
- expression1 = workPart->Expressions()->CreateSystemExpression(s_height1.str());
6 ~) W1 v0 i" s; t( z% q - expression2 = workPart->Expressions()->CreateSystemExpression(s_length.str());* Z. u! D/ q- g5 f5 G
- expression3 = workPart->Expressions()->CreateSystemExpression(s_height2.str());
& W& r) U) h0 {* ~0 w+ c
0 V: I0 J, A' y! V- // line1 dimension
/ M# S2 B1 x- o* k; I
) C' @4 ?# m2 a; R9 B: L- Sketch::DimensionGeometry dimLine1_startPoint;' B# S$ |- C; K( V
- dimLine1_startPoint.Geometry = line1;
* T$ U, B( Q4 a - dimLine1_startPoint.AssocType = Sketch::AssocTypeStartPoint;9 ?$ ^5 P4 @2 ^
- dimLine1_startPoint.AssocValue = 0;
: U6 s$ Y1 W: h' c/ z1 q - dimLine1_startPoint.HelpPoint.X = 0.0;
2 v7 L* w( g# c - dimLine1_startPoint.HelpPoint.Y = 0.0;
+ F8 d" L% Z7 `! F( I& K1 R - dimLine1_startPoint.HelpPoint.Z = 0.0;7 c4 j0 H$ C! V( v) v; F9 G& j
- dimLine1_startPoint.View = nullNXObject;- {6 T. `6 i1 Z: M5 B- C) s
- ' w1 d& |; M' F1 M
- Sketch::DimensionGeometry dimLine1_endPoint;
+ G: E' B: E7 d- X) n" s) V - dimLine1_endPoint.Geometry = line1;! y: r& o" j. E* X r5 J7 Q
- dimLine1_endPoint.AssocType = Sketch::AssocTypeEndPoint;2 \( R) R+ F5 d$ b* q' s( b
- dimLine1_endPoint.AssocValue = 0;
" e* i3 i' I2 j |% } - dimLine1_endPoint.HelpPoint.X = 0.0;
: T5 g- ~) |' I5 `; G - dimLine1_endPoint.HelpPoint.Y = 0.0;* L: l- b- S: @/ K4 J5 [
- dimLine1_endPoint.HelpPoint.Z = 0.0;$ w+ Y& H2 I1 F
- dimLine1_endPoint.View = nullNXObject;
. P% Y- B0 A, v, B5 o - 1 k4 c0 f. R9 J% a
- Point3d dimOrigin1(-100, height1/2, 0.0);
, I4 v8 _ o+ Y7 K4 N( d6 h - % S9 V5 ?2 Z, ~7 i
- sketch1->CreateDimension(Sketch::ConstraintTypeParallelDim, dimLine1_startPoint, dimLine1_endPoint, dimOrigin1, expression1, Sketch::DimensionOptionCreateAsDriving);3 }# e3 s- {; ~
- % m2 c7 `% q. o4 ~( d/ E! z7 M B) I
4 i- W: U' B7 X" P$ Y-
2 s: K9 l" z0 J) g+ X - // line2 dimension
. F& _. g$ D' Q. M: z
$ p# E/ F: [$ l- X5 u- X; f: n- Sketch::DimensionGeometry dimLine2_startPoint; M: c' V: I$ H! b( L- g( d" Y
- dimLine2_startPoint.Geometry = line2;
9 t$ b8 y! @( m; ~0 r4 X' F$ h - dimLine2_startPoint.AssocType = Sketch::AssocTypeStartPoint;
; c0 a1 H/ j3 r& v. K3 M. f - dimLine2_startPoint.AssocValue = 0;
6 l1 w/ R' q4 q! M+ S' ]: Q) S - dimLine2_startPoint.HelpPoint.X = 0.0;
6 M2 l, l6 b$ d& p' E - dimLine2_startPoint.HelpPoint.Y = 0.0;$ G& {% g8 ]& E4 A
- dimLine2_startPoint.HelpPoint.Z = 0.0;
1 ]8 ^! V4 f, I, d& R - dimLine2_startPoint.View = nullNXObject;% B `5 T; x' V- g2 i. J5 @+ q
- 3 X Y* w! c& q5 S' R" o
- Sketch::DimensionGeometry dimLine2_endPoint;, a" ?% @8 ^+ n' z* o
- dimLine2_endPoint.Geometry = line2;, S" d. h1 d% d+ t% {) p
- dimLine2_endPoint.AssocType = Sketch::AssocTypeEndPoint;
+ e. A5 K1 n% S% P# G# R - dimLine2_endPoint.AssocValue = 0;
# b( @" n9 f4 k4 b - dimLine2_endPoint.HelpPoint.X = 0.0;# u, Q' ?0 w- l6 F$ Z7 E
- dimLine2_endPoint.HelpPoint.Y = 0.0;
3 H7 E% }" g8 B6 T& } - dimLine2_endPoint.HelpPoint.Z = 0.0;
5 t' L; G3 z; N) M# \1 } - dimLine2_endPoint.View = nullNXObject;7 ^5 L7 E: x& V6 `
2 J+ J0 w! n/ H5 E, M% z- y: u- Point3d dimOrigin2(length /2,100 + height1, 0.0);( C5 o" b. v) T- `% g6 o- M; B5 O
- 7 x# X" @$ Q3 g+ `, w% W! J
- sketch1->CreateDimension(Sketch::ConstraintTypeParallelDim, dimLine2_startPoint, dimLine2_endPoint, dimOrigin2, expression2, Sketch::DimensionOptionCreateAsDriving);0 e( w" C7 p2 T' ?
- . B: k+ K6 Q! m0 ~3 \5 A
9 w/ R- ^$ h0 w: o- ! _. Y+ H5 j1 q1 E! f
- // line3 dimension / j" y& D+ D' W. Y$ G O" ]& k
- / w4 v+ R1 o& B, t. ~. ~
- Sketch::DimensionGeometry dimLine3_startPoint;
5 M5 Q. E, r# X - dimLine3_startPoint.Geometry = line3;: D. G. G+ Z( |/ X
- dimLine3_startPoint.AssocType = Sketch::AssocTypeStartPoint;1 @0 U8 V" |! L
- dimLine3_startPoint.AssocValue = 0;; p7 R7 C$ W, H0 b G. _8 b9 B
- dimLine3_startPoint.HelpPoint.X = 0.0;
+ }* E$ A& V4 C% n F - dimLine3_startPoint.HelpPoint.Y = 0.0;& {% L+ f/ G: N
- dimLine3_startPoint.HelpPoint.Z = 0.0;9 s9 a. U8 m f; z. b' M! W: h
- dimLine3_startPoint.View = nullNXObject;
+ G q: i3 o* s6 i
& [; x# |, l: E& u% S3 ?; q- Sketch::DimensionGeometry dimLine3_endPoint;
( Y! N; ~9 e/ e R! B7 ^6 C. I - dimLine3_endPoint.Geometry = line3;
% Q/ w; E- _) U: ^8 @2 Y - dimLine3_endPoint.AssocType = Sketch::AssocTypeEndPoint;
% E3 \1 {, E+ p, z - dimLine3_endPoint.AssocValue = 0;
4 C& A+ V, J3 G - dimLine3_endPoint.HelpPoint.X = 0.0;
5 M$ b7 j% O) l% S - dimLine3_endPoint.HelpPoint.Y = 0.0;/ v( _& Y8 N+ [" e- }" R
- dimLine3_endPoint.HelpPoint.Z = 0.0;5 F/ R8 C: u' h) r& j6 u
- dimLine3_endPoint.View = nullNXObject;
8 X" w8 ^* R4 S) `; j3 A - % k' ]* ?1 T+ U0 |
- Point3d dimOrigin3( 100 + length, height1-height2+ height2 /2 , 0.0);1 w: U+ ]4 S4 l
- 0 f2 k8 n9 D0 b+ R8 ]' N
- sketch1->CreateDimension(Sketch::ConstraintTypeParallelDim, dimLine3_startPoint, dimLine3_endPoint, dimOrigin3, expression3, Sketch::DimensionOptionCreateAsDriving);* c$ d, O% E$ D6 z& f
- ; j% V6 N- r! P8 ]
- 8 v; F4 D4 N3 B3 |5 u
- ; f/ L# P4 N$ o3 N
- //5 update & deactive: V/ l( L1 f! `6 d$ q6 e' J
- sketch1->Update();" k+ R$ b$ k: z# [8 q3 F5 z
- 9 {- p- }! j; ]& c5 p
- sketch1->Deactivate(Sketch::ViewReorientFalse,Sketch::UpdateLevelModel);' b% }! w3 ^1 B$ L1 H0 Y
- % Y) ~6 s: a/ x! ^& Q: d& n6 O
- delete expression1;$ l3 |) x7 T* H
- delete expression2;
" F# p9 \- K, b0 |) J2 | - delete expression3;
+ S$ u$ b5 D1 v( X% f" S - ' i* R' `% ~2 n; H; p
- }
- y: Q- e8 G5 x
复制代码
5 k8 e+ q& w$ M3 b o4 R
y* a# `& v/ c3 V; T& y
, s9 V5 v: x; O% l9 C9 z/ k% K; V# E" c7 w! I! f n g+ s5 K1 a0 l
|
|