PLM之家PLMHome-工业软件与AI结合践行者

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

[复制链接]

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

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

admin 楼主

2013-11-6 18:54:58

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

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

x
通过这个代码,可以获取选择面的相邻面的信息, p! C9 C1 K' v' r. H3 U8 u
NX open C++中使用了 选择对象 selectobject 函数,通过面获取边数据,通过边获取面,从而得到信息!
5 T9 }! R* e) r& n6 n! w' U+ C7 Q8 n) m: y$ n5 [8 T7 v/ M; j
  1. #include <uf.h>. Y- D4 J2 f7 n- I" B2 ~
  2. #include <uf_ui.h>
    ; b3 x1 r* l3 t3 G1 a7 M  `" P
  3. #include <uf_object_types.h>
    ( T& {4 e0 y9 ]5 |0 X
  4. ' p4 q4 H5 I$ A) k* k4 j- i
  5. #include <NXOpen/Edge.hxx>2 \+ x0 c( g7 V% |/ k5 u* W6 U
  6. #include <NXOpen/Face.hxx># o5 n0 }6 a3 l- ^* |0 V2 K
  7. : o* L& t$ ~3 }' W1 W) @# f: I( c
  8. #include <NXOpen/ListingWindow.hxx>
    1 l, ^) o3 }5 q3 b! i* {" i
  9. #include <NXOpen/NXException.hxx>1 H* f* k. @+ W; p/ L
  10. #include <NXOpen/NXMessageBox.hxx>
    ) s+ F' ^( R2 |" @% r% [
  11. #include <NXOpen/NXObject.hxx>5 b1 x* |) `+ ^
  12. #include <NXOpen/Part.hxx>( Q) w* a0 v+ T: r5 T6 o
  13. #include <NXOpen/ParTCollection.hxx>3 W9 q  `9 ^; R% T8 u6 j
  14. #include <NXOpen/SelectDisplayableObject.hxx>, v$ K! n. S& Y" g" C; K8 m% X9 Y
  15. #include <NXOpen/SelectDisplayableObjectList.hxx>
    2 P! ?. A! W; q& Q) c
  16. #include <NXOpen/SelectObject.hxx>. c6 g4 g7 Y$ w; N7 d8 G9 m
  17. #include <NXOpen/SelectObjectList.hxx>$ O1 W* A# H  A. O4 N- \; w
  18. #include <NXOpen/Selection.hxx>- h0 O9 p: H/ L1 Z! j
  19. #include <NXOpen/Session.hxx>" U0 U5 n( j) H; x! G9 P% f2 v% [- Y
  20. #include <NXOpen/UI.hxx>
    % w; j8 M8 T' k
  21. #include <NXOpen/View.hxx>
    1 I0 B6 ~, u; b3 C! m

  22. # m: I: T) y# P. `% c! {1 U. z) A
  23. #include <iostream>/ I' ~4 y8 S2 Q( d
  24. #include <sstream>
    3 n* G8 d- \4 c# m( C: `& Z
  25. #include <list>& `- n  l4 S% P% U) {4 p- j

  26. 4 ~$ b( t6 r0 U: D! m& i
  27. using namespace NXOpen;
    " Y' p1 f9 ^4 F1 B$ X( Q5 S0 ~" v
  28. using namespace NXOpen::Annotations;
    + |0 R0 ~& R' n8 _  ?
  29. using namespace std;
    * e6 k; t& U; R- t- n" V9 T6 C. B

  30. + q- K. ^3 `% J
  31. class Gtac
    $ _6 J0 p8 g2 t5 F% ]9 L, O% u
  32. {7 ^) Z5 N6 e, c* d; ]; @8 L
  33.     // class members; O  i+ A/ b1 N
  34. public:' A9 p) v! C6 {1 w
  35.     static Session *theSession;
    / J5 V5 Z2 ^8 W4 v
  36.     static UI *theUI;. Y  |/ ~5 ]4 G% y

  37. $ m- B: R: C5 n
  38.     Gtac();5 X. D! w3 y" S) ]
  39.     ~Gtac();3 I) h% Y, z) G8 I7 ]9 O. h6 V5 c; M
  40. . ]2 d3 u9 P7 O) H7 B: F% p% f
  41.     void do_it();  y" |; F3 w9 w# }. X2 _
  42. ) ~# C4 b" d' T2 l/ p% i
  43. private:; J! u6 Q5 X1 j3 v
  44.     Part *workPart, *displayPart;' q. `' w# R8 {# `$ Q! @
  45.     Selection *sm;
    + a0 z" D# }# o" H6 @5 _. W4 [; \
  46.     NXMessageBox *mb;
    4 O* i$ R! n, o# @6 [  _/ Z
  47.     ListingWindow *lw;$ L) @: i  G/ q! W! e( `$ h) g4 I

  48. 3 g; a; K- e0 _
  49.     Face* select_a_face();# F, G4 z# M$ V( v% x; r: R& j) P

  50. # C, s+ A; V' ]& k7 x# `: L
  51. };
    2 W& I5 j2 D8 M
  52. $ P9 q4 ~$ E" k4 F) F
  53. //------------------------------------------------------------------------------
    # T( p. x8 x5 x& q9 S
  54. // Initialize static variables
    1 M2 c. ?" S9 n
  55. //------------------------------------------------------------------------------3 l& U- w$ m, F4 s4 C" {
  56. Session *(Gtac::theSession) = NULL;
    ! j" w7 Y+ Y) q9 b2 ?4 \. J( x) F" @
  57. UI *(Gtac::theUI) = NULL;
    : y, n6 X5 t; F6 ~

  58. & I2 X3 o$ O$ t. J" u2 x
  59. //------------------------------------------------------------------------------# o4 |5 g; }& q  Q% h; P. s
  60. // Declaration of global variables6 e& a; H/ Y  Y7 S
  61. //------------------------------------------------------------------------------
    6 c+ N+ R; S! Z: U  q
  62. Gtac *theGtac;6 k* W1 x4 ?3 l3 c; E4 r

  63. . D7 K' N% d( b4 H$ I+ D
  64. //------------------------------------------------------------------------------
    + R- I# D7 ^6 F; r
  65. // Constructor* v0 ?+ D5 z& D
  66. //------------------------------------------------------------------------------. x+ f$ r; o- R  G/ w7 D2 c
  67. Gtac::Gtac()" v2 \, J7 E5 g) F/ G
  68. {: n! C; ^- V3 I1 x4 N) m
  69.     // Initialize the NX Open C++ API environment3 L4 m& B) o# }  _% C$ P5 d  Q" C
  70.     Gtac::theSession = NXOpen::Session::GetSession();
    5 A2 x9 [/ A( y3 x) F8 M
  71.     Gtac::theUI = UI::GetUI();: d: B# Y0 S0 k: S/ A3 h# ~, ?

  72. 7 q3 k% O3 G' Y4 d
  73.     sm = theUI->SelectionManager();
    : @: B7 a0 W- o$ o  N& ~( B5 ^. k
  74.     mb = theUI->NXMessageBox();
    ) L7 k  B( [) N; p2 [
  75.     lw = theSession->ListingWindow();
    : \( I3 h( \" s' B

  76. . Y: }7 M$ `3 S+ `
  77.     workPart = 0;
    . g- T: E( K' q
  78.     displayPart = 0;- ]: r( i) E* A: l) Q0 b$ n6 I
  79. }: a( i! ]' }( @+ K2 [( k' }% d# G

  80. 1 g* u: q% E" |
  81. //------------------------------------------------------------------------------% ~, v4 b. d, N. L, A5 J
  82. // Destructor
    . l0 P! E4 V' G) s3 V
  83. //------------------------------------------------------------------------------! P6 l' f3 N! w
  84. Gtac::~Gtac()
    2 ?, [' n% P( u5 c! S
  85. {
    1 z* ]) k/ N% v( ^
  86. }
    . I( m" N% a8 M8 s8 T

  87. - j1 n6 z! l. ~8 J
  88. //------------------------------------------------------------------------------  A2 k0 Q6 C% p2 |2 e' ?" ^
  89. // Selection* R0 O/ T& Q$ N9 S+ \& o
  90. //------------------------------------------------------------------------------
    5 y# \4 ^- ^& e- L
  91. Face* Gtac::select_a_face()
    4 y  E- x/ K9 r) }9 c* Q! C  S
  92. {9 T/ x& X/ f, Q
  93.     // ask user to select a face( I0 W) e$ d+ o$ i1 L/ p
  94.     UI *ui = UI::GetUI();" g$ r  V6 W) L9 h8 d
  95.     Selection *sm = ui->SelectionManager();: j( Z; x) Z. t" z) ^+ L$ J, `
  96.     NXMessageBox *mb = ui->NXMessageBox(); // as of NX5
    2 a3 y1 l0 F, B) O7 R

  97. , Q  Y3 }2 E. E2 L: \$ t# \' k9 G
  98.     NXString message("Select Face:");4 m- B- x+ [# `
  99.     NXString title("Select Face");
    8 E) l7 S# z1 V$ l
  100.     Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;7 S- k0 h2 h! [( I- N6 x
  101.     Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;, Q7 @4 k( }  q0 [# y5 f
  102.     bool include_features = 0;
    & `: Q7 g' _2 ^8 `: F, b
  103.     bool keep_highlighted = 0;
    * K/ z3 m, l! d: R

  104. $ n. h+ H+ _- |/ C) b, E* \2 p( m
  105.     // Define the mask triple(s)" C( v, b% v2 y# K
  106.     std::vector<Selection::MaskTriple> mask(1);
    5 x" \- H! i% f8 g. [: J
  107.     mask[0] = Selection::MaskTriple( UF_solid_type, 0, UF_UI_SEL_FEATURE_ANY_FACE  );
    7 B/ _5 I* \4 a1 {0 e% p5 r
  108.     Point3d cursor;: G5 b# U# j) v0 c
  109.     NXObject *object;
    + {. |4 @' F% t& u; M7 H$ b
  110. 2 {5 O. y( |6 U/ T# K& M
  111.     // Select objects using filter defined by mask triples4 T7 K! _+ V0 N$ _  C0 J' P
  112.     Selection::Response res = sm->SelectObject(
    - x; O! O) \( N% q& M" Y
  113.         message, title, scope, action, include_features,3 s& ^  i2 W. T+ \9 w, _
  114.             keep_highlighted, mask, &object, &cursor );
    * h! s- W' b" E4 u1 t$ e+ a

  115. ( H+ N! A: I& t& \! M
  116.     if( res == Selection::ResponseObjectSelected )
    + B. z0 ?. \( W0 O& T3 ?
  117.     {
    2 g3 ~" B+ _3 p* d& z! ]$ X
  118.         Face *aFace;- W8 Z' I5 g% X' A
  119.         aFace = (Face *)(object);* c/ ~( ^" p5 w2 i1 \* r" O
  120.         return aFace;: F, K: B4 p1 q* p4 A5 p. `
  121.     }6 k( C) @- I2 ?/ r: F* C0 j! O
  122. / X+ ^& d% }  p4 z. X/ Y
  123.     return 0;
    4 h; }  c" y0 m6 M' w8 [5 _
  124. }
    5 F7 \$ `7 S7 S6 e' Z

  125. 9 T6 y# ?0 z5 C. C( w( N! S* p
  126. //------------------------------------------------------------------------------4 `  t  R6 ~4 Y% N  b0 W+ o
  127. // start with our job...: N$ I# C+ H0 v: B
  128. //------------------------------------------------------------------------------
    / u& X( r4 J/ s
  129. void Gtac::do_it()  y# m( `; m1 O6 _$ Z; Y1 A/ z8 ?
  130. {" D  }' C0 U' n! ~  L
  131.     workPart = theSession->Parts()->Work();7 S/ v# j/ ]/ f! r% |) c; z
  132.     Part *displayPart = theSession->Parts()->Display();
    ( P+ M8 t: k' O" x% Q) p! t; O
  133.     stringstream out;
    4 I$ ]$ ?9 T$ h% r( Y/ B

  134. , A2 `* v& P4 n$ X/ p& ]1 R& H
  135.     Face *theFace = 0;7 j' K* Q$ G2 E  v! U* I* t
  136.     std::list<Face*> myfaces;6 f* l9 w2 d$ D9 I9 h9 O% G
  137.     + U4 d5 H- c" F* s+ b# l' h8 i
  138.     while( (theFace=select_a_face()) != 0 )
    * _) G+ `- N7 t- z, A  e
  139.     {$ y9 |0 M; j) t+ F, `: Z' ?( g
  140.         if(! lw->IsOpen() ) lw->Open();- N3 f7 W, ?( p7 X# P

  141. " U4 Z) E6 m8 g" k
  142.         out << "Selected Object: " << theFace->Tag() << endl;1 p* a# \8 R7 ^. m) X
  143.         lw->WriteLine(out.str().c_str());
    & x' {- i4 l3 ^

  144. 0 j; n+ ]5 O! e% D9 s
  145.         std::vector<Edge*> edges = theFace->GetEdges();  Y2 N+ N( g! `: [! Q3 E
  146.         out.str(""); out.clear();& v# s5 v7 h5 v* e; o) F
  147.         out << " Number of edges: " << edges.size() << endl;
    * k6 T" S/ S- `% U
  148.         lw->WriteLine(out.str().c_str());
    ; ^) r) w7 s# `+ b8 Q' E. T3 l
  149. ; Q# M+ g; ~5 {, J+ w9 u+ g$ B
  150.         for( int ii = 0; ii < edges.size(); ii++), O5 f0 a" V) T' @$ Q+ O9 @
  151.         {' P& ]5 I1 C+ A( ^9 y
  152.             out.str(""); out.clear();, o! J3 L. C4 D. z
  153.             out << " Edge: " << edges[ii]->Tag() << endl;/ q' G! j! ^4 w" \- G8 S* r
  154.             lw->WriteLine(out.str().c_str());
    ( T- e8 E" f! F% @& h% E+ u' s, Y

  155. ; Y% f6 g& y1 `# ~+ O/ W/ J
  156.             std::vector< NXOpen::Face * > adj_faces = edges[ii]->GetFaces();  ?6 k6 q8 G2 z1 x
  157.             out.str(""); out.clear();) f: O, G. P0 q8 i0 x, Q1 |) }
  158.             out << " Number of adjacent faces: " << adj_faces.size() << endl;8 V/ Q7 y+ ?  h0 F' b$ \2 F/ t
  159.             lw->WriteLine(out.str().c_str());! r  ]* i4 C( R. }, a

  160. 0 j% M4 `5 {! ~, K
  161.             for( int jj = 0; jj < adj_faces.size(); jj++)
    & P$ E) U# e2 _, t( Q5 b
  162.             {
    4 B+ G0 L# p' s5 I6 ?( }
  163.                 out.str(""); out.clear();, ^$ x. f  [  ]% ^, Q* \
  164.                 out << " Adjacent face: " << adj_faces[jj]->Tag() << endl;
    + p4 K6 b2 t! C4 a0 S
  165.                 lw->WriteLine(out.str().c_str());
    4 R3 X1 q7 |  A1 N
  166. ; H! V" T6 ~, f9 I, \/ ?
  167.                 myfaces.push_back(adj_faces[jj]);
    7 l7 Q1 o/ M9 x; o# p

  168.   g  g  k. a" G- p, b7 K) [
  169.             } // jj
    ( I) m; J8 @; M1 i6 R8 e* e! D

  170. / K+ q+ I+ p7 b$ F5 Y
  171.         } // ii
    ) n# G  S; T  |- \: D/ a

  172. 7 d  C2 a+ d' c& r: g  J
  173.         myfaces.unique();3 A, }- d- H9 I
  174.         for (list<Face*>::iterator it=myfaces.begin(); it!=myfaces.end(); ++it)
    3 S3 @5 C' f9 u
  175.         {* f9 ?, I0 n: h
  176.             (*it)->Highlight();
    2 _! e' R+ F* P" V
  177.         }$ t5 l; u4 |! N. i9 P: o/ R
  178.         Gtac::theUI->NXMessageBox()->Show("Adjacent Faces", NXOpen::NXMessageBox::DialogTypeInformation, "Confirm");# @8 _( V- K4 e$ T0 Y
  179.         for (list<Face*>::iterator it=myfaces.begin(); it!=myfaces.end(); ++it)* ~0 |2 k! u6 a( S( [% Y
  180.         {. q( Q4 O* `8 v/ @9 o3 x1 H
  181.             (*it)->Unhighlight();
    , F  V! v! h% q# R; C
  182.         }' n4 B- p& M0 t+ H8 h( ?& B0 {
  183.         myfaces.clear();8 Q3 m% A7 j, V  d

  184. 9 _8 n  ~8 g/ e! e
  185. * z) B- z9 p' U- X
  186.     } // while
    6 P  O* }" B4 ]. ~6 m
  187. }( q! L# I; o# D' L' [2 Z, b

  188. # F7 s- V$ }, K3 D* r  G( e  {/ Z
  189. //------------------------------------------------------------------------------* T; p: T" X, p3 @# S3 b+ j
  190. // Entry point for our unmanaged internal C++ program
    % V6 G' U3 j% J* [) O
  191. //------------------------------------------------------------------------------
    1 m4 Y) x# n+ M9 a* U% R
  192. extern DllExport void ufusr( char *parm, int *returnCode, int rlen )5 G5 R. e4 F2 @  |4 U& w
  193. {) O+ ~5 y2 T( c# J* W9 T
  194.     try
    / i6 i% @  K% G( ^* ?& }
  195.     {
    : o2 W9 _5 `& Y+ Q- x6 {- m1 o
  196.         theGtac = new Gtac();$ k$ E$ A4 r0 ^) @# X# D
  197.         theGtac->do_it();- j1 d  R/ F: m& S/ o9 s
  198.         delete theGtac;
    8 z' V) p% B6 @$ t0 }
  199.     }8 n8 O2 F7 M6 L* Q0 C) C
  200.     catch (const NXOpen::NXException& ex): |: v" V1 ^9 \; `; y
  201.     {
    5 l0 e0 t1 M, O
  202.         // ---- Enter your exception handling code here -----' _) m1 }* c( \7 m6 `
  203.         Gtac::theUI->NXMessageBox()->Show("CaUGht Error", NXOpen::NXMessageBox::DialogTypeError, ex.Message());
    $ j3 [* |0 h: `* [$ n
  204.     }( ?( `& P9 ^- K+ t
  205. }) k9 w0 o7 U& C, O
  206. + _% L" {& z: Y* v- C5 A2 B
  207. # s/ b1 Z9 p. g4 H' S0 b& }+ _. z
  208. //------------------------------------------------------------------------------# v# m' h. q2 x1 R
  209. // Unload Handler
    0 \2 V# q5 Y% Z, c* `( w1 R6 ~
  210. //------------------------------------------------------------------------------
    - D8 o5 I) k+ E% r" m* _
  211. extern "C" DllExport int ufusr_ask_unload()" W5 z$ Q! g  y! Y/ |) k
  212. {
    3 [! a9 h$ J' [* m* _9 l
  213. return (int)NXOpen::Session::LibraryUnloadOptionImmediately;
    " J8 c8 w6 v2 p
  214. }! d. c6 b+ B  M

  215. 6 l: G$ P3 M' v+ Y( T
复制代码
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了