|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
, S. T% Z! N) z K9 E1 R4 x
& R5 t) @+ Z. _7 r' L
& [( u9 e5 |; y; q' v$ BUG NX二次开发源码分享: NX Open C++ 创建投影曲线 project curves4 W) M$ H0 P& V) W4 N% E. b" L+ |4 d
, M- l0 m$ c) h8 R. C, i此处使用的是 通过面的法向创建投影曲线,可以参考下!" C; ~% [" j4 j0 R
- ?4 _3 X0 t- f6 e, V$ o
6 `( w$ u g7 k0 D3 U( ~' M
2 Z, i& R2 z1 r) C) N8 A
7 T5 {8 T$ [7 o- @
1 D, E" \( i: L- O0 @
8 \' k0 u G; u+ N' s- U1 u
+ L. u2 @/ P) l4 {; Q9 i
NX Open C++ 创建投影曲线 project curves
# R+ D$ _2 h0 F: _* {/ U _- l
" b- I' d9 D5 ? [% _
- G" O) x8 Q f* l8 s- " I& I; z/ {1 I% ^3 C
- int trimSteels::project_curves(vector<TaggedObject *>inputObjects,Plane *plane1)
7 ~% D. E. c o" }2 o( x - {/ H4 v% ?1 u% l% `, f
- int errorCode = 0;
; U u) j+ o# G. K$ E0 v - try
y) e) h9 d- q% k1 `# L/ g2 U - {: @, w# j. J3 R. Q
- // createProject curves
% e6 N. Y8 F/ {) i' v, b - 1 X8 ?" |# C# R' E H
- Features::Feature *nullFeatures_Feature(NULL);
# }7 y: h* V- v - . F8 G0 \% }7 \) d/ M" c
- Features::ProjecTCurveBuilder *projectCurveBuilder1;
; B, b. S& B( H% X8 B; X2 Q - & t- U4 b" r [" ? I
- projectCurveBuilder1 = workPart->Features()->CreateProjectCurveBuilder(nullFeatures_Feature);
6 L8 \+ J9 a# B8 |# Z5 ]
+ W# D. j0 ~' f$ y5 |8 j- projectCurveBuilder1->SectionToProject()->SetDistanceTolerance(DISTANCETOLERANCE);
* P/ `) s1 A' _3 R, ^% c4 j) s
+ b7 [2 r7 a' J4 E' X- projectCurveBuilder1->SectionToProject()->SetChainingTolerance(CHAININGTOLERANCE);, U' w9 g8 d* M$ f# {) G
) e3 n6 n4 x3 q* W) B. M; T9 c- projectCurveBuilder1->SectionToProject()->SetAngleTolerance(ANGLETOLERANCE); B) z, V3 O+ s- B' f2 ~' Y
- " W* b9 k5 B: @9 W! Q
- projectCurveBuilder1->SectionToProject()->SetAllowedEntityTypes(Section::AllowTypesOnlyCurves);
$ z& F1 |3 ^5 c - 1 h( n% A8 |( ~& K
- projectCurveBuilder1->CurveFitData()->SetTolerance(DISTANCETOLERANCE);5 {# M( K; z0 D; V& p) \6 H
7 z" E; H, y# C# x9 ?3 T- projectCurveBuilder1->CurveFitData()->SetAngleTolerance(ANGLETOLERANCE); D1 k3 l- ]5 @1 J3 U$ E
- / n- U% T+ ~* z
- int size = (int)inputObjects.size();$ R% F7 ~( D5 O2 n
- std::vector<IBaseCurve *> curves1;
. C0 x m! t% F' n% }+ J7 L; l$ O - for (int ii = 0 ; ii < size; ++ii)3 i9 {# Q9 D! \- `3 z4 y* A) ~
- {
; ~5 x4 W) Q. Z: M - curves1.push_back(dynamic_cast<IBaseCurve*>(inputObjects[ii]));
9 g" P D2 D0 T; O; M - }/ J1 |9 N( c6 |. w8 \3 ~2 `" ^
- + ]' D8 C) [! v9 U+ N( T8 x/ L1 v4 n
- NXOpen::CurveDumbRule *curveDumbRule1;
+ P s* A8 D; q; ?( [8 H" l P - & j. E. F, O$ j4 R
- curveDumbRule1 = workPart->ScRuleFactory()->CreateRuleBaseCurveDumb(curves1);$ @* H- j; X: ~; F5 M
! ~; B8 Q8 K* T6 s1 a- N* J' P. B% T- projectCurveBuilder1->SectionToProject()->AllowSelfIntersection(true);
1 R9 e$ K! u+ w$ J
9 l4 D# M3 T& h- std::vector<SelectionIntentRule *> rules1(1);
$ [, {' R' Q" u% c6 o$ N - rules1[0] = curveDumbRule1;4 W4 O9 P5 ?% J- c: m& M! F
- NXObject *nullNXObject(NULL);; r' f8 g6 G5 p- r) i6 L( c
- Point3d helpPoint1(0, 0, 0);; c1 p! k* C7 _7 L
- projectCurveBuilder1->SectionToProject()->AddToSection(rules1, nullNXObject, nullNXObject, nullNXObject, helpPoint1, Section::ModeCreate, false);
: W$ X, K" U/ h% U# d5 N - , }, n, O* Q" x9 n
- plane1->Evaluate();, i& x# F: E$ z2 C' T
- : g" D- V4 j' Y! N1 _
- projectCurveBuilder1->SetPlaneToProjectTo(plane1);9 E) R! q0 a( g
9 _* i! ~+ j" f: D( e$ F7 M- projectCurveBuilder1->SetGapOption(true);; q; i- V. Q; O: I$ S9 a
. t- w. |) W3 N8 i6 B: h- projectCurveBuilder1->CurveFitData()->SetCurveJoinMethod(GeometricUtilities::CurveFitData::JoinGeneral);7 {3 {/ A( K- b2 M/ f3 `
- / p z( ]! z/ \" ~1 L, e
- NXObject *nXObject1;
: `3 n6 r4 k+ D4 w9 M - nXObject1 = projectCurveBuilder1->Commit();
3 l% C! j x9 G; X. T, v0 Q# R% q7 ]$ d - * E/ D7 ~$ Z: ?' f! r) X
- projectCurveBuilder1->SectionToProject()->CleanMappingData();
" ?9 j$ |/ S7 f# N# {9 J* V - # v" x P; ^! J8 G# M0 F
- projectCurveBuilder1->Destroy();: R3 S% D$ d$ p6 ]
- % M. j4 l1 w2 H& Q2 h" s" O
- }: z. l# M9 K2 l4 @' j
- catch(exception& ex)
* K1 A: y+ e0 n: v - {
, ~ @) q R W - //---- Enter your exception handling code here -----2 J% S2 f9 J8 B$ A# A6 e- \8 j1 S
- errorCode = 1;6 X( E. ?* J( ]$ m E
- trimSteels::theUI->NXMessageBox()->Show("Block Styler", NXOpen::NXMessageBox::DialogTypeError, ex.what());9 @, p* M4 l7 }" F+ ?: H
- }
U2 T, v5 q( ^ - 9 K; @: W7 t1 N$ J7 Q* p
- return errorCode;
. _+ x. \) {# ], Z4 g* @ - }
- D3 r; [% |$ ^# y, m
复制代码
3 B) H$ h* S' ^% M% S# L% [# m% `$ v) f2 W( V6 Y1 W% t" Y$ f
6 a3 A8 v9 l( A6 [0 q
|
|