|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
PLM之家-NX9.0 二次开发实例视频31 NXOpen C++创建基本特征 <1>-草图的创建& p8 @) D# ~/ w/ v5 g+ J2 B3 P
内容:
& d6 e$ J1 R) f$ L! L草图作为参数化建模的基础,使用代码实现草图的创建过程,主要是对草图环境的初始化,以及草图约束的添加等问题。" r1 r8 ~7 c1 `4 N, [
目的:
2 |" c( T! c8 G在NX中,使用NXOpen C++可以很方便的进行JA的录制,从而发掘草图约束中尺寸约束和几何约束的规律,通过这种方式,可以快速的完成开发。
{9 W& n$ U6 u$ _' [
NXOpen C++创建草图基本特征
# u& ?$ ~# | I) G1 h
31 NXOpen C++创建基本特征-草图的创建(1)项目介绍
# {0 o) ]$ `$ T4 ] 31 NXOpen C++创建基本特征-草图的创建(2)UI设计1 ^( n/ t! t* \* o' M& y2 n/ W3 |
31 NXOpen C++创建基本特征-草图的创建(3)项目创建
1 k/ a9 ~. _! I: R" n3 u% { 31 NXOpen C++创建基本特征-草图的创建(4)草图特征创建
6 A7 _1 J1 y* h& x3 n/ y 31 NXOpen C++创建基本特征-草图的创建(5)添加几何到草图4 ?* ]+ F6 n, k+ [
31 NXOpen C++创建基本特征-草图的创建(6)添加草图几何约束
9 f! R3 n( ^" b' a! q& m 31 NXOpen C++创建基本特征-草图的创建(7)添加草图尺寸约束# A# H% H9 r8 A/ K2 N1 J
31 NXOpen C++创建基本特征-草图的创建(8)尺寸和UI关联0 s1 d8 Q c; X; T/ j" ?
+ F. Z$ _ I* G% ^' d
5 m, i( \* j/ f3 i/ t/ w
% @5 x) O' [' z+ n1 ~ X8 u, v7 x7 S
) ]' w2 v$ I# c" l- Z
关键代码分享:
. v& ?: x) i+ f- ^8 ^% y
" l% X7 |+ d8 S" K& @
/ p. J$ x6 `- C. W/ Y% L) H# C
3 n# \8 S& V3 f! |2 u7 E- void lesson31_createSkeTCh::createIPSketch()
7 Z: T* s+ j$ w2 i# I t* t - {/ E, L4 y& z4 F$ y
- A' T" c% \2 {
- Sketch *nullSketch(NULL);
) S; V# M8 X% [5 u- g" |: \. A - SketchInPlaceBuilder *sketchInPlaceBuilder1;
$ c5 B: `; b! A& `1 p* S! d - sketchInPlaceBuilder1 = workPart->Sketches()->CreateNewSketchInPlaceBuilder(nullSketch);' X; F' U8 K4 o
- sketchInPlaceBuilder1->SetPlaneOption(Sketch::PlaneOptionNewPlane);
5 u4 v" ~) @" T" |4 K, B
- E' A% g! t1 g" d8 b5 k( E- //sketchInPlaceBuilder1->Plane()->SetMethod(PlaneTypes::MethodTypeFixedZ);
* \6 E* Y4 i3 o# _$ q
+ d/ @) n) u2 ?7 S
2 S# m% B: ^ K8 u* _- // add preference, }$ x* {! \9 ]8 b9 F$ I
- : K9 [5 J0 N2 }, y1 O! c& m
- theSession->Preferences()->Sketch()->SetContinuousAutoDimensioning(false);
6 G" F9 d* T y$ u% Q* j0 I - ; T' g0 g- f8 D0 O5 N
- Drafting::PreferencesBuilder *preferencesBuilder1;
* [/ D3 S% Z. s2 N* {: Y" }2 g( F - preferencesBuilder1 = workPart->SettingsManager()->CreatePreferencesBuilder();# e3 E2 C% J( f3 g* E! c D$ V# p5 |
- preferencesBuilder1->AnnotationStyle()->DimensionStyle()->SetAngularDimensionValuePrecision(3);
0 ^' w/ R o' u - preferencesBuilder1->AnnotationStyle()->DimensionStyle()->SetDimensionValuePrecision(3);7 ?3 C* a1 H. m, }, a1 ?% U
- preferencesBuilder1->Commit();
4 y2 ^& @* i7 k3 O3 \ - : p8 w( q; Y8 z6 c8 A" g
- preferencesBuilder1->Destroy();5 k' y0 N: a u( p
- . Q$ R; A1 u( y! O1 p; F% f
: k5 d. u' s, Z! k- NXObject *nXObject1;2 A0 Y# N& v& L2 _
- nXObject1 = sketchInPlaceBuilder1->Commit();3 ]2 e! A. S# I) k; W4 o! t
! ]4 ?! K3 I9 O8 T6 c- Sketch *sketch1(dynamic_cast<Sketch *>(nXObject1));
, @0 r. C9 S% `: V - Features::Feature *feature1;1 \' u# T4 i# Q
- feature1 = sketch1->Feature();
5 i7 S5 q4 _6 _: c. I v - feature1->SetName("XY-Plane-Sketch");* [, R, }4 U+ y9 P" v" k1 [' O2 E/ s
- . r/ w+ U! k- X& W# R+ Q* g
- sketchInPlaceBuilder1->Destroy();
- K3 t3 ~% m" R, ]/ y2 F7 L3 R - 4 i' z2 Y+ W% C' q: e2 t& |- N$ J
- //1 active sketch 6 x. R H$ w2 ?+ Q w
- 2 k7 t9 e; i$ A# a2 ~1 s
- sketch1->Activate(Sketch::ViewReorientFalse);; t3 B, d: G) H+ I% i, E% u9 L3 y
-
# Z: l" T* B5 n# J - double height1 = this->expressionHeight1->GetProperties()->GetDouble("Value");' B. [8 {) T! ]; d
- double height2 = this->expressionHeight2->GetProperties()->GetDouble("Value");
' |% J& U% v6 F5 }6 ]6 e h1 C0 b# o - double length = this->expressionLength->GetProperties()->GetDouble("Value");
+ G f+ j! f) L - // 2.1 create geometry4 p: }! S) a ?; z# t
- . q8 l' I8 Z& R1 A8 K
- Point3d startPoint1(0.0, 0.0, 0.0);
* T1 ^+ L$ `) F$ C7 E* y - Point3d endPoint1(0, height1, 0.0);7 z" h4 A5 l% O+ M
- Point3d endPoint2(length, height1, 0.0);2 T9 ~7 L$ b+ S5 }) d5 P
- Point3d endPoint3(length, height1-height2, 0.0);9 \# @0 T! x# M1 e
- Point3d origin = sketch1->Origin();
8 n2 P7 k9 u# V% W8 X* d% [; ` - Point *originPoint = workPart->Points()->CreatePoint(origin);# }* E l7 l4 Q5 e
- ( S! f( ?! x4 A
- Line *line1,*line2,*line3,*line4;- `3 d" }" v* n, A
- line1 = workPart->Curves()->CreateLine(startPoint1, endPoint1);
7 U* x/ P ]6 `5 L - line2 = workPart->Curves()->CreateLine(endPoint1, endPoint2);
3 h) X8 r3 \! _ - line3 = workPart->Curves()->CreateLine(endPoint2, endPoint3);
2 H9 z* Q% `/ c$ O5 x* Q - line4 = workPart->Curves()->CreateLine(endPoint3, startPoint1);2 h3 L4 N j) w9 m* e/ [* g( O
- // 2.2 add geometry
' H( b5 z7 b+ F' _$ M
. M) `* r, X% r# R8 H- j4 P- sketch1->AddGeometry(line1,Sketch::InferConstraintsOptionInferCoincidentConstraints);
$ f# H! ^5 J0 z# G7 x) S/ l - sketch1->AddGeometry(line2,Sketch::InferConstraintsOptionInferCoincidentConstraints);
( A7 l( I7 p9 d' _ - sketch1->AddGeometry(line3,Sketch::InferConstraintsOptionInferCoincidentConstraints);( O- m$ r' j) a' L4 [ n
- sketch1->AddGeometry(line4,Sketch::InferConstraintsOptionInferCoincidentConstraints);5 k; i3 z5 ]/ H; o
4 J( L) W- v3 g$ g3 w3 k- //3 add constraints ( gemo)
2 Q+ W; V6 y0 G, f3 D) l0 ^) C - 5 ]: ?; Z7 J" _6 d: |2 t) T2 I5 R
- Sketch::ConstraintGeometry geomline1;
$ y$ o3 i1 T- X4 F7 O$ O - geomline1.Geometry = line1;
& I% E6 k3 f3 c. E1 q e - geomline1.PointType = Sketch::ConstraintPointTypeNone;2 q& V- G( r6 ?% v v3 D; ~
- geomline1.SplineDefiningPointIndex = 0;
- v8 h m4 l3 K E9 _ - sketch1->CreateVerticalConstraint(geomline1);; P1 N0 T) ]5 @
- / m1 ] v; s+ v& r D& B
- Sketch::ConstraintGeometry geomline2;
6 J$ S8 j0 s9 D+ l3 J5 @& h - geomline2.Geometry = line2;
1 D4 ?& M0 \7 J - geomline2.PointType = Sketch::ConstraintPointTypeNone;8 Q Y1 | y* b, I$ D! q
- geomline2.SplineDefiningPointIndex = 0;2 j H8 O: {& `: f- h
- sketch1->CreateHorizontalConstraint(geomline2);: {' ?. w) K9 j. V# s. a
- / O! S8 K/ E+ r0 X
- Sketch::ConstraintGeometry geomline3;& X( F1 q9 g/ r* ]* f1 A8 Y
- geomline3.Geometry = line3;
% \! a9 E: C% U1 N - geomline3.PointType = Sketch::ConstraintPointTypeNone;, q) N |# ?/ ~( V6 S7 H
- geomline3.SplineDefiningPointIndex = 0;
2 q# [' D, p( l/ y( l5 H - sketch1->CreateVerticalConstraint(geomline3);1 L, r j7 R4 M# k/ v
- + [4 O5 p2 M3 y- u/ O7 e) y% N
- Sketch::ConstraintGeometry geomline1_startPoint;
. e* V, x% U- a8 ?% h! s - geomline1_startPoint.Geometry = line1;
6 |9 ^0 O [2 ?* _, x' d - geomline1_startPoint.PointType = Sketch::ConstraintPointTypeStartVertex;
* t9 N& I' \0 Q8 S( ]5 i8 B - geomline1.SplineDefiningPointIndex = 0;0 y0 g& p4 ?) M
- Sketch::ConstraintGeometry geomline2_originPoint;
) _2 C& Y5 p6 p) q - geomline2_originPoint.Geometry = originPoint;9 w" C' M. s3 I& r& a* B
- geomline2_originPoint.PointType = Sketch::ConstraintPointTypeNone;; t" w* r9 }0 |6 _
- geomline2_originPoint.SplineDefiningPointIndex = 0;1 Y W: w+ d1 {) y
- sketch1->CreateCoincidentConstraint(geomline1_startPoint,geomline2_originPoint);
2 a$ i5 p% [* z3 c
- L5 V- s5 N$ M8 t5 o/ o0 W- //4 add constraints (dimension)/ m& q: ]( q* j5 G5 ?" t
% w/ a8 `' S g9 L; x) G3 A- NXObject *nullNXObject(NULL);
' e# ]3 B* W2 F1 I$ Y. H7 ^3 b - 4 h* X- G) K' _; \# W9 ]; k
% R0 e) J* [( o- stringstream s_height1,s_height2,s_length;
2 y$ t4 c- i# X8 P# x - s_height1 <<height1; M0 J0 ? G g* N q( r& s
- s_height2 <<height2;& F6 }, d O. T% F* R1 N
- s_length <<length;
5 G! |& r1 I3 W9 ?8 x
) f' H0 d- d% Y7 A1 H+ j- Expression *expression1,*expression2,*expression3;2 V( c1 T# o( ~7 C
- expression1 = workPart->Expressions()->CreateSystemExpression(s_height1.str());! H) u3 ^7 c7 s; V5 ?9 y- H: c: x# B
- expression2 = workPart->Expressions()->CreateSystemExpression(s_length.str());
" M0 f' r$ j0 F7 m( n3 R* B/ q - expression3 = workPart->Expressions()->CreateSystemExpression(s_height2.str());
) c+ b6 i' N% B% E - ! y* G/ P+ a9 ~. k/ r2 s
- // line1 dimension 8 @4 R8 g9 Y8 W# P3 \& S! m4 t5 m
- : D- I9 F: V2 Y! m
- Sketch::DimensionGeometry dimLine1_startPoint;$ R' a# }5 I9 I5 q; i0 B+ ^: p
- dimLine1_startPoint.Geometry = line1;$ \: ~- h) {" M+ E$ y' E
- dimLine1_startPoint.AssocType = Sketch::AssocTypeStartPoint;5 @9 ^4 i1 z0 S% u ?7 u$ s9 |
- dimLine1_startPoint.AssocValue = 0;
" s( I2 X. g( K1 c( A7 a - dimLine1_startPoint.HelpPoint.X = 0.0;
9 ?$ n+ H/ C3 w' I5 ^9 t1 ?) p - dimLine1_startPoint.HelpPoint.Y = 0.0;
+ g& @) v5 R( R6 q - dimLine1_startPoint.HelpPoint.Z = 0.0;
- P8 S7 e2 D5 V! ` \ - dimLine1_startPoint.View = nullNXObject;- I! Z6 I: O# c4 w
- * i3 n3 g% b6 j+ U. U) X
- Sketch::DimensionGeometry dimLine1_endPoint;4 D- K( X8 Q8 Q4 h9 P+ M* n
- dimLine1_endPoint.Geometry = line1;
( a# `7 |) u) R: H, Y F" G9 ^) S# B: ? - dimLine1_endPoint.AssocType = Sketch::AssocTypeEndPoint;) `: z) k: d) X! @& _( q
- dimLine1_endPoint.AssocValue = 0;1 K( n" f- M1 R3 m- N" Z4 A
- dimLine1_endPoint.HelpPoint.X = 0.0;
4 i' A3 G1 z' M$ O - dimLine1_endPoint.HelpPoint.Y = 0.0;
4 o Q2 N' k& j5 q$ {$ W( I - dimLine1_endPoint.HelpPoint.Z = 0.0;
( Y9 z2 k; S2 U8 G - dimLine1_endPoint.View = nullNXObject;
% v; U$ j1 t3 `! \ - & o6 d8 X0 D0 q' }
- Point3d dimOrigin1(-100, height1/2, 0.0);/ `) }0 P; p, [6 O2 j6 R* c
4 A& |6 A6 J8 z p- sketch1->CreateDimension(Sketch::ConstraintTypeParallelDim, dimLine1_startPoint, dimLine1_endPoint, dimOrigin1, expression1, Sketch::DimensionOptionCreateAsDriving);
& V: `2 n, s' V
! L- ]7 T4 l. \4 g3 I9 P+ l4 A- 0 a. q6 g/ ^+ R& f0 E8 E; V w: E
- ' N0 c Y2 S0 A+ r( y, [9 |
- // line2 dimension
/ D8 [( e7 M$ W) X1 B
. c' x" a1 k* x; ^4 P- Sketch::DimensionGeometry dimLine2_startPoint;
6 C _/ ]+ r& n - dimLine2_startPoint.Geometry = line2;
( v6 g) k- g! C - dimLine2_startPoint.AssocType = Sketch::AssocTypeStartPoint;0 C# e" E" i2 @2 x, A" C
- dimLine2_startPoint.AssocValue = 0;$ `" A7 Z$ \* ? @, X
- dimLine2_startPoint.HelpPoint.X = 0.0;
0 ?! B+ d) _% O2 F - dimLine2_startPoint.HelpPoint.Y = 0.0;
% M1 t" ^. ~+ v5 ? - dimLine2_startPoint.HelpPoint.Z = 0.0;
+ B# m! Y( o' _. a' z4 {* N - dimLine2_startPoint.View = nullNXObject;5 w$ F8 C# d( l4 W# y
- " q9 P0 Z+ s0 F, g9 S* l
- Sketch::DimensionGeometry dimLine2_endPoint;
* W1 v. }. z- F, u3 l - dimLine2_endPoint.Geometry = line2;( q! ^; s8 ^* R. V9 ?9 [
- dimLine2_endPoint.AssocType = Sketch::AssocTypeEndPoint; n& ^* [ w$ z( M/ d3 T, T' n
- dimLine2_endPoint.AssocValue = 0;( `1 U6 l, q) t2 E9 T% R
- dimLine2_endPoint.HelpPoint.X = 0.0;
- Q! K, x$ w, a! ?" z$ M/ u - dimLine2_endPoint.HelpPoint.Y = 0.0;
& @; ?9 m2 _ J! d: q - dimLine2_endPoint.HelpPoint.Z = 0.0;
- u5 q7 V# A, V% A) | - dimLine2_endPoint.View = nullNXObject;
# g0 s! c" A+ F* d, \1 \ - # @, M" b0 N6 z
- Point3d dimOrigin2(length /2,100 + height1, 0.0);. B+ L+ L7 g! F5 n% P; t
- ' ]) d1 r7 ^ n) x N y) X
- sketch1->CreateDimension(Sketch::ConstraintTypeParallelDim, dimLine2_startPoint, dimLine2_endPoint, dimOrigin2, expression2, Sketch::DimensionOptionCreateAsDriving);6 }" X6 }7 Y a7 w
- 1 x4 g B G1 O3 Q& p s. g& F
) b4 s5 n3 o" e- . N. X0 p1 g7 H/ ~. B
- // line3 dimension
( D. Y' h0 I& } - * B) U) k5 s: J; s2 E
- Sketch::DimensionGeometry dimLine3_startPoint;6 N$ S, w, V- Q3 S7 t
- dimLine3_startPoint.Geometry = line3;
$ I0 g( q1 s. v7 v0 _% ^' K - dimLine3_startPoint.AssocType = Sketch::AssocTypeStartPoint;# z( }+ Y) p- w- `! h' v ~: f/ K
- dimLine3_startPoint.AssocValue = 0;
/ z6 A/ L7 E' Z7 H8 ], L1 u - dimLine3_startPoint.HelpPoint.X = 0.0;% J- c: V: E; k6 I
- dimLine3_startPoint.HelpPoint.Y = 0.0;
8 |/ A& d' Z% w - dimLine3_startPoint.HelpPoint.Z = 0.0;
8 _* K* I# q) D1 U( G& k - dimLine3_startPoint.View = nullNXObject;
4 S. a2 P$ x9 `' P" C7 f4 G* ? - ! `$ K$ U5 U" {4 B
- Sketch::DimensionGeometry dimLine3_endPoint; E. G* k6 y9 r
- dimLine3_endPoint.Geometry = line3;
6 ^. j: S/ a8 k( M# w - dimLine3_endPoint.AssocType = Sketch::AssocTypeEndPoint;8 {: `; r4 }4 S
- dimLine3_endPoint.AssocValue = 0;; t: D5 @! X, }' \% u# v: o
- dimLine3_endPoint.HelpPoint.X = 0.0;$ K% o3 T7 ]+ s5 z# i
- dimLine3_endPoint.HelpPoint.Y = 0.0;
" c8 N! z5 [$ c+ K* c6 w - dimLine3_endPoint.HelpPoint.Z = 0.0;, @& L& X- A; p2 r' N9 R q' n
- dimLine3_endPoint.View = nullNXObject;
5 I2 W. f" i- ^0 {' d/ W
- R* o7 p" o% h" S- Point3d dimOrigin3( 100 + length, height1-height2+ height2 /2 , 0.0);
# o& |8 d! p# S+ T" b - L5 t- S8 K w& {2 S5 i
- sketch1->CreateDimension(Sketch::ConstraintTypeParallelDim, dimLine3_startPoint, dimLine3_endPoint, dimOrigin3, expression3, Sketch::DimensionOptionCreateAsDriving);
L2 [: @& G. A) d* u1 W7 |6 T5 V2 u0 w - 4 c/ w- R+ w. B! I/ x- c
- 8 [: H2 }9 D* q% `( {
6 C: Q) z/ `9 S$ C" t$ {- //5 update & deactive6 @! e3 ]& K0 C2 c7 ~
- sketch1->Update();1 g- u. a$ i5 N$ H1 I6 j
- : f% l( {9 ] Z6 u& W- t: K/ H% r# |
- sketch1->Deactivate(Sketch::ViewReorientFalse,Sketch::UpdateLevelModel);
1 C g8 N& v5 g/ L
7 G1 E- d1 f7 ?+ g0 x- delete expression1; k4 p% C0 v* T8 d. Z" }+ z
- delete expression2;; Q& J, B Z* c7 c7 ~/ t
- delete expression3;
9 y4 f" g) g/ [. q/ W - * U4 _+ a+ V9 \, u! Z4 T
- }5 ~7 f* K0 e" Y+ y' e
复制代码
; ] G- b* n/ C/ L$ U" l# U- q, j& w F) w! |2 P
* O. B8 u; r, V Y/ \
, z8 l: m6 L' l. l8 m3 w3 G
|
|