|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
! q$ C9 v' k, _ i: C5 `. o: X6 E1 R2 H ~, f
% `" \* h% o3 R, x
UG NX二次开发源码分享: NX Open C++ 创建投影曲线 project curves
4 P: s& Z* K- F7 z. Y4 [5 T) e: W9 P
: [9 J+ |1 n" K; i! g% |此处使用的是 通过面的法向创建投影曲线,可以参考下!
! [& u( Z; H( s3 L' m* n* ]- J7 v4 h/ P3 q
) }: ~/ T, J" q3 U. l' ], P
' M1 j. w& c+ W+ O7 t$ y9 s8 r" }! ]8 _
# S0 e$ @4 `/ e5 L* m3 x( a
1 e: p9 u& j% V4 J4 u) p
# T0 s( a4 J, q, G* {, \9 u
NX Open C++ 创建投影曲线 project curves
; i8 D- E$ a8 W9 b
; v0 V9 L& a0 Y1 y; l% T/ t
( E4 o! P% X9 U( |& ^1 `
7 u; ~) ^6 `$ \% A6 x- int trimSteels::project_curves(vector<TaggedObject *>inputObjects,Plane *plane1)0 U9 `( @$ _' g0 Z1 `- W
- {% }) _9 @ K' t# }/ l- e) F3 r; \8 w5 R
- int errorCode = 0;5 [8 S# W3 g9 I1 F* Z: b3 b
- try
% F t. i$ _; u% i0 b: ^ - {: z9 p, D7 F/ }7 y4 u( Z
- // createProject curves
- i3 d; o) P; q( U
; v7 G5 a/ m% l" N- G7 ^- Features::Feature *nullFeatures_Feature(NULL);3 B) {/ p4 t' F. T9 b
- 4 Q( \1 l" `4 {( @' A: J+ S: {3 y
- Features::ProjecTCurveBuilder *projectCurveBuilder1;
/ u/ d$ X. |* J2 T+ _) c ^9 ]/ | - 7 E3 Y: c0 E7 V1 \: @ L9 v( a' | B
- projectCurveBuilder1 = workPart->Features()->CreateProjectCurveBuilder(nullFeatures_Feature);
/ ~: N6 q0 S# N0 |8 p - * P. G0 c! H! `
- projectCurveBuilder1->SectionToProject()->SetDistanceTolerance(DISTANCETOLERANCE);9 P5 T# e4 A; {) m" b% c9 ^
9 P9 D3 q4 \$ q9 ?3 L5 ~" C5 B! [- projectCurveBuilder1->SectionToProject()->SetChainingTolerance(CHAININGTOLERANCE);
9 i' k3 Z* C" R
% b& G3 S7 k/ {" ]- T0 J' v+ m- projectCurveBuilder1->SectionToProject()->SetAngleTolerance(ANGLETOLERANCE);% Y# [& X# ]+ g) [0 w) M" R
' _! w+ j. o( E$ }( q- ?) u D# O- projectCurveBuilder1->SectionToProject()->SetAllowedEntityTypes(Section::AllowTypesOnlyCurves);: P; d C. Q8 M. h2 W
7 i' e5 {, o2 }, w- projectCurveBuilder1->CurveFitData()->SetTolerance(DISTANCETOLERANCE);! i$ J/ f% t+ v! I% }, H6 x8 [
- ' d, G7 V1 |2 `3 w# `
- projectCurveBuilder1->CurveFitData()->SetAngleTolerance(ANGLETOLERANCE);; J z. D; W- m" p' w) P
- ) \* p: E+ Z+ Q7 f
- int size = (int)inputObjects.size();0 B5 A7 o# J) t6 M3 F `
- std::vector<IBaseCurve *> curves1;; u+ _1 S, N; a% g, p; z! w
- for (int ii = 0 ; ii < size; ++ii)8 R. w' ]; u! v5 Q* ^' J. I
- { \) u G" N' U) d; g
- curves1.push_back(dynamic_cast<IBaseCurve*>(inputObjects[ii]));
( O8 S/ `0 a7 d - }
. ~3 S+ P# k$ t& o6 f2 Z# O
5 a' h+ I. v: q8 {/ I P- NXOpen::CurveDumbRule *curveDumbRule1;1 C q( k/ a3 L, I* b
( @/ k1 |6 K$ ?% Z# u3 L& {- curveDumbRule1 = workPart->ScRuleFactory()->CreateRuleBaseCurveDumb(curves1);- `- }; C' {% J( J, e" U! h
0 |. B5 b) ^7 x) G8 r) y- projectCurveBuilder1->SectionToProject()->AllowSelfIntersection(true);
. K: ~2 ~7 A& G1 v) R - ) a/ X4 Q; V8 M# g7 J5 {5 M) p, j
- std::vector<SelectionIntentRule *> rules1(1);
' `, O# n% t$ D( t; l) E9 } - rules1[0] = curveDumbRule1;9 s4 s; b9 R/ @$ @) l$ Z9 w: p
- NXObject *nullNXObject(NULL);& N( E0 D0 O. |4 ?8 W' R, b
- Point3d helpPoint1(0, 0, 0); w. [ h4 Z% T" ]) N, V" h* m
- projectCurveBuilder1->SectionToProject()->AddToSection(rules1, nullNXObject, nullNXObject, nullNXObject, helpPoint1, Section::ModeCreate, false);) N: g& @, a4 z, h: A9 c" Q
3 x& d, z' @5 C- plane1->Evaluate();
5 g: i- _0 d7 d$ {0 P2 w' z# R- |
( F$ ~ \6 u+ ^4 B& b0 Y- projectCurveBuilder1->SetPlaneToProjectTo(plane1);
- q3 `* Z4 |* m4 X a1 G" a3 b - 5 x6 O; ^( q3 X) j7 M
- projectCurveBuilder1->SetGapOption(true);/ |: g! z6 i1 E4 G, [
9 ~1 j B: z* M9 [# {$ d3 n! b- projectCurveBuilder1->CurveFitData()->SetCurveJoinMethod(GeometricUtilities::CurveFitData::JoinGeneral);& m3 a: ?, M3 m* ]0 ~* x( m
% M- b. \1 V2 A9 K( J- NXObject *nXObject1;4 A; U( _7 R8 m, @
- nXObject1 = projectCurveBuilder1->Commit();* q0 D5 x: G2 g# ?( G' H) x4 C# I8 p
+ g _1 O C* S% E( c% w. m- projectCurveBuilder1->SectionToProject()->CleanMappingData(); J% O0 s( J# C8 p
7 S! y3 J) R. v- q8 H: J& ^- projectCurveBuilder1->Destroy();
; _* c/ o- \$ Y - ' ^! t# ]* k" c* t( S
- }
! t0 M' W- {) R) y2 D# q - catch(exception& ex)
* O2 A: ?' {; {$ b - { [* s8 X y6 l7 i' i- Q/ `) }
- //---- Enter your exception handling code here -----
& c) U/ |- J7 | - errorCode = 1;
, @3 f4 ~" p1 z# x) S4 b - trimSteels::theUI->NXMessageBox()->Show("Block Styler", NXOpen::NXMessageBox::DialogTypeError, ex.what());
! t/ Y2 \% h. z& Q% p# H8 b' x4 W - }3 H8 f" a# q) w& S5 O6 B
( H* X' l5 U) `- return errorCode;1 T: r3 P+ A/ A8 [# r
- }" s4 b( u9 {8 f3 q8 f9 K
复制代码 ! [! I$ h0 o- E/ V
5 d8 a9 E, P0 ~& k9 P) l* e' E
6 k8 v: D- S, T9 u& c$ ^ |
|