|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
: C9 [* ?6 v0 x2 y" U3 o% m: e
7 K" V. w3 u5 u' T
6 T8 w1 Q& R6 W* \/ B4 L
UG NX二次开发源码分享: NX Open C++ 创建投影曲线 project curves
9 ~8 B# ~7 I' ^4 u) h% A- A* N' f, \2 s( S9 p9 G
此处使用的是 通过面的法向创建投影曲线,可以参考下!
/ p1 N5 U9 R0 S' V7 \, Y
4 m; P9 e. C; |$ [- E/ [; d" l/ b- L( j$ x. E7 r; r
: {2 }% f6 e( ~+ {1 n& U5 e( c
0 O3 f# \' L1 d( F7 B# M% j4 N' K3 B. C
& e( T$ e' S" \1 S1 @7 Z& R: O6 ]; k6 C/ o- f
NX Open C++ 创建投影曲线 project curves
! e+ R, O# j0 ^0 h0 X6 q0 k: G3 u, ?# a. i4 W; R/ v
" \; r w, k) n
4 B' s5 k$ R* Z6 R% ?! P! {- int trimSteels::project_curves(vector<TaggedObject *>inputObjects,Plane *plane1)
# o/ u, R: a0 |# ?" [- N - {+ g. \4 R. q% D9 B+ ]/ ^0 F; ^
- int errorCode = 0;
! j' F2 K _9 K5 b - try
$ O. \& O6 r9 M, x, Z! n - {
0 o7 m/ }, ~- W, I* e5 a - // createProject curves2 @; _ m# L! a$ a. K9 e
- & g0 o1 c- k+ m8 [4 g' G9 ?4 Z
- Features::Feature *nullFeatures_Feature(NULL);
1 `' ?! A! B9 `3 s3 j& s2 u/ L( Z
; r: m9 ^( h f0 s! L& g' i F- Features::ProjecTCurveBuilder *projectCurveBuilder1;
. O' t& f, R4 ~7 T* L0 a - * t1 Q0 i* p/ D5 e5 j6 U
- projectCurveBuilder1 = workPart->Features()->CreateProjectCurveBuilder(nullFeatures_Feature);& k7 p6 \% c6 D3 Z N$ o
: o7 s$ }5 I L% J" N- projectCurveBuilder1->SectionToProject()->SetDistanceTolerance(DISTANCETOLERANCE);
/ G0 F& w/ j2 @5 W( M5 j* l
+ b- M: G/ }2 D" z$ g& A! ~- projectCurveBuilder1->SectionToProject()->SetChainingTolerance(CHAININGTOLERANCE);. ?! F8 @) G. P# O
- & F/ E" F" W: Y1 M; h
- projectCurveBuilder1->SectionToProject()->SetAngleTolerance(ANGLETOLERANCE);
3 i7 {% X+ l Y5 J: F' R2 K5 r* n - ( @3 d1 r% s; t8 q+ n9 q
- projectCurveBuilder1->SectionToProject()->SetAllowedEntityTypes(Section::AllowTypesOnlyCurves);
7 @0 x, z$ m0 F5 m( o" \' C5 X - : i" O; n; l: i
- projectCurveBuilder1->CurveFitData()->SetTolerance(DISTANCETOLERANCE);$ i9 p" Q1 c& j! T
- " f: o9 G# G2 N7 i4 q
- projectCurveBuilder1->CurveFitData()->SetAngleTolerance(ANGLETOLERANCE);/ S/ H6 v% M+ g( V
1 E2 r0 [( ^, W2 X) D' W3 j- int size = (int)inputObjects.size();+ q j% P* @/ F7 D
- std::vector<IBaseCurve *> curves1;
3 u+ o8 k3 c& l5 u9 P - for (int ii = 0 ; ii < size; ++ii)
$ q1 t+ J3 C- n* e6 Y- B) @- q& y - {
& \3 s( n$ |( T, P! h+ n - curves1.push_back(dynamic_cast<IBaseCurve*>(inputObjects[ii]));
/ G; K8 E$ f" F: h+ A9 i3 n - }
* q! j* ?9 R7 }# \ - 1 H& Q+ P1 n4 N1 i! I) }) f
- NXOpen::CurveDumbRule *curveDumbRule1;
0 u T+ d) A0 H% [" k4 k
; |9 Z/ m5 p9 C- T- curveDumbRule1 = workPart->ScRuleFactory()->CreateRuleBaseCurveDumb(curves1);
# W" F1 k, G1 P- f( I. y- B
- t" ]: e; V+ _# [9 k0 E- projectCurveBuilder1->SectionToProject()->AllowSelfIntersection(true);
# {9 z5 E& V4 N) |) p! N0 D/ `
2 M; }) g% J* z/ L' y) y5 g- std::vector<SelectionIntentRule *> rules1(1);+ h6 \; ]# u/ ]# b) p
- rules1[0] = curveDumbRule1;
) G3 w/ ?. x( t! } - NXObject *nullNXObject(NULL);( R1 {- G1 i5 C
- Point3d helpPoint1(0, 0, 0);3 v8 F! z8 [3 C: L+ E/ [$ A& t
- projectCurveBuilder1->SectionToProject()->AddToSection(rules1, nullNXObject, nullNXObject, nullNXObject, helpPoint1, Section::ModeCreate, false);# h" N( `$ [/ n s% ^& {1 f( q; p
% b! N# I; z' ]- plane1->Evaluate();
" z t6 L2 ]$ P9 Y - - f+ z6 `5 ~2 X) I5 K
- projectCurveBuilder1->SetPlaneToProjectTo(plane1);
1 ?; m# }( n; Z/ w
, A* I7 @- t( f$ x- projectCurveBuilder1->SetGapOption(true);, a! @# X( s+ N
8 E6 N9 W5 i7 Z+ G) y* W+ s- projectCurveBuilder1->CurveFitData()->SetCurveJoinMethod(GeometricUtilities::CurveFitData::JoinGeneral);% W- z m8 S7 e
- & P! L ?3 X( c4 q( F
- NXObject *nXObject1;9 g2 A+ |3 z9 w2 G( L, E
- nXObject1 = projectCurveBuilder1->Commit();. ?9 x! m0 F% y; H0 t. f
0 c, D) |3 m+ P( ~' Q- projectCurveBuilder1->SectionToProject()->CleanMappingData();1 T' ~6 |9 f) [/ g5 Q
- 4 A3 T; J8 U" W3 q
- projectCurveBuilder1->Destroy();
" s+ F2 U* _& @' ^1 g - # ]% y, N" C1 v2 _' J7 v: K3 [
- }
5 I2 a$ P" X% s - catch(exception& ex)
( T- R. |/ M! H) v0 |- M8 B - {
& j; g0 V3 P$ u# ~/ s" \% M/ P- } - //---- Enter your exception handling code here -----. f. [* E4 F7 x: v. _1 s
- errorCode = 1;, i: a" j, d2 M% {* h1 p
- trimSteels::theUI->NXMessageBox()->Show("Block Styler", NXOpen::NXMessageBox::DialogTypeError, ex.what());
, L8 s; s1 j# g0 n V - }) L8 b, l. o8 ~$ {4 J8 \, V; A
- 9 W* u) U# t; G: O K
- return errorCode;2 k3 E4 ^+ z+ \' ]7 p2 w2 E+ n0 }& |
- }- V- e8 m9 p0 S) S0 M- u
复制代码
- n. s# v- f2 ~3 d, @
- q) U9 l, j9 ^" m) f1 ?. B: l+ _/ y$ F( M9 V
|
|