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

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

[复制链接]

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

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

admin 楼主

2013-11-6 18:54:58

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

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

x
通过这个代码,可以获取选择面的相邻面的信息
: A" M! N* a0 N4 S' O9 E" z( e+ p  vNX open C++中使用了 选择对象 selectobject 函数,通过面获取边数据,通过边获取面,从而得到信息!$ `* ?! i6 T" F$ F! B6 D

( c( ?! G4 @0 ~+ r5 S; z) `
  1. #include <uf.h>
    , S# C5 n& w* h  Q/ X% Z' U! n
  2. #include <uf_ui.h>, X- ~$ X" s* Z  m: ~6 l
  3. #include <uf_object_types.h>
    8 a8 B& X$ d, s, B

  4. ; Y$ m. O! ]4 @0 m
  5. #include <NXOpen/Edge.hxx>( i7 N/ C& _1 j" P
  6. #include <NXOpen/Face.hxx>3 C/ n8 Z7 C6 C; i4 J
  7. ' D, S* q, M: \  v; S* v( J
  8. #include <NXOpen/ListingWindow.hxx>
    # [' [+ B  A- q: r4 w
  9. #include <NXOpen/NXException.hxx>/ {9 ?. Y5 T# j! }% d7 j3 ?5 r
  10. #include <NXOpen/NXMessageBox.hxx>1 r% I4 @0 |* L4 J2 K; r# m, @) L
  11. #include <NXOpen/NXObject.hxx>' S7 M' J- d3 \9 g, }' r
  12. #include <NXOpen/Part.hxx>
    2 k5 r4 ^7 W: T( J* q2 @% Q- Q5 g
  13. #include <NXOpen/ParTCollection.hxx>+ |: l1 |* R: r- _, ?1 d( G
  14. #include <NXOpen/SelectDisplayableObject.hxx>
    4 U8 M- u# y9 B  p' q
  15. #include <NXOpen/SelectDisplayableObjectList.hxx>
    $ r6 z  o: s2 i7 ~$ r% R6 j- f+ `. G: Z
  16. #include <NXOpen/SelectObject.hxx>4 ~6 I6 G, j2 T, ^! p! D3 I
  17. #include <NXOpen/SelectObjectList.hxx>
    % i! E- `/ T' n2 S
  18. #include <NXOpen/Selection.hxx>
    # J$ [$ _8 E4 }
  19. #include <NXOpen/Session.hxx>7 |$ f% r6 P* j- \
  20. #include <NXOpen/UI.hxx>! u+ @# J$ i6 Y& Q$ S5 w+ Y' E$ `. I6 E
  21. #include <NXOpen/View.hxx>8 |: X% s  a& F/ @! P. d
  22. ' |# g' z) U9 p( w6 z7 V
  23. #include <iostream>
    1 r2 b9 D8 i# ]' C- Y/ N
  24. #include <sstream># `7 }5 n4 k' y9 u7 @
  25. #include <list>
    + i( R: n. a) r3 |; m# s

  26. * _% b& d9 T' x- }+ I0 Z) Z- _
  27. using namespace NXOpen;
    ' v% a& q0 @! q
  28. using namespace NXOpen::Annotations;
    ( [. h2 W8 R+ v4 U/ X
  29. using namespace std;4 \. a9 W$ v: t& |: {( b

  30. : W4 O+ Q' x# i1 H8 n/ r& G, z% \6 R
  31. class Gtac- }) M4 f! T" E% C
  32. {
    " u! o) g' P* i1 m* s% V& z
  33.     // class members- X2 b' ~. J8 t- J: B# H! ^2 J
  34. public:
    + U+ D, e+ q( l% k: x3 N, `
  35.     static Session *theSession;( B5 I8 f) j: @3 H; v
  36.     static UI *theUI;# T% V" j% @' J
  37. ) [# |1 l% D) a9 J/ }2 G
  38.     Gtac();
    5 H! U5 O7 {. o) b7 ~5 `: `
  39.     ~Gtac();9 L; \4 u2 \. o' K% ]8 O, t

  40. * l3 z9 w3 h; p& y: S& j- N1 @7 Z" ~  i
  41.     void do_it();
    , P, B' l# j/ e& o# A
  42. 6 r0 }' @8 g5 I( j! T) x
  43. private:  Q& m9 w4 ~3 B9 i0 ?" `/ h
  44.     Part *workPart, *displayPart;* B7 @  _# I. m; }" l# R; }0 T
  45.     Selection *sm;
    # ^0 a( x- q0 ]; \# o+ V/ f$ n
  46.     NXMessageBox *mb;
    1 w9 @+ q2 s5 C! {, Y" t
  47.     ListingWindow *lw;
    " E0 e& i& _5 n! x

  48. $ t5 H) x# ?4 D/ p6 j: d
  49.     Face* select_a_face();: `0 u9 N# n' J0 b: o' t" b
  50. ' T" y" v" ^( Q( d9 V
  51. };
    2 A' w$ O' j  t1 M, [! H* \. j

  52. 9 T# N. |/ I9 A. `1 ^6 v
  53. //------------------------------------------------------------------------------
    / K- y% s" k$ ?1 g: r
  54. // Initialize static variables* F3 U0 d  f8 ^$ m6 m
  55. //------------------------------------------------------------------------------
    2 t6 q# h) ?/ A# p& D
  56. Session *(Gtac::theSession) = NULL;& U+ g" J( t% k, d# o2 P- f* n* N
  57. UI *(Gtac::theUI) = NULL;/ u9 `# k. S3 A2 Y( N; x( A
  58. 4 q( m: `3 s4 \# F  u
  59. //------------------------------------------------------------------------------, S% x8 u6 p7 _5 Q% H. x) a9 M7 f' E2 u
  60. // Declaration of global variables% H* }+ O" l- ?) B! T( K! E4 F
  61. //------------------------------------------------------------------------------
    4 f# r( ]1 t) Z- q: X% S0 F" @
  62. Gtac *theGtac;1 T- d: K5 b. W( ?. h7 s' [

  63. ; n. r& L" {- l, ]! E( u
  64. //------------------------------------------------------------------------------
    1 v( D( D/ _* X/ i5 G
  65. // Constructor3 u* v5 `) X/ `0 C
  66. //------------------------------------------------------------------------------* W7 o: v! W6 B5 ]
  67. Gtac::Gtac()8 Z* y1 R' U8 O% t" U+ J$ |
  68. {$ i; l6 K* L9 B8 [4 t' G) `
  69.     // Initialize the NX Open C++ API environment% m, R- p% j) F0 W
  70.     Gtac::theSession = NXOpen::Session::GetSession();$ q- P) C5 [$ m2 p- b
  71.     Gtac::theUI = UI::GetUI();
    % V7 y6 f- i# p3 `: R; R

  72. . R. m( |5 M. H3 k7 y) W' F
  73.     sm = theUI->SelectionManager();
    3 o5 {: a4 x2 t# Z
  74.     mb = theUI->NXMessageBox();
    , h* w1 k8 k" Z! g7 v( ~5 ~
  75.     lw = theSession->ListingWindow();, p6 x+ Y8 v. G. X4 D* W8 m

  76. - w. T' o7 x  u7 O
  77.     workPart = 0;  ^  T* w+ _* D: n" T* d' Y- e
  78.     displayPart = 0;
    0 F. c+ S' r& R' U
  79. }
    9 {! f; N; Z5 ^6 l7 p* X
  80. " R( J& R! Q* E: W2 O
  81. //------------------------------------------------------------------------------
    ! H' ]# M/ A8 H3 D- T
  82. // Destructor
      r. Z6 t/ Q% }/ d3 {
  83. //------------------------------------------------------------------------------
    % a+ J; {4 u& s  J5 q  q
  84. Gtac::~Gtac()
    8 |( z: c3 W* Z, d$ a) w( i
  85. {2 e) K4 f: X( v' e  x, y
  86. }
      t# y7 n7 |" b; @6 u# B
  87. 6 c0 Y) |8 b( o0 h4 p
  88. //------------------------------------------------------------------------------5 X6 v( M2 |9 \2 @: U9 b# e' S
  89. // Selection
    2 r2 w2 |" L$ c6 ~
  90. //------------------------------------------------------------------------------
    ; f. R" T) n0 a6 M( O/ U
  91. Face* Gtac::select_a_face()
    . E3 K) m8 \3 l* m. c4 d
  92. {2 U# K. A! U8 Q# J6 ^" l: A# R
  93.     // ask user to select a face
    ; N& s# M1 ^: s6 j7 J* {
  94.     UI *ui = UI::GetUI();) G' w4 j6 F1 Y& a- \' r* a8 m4 l) g
  95.     Selection *sm = ui->SelectionManager();
    9 U" G" ^0 M- m" a
  96.     NXMessageBox *mb = ui->NXMessageBox(); // as of NX5
    ) V7 [, d' ~: B) R1 i

  97. + u) Z" }5 X1 ^0 E- T
  98.     NXString message("Select Face:");: \; a) t3 J6 w, ?3 H  x, [+ Y9 K
  99.     NXString title("Select Face");
    2 u( u' _+ X/ \" h8 d3 S
  100.     Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;7 N# ~3 C& X0 F* H) \% t
  101.     Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;
    / G: u5 ~" |& `% M
  102.     bool include_features = 0;
    ! v6 R9 I% f7 H4 c4 x
  103.     bool keep_highlighted = 0;4 x. ~7 d6 O0 ~2 e4 C

  104. , ?* Q2 r$ w' B4 e
  105.     // Define the mask triple(s)
    ' }8 t, F3 _1 t1 ?! R2 ]  d; D
  106.     std::vector<Selection::MaskTriple> mask(1);
    8 l" \4 ?+ @; e
  107.     mask[0] = Selection::MaskTriple( UF_solid_type, 0, UF_UI_SEL_FEATURE_ANY_FACE  );
    ! F" N9 ^/ z0 |8 ]: S4 Q) k- X
  108.     Point3d cursor;# T8 i7 I) ?. w1 ~# k" E9 N
  109.     NXObject *object;2 u/ s, j- k& b/ A2 Z
  110. . l' l6 o& O! C
  111.     // Select objects using filter defined by mask triples
    5 z0 I5 C7 u7 G2 K
  112.     Selection::Response res = sm->SelectObject(
    9 t- V  M6 H# A+ b, {$ d& g. \
  113.         message, title, scope, action, include_features,
    # D; j  m8 a6 M6 E: W2 W$ ~. ?
  114.             keep_highlighted, mask, &object, &cursor );
    6 f, Y! c3 ^2 ?* E
  115. ; O7 E; x" V# o, p* i
  116.     if( res == Selection::ResponseObjectSelected )
    * H! f3 I: e/ a8 `' A9 U
  117.     {
    4 Y- ^7 K9 o: W! D* w# `% x) q1 j
  118.         Face *aFace;) `" }4 P) }8 y
  119.         aFace = (Face *)(object);
    8 g7 y$ ^& M9 D- i+ y6 R5 }2 k
  120.         return aFace;( E7 m  x+ C" J/ @- \) s
  121.     }* r7 }5 }/ [) H5 F6 n  }% |' I1 W

  122. ( I% W2 U' l, g1 V' ^
  123.     return 0;4 l6 K5 ?$ k2 a& y
  124. }& r7 X; h# B$ ?! D: i
  125. 2 j& A6 {' d% i3 f5 @- Z
  126. //------------------------------------------------------------------------------9 k9 {( u5 c" k& l
  127. // start with our job...
    % _0 g. O  T, H. X
  128. //------------------------------------------------------------------------------
    1 a$ v: e) T: {5 U% I& H, W
  129. void Gtac::do_it()8 X  b. h3 M5 b$ i9 w/ X5 J
  130. {
    6 x2 k) `1 g) |0 U$ k& a
  131.     workPart = theSession->Parts()->Work();# h' L3 |5 ]4 s2 h6 |" H, h( M, L
  132.     Part *displayPart = theSession->Parts()->Display();4 y% ~5 j) s1 S3 A8 R
  133.     stringstream out;7 C/ Z% n% s/ ?1 i, ~# p
  134. ; c* g  I1 v3 ^+ e6 Z
  135.     Face *theFace = 0;
    / u; C# C/ O" Y. @% t/ Z' @% t
  136.     std::list<Face*> myfaces;8 x9 k( c- ]4 u6 Z9 F
  137.    
    9 ~# ]; d$ v4 C. i- Q
  138.     while( (theFace=select_a_face()) != 0 )
    ! {- s" b/ k7 Z7 ?: b
  139.     {
    ( v5 k4 ]+ G. V1 A& Q) F
  140.         if(! lw->IsOpen() ) lw->Open();
    ) T4 k/ W1 V  M+ B  m* \2 B
  141. 8 x5 }% t7 Z* I  }2 \
  142.         out << "Selected Object: " << theFace->Tag() << endl;
    - q/ w/ ~- J; ]9 ]
  143.         lw->WriteLine(out.str().c_str());2 k/ k, M. |8 h8 E7 p: H0 M4 n0 h  ]
  144. . K9 G2 o! a/ W6 i9 B. e
  145.         std::vector<Edge*> edges = theFace->GetEdges();
    2 @  n8 H# |- B) s
  146.         out.str(""); out.clear();% F3 d% r4 c5 L4 D- t6 M
  147.         out << " Number of edges: " << edges.size() << endl;, F5 s7 e+ x# j
  148.         lw->WriteLine(out.str().c_str());8 `9 ~- j- q. a3 U

  149. ! q. ]- ?0 {2 M) u: C& x+ F5 p1 ?
  150.         for( int ii = 0; ii < edges.size(); ii++)9 S) j* k5 N$ L  m% V) u6 _
  151.         {# r5 a( T3 A; d, j* k
  152.             out.str(""); out.clear();
    3 {, O% v9 Q' s
  153.             out << " Edge: " << edges[ii]->Tag() << endl;7 ^7 g' `: Q/ w3 ~3 d" ~
  154.             lw->WriteLine(out.str().c_str());
    ! ~" l/ m- B. r- o

  155. 1 L+ u3 G% A0 \
  156.             std::vector< NXOpen::Face * > adj_faces = edges[ii]->GetFaces();
    & B! S6 p4 ?" \+ J4 k+ f. ~' m
  157.             out.str(""); out.clear();, o. F+ H8 h3 J% A% H
  158.             out << " Number of adjacent faces: " << adj_faces.size() << endl;# ^, d1 \% b+ f2 v
  159.             lw->WriteLine(out.str().c_str());9 L. u3 V& z0 [' w! d( L4 R; t

  160. ! l* Z. W7 _: O8 W
  161.             for( int jj = 0; jj < adj_faces.size(); jj++)  S/ q, V$ v  d: ^
  162.             {
    7 K" o3 b  }& O1 A( B: k8 ]1 H
  163.                 out.str(""); out.clear();
    + E1 N7 h3 Q8 Z' g* P. ~( H  q
  164.                 out << " Adjacent face: " << adj_faces[jj]->Tag() << endl;
    5 i$ X* m! o8 \& i5 W" ]) o
  165.                 lw->WriteLine(out.str().c_str());% F2 S# C4 G" l9 k# B  A1 @
  166. 6 W! n) I4 q( ~& s( p- l
  167.                 myfaces.push_back(adj_faces[jj]);% J# ~: h/ P, d& [( I

  168. 5 [6 H, \; i- ]& k0 j
  169.             } // jj+ N+ W8 I* u' T2 m' @8 G
  170. + F) t) g* J6 v8 @3 _7 a
  171.         } // ii
    7 e, d7 l. g" d

  172. ( ~9 Y' ?4 w: `* q) g2 k! t8 X
  173.         myfaces.unique();7 E; l8 c) s! k/ ^6 y. e* \0 i* h
  174.         for (list<Face*>::iterator it=myfaces.begin(); it!=myfaces.end(); ++it); l9 E  Z: F) G/ y; h' I9 m( J
  175.         {
    8 ]' T: l, O0 g0 @1 {
  176.             (*it)->Highlight();+ X- h4 g; z3 x/ U
  177.         }
    9 q8 x, Y3 z% ~/ \" T4 b) l; E/ }
  178.         Gtac::theUI->NXMessageBox()->Show("Adjacent Faces", NXOpen::NXMessageBox::DialogTypeInformation, "Confirm");) b8 P; A7 O, ~; h& F) J7 I
  179.         for (list<Face*>::iterator it=myfaces.begin(); it!=myfaces.end(); ++it)
    9 L9 t/ e1 v6 ?, k4 q/ S
  180.         {
    ( N) T" r4 J1 s' y# B' O, d
  181.             (*it)->Unhighlight();
    + b4 d7 K5 k4 }6 O
  182.         }
    ! E! p+ [5 `' S; {8 Y8 b
  183.         myfaces.clear();
    % z, J/ ]2 }/ M6 w: C
  184. - x# z. ~3 A7 `+ E! a& r5 [
  185. 0 q1 M, p, p9 M
  186.     } // while
    , i  b3 O3 K' N: D
  187. }0 C5 L7 E9 J" r, g7 m8 b1 j* L2 Q
  188. + u' T) @: R" g1 z7 }. \" n
  189. //------------------------------------------------------------------------------
    4 y9 E! j; Y2 `  ]
  190. // Entry point for our unmanaged internal C++ program% E: T5 I3 y0 |: ?6 n
  191. //------------------------------------------------------------------------------
    ; E# S) g% ^- H: r/ W; [) v* Z
  192. extern DllExport void ufusr( char *parm, int *returnCode, int rlen )
    $ B, v9 Y# g% Q/ T. U8 h
  193. {) R) [3 g' j5 ^; x. }
  194.     try
    ' w, U$ `# m  v9 A* n
  195.     {& l# m1 E& C1 c5 k1 U# ]
  196.         theGtac = new Gtac();
      v3 ]' B* c: B/ T8 t
  197.         theGtac->do_it();1 `+ J2 y6 `9 m$ a7 F
  198.         delete theGtac;% v* t. S; K$ t# {6 j  c" }  [
  199.     }; a0 a) w" m% h( w& F7 y5 ~
  200.     catch (const NXOpen::NXException& ex)+ ~: v+ j: ~+ w
  201.     {
    , \. k' L5 @, h+ ^8 q( s
  202.         // ---- Enter your exception handling code here -----
    # u$ Q+ E  q7 b# T9 d" ?1 w
  203.         Gtac::theUI->NXMessageBox()->Show("CaUGht Error", NXOpen::NXMessageBox::DialogTypeError, ex.Message());
    ! ^* O8 w  Q5 O5 d8 ~* n4 D# r. S
  204.     }
    2 y8 S. j% t! e, A$ }8 p* g
  205. }
    . @6 C- l- c! t

  206. 2 U5 E" j8 F$ [8 N/ Z1 @0 ^: U$ q8 y

  207. 4 {: L1 Q! Y4 s$ B) U$ ?. @
  208. //------------------------------------------------------------------------------
    , l$ j# d5 \, F& \
  209. // Unload Handler5 _/ |& H: a+ ^* o9 p; i$ v) F5 ^* T) n
  210. //------------------------------------------------------------------------------" M) ~+ Y1 V; E8 }% g
  211. extern "C" DllExport int ufusr_ask_unload(): J; k' H( ?; w4 |) y! U' b  [
  212. {1 n% l! I' s1 ~
  213. return (int)NXOpen::Session::LibraryUnloadOptionImmediately;
    5 l4 w% _# r% ?; W; F* A
  214. }
    ; ?1 j5 N( U3 k
  215. : t/ `  x! [- O) J& [
复制代码
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了