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-11-6 18:54:58 6270 0

admin 发表于 2013-11-6 18:54:58 |阅读模式

admin 楼主

2013-11-6 18:54:58

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

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

x
通过这个代码,可以获取选择面的相邻面的信息( N' k' l5 m  h7 A* P4 O
NX open C++中使用了 选择对象 selectobject 函数,通过面获取边数据,通过边获取面,从而得到信息!+ X7 i7 i3 z( V7 d! S' [, K4 |
' B3 f- O1 k2 b6 i
  1. #include <uf.h>
    1 [* U8 u/ n" {7 A' B  ]
  2. #include <uf_ui.h>
      @& K/ i1 k: }) N; d, w+ e
  3. #include <uf_object_types.h>1 o+ H, A  b6 a* q' h

  4. . ~) T# Z5 D6 M% y4 W! ]' M
  5. #include <NXOpen/Edge.hxx>6 B8 u) H1 ^3 y
  6. #include <NXOpen/Face.hxx>
    + r! f$ [* L2 g
  7. ) J7 D9 e" G5 W% T/ C3 }
  8. #include <NXOpen/ListingWindow.hxx>' ?, w1 F. m' u# p* c6 C
  9. #include <NXOpen/NXException.hxx>
      A3 B: t4 f9 J# ]4 s' Q/ i
  10. #include <NXOpen/NXMessageBox.hxx>6 p# r- R0 [1 l0 h8 O: s$ n6 v4 S
  11. #include <NXOpen/NXObject.hxx>5 X( D; ^8 i7 L$ D' L
  12. #include <NXOpen/Part.hxx>9 w9 w% x: Y6 |- [
  13. #include <NXOpen/ParTCollection.hxx>( P7 o9 Z4 o" L8 s
  14. #include <NXOpen/SelectDisplayableObject.hxx>, B" t1 |3 G% w7 ]4 I
  15. #include <NXOpen/SelectDisplayableObjectList.hxx>
    $ v) l9 G" S# Y& d, ~5 K( t
  16. #include <NXOpen/SelectObject.hxx>- {7 ~2 W2 X9 z) j* M
  17. #include <NXOpen/SelectObjectList.hxx>; A7 W- ^, N/ ~7 Q2 S- p
  18. #include <NXOpen/Selection.hxx>
    5 U* t# l5 M; U3 r
  19. #include <NXOpen/Session.hxx>
    & g% S7 }3 {# q/ g' H! }
  20. #include <NXOpen/UI.hxx>
    + q; f: R" Q2 {) q  M6 f6 C% {% Y
  21. #include <NXOpen/View.hxx>5 l$ P& R# j: \4 E( r% W  _6 d
  22. % T5 y- `9 y* X
  23. #include <iostream>
    9 f4 o8 z" ?: Z& g. P" ]: N- H
  24. #include <sstream>1 G: m# Y* o8 f- b1 s! V
  25. #include <list>
    3 K4 U* I& h" \9 Q
  26. / G% a( h- |/ k5 |
  27. using namespace NXOpen;6 }, M7 m. V# h$ v/ N$ n
  28. using namespace NXOpen::Annotations;
    / l/ S" f/ e: d3 g
  29. using namespace std;1 b0 p8 K! S) q: M- q/ H  c

  30. 0 u  \2 n5 ^9 |) f+ W
  31. class Gtac
    5 Q3 Z( M1 F9 M# ?
  32. {
    6 G) ^; r; V+ T" E2 Y, o  d
  33.     // class members
    ( g2 M/ c2 V+ E: j1 @: o* x
  34. public:/ g+ s, l/ r& X& M) V$ a& L
  35.     static Session *theSession;! O8 d0 _2 K7 z  K% q
  36.     static UI *theUI;
    : k& ~2 H, y5 b
  37. % T3 J/ n4 M1 d* u& }  f( i8 W
  38.     Gtac();) O6 J# x! r' M) s: T, l! ^& N
  39.     ~Gtac();0 g: h: W# F; E$ ^/ y% t( x# i
  40. + J4 J6 k6 B+ o
  41.     void do_it();
    " t- Y) `! p% w) D1 Q
  42. 9 C6 T% J  I* x# l. n
  43. private:- F3 Q5 N* ]6 A
  44.     Part *workPart, *displayPart;) o* _: \# q- _
  45.     Selection *sm;0 j" E1 E; T0 M* ^% U8 J
  46.     NXMessageBox *mb;7 @. n: g$ q& G! O7 ?
  47.     ListingWindow *lw;' m8 [. \! r2 [" B, y- M& C
  48. 1 I$ e7 K7 _5 O1 G/ B/ C9 c* E
  49.     Face* select_a_face();% p. ]+ j0 {3 B3 m8 N" p' B

  50. 3 a, T2 t+ d0 H! s
  51. };
    % @, a! m' N. S8 u# S. n

  52. 2 X3 G' i* W5 d& D8 F3 A: h
  53. //------------------------------------------------------------------------------
    4 V* r( `& A" |3 q0 c
  54. // Initialize static variables  }' Z& @* N* a$ o) l
  55. //------------------------------------------------------------------------------
    % c- H; ^4 }1 I3 m1 V& m* u
  56. Session *(Gtac::theSession) = NULL;$ ^2 K: e$ r" P. V: Z* R: `3 ?4 S- r
  57. UI *(Gtac::theUI) = NULL;/ M& M2 T, f7 B8 m3 h) M1 [; L
  58.   c8 \& l; o) B8 \) V
  59. //------------------------------------------------------------------------------
    ; D6 X0 j4 ^" J, M% o5 w, C
  60. // Declaration of global variables
    + t' b; O3 _8 m0 u, o+ ~5 d1 d
  61. //------------------------------------------------------------------------------: R/ V- Z9 L! w3 u2 g
  62. Gtac *theGtac;
    9 ^( ^- J! ~& t$ x  W

  63. 8 @  K/ T8 Z# {3 L1 h
  64. //------------------------------------------------------------------------------
    , B2 V' J! d' _% x# g) p
  65. // Constructor
    ( t; X. r3 t: Y+ g* `
  66. //------------------------------------------------------------------------------
    - x/ K# a2 J' y' P2 F
  67. Gtac::Gtac()% b& `9 ]1 V2 g3 q
  68. {
    0 K7 r' B8 @2 F; [! r) a* }
  69.     // Initialize the NX Open C++ API environment1 c. p5 l7 Q* o
  70.     Gtac::theSession = NXOpen::Session::GetSession();6 A, C, r$ I% m0 }/ {
  71.     Gtac::theUI = UI::GetUI();
    % a5 J1 i6 y; b( P: s

  72. 1 D+ f$ J- I) O' b
  73.     sm = theUI->SelectionManager();
    3 R- }( _& \) Z1 O. J
  74.     mb = theUI->NXMessageBox();2 L5 g- N. z# j( D/ s5 x$ X
  75.     lw = theSession->ListingWindow();: y. ]+ L2 E* q. T7 a4 V% s1 d

  76. # K: c" }3 F( c" v
  77.     workPart = 0;
    , p- z9 Y1 i* K7 m# x9 a' K
  78.     displayPart = 0;( _; I$ |4 r% p5 U8 _+ |
  79. }
    $ W; Y4 M, I& ]
  80. # g+ P+ ]& D' d6 _" w
  81. //------------------------------------------------------------------------------! F$ R+ j& t5 ^
  82. // Destructor
    % ?: A, {6 F8 S# s
  83. //------------------------------------------------------------------------------
    ' |7 t) P$ f! T
  84. Gtac::~Gtac(). Z1 U- ~! h* I: ~5 x- q
  85. {
    # Y7 `2 ^1 m% x/ J) d. A
  86. }
    % O+ H" P6 b: ?, @* M& w* y

  87. * l3 B! M. f2 z
  88. //------------------------------------------------------------------------------2 |% I: i% i4 K
  89. // Selection
    % ~; G8 w0 y* o; V( E
  90. //------------------------------------------------------------------------------. E5 y8 z) G* q' t0 W7 V8 z
  91. Face* Gtac::select_a_face()
    ( y  d: A/ m+ q1 {" w4 ^: }
  92. {' Z  U! v) @, U
  93.     // ask user to select a face1 `  I& O& h/ J6 c5 T# u( i  ^
  94.     UI *ui = UI::GetUI();
    ( l8 w) r  I" e$ ?  g' J" o7 X0 |; z
  95.     Selection *sm = ui->SelectionManager();
    3 G- E* L# w9 G- Z9 Z/ O
  96.     NXMessageBox *mb = ui->NXMessageBox(); // as of NX5
    5 c9 N" u, E3 e7 u

  97. / P" V  X+ R" h0 _% @0 l
  98.     NXString message("Select Face:");6 Y( D) [0 r+ g: T( @. X" k# T2 \
  99.     NXString title("Select Face");3 Z. S+ P. L5 B2 v4 h9 S. e
  100.     Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
    3 f" N( c% p% J
  101.     Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;
    ' }, S. d1 S, u5 A* v
  102.     bool include_features = 0;
    ! g9 S! @. r* H' F2 \
  103.     bool keep_highlighted = 0;
    ; H4 @  m  V3 y; L# i; s3 `( {
  104. 5 f/ w( _, e: J+ B6 Y
  105.     // Define the mask triple(s)! v* ?* D& Q2 i0 k' X( V
  106.     std::vector<Selection::MaskTriple> mask(1);
    # e! _" F! O  N) t4 w4 n; s
  107.     mask[0] = Selection::MaskTriple( UF_solid_type, 0, UF_UI_SEL_FEATURE_ANY_FACE  );) k% l7 s. f7 `$ O( b
  108.     Point3d cursor;
    3 \2 W) x) y- ?$ S) s! ^
  109.     NXObject *object;
    . m* T! l& c4 g+ t% N

  110. & p$ x4 p* u, B1 S+ f& B
  111.     // Select objects using filter defined by mask triples! W; |. D$ g  [; [. o: ]7 L
  112.     Selection::Response res = sm->SelectObject(3 Q2 r7 h3 a$ D
  113.         message, title, scope, action, include_features,/ Y( V" \! c, M6 s
  114.             keep_highlighted, mask, &object, &cursor );6 R9 l5 j+ D7 R

  115. + j0 m3 B0 y/ b0 u
  116.     if( res == Selection::ResponseObjectSelected )
    ' w; @7 d! O  t. s
  117.     {
    $ e& p' [- S8 s* O3 @) I
  118.         Face *aFace;! X- u  |' u& R8 q" H, \2 z1 w1 i# B
  119.         aFace = (Face *)(object);
    ! Z+ ^) z" k( `$ h0 I/ o1 P  M
  120.         return aFace;% L0 k* ~* }" C1 J% X
  121.     }
    : K& b! P$ E5 {4 L2 J
  122. - {, Y/ Z6 X! q2 v) v+ u0 O# L
  123.     return 0;( R- y" W; H/ I( w3 \+ f
  124. }
    7 \! E, Q2 C% X. O8 Z
  125.   j- Y& B2 c8 M: ?' ~
  126. //------------------------------------------------------------------------------
    + Y" S/ A: s. K+ G4 Q9 ^
  127. // start with our job...9 n) D! i8 t& A, n0 b/ K1 U
  128. //------------------------------------------------------------------------------% |; K8 @) u/ B
  129. void Gtac::do_it()
    5 y( |. [0 W4 _$ ]4 @, p6 K
  130. {& K# V* W% R& ?: E  [
  131.     workPart = theSession->Parts()->Work();7 j- V4 R; J- N- z
  132.     Part *displayPart = theSession->Parts()->Display();0 J0 W( G3 M6 K4 T
  133.     stringstream out;
    ( B( v7 c- K9 _6 Q# [' D8 i8 D

  134. : i% R' I5 r! y. [7 T0 Q& }
  135.     Face *theFace = 0;
    / Y, l! ?  w( B: \! ^
  136.     std::list<Face*> myfaces;+ }! ?8 R5 i4 l6 J! R" J$ S- ^
  137.     " H$ A6 t/ [$ D1 H$ _/ s
  138.     while( (theFace=select_a_face()) != 0 )6 `& x; U2 n# H$ h9 b
  139.     {
    ) M" R. X& b5 E! e
  140.         if(! lw->IsOpen() ) lw->Open();
    : F/ }  f) D% G3 K5 A) S- O( T

  141. % u" `2 K& X& F9 _- }# ]7 M% a* B
  142.         out << "Selected Object: " << theFace->Tag() << endl;
    7 i, l* }% w8 _
  143.         lw->WriteLine(out.str().c_str());
    0 g  U2 T! B) @* c7 H. s

  144. " i* V) M5 K+ F6 e
  145.         std::vector<Edge*> edges = theFace->GetEdges();
    3 O# a4 r3 a% q: l9 @) g/ k
  146.         out.str(""); out.clear();
    $ C$ o8 u* f# A# u9 b$ S
  147.         out << " Number of edges: " << edges.size() << endl;: V. [7 d0 J2 S9 w
  148.         lw->WriteLine(out.str().c_str());
    1 Z4 u5 Q& ~9 d$ V* N4 f6 d
  149. 3 f  x, `, ]3 i, U; k
  150.         for( int ii = 0; ii < edges.size(); ii++)
    5 L# n* o' I8 U# ]) b6 N
  151.         {; K! b; u9 ~. W$ I! X5 e8 G# T
  152.             out.str(""); out.clear();
    ; Q( }" c3 N- o1 n" a" T, t/ H
  153.             out << " Edge: " << edges[ii]->Tag() << endl;% i! N4 f8 h+ w$ R' ?8 H3 S# Q- H
  154.             lw->WriteLine(out.str().c_str());
    - C$ y9 J- N7 z; k- x' r' x

  155. # V! [1 v& z( O" Y- T7 N
  156.             std::vector< NXOpen::Face * > adj_faces = edges[ii]->GetFaces();& F, |$ r9 d; H( M0 A) q* z
  157.             out.str(""); out.clear();4 `) g+ h, \; J* T. k
  158.             out << " Number of adjacent faces: " << adj_faces.size() << endl;7 X6 N8 ?! W* X( v' j: E- Q
  159.             lw->WriteLine(out.str().c_str());
    4 F7 w  h$ T! I5 S3 |
  160. / H/ a3 q. F, K! E9 O* N
  161.             for( int jj = 0; jj < adj_faces.size(); jj++)" t( H9 y, ?% o# x+ t3 }
  162.             {- q( R9 M& a  z# y  r
  163.                 out.str(""); out.clear();$ j) t' j! N8 e* n/ \  S
  164.                 out << " Adjacent face: " << adj_faces[jj]->Tag() << endl;
    0 D. I) w1 S2 @& k% c* l; m
  165.                 lw->WriteLine(out.str().c_str());1 l# s6 |" L# Q0 p' Y' u

  166. 4 `# k/ \* b, _8 R+ Y1 P  K5 w
  167.                 myfaces.push_back(adj_faces[jj]);. v+ g' F2 I* ~) Y

  168. 7 q  l+ o. v7 i' A4 q
  169.             } // jj1 ~4 a" U0 E" h. p; J* p- W8 O
  170. ! j1 X* N7 i- n8 ~0 w( F/ _, Q
  171.         } // ii0 o6 _1 C) Y: I( J  i+ e" ~

  172. * ]( [9 a7 r) {: f$ w7 P, O# e
  173.         myfaces.unique();' s8 r, g2 n9 U) U9 L% l
  174.         for (list<Face*>::iterator it=myfaces.begin(); it!=myfaces.end(); ++it)  \; r5 E/ y) @4 U' l
  175.         {
    ! j/ M* a4 N. u+ p
  176.             (*it)->Highlight();$ e1 k" S# D- _8 G! B3 j
  177.         }
    0 k2 s! _, z0 N% W5 Y
  178.         Gtac::theUI->NXMessageBox()->Show("Adjacent Faces", NXOpen::NXMessageBox::DialogTypeInformation, "Confirm");
    % k8 O0 _$ @2 N/ I
  179.         for (list<Face*>::iterator it=myfaces.begin(); it!=myfaces.end(); ++it)" Z* J$ O: ~4 v# s+ ]+ u" R* V
  180.         {! W( A( A; D0 [( M
  181.             (*it)->Unhighlight();
    # |5 ]' ]0 i) w1 i9 ?# g8 h
  182.         }
    : Y4 ]( X- ]6 ^7 |' h. b/ n& q; N
  183.         myfaces.clear();7 u4 g; m* k& z8 f0 V
  184. , F5 `! T& u" I* N( y
  185. % H' o8 m" T5 y
  186.     } // while# q; p0 T5 {8 T4 q7 x* H2 v
  187. }
    , O+ t& c, ^; ?" X( ^: ^! G" e6 w

  188. 0 S; _, ]( \+ O: e4 K  y. r) Q4 Y
  189. //------------------------------------------------------------------------------. n& p7 ?- D: Y1 l" e
  190. // Entry point for our unmanaged internal C++ program
    ' Q0 |  a' T7 [" _7 i  g/ C& Y, p! l
  191. //------------------------------------------------------------------------------
    " T6 S/ Q0 [2 d( a( q% }  Y0 C
  192. extern DllExport void ufusr( char *parm, int *returnCode, int rlen )) {0 b& a7 v2 h* I/ e; j
  193. {1 E& M  k) N2 M
  194.     try; z+ D" }$ c+ x$ U0 J& b, S7 o- T
  195.     {
    9 V' ^" H# g4 `( n! g7 s: ^) |( x
  196.         theGtac = new Gtac();
    % `4 s- T* p, \
  197.         theGtac->do_it();
    $ @1 f' n7 n# o# K0 U
  198.         delete theGtac;0 k% k1 }9 z5 i+ x) B
  199.     }, g+ d, C- k4 X1 _( o" p; ?; L
  200.     catch (const NXOpen::NXException& ex)2 d: r6 h' {, j! S" L
  201.     {0 r7 v' o% r9 M0 @6 U* h0 j6 |+ h0 ~
  202.         // ---- Enter your exception handling code here -----
    ( c! E2 `8 t8 |
  203.         Gtac::theUI->NXMessageBox()->Show("CaUGht Error", NXOpen::NXMessageBox::DialogTypeError, ex.Message());, j8 J9 E5 I$ e4 o$ q* u$ A/ }
  204.     }
    1 u" h  K; b$ C4 @, n
  205. }
    0 F* P5 W6 b' z

  206. 7 S, ~5 j7 [- t4 G. Q; j
  207. % ]1 Z, @  e" J: z3 I, G( l2 e
  208. //------------------------------------------------------------------------------* t2 C2 g3 \9 H& |( H5 N" }
  209. // Unload Handler7 i2 h  O" H  M
  210. //------------------------------------------------------------------------------4 o- [( C& f' A5 k
  211. extern "C" DllExport int ufusr_ask_unload(). Z7 l( }+ e3 Y) N/ q
  212. {, U! u' @8 D2 F7 e9 q) A) u8 _; c6 Q
  213. return (int)NXOpen::Session::LibraryUnloadOptionImmediately;! b- I9 s  ^5 `+ W: |- o
  214. }
    " q7 s. B$ P) _( V

  215. ; d3 v1 ^9 a# v/ m* C
复制代码
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了