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

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

[复制链接]

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

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

admin 楼主

2013-11-6 18:54:58

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

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

x
通过这个代码,可以获取选择面的相邻面的信息8 z1 @$ w' o1 G/ C- X
NX open C++中使用了 选择对象 selectobject 函数,通过面获取边数据,通过边获取面,从而得到信息!
  u$ ?( a9 `% X& s6 M  k
# @7 d) _+ N; D9 a5 g# N3 o
  1. #include <uf.h>
    7 P$ {& ?( d' @& k- i& r7 O
  2. #include <uf_ui.h>
    / \' h# H& J0 c! o
  3. #include <uf_object_types.h>1 f8 n, e! ?, }5 s8 e' z" S2 r. a

  4.   P7 ~1 u. g" A7 b
  5. #include <NXOpen/Edge.hxx>
    . j" h. t% h3 V8 p& @. \+ d
  6. #include <NXOpen/Face.hxx>* p' |: n/ l. J6 ?/ N/ n! @

  7. ! u3 e3 B! ?, T2 r& ^
  8. #include <NXOpen/ListingWindow.hxx>
    , g3 ~0 J3 N% [( Y! S
  9. #include <NXOpen/NXException.hxx>5 I$ ?4 Z& M" y) w1 D" t
  10. #include <NXOpen/NXMessageBox.hxx>& R1 T6 I  K6 I3 s6 r) K
  11. #include <NXOpen/NXObject.hxx>5 n+ Z' p0 i7 M3 `: f) n
  12. #include <NXOpen/Part.hxx>& Y% p# ?" U- J" P) j1 t6 _0 E( W% G
  13. #include <NXOpen/ParTCollection.hxx>
    8 H5 c9 g) z& Y2 l& q
  14. #include <NXOpen/SelectDisplayableObject.hxx>4 I- L4 [6 d/ L9 k9 r9 c
  15. #include <NXOpen/SelectDisplayableObjectList.hxx>0 X5 z9 e+ u" s+ B6 g# |
  16. #include <NXOpen/SelectObject.hxx>! Q( z2 q4 E) H9 B, [4 b+ n6 s
  17. #include <NXOpen/SelectObjectList.hxx>
    2 `- ?. U! G: N9 R% J
  18. #include <NXOpen/Selection.hxx>
    9 X7 _7 [5 `. M
  19. #include <NXOpen/Session.hxx>" z3 A/ g1 w9 p* E; n
  20. #include <NXOpen/UI.hxx>) v3 v( _6 j  C% G' p# F  k2 S
  21. #include <NXOpen/View.hxx>
    . I  _9 M7 f- p8 w$ t5 d5 S. E
  22. % i$ u+ A6 o) T% E
  23. #include <iostream>2 Q7 }) j) s3 e& O. c
  24. #include <sstream>
    ; O( ]% v& B, ]- x# s8 \& F
  25. #include <list>1 p/ k# d0 g" o5 j2 Z: r8 ^; X: l0 i# D

  26. " V7 E" _+ ]3 @+ x/ T/ `. c; M+ j7 r
  27. using namespace NXOpen;
    1 E' Z  ^6 Z; M- T# v9 a
  28. using namespace NXOpen::Annotations;4 p9 H: u# F+ _. |) R. W$ D8 i
  29. using namespace std;
    ( t- y8 h' N, f) _) o; U" [
  30. 7 N2 n& O, [4 A4 L8 a
  31. class Gtac
    3 _$ m9 z5 }# z! U7 z- T3 E: @
  32. {
    3 s5 h  Q1 X/ \8 d* T4 O6 s
  33.     // class members8 T" h% S+ \- S) z  }
  34. public:
    ; ^0 [3 i9 k3 m# i* S
  35.     static Session *theSession;
    2 r- T- M: h4 o6 F
  36.     static UI *theUI;; `% r! M0 c9 }0 ?
  37. 0 {6 C4 N/ c( S( [1 @, K; A/ u
  38.     Gtac();
    / I! m% j: }/ G) R2 K  B
  39.     ~Gtac();
    + F/ B& l7 J! V

  40. ( c9 \' m2 I, y
  41.     void do_it();. t( A; w( v+ K* [7 Q; R$ x  ?
  42. . Q& ^7 n0 E, _7 e$ U0 f4 s
  43. private:5 x; o6 {2 G& J( t1 M) ^
  44.     Part *workPart, *displayPart;
    4 K% @; r9 b0 N- H! [/ O3 g8 A" x. h
  45.     Selection *sm;5 `& ^4 Y: x9 {/ q0 {
  46.     NXMessageBox *mb;
    : G) j/ E5 W# i
  47.     ListingWindow *lw;& L+ g' T4 d. u# ~

  48. . V. O6 R$ c& f$ r6 I
  49.     Face* select_a_face();+ X& X7 L/ s4 v. Z

  50. ) y. u9 \6 @/ A; h
  51. };6 x& k8 p1 M# h8 s

  52. 4 S) `8 ]/ f0 I; ~4 r+ K( a
  53. //------------------------------------------------------------------------------
    . y8 J5 x  e3 q
  54. // Initialize static variables. e. N! f$ u5 y5 S* _0 M
  55. //------------------------------------------------------------------------------
    ! h; e! Y+ K: \6 p' r( y$ ~
  56. Session *(Gtac::theSession) = NULL;: P. I& z, x$ P# L. [8 Q
  57. UI *(Gtac::theUI) = NULL;# n% W" B1 d% w1 F5 G
  58. 6 ?' B, V3 Z7 X/ h/ }
  59. //------------------------------------------------------------------------------
    ! D& I1 v# X. P8 Q- Q; l
  60. // Declaration of global variables
    ) H' N. i) m% `6 h1 ^( @% Z4 J
  61. //------------------------------------------------------------------------------2 _  r/ ]6 p/ x' J1 G
  62. Gtac *theGtac;  ~1 s. [$ o% w8 x1 F

  63. ( c! K. l; r0 W7 S
  64. //------------------------------------------------------------------------------
    8 Z2 j: H. K+ C  d, k
  65. // Constructor
    ; F1 d. Z! z4 [% b3 N  j5 k- o8 s+ |
  66. //------------------------------------------------------------------------------# {$ L9 W* _) c/ D8 m+ a
  67. Gtac::Gtac()1 q. e5 y5 I- ]+ Q
  68. {" O) }5 u$ b- n
  69.     // Initialize the NX Open C++ API environment4 \2 f' j! z) v! k8 o+ C- @
  70.     Gtac::theSession = NXOpen::Session::GetSession();
    # [8 ]- d/ L% F; F% ]3 e, e
  71.     Gtac::theUI = UI::GetUI();
    ' x6 `- k: k+ ]* Y0 |. D. Q, p# ]
  72. 1 g) U( Q! n! d# R
  73.     sm = theUI->SelectionManager();" a3 C2 [( i% I! h/ Z0 M( V5 h
  74.     mb = theUI->NXMessageBox();! d0 `$ b3 F; \) T6 k* U
  75.     lw = theSession->ListingWindow();
    0 h9 v8 y  {  q+ W; Y
  76. - i( _! T; U: S; V2 Y# A
  77.     workPart = 0;" @; z. c. ~# g% J6 N
  78.     displayPart = 0;
      z3 T# z. A0 W7 W2 K7 y) a/ j
  79. }
    ) O9 N( X( A: |" F( W

  80. 4 m2 W0 Z1 X4 F  T
  81. //------------------------------------------------------------------------------1 k. c# s1 d5 D  ]) w+ g
  82. // Destructor1 y2 H  M' I5 _# A' F
  83. //------------------------------------------------------------------------------; Q9 i, n/ c: \
  84. Gtac::~Gtac()
    / w2 @0 b1 g% z" b& Q" g
  85. {
    ( |) E" Q/ E+ H  a: {) S" q9 D$ r
  86. }3 K1 l5 X+ ]: j- P! I

  87. 4 w( m7 {% \2 j7 E0 C  L
  88. //------------------------------------------------------------------------------
    & z" d7 ]; Y/ f9 L+ `$ ]5 [9 \
  89. // Selection
    $ ^9 X. Y: R; I4 M
  90. //------------------------------------------------------------------------------
    ! P- X) J! N& q
  91. Face* Gtac::select_a_face()
      I# r3 ~: \+ t* \
  92. {
    0 y9 k. c, x8 z+ T% N
  93.     // ask user to select a face
    7 h% ^/ A0 W4 M8 W) c. j4 v
  94.     UI *ui = UI::GetUI();. y5 B. J# F% m7 H
  95.     Selection *sm = ui->SelectionManager();* L( D7 h5 Y! a/ s2 W% u
  96.     NXMessageBox *mb = ui->NXMessageBox(); // as of NX5
    9 F! x/ f3 X( M9 a1 y) l, z# J

  97. & a* @7 E; G0 Q+ Y  D
  98.     NXString message("Select Face:");/ g+ k7 N6 M5 [  u
  99.     NXString title("Select Face");. I# i: ]6 l$ f0 u  J/ K4 O+ `
  100.     Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
    : s2 D1 N+ Q0 {$ `6 a0 t7 O
  101.     Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;4 ?0 g5 i3 @/ p. X3 t
  102.     bool include_features = 0;
    3 R' q6 z* a" z9 B. r
  103.     bool keep_highlighted = 0;3 P: d+ r* H8 r! m8 f; B

  104. 4 }2 z* A4 V" o4 M# ]0 U! X
  105.     // Define the mask triple(s)1 r* V7 ?4 ~" F  R4 ?. x
  106.     std::vector<Selection::MaskTriple> mask(1);
    - o5 w* [) p+ b. z8 l, z( Y: A6 |
  107.     mask[0] = Selection::MaskTriple( UF_solid_type, 0, UF_UI_SEL_FEATURE_ANY_FACE  );4 H1 s$ i7 W) W
  108.     Point3d cursor;4 w* Z  Y2 b8 l: q
  109.     NXObject *object;& ~+ m3 L# \7 e

  110.   j; I" ]) Q, M7 A3 C# V( o4 u
  111.     // Select objects using filter defined by mask triples
    / A; f  O0 I3 e4 @' Q% u. G
  112.     Selection::Response res = sm->SelectObject(% b+ Y7 _7 C( b/ j9 j
  113.         message, title, scope, action, include_features,
    # s2 ?# R; [# S2 q% V7 a- J; G
  114.             keep_highlighted, mask, &object, &cursor );
    0 W- P3 O; ~/ U% r! z2 h
  115. 0 u6 B; Z  |+ t, B
  116.     if( res == Selection::ResponseObjectSelected )0 x4 T3 m% J# J* u- i/ G+ ]
  117.     {
    6 t! n1 }! X# f+ V
  118.         Face *aFace;
      ~0 \. s8 x: |# ], I1 \
  119.         aFace = (Face *)(object);
    - w/ U* Q% z- G1 K- Y
  120.         return aFace;
    # ~. c1 S) q+ u& ?6 b$ I" Z3 B
  121.     }
    5 O4 w' O5 ?8 a5 X! s7 x, y) L" K
  122. ) d1 h8 s2 s/ g5 W! b& c: B
  123.     return 0;1 c) I) H# u' K. W) d8 k# n* d- q. A
  124. }
    ' _, n) u' S- F+ f8 S2 }

  125. 8 n  g% u5 [9 I/ C6 `$ c
  126. //------------------------------------------------------------------------------1 p" a. L" u- q5 @
  127. // start with our job...
    , M0 [7 P. k. a- U4 M' Q  K
  128. //------------------------------------------------------------------------------* M# D! e! h3 [7 c: J' |
  129. void Gtac::do_it()
    1 `$ s( Q6 R+ w" s- a- I$ ?
  130. {
    7 Y8 _# x  Y8 {: j2 l4 Q9 w
  131.     workPart = theSession->Parts()->Work();
    2 `$ \1 i  ~/ m6 |: r) X$ }# M
  132.     Part *displayPart = theSession->Parts()->Display();
    0 Q& q' G2 O+ @# x+ _0 z
  133.     stringstream out;
    . p, n; J+ D- \6 R0 ^- E$ J% {

  134. & {. m  }: \. l, t7 p. b1 o+ G
  135.     Face *theFace = 0;
    " Q3 Q! K, G( d% ?5 i4 ^
  136.     std::list<Face*> myfaces;
    " T( h6 l. R! ?* S/ ?) O, v
  137.    
    ( {' b2 A# Y0 d9 ?( [4 @
  138.     while( (theFace=select_a_face()) != 0 ). B; ^( |& f; o9 G1 O: U9 e6 g
  139.     {8 V, V' t# F' Y4 W
  140.         if(! lw->IsOpen() ) lw->Open();2 M& v% S$ I$ _1 ?- H; y

  141. : _- g  f  ~0 K! [1 C! Z9 a& O
  142.         out << "Selected Object: " << theFace->Tag() << endl;7 J, x' f; l5 n+ r* j( n# {
  143.         lw->WriteLine(out.str().c_str());
    8 P5 j) v. ~4 ?" h

  144. % C0 U; E& }! Z% A; }, U
  145.         std::vector<Edge*> edges = theFace->GetEdges();
    5 o+ B; N8 |/ R9 o% b$ T
  146.         out.str(""); out.clear();
    # R4 e" ]" V( q0 f$ W2 e2 F
  147.         out << " Number of edges: " << edges.size() << endl;
    7 J. p, q) I& w+ @  L1 u
  148.         lw->WriteLine(out.str().c_str());
    4 e  \. q0 @1 P# {. `3 |4 ?3 y
  149. & T! C! R. `: \
  150.         for( int ii = 0; ii < edges.size(); ii++)
    / K# C' a7 t. z2 ]. k( L- Y
  151.         {
    4 c' x" V9 u4 J, L2 w
  152.             out.str(""); out.clear();! B: `  H/ F5 V& D, Y( @" x
  153.             out << " Edge: " << edges[ii]->Tag() << endl;
    % c- Z% d5 P. j7 y
  154.             lw->WriteLine(out.str().c_str());
    9 O1 B8 R+ W5 |/ n8 I8 ~

  155. 6 {5 I' j6 Q5 j) p8 G0 X# `2 U1 L
  156.             std::vector< NXOpen::Face * > adj_faces = edges[ii]->GetFaces();
    / ^/ m0 S- Y: i0 L% E& p
  157.             out.str(""); out.clear();
    $ X% d& l- r3 x# O  e
  158.             out << " Number of adjacent faces: " << adj_faces.size() << endl;
    ; T+ y+ j7 T  f6 z6 z
  159.             lw->WriteLine(out.str().c_str());
    . s' L5 M  x3 R

  160. 0 s% e! ?# ?: e6 |- C
  161.             for( int jj = 0; jj < adj_faces.size(); jj++): j4 d1 j* S1 B; O. ^# e5 u' g' o, E
  162.             {
    8 L6 f+ I; t! ]; Y6 W
  163.                 out.str(""); out.clear();
    : h. n' O# v4 u4 ~
  164.                 out << " Adjacent face: " << adj_faces[jj]->Tag() << endl;  J3 O8 @: a1 U" R. [8 {& M- I, A- S* T
  165.                 lw->WriteLine(out.str().c_str());
    0 r1 y" ~! N& i6 s/ z

  166. . m; E( s8 R) i! }% F
  167.                 myfaces.push_back(adj_faces[jj]);7 K' L$ }  T4 |

  168. ) y/ Z% ~! D+ n3 x, Z9 @: @3 _7 Z
  169.             } // jj
    8 O5 j( S6 W! z5 e  \

  170. ( b7 ^% |" d$ w0 _
  171.         } // ii. f1 l( c! c  C  k$ \* D2 y

  172. / S" A  k" `3 B1 j
  173.         myfaces.unique();  o+ E. P0 P/ M6 w0 ~3 a
  174.         for (list<Face*>::iterator it=myfaces.begin(); it!=myfaces.end(); ++it)5 J9 A- B4 D; O' C+ f: N8 U
  175.         {6 O( ]! F6 r7 L& |$ t
  176.             (*it)->Highlight();) o; |: g$ a' ]: i" k" M
  177.         }$ F" G8 S- `6 L& a- [
  178.         Gtac::theUI->NXMessageBox()->Show("Adjacent Faces", NXOpen::NXMessageBox::DialogTypeInformation, "Confirm");" [8 l+ ~- F, M+ [
  179.         for (list<Face*>::iterator it=myfaces.begin(); it!=myfaces.end(); ++it)
    + L) R9 U2 x5 @% o9 T5 Z% s: o
  180.         {$ Z0 x" z9 b4 @7 m4 ]
  181.             (*it)->Unhighlight();1 V( ]5 b! w! P6 W9 q5 l2 t9 L
  182.         }4 v! ~2 y& Q4 h' I5 O
  183.         myfaces.clear();! u! y. N5 e! v* T& ?8 i
  184. % ?4 m3 L0 T# [. o( l( U
  185. 7 H: D+ \) r9 R6 C
  186.     } // while& [, F. J) c* s% ]
  187. }1 G5 `% _% j9 S! s. i6 ?
  188. % n% n* k; Q% W8 Y
  189. //------------------------------------------------------------------------------  W- N; o4 }) C; ]' C/ }0 x* ^6 m( a
  190. // Entry point for our unmanaged internal C++ program. M. l! I8 [! n2 W3 F5 W
  191. //------------------------------------------------------------------------------
      r# b7 f) b! B! Y; Q) q# s! @
  192. extern DllExport void ufusr( char *parm, int *returnCode, int rlen )
    + e- e" u8 i$ Y
  193. {# A) {! C0 P1 U
  194.     try1 G3 K5 A+ k: Q) f- l
  195.     {
    : P# ^7 \6 R6 Q$ r  [8 M
  196.         theGtac = new Gtac();
    * V9 L# ?  c& d/ p6 i- k/ [& O
  197.         theGtac->do_it();
    & U! u8 a) V6 t! p4 w6 u/ a, c
  198.         delete theGtac;
    * g/ N7 ~0 u# y; T8 S( ^3 I
  199.     }$ K7 l1 h5 i1 u2 z' U, Y% U
  200.     catch (const NXOpen::NXException& ex)
    & ^# R; H3 \3 k  `: `
  201.     {
    + a, i2 s2 O5 m- E' A
  202.         // ---- Enter your exception handling code here -----, X2 M0 n6 a& s* x7 J2 D1 O: E: r
  203.         Gtac::theUI->NXMessageBox()->Show("CaUGht Error", NXOpen::NXMessageBox::DialogTypeError, ex.Message());5 ]8 o, {; l  [& _
  204.     }
    / I. l7 x( T" f5 o% P! ~3 [
  205. }7 k4 b- _/ n: k% E

  206. + V; B1 P1 y8 G6 n) J
  207. , D0 ~* U2 ?1 @6 }+ t1 U$ ^; W1 C( W
  208. //------------------------------------------------------------------------------
    1 c5 o$ ]! Y( p# b( G
  209. // Unload Handler% v3 r5 y9 n4 C3 L1 P! G5 i
  210. //------------------------------------------------------------------------------
    ; K9 i3 B* z( W7 ?  h
  211. extern "C" DllExport int ufusr_ask_unload()- M/ y9 D( v- G- ~$ ~
  212. {
    + {- Q( ~5 F- _/ M# h; R( l
  213. return (int)NXOpen::Session::LibraryUnloadOptionImmediately;# G, l( O1 m( C; }; M& @& v
  214. }, ^8 a/ m8 m, N

  215. * a: k! P6 v" _0 u, L/ y
复制代码
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了