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-10-30 14:28:35 3752 0

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

admin 楼主

2013-10-30 14:28:35

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

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

x
NX二次开发源码: 通过点创建样条曲线+ o; f7 V' r. M+ K8 c4 l* |$ p
  1. #include <uf_defs.h>/ k" w4 T* }) i; P7 R$ H0 n9 |- G! a
  2. #include <uf.h>" D/ M8 _, j9 I) ~$ L4 g
  3. #include <uf_modl.h>" V! K/ J! [6 y! J
  4. #include <uf_object_types.h>
      D' ?, m; ~& O. V3 a# \
  5. #include <uf_ui.h>
    $ C) M* u! l# r6 e
  6. #include <uf_modl.h>. ]3 K7 R) f% {/ y
  7. #include <NXOpen/NXException.hxx>
      Z* h# O# Z& @5 D3 y
  8. #include <NXOpen/Session.hxx>, [: U2 a! j+ n
  9. #include <NXOpen/Selection.hxx>
    0 K/ {9 l* t' O& P# h7 A" \
  10. #include <NXOpen/Builder.hxx>% d. z/ a- n* |0 S) J! U/ t
  11. #include <NXOpen/Features_Feature.hxx>* Q1 ~$ Q; _  J; q/ y' z
  12. #include <NXOpen/Features_FeatureBuilder.hxx>
    4 v7 ]$ a% \; R2 e( F$ f3 C) a
  13. #include <NXOpen/Features_FeatureCollection.hxx>+ s4 C+ s& ?- s  }
  14. #include <NXOpen/Features_GeometricConstraintData.hxx>
    + ]+ v, Q- |! b1 g9 e# E$ P
  15. #include <NXOpen/Features_GeometricConstraintDataManager.hxx># m6 q2 A! B9 w+ L
  16. #include <NXOpen/Features_StudioSplineBuilder.hxx>
    1 b2 W  o) s, h
  17. #include <NXOpen/Part.hxx>! Q/ G2 u% p: Q; g8 T  @+ x* p) x
  18. #include <NXOpen/ParTCollection.hxx>/ a; ?; h- K, M) _
  19. #include <NXOpen/Point.hxx>9 Q! S. c4 \9 ~2 \6 x$ D% P$ _
  20. #include <NXOpen/PointCollection.hxx>
    / C0 t" U3 @8 x& N- c: m" E( f
  21. #include <NXOpen/NXString.hxx>
    9 x7 B7 ^; \. Z: ~3 C: w/ Y% Y7 [
  22. #include <NXOpen/UI.hxx>% n) |! z, s# ]
  23. #include <NXOpen/Spline.hxx>; l& \# D$ M9 }+ Z& J
  24. #include <NXOpen/NXObjectManager.hxx>) O, q( L4 ?) I, r8 }
  25. 7 P1 N' H( J; i' i# ]$ r5 i
  26. using namespace NXOpen;
    ( x5 P6 r# V  S8 ]8 d% V' E. ]$ Q7 Y
  27. using namespace std;$ _, k: T, D( v3 C
  28. ' y. f4 |& g$ N; g$ E9 ], T
  29. extern "C" DllExport int ufusr_ask_unload()
    4 A. d' I% }6 s+ |# [+ q2 j! N
  30. {: i3 d9 q) X% X7 [8 `: w% x
  31.     return (int)Session::LibraryUnloadOptionImmediately;
    , g9 k) P' C; Z- z! R9 `$ K  r
  32. }
    ' [5 V1 A7 v9 o2 B% N: R( d
  33. & f0 `0 `: T8 j. i0 ^, |: I
  34. static vector<Point *> selectPoints(NXString prompt)
    ; j( a  L' }) B  I) T! E
  35. {; C" ^1 ~7 T3 _  |
  36.     UI *ui = UI::GetUI();8 r+ L" O+ {$ v3 N- b0 U& t
  37.     Selection *sm = ui->SelectionManager();4 `4 I5 g4 J$ R( m7 w) l8 E+ g- N
  38.     std::vector<Selection::MaskTriple> mask(1);
    ! z  h' r8 A& P/ @) I+ |: f& R- k! i
  39.     mask[0] = Selection::MaskTriple(UF_point_type, 0, 0);
    ; z$ K: i( u& h5 H& b
  40.     std::vector<NXObject *> objects;
    ) t, i; a2 N1 f! W0 V

  41.   j3 c6 s$ t5 p2 z! _- E! ^# S
  42.     sm->SelectObjects("Select Points", prompt,1 F# Z  @9 |2 s5 X& o
  43.         Selection::SelectionScopeAnyInAssembly,  D, @; k' D# i/ I3 s* y
  44.         Selection::SelectionActionClearAndEnableSpecific,5 ?' @9 K; }5 ^
  45.         false, false, mask, objects);
    7 R( U0 `: X& E- _) A' F

  46. 9 l$ A/ [1 f7 [$ K7 D
  47.     vector<Point *>selPoints(objects.size());
    ' m( x: o7 H0 y4 \% q
  48.     for (unsigned int ii = 0; ii < objects.size(); ii++)
    7 [  ^3 u4 D$ D6 b6 G# P0 z
  49.         selPoints[ii] = dynamic_cast<Point *>(objects[ii]);+ y7 R, K" c% T
  50. " m/ q$ V, a' I) ^- {
  51.     return selPoints;
    # l5 P( k4 l6 T+ q, Y
  52. }' Q- R4 U5 x9 ], e  m! L

  53. " \8 a- Q7 u# x, D( B
  54. static Spline *createStudioSplineThruPoints(vector<Point *> thePoints)6 v3 t4 O' L1 o$ D* `: }# N) u1 Q, c
  55. {4 \  z$ G- {! B
  56.     Session *theSession = Session::GetSession();
    1 b4 h1 ]; _2 }9 L% D7 v
  57.     Part *workPart(theSession->Parts()->Work());8 c7 J( w3 o( s
  58. 4 l4 O/ d0 D+ I9 h
  59.     Session::UndoMarkId markId1;4 ^+ A4 w. e4 N; y( l
  60.     markId1 = theSession->SetUndoMark(Session::MarkVisibilityVisible,/ w7 _2 g( e8 f1 A1 F% P
  61.         "Studio Spline Thru Points");. n8 i6 G* q! T# R$ v( R% `

  62. * p8 c# p7 O* N; e  S; B
  63.     Features::StudioSpline *nullFeatures_StudioSpline(NULL);7 D" Y; g+ I3 G8 [# D$ m
  64. ! F( c5 i" {5 x" b
  65.     Features::StudioSplineBuilder *studioSplineBuilder1;
    ; p& Q( u% ^6 g4 w4 h, I
  66.     studioSplineBuilder1 = workPart->Features()->, A/ n- `6 X  g; i( }1 c
  67.         CreateStudioSplineBuilder(nullFeatures_StudioSpline);) G. Q' V( T% R# Z
  68.     studioSplineBuilder1->SetAssociative(true);
    3 O+ t5 i1 J) m3 B' p. J6 ^
  69.     studioSplineBuilder1->  x# x  J  ?! j/ G( }3 j6 e
  70.         SetInputCurveOption(Features::StudioSplineBuilder::CurveOptionRetain);6 |. j& X) R7 W! V; X2 a- @; M
  71.     studioSplineBuilder1->: t/ A; Y; ^/ t
  72.         SetSplineMethod(Features::StudioSplineBuilder::MethodThroUGhPoints);
    0 R( B+ U$ _2 }
  73.     studioSplineBuilder1->SetDegree((int)thePoints.size() - 1);
    . m( e9 M/ I& ?( D4 }" N
  74.     studioSplineBuilder1->SetPeriodic(false);
    % Z6 Y: @0 F0 b; n
  75.     studioSplineBuilder1->+ I, h2 H' k$ r+ {: n- T% _
  76.         SetMatchKnots(Features::StudioSplineBuilder::MatchKnotsTypeNone);/ ~, a* }5 T, P& y5 y. B+ t$ a
  77.     std::vector<double> knots1(0);
    * b* J4 J: e, k0 \! A
  78.     studioSplineBuilder1->SetKnots(knots1);
    & q; x% {, P, C( u) H. \  W$ [$ r, R
  79.     std::vector<double> parameters1(0);
    # [9 E; d& B. o3 G5 `
  80.     studioSplineBuilder1->SetParameters(parameters1);6 ^" h* P5 y2 k
  81.     Direction *nullDirection(NULL);- g9 k5 k" N) F  j  z5 {6 k+ [. T  T
  82.     Scalar *nullScalar(NULL);
    0 Y, y* v' h7 \" E
  83.     Offset *nullOffset(NULL);
    % B& O; A- l7 `) p6 [

  84. 7 J4 `( K; [6 I6 m
  85.     std::vector<Features::GeometricConstraintData *>
    2 N4 n0 j% G5 B, L
  86.         geometricConstraintData(thePoints.size());% N6 L5 m) W/ \
  87. 8 |: U( c9 d1 L8 w
  88.     for (unsigned int ii = 0; ii < thePoints.size(); ii++)
    * ]0 J' k4 E& Y; G% L6 a
  89.     {' n2 |9 h- ^5 o5 z& z
  90.         geometricConstraintData[ii] = studioSplineBuilder1->
    - L( J3 w4 D( w# `8 z) m
  91.             ConstraintManager()->CreateGeometricConstraintData();; ~! b/ s/ l" R' k7 b) m# ]
  92.         geometricConstraintData[ii]->SetPoint(thePoints[ii]);
    ' M' C. D5 ^: A! U9 s% A7 i
  93.         geometricConstraintData[ii]->SetAutomaticConstraintDirection(
    " g9 L" U5 i  C( q
  94.             Features::GeometricConstraintData::ParameterDirectionIso);
    . P6 [3 i: y  f4 i4 E3 }
  95.         geometricConstraintData[ii]->SetAutomaticConstraintType(
    : B9 s* M! ?$ v" ]/ T
  96.             Features::GeometricConstraintData::AutoConstraintTypeNone);
    4 d6 F. R3 p! n; ~7 |5 T+ l( [
  97.         geometricConstraintData[ii]->SetTangentDirection(nullDirection);, v+ s5 }& f% u! ~) |' @
  98.         geometricConstraintData[ii]->SetTangentMagnitude(nullScalar);. u. L: {. q" E- ^9 X; D
  99.         geometricConstraintData[ii]->SetCurvature(nullOffset);9 D) G' T0 v% u" P8 \
  100.         geometricConstraintData[ii]->SetCurvatureDerivative(nullOffset);1 r- o* H2 j4 i6 p  F
  101.         geometricConstraintData[ii]->SetHasSymmetricModelingConstraint(false);
    ; I& |- r  M4 R# o* ~" G
  102.     }+ h' F* [, d) Q  _' ^  h% M
  103. . Y6 ?' d$ ~( U: F: e& y
  104.     studioSplineBuilder1->ConstraintManager()->SetContents(0 Y$ `0 V# Q1 u( p  P' |
  105.         geometricConstraintData);# J/ Q  J3 E9 U! x* K1 _0 V
  106.   C% B/ r2 d, W" E2 b+ r
  107.     Features::Feature *feature1 = studioSplineBuilder1->CommitFeature();
    : p: ]. M/ W: f- D$ N2 T. |
  108.     Spline *theSpline = studioSplineBuilder1->Curve();
    - t  R6 {' [" j* n
  109. 3 F5 u$ t: w1 b% q6 i
  110.     studioSplineBuilder1->Destroy();
    , c. P8 J/ [! D+ i) d8 a. M8 [* G3 e
  111. / G: }7 T% w& j$ @# a
  112.     return theSpline;: ~1 @, J# _' b2 @' B4 Z3 x
  113. }0 N$ d6 t/ w4 E7 w4 a+ ?4 C
  114. 4 D4 Q. Q  k) ^+ v
  115. extern "C" DllExport void ufusr(char *param, int *retcod, int param_len)6 h3 [& z" {* U
  116. {
    & `4 F1 A5 |+ v7 Z) ?! V. t5 \! F
  117.     std::vector<Point *>thePoints = selectPoints("Studio Spline Thru Points");
    1 }% j# G3 R8 j2 ?: T, @: {
  118.     if (!thePoints.size()) return;. Q) k/ C) [8 N: B$ S( y
  119. . Q1 T1 A6 K/ [# C' g4 _
  120.     Spline *theSpline = createStudioSplineThruPoints(thePoints);% \0 b2 j6 Z2 m- ?; s% V8 k# w' N

  121. 6 T+ Y% z1 ^% C" T9 y
  122.     if (theSpline)
    0 a0 {' X9 ]6 Z
  123.     {
    ) r3 Z2 y0 {9 d$ T6 Q* Z+ D% `
  124.         theSpline->Highlight();
    ' o: V+ H* x4 y) G
  125.         uc1601("Studio Spline Created Thru Points", TRUE);
    2 y! y2 v, \; J* r% ^
  126.         theSpline->Unhighlight();
    0 Z, K' E8 e7 K! P( }" a' U
  127.     }1 P+ D4 f  L* X
  128. }
    $ d9 L, T5 {' B( x& M$ f
复制代码
+ b* q' j8 L8 x5 W7 l  i) i) W5 o, D

. b( {8 M# n. A9 H2 T0 w
1 }+ N7 Z  T# K+ |# |
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复

使用道具 举报

发表回复

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

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

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

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

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

    我知道了