|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
6 K2 |% ~ w7 y- z! ^; |& a
! @, R# k+ e' Z7 O: \: O4 L/ n6 q5 G5 x9 i# y
UG NX二次开发源码分享: NX Open C++ 创建投影曲线 project curves) j- R! l7 G/ D. B' Q2 K1 a' |
. m. P! l, I T0 Z
此处使用的是 通过面的法向创建投影曲线,可以参考下!
/ b' N* ^# F, u- t/ e, A% C5 ?. L$ r4 g% h2 A, A2 D$ K6 q0 K
) f" V V9 Z' T T/ k- u/ ?) S! j5 B6 ?) R5 w/ B |) d
# [0 O. D3 q! W
6 Z3 q$ S( ?% X1 g& [. ]. e
3 v$ x, |( G" s' C1 P+ s" ?$ j7 b* q. {0 D: w5 @
NX Open C++ 创建投影曲线 project curves
+ Z' q% a6 q, ]+ |. w; B2 k; Q& C" H z
0 t) b' i8 Q, j: m& s! ~4 {' s
- D& a# S% G" P1 d! f- int trimSteels::project_curves(vector<TaggedObject *>inputObjects,Plane *plane1)3 \2 b8 V5 O" U/ [ ^- @6 |; G: ^
- {
- x' K7 r; y& r6 j5 G - int errorCode = 0;+ m5 n6 z' H6 ~6 L6 W3 H) y% x% m- R2 A
- try0 o( X+ {$ R/ V7 Y5 I
- {8 I9 ^4 z* T B! Q+ H2 _& c
- // createProject curves
$ D1 ?1 ^' H) D( m
. n5 H) i9 ]8 P! @# m- Features::Feature *nullFeatures_Feature(NULL);
. ]+ p2 k+ D: G# k. ^5 h" R
8 }/ J6 b. m; e- Features::ProjecTCurveBuilder *projectCurveBuilder1;- a" ^# n: p: t
' f0 h1 K: e7 J% y4 v. |& L- I- projectCurveBuilder1 = workPart->Features()->CreateProjectCurveBuilder(nullFeatures_Feature);
+ Q( H, t. k$ S- h w% [
! \6 L: d. o. }& l- projectCurveBuilder1->SectionToProject()->SetDistanceTolerance(DISTANCETOLERANCE);- {' e7 X5 O4 l% \. q
- z7 G& g" @- Z3 T, V* B/ g- projectCurveBuilder1->SectionToProject()->SetChainingTolerance(CHAININGTOLERANCE);
: [& H! y& l+ `3 ?, w' |; u# e
" v* m2 s' D* b3 x+ K. s9 K- projectCurveBuilder1->SectionToProject()->SetAngleTolerance(ANGLETOLERANCE);
3 D" t- q2 \/ l6 H* N, l8 f7 R - ' e! b# a J- w
- projectCurveBuilder1->SectionToProject()->SetAllowedEntityTypes(Section::AllowTypesOnlyCurves);
; @! R* n6 Z* h - % y4 ]' [" |" [$ I v3 _5 [
- projectCurveBuilder1->CurveFitData()->SetTolerance(DISTANCETOLERANCE);
# t$ H1 W, R+ a( X4 _* D: c4 ~- N
! W/ M) b( j j7 n# K( `9 m( r: P4 E2 i- projectCurveBuilder1->CurveFitData()->SetAngleTolerance(ANGLETOLERANCE);
1 v n# U( y# X; ]) h( r) R0 ?+ c! H
# n! z- I4 |' A( v( j x! t# e/ |1 w- int size = (int)inputObjects.size();3 e3 ]: g5 w6 o/ ]8 w
- std::vector<IBaseCurve *> curves1;& a" q( N1 G, D* c3 C- p
- for (int ii = 0 ; ii < size; ++ii)
7 l4 a( k$ W+ H4 {: Y1 R& N - {) n$ |! K8 k; R0 [$ A
- curves1.push_back(dynamic_cast<IBaseCurve*>(inputObjects[ii]));/ {# I" W9 n2 K4 q9 m
- }: ^! X) ^3 q W0 C( \, z8 b& J
- 9 |- g q8 v2 J& R0 |2 \
- NXOpen::CurveDumbRule *curveDumbRule1;
3 u, w: o( i9 O; e5 L0 I- N* X
# \. B! B6 U9 {0 r1 P- curveDumbRule1 = workPart->ScRuleFactory()->CreateRuleBaseCurveDumb(curves1);
" O/ H2 J( {! @0 Z - $ {, F* }4 P7 F+ D% o
- projectCurveBuilder1->SectionToProject()->AllowSelfIntersection(true); z" z( x/ r S; E- Z
- ' M3 H+ K% |5 z5 `5 j& D$ E
- std::vector<SelectionIntentRule *> rules1(1);
# V& I& i. a; V/ b - rules1[0] = curveDumbRule1;$ P' E7 F' J; u8 u9 a4 S+ Y
- NXObject *nullNXObject(NULL);' C: j$ P) M2 F- q: O
- Point3d helpPoint1(0, 0, 0);
8 y, F4 N1 ~1 }" C - projectCurveBuilder1->SectionToProject()->AddToSection(rules1, nullNXObject, nullNXObject, nullNXObject, helpPoint1, Section::ModeCreate, false);
0 E t+ ]% [. a$ v" E1 v/ j: M! h6 S - & F% i& f" @6 J' t E5 s
- plane1->Evaluate();
/ n: |0 x5 [2 y- @
" d* i/ G$ ]- j* m+ k0 k; P+ I- projectCurveBuilder1->SetPlaneToProjectTo(plane1);
# W" q5 N0 v+ [& \0 q& F' E8 p. I
7 p% u% n6 G, Z! Q- projectCurveBuilder1->SetGapOption(true);
& Z! ^# r# L8 }; }( k - ! S* t* _7 p7 X7 @9 e, H2 b6 q7 @+ p
- projectCurveBuilder1->CurveFitData()->SetCurveJoinMethod(GeometricUtilities::CurveFitData::JoinGeneral);
$ b; z1 R" e1 t) ?4 x: f - 1 x% x2 r. Z$ @9 h& P+ Y
- NXObject *nXObject1;9 e6 a+ L& E4 j
- nXObject1 = projectCurveBuilder1->Commit();; k2 I5 u. }3 c
- , {5 ?3 Y9 U* d( E) _6 a8 E
- projectCurveBuilder1->SectionToProject()->CleanMappingData();3 y% ~6 S8 Y( W3 D& r) v
- : i8 D8 \) H3 A
- projectCurveBuilder1->Destroy();2 Z* e3 Z) X1 s1 r! D9 L) `# i
- D8 _7 C; u; ^# w1 N5 R- }
5 j- u' g- T6 f! Y - catch(exception& ex)
, l& E" F. w4 D5 Y* M6 b# T - {8 ], w4 y! O+ [
- //---- Enter your exception handling code here -----( I/ a* ]% B2 r
- errorCode = 1;+ X, B3 M+ F- E/ ^: ]
- trimSteels::theUI->NXMessageBox()->Show("Block Styler", NXOpen::NXMessageBox::DialogTypeError, ex.what());- C% O- Y9 w+ K
- }9 d4 ?9 f9 t0 m$ i K
- 8 s+ Q8 X3 Y7 F9 H+ i/ ~
- return errorCode;
2 \% o& r6 @$ p% \" O# V1 R - }2 h5 `, o6 n" |4 a z
复制代码
+ I0 V3 @9 b: _' Y7 d2 U$ l
3 h9 a1 t6 c* G! e& A6 v4 Y. P# o) d3 O! U+ ~0 L% s$ C Z+ h
|
|