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

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

[复制链接]

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

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

admin 楼主

2013-11-6 18:54:58

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

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

x
通过这个代码,可以获取选择面的相邻面的信息
5 B% K0 B4 H7 S# G! q) a, O, \NX open C++中使用了 选择对象 selectobject 函数,通过面获取边数据,通过边获取面,从而得到信息!9 {  n: h! l0 H! A7 m* d7 p
3 J6 r7 f. F/ {% l  J$ n
  1. #include <uf.h>
    # g1 ?- V1 R) |6 e. h' h7 k4 X8 U+ N% ]
  2. #include <uf_ui.h>
    ( F: s& d. U9 R0 M
  3. #include <uf_object_types.h>
    9 g. ]  y5 {; [; K( G, N& Y

  4. + H- B8 U) f7 C1 I, [+ z  z
  5. #include <NXOpen/Edge.hxx>0 y4 r. g8 l6 P. F  V# x
  6. #include <NXOpen/Face.hxx>
    7 b. I8 w5 S) M5 u2 O

  7. + O7 N0 |0 I$ H; E* i! a' Z, u
  8. #include <NXOpen/ListingWindow.hxx>
    ) j$ @3 m( v0 k
  9. #include <NXOpen/NXException.hxx>
    - Z' `  D+ d- v$ w1 j, j
  10. #include <NXOpen/NXMessageBox.hxx>
    , _0 s- z0 \0 }$ d6 t& ~) T
  11. #include <NXOpen/NXObject.hxx>
    & K1 C3 k  X" J4 t# m$ A
  12. #include <NXOpen/Part.hxx>5 V* e2 O" J, x: {$ ?
  13. #include <NXOpen/ParTCollection.hxx>% \; f# _% B) P* R8 x6 _
  14. #include <NXOpen/SelectDisplayableObject.hxx>0 X+ {7 l( H( q* s/ j9 [6 \. c4 H/ S
  15. #include <NXOpen/SelectDisplayableObjectList.hxx>: N! {3 _  W* e" }- G
  16. #include <NXOpen/SelectObject.hxx>
    8 `! j6 j7 s* ?1 c' E
  17. #include <NXOpen/SelectObjectList.hxx>
    ! H2 Q# H9 c% d$ [! |
  18. #include <NXOpen/Selection.hxx>
    7 U' u" F  u, }% A2 C- U) G  w
  19. #include <NXOpen/Session.hxx>
    3 o, T7 `& Q& X8 l1 O$ K
  20. #include <NXOpen/UI.hxx>
    - Q6 |, B7 ^3 Z2 |# ~1 t" q& G
  21. #include <NXOpen/View.hxx>
    ) ?5 R6 f/ m# n7 @" W1 ]

  22. , |/ R+ {& ^& o
  23. #include <iostream>% J# ^! V5 K" w* Q; B
  24. #include <sstream>
    7 L/ q  S6 s' g1 u
  25. #include <list>4 f/ p. @6 s% a* Z7 {- P' g
  26. . \" r) G) q- ~3 v9 B8 ?; {
  27. using namespace NXOpen;
    : i, q7 v) R. V; V
  28. using namespace NXOpen::Annotations;5 l9 X: U! S. @, |
  29. using namespace std;/ a+ W% O, ]: v4 Q: n
  30. 5 G4 N/ h' a* W6 E0 [  ~1 n
  31. class Gtac
    ) a% O* H; H7 v' }7 Z: K/ H
  32. {
    % v% y4 y2 ]; u, s: o
  33.     // class members- p0 X# h7 H+ N- n: e
  34. public:0 ~5 ]' `) y+ [7 ^: _0 W
  35.     static Session *theSession;
    + g. A9 |% J- C0 G
  36.     static UI *theUI;) Y6 b% ^4 r! F, R7 G' T$ z

  37. $ I0 S9 c4 j& @7 Q' m
  38.     Gtac();* q& q. O" K# V. [; k
  39.     ~Gtac();. a  b' A. Y& t8 H4 b2 L* ~

  40. 9 C. s3 |; x& L# f$ h! n
  41.     void do_it();
    # X: n# }1 |8 v# J7 T! {

  42. % o0 s5 X. L9 C5 m: U
  43. private:" B8 U# l' I$ Q9 j9 m  N6 }
  44.     Part *workPart, *displayPart;$ V4 F$ M; R* H
  45.     Selection *sm;1 I9 A( H6 \& l% v/ M; R. r! ?
  46.     NXMessageBox *mb;5 y) j+ d8 g  a5 F! i
  47.     ListingWindow *lw;
    ' V( I0 J  p' w2 g) P) e/ o
  48. 6 R6 d! z& a$ R3 R) X
  49.     Face* select_a_face();7 U8 N  v$ `9 n9 Q% T6 ?) \

  50. 0 L* _! q  g& M) l7 e7 M
  51. };, H: h: n1 s/ E) u0 J
  52. 6 b6 G9 U8 y* h( J+ V  ~
  53. //------------------------------------------------------------------------------1 O8 H- d. [* V9 n* v( _/ T
  54. // Initialize static variables
    5 r1 k- {& [: T
  55. //------------------------------------------------------------------------------
    ! n% z- n3 j% t' Y/ t$ F/ Y# P( ^
  56. Session *(Gtac::theSession) = NULL;4 ~; W; r) q! `
  57. UI *(Gtac::theUI) = NULL;- M, w% ?/ p2 t& A. t  P
  58. ' G+ d) @. ^9 h6 f$ y7 R: j( K
  59. //------------------------------------------------------------------------------
    - `% o" i- r8 ]
  60. // Declaration of global variables
      _. ~. S& E1 v2 w* d* l7 a7 R
  61. //------------------------------------------------------------------------------
    , K# T$ ^& n. n1 w# Q; D
  62. Gtac *theGtac;- n; g) Q/ K2 i  T% O2 m: v2 M
  63. ; n3 }& v- i; @9 P
  64. //------------------------------------------------------------------------------
    3 X1 ?: D% f4 ?$ H
  65. // Constructor/ V) a! z6 C% ~+ P% o9 ?+ g
  66. //------------------------------------------------------------------------------
      ^# R5 L8 g- x5 B; G/ a
  67. Gtac::Gtac()
    2 h( J0 ~6 q1 G& N* ^* z
  68. {% d1 N( d) t: ], F8 n5 Z1 G
  69.     // Initialize the NX Open C++ API environment' G; F+ p0 E# I5 Y" V
  70.     Gtac::theSession = NXOpen::Session::GetSession();3 k( }( x; E9 t7 ?
  71.     Gtac::theUI = UI::GetUI();
    9 L' V/ R* C& B. d) B" o6 m  t

  72. & G3 i+ W" {: Q1 z0 N* e
  73.     sm = theUI->SelectionManager();
    9 z: T9 g$ j6 [9 Y% c
  74.     mb = theUI->NXMessageBox();9 o5 w$ o; {6 Z: W6 n. v/ \) J1 c, A
  75.     lw = theSession->ListingWindow();
    * a* H& j/ K# Y0 x

  76. . l' H9 J- i! d9 ^, q
  77.     workPart = 0;
    ) q/ V% \) E# C9 P
  78.     displayPart = 0;, x" ?% ]& k$ L% ^' I6 C- ^7 j! w
  79. }" c, n" A1 Z# d( R2 U) x5 c
  80. * G  m6 v7 ]8 G- v1 H  u2 a# o
  81. //------------------------------------------------------------------------------
    4 D8 f2 X$ A9 h; h8 L& G3 g
  82. // Destructor  b+ y: S0 l. m* }6 H, Y; Y
  83. //------------------------------------------------------------------------------8 ?5 e3 }1 D2 i- k
  84. Gtac::~Gtac()3 T- i1 z( z3 k% |- \9 A# z$ a
  85. {; u. ^: ^6 G7 \' Q& u+ y6 ]
  86. }
    5 `* D2 M2 h' x+ W

  87. - S% e  j( X0 a# s. L8 _
  88. //------------------------------------------------------------------------------" h' g/ c+ O: [6 Y' X7 }% e
  89. // Selection& y& B5 g1 F7 U9 S  s
  90. //------------------------------------------------------------------------------
    & r# C/ W, \4 J/ u( t
  91. Face* Gtac::select_a_face()$ Y' B! _4 T3 N7 |' O6 v
  92. {
    , ~# J( v" O: a- j
  93.     // ask user to select a face8 H" S. C2 e# j
  94.     UI *ui = UI::GetUI();. \- O4 a6 L+ I0 @+ ]
  95.     Selection *sm = ui->SelectionManager();4 c  C6 k& @/ A, o9 s  |
  96.     NXMessageBox *mb = ui->NXMessageBox(); // as of NX5- Q+ a( F* k. F4 `, j) ]" x
  97. ) f5 s% K/ b& ~2 B6 Z; I2 D( a3 N
  98.     NXString message("Select Face:");7 Y7 W: F2 r$ [+ R# g! h
  99.     NXString title("Select Face");
      l% F- o$ G( q, A# M, d
  100.     Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;; W& ~0 i9 Q3 f, I& {& q/ W# P
  101.     Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;
      A7 _' }& ^) \( D: o& `  |8 E
  102.     bool include_features = 0;8 i! P9 q) R3 q# g5 U; [
  103.     bool keep_highlighted = 0;
    # |& u8 G" [% c2 q; ?; e6 I6 u

  104. 9 m) R3 P2 U# Q1 i) ^$ Q+ N
  105.     // Define the mask triple(s)+ y$ m5 p- n5 o$ Z4 h1 u+ y, P
  106.     std::vector<Selection::MaskTriple> mask(1);
    7 y4 `9 ]! s1 \7 E: w8 G- E
  107.     mask[0] = Selection::MaskTriple( UF_solid_type, 0, UF_UI_SEL_FEATURE_ANY_FACE  );9 G) J$ f" ]5 w; A
  108.     Point3d cursor;% @  M. `0 z( c6 {
  109.     NXObject *object;) r! h+ v# d2 ~* ]2 ]* g7 _
  110. " e4 k4 N+ b& e( [4 ~
  111.     // Select objects using filter defined by mask triples5 u1 M3 V' q, d8 D3 L
  112.     Selection::Response res = sm->SelectObject(
    2 M6 o0 \& v8 e/ [) e% |- U
  113.         message, title, scope, action, include_features,$ c% U' W! Y, G; w1 c9 a+ }
  114.             keep_highlighted, mask, &object, &cursor );9 E1 D9 [! I/ ?
  115. ! t) A1 p2 P3 n0 }, A7 `# ]5 V
  116.     if( res == Selection::ResponseObjectSelected )
    6 [( X1 k6 f- p& Y, s# F
  117.     {) x2 y. T  Y% r6 q
  118.         Face *aFace;
    4 ~# o( n% F6 s8 L1 i
  119.         aFace = (Face *)(object);
      j1 l  e: n8 f0 E
  120.         return aFace;
    / k% `1 X2 X. @/ C
  121.     }' I( k; E6 c* r- K+ K) S4 y' X

  122. ' h; d9 r; O/ x! U% ]3 ~
  123.     return 0;
    , {- P% N- R$ t! I8 j
  124. }% o4 N2 S+ D$ U" Q" @# F8 s. x2 {
  125. 8 v3 U0 T% R! k) K
  126. //------------------------------------------------------------------------------
    0 Y  t8 I* U* G2 Y2 M- a( V3 A
  127. // start with our job...
    , l" T" E! C9 z9 X5 b. q
  128. //------------------------------------------------------------------------------# V% L( D7 R6 j7 m  O) _
  129. void Gtac::do_it()
    # W5 X( j0 j* A
  130. {& I+ l, }5 M& X; c
  131.     workPart = theSession->Parts()->Work();
    4 P8 t; Z& j5 I
  132.     Part *displayPart = theSession->Parts()->Display();
    & e( o3 a/ C0 |' L0 H! O
  133.     stringstream out;9 V2 [, P5 g! E/ }  p

  134. + o( u: k. Z. G5 ?) P" V
  135.     Face *theFace = 0;* b$ n4 a& \! {1 C: D) T
  136.     std::list<Face*> myfaces;2 y8 j. d6 F  C! D. P% R
  137.    
    4 Z/ X1 D, C: J, u
  138.     while( (theFace=select_a_face()) != 0 )
    + ^' g; |6 \- C6 I- s/ H$ A
  139.     {! a' k5 D: i8 k! E9 [
  140.         if(! lw->IsOpen() ) lw->Open();0 A' ~: m2 k  o* z& n

  141. 1 G' u& d6 o8 h. E  c7 U, i5 u6 c  H
  142.         out << "Selected Object: " << theFace->Tag() << endl;: A: E' a% @0 K" N9 G/ Z
  143.         lw->WriteLine(out.str().c_str());& M0 T, [" z# w8 E/ ~
  144. * @2 e- w2 K1 r4 T( F$ y- A
  145.         std::vector<Edge*> edges = theFace->GetEdges();
    ( F4 X4 e: ~5 k* S
  146.         out.str(""); out.clear();* B4 n7 H* E3 Y; }& E9 e
  147.         out << " Number of edges: " << edges.size() << endl;1 L3 P  \, J' Q
  148.         lw->WriteLine(out.str().c_str());* C& y3 l) r$ Y) d
  149. 0 k2 p0 A; `( @: n! z3 j8 _! B
  150.         for( int ii = 0; ii < edges.size(); ii++)
    * Z. N% \- q7 v; O- }" v' ~4 [
  151.         {
    ; f& M8 Q0 H& Y9 W) l; X  B
  152.             out.str(""); out.clear();
    : t& w- u, J: c9 @9 |
  153.             out << " Edge: " << edges[ii]->Tag() << endl;
    9 e# T. @! A4 J: N) Z3 d
  154.             lw->WriteLine(out.str().c_str());
    : _8 n$ ^* F: D/ ~
  155. / Z0 P6 Y; O# g7 m
  156.             std::vector< NXOpen::Face * > adj_faces = edges[ii]->GetFaces();
    ; e2 j$ q1 }) p( p1 w. w
  157.             out.str(""); out.clear();" s' o( B+ p0 r( g, |9 N
  158.             out << " Number of adjacent faces: " << adj_faces.size() << endl;
    0 U7 g# R) C$ y& o( E+ Y
  159.             lw->WriteLine(out.str().c_str());4 @$ e1 ?; f# N; ?# B. K: Z# D- B; a

  160. $ x/ F0 J! e6 o7 o: x" j+ _; T
  161.             for( int jj = 0; jj < adj_faces.size(); jj++)
    3 e* [4 I2 J( {4 d
  162.             {
    ( g. H$ g' g. F  K+ g9 I7 O1 Y
  163.                 out.str(""); out.clear();/ N" b. W6 J( ]% s
  164.                 out << " Adjacent face: " << adj_faces[jj]->Tag() << endl;
    ; p$ ^7 d1 [; W/ J* ~8 l7 H3 {
  165.                 lw->WriteLine(out.str().c_str());
    % s1 C! p) B# ^+ X
  166. 9 b% B( r9 J* b! k1 v  ~5 p
  167.                 myfaces.push_back(adj_faces[jj]);1 }- E' r& W2 P; s, J2 ^- P
  168. 2 W" B5 Q/ I( v% k8 T4 m7 j' i' [
  169.             } // jj
    1 p( B# r2 P# {$ P+ ~4 ]9 x- `' [

  170. - w2 R: e% Z( N8 y- N, g5 X) z
  171.         } // ii3 d5 I' Q( R9 ~2 W$ |
  172. 9 o! P' F% b. r: e" u3 S5 I
  173.         myfaces.unique();0 `- `  q; K" w3 I4 m) U( Z  L  N! s3 \
  174.         for (list<Face*>::iterator it=myfaces.begin(); it!=myfaces.end(); ++it)
    . o$ @. a) o1 U% Y( H, i
  175.         {
    7 m3 H- n9 V' N. b# d$ D
  176.             (*it)->Highlight();- I4 \9 E0 N: T: K( m
  177.         }
    6 o7 D4 w& S4 I$ m: s0 F
  178.         Gtac::theUI->NXMessageBox()->Show("Adjacent Faces", NXOpen::NXMessageBox::DialogTypeInformation, "Confirm");* y' V, J8 e8 m) x& o8 z
  179.         for (list<Face*>::iterator it=myfaces.begin(); it!=myfaces.end(); ++it)
    ( |- A/ k, l& m5 t5 ~9 b; i
  180.         {
    % A' w3 A0 e7 C' z7 g( T
  181.             (*it)->Unhighlight();
    * d1 N/ A* R) d8 ]' U' h! p! t) U
  182.         }0 v1 ?8 P4 U2 y+ q* n$ v5 i8 c
  183.         myfaces.clear();: \- s: M' \8 R/ _! V8 e+ e

  184. 7 L1 W* i& g/ m0 [6 w  }5 v$ D

  185. 1 Y" u& {$ z- G" y0 z$ I2 P0 C
  186.     } // while
    4 E, B) ?8 \4 c1 r  b
  187. }
    % ~- Y! g* L; [6 U/ f' u

  188. * w6 `8 z( y6 w( t' Z" i
  189. //------------------------------------------------------------------------------( a( b* S* Y# D; o2 g$ x
  190. // Entry point for our unmanaged internal C++ program# ^$ c$ B) B7 \1 y0 Y& K
  191. //------------------------------------------------------------------------------$ ]% r2 U8 @% |  t
  192. extern DllExport void ufusr( char *parm, int *returnCode, int rlen )
    9 _1 M( w7 a$ Y% Z
  193. {, c( x+ w# O( `, x, P% z
  194.     try2 R6 j9 W- F" A. _7 t! O1 N* n
  195.     {
      u& j( y7 Q( Z( J3 [# l" u
  196.         theGtac = new Gtac();4 Q1 i/ b& p- z9 N1 a$ ^( l7 y9 F
  197.         theGtac->do_it();
    " d: n9 k2 H2 j) M' x
  198.         delete theGtac;* b2 u3 {- D" B" |# y. D. W$ j+ {6 K
  199.     }2 b9 }/ G# h5 n
  200.     catch (const NXOpen::NXException& ex)" `& i% f4 C+ l" x0 u
  201.     {1 V- C; @( O! V! t
  202.         // ---- Enter your exception handling code here -----
    / F5 X4 n" f( V( P  J
  203.         Gtac::theUI->NXMessageBox()->Show("CaUGht Error", NXOpen::NXMessageBox::DialogTypeError, ex.Message());
    7 c% ]# @" j6 f* f: t3 Y  C! ^
  204.     }9 V. |' t; ]6 c' v
  205. }
    ; u7 M+ ^, m) l9 B8 h

  206. 0 c, u/ X& C- A

  207. : m, _7 S% |& A1 h
  208. //------------------------------------------------------------------------------) t# Q! S+ t: M0 w
  209. // Unload Handler
    ; {( B  O5 Q3 v) `+ P
  210. //------------------------------------------------------------------------------# x+ x) [# o6 [( G
  211. extern "C" DllExport int ufusr_ask_unload()
    # U6 v# p2 V% I
  212. {, q; R7 n+ \; z# f0 }1 J1 G+ G
  213. return (int)NXOpen::Session::LibraryUnloadOptionImmediately;
    : A) X( s" l2 o: M$ M% Q; w0 Q
  214. }8 Z% X# A; B! r1 V1 V

  215. , Q* o' o7 Y; J2 S
复制代码
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了