|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
% @/ ]* d: K7 ~1 ^
% O* ^7 |$ ^5 G2 R( c
) w% [. L1 L& `: r: HUG NX二次开发源码分享: NX Open C++ 创建投影曲线 project curves
[$ K" V: O. s/ o
& Z% u$ V, j# }# z" s( w) Q$ l此处使用的是 通过面的法向创建投影曲线,可以参考下!
2 K6 l* T3 v. I1 I- E1 G% F( w8 m' L' q% h6 G
8 t3 H4 m/ z) d( C z- W
0 b5 S7 i5 N8 f- u9 {" T9 C# B- T0 J9 K
' B( T- C; q, x7 `% O: P! T" s
1 g9 [: l$ l3 ]
5 s0 S9 Y) \- M/ `
NX Open C++ 创建投影曲线 project curves
7 Y& f6 ?( L: X* h4 D% C; ]! x. r% T3 r1 W( M
9 B9 k% Q0 C* T4 B+ Q% @7 F
6 i" q0 T* v: k- int trimSteels::project_curves(vector<TaggedObject *>inputObjects,Plane *plane1)
& e7 Q4 a# J5 q" v - {
' i4 C* W$ N6 `+ S6 f, c. C - int errorCode = 0;& a! E) p9 d6 Z: ~2 n
- try$ B P. p& n7 M
- {
3 V) Q: i. Y }- c$ r% G - // createProject curves
/ y% L/ ~& M6 m4 Y7 Z - - E: c: m. L* K, z: D6 w
- Features::Feature *nullFeatures_Feature(NULL);5 u* p! r+ |) c4 ]2 F* L+ ^
- . H1 ?& B; j1 J
- Features::ProjecTCurveBuilder *projectCurveBuilder1;
# C4 t/ G. g& s, C+ {5 z, n+ }- s
3 o- s9 L: y) ~) o3 F- projectCurveBuilder1 = workPart->Features()->CreateProjectCurveBuilder(nullFeatures_Feature);# `: V. h. W' ^1 V5 B+ m$ L! |0 p
^- w- u5 p+ I5 V- t# U% ]* J, J6 N- projectCurveBuilder1->SectionToProject()->SetDistanceTolerance(DISTANCETOLERANCE);& \# @: E2 e* Z5 |
- + n" n2 F2 f' J1 T; }9 X7 a
- projectCurveBuilder1->SectionToProject()->SetChainingTolerance(CHAININGTOLERANCE);7 Y- @& f' f( C& y W7 |3 |
9 t2 v/ W8 t$ Q" i- projectCurveBuilder1->SectionToProject()->SetAngleTolerance(ANGLETOLERANCE);
4 G4 S) I, o; c( B3 y0 b - 6 z( V' K! s1 K0 x, @! k; z. e, U( s
- projectCurveBuilder1->SectionToProject()->SetAllowedEntityTypes(Section::AllowTypesOnlyCurves);
4 H7 N# v4 w& F6 X! j2 b$ q0 T3 [ - ' K; Z6 s: u9 {7 v+ D- v" m, ~
- projectCurveBuilder1->CurveFitData()->SetTolerance(DISTANCETOLERANCE);2 A- E* f: P w: Y! x
: }, f, G$ p' g* Z- projectCurveBuilder1->CurveFitData()->SetAngleTolerance(ANGLETOLERANCE);! g& A& Z6 @2 x5 p; J" x8 k
- + h1 p/ B6 d. v& v; S; g
- int size = (int)inputObjects.size();2 ?6 w, F! H8 T5 e2 {
- std::vector<IBaseCurve *> curves1;
6 Z. o. Y. e( \& s" f2 @7 k - for (int ii = 0 ; ii < size; ++ii)0 t* [9 E* `: _1 q! c
- {
5 B( G3 I& M# e! ~' ~ - curves1.push_back(dynamic_cast<IBaseCurve*>(inputObjects[ii]));: z( q1 A7 b" Y3 Y2 E
- }" D" a1 [, Z+ X1 ~/ C% @! ?; R" n
- ' Z" R) {. A! q G
- NXOpen::CurveDumbRule *curveDumbRule1;& L$ X0 N# ^: Q; A' I0 Z, Z
- * K, v6 L+ t( z
- curveDumbRule1 = workPart->ScRuleFactory()->CreateRuleBaseCurveDumb(curves1);
; O+ e# N+ y& X j' U/ I2 j - 9 g+ E/ `4 V: S* p( X" e: x# }
- projectCurveBuilder1->SectionToProject()->AllowSelfIntersection(true);
. O! g) e; o1 E2 N4 W) F - 9 D( l3 F' d/ t1 \
- std::vector<SelectionIntentRule *> rules1(1);- [4 Y1 Z3 y1 l3 q: z) h0 u
- rules1[0] = curveDumbRule1;4 }/ V4 z6 o6 o8 P0 |
- NXObject *nullNXObject(NULL);
. g; y& ~' W; G1 M) P! m - Point3d helpPoint1(0, 0, 0);
) U6 S6 q5 R J: n- S z - projectCurveBuilder1->SectionToProject()->AddToSection(rules1, nullNXObject, nullNXObject, nullNXObject, helpPoint1, Section::ModeCreate, false);
6 R, j) O+ `% u
0 J$ i& u. q8 I- plane1->Evaluate();4 B! G+ h# F# Z6 K
% t4 C& N) e# b% R/ R6 J1 L- projectCurveBuilder1->SetPlaneToProjectTo(plane1);
; C( T5 V/ o" L% f9 l6 A
0 B6 y6 w+ a: {% \6 G- projectCurveBuilder1->SetGapOption(true);# v0 O% H$ E5 N$ t& C5 I- w, z/ p
- & F6 \4 C9 C- }# D+ c
- projectCurveBuilder1->CurveFitData()->SetCurveJoinMethod(GeometricUtilities::CurveFitData::JoinGeneral);
1 B) |- C+ a' y5 v4 c+ X1 X - $ v9 S! l, D x1 V8 h
- NXObject *nXObject1;1 v. P! J7 I# @ x
- nXObject1 = projectCurveBuilder1->Commit();
5 b+ y4 W) n& n% Z U' q6 o! X - % E; q, X# s, ]) n3 y: i8 Z! a% \1 {
- projectCurveBuilder1->SectionToProject()->CleanMappingData();$ v9 U0 s% j( R9 B+ t; `1 N
- 1 h. c9 p! q. ?
- projectCurveBuilder1->Destroy();
0 p( ^; N' N' ~; C" f
+ }% X: D4 r f& R8 ?5 @; \- }
4 U/ m/ t/ C4 R9 J/ g A6 C9 q8 d - catch(exception& ex)8 I& n4 p# V6 u+ y1 B. }
- {
. Z; _: ]5 V3 S - //---- Enter your exception handling code here -----0 j- ]- U% R4 x n. e
- errorCode = 1;( g5 j8 B! n( t8 V: m
- trimSteels::theUI->NXMessageBox()->Show("Block Styler", NXOpen::NXMessageBox::DialogTypeError, ex.what());
+ ^7 w# F2 i9 c! O3 q+ h - }
. H, A' Q7 I/ {8 k% _
2 O: p% d( V% _/ u" y% E5 C( u3 U- return errorCode;. k( Y5 _2 x2 S
- }$ e& `3 v, {+ a" v4 h% ]
复制代码 ) F1 k5 H: x; ~, B. o3 w/ ` Z
$ Q; v5 U4 ~+ }' j' P& D0 s
6 f9 T" W7 D2 h# L |
|