|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
/ U, [* e, C, @1 C7 }
( k9 K I4 |2 I4 ~3 k j/ y7 E* v9 _/ p7 y
UG NX二次开发源码分享: NX Open C++ 创建投影曲线 project curves9 ?+ i, J3 x& _1 \1 z6 O
1 W* B% A, ^' \( O6 G3 z
此处使用的是 通过面的法向创建投影曲线,可以参考下!4 }5 I( \8 f6 X" A
- K0 \. ~/ q. K+ }" x
9 m# Q/ ?) D5 w2 \- b. C( ?. P: e0 _; H$ ~* S! b3 e% I5 Y# ? S$ W
5 b. q- g9 |6 H% {; G1 S% s9 h: Z) ]5 n% l
* v' _* w" t- H) K) I; z1 C
( m3 Y, m4 X- `0 {: c% f
NX Open C++ 创建投影曲线 project curves
4 `4 h: C P+ t& c5 ?! S
$ l( Q$ \$ U5 R9 f) T, R
& Q2 r! ^# l/ m
- * q! @$ j9 P" Q+ s0 a/ }+ j
- int trimSteels::project_curves(vector<TaggedObject *>inputObjects,Plane *plane1)
+ p! R2 g+ Z- u( n, i7 z - {) u+ S+ S/ l) O( w- O+ |
- int errorCode = 0;
( Y2 V& w3 }, T B/ v - try" |. n3 |, j/ |/ V/ H4 l
- {
. _) n# s- U. e" g2 ] - // createProject curves! y: U- l; u0 v9 q4 b# r! T
; f$ w* A/ {* @1 }7 D- Features::Feature *nullFeatures_Feature(NULL);
! B& N2 E3 s8 g1 X0 L$ R
& X% h3 ~+ z' u- Features::ProjecTCurveBuilder *projectCurveBuilder1;
1 S6 b; @; o! _% \& r. E: X- f - ) [4 s+ Y2 w* w; a1 g( b/ o A
- projectCurveBuilder1 = workPart->Features()->CreateProjectCurveBuilder(nullFeatures_Feature);
3 g4 G1 q; U, a
) e3 e8 C) b m" x O. O3 [+ B3 W: ~: C- projectCurveBuilder1->SectionToProject()->SetDistanceTolerance(DISTANCETOLERANCE);
8 o+ s1 N- i/ f, ? f4 @* t - 6 ?: o0 i3 s. P1 a p, q0 ?
- projectCurveBuilder1->SectionToProject()->SetChainingTolerance(CHAININGTOLERANCE);/ N Z* _6 T" }! Y% ~" o1 R. b! L$ @
5 v7 R% y# [: C! M3 u% i. a- projectCurveBuilder1->SectionToProject()->SetAngleTolerance(ANGLETOLERANCE);
' A$ u9 n# B" j0 R; t8 _2 N
$ \8 s+ B0 `9 l9 m, Z }- projectCurveBuilder1->SectionToProject()->SetAllowedEntityTypes(Section::AllowTypesOnlyCurves);2 X* K6 }/ C( V7 Q% O& F+ R$ C
O$ c; I `' G% x- projectCurveBuilder1->CurveFitData()->SetTolerance(DISTANCETOLERANCE);
) J) b/ t8 f1 G" R - ) p, S5 x- X% |! k+ C% W
- projectCurveBuilder1->CurveFitData()->SetAngleTolerance(ANGLETOLERANCE);
+ @' G, M8 Y9 `& f2 u7 v - * L& d. P- I; M" x" K
- int size = (int)inputObjects.size();
4 s6 i4 ^: \7 P7 t5 ? - std::vector<IBaseCurve *> curves1;1 q4 r2 X! W# v, R! k1 {$ W
- for (int ii = 0 ; ii < size; ++ii)' k$ j$ d1 ~) E; y( g" D
- {
5 T$ t, _/ d5 t) k - curves1.push_back(dynamic_cast<IBaseCurve*>(inputObjects[ii]));9 A4 y1 ~& G1 S; O
- }* _: s, ]! w# D
: f' F# u0 O) [# g4 t- ]' l5 ~- NXOpen::CurveDumbRule *curveDumbRule1;
% N3 X- P9 n. }3 _. U ]
/ T& l. L5 x6 Y- curveDumbRule1 = workPart->ScRuleFactory()->CreateRuleBaseCurveDumb(curves1);& O% m* J# |, D5 @+ N
- ; B5 ?' [) f/ W4 c5 R
- projectCurveBuilder1->SectionToProject()->AllowSelfIntersection(true);6 I0 n$ K: A6 ?0 g1 K
- - f& c/ d, `: M( ?
- std::vector<SelectionIntentRule *> rules1(1);
1 k2 @/ c0 q3 Z1 F* P, |1 v! j - rules1[0] = curveDumbRule1;
# V- R6 A w: y1 }; z7 S - NXObject *nullNXObject(NULL);, g6 e* d1 Y' j U1 l0 F6 k: q
- Point3d helpPoint1(0, 0, 0);
; z H$ W9 y; |* B) ~8 B4 s& V. y - projectCurveBuilder1->SectionToProject()->AddToSection(rules1, nullNXObject, nullNXObject, nullNXObject, helpPoint1, Section::ModeCreate, false);
3 H7 O: x: W4 ?$ L t5 K/ g4 S0 _9 D - 7 ]$ R" h# g( ^6 U9 G- s1 {
- plane1->Evaluate();. b) y* h4 y6 I5 r
- / W% t2 G. B7 }4 ~- G- ]
- projectCurveBuilder1->SetPlaneToProjectTo(plane1);
5 Y d! G' t0 | |
- i0 D0 j( D6 M, G% Q- projectCurveBuilder1->SetGapOption(true);
) j* M- F9 T* f" D/ g+ @ - 8 c- h1 |: y8 q6 f3 p
- projectCurveBuilder1->CurveFitData()->SetCurveJoinMethod(GeometricUtilities::CurveFitData::JoinGeneral);
% C1 |' y% J4 K! {
" `# e J9 L0 k5 B6 ^( S7 E4 T- NXObject *nXObject1;
- i) M6 ~6 V0 o; ?$ a# v - nXObject1 = projectCurveBuilder1->Commit();
' g& n. M3 K' H4 I
5 x- W1 C& U! ~% a* D* ]& r- projectCurveBuilder1->SectionToProject()->CleanMappingData();
# A9 h1 h* w& O/ d
% t6 w2 j& ^8 ]. M" f0 }$ o+ s; `- projectCurveBuilder1->Destroy();" @: ^0 E- N ^9 Q7 \. C
# U3 F* S% ^- h. W- b& O" e- }
+ G" O1 @8 J% B* o - catch(exception& ex), V$ ~4 q: j* C. c
- {; V. B4 Z! l8 L2 g& z: I/ l
- //---- Enter your exception handling code here ------ Y4 {( ~6 g5 Y q8 F0 r/ S% M. m
- errorCode = 1;
. [% D1 h' q: v. J; e1 a5 z$ V - trimSteels::theUI->NXMessageBox()->Show("Block Styler", NXOpen::NXMessageBox::DialogTypeError, ex.what());% [3 P2 V: k. x
- }) ^0 ^( v( E9 j( E
/ o8 ]2 F3 j# F% e- O9 a- return errorCode;4 R. f' S6 v: \$ `3 ]# b% m
- }
& v! r9 P% W- c
复制代码 ' S7 J3 P8 N" V. s
' Q* m! q; q3 |' u+ }; s& [: R2 l8 Y$ [9 ^. K# }" |8 K! a
|
|