PLM之家精品课程培训,联系电话:18301858168 QQ: 939801026

  • NX二次开培训

    NX二次开培训

    适合初级入门或想深入了解二次开发的工程师,本培训结合ufun,NXOpen C++,大量的实例及官方内部的开发技术对于老鸟也值得借鉴!.

    NX CAM二次开发培训报名 NX二次开发基础培训报名
  • PLM之家Catia CAA二次开发培训

    Catia二次开发培训

    Catia二次开发的市场大,这方面开发人才少,难度大。所以只要你掌握了开发,那么潜力巨大,随着时间的积累,你必将有所用武之地!

  • PLM之Teamcenter最佳学习方案

    Teamcenter培训

    用户应用基础培训,管理员基础培训,管理员高级培训,二次开发培训应有尽有,只要你感兴趣肯学习,专业多年经验大师级打造!

  • PLM之Tecnomatix制造领域培训

    Tecnomatix培训

    想了解制造领域数字化吗?想了解工厂,生产线设计吗?数字化双胞胎,工业4.0吗?我们的课程虚位以待!

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

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

[复制链接]

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

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

mildcat 楼主

2013-12-11 11:14:40

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

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

x
. B4 f/ B7 ~1 u8 A
NX二次开发源码:通过选择点创建样条曲线
+ g; Q' c! S) J) v0 u( N7 \8 H6 B
& K- p4 u, H& M. O* ^! Q9 X
  1. , q2 ^/ G2 G& X6 R& Z7 q
  2. #include <uf_defs.h>7 r5 b* B5 F9 d; \+ [
  3. #include <uf.h>
    8 i7 V$ i- g  h4 X, ?& {- s9 `
  4. #include <uf_modl.h>. i3 i& i0 [7 `: {) t6 t
  5. #include <uf_object_types.h>
    ) r, ^2 g0 ^- o
  6. #include <uf_ui.h>4 F, T$ j+ c6 B! c4 `
  7. #include <uf_modl.h># F' w  A1 C- L
  8. #include <<em>NXOpen</em>/NXException.hxx>6 Y, K5 k' R6 ]$ D2 o
  9. #include <<em>NXOpen</em>/Session.hxx>
    ) _6 e# s, P7 C$ `) {6 G$ q! M7 b
  10. #include <<em>NXOpen</em>/Selection.hxx>* \: R, y9 Y4 O' E- s6 v: _# t
  11. #include <<em>NXOpen</em>/Builder.hxx>1 W, d8 ]. ~1 R! Z% D" j5 C
  12. #include <<em>NXOpen</em>/Features_Feature.hxx>; F& {1 u; Z8 T$ U
  13. #include <<em>NXOpen</em>/Features_FeatureBuilder.hxx>, C- S( z4 f- \# k- D
  14. #include <<em>NXOpen</em>/Features_FeatureCollection.hxx>
    * f  X4 Z2 v" J$ R% d1 Y+ v
  15. #include <<em>NXOpen</em>/Features_GeometricConstraintData.hxx>
    ' n* i* X# ?) q6 b# v
  16. #include <<em>NXOpen</em>/Features_GeometricConstraintDataManager.hxx>
    / `- m4 x! L, j  H+ j$ S
  17. #include <<em>NXOpen</em>/Features_StudioSplineBuilder.hxx>4 I& b6 e7 Z' [( t
  18. #include <<em>NXOpen</em>/Part.hxx>5 u2 f! D0 P# N% I  `
  19. #include <<em>NXOpen</em>/ParTCollection.hxx>+ w) O: i( m3 q
  20. #include <<em>NXOpen</em>/Point.hxx>& S& o/ a2 f+ L
  21. #include <<em>NXOpen</em>/PointCollection.hxx>7 U- P: i/ e: y" ]
  22. #include <<em>NXOpen</em>/NXString.hxx>
    3 `9 E6 J& ?3 G$ _3 l$ A: ^
  23. #include <<em>NXOpen</em>/UI.hxx>" x0 P* r4 z# Z6 C3 j! R; N
  24. #include <<em>NXOpen</em>/Spline.hxx>3 ?! d* K* Y0 M. ?# i
  25. #include <<em>NXOpen</em>/NXObjectManager.hxx>! s0 r( K& \% {1 }( n9 H' `

  26. % k3 ?5 u0 L9 G2 q1 R1 D; W( [
  27. using namespace <em>NXOpen</em>;  m2 Z7 Q7 N' ^* I
  28. using namespace std;: G1 ]6 L  M3 C
  29. ) W+ \4 j& B* E9 ]5 |
  30. extern "<em>C</em>" DllExport int ufusr_ask_unload()
    + O# f5 s5 G0 M3 B+ F% q& L
  31. {0 I9 l- ~* t- G$ |4 R6 z8 [
  32.     return (int)Session::LibraryUnloadOptionImmediately;
    7 N" x8 K# h; B& ?, W  N7 Z
  33. }. M2 i2 ?/ F$ U8 b# T
  34. * E( h. q" d3 `: o! T, G
  35. static vector<Point *> selectPoints(NXString prompt)! {$ A6 i# I$ F! q
  36. {
    7 Z( S" J1 g# }5 `8 ?( N
  37.     UI *ui = UI::GetUI();
    * t! b! j$ q6 Q# |  G* Z
  38.     Selection *sm = ui->SelectionManager();
    ( ]1 m- B- Z) ^# k8 m
  39.     std::vector<Selection::MaskTriple> mask(1);
    ) l) r9 E6 ]6 r8 K: d
  40.     mask[0] = Selection::MaskTriple(UF_point_type, 0, 0);
    " B! K1 d2 h7 I6 r0 T/ f$ A0 R
  41.     std::vector<NXObject *> objects;
    : i% C) W; m! B% B2 T/ u
  42. 0 l' k. T$ Z/ X$ H/ R+ Z7 b
  43.     sm->SelectObjects("Select Points", prompt,
    4 Y# ^+ K+ \$ E1 Y" r( I
  44.         Selection::SelectionScopeAnyInAssembly,
    ! d6 y7 X$ m4 d
  45.         Selection::SelectionActionClearAndEnableSpecific,
    . ]" b) A/ [7 c! U" I
  46.         false, false, mask, objects);
    5 N! Z* N5 s( \+ }; f
  47. # p) I: ~- i  @! n# c
  48.     vector<Point *>selPoints(objects.size());8 E3 m0 c: m! D8 |
  49.     for (unsigned int ii = 0; ii < objects.size(); ii++)% |8 J& p8 Q6 k6 Z( I" k. T
  50.         selPoints[ii] = dynamic_cast<Point *>(objects[ii]);' d- g4 i4 D( B4 v: R7 X
  51. 8 g0 S& I+ r* c
  52.     return selPoints;
    , X& ]2 R( }% j! [* ^3 {: X
  53. }
    5 C+ B2 P/ {: @- J7 K, B

  54. % _, l# p6 d; Y
  55. static Spline *createStudioSplineThruPoints(vector<Point *> thePoints)
    ; ~* E$ }" J7 n
  56. {2 i( H- w5 E. y4 q5 `' B" u
  57.     Session *theSession = Session::GetSession();
    + Y7 v/ H$ A$ v: M6 @$ _4 s5 Z
  58.     Part *workPart(theSession->Parts()->Work());
    0 P0 N. [& N- z7 W! f2 @6 n
  59. ( i+ r- W# p5 X# n9 g5 N/ J
  60.     Session::UndoMarkId markId1;
    + X/ I9 [) t7 O* u9 U' M
  61.     markId1 = theSession->SetUndoMark(Session::MarkVisibilityVisible,
    / H0 j6 M: Q% A% o, _. i$ s
  62.         "Studio Spline Thru Points");1 W2 E6 O5 ?6 [- S: k
  63. - [! H( \7 ~  ~+ I: ~
  64.     Features::StudioSpline *nullFeatures_StudioSpline(NULL);
    4 X. ?2 J+ f% x5 y$ m
  65.   g5 {" v* N) m* H- K. U( f
  66.     Features::StudioSplineBuilder *studioSplineBuilder1;
    / e+ o( ^6 L. X) I
  67.     studioSplineBuilder1 = workPart->Features()->: u' |. s+ b7 r7 r
  68.         CreateStudioSplineBuilder(nullFeatures_StudioSpline);
    % S/ }( s, {& J) M: Z: Q# P2 D
  69.     studioSplineBuilder1->SetAssociative(true);
    % N% V* _7 H! Y  ~2 s
  70.     studioSplineBuilder1->" S1 V) k7 E# |2 O+ q
  71.         SetInputCurveOption(Features::StudioSplineBuilder::CurveOptionRetain);
    2 M' X1 z- J% L
  72.     studioSplineBuilder1->
    9 x9 n* i9 Y8 W% l: D5 c8 d7 x- G
  73.         SetSplineMethod(Features::StudioSplineBuilder::MethodThroUGhPoints);
    / p- C9 s9 b( h# b; F
  74.     studioSplineBuilder1->SetDegree((int)thePoints.size() - 1);5 ]& t3 Z9 N& B  k& _9 @
  75.     studioSplineBuilder1->SetPeriodic(false);+ F; Q/ X9 c& h: B( W+ W
  76.     studioSplineBuilder1->
    9 T( Z3 m: ^% y- w; y
  77.         SetMatchKnots(Features::StudioSplineBuilder::MatchKnotsTypeNone);) [5 b$ o1 j- Z$ M
  78.     std::vector<double> knots1(0);4 P; h8 a' M6 u; O
  79.     studioSplineBuilder1->SetKnots(knots1);8 R6 n$ B# C5 h7 V4 z" a: h' ^' G
  80.     std::vector<double> parameters1(0);& F+ U, I% K0 G2 d
  81.     studioSplineBuilder1->SetParameters(parameters1);
    , }0 {& n; v, \( k. q1 V# J) N
  82.     Direction *nullDirection(NULL);
    ; u4 N( ^. F) I1 @' R7 h0 Y, k
  83.     Scalar *nullScalar(NULL);
    ' D2 L. \: ^6 {8 {& [
  84.     Offset *nullOffset(NULL);
    ; |0 y+ m4 w  ?5 A2 ?) j

  85. 9 u2 q" X/ T5 B6 `7 v8 G' Y- i
  86.     std::vector<Features::GeometricConstraintData *>( J7 P  y6 z, G9 o8 D
  87.         geometricConstraintData(thePoints.size());
    / T  h* s2 i* h. n
  88. & q* ^. O5 r# Q1 V
  89.     for (unsigned int ii = 0; ii < thePoints.size(); ii++)
    # H; j7 v3 p- X$ b/ s( K
  90.     {5 ^. l% f7 |5 _( k% l  m8 w
  91.         geometricConstraintData[ii] = studioSplineBuilder1->
    ) D4 C' |7 `$ ?( n
  92.             ConstraintManager()->CreateGeometricConstraintData();2 {. m+ |% o$ i7 o# B6 l& H
  93.         geometricConstraintData[ii]->SetPoint(thePoints[ii]);) W/ H, @% q; e7 |5 K7 U, n
  94.         geometricConstraintData[ii]->SetAutomaticConstraintDirection(
    * C' Q$ Q& ~+ F' D; A; l9 r
  95.             Features::GeometricConstraintData::ParameterDirectionIso);8 @1 H6 n2 K. [' N, A9 H
  96.         geometricConstraintData[ii]->SetAutomaticConstraintType(
    , d# V* h0 B; |. S# k& k, @
  97.             Features::GeometricConstraintData::AutoConstraintTypeNone);3 c. r5 d; ?6 N  m! m/ y! M
  98.         geometricConstraintData[ii]->SetTangentDirection(nullDirection);
    + O" p" `; A2 C  o5 v
  99.         geometricConstraintData[ii]->SetTangentMagnitude(nullScalar);
    * K) g& b& j2 W( I
  100.         geometricConstraintData[ii]->SetCurvature(nullOffset);9 V. O4 J9 ]/ C6 g' s1 T
  101.         geometricConstraintData[ii]->SetCurvatureDerivative(nullOffset);
    : J) f* j9 k5 l. h
  102.         geometricConstraintData[ii]->SetHasSymmetricModelingConstraint(false);% P8 g* k" f" a2 R' T" M
  103.     }- o; [( t" H2 p) C( N3 y, x4 p
  104.   @. J( r) q3 w" P  Z& S
  105.     studioSplineBuilder1->ConstraintManager()->SetContents(
    ' j0 {: j. P7 ~/ k3 f. o9 ^
  106.         geometricConstraintData);3 m" ^: I& h  z% r" R7 Z1 o4 c8 F
  107. 3 l( ]  w! {/ ?
  108.     Features::Feature *feature1 = studioSplineBuilder1->CommitFeature();; _3 J* x  d: z: w8 Q
  109.     Spline *theSpline = studioSplineBuilder1-><em>Curve</em>();
    ! O# o. H5 e- [. x) a' w

  110. * a6 ^, [1 d6 t: H
  111.     studioSplineBuilder1->Destroy();* o1 T8 |1 p- a" W  F( l. A6 Q
  112. ' @5 M: u0 W8 |7 S
  113.     return theSpline;- I9 I" h( r  L, Z) t; t+ P
  114. }
    : E7 d0 O# q3 b+ A# ?0 e
  115. 6 i+ E. }! V9 v  c
  116. extern "<em>C</em>" DllExport void ufusr(char *param, int *retcod, int param_len)
    - r9 N# ^7 e7 u4 @. d3 e1 a) O- o
  117. {% s4 h  ^8 z5 i) V# g) F2 z
  118.     std::vector<Point *>thePoints = selectPoints("Studio Spline Thru Points");  [1 Y4 L5 b; L) g
  119.     if (!thePoints.size()) return;( j  s5 {0 z! X  ~& J

  120. + [$ c( Z' }6 d7 v; i
  121.     Spline *theSpline = createStudioSplineThruPoints(thePoints);7 E6 M  Z* @) V  X! U; v

  122. 8 q" A. x9 S* `& R. R1 ]
  123.     if (theSpline); |6 P$ @/ v2 b- k' m' e8 T
  124.     {
    , o0 c1 V% @  z1 p. \8 O7 ^
  125.         theSpline->Highlight();6 L8 V6 u0 i7 a! s% o3 D/ A+ w" [3 t
  126.         uc1601("Studio Spline Created Thru Points", TRUE);2 q: }, z. ^7 y9 X# |2 t
  127.         theSpline->Unhighlight();
    & [) m+ n6 Z  e' ~
  128.     }" [2 G% v. n1 K, e, a3 {
  129. }
    + [0 d/ Y4 H* X! s9 y. T
  130. <p> </p>
复制代码
, M. f2 f; [$ F# B$ P
该会员没有填写今日想说内容.
回复

使用道具 举报

发表回复

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

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

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

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

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

    我知道了