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

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

admin 楼主

2013-10-30 14:28:35

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

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

x
NX二次开发源码: 通过点创建样条曲线
! |2 N! C$ S, K, T: u( `/ f% ?' i
  1. #include <uf_defs.h>1 H1 a( ]2 o$ I! o
  2. #include <uf.h>
    & {0 u: w+ W! ~$ z& G1 j
  3. #include <uf_modl.h>5 u+ L; H, ~5 G- _6 M! o
  4. #include <uf_object_types.h>1 ?/ E+ {, o- i- d$ s- s  U
  5. #include <uf_ui.h>5 ~" \) p: s( e% L
  6. #include <uf_modl.h>- R( M5 Q! i, {3 j
  7. #include <NXOpen/NXException.hxx>
    " J. p) \2 P9 P8 m* D2 P
  8. #include <NXOpen/Session.hxx>4 V; B2 ]3 Z" _* A" H
  9. #include <NXOpen/Selection.hxx>
    7 y. H/ f: q: s
  10. #include <NXOpen/Builder.hxx>2 j4 {( Y: K  z; A( Y* u& K' c7 V
  11. #include <NXOpen/Features_Feature.hxx>
    6 N2 S" k1 _% c' V4 M0 y
  12. #include <NXOpen/Features_FeatureBuilder.hxx>; b$ l3 J0 {4 w& T/ k) p6 o# C
  13. #include <NXOpen/Features_FeatureCollection.hxx>) _. i$ i1 k$ o* s1 y7 c- x5 R
  14. #include <NXOpen/Features_GeometricConstraintData.hxx>: w; q" W0 {: f# X8 k4 P
  15. #include <NXOpen/Features_GeometricConstraintDataManager.hxx>7 Y. `9 R& q0 b. L8 E! T' a8 ?
  16. #include <NXOpen/Features_StudioSplineBuilder.hxx>5 @2 W( X" N. }4 Z3 R
  17. #include <NXOpen/Part.hxx>3 h6 ]0 u8 |' w
  18. #include <NXOpen/ParTCollection.hxx>
    ; d/ ?/ N; a$ E; _: \+ {9 y
  19. #include <NXOpen/Point.hxx>
    ; u4 f' R3 s% s0 f( l
  20. #include <NXOpen/PointCollection.hxx>; c4 M- Y. P$ V' {1 [  _$ G
  21. #include <NXOpen/NXString.hxx>, @' a3 D: o8 E
  22. #include <NXOpen/UI.hxx>
    5 ^) ~! g" h# T7 u: C& Z
  23. #include <NXOpen/Spline.hxx>
    0 [) }* x$ w& P; y
  24. #include <NXOpen/NXObjectManager.hxx>
    ) c+ R) J: f8 [! B6 p
  25. / {1 U% z; `% A- L' Q
  26. using namespace NXOpen;
    ( y* [; P5 A9 s) \/ ^) O
  27. using namespace std;4 v, k" M1 p' k; f: k
  28. 7 y* ]5 w. I; [9 q6 T2 N
  29. extern "C" DllExport int ufusr_ask_unload()
    ( _+ H* V! r+ X) h  T, m
  30. {
    # W" y" u8 b. M  A1 Z5 @1 c; T5 e5 x
  31.     return (int)Session::LibraryUnloadOptionImmediately;! g& |* @- z$ o4 ]8 Z
  32. }
    0 i. f. i# o9 I  c: V9 |' A
  33. % u0 f4 w; e7 ^6 k) I, d) X
  34. static vector<Point *> selectPoints(NXString prompt)
    / i5 w" }6 e% }
  35. {
    * _( b& k- N" ~  m4 f8 [) \+ e
  36.     UI *ui = UI::GetUI();3 R( _. P6 B) X( Q2 ?: c9 B* @
  37.     Selection *sm = ui->SelectionManager();; e* A! u9 N8 z
  38.     std::vector<Selection::MaskTriple> mask(1);1 N* w- d8 d0 M  i3 J% ]
  39.     mask[0] = Selection::MaskTriple(UF_point_type, 0, 0);. h( O1 @' A' z
  40.     std::vector<NXObject *> objects;% \6 W9 {" ^5 ]2 r! Q9 d, E' v
  41. - ~) e: s% ~1 A" Y
  42.     sm->SelectObjects("Select Points", prompt,/ C  T& C, s, y4 N6 Y
  43.         Selection::SelectionScopeAnyInAssembly,
    7 W6 [& i" y) e1 U/ p2 j2 _/ S" y6 N! X
  44.         Selection::SelectionActionClearAndEnableSpecific,
    7 G. s" R/ E1 m4 k) d& k
  45.         false, false, mask, objects);* l" q! a% u$ V

  46. # y4 n# E; z8 s" z4 N  N1 m1 g- ]3 {
  47.     vector<Point *>selPoints(objects.size());; ]% O* B, i4 M; j  {4 r
  48.     for (unsigned int ii = 0; ii < objects.size(); ii++)
    ! z9 `9 x# o8 l- `( r6 s. ?
  49.         selPoints[ii] = dynamic_cast<Point *>(objects[ii]);1 v# r6 x0 }5 Z: V- o7 }
  50. & u8 w; M; }& {2 ^
  51.     return selPoints;! }" w- f" U3 B! O/ p
  52. }
    2 T8 B7 d9 O! K2 ?3 h7 J5 E

  53. 8 J) M3 ~7 ]2 a
  54. static Spline *createStudioSplineThruPoints(vector<Point *> thePoints)! c# X: }  c/ ~# f1 C9 }
  55. {0 N& F! V7 b5 H! z8 Y
  56.     Session *theSession = Session::GetSession();
    , K+ }5 A$ ~9 v/ R' `. F
  57.     Part *workPart(theSession->Parts()->Work());- P$ d6 g* \: z; g* T! T$ u
  58. . D7 x& a, z* N/ N
  59.     Session::UndoMarkId markId1;
    , l" r8 R, Q0 ]6 ?
  60.     markId1 = theSession->SetUndoMark(Session::MarkVisibilityVisible,$ U' ?8 c8 G0 C* Z
  61.         "Studio Spline Thru Points");
    9 ^6 u" |" [4 Q( e. V- g. J
  62. , E0 D; Q/ s# z5 D$ X; ~  p* p
  63.     Features::StudioSpline *nullFeatures_StudioSpline(NULL);( p0 ^$ T0 ^0 ]( X& Z

  64. , P  I( \  G& }* \# a
  65.     Features::StudioSplineBuilder *studioSplineBuilder1;! b1 g) C- @7 B" K
  66.     studioSplineBuilder1 = workPart->Features()->
    7 D: N3 n6 H3 C7 I, f2 b3 Y+ D
  67.         CreateStudioSplineBuilder(nullFeatures_StudioSpline);
    $ X& E. h) E$ l% Z8 N) |8 m4 i# N
  68.     studioSplineBuilder1->SetAssociative(true);
    * k' z0 q9 [0 F. T
  69.     studioSplineBuilder1->) [' X) N" d" p; N0 y
  70.         SetInputCurveOption(Features::StudioSplineBuilder::CurveOptionRetain);
    / |& s; Z  j' g  M
  71.     studioSplineBuilder1->
    7 c; _5 G( @$ z- c, W
  72.         SetSplineMethod(Features::StudioSplineBuilder::MethodThroUGhPoints);8 R5 c3 h3 N; ^! G) J! I
  73.     studioSplineBuilder1->SetDegree((int)thePoints.size() - 1);
    + R+ A/ V7 }8 c" S5 i5 c0 K- B0 ]
  74.     studioSplineBuilder1->SetPeriodic(false);
    1 r; w; n5 d: L$ K9 g0 C
  75.     studioSplineBuilder1->7 ]8 A1 W- L6 T9 R
  76.         SetMatchKnots(Features::StudioSplineBuilder::MatchKnotsTypeNone);
    % q. v4 @6 Q5 ?( ?2 {5 r
  77.     std::vector<double> knots1(0);
    - ?4 S% U9 m- u
  78.     studioSplineBuilder1->SetKnots(knots1);% g' Q$ \2 R0 u; m7 P, D
  79.     std::vector<double> parameters1(0);9 A$ U) G4 V# O6 T! V& U
  80.     studioSplineBuilder1->SetParameters(parameters1);
    ( R+ r3 h& j3 x1 E+ g
  81.     Direction *nullDirection(NULL);
    # t, d" k3 j, v$ @
  82.     Scalar *nullScalar(NULL);
    % |6 t0 \8 A3 P5 X7 N
  83.     Offset *nullOffset(NULL);( r# n; S5 R3 `( z, d  }- `

  84. * G% w: A, T8 p4 g- K
  85.     std::vector<Features::GeometricConstraintData *>
    " I( E* K, ?+ p% `
  86.         geometricConstraintData(thePoints.size());% R7 h! ~, a9 i" B& O
  87. $ y+ D) N6 ]9 d6 v% d9 H" ]7 \6 M7 k
  88.     for (unsigned int ii = 0; ii < thePoints.size(); ii++)8 K, U* U& L$ o, p0 V  A
  89.     {$ Q6 r( ], w6 U* g( x
  90.         geometricConstraintData[ii] = studioSplineBuilder1->) |/ W! _; A. t; a- k6 g
  91.             ConstraintManager()->CreateGeometricConstraintData();& v: @" P4 w& P& @! D
  92.         geometricConstraintData[ii]->SetPoint(thePoints[ii]);
    5 o  p$ l8 x! `( S/ Q7 F- s
  93.         geometricConstraintData[ii]->SetAutomaticConstraintDirection(2 I# O( l8 s; Y! k1 p2 m1 g
  94.             Features::GeometricConstraintData::ParameterDirectionIso);* t* h+ F/ Q+ |; d- v5 f
  95.         geometricConstraintData[ii]->SetAutomaticConstraintType(
      o0 f. Z! w5 R, l4 {
  96.             Features::GeometricConstraintData::AutoConstraintTypeNone);8 t/ l" C; G2 M+ c' n
  97.         geometricConstraintData[ii]->SetTangentDirection(nullDirection);
    8 q! O) P5 O: t" |( o
  98.         geometricConstraintData[ii]->SetTangentMagnitude(nullScalar);$ n' b4 i/ j" @6 K" ~: W. t! |! Y
  99.         geometricConstraintData[ii]->SetCurvature(nullOffset);
    6 K/ f1 }& W$ b4 s6 \1 u/ h. r
  100.         geometricConstraintData[ii]->SetCurvatureDerivative(nullOffset);
    " e* v+ e' |. ^1 v: T- h
  101.         geometricConstraintData[ii]->SetHasSymmetricModelingConstraint(false);: t* v5 U1 g; a/ M3 v3 D2 N
  102.     }, ?/ c' ?3 R- Z4 I1 I" T  Q/ g

  103. & {* H- N0 v4 x& @; A0 v% x
  104.     studioSplineBuilder1->ConstraintManager()->SetContents(
    6 U3 r' B. ~( e6 `
  105.         geometricConstraintData);
    * S# W: h% w0 ^' t; v8 s' T
  106. ' W; ?8 W) \1 M) x
  107.     Features::Feature *feature1 = studioSplineBuilder1->CommitFeature();
    5 ]# U' x- N6 c) E, Y3 h9 v& Q( C8 R
  108.     Spline *theSpline = studioSplineBuilder1->Curve();
      h; w' J" F( [

  109. 0 i- \. }0 m8 i5 H! }
  110.     studioSplineBuilder1->Destroy();
    1 @7 |+ D& E; [" j

  111. 4 h( Q2 R& t$ z# o% n
  112.     return theSpline;  ?& X( l+ C7 g: O
  113. }- [+ n( R) [4 z  m' {

  114. 8 ]+ }8 A) u* B9 E( i3 ]
  115. extern "C" DllExport void ufusr(char *param, int *retcod, int param_len)
    4 @! P- \! e4 [. s
  116. {
    ' F% X, D% ]6 Q$ S
  117.     std::vector<Point *>thePoints = selectPoints("Studio Spline Thru Points");' L7 e( @  `9 I3 g" ?
  118.     if (!thePoints.size()) return;6 e" ?6 A) x, @* C  ~, ]6 Y

  119.   W2 K' m5 Z9 _5 F6 B
  120.     Spline *theSpline = createStudioSplineThruPoints(thePoints);
    * m0 X* Q! ~1 Z
  121. ) U- V+ i, s8 H+ F5 Q
  122.     if (theSpline)
    * {; ^4 I) B! J+ r: d+ z; D8 P
  123.     {- z5 ]& t& d8 S! P; t
  124.         theSpline->Highlight();
    : p% @; B9 |7 x# m
  125.         uc1601("Studio Spline Created Thru Points", TRUE);7 l# _" o7 t2 b6 n& f" P" U; h7 O
  126.         theSpline->Unhighlight();2 R. U; `" n/ ]# q# {) O6 ~
  127.     }
    8 L4 @( F& w, U7 ^+ J& F
  128. }; u$ r+ Q! R4 C& Y# L! y
复制代码

' G( l+ H) E/ ~0 p7 O9 W9 N+ T! F. j4 Q3 }

: ~4 ?. H& b5 [) v0 E' t, O0 t
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了