PLM之家PLMHome-工业软件与AI结合践行者

[二次开发源码] NX二次开发源码: 通过点创建样条曲线

[复制链接]

2013-10-30 14:28:35 4031 0

admin 发表于 2013-10-30 14:28:35 |阅读模式

admin 楼主

2013-10-30 14:28:35

请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!

您需要 登录 才可以下载或查看,没有账号?注册

x
NX二次开发源码: 通过点创建样条曲线3 C% K, @. w$ R7 H2 r8 V" e/ u! |
  1. #include <uf_defs.h>
    . j: P$ f2 Y( i- J5 W, J4 z/ s
  2. #include <uf.h>
    2 Y! E7 U) R* ~3 v
  3. #include <uf_modl.h>8 c9 d( ]% r, t: N
  4. #include <uf_object_types.h>) H! U+ U5 k0 w% ]
  5. #include <uf_ui.h>+ ^- {$ ^  M$ S  I3 u! z0 `! `3 X
  6. #include <uf_modl.h>
    8 ?0 U$ f5 L# ?4 v, F  d- C2 g
  7. #include <NXOpen/NXException.hxx>
    3 l' W, u" j; _8 Z8 ]  i
  8. #include <NXOpen/Session.hxx>' U5 X. ?0 ?! U2 d) ?5 p' E
  9. #include <NXOpen/Selection.hxx>
    7 z7 v' I8 o  A( j4 e% H
  10. #include <NXOpen/Builder.hxx>
    ( q- m2 _* W& Q/ K
  11. #include <NXOpen/Features_Feature.hxx>
    , O8 p( O9 k/ H0 r' R' R
  12. #include <NXOpen/Features_FeatureBuilder.hxx>) A: ]8 B3 g& q
  13. #include <NXOpen/Features_FeatureCollection.hxx>
    - g- ]' d9 Q; K, z: L
  14. #include <NXOpen/Features_GeometricConstraintData.hxx>( }4 w) r, U" j4 y
  15. #include <NXOpen/Features_GeometricConstraintDataManager.hxx>( A/ b' ]8 }1 y% Z
  16. #include <NXOpen/Features_StudioSplineBuilder.hxx>
    1 q5 `; x! I' Z! g1 B/ E
  17. #include <NXOpen/Part.hxx>
    " N; T& ?1 D' k
  18. #include <NXOpen/ParTCollection.hxx>
    ; Q3 I. |; U4 _- I
  19. #include <NXOpen/Point.hxx>
    5 l5 p* x( ]& c+ e( |$ D
  20. #include <NXOpen/PointCollection.hxx>8 r0 \  `7 u- N# Z( d+ u+ D$ m( k1 x$ O
  21. #include <NXOpen/NXString.hxx>
    : r- T$ j7 A% C5 W/ P) E. p
  22. #include <NXOpen/UI.hxx>
    5 |6 M/ H# L2 U9 {
  23. #include <NXOpen/Spline.hxx>* x/ r/ K5 z# z" ^# e7 M: ?
  24. #include <NXOpen/NXObjectManager.hxx>* ]) }$ W! J2 |7 I' g
  25. ( P0 `3 k8 L- i/ e
  26. using namespace NXOpen;
      g# C( a) g9 B+ h( Z  E+ y' L( B
  27. using namespace std;
    # b5 \6 v+ w9 Y& g

  28. % M9 h- N' k& I- Y
  29. extern "C" DllExport int ufusr_ask_unload()
    ! G  {. Z4 y9 h: e! F
  30. {
    + [; `& q6 x6 z: k8 U4 {- h
  31.     return (int)Session::LibraryUnloadOptionImmediately;3 S4 ?9 h/ a# C
  32. }3 Y, W6 F$ i' D8 O

  33. 5 t" T4 ?5 J$ `2 h- e$ ^+ N
  34. static vector<Point *> selectPoints(NXString prompt)/ N, B+ Q8 @/ A3 h! g
  35. {( L8 O8 g# |: c0 p9 t
  36.     UI *ui = UI::GetUI();9 C8 {& i* G8 s% z7 A5 d1 J  ~/ x
  37.     Selection *sm = ui->SelectionManager();4 S% s, A" i6 [. B" O7 L6 U+ F% d( R& z% z
  38.     std::vector<Selection::MaskTriple> mask(1);& s* Z1 \& `& g8 e) W5 ~+ i
  39.     mask[0] = Selection::MaskTriple(UF_point_type, 0, 0);
    . J2 i/ N) n. Z7 f7 h5 ?0 d
  40.     std::vector<NXObject *> objects;
    - e$ x% z" E# g, x' N9 P+ ^
  41. 4 b# \! N* O$ S( H- ]" {
  42.     sm->SelectObjects("Select Points", prompt,
    " B) i4 M1 u+ v4 W4 p) A
  43.         Selection::SelectionScopeAnyInAssembly,4 O( N# d' v5 C+ u, j' ~
  44.         Selection::SelectionActionClearAndEnableSpecific,
    3 j) X; m4 T: J& C) q" i
  45.         false, false, mask, objects);% I4 U) R" V+ {  P+ V
  46. - C" c9 r, `& D* P0 l  G+ h
  47.     vector<Point *>selPoints(objects.size());* ]8 k- H- E1 Y- C7 V7 G
  48.     for (unsigned int ii = 0; ii < objects.size(); ii++)5 s: J) i2 {/ L) {, ]7 D. s
  49.         selPoints[ii] = dynamic_cast<Point *>(objects[ii]);
    6 i5 J8 f5 `" p

  50. ! ]( x0 {! e4 B* T7 W& g, e% e
  51.     return selPoints;
    ) y4 R/ q* M& ~7 M* @9 B
  52. }
    % @* z& E9 \& b  I8 X$ B1 K

  53. * B* x+ q4 O/ b5 R9 f! ?
  54. static Spline *createStudioSplineThruPoints(vector<Point *> thePoints)6 U- q; D$ ~$ a
  55. {
    3 J. D- g& c& k0 c( b4 I
  56.     Session *theSession = Session::GetSession();% w* f/ }6 a0 G3 W
  57.     Part *workPart(theSession->Parts()->Work());& u; H5 W5 |% c. G% n
  58. 8 @7 L6 i. E, ?7 q* N
  59.     Session::UndoMarkId markId1;
    # `( z1 v1 w: t, ^. X/ t# V
  60.     markId1 = theSession->SetUndoMark(Session::MarkVisibilityVisible,
    7 J% C: ~( }  C2 Q  N9 k
  61.         "Studio Spline Thru Points");% F  E( I4 P7 g* U% i: q
  62. ! z( g$ I+ W* _% j3 y* h# j: _
  63.     Features::StudioSpline *nullFeatures_StudioSpline(NULL);& T: A6 Q3 E9 {: {
  64. % u9 O3 a' ^4 e; L
  65.     Features::StudioSplineBuilder *studioSplineBuilder1;! q# `& k, _: \( }9 [
  66.     studioSplineBuilder1 = workPart->Features()->" \. `/ w2 R  ^7 c. r
  67.         CreateStudioSplineBuilder(nullFeatures_StudioSpline);
    ; B2 Y4 }7 c' n6 Y) u$ M
  68.     studioSplineBuilder1->SetAssociative(true);
    # M! H8 F5 Z8 A8 m. C; `3 i6 @) L+ u
  69.     studioSplineBuilder1->5 Q6 _' R: M3 q4 a* {3 }  h
  70.         SetInputCurveOption(Features::StudioSplineBuilder::CurveOptionRetain);
    ! O+ ?  d: t) j8 g8 f% U$ l
  71.     studioSplineBuilder1->
    # q) N' Q5 h# y! y
  72.         SetSplineMethod(Features::StudioSplineBuilder::MethodThroUGhPoints);
    " E! _/ t2 D( q
  73.     studioSplineBuilder1->SetDegree((int)thePoints.size() - 1);
    ! R& J3 G1 T$ o3 C( I8 U
  74.     studioSplineBuilder1->SetPeriodic(false);
    ( b' r3 J8 Y8 q6 `) _5 T3 @
  75.     studioSplineBuilder1->
    : k* k+ @/ s, H% S
  76.         SetMatchKnots(Features::StudioSplineBuilder::MatchKnotsTypeNone);  V, b3 i) ~2 I7 ^& A" ]
  77.     std::vector<double> knots1(0);
    4 B4 k, O8 @8 o2 o
  78.     studioSplineBuilder1->SetKnots(knots1);
    6 A( ^( @; i: x) E7 F8 k; W
  79.     std::vector<double> parameters1(0);
    # S; Z, X7 r# Z/ ~/ a
  80.     studioSplineBuilder1->SetParameters(parameters1);. w1 m: z7 D6 p8 g4 S3 D5 a+ A
  81.     Direction *nullDirection(NULL);1 ^$ H2 [/ N6 V( }5 r# V5 v
  82.     Scalar *nullScalar(NULL);
    $ i) i4 @% \+ U( h2 a2 [2 S
  83.     Offset *nullOffset(NULL);: `' u7 x0 x2 i; [1 _

  84. 5 N, @9 r4 y  Z6 Y) u) Z. y
  85.     std::vector<Features::GeometricConstraintData *>
    : H$ E0 z, a0 c$ p. R
  86.         geometricConstraintData(thePoints.size());
    4 ?6 B9 z" J  Q/ W* U9 v# i& ~& x. q

  87. & r2 K' d) z# d! \5 J( d8 u
  88.     for (unsigned int ii = 0; ii < thePoints.size(); ii++)
    # D. z3 ?* e1 d; O
  89.     {
    : Y. C/ V! D6 d1 [8 ^; R" m% B
  90.         geometricConstraintData[ii] = studioSplineBuilder1->
    ) `7 g; W5 {, \
  91.             ConstraintManager()->CreateGeometricConstraintData();- l% Y) Y8 p$ q7 }7 v
  92.         geometricConstraintData[ii]->SetPoint(thePoints[ii]);$ G; F5 t/ h( ~2 [- u
  93.         geometricConstraintData[ii]->SetAutomaticConstraintDirection(
    $ y  h+ S$ w- z4 P: U6 \
  94.             Features::GeometricConstraintData::ParameterDirectionIso);
    # [& b/ W3 n- ~7 g- D4 u
  95.         geometricConstraintData[ii]->SetAutomaticConstraintType(0 c* Z+ c, O+ P1 L$ l
  96.             Features::GeometricConstraintData::AutoConstraintTypeNone);
    ! q2 @6 z& _: b& p
  97.         geometricConstraintData[ii]->SetTangentDirection(nullDirection);
    , u: j$ {% E. W5 f7 R% c& ]7 X2 {
  98.         geometricConstraintData[ii]->SetTangentMagnitude(nullScalar);
      d( K5 v  w) d' ~1 q7 O
  99.         geometricConstraintData[ii]->SetCurvature(nullOffset);/ Y% a, `+ E# K4 o
  100.         geometricConstraintData[ii]->SetCurvatureDerivative(nullOffset);
    4 h9 _1 ]* y& P% {$ X7 o
  101.         geometricConstraintData[ii]->SetHasSymmetricModelingConstraint(false);# y2 M: r- i1 R, V( {1 |& m/ q
  102.     }% Y5 A& \; j. g+ E- W! ]) }

  103. 8 {5 |+ W$ ]; X( P. q  p
  104.     studioSplineBuilder1->ConstraintManager()->SetContents(
    ; R3 o3 G" @& Z2 M2 C3 J; d
  105.         geometricConstraintData);
      W0 F& w8 l/ t) F7 r$ o; Q

  106. 5 o6 M$ n( P# N* s( P4 y+ k
  107.     Features::Feature *feature1 = studioSplineBuilder1->CommitFeature();2 j+ [% ^4 s4 B# W6 H* l, v- }
  108.     Spline *theSpline = studioSplineBuilder1->Curve();
    2 e/ h3 T2 {. e* {
  109. 1 ?7 Y3 m' W, s4 X: R5 v0 |. s' C
  110.     studioSplineBuilder1->Destroy();
    , T8 z0 h/ B( |$ f7 T( i/ i3 n/ w

  111. " m) Z7 W% |3 S, ?; v0 m
  112.     return theSpline;4 P3 G. Y$ T+ d/ ?; b* X
  113. }# U9 g, C( M2 o8 n: F9 ?

  114. ( K( d  C, F7 @( q3 n, A
  115. extern "C" DllExport void ufusr(char *param, int *retcod, int param_len)  D. W( F: l. d
  116. {/ ~, K: i; n: r5 {, {* |% L
  117.     std::vector<Point *>thePoints = selectPoints("Studio Spline Thru Points");8 {' n2 n: @' ^- A2 I7 ^
  118.     if (!thePoints.size()) return;
    6 {4 q$ I  _0 z' x# U9 Z$ G$ R8 C
  119. , s" D4 n; |8 u" ~2 E4 X7 x: H6 s
  120.     Spline *theSpline = createStudioSplineThruPoints(thePoints);
    * r% r  h0 |! L
  121. 3 j( N" f; t& k+ a+ C
  122.     if (theSpline)
    & v: I9 k; R  \* [. R+ d
  123.     {
    4 \0 u( f$ r" }4 i. P; X
  124.         theSpline->Highlight();& s2 B: L' _- V2 X' W) z! u9 K
  125.         uc1601("Studio Spline Created Thru Points", TRUE);% v% ]2 c) m0 j) s
  126.         theSpline->Unhighlight();9 X5 Z' Y; J' j. }
  127.     }' n- ~# g+ O6 b! w4 o! V
  128. }
    - K5 J0 v5 n+ i8 X, E
复制代码
) K  @4 _" O" D

" B% P; R8 k% c/ A3 N( g
, v4 Y  h* |, C; T7 h) n
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 doTeam.tech
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 注册

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

    本网站(plmhome.com)为PLM之家工业软件学习官网站

    展示的视频材料全部免费,需要高清和特殊技术支持请联系 QQ: 939801026

    PLM之家NX CAM二次开发专题模块培训报名开始啦

    我知道了