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

[二次开发源码] NX二次开发源码: 获取面的相邻面的信息

[复制链接]

2013-11-6 18:54:58 6450 0

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

admin 楼主

2013-11-6 18:54:58

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

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

x
通过这个代码,可以获取选择面的相邻面的信息
. f5 k2 Y# r) ^8 N- S0 T2 oNX open C++中使用了 选择对象 selectobject 函数,通过面获取边数据,通过边获取面,从而得到信息!
% F, e: Y2 A1 [( E3 s1 X/ J  q1 \9 i
  1. #include <uf.h>
    8 X5 o+ J8 \( h! z
  2. #include <uf_ui.h>4 R* Y1 [2 h9 x) b& g, q
  3. #include <uf_object_types.h>0 w; S& P. t' A- q/ X' T

  4. ' D1 G* b  O7 m) \$ L0 m# _
  5. #include <NXOpen/Edge.hxx>; `  l& a/ ~  g; F4 K( O( }& e
  6. #include <NXOpen/Face.hxx>9 {% ^" E. L) e! s
  7. - O* Z/ |9 E2 |7 c; Z
  8. #include <NXOpen/ListingWindow.hxx>7 b' }' X4 c% \! I" a
  9. #include <NXOpen/NXException.hxx>. q; |8 k4 G( j
  10. #include <NXOpen/NXMessageBox.hxx>
    4 p4 `  A7 o: T; N/ k, ~
  11. #include <NXOpen/NXObject.hxx>
    & {5 w- k6 J! ~# l5 B, m
  12. #include <NXOpen/Part.hxx>: M: N4 _$ ?. S& o$ ?( S
  13. #include <NXOpen/ParTCollection.hxx>
    + X+ w8 A; k2 j  O
  14. #include <NXOpen/SelectDisplayableObject.hxx>
    $ X3 {' g; ]# C7 _1 ~
  15. #include <NXOpen/SelectDisplayableObjectList.hxx>
    9 h' {3 V2 S* |% F. }7 A8 p9 N. ?
  16. #include <NXOpen/SelectObject.hxx>
      N& I: `# A# _0 p* s
  17. #include <NXOpen/SelectObjectList.hxx>
    * u% I# z, a9 M' W7 A8 H$ m4 o
  18. #include <NXOpen/Selection.hxx>
    8 r0 ]6 W) Y* e
  19. #include <NXOpen/Session.hxx>
    1 v9 P" [0 M' I+ R( J
  20. #include <NXOpen/UI.hxx>- p6 g' _$ |/ b+ i/ A; I+ f' f
  21. #include <NXOpen/View.hxx>
    * P. h: c( _/ K  r

  22. 8 ~; r4 ]7 Q4 T% [, C7 _
  23. #include <iostream>4 ^, H! b$ O3 \& c! a9 b8 r; z5 x
  24. #include <sstream>7 T, l9 A- E' A4 l% h
  25. #include <list>' B0 r% \0 i6 b' l9 g: z! M) l
  26. 8 d( j& @$ _# \# d* B/ V
  27. using namespace NXOpen;
    * ]3 G0 h2 c+ k! U$ x% ~7 ~
  28. using namespace NXOpen::Annotations;8 \9 e* I# G& P& Y! h3 F( m4 Q
  29. using namespace std;" B% a8 m1 z8 a+ u/ k/ F. X
  30. ) T. @: C8 z; X4 G' t  l  M) t
  31. class Gtac
    3 F  w3 ~8 y$ L
  32. {! N7 Q* Z& i" \+ z: p* l: J; ^
  33.     // class members
    " A8 k3 L' c5 ]/ E
  34. public:
    2 g, c# _+ o8 N' }
  35.     static Session *theSession;
    ! ?5 A7 U$ N7 {: j5 Q2 A4 _
  36.     static UI *theUI;" E0 g& o3 j8 H( t6 K% o
  37. $ ]- J1 l- c5 u2 t/ y) n
  38.     Gtac();) H9 Z* C% ]0 W, A
  39.     ~Gtac();
    7 J6 K! S1 ^9 M+ ]
  40. , E1 D- y; z7 T- d# l
  41.     void do_it();* G9 u- Z4 D8 k# ?

  42. 4 A7 X% B. \0 H1 s
  43. private:
    7 ^: k% `0 U1 C) u# r. R% A& N9 v
  44.     Part *workPart, *displayPart;
      O* y' P3 c, F* }) S
  45.     Selection *sm;
    ) v& l: a) n9 H
  46.     NXMessageBox *mb;# u  ^, z# J) C& f5 I' T8 I
  47.     ListingWindow *lw;9 a; g6 Q: ?+ l4 D
  48. . R: V0 W2 k! z. Y" W0 v5 n
  49.     Face* select_a_face();8 B$ x$ C! v: [  E

  50. 2 Y, }7 t3 R' w' E
  51. };$ d3 ?8 g9 e+ }7 z9 o
  52. 2 O' o8 ]* U/ r$ Y/ B
  53. //------------------------------------------------------------------------------: H/ \; ]% S  m& _% c- W
  54. // Initialize static variables
    ! e. G$ k5 j4 V
  55. //------------------------------------------------------------------------------* g# x$ R$ q" |3 \' ?
  56. Session *(Gtac::theSession) = NULL;$ S& K3 V1 a' J2 M7 V2 u
  57. UI *(Gtac::theUI) = NULL;
    ; T3 c/ Z6 J2 o
  58. $ w: b" K; q% t; e
  59. //------------------------------------------------------------------------------
    ( l& n" Q2 r+ o. y' \
  60. // Declaration of global variables
    / ?% `, r9 A1 d9 [! F" ^9 t  O
  61. //------------------------------------------------------------------------------3 U' w  U( r& r8 o" ?% e, K
  62. Gtac *theGtac;5 u9 F) E8 u* t7 f# M4 v
  63. # W9 `( {4 E# X  l, v
  64. //------------------------------------------------------------------------------
    # o0 |' V  T  m  ^1 ?7 H1 D
  65. // Constructor
    * l! i9 B7 O5 I, i* [4 D, |
  66. //------------------------------------------------------------------------------
    - B5 n5 w  B& y1 ~+ |" i# O0 w
  67. Gtac::Gtac()
    * }2 ?. o! @/ z
  68. {. f. G3 m* z. A$ L
  69.     // Initialize the NX Open C++ API environment( w9 K" N6 E6 F. T2 Z" G! I
  70.     Gtac::theSession = NXOpen::Session::GetSession();
    0 q% j: u7 C! z1 i! ^2 U' E9 ~
  71.     Gtac::theUI = UI::GetUI();
    5 w7 b4 K9 q" p0 p9 S

  72. % C3 `& s. h/ o+ j0 n5 v
  73.     sm = theUI->SelectionManager();
    8 k: ?7 x9 x8 [+ h' ^
  74.     mb = theUI->NXMessageBox();. P# z/ f0 Z, q0 X7 w
  75.     lw = theSession->ListingWindow();
    2 V. j/ p8 i/ V4 s
  76. 0 w  k/ f1 C* l3 C! A9 H% d$ X. ^
  77.     workPart = 0;: v- t# V1 [. P# ~, @( E4 `: e
  78.     displayPart = 0;, j0 \% y  W7 V  c
  79. }" u" x. h* k6 N4 F+ M" t% A  S
  80. 0 @+ O* a% _+ y: u4 {- |3 p
  81. //------------------------------------------------------------------------------
    6 r- j4 r+ u, T) [/ t9 N. `
  82. // Destructor
    9 j7 [  j- q0 U& |7 z
  83. //------------------------------------------------------------------------------  E7 X- E) q" \7 U
  84. Gtac::~Gtac()4 F$ o6 D* U) q1 L
  85. {
    3 P0 |4 ?! f$ v" z, n  `- t. K* l: j
  86. }
    # _  w( S- Q3 o1 p* N8 C" n  H4 F
  87. ' f% k0 {; e' J$ D1 C
  88. //------------------------------------------------------------------------------$ _3 F4 i& x8 R* O
  89. // Selection5 W: i; z/ a( y9 j
  90. //------------------------------------------------------------------------------( @0 }4 V  _1 p) Q3 e+ C+ l2 B1 Z! C
  91. Face* Gtac::select_a_face()
    , ^" P$ R2 V0 y- l: t
  92. {
    % o# p8 ~* I) f( @
  93.     // ask user to select a face. [; B! \; _, H$ `* {
  94.     UI *ui = UI::GetUI();
    . C* |3 L+ _& K  E( H$ c
  95.     Selection *sm = ui->SelectionManager();
    ; V8 E! E1 k; _
  96.     NXMessageBox *mb = ui->NXMessageBox(); // as of NX50 V1 r% O- t4 W/ N' \' V1 }; P
  97. , }4 W% P8 R& ~4 t
  98.     NXString message("Select Face:");  n% o3 T7 D, L- w: u6 }2 Y
  99.     NXString title("Select Face");
    . a0 @! H8 c, H8 B% `/ e
  100.     Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;+ V+ i1 j$ M: l; [  x# f
  101.     Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;
    ; N' I6 R2 e% x8 w) N
  102.     bool include_features = 0;
    ; T% y" n/ z# T. \& Z4 x1 R
  103.     bool keep_highlighted = 0;  ^' e( ^9 b- D( P/ n. s  Q
  104.   V% L# k6 R6 h
  105.     // Define the mask triple(s)
    0 T% T9 p) v" R
  106.     std::vector<Selection::MaskTriple> mask(1);
    / o" l7 \& `/ Z" ~% Y
  107.     mask[0] = Selection::MaskTriple( UF_solid_type, 0, UF_UI_SEL_FEATURE_ANY_FACE  );0 u; O* j! h, E: _9 T
  108.     Point3d cursor;
    ' h  y" I( v$ S, l% J
  109.     NXObject *object;5 F! i: T( _0 y. ^2 e$ _
  110. ' n. P% a0 T0 a* l& G0 ]( W6 ?
  111.     // Select objects using filter defined by mask triples
    4 p) _3 |' R$ Y' f0 J- X
  112.     Selection::Response res = sm->SelectObject(7 E( J/ ~) B1 P7 x
  113.         message, title, scope, action, include_features,, [/ r# R4 N4 t2 i
  114.             keep_highlighted, mask, &object, &cursor );
    ! M7 ]7 O* h5 i  j7 x- u

  115. + A, \9 q7 a7 a# I1 U
  116.     if( res == Selection::ResponseObjectSelected )
    # C6 c, a! j& g2 W$ k
  117.     {/ N9 `9 J% W6 g4 L; s" ~
  118.         Face *aFace;
    3 C" x* J4 h" @
  119.         aFace = (Face *)(object);6 V1 p  y0 u" _5 _' q' M
  120.         return aFace;
    3 g8 ]( h5 K* l! \" Q5 p
  121.     }7 |7 k2 ?& q' Y' y% Z- y& E/ e
  122. 0 R( M! H& q0 |" Q1 y
  123.     return 0;+ h6 Z) r/ @" R  u
  124. }% V/ J" ~) t" t) w, w! B; L7 G
  125. ! n  P* Z3 @6 x
  126. //------------------------------------------------------------------------------5 @- D5 e8 ^' Q6 a8 g
  127. // start with our job...: R7 m7 t" }( R0 r
  128. //------------------------------------------------------------------------------3 z- ^. ]- f6 b% E2 Q
  129. void Gtac::do_it()
    . |& M5 v8 u* ]* F
  130. {
    ; r0 ~% B0 s1 i; K+ M; m) d7 o; k+ a
  131.     workPart = theSession->Parts()->Work();
    7 [9 V% g; P! i) ^# x! h* u
  132.     Part *displayPart = theSession->Parts()->Display();
    5 \* v4 _& P- j9 [
  133.     stringstream out;
    / i9 r+ Z9 i: f$ u! B

  134.   v$ v7 _! l0 v6 H; e
  135.     Face *theFace = 0;
    * ]) H, w: h& |' b' v
  136.     std::list<Face*> myfaces;
    ! z: g9 o4 C4 f! V
  137.     9 R+ l4 t% n) U+ ]! T
  138.     while( (theFace=select_a_face()) != 0 )' k5 w  L9 y. X* i( x) k
  139.     {% P$ B, x. k0 O" Y" s
  140.         if(! lw->IsOpen() ) lw->Open();
    4 C4 C; S, r' Y. H- I6 c  R
  141. 9 C7 M0 w; z+ W: u# X
  142.         out << "Selected Object: " << theFace->Tag() << endl;, y) s+ g0 L7 G3 v& n
  143.         lw->WriteLine(out.str().c_str());
    . N5 J/ q5 y2 B* I% O/ _: ~/ F& K

  144. . K( E' @7 \) X/ p4 l8 d7 F- O
  145.         std::vector<Edge*> edges = theFace->GetEdges();
    : a5 O: b8 L4 y$ Z0 `+ k
  146.         out.str(""); out.clear();
    " @+ a$ u6 x. Q6 h6 K2 J5 {
  147.         out << " Number of edges: " << edges.size() << endl;; G) i- i/ t9 }  R
  148.         lw->WriteLine(out.str().c_str());
    8 ~5 X/ _- s' L7 }
  149. 6 J: y, U8 k. f; F
  150.         for( int ii = 0; ii < edges.size(); ii++)7 ?1 E# ]7 ^7 {2 N, ^4 ?0 x
  151.         {
    5 Q8 _8 |5 ^1 w2 s8 p
  152.             out.str(""); out.clear();% m, C/ J' s  X3 _+ o4 X  R
  153.             out << " Edge: " << edges[ii]->Tag() << endl;( a" x0 _9 g% s4 Q
  154.             lw->WriteLine(out.str().c_str());
    % G) C) h. X* z; Y2 T) {6 ^

  155. - O2 U- |' k1 Z+ G3 F5 S
  156.             std::vector< NXOpen::Face * > adj_faces = edges[ii]->GetFaces();
    / Z1 p7 Z! G; {$ r/ {# T0 Z
  157.             out.str(""); out.clear();
    6 w8 W) Q+ K  {  q5 \2 F. O+ r. F
  158.             out << " Number of adjacent faces: " << adj_faces.size() << endl;) D8 _& U1 D* n4 y
  159.             lw->WriteLine(out.str().c_str());
    . o0 v" ]) c. K7 G
  160. ! o9 {6 ?5 T1 c, H/ L- q3 s
  161.             for( int jj = 0; jj < adj_faces.size(); jj++)
    2 t! |& a8 E# n# ?
  162.             {
    4 Q' H; j; |1 `  \) x
  163.                 out.str(""); out.clear();
    + i+ I. _/ t, ]& H, C0 A
  164.                 out << " Adjacent face: " << adj_faces[jj]->Tag() << endl;
    + q1 [/ H5 ], `
  165.                 lw->WriteLine(out.str().c_str());
    ; w6 @. n% g. m
  166. + r, W6 Q( o9 I6 t
  167.                 myfaces.push_back(adj_faces[jj]);% \% f7 h- z) L5 u  Y
  168.   p7 E8 j; J& j1 O2 Y
  169.             } // jj
    2 o- h7 @. C/ n9 O' p' i& f
  170. ' b* A6 C/ D4 G, A& t
  171.         } // ii
    3 D) f3 K2 L3 H6 p) x

  172. . i. X* S6 R" w" f3 O: m
  173.         myfaces.unique();
    5 i7 B! L) T% x8 e9 N2 Z3 M
  174.         for (list<Face*>::iterator it=myfaces.begin(); it!=myfaces.end(); ++it)
    0 |9 G4 [( q' K# P- k' A( [
  175.         {: U- S/ o' |* ~8 u2 H
  176.             (*it)->Highlight();: q- N3 Z6 C) s: z# Y0 G; Q: T
  177.         }. o( J. `  F5 K8 R7 M2 t, ^
  178.         Gtac::theUI->NXMessageBox()->Show("Adjacent Faces", NXOpen::NXMessageBox::DialogTypeInformation, "Confirm");
    2 W9 @4 G) A" E" B6 h* P: B& a* g  ^
  179.         for (list<Face*>::iterator it=myfaces.begin(); it!=myfaces.end(); ++it)
    2 C+ _% n; J% A  p% l) ^
  180.         {. W) m# I( g2 A% E: Z
  181.             (*it)->Unhighlight();7 ~; u1 s8 Z$ c5 y
  182.         }
    2 a: V) w6 X0 ~! G1 c; E
  183.         myfaces.clear();1 e9 b9 z' H) [& P5 o, V

  184. 5 V: q; v) j& i& Y

  185. , X3 K# L  q/ Z+ G' h0 E
  186.     } // while
    & c+ o* X$ D; V
  187. }3 h- g5 n/ K8 e" j/ X) ~4 ^
  188. ; F: ?7 ]% W" u
  189. //------------------------------------------------------------------------------
    0 a* J# x$ o) e- A* n( _- l; p
  190. // Entry point for our unmanaged internal C++ program& i3 }& f' [1 z/ |, _9 p4 _
  191. //------------------------------------------------------------------------------( B, O. t- a8 ^1 o8 S
  192. extern DllExport void ufusr( char *parm, int *returnCode, int rlen ): P$ {, K) u; q% p. _% M
  193. {
    1 \: m4 K" ~. s5 T% L; D; P
  194.     try3 p) ~/ [/ z3 R7 x
  195.     {! O# K. a$ [) @3 J  ]
  196.         theGtac = new Gtac();
    " s4 N0 c* y& j4 A! Z, B
  197.         theGtac->do_it();8 G: b& b5 u  j3 ?- N& @' n
  198.         delete theGtac;# q. b% {+ }" K1 \9 v% ?
  199.     }
    ! k* y& K8 I' ^2 I+ H" l
  200.     catch (const NXOpen::NXException& ex)9 J7 Y6 J, b& r4 m$ s2 x6 z
  201.     {
    ' f% Q9 P6 h' [7 [& f& ]
  202.         // ---- Enter your exception handling code here -----! B5 U( t7 d& L$ K! x
  203.         Gtac::theUI->NXMessageBox()->Show("CaUGht Error", NXOpen::NXMessageBox::DialogTypeError, ex.Message());: ]6 q) n% [; X5 k7 y: a* J
  204.     }
    , Y8 W$ Z" V+ r
  205. }0 k& r+ `: D& T. b  C+ Z0 X, B
  206. 7 D4 T8 }3 z: O7 n, B- {

  207. ) [/ P" t) ?& ~, Z9 o: K" {
  208. //------------------------------------------------------------------------------+ m; V# X4 u/ |& A
  209. // Unload Handler
    / x  V6 D& F$ A
  210. //------------------------------------------------------------------------------$ R( G+ x4 ~2 S& o
  211. extern "C" DllExport int ufusr_ask_unload()# X' v- [, T/ \1 P7 G9 O- y1 x
  212. {
    ) E( V! u# W# R% R" k; G9 k" s, P
  213. return (int)NXOpen::Session::LibraryUnloadOptionImmediately;+ J! T/ h( ^1 \$ t, i# s
  214. }
    " m5 U% d2 x6 {& ?6 X
  215. $ C$ P( b5 [$ p" B3 `3 h. J# a  K
复制代码
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 doTeam.tech
回复

使用道具 举报

发表回复

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

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

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

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

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

    我知道了