|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
NX二次开发源码: 通过点创建样条曲线
$ v( O9 L$ D% C5 Z- #include <uf_defs.h>
1 a* H9 |5 j& L - #include <uf.h>
2 c9 U. t8 b2 y - #include <uf_modl.h>
' e: e$ W* K* M O. _ - #include <uf_object_types.h>
g% z! y* u4 C$ G - #include <uf_ui.h>
; v4 }$ P+ G/ u _) Y S - #include <uf_modl.h>
1 m2 Y, C, M S) a3 @8 C+ [ Y - #include <NXOpen/NXException.hxx>
* }" A: @" u O. ^ - #include <NXOpen/Session.hxx>. W/ m- e( m: |% \: R9 ~
- #include <NXOpen/Selection.hxx>4 N$ |6 W3 s, n7 W5 S
- #include <NXOpen/Builder.hxx>- l6 k# b4 ]0 K j
- #include <NXOpen/Features_Feature.hxx>8 j' Z: E1 D& l5 s5 z
- #include <NXOpen/Features_FeatureBuilder.hxx>
6 c7 C3 j- {% N" p* n8 z - #include <NXOpen/Features_FeatureCollection.hxx>
. W. J/ d* p+ ?& C - #include <NXOpen/Features_GeometricConstraintData.hxx>
4 }1 ^8 j7 |( L9 L: f2 k - #include <NXOpen/Features_GeometricConstraintDataManager.hxx>7 c, @- `, Q; Z! L; ?& m
- #include <NXOpen/Features_StudioSplineBuilder.hxx>! E- z: c/ R7 O! h) }6 |& N) p
- #include <NXOpen/Part.hxx>4 I( J' `1 Y. ]
- #include <NXOpen/ParTCollection.hxx>
' l; Z' H" {! y5 J+ a/ l' ] - #include <NXOpen/Point.hxx> h+ ]+ y [% s) l! C. D1 l
- #include <NXOpen/PointCollection.hxx>
! g0 H1 S* z) F' S - #include <NXOpen/NXString.hxx>& p0 ^- \9 m/ ?
- #include <NXOpen/UI.hxx>% G5 a1 d t7 l* v! p0 B3 g3 O
- #include <NXOpen/Spline.hxx>
) H3 c+ g1 K' ~ B% M0 X B - #include <NXOpen/NXObjectManager.hxx>9 O+ x+ X6 W- L
- ~* x8 E8 K; [9 S/ i# c& C
- using namespace NXOpen;
" {7 q! C7 k' H) I) q - using namespace std;
# ]( b' b) j7 }8 O
: K o: w, Z' L3 T& y7 B- extern "C" DllExport int ufusr_ask_unload()$ _, |+ D+ f! f
- {
2 F; z: z2 J/ E% i4 Q( Y - return (int)Session::LibraryUnloadOptionImmediately;
- j" m: _: K" ]( @* {) T! m8 ` - }/ F$ B3 f1 j7 F" v5 q
- ' i5 j `$ E( u* | M& b' ?$ t
- static vector<Point *> selectPoints(NXString prompt)7 K2 W# M" u; S( \* [5 {
- {$ e3 K R, J& B- P$ p4 f1 u
- UI *ui = UI::GetUI();
3 X# X- l$ z2 J5 t" | - Selection *sm = ui->SelectionManager();5 F/ o" F& q' E+ x
- std::vector<Selection::MaskTriple> mask(1);, }$ R6 W# D$ T4 p
- mask[0] = Selection::MaskTriple(UF_point_type, 0, 0);
# s) o- t+ g- Z1 P4 b4 P( e - std::vector<NXObject *> objects;: W" w5 h2 _! z, R2 [' @
- " ~9 C9 ?' a# K" l- a# w2 Q
- sm->SelectObjects("Select Points", prompt,
2 `4 @$ Z' X( A8 z( l - Selection::SelectionScopeAnyInAssembly,
+ P' q3 i: ?0 A' i$ a - Selection::SelectionActionClearAndEnableSpecific,
: o- x. W+ E) u3 ]7 S& s - false, false, mask, objects);0 q/ s- X7 O) A! N
- * k0 F# C2 V' R9 `
- vector<Point *>selPoints(objects.size());9 N. S! `4 ^, p) F' L
- for (unsigned int ii = 0; ii < objects.size(); ii++)
# t& `0 P; D1 s: f9 m& S - selPoints[ii] = dynamic_cast<Point *>(objects[ii]);
( b# Y4 V+ S& K' U - 9 t$ k% \# x P% X3 D7 {
- return selPoints;
! ^, K: f6 d0 O4 H! W; V; a - }
; n3 l$ |3 i, J; `7 J( n: b
" p9 G1 `- N5 A$ _" @# I- static Spline *createStudioSplineThruPoints(vector<Point *> thePoints)* ]1 Q1 }+ C. s8 @
- {3 _ S1 v2 \ P0 [1 ^3 @# y8 j p
- Session *theSession = Session::GetSession();+ W) p( k1 x+ K
- Part *workPart(theSession->Parts()->Work());& o7 [0 h0 _3 W: b
9 {& w4 [; S9 q! ]* S- Session::UndoMarkId markId1;
8 h$ i8 s3 s& |" ^5 u h, W" p6 O- ~ - markId1 = theSession->SetUndoMark(Session::MarkVisibilityVisible, C8 Q+ h7 [0 V/ d6 @. d
- "Studio Spline Thru Points");
) ?4 f$ g. l: f1 x2 E - % q, a: B9 L3 @
- Features::StudioSpline *nullFeatures_StudioSpline(NULL);" t" l/ x4 W6 x2 r
- 7 E1 C, g% }6 x6 F
- Features::StudioSplineBuilder *studioSplineBuilder1;. ]: J# }9 x( r" N, \, d+ j) I
- studioSplineBuilder1 = workPart->Features()->
% \' o! b9 @$ S; y - CreateStudioSplineBuilder(nullFeatures_StudioSpline);
2 @: }& N( r6 ]7 p/ X - studioSplineBuilder1->SetAssociative(true);/ i* Q+ \) V+ X+ n# E( M' w' A& Y
- studioSplineBuilder1->. Y& k/ ]1 x; d9 z
- SetInputCurveOption(Features::StudioSplineBuilder::CurveOptionRetain);
3 g7 U6 L8 c5 v0 f2 W& a - studioSplineBuilder1->4 x2 I! O% [; C9 F9 l' T
- SetSplineMethod(Features::StudioSplineBuilder::MethodThroUGhPoints);
\3 w. }) R4 y- e0 q7 @2 T - studioSplineBuilder1->SetDegree((int)thePoints.size() - 1);2 t; j" N# J; |( J+ y. h2 W. F
- studioSplineBuilder1->SetPeriodic(false);0 W; C; X8 p4 d" _
- studioSplineBuilder1->% i0 |. N: S( e
- SetMatchKnots(Features::StudioSplineBuilder::MatchKnotsTypeNone);3 o: ]/ Y& x2 R+ Q( M
- std::vector<double> knots1(0);
# X: K9 J2 [" L' l% c# w2 O) Z. \ - studioSplineBuilder1->SetKnots(knots1);
' X" ^; g) v6 L3 ^- | - std::vector<double> parameters1(0);
, {# s/ [1 p" W# ~; m* @0 L - studioSplineBuilder1->SetParameters(parameters1);
. v# }% J' W$ r# \( `% a7 v - Direction *nullDirection(NULL);
* a4 A+ t- {" u( z; o8 S7 v - Scalar *nullScalar(NULL);; p8 L% O+ C, T$ M
- Offset *nullOffset(NULL);
/ J7 j- U' a6 Y% I! f m - 0 |* \* L& W% T
- std::vector<Features::GeometricConstraintData *>8 |- ]0 k$ m" h8 |2 v. k
- geometricConstraintData(thePoints.size());
3 f8 r5 O! D9 ~) g% j
% p; w$ V( Q" K% k, R- for (unsigned int ii = 0; ii < thePoints.size(); ii++)' X k4 J6 G. {: l
- {
* }" R# i- e/ u5 H* D* `8 g; m' P - geometricConstraintData[ii] = studioSplineBuilder1->0 [2 g; Z2 O% |# c8 b! ^& f9 X
- ConstraintManager()->CreateGeometricConstraintData();
4 |5 C2 n9 A) W3 {. G7 c! L* D6 p - geometricConstraintData[ii]->SetPoint(thePoints[ii]);
4 R) d2 x$ x) Y# v" [" S - geometricConstraintData[ii]->SetAutomaticConstraintDirection(. B% N4 G9 l5 \
- Features::GeometricConstraintData::ParameterDirectionIso); j' h" E9 m2 [ _1 |
- geometricConstraintData[ii]->SetAutomaticConstraintType(
& `& n# I- X4 ]& z/ } - Features::GeometricConstraintData::AutoConstraintTypeNone);6 a' m5 [6 x/ A& z# P; H J; u1 W
- geometricConstraintData[ii]->SetTangentDirection(nullDirection);
* N) T( D% a8 ?+ R9 n/ [ - geometricConstraintData[ii]->SetTangentMagnitude(nullScalar);
7 `6 E7 T& B! b6 L/ x9 D' Z& J: Q - geometricConstraintData[ii]->SetCurvature(nullOffset);
+ t' g2 N7 ?; c3 N+ y - geometricConstraintData[ii]->SetCurvatureDerivative(nullOffset);) [8 I3 j2 |- E) j9 K( }' V9 V
- geometricConstraintData[ii]->SetHasSymmetricModelingConstraint(false);& n1 k+ T' ?$ k$ F# w. a; C. {
- }8 D4 y+ f+ B6 ^% `5 Y
- 5 V! \& H" S. S: q
- studioSplineBuilder1->ConstraintManager()->SetContents(; {( h J. u V, D) s
- geometricConstraintData);) \( n, C* P ^
- " n# U. _& |: c
- Features::Feature *feature1 = studioSplineBuilder1->CommitFeature();
+ b; K2 [/ ]! [% ^: l% z2 `- { - Spline *theSpline = studioSplineBuilder1->Curve();
" E" }3 s) \$ |* C: d
: l0 I) C3 |2 p1 b4 s: o% \! [- studioSplineBuilder1->Destroy();
' d1 Q. S5 B; P/ h q" F - # ^/ C' ` R/ D# O T
- return theSpline;
1 ~7 W' s& R( h& D* o8 ~ - }- n2 U+ @8 r& U3 i
- . e. P3 w, r5 z4 Y
- extern "C" DllExport void ufusr(char *param, int *retcod, int param_len)' N' A/ t3 K8 c9 N9 ~9 E+ t# q
- {
) r9 ]" o- `/ D( h - std::vector<Point *>thePoints = selectPoints("Studio Spline Thru Points");
- ^" y" M5 F& J: x - if (!thePoints.size()) return;
) n2 l2 B4 s. l; P9 ~
+ _* t% Y% H% t1 s# I2 n' Z- Spline *theSpline = createStudioSplineThruPoints(thePoints);
$ {# M; m7 ]' h N$ C8 A9 x - ( z3 z; z! o. h; ?; u, R) J
- if (theSpline)3 n) o5 \" y& r2 k7 F& j2 q
- {
6 x5 F! d% w3 e l! y$ r Y( _ - theSpline->Highlight();
( Q6 r1 R, B; y$ R3 ~3 W" [# c G0 x - uc1601("Studio Spline Created Thru Points", TRUE);
9 v- w4 R6 `8 B+ W1 v. I - theSpline->Unhighlight();
' q1 W7 h2 [* B - }
* e$ r/ e! Q: _: z4 z) k: G2 D - }
1 p+ ]1 q$ K; Z2 B! d) c
复制代码
# Q( E8 n! Y9 o( g& ^6 l5 Y: P
3 }! h" `3 Z- k. q/ K& @1 M, V7 q" q, t$ O# v; R5 b3 c% n/ v
|
|