PLM之家精品课程培训

PLM之家精品课程培训

联系电话:18301858168   |   QQ咨询:939801026
NX二次开发培训

NX二次开发培训

UFUN/NXOpen C++和实战案例

适合初级入门或想深入了解二次开发的工程师,本培训结合ufun,NXOpen C++,大量的实例及官方内部的开发技术。
公众号二维码

关注公众号

点击扫描二维码免费在线高清教程

课程详情
Catia二次开发培训

Catia二次开发培训

市场需求大,掌握核心技术前景广阔

Catia二次开发的市场需求大,人才稀缺。掌握开发技能潜力巨大,随着经验积累将在汽车、航空等领域有所作为。
B站二维码

在线原创B站视频

点击关注工业软件传道士主页

课程详情
Teamcenter培训

Teamcenter培训

全方位培训,从基础应用到高级开发全覆盖

涵盖用户应用基础培训、管理员基础培训、管理员高级培训及二次开发培训等全方位内容,由多年经验讲师打造。
QQ群二维码

加入同行交流

点击扫描二维码加入QQ群

课程详情
×

PLM之家plmhome公众号

课程涵盖: PLM之家所有原创视频

×

关注B站视频

所有高清视频一览无余,全部在线播放学习

×

加入PLM之家QQ群

同行交流,疑问解答,更多互助

PLM之家PLMHome-国产软件践行者

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

[复制链接]

2013-12-11 11:14:40 3253 0

mildcat 发表于 2013-12-11 11:14:40 |阅读模式

mildcat 楼主

2013-12-11 11:14:40

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

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

x
# S+ I% q3 F/ w$ K# p$ f) I
NX二次开发源码:通过选择点创建样条曲线
0 K/ q" U& |, k" T, G& r! ]9 [4 J2 F/ h+ E$ J3 D9 N

0 i7 e# K1 o8 p) L, k4 o
  1. 9 x" }) e$ W! r6 k- z6 y: w+ t
  2. #include <uf_defs.h>
    " E& U4 x6 z. P, ~1 v
  3. #include <uf.h>
    * _& ?/ r7 L9 m9 N+ e
  4. #include <uf_modl.h>+ b* S0 p+ u  c: u
  5. #include <uf_object_types.h>
    4 m( n7 A5 f- s. r: g2 D1 A+ z
  6. #include <uf_ui.h>7 ~5 B( O# x! S
  7. #include <uf_modl.h>; v: v* D! l8 p* F7 o8 i
  8. #include <<em>NXOpen</em>/NXException.hxx>* l( a4 O# Y& M
  9. #include <<em>NXOpen</em>/Session.hxx>
    ( m2 Z& ]- g; T' G6 c) G9 O
  10. #include <<em>NXOpen</em>/Selection.hxx>
    $ N$ w! [4 M8 ]& j& N! k. A$ g
  11. #include <<em>NXOpen</em>/Builder.hxx>
    1 M( Q( w! _% ~' n. I% X
  12. #include <<em>NXOpen</em>/Features_Feature.hxx>2 M9 H' C( Y. J. B6 y0 h0 W
  13. #include <<em>NXOpen</em>/Features_FeatureBuilder.hxx>
      _' Y9 _/ |4 D7 p0 T
  14. #include <<em>NXOpen</em>/Features_FeatureCollection.hxx>7 v& i- r( E* D5 f( g$ ^- S
  15. #include <<em>NXOpen</em>/Features_GeometricConstraintData.hxx>3 O- ~3 t% @% C- p1 `
  16. #include <<em>NXOpen</em>/Features_GeometricConstraintDataManager.hxx>) @, z3 x+ e% S! l
  17. #include <<em>NXOpen</em>/Features_StudioSplineBuilder.hxx>0 v& X! a' l# X/ N
  18. #include <<em>NXOpen</em>/Part.hxx>
    , a* f0 r7 C0 e1 d
  19. #include <<em>NXOpen</em>/ParTCollection.hxx>
    " f( E/ a+ j$ t/ X, m, O
  20. #include <<em>NXOpen</em>/Point.hxx>
    , p" ?* v3 e% S4 \4 G( W
  21. #include <<em>NXOpen</em>/PointCollection.hxx>
    ; h$ W: m9 a) u6 G
  22. #include <<em>NXOpen</em>/NXString.hxx>' H! W- E8 e! c2 E4 V  J8 I  ^6 W
  23. #include <<em>NXOpen</em>/UI.hxx>% G8 u6 C6 ?0 z- h3 D0 D
  24. #include <<em>NXOpen</em>/Spline.hxx>9 W8 K& N! W" N+ h& f
  25. #include <<em>NXOpen</em>/NXObjectManager.hxx>
    % z7 ~" ^. n+ I; y
  26. 5 A' P1 ?9 ]& Z8 c
  27. using namespace <em>NXOpen</em>;6 ~, E" |6 \: N# E
  28. using namespace std;
    9 b+ E# @3 K$ R2 b& r  i0 h

  29. 1 ?& l0 ~. }7 j& a' A0 b" {; m. d4 _- @
  30. extern "<em>C</em>" DllExport int ufusr_ask_unload()
      F" @. j; |1 z; |# C7 q1 l
  31. {0 k# o# f$ H- r) {- ]
  32.     return (int)Session::LibraryUnloadOptionImmediately;: Y! l3 ^- j) j. k3 M, Q
  33. }8 e" Y% A* {8 n! h7 Z# `
  34. 0 N9 i! d5 z8 X6 p9 h2 F) O
  35. static vector<Point *> selectPoints(NXString prompt)
    6 K: `8 X# w. C  N6 H8 D0 C
  36. {& `. \, H( z9 z. ?" ^2 r3 L8 B/ ~
  37.     UI *ui = UI::GetUI();
      e: w6 n+ g$ F2 p6 ?7 l9 [
  38.     Selection *sm = ui->SelectionManager();4 Y: N3 x0 j5 ~7 a7 S# ]
  39.     std::vector<Selection::MaskTriple> mask(1);
    1 A# m" h4 j/ a  _. ~* k( ^2 I. U
  40.     mask[0] = Selection::MaskTriple(UF_point_type, 0, 0);
    0 V, v1 q$ P' B5 m7 j, y' D1 Q7 }
  41.     std::vector<NXObject *> objects;. j; \! X9 w: _5 k% u. ?

  42. 6 y) g) x" m* K2 K" S
  43.     sm->SelectObjects("Select Points", prompt,
    , T$ r( a: j  I5 T4 M: W6 Q# d; o4 ^
  44.         Selection::SelectionScopeAnyInAssembly,1 j) u3 d9 D& D# q4 Z
  45.         Selection::SelectionActionClearAndEnableSpecific,6 \8 J4 M& E+ p/ B  k: c
  46.         false, false, mask, objects);
    & H( ^3 y: X& r8 v

  47. 7 ], I2 L' y" n% J6 O3 E# S
  48.     vector<Point *>selPoints(objects.size());
    / _1 f# W' J- }1 F1 z
  49.     for (unsigned int ii = 0; ii < objects.size(); ii++)
    ( h. J2 K# z8 X$ ?: t4 I; j
  50.         selPoints[ii] = dynamic_cast<Point *>(objects[ii]);+ L7 r& l: r- \

  51. ; Z, c6 B- A0 i
  52.     return selPoints;9 t2 H4 ]+ A" T7 u; y
  53. }
    3 {0 i+ k2 [% Q

  54. 4 G1 L" Q" t9 j; v
  55. static Spline *createStudioSplineThruPoints(vector<Point *> thePoints)
    9 w# L; I! V1 k! m9 T2 V
  56. {; N' j# G4 m+ b  C
  57.     Session *theSession = Session::GetSession();
    % n. g* T9 W  O8 q4 ?
  58.     Part *workPart(theSession->Parts()->Work());/ `9 X7 l& G! n$ T0 E" m, O

  59. 6 o' E, z* k, n# ]/ a8 z
  60.     Session::UndoMarkId markId1;4 h  e, ~. U9 \) c  P
  61.     markId1 = theSession->SetUndoMark(Session::MarkVisibilityVisible,! @/ R2 J; W; J7 ?5 s
  62.         "Studio Spline Thru Points");  X/ y! ]) z6 ?! j; n. p
  63. / x* T/ ?; _& l+ T" u" z+ N7 x: W
  64.     Features::StudioSpline *nullFeatures_StudioSpline(NULL);
    * H" Q5 W  G: J! ~" N
  65. ( h$ T% T& c4 z) o
  66.     Features::StudioSplineBuilder *studioSplineBuilder1;7 m; n/ v+ P" p3 Z" V5 P
  67.     studioSplineBuilder1 = workPart->Features()->
    ; ~/ {; J1 m# X
  68.         CreateStudioSplineBuilder(nullFeatures_StudioSpline);
    1 K) B: I; Y, Q; }2 |* E
  69.     studioSplineBuilder1->SetAssociative(true);, J/ T1 n  j# u
  70.     studioSplineBuilder1->
    ! |; c: }7 `- d
  71.         SetInputCurveOption(Features::StudioSplineBuilder::CurveOptionRetain);
    / B; x5 }& [7 q1 n) D( A
  72.     studioSplineBuilder1->9 p: H8 ?+ v& Y& D
  73.         SetSplineMethod(Features::StudioSplineBuilder::MethodThroUGhPoints);
    8 D' {, T, i& j7 }
  74.     studioSplineBuilder1->SetDegree((int)thePoints.size() - 1);
    , _! E. T" u6 Y
  75.     studioSplineBuilder1->SetPeriodic(false);
    : E& F' ~7 h/ o2 U
  76.     studioSplineBuilder1->0 H. S9 u/ u2 ~. I& t
  77.         SetMatchKnots(Features::StudioSplineBuilder::MatchKnotsTypeNone);# E; q0 T2 y7 R2 f. p/ N
  78.     std::vector<double> knots1(0);% E: Q' i; F& P
  79.     studioSplineBuilder1->SetKnots(knots1);
    1 x% `$ `( t- ?! e, z/ c( q0 p
  80.     std::vector<double> parameters1(0);/ a( k5 K! G, f! c$ ]
  81.     studioSplineBuilder1->SetParameters(parameters1);
    " B! D  Q. U; z3 {4 D! n
  82.     Direction *nullDirection(NULL);
    3 I5 B; s! h5 i0 k
  83.     Scalar *nullScalar(NULL);
    , e( ]8 c8 b- t, r7 _2 A1 `% {  @
  84.     Offset *nullOffset(NULL);
    8 ~0 t* F1 ~& Q- I9 S
  85. ( U3 V) P5 l+ ^+ |( H6 d
  86.     std::vector<Features::GeometricConstraintData *>
    , q6 O4 }' R4 J
  87.         geometricConstraintData(thePoints.size());# H# P' s' D0 b
  88. " U$ v- M! l$ q8 K4 D3 k/ N$ @
  89.     for (unsigned int ii = 0; ii < thePoints.size(); ii++)7 w- x# c5 [) k' M# |* @0 N
  90.     {9 e; T0 ^0 C, ~* w1 g) c
  91.         geometricConstraintData[ii] = studioSplineBuilder1->
    ' y2 y3 M8 R8 k, l
  92.             ConstraintManager()->CreateGeometricConstraintData();9 k' U) V  E- y
  93.         geometricConstraintData[ii]->SetPoint(thePoints[ii]);
    7 Q+ ]* M/ w* O
  94.         geometricConstraintData[ii]->SetAutomaticConstraintDirection(
    $ {+ P0 e/ x' c" c& N
  95.             Features::GeometricConstraintData::ParameterDirectionIso);- w: @; K( f! z/ N/ |. }
  96.         geometricConstraintData[ii]->SetAutomaticConstraintType(4 j& F. b- ]6 q
  97.             Features::GeometricConstraintData::AutoConstraintTypeNone);( U. T0 z0 O5 \) o% f* l. n3 S% p- d
  98.         geometricConstraintData[ii]->SetTangentDirection(nullDirection);
    0 e- Y, x4 c$ A/ Z" ~$ ~
  99.         geometricConstraintData[ii]->SetTangentMagnitude(nullScalar);  J- W. u- N4 `- O
  100.         geometricConstraintData[ii]->SetCurvature(nullOffset);' M3 t  J! }* h0 c
  101.         geometricConstraintData[ii]->SetCurvatureDerivative(nullOffset);7 K, c. V5 U8 R. |
  102.         geometricConstraintData[ii]->SetHasSymmetricModelingConstraint(false);0 F1 S& B9 P) V4 \% h$ d
  103.     }* y) c4 B0 y( m' M, \5 q6 W7 Z
  104. ; p2 n3 C4 |" ]/ b' L3 C
  105.     studioSplineBuilder1->ConstraintManager()->SetContents(
    & _, Q& w7 ?* N8 j
  106.         geometricConstraintData);! V" F0 I1 I/ \9 i* M+ ]  ~) q5 w
  107. 3 r* M) y5 Q, A5 v! E  l$ T# j
  108.     Features::Feature *feature1 = studioSplineBuilder1->CommitFeature();
    ) N2 B8 Z+ q7 E$ v# X, f
  109.     Spline *theSpline = studioSplineBuilder1-><em>Curve</em>();
    + h5 x$ I) x* R( m: [

  110. + W: g) n5 j+ T9 {& {
  111.     studioSplineBuilder1->Destroy();. I  b1 }( o4 I

  112. # J. w. a: U# H
  113.     return theSpline;' Q: K' V9 C9 ?& c: z% }) g
  114. }& X. `3 R( k# l, W
  115. 2 l3 y5 B! U9 l  a
  116. extern "<em>C</em>" DllExport void ufusr(char *param, int *retcod, int param_len)! r+ Q1 l1 G- V& h
  117. {8 F" y. J) D* |4 b8 U9 f
  118.     std::vector<Point *>thePoints = selectPoints("Studio Spline Thru Points");% d# G/ _# _0 L
  119.     if (!thePoints.size()) return;" E4 ^5 Y* {* i& L
  120. . [3 p) |2 K4 q! h" c. m
  121.     Spline *theSpline = createStudioSplineThruPoints(thePoints);1 X# l* P# L  F- u

  122. ; {1 M' K; S# g/ ?. n# ?; ]% H
  123.     if (theSpline), d/ b% Z7 @8 E( b; c$ d: a
  124.     {& ^2 c+ w- S; s* x+ b
  125.         theSpline->Highlight();
    . ]+ P) ?+ C; N4 x/ c$ I5 n
  126.         uc1601("Studio Spline Created Thru Points", TRUE);
    5 n6 g+ f  A6 b
  127.         theSpline->Unhighlight();
    - s& [2 @7 B3 y2 t7 p8 M$ ^$ }) V
  128.     }9 z# ^1 `0 Q2 C) {9 R6 i
  129. }
    * Y7 t; L& H2 l/ F' D9 [. }
  130. <p> </p>
复制代码

( I* e/ s1 C" H1 }3 {
该会员没有填写今日想说内容.
回复

使用道具 举报

发表回复

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

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

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

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

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

    我知道了