|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
8 F( c2 E2 p0 W
; p, z$ Q2 a9 X; `8 O0 `5 L5 s* ~& @, |/ p v! V
UG NX二次开发源码分享: NX Open C++ 创建投影曲线 project curves
3 Q& }+ h% [; H+ y3 V2 G4 N" s) n* H4 e k0 F! _
此处使用的是 通过面的法向创建投影曲线,可以参考下!
- H, l( j" ^2 \5 @( z& ]9 s: ]9 Z0 ~5 H0 \1 |' e* l* s
: o2 D7 P/ g4 _1 z
/ W: R9 q' w$ M% K1 x
6 \: K6 S8 J: s
/ @5 H8 R3 b+ }% @, f5 N- b( q+ g' W6 X) O
9 F7 i0 h0 H$ M4 Y, z
NX Open C++ 创建投影曲线 project curves
( d( G+ X& d" ]2 m+ _2 ]: ^; {
; J, h$ j" C/ e6 L& t( d. s1 f7 W
# O4 s) V9 N7 K: @+ V- 3 E4 y7 `" }" C$ P6 j, u
- int trimSteels::project_curves(vector<TaggedObject *>inputObjects,Plane *plane1)1 x/ t$ e* f0 c5 W: Z' Y
- {/ C( f; Q9 u0 \% O `6 z! F6 z
- int errorCode = 0;
) a/ I1 d7 i4 X# c7 z - try
: k, `* Y; t5 v: s' P" o5 H0 M - {
( j0 f9 H* Z# A- a% r3 e - // createProject curves
5 R8 M% b. S/ g1 |! h
6 M) C. Y* l) e+ y; n. q8 ^2 Z) r- Features::Feature *nullFeatures_Feature(NULL);
5 Z7 N) F% y& M. R1 c9 ?
2 s' W: W' a# V. \. h: Q" l6 h- Features::ProjecTCurveBuilder *projectCurveBuilder1;) V' m6 j0 }) {9 c" Y
- / x7 y7 I. @5 ?0 E
- projectCurveBuilder1 = workPart->Features()->CreateProjectCurveBuilder(nullFeatures_Feature);
8 W7 }( G+ v, \/ m. O3 k - 8 z. R4 A- ]+ ^ O/ ~& q( C
- projectCurveBuilder1->SectionToProject()->SetDistanceTolerance(DISTANCETOLERANCE);
& Q1 R8 x+ a( W0 Y
4 G$ k; P: L# u9 j8 C7 e" J- projectCurveBuilder1->SectionToProject()->SetChainingTolerance(CHAININGTOLERANCE);
3 A2 Q/ a3 M0 g' I* g, P
2 g a* j9 L9 q& B3 ~( g- projectCurveBuilder1->SectionToProject()->SetAngleTolerance(ANGLETOLERANCE);
$ L3 ]2 \7 d4 v! u" R l - + J2 _% \3 v" B( S
- projectCurveBuilder1->SectionToProject()->SetAllowedEntityTypes(Section::AllowTypesOnlyCurves); `! f5 J' ?* `/ q7 Q8 w
- * o' w1 M& x, A1 X6 }" V
- projectCurveBuilder1->CurveFitData()->SetTolerance(DISTANCETOLERANCE);7 W2 ^0 P+ I& y5 E: B& S
- 7 c- U6 S- R$ P2 `# n7 K
- projectCurveBuilder1->CurveFitData()->SetAngleTolerance(ANGLETOLERANCE);
/ W+ P$ D$ y3 V4 U" ?1 b" z - ; v1 V L: P1 A
- int size = (int)inputObjects.size();
8 S) d5 i( C% N - std::vector<IBaseCurve *> curves1;+ P, }* L# j. W0 }1 Z. E! ?
- for (int ii = 0 ; ii < size; ++ii)
9 \9 i3 Q- [* Y' _$ F( w - {
& W5 _! Z/ d0 L& M1 [/ y$ z - curves1.push_back(dynamic_cast<IBaseCurve*>(inputObjects[ii]));
8 c1 X/ S' L2 h+ \ D - }
! c! l% z x+ [" b7 E2 G - , v7 O! y' o$ \
- NXOpen::CurveDumbRule *curveDumbRule1;
( M: o$ K! l7 n - / q$ J0 V5 g6 t% N
- curveDumbRule1 = workPart->ScRuleFactory()->CreateRuleBaseCurveDumb(curves1);
4 ?+ Q& z1 O$ g0 n
% v D+ _& z* o/ W# C" s" C" s2 f- projectCurveBuilder1->SectionToProject()->AllowSelfIntersection(true);
, R; C1 y1 O: q* _; i5 b - " Q0 y" @7 i/ q
- std::vector<SelectionIntentRule *> rules1(1);
& ?0 } M$ G2 @8 h; [9 t4 i- ~ - rules1[0] = curveDumbRule1;& q. m S' d6 a+ n5 C0 U/ w
- NXObject *nullNXObject(NULL);( c l ?' a9 f; x6 x0 X# _
- Point3d helpPoint1(0, 0, 0);3 W3 i A9 _* n
- projectCurveBuilder1->SectionToProject()->AddToSection(rules1, nullNXObject, nullNXObject, nullNXObject, helpPoint1, Section::ModeCreate, false);, T( H i c! r& F1 G( V4 C
- $ v N. [; Q6 y8 r( e" \
- plane1->Evaluate();
4 h2 O1 _( b! x! S& t) b
1 I; y4 x, l* Q: t! u: ^- projectCurveBuilder1->SetPlaneToProjectTo(plane1);
! @5 C* Q$ g1 V9 E, ?* v: L& L% w1 T - 7 O( r* A4 Z3 M( ^. i0 S
- projectCurveBuilder1->SetGapOption(true);
( v5 j; Z2 J0 K( J0 s& o3 e - - k0 X: k, m/ G' y
- projectCurveBuilder1->CurveFitData()->SetCurveJoinMethod(GeometricUtilities::CurveFitData::JoinGeneral);2 `- r( q" j L
{5 G6 Z( U L7 {- NXObject *nXObject1;/ C% C! Q8 [, {' [+ k
- nXObject1 = projectCurveBuilder1->Commit();; ?, K6 M5 m) r+ D
6 H; a; y8 \% s! ~( P- projectCurveBuilder1->SectionToProject()->CleanMappingData();5 F. f4 o6 X8 m8 _' \$ }
- 3 q2 g7 ~/ f. \% I" K
- projectCurveBuilder1->Destroy();
2 Q6 @1 f+ I$ z
! y+ V" [7 F \5 F3 \' v- }
7 \" F* ~" L# b5 @ - catch(exception& ex)
! D7 c# e8 c/ h- u8 j - {# W6 g2 r+ Y9 N, H7 ~
- //---- Enter your exception handling code here -----) T8 R7 M& q0 o
- errorCode = 1;5 k! U- j8 Q; ~4 [$ F. }
- trimSteels::theUI->NXMessageBox()->Show("Block Styler", NXOpen::NXMessageBox::DialogTypeError, ex.what());% J# ] [: W# ?0 O4 t4 p
- }5 z8 ?+ h) U9 R8 i
" {% V& V; @8 u( f8 x- return errorCode;
l) W) P6 y/ p% d4 d - }
) b/ W1 \0 P1 s, d% |5 `" `
复制代码
7 D: T1 A z: \; T! e8 ]0 r% {- U
2 q7 M, r! n; F. L |
|