|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
PLM之家-NX9.0 二次开发实例视频31 NXOpen C++创建基本特征 <1>-草图的创建
; k3 \( b0 A+ e内容:' Z4 U- `! J1 ^0 _9 G1 T, @- w
草图作为参数化建模的基础,使用代码实现草图的创建过程,主要是对草图环境的初始化,以及草图约束的添加等问题。+ @. ?; g% e* k. `5 M
目的:
5 ?' K! d. k. u" C在NX中,使用NXOpen C++可以很方便的进行JA的录制,从而发掘草图约束中尺寸约束和几何约束的规律,通过这种方式,可以快速的完成开发。2 x/ f' O t7 X9 A) O! Z
NXOpen C++创建草图基本特征
1 |# H: D1 y7 {- ~ 31 NXOpen C++创建基本特征-草图的创建(1)项目介绍
2 t1 X5 r. N* x# W X 31 NXOpen C++创建基本特征-草图的创建(2)UI设计5 N7 ~! _0 C0 n1 L
31 NXOpen C++创建基本特征-草图的创建(3)项目创建* `9 r9 c; m% b6 d0 ^
31 NXOpen C++创建基本特征-草图的创建(4)草图特征创建9 i: Q, ^& d$ h2 H
31 NXOpen C++创建基本特征-草图的创建(5)添加几何到草图' ^5 }% M y8 C4 D5 y
31 NXOpen C++创建基本特征-草图的创建(6)添加草图几何约束
* L" \* p5 c+ f8 o3 t8 Q% S6 s 31 NXOpen C++创建基本特征-草图的创建(7)添加草图尺寸约束
6 I* w4 e# n+ T9 V# _ }2 ` 31 NXOpen C++创建基本特征-草图的创建(8)尺寸和UI关联5 i9 n; A7 G0 @' E {5 u' n% b
0 T9 y& c& F/ N1 L% l) U: m
& J" S* {/ n. {2 o: d/ |% a9 \/ E2 x1 e1 P
) T9 g( L! w0 o- r
( c2 @7 m1 N' f* h5 N关键代码分享:% n# ]: u# I5 G
7 l3 d) _3 M6 v: r* x
& }) B1 X$ p. V, \
- ! U) Q& |* F' \6 V: `
- void lesson31_createSkeTCh::createIPSketch()* H7 e+ E5 [; j8 h
- {
1 c, r0 {+ ?/ m* s - 0 D5 }& H" w9 {3 k: A# E; G
- Sketch *nullSketch(NULL);$ L4 D5 n# a+ i2 k
- SketchInPlaceBuilder *sketchInPlaceBuilder1;
: Z' S- W, M* j2 B* h - sketchInPlaceBuilder1 = workPart->Sketches()->CreateNewSketchInPlaceBuilder(nullSketch);7 c, Y7 p( q# w2 G) k, o |& }0 o' F
- sketchInPlaceBuilder1->SetPlaneOption(Sketch::PlaneOptionNewPlane);, Q9 N- o1 w& t3 b J: i. |
6 L7 z( y7 h0 R& `- q k- //sketchInPlaceBuilder1->Plane()->SetMethod(PlaneTypes::MethodTypeFixedZ);
" k: ?) ~2 z; g, F
! ^4 d6 I! c# d- w. W
1 K' P; o$ X5 ^* ?1 I$ u- // add preference- O- D$ e$ F" R
# |; |+ @( E: E2 `" e6 ^ W9 [- theSession->Preferences()->Sketch()->SetContinuousAutoDimensioning(false);
; o1 ^3 \2 Y' C( U: A$ u
: e7 _5 A+ v, ^9 T- Drafting::PreferencesBuilder *preferencesBuilder1;
1 F1 b/ G, t& C* F- O% A - preferencesBuilder1 = workPart->SettingsManager()->CreatePreferencesBuilder();
: @6 I2 h' U, {1 l. z5 L1 ? - preferencesBuilder1->AnnotationStyle()->DimensionStyle()->SetAngularDimensionValuePrecision(3);
1 W. h( W: t3 j' E7 C+ Z$ c - preferencesBuilder1->AnnotationStyle()->DimensionStyle()->SetDimensionValuePrecision(3);
; C' D' f# L0 n9 w5 G, h - preferencesBuilder1->Commit();
: E9 O+ n" e; D- o x - 0 {: W7 L* r; }( g$ f! |) z
- preferencesBuilder1->Destroy();
c9 U0 x* {7 f- K
: D! b! z8 Y g2 m/ Z
" S b! O( d) Q* P" e- NXObject *nXObject1;
9 [( F/ [! x2 s9 u& r& L - nXObject1 = sketchInPlaceBuilder1->Commit();
5 z! c+ k& {5 k2 h" g; d& z! d - 8 Y( I3 S% L0 f. q' z {
- Sketch *sketch1(dynamic_cast<Sketch *>(nXObject1));
1 D& Z2 I. i3 W' a8 y d - Features::Feature *feature1;- a8 _& `8 {1 s" S( D7 ?' v8 ^3 X/ j
- feature1 = sketch1->Feature();4 x' w/ D/ _! ^* }% j8 S
- feature1->SetName("XY-Plane-Sketch");
/ l4 C5 b% a8 u7 x( @3 u" r' p) _+ F - 6 c: @* |' V4 @5 Q3 H- N4 k
- sketchInPlaceBuilder1->Destroy();
$ @* L1 {9 W$ o
, J2 A; i2 Q8 U! S2 ^. P3 e- //1 active sketch 3 u: H4 D1 H2 d, F
. i! Z2 Q9 c1 Z* T( w4 x& j7 v- sketch1->Activate(Sketch::ViewReorientFalse);5 ^- b7 c T B& O
- & {; c" N/ F. k
- double height1 = this->expressionHeight1->GetProperties()->GetDouble("Value");
4 @( X: ^' V" H1 Z - double height2 = this->expressionHeight2->GetProperties()->GetDouble("Value");
, P5 g u* y. d9 K - double length = this->expressionLength->GetProperties()->GetDouble("Value");
- G! @% p ~- @, z5 C, Y3 b - // 2.1 create geometry
/ @, u: c1 {, {- D7 g - 2 b$ l) `9 I* |% m
- Point3d startPoint1(0.0, 0.0, 0.0);
% P; m9 b" t+ M F5 [ - Point3d endPoint1(0, height1, 0.0);( j8 S+ ?( W8 }4 `3 I
- Point3d endPoint2(length, height1, 0.0);
3 c* L" }% z4 \" {/ q - Point3d endPoint3(length, height1-height2, 0.0); s- D v3 N" W" Q) W
- Point3d origin = sketch1->Origin();! s* n% A, l0 |, C
- Point *originPoint = workPart->Points()->CreatePoint(origin);, F* _- i4 c% K/ f3 \
- . ]8 V& }; T$ G ~7 ?) N" P
- Line *line1,*line2,*line3,*line4;
D) v5 ^' ?, q* X1 o - line1 = workPart->Curves()->CreateLine(startPoint1, endPoint1);
; _" U" @$ U3 V8 n- N! P - line2 = workPart->Curves()->CreateLine(endPoint1, endPoint2);
5 t( o6 u% w! s$ F( O - line3 = workPart->Curves()->CreateLine(endPoint2, endPoint3);6 y& z/ L/ _) x H6 O4 O7 e
- line4 = workPart->Curves()->CreateLine(endPoint3, startPoint1);
1 J! Q% }- Y% ~8 A8 ] - // 2.2 add geometry
& r1 q9 U! {4 L4 S+ `2 @ @
' v& A5 h4 F3 |- sketch1->AddGeometry(line1,Sketch::InferConstraintsOptionInferCoincidentConstraints);
# n( N& p! O" f. J, M - sketch1->AddGeometry(line2,Sketch::InferConstraintsOptionInferCoincidentConstraints);. |0 {/ t& ^" N8 G: j
- sketch1->AddGeometry(line3,Sketch::InferConstraintsOptionInferCoincidentConstraints);) B. H* Q: I/ y5 w; m( Y7 M
- sketch1->AddGeometry(line4,Sketch::InferConstraintsOptionInferCoincidentConstraints);
9 q" J. C: B! D* ?8 G! J) p* m
5 J5 j& P |. I0 L [4 |- //3 add constraints ( gemo). W j3 M" L: Z5 r/ N; R
- * \: }" h1 Z) r4 R! f
- Sketch::ConstraintGeometry geomline1;
. `0 ]; {' f9 ? - geomline1.Geometry = line1;" G! _0 v6 x& O V# n H
- geomline1.PointType = Sketch::ConstraintPointTypeNone;- m- J# b& E. ^+ d1 J: w
- geomline1.SplineDefiningPointIndex = 0;' e0 _! S! z3 W
- sketch1->CreateVerticalConstraint(geomline1);8 r( o" F1 D3 Y" L# U: A: o& d
" l1 R- z, m2 W4 K+ ]- Sketch::ConstraintGeometry geomline2;7 b) i9 W4 h. l& d4 f9 R" v
- geomline2.Geometry = line2;+ _# r p; R$ O# `- \
- geomline2.PointType = Sketch::ConstraintPointTypeNone;6 K, N+ W/ U9 D* m) Y
- geomline2.SplineDefiningPointIndex = 0;
! J( L. J: B/ B2 r - sketch1->CreateHorizontalConstraint(geomline2);
5 t" J: V$ `- Q$ X" }* ]8 k - 7 p ^0 f9 `8 p; |" u9 w. z+ k
- Sketch::ConstraintGeometry geomline3;9 I! Y/ I* r! R+ ~9 [
- geomline3.Geometry = line3;* ~$ }: X/ `) T4 C: j/ ^
- geomline3.PointType = Sketch::ConstraintPointTypeNone; ?: r; \- z1 R" T
- geomline3.SplineDefiningPointIndex = 0;( N. ?- Q* Q8 C9 @
- sketch1->CreateVerticalConstraint(geomline3);
5 p. n, f+ t- A9 z - $ Y, k' h" T$ s. t- \# p z I
- Sketch::ConstraintGeometry geomline1_startPoint;9 ?) \% R. q E# `0 ]! [1 {2 z
- geomline1_startPoint.Geometry = line1;: t( Q$ z; b) {+ b, w- P+ @
- geomline1_startPoint.PointType = Sketch::ConstraintPointTypeStartVertex;
) W, J) \" g. q# n9 C" k - geomline1.SplineDefiningPointIndex = 0;
4 m- ~& C+ w t) U1 ?/ f - Sketch::ConstraintGeometry geomline2_originPoint;; G& _, q2 e) t$ D9 v
- geomline2_originPoint.Geometry = originPoint;
9 G. q& G' N1 B4 R; y - geomline2_originPoint.PointType = Sketch::ConstraintPointTypeNone;3 L+ f" Y! Z# ~8 M, v
- geomline2_originPoint.SplineDefiningPointIndex = 0;
" P( N' F: l f6 x) [% j$ x - sketch1->CreateCoincidentConstraint(geomline1_startPoint,geomline2_originPoint);/ Z+ ]! k! v4 R) r
) i" ~3 {4 Y: {& {- //4 add constraints (dimension)4 |8 H9 w2 x$ P/ t, p
- 6 a" J" |8 U. k2 w/ f" | T. d; a
- NXObject *nullNXObject(NULL);
3 M& g9 a7 H4 c7 c' p4 _ - 6 {) z9 J: Z! ?/ ^$ P _2 u" w
5 g3 }; {7 W6 d* w0 g" H- stringstream s_height1,s_height2,s_length;4 W9 w1 w( W9 M* p; V. H
- s_height1 <<height1;
1 D$ D9 b% Y. ]6 H+ U - s_height2 <<height2;5 w% f4 r/ j+ [4 Q" s) a" k
- s_length <<length;) ^- }$ j+ @& C# T3 W
9 _- ~1 M% I- X8 d. u) {" Y! R- Expression *expression1,*expression2,*expression3;
3 c+ q! M7 Z9 t8 W - expression1 = workPart->Expressions()->CreateSystemExpression(s_height1.str());
, |' s- V+ G/ J. @: S - expression2 = workPart->Expressions()->CreateSystemExpression(s_length.str());" x( s$ W6 E7 m! I" X; ?5 X ^
- expression3 = workPart->Expressions()->CreateSystemExpression(s_height2.str());8 j5 c0 y; w+ A1 M2 e
; Y* J g* H5 H2 w5 q6 t- // line1 dimension
/ [; [* W3 t$ Z4 `1 P! h
7 `$ Z) E, c |) O2 q- Sketch::DimensionGeometry dimLine1_startPoint;, c' ~) N8 X* f+ J" g( M0 `
- dimLine1_startPoint.Geometry = line1;/ e1 D$ h* L( K8 y, {$ G) N
- dimLine1_startPoint.AssocType = Sketch::AssocTypeStartPoint;- E* a0 {0 X$ D8 ?2 \" H0 {9 l- u9 m; @" Y
- dimLine1_startPoint.AssocValue = 0;0 @% W2 [& D7 I' [
- dimLine1_startPoint.HelpPoint.X = 0.0;
K+ a+ Z' d4 k; C# p+ \ - dimLine1_startPoint.HelpPoint.Y = 0.0;
, n; g$ s; W( S/ X - dimLine1_startPoint.HelpPoint.Z = 0.0;8 r2 w8 B6 Q' \
- dimLine1_startPoint.View = nullNXObject;
' l# `( ]$ @& y8 Z2 v$ M! P
6 o/ c: A, n4 n z6 Z- Sketch::DimensionGeometry dimLine1_endPoint;9 [2 V+ u( b% x
- dimLine1_endPoint.Geometry = line1;; M0 P5 Y+ n0 `" M% h: T
- dimLine1_endPoint.AssocType = Sketch::AssocTypeEndPoint;
( j/ D3 l' w7 t1 V* E$ @ - dimLine1_endPoint.AssocValue = 0;1 u- J: ^! y( b3 i# p' ^% Y) F- K: L
- dimLine1_endPoint.HelpPoint.X = 0.0;: t6 |( z0 E" ~6 \8 X, B3 |
- dimLine1_endPoint.HelpPoint.Y = 0.0;
' F6 X6 R3 J" s0 s! F; M) y - dimLine1_endPoint.HelpPoint.Z = 0.0;5 G3 X8 I% s/ H* F3 j; E* `( S4 Z& G
- dimLine1_endPoint.View = nullNXObject;! T5 }0 W8 w" r5 y
- $ L; S" A6 W( P* e; m
- Point3d dimOrigin1(-100, height1/2, 0.0);
% [1 [! F+ Q( O: R$ ^ - - Z- ^+ i8 b* C2 N# U1 V
- sketch1->CreateDimension(Sketch::ConstraintTypeParallelDim, dimLine1_startPoint, dimLine1_endPoint, dimOrigin1, expression1, Sketch::DimensionOptionCreateAsDriving);' Y; I. @. j# E4 p
- 4 [8 X: V' x% Z, @4 x
4 R3 S$ i3 [; Y5 p! U-
' t4 U% F6 J" W# C' O - // line2 dimension
/ S: @7 `* G; w& N+ o - & f' ]3 j5 g2 |4 I& S
- Sketch::DimensionGeometry dimLine2_startPoint;+ M# Y7 N) S$ h5 [6 T
- dimLine2_startPoint.Geometry = line2;
n+ u7 z. ?3 l4 U8 S t; N - dimLine2_startPoint.AssocType = Sketch::AssocTypeStartPoint;
$ z) H+ n/ u" v2 g - dimLine2_startPoint.AssocValue = 0;
( Y. e4 s0 K# [+ s - dimLine2_startPoint.HelpPoint.X = 0.0;2 n! N2 d6 P! [3 x# |7 L" V- t
- dimLine2_startPoint.HelpPoint.Y = 0.0;
4 e' Q5 Y. d* f1 a1 Q7 M - dimLine2_startPoint.HelpPoint.Z = 0.0;, J* _3 t5 t, q3 N1 l/ O
- dimLine2_startPoint.View = nullNXObject;
( A* G- Q) z& q- z" H9 A) Y8 ?5 Z
9 p; z+ q: ~$ e- Sketch::DimensionGeometry dimLine2_endPoint;
; x% @, @" k2 V | - dimLine2_endPoint.Geometry = line2;
- d. n9 ^+ U9 o% s" i1 _! x. G$ h - dimLine2_endPoint.AssocType = Sketch::AssocTypeEndPoint;( B0 a- g) r L3 c+ e! T, }# {3 p
- dimLine2_endPoint.AssocValue = 0;
3 a1 ]1 F$ ?8 Z* F5 \9 V/ w5 w - dimLine2_endPoint.HelpPoint.X = 0.0;
! Q) U; a1 P3 `. Z - dimLine2_endPoint.HelpPoint.Y = 0.0;; ~, X0 A' n# f$ B5 L9 w+ ?* U$ b
- dimLine2_endPoint.HelpPoint.Z = 0.0;
0 V& ~7 l; l- D5 `2 Y6 ?1 } r - dimLine2_endPoint.View = nullNXObject;
/ f% O4 b4 d. |7 y/ p# w+ E
7 k) a2 m8 @; ~; }: c: g- Point3d dimOrigin2(length /2,100 + height1, 0.0);
$ l9 C+ w2 T+ [+ D4 M+ `. Q9 J- W4 y - ) ~# f. \" p& ?5 B' h K
- sketch1->CreateDimension(Sketch::ConstraintTypeParallelDim, dimLine2_startPoint, dimLine2_endPoint, dimOrigin2, expression2, Sketch::DimensionOptionCreateAsDriving);" u+ b- r. f! o1 M# d
- - c' z, d) E# y w5 ^( J, J. H
- ) x: B# V1 u8 |8 q0 H* p5 M+ G$ P u
- ! C6 ^' M' l) `" h
- // line3 dimension / _4 F- d4 a2 L6 t: }
/ g, b2 X% r/ A- Sketch::DimensionGeometry dimLine3_startPoint;
; F8 E& h |2 c8 ~5 [ - dimLine3_startPoint.Geometry = line3;$ p! r7 `1 K& Y. N- g2 n
- dimLine3_startPoint.AssocType = Sketch::AssocTypeStartPoint;
, S% y, y# y' q7 K7 j4 P - dimLine3_startPoint.AssocValue = 0;! N8 T2 }& H% f& r( V( v
- dimLine3_startPoint.HelpPoint.X = 0.0;: p" Y+ h/ Q* Y5 s: ~# _6 \
- dimLine3_startPoint.HelpPoint.Y = 0.0;7 c, P" d% [) {3 @* o
- dimLine3_startPoint.HelpPoint.Z = 0.0;
' t! k" b' d" v9 H - dimLine3_startPoint.View = nullNXObject;
* \# F0 m$ x: o; Q6 {) y& w - 7 T3 b& a7 `, I& q" ?
- Sketch::DimensionGeometry dimLine3_endPoint;9 q& i g8 @" h
- dimLine3_endPoint.Geometry = line3;
% k2 G8 X( ?+ x4 k3 n2 S( A% z& v - dimLine3_endPoint.AssocType = Sketch::AssocTypeEndPoint;; x& f1 V% E- i$ {* P
- dimLine3_endPoint.AssocValue = 0;
6 a' y$ a: ~4 a - dimLine3_endPoint.HelpPoint.X = 0.0;. M( h4 s) o+ A: X
- dimLine3_endPoint.HelpPoint.Y = 0.0;' l' Y2 ^$ I9 H& i' D5 X6 f, a( M
- dimLine3_endPoint.HelpPoint.Z = 0.0;6 @ Y5 j# s, L8 r: n( K0 N8 w
- dimLine3_endPoint.View = nullNXObject;
8 m$ I1 J* d9 `& M. n; [* I - 5 B, {5 ?7 R8 i/ g% T. y6 V/ e, J
- Point3d dimOrigin3( 100 + length, height1-height2+ height2 /2 , 0.0);! ^- R5 E! A$ y; Y( b" |: N
-
' r& a) \- a: v& A/ N- G - sketch1->CreateDimension(Sketch::ConstraintTypeParallelDim, dimLine3_startPoint, dimLine3_endPoint, dimOrigin3, expression3, Sketch::DimensionOptionCreateAsDriving);
0 I$ u0 z& L/ K, J. f3 o
, W3 c* P; n+ c! v
( a# \4 d3 {- I& y$ k8 G
. Y( V3 A( I7 _" S: G8 H1 H, `/ j- //5 update & deactive
2 e; w( _- ^; h6 U, `# X - sketch1->Update();
+ F! a, M& _6 [5 E3 p$ \! d; z - # T/ { X5 j+ [- a H* m9 T
- sketch1->Deactivate(Sketch::ViewReorientFalse,Sketch::UpdateLevelModel);
; [. n- O7 q1 f5 e# R% T - . T( T5 W' O& g, _' Y$ t
- delete expression1;
) ?$ s ?# [& C! Q2 v% o - delete expression2;$ W% h. a1 ]7 r# K6 \
- delete expression3;7 }8 `# A. j1 G7 { S
-
. i* o0 a5 z1 B5 x$ h$ w+ ^& k* q6 o - }' U: {% g1 y; ~! j( k
复制代码 5 [0 Z: z, Q) k- g9 F( M; I7 `
L# @3 T4 ?: i) d2 o; j
5 y O' m+ T+ d6 _% K# T7 e* J5 L9 l8 F; [
|
|