PLM之家PLMHome-工业软件践行者

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

[复制链接]

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

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

admin 楼主

2013-11-6 18:54:58

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

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

x
通过这个代码,可以获取选择面的相邻面的信息
5 r# y8 a. T) D9 S5 ~NX open C++中使用了 选择对象 selectobject 函数,通过面获取边数据,通过边获取面,从而得到信息!
1 o/ l+ c" u3 B9 G2 k, H  V2 \, H# ]% ]
  1. #include <uf.h>2 l, L: l0 f5 y8 ^8 b& J
  2. #include <uf_ui.h>9 w! S5 X6 Q, j! i6 q9 b* u: f/ m7 _
  3. #include <uf_object_types.h>+ v5 s  C% Z; J

  4. $ X  t- B2 b5 n, t% |$ ?
  5. #include <NXOpen/Edge.hxx>
    5 s8 N3 z+ \; i3 M
  6. #include <NXOpen/Face.hxx>5 C3 ~" c( x8 M7 K  U' N" O. {; g9 m

  7. 5 y. s8 X) F7 Z8 _* Y9 {
  8. #include <NXOpen/ListingWindow.hxx>
    , Z1 D  q+ `& R$ d8 _& f
  9. #include <NXOpen/NXException.hxx>8 a5 P( C" e3 ^5 t1 |& S' ^2 \
  10. #include <NXOpen/NXMessageBox.hxx>
    * G! m! m6 L$ m+ R. n
  11. #include <NXOpen/NXObject.hxx>
    + ^' y' w4 L* ~
  12. #include <NXOpen/Part.hxx>6 B6 U: R0 R8 M
  13. #include <NXOpen/ParTCollection.hxx>
    6 B! p3 `% \! z; a6 n% S
  14. #include <NXOpen/SelectDisplayableObject.hxx>  z5 B7 A' H3 J2 A! `7 P( D: A
  15. #include <NXOpen/SelectDisplayableObjectList.hxx>) s! {( z! g3 q6 v) U: M
  16. #include <NXOpen/SelectObject.hxx>
    . F+ B1 \, u5 H
  17. #include <NXOpen/SelectObjectList.hxx>) _3 s; X* S$ C9 X
  18. #include <NXOpen/Selection.hxx>9 a8 t+ U0 }! x' k
  19. #include <NXOpen/Session.hxx>7 Y9 U$ d; r4 ~) N" G
  20. #include <NXOpen/UI.hxx>
    * U( T' y0 m+ I) T9 F8 X: C+ |5 P
  21. #include <NXOpen/View.hxx>
    # o' R( P' u0 k1 G/ }  E
  22. * G# E6 V. D6 y! |8 T! w( U
  23. #include <iostream>
    ) g  T( C' m6 H; A, H$ u! ~
  24. #include <sstream>) Q7 ^: h- c( |. \5 r
  25. #include <list>
    , p- ~; W# d  ]

  26. * d3 P" K  l4 q9 c- ~( X
  27. using namespace NXOpen;2 v: [/ n/ @0 z: g, `
  28. using namespace NXOpen::Annotations;9 Q+ w( V3 D  D, h
  29. using namespace std;
    3 I; n* P1 D/ L' k' v2 S

  30. : ^( S% }8 E  o1 ]5 [
  31. class Gtac
    % h4 l- o2 y$ h! H+ I5 _
  32. {/ o" `( X/ Q3 f2 Z8 {1 T
  33.     // class members' y$ K2 {/ F+ G' i
  34. public:
    2 R9 T: E0 g8 j8 ~: M/ H
  35.     static Session *theSession;9 E( I# J. J6 J$ o8 z& ?0 K
  36.     static UI *theUI;
    $ I+ A3 S$ Y. v) `! N, y. Z
  37. . i$ V! m2 j. O0 `+ z4 V; F
  38.     Gtac();% G  b4 o; D0 W4 n2 ^
  39.     ~Gtac();- A+ ^$ P8 G" C' c
  40. 4 p5 f# v: i: T/ e1 ~
  41.     void do_it();
    ' W2 f. f3 R0 R

  42. 2 X8 m/ J+ y3 S2 q  c' n5 {
  43. private:/ M* F% `* \9 q- h% E8 @7 u8 u
  44.     Part *workPart, *displayPart;
    8 C) o) O# r+ r  \
  45.     Selection *sm;
    : c$ t( B& W* N- I8 ~8 F4 C& L
  46.     NXMessageBox *mb;
    ' R- A  p" [* f- F! Y4 v
  47.     ListingWindow *lw;
    ) g% @4 @8 [/ t  O1 R( }0 T7 B

  48. 9 K  l' S% P' d, ?
  49.     Face* select_a_face();
    - l8 Z" |8 ]3 F! Q( M: i4 i

  50. ) ]$ X; Q# g. n
  51. };
    1 m! s5 Q& ]) ]# D7 h9 k0 P
  52. % T4 Y" K& _0 O- T8 N0 w( G0 ~
  53. //------------------------------------------------------------------------------
    4 P" `2 n+ f! f% t; G2 y
  54. // Initialize static variables5 d# ~  w% J+ _  D1 x
  55. //------------------------------------------------------------------------------
    - _1 [5 r4 _) M6 U( }
  56. Session *(Gtac::theSession) = NULL;# P% D% v. b! j% B
  57. UI *(Gtac::theUI) = NULL;
    8 t! t9 p3 U) j, I0 l) P

  58. , U! C/ Q  E) ]1 \
  59. //------------------------------------------------------------------------------  w9 B& m$ g& f$ V8 \
  60. // Declaration of global variables$ {# Q5 r4 }$ ?- M+ o* t' y' R0 ]2 A; x
  61. //------------------------------------------------------------------------------
    - c' l# i8 B  L& O/ C5 D# M5 r2 f
  62. Gtac *theGtac;" v# m- L8 y; P9 k9 u* q) ~4 ~

  63. $ R5 P2 R0 n& L4 y" q" ~6 {! U
  64. //------------------------------------------------------------------------------
    " @, Y! [+ w) M" Z
  65. // Constructor
    ) }9 B( W8 \, L/ b9 w  O& R/ U
  66. //------------------------------------------------------------------------------
    7 p* y6 t0 I2 d) ~+ {- d
  67. Gtac::Gtac()
    7 ]+ K5 c  T" S1 H
  68. {
    3 x3 H+ t* Q( {
  69.     // Initialize the NX Open C++ API environment
    & G5 K! h: b' k+ M, g. R% q
  70.     Gtac::theSession = NXOpen::Session::GetSession();
    4 }! p& X7 I1 N2 w8 J
  71.     Gtac::theUI = UI::GetUI();8 e  ?2 s  G6 ]" w/ ]& z* R4 M" U# M
  72. . X( y7 j) ]' J; _
  73.     sm = theUI->SelectionManager();
    1 M6 K! k+ n% G% W9 T. s
  74.     mb = theUI->NXMessageBox();
    / n3 l! ~3 r& f  r9 i& P
  75.     lw = theSession->ListingWindow();% L) T) ]* i4 ?9 u" \, q5 c2 e

  76. 0 z' q/ _2 J5 N
  77.     workPart = 0;$ a( n1 z" \0 o- C
  78.     displayPart = 0;8 h6 C7 O) P9 N' }
  79. }$ Q* d) X/ l; x  d3 T

  80. 7 k8 N4 Z1 a/ @$ @$ x; `( f# N
  81. //------------------------------------------------------------------------------
    / C9 ?9 P$ C: Q
  82. // Destructor" u( }+ ?+ X' L+ k) Z
  83. //------------------------------------------------------------------------------
    " N  ^' }. [, h$ U# x6 s
  84. Gtac::~Gtac()1 t2 O$ J+ Q' s7 r, w1 [5 |2 f# ?
  85. {
    : ?" o" [; M8 w+ p+ D! H1 Q5 e
  86. }% k5 T" t" D( G; a
  87. : b& i' a) e9 D
  88. //------------------------------------------------------------------------------0 c0 W9 ~0 i, ~+ {0 P4 J8 [
  89. // Selection1 m6 `. Y0 Y/ [
  90. //------------------------------------------------------------------------------
    1 P, O7 x1 I. K# v3 e; U
  91. Face* Gtac::select_a_face()
    7 [; n' e: m# s$ g
  92. {3 z: K3 o! Q  K* Z" \& Y; l9 |9 A
  93.     // ask user to select a face
    & \0 p0 H% s9 ~' r
  94.     UI *ui = UI::GetUI();
    $ K/ N) o" t, C5 U4 J/ h
  95.     Selection *sm = ui->SelectionManager();- g; _  e; F/ x+ b$ w" p6 i0 b
  96.     NXMessageBox *mb = ui->NXMessageBox(); // as of NX5# b$ ^4 N5 q( B9 l( S  T# X5 r3 f

  97. 2 q* Y, K2 p' a+ m' {$ [
  98.     NXString message("Select Face:");9 w+ \! V: f- b% g: g6 T1 o/ T$ H/ q! l
  99.     NXString title("Select Face");
    - u7 B5 V) b& i# q
  100.     Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
    - k( R5 d: u/ V) f9 @9 w$ i$ @' {
  101.     Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;8 L7 V8 j% e4 ~" l
  102.     bool include_features = 0;" F) g  i& g) ^6 U5 E. H% R6 ?
  103.     bool keep_highlighted = 0;7 s: X% M; a0 E. B& @
  104. * f% E' J# Y0 C( D0 G: h' F0 S$ e
  105.     // Define the mask triple(s)
    . i. U7 s) o% c) s9 ]
  106.     std::vector<Selection::MaskTriple> mask(1);- E1 A  V: z  n, ]. @
  107.     mask[0] = Selection::MaskTriple( UF_solid_type, 0, UF_UI_SEL_FEATURE_ANY_FACE  );
    " W  b4 ^, i; X4 o: l9 |
  108.     Point3d cursor;
    8 T$ A$ Y( U2 I6 ^
  109.     NXObject *object;
    2 o$ [$ C# h6 ]/ E- B
  110. 5 o9 U6 @( _1 E/ }5 j- g
  111.     // Select objects using filter defined by mask triples, N2 [( P# G% q
  112.     Selection::Response res = sm->SelectObject(- Z$ ]' [1 Z7 H
  113.         message, title, scope, action, include_features,
    " G* c3 N! T7 u$ i) N
  114.             keep_highlighted, mask, &object, &cursor );
    / T, {6 H( |- W. Q3 [

  115. : B  z$ r- N2 b3 I2 q
  116.     if( res == Selection::ResponseObjectSelected )% v0 A! O) ~) r# v
  117.     {
    , U  b$ o5 s$ S
  118.         Face *aFace;( V9 K* x8 C9 x9 s7 a4 `
  119.         aFace = (Face *)(object);
    2 O- Y) C: B% Z- c6 w' u
  120.         return aFace;
    8 @2 Z" h( P( I1 i1 Z8 O
  121.     }
    % @: T- I4 x: Z5 O6 i# c

  122. ! y, f& f: N6 j6 C
  123.     return 0;
    % F2 w! q. O# k; i6 q3 S
  124. }
    5 G" ^8 g1 [' V& x, o
  125. 9 H7 t/ ~' P0 u, ?$ w* e* H* ^
  126. //------------------------------------------------------------------------------
    0 t5 u, ?+ O  `+ u( t6 t( `3 k( `5 s
  127. // start with our job...& N8 [; o8 l& _- p, ]
  128. //------------------------------------------------------------------------------* [3 O& M1 }2 m3 m
  129. void Gtac::do_it()
    & E* K- v0 W, x3 D( Q+ R& H
  130. {
    ) G! ?6 `9 P+ R1 ?
  131.     workPart = theSession->Parts()->Work();
    2 ]3 ]' V. N& [5 {
  132.     Part *displayPart = theSession->Parts()->Display();* i/ O/ r# T6 D1 _# q* P
  133.     stringstream out;
    * G- e3 K1 i1 z% S. m5 `3 W

  134. & ~0 t( W( V. h2 D1 A
  135.     Face *theFace = 0;) M; k$ u- e  ~7 _
  136.     std::list<Face*> myfaces;
    ) }: \6 |  J; h2 _1 |/ u
  137.    
    ( c. f! s/ x( B0 E3 d8 W
  138.     while( (theFace=select_a_face()) != 0 )7 e  O- ~7 W. [
  139.     {1 V7 j7 ]; A2 W' |( \! [/ s
  140.         if(! lw->IsOpen() ) lw->Open();; J/ u  m0 m* Q* ]

  141. + l% U- u; K1 E$ k0 S( A
  142.         out << "Selected Object: " << theFace->Tag() << endl;4 U' A1 q$ [  Q
  143.         lw->WriteLine(out.str().c_str());
    6 U; ~+ Q( Q7 L' c8 P7 R  b
  144. ' V8 `# Z# R! N* V( }' b
  145.         std::vector<Edge*> edges = theFace->GetEdges();
    7 k) l8 s: j( T" e4 _3 m9 |
  146.         out.str(""); out.clear();
    ' L. Y' d+ |' m6 B# p- p7 _0 F$ [
  147.         out << " Number of edges: " << edges.size() << endl;' `: t' V8 v' H7 B" r! v
  148.         lw->WriteLine(out.str().c_str());0 x) C$ \$ x( {% p8 K0 k

  149. 0 k' d. x7 O  z! X) b+ B
  150.         for( int ii = 0; ii < edges.size(); ii++)
    1 `1 P' E- W9 I# ~6 ~: o) Z
  151.         {
    $ m) h- l. h+ F" w, v
  152.             out.str(""); out.clear();
    ' V5 w  r6 b1 b
  153.             out << " Edge: " << edges[ii]->Tag() << endl;3 s1 v' Z4 z4 \0 w' E( M  x1 ?
  154.             lw->WriteLine(out.str().c_str());
    1 D7 S" V" [. ?" S# ^# K

  155. + g+ y! C) T( Z  @# s
  156.             std::vector< NXOpen::Face * > adj_faces = edges[ii]->GetFaces();
    - L: G7 c+ m8 e
  157.             out.str(""); out.clear();$ U, v0 D4 ~1 v8 D# l0 c- _
  158.             out << " Number of adjacent faces: " << adj_faces.size() << endl;
    , V* c; |" I) i) f5 V% T
  159.             lw->WriteLine(out.str().c_str());
    : z( ]3 P6 j6 {3 m# q/ t$ A
  160. 1 n$ s% C/ q9 L( [9 b1 Y& D/ n2 E
  161.             for( int jj = 0; jj < adj_faces.size(); jj++)$ B; F6 m9 |& W
  162.             {( l+ p" Y7 j" H# O9 i/ C
  163.                 out.str(""); out.clear();
    4 U) g" \: h' r& u- f- ^% g
  164.                 out << " Adjacent face: " << adj_faces[jj]->Tag() << endl;
    * K. W  `6 a7 c3 \3 g% Y
  165.                 lw->WriteLine(out.str().c_str());: s# K- ~% J  ]2 {# h  z
  166. : S  v# o' D! D2 R) e8 }
  167.                 myfaces.push_back(adj_faces[jj]);; D' T  s, f2 Y, R4 e, \4 [2 I" s3 M; Z
  168. 5 n2 |+ }  r4 J
  169.             } // jj( o9 i6 E) ~6 ^) ?8 o' w) q$ i

  170. + o5 J. C) W, @" r
  171.         } // ii, R0 M- A, q  r

  172. ) o, v" d6 i3 g8 k4 T
  173.         myfaces.unique();
    . r# T3 r+ \' E( ^6 L
  174.         for (list<Face*>::iterator it=myfaces.begin(); it!=myfaces.end(); ++it)4 e/ b2 d/ u& `' e6 L6 J; z
  175.         {7 Y6 k0 {  j9 T
  176.             (*it)->Highlight();9 S- A# i% q4 N2 Q
  177.         }
    2 E- O6 [5 Q  ?
  178.         Gtac::theUI->NXMessageBox()->Show("Adjacent Faces", NXOpen::NXMessageBox::DialogTypeInformation, "Confirm");3 E" \! L- A5 @8 H1 K2 x; S
  179.         for (list<Face*>::iterator it=myfaces.begin(); it!=myfaces.end(); ++it)
    3 |/ F# V7 |, Z( u1 @. [5 W2 X
  180.         {9 z7 V; [! j4 j( ~8 ^" |  L: `& \
  181.             (*it)->Unhighlight();) B& _+ b- a( m1 I# b( B
  182.         }
    1 \8 M5 x+ g9 X
  183.         myfaces.clear();
    4 m3 o6 L) _# g0 }5 `. ?4 p
  184. 5 _/ M2 Z! c* z& D: o
  185. $ d9 Y/ q5 ]- G, J
  186.     } // while
    6 v* F% Z2 O- z  a$ d3 R" I
  187. }  `) P3 S; |& \
  188. 0 o, u! y) [, e2 d$ D, ?' ]
  189. //------------------------------------------------------------------------------
    + k! ^/ @7 k! b, [2 c' }
  190. // Entry point for our unmanaged internal C++ program0 M# j# q& I0 T
  191. //------------------------------------------------------------------------------* v# X% Y4 M3 A1 j) _4 U  r
  192. extern DllExport void ufusr( char *parm, int *returnCode, int rlen )
      R  ]' f( P" W1 x! k% Y% Z
  193. {
    6 N" l( |" T, v9 A  B* W
  194.     try
    - P1 o; o2 E" z1 P
  195.     {! a5 B3 X# [' O; F' o- {) r( N
  196.         theGtac = new Gtac();; k: p1 `; ?4 u, _% v
  197.         theGtac->do_it();
    6 H' ]( B6 [8 p- H+ R4 n& v
  198.         delete theGtac;
    & k8 m# k% L% C0 I' _$ \" `5 t7 q9 N
  199.     }
      @  Y& P; x) `0 k' x- \
  200.     catch (const NXOpen::NXException& ex)7 ]5 m0 n7 p: b& N  p! F4 p" g0 P% u  F
  201.     {5 l6 u9 E  L+ x, k7 g% J
  202.         // ---- Enter your exception handling code here -----
    6 q) o( g% ?6 h7 @! ^/ G
  203.         Gtac::theUI->NXMessageBox()->Show("CaUGht Error", NXOpen::NXMessageBox::DialogTypeError, ex.Message());! M9 A" D' `/ ?5 t0 D
  204.     }
    . C( z  O: Z6 k& e% m
  205. }& f7 @- S; Y; `6 E# X
  206. . j( P0 n! `9 t0 k+ M

  207. " h/ `8 z; T5 B& d0 F& d
  208. //------------------------------------------------------------------------------
    8 s0 \, P% }3 z9 ?. r" t" @$ F3 g
  209. // Unload Handler" ?; p, t# t- w1 H
  210. //------------------------------------------------------------------------------* @, A! w, O3 V) u/ _' _+ @. i' P8 p
  211. extern "C" DllExport int ufusr_ask_unload()
    - [& z, n" }7 F1 ^
  212. {( r! R) A6 T6 u- a
  213. return (int)NXOpen::Session::LibraryUnloadOptionImmediately;
    ) x4 X& s7 @! T% E
  214. }
    & ]: R) g3 u1 i9 s" p0 t( j

  215. + }$ A' v9 @* v
复制代码
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了