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

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

[复制链接]

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

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

admin 楼主

2013-11-6 18:54:58

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

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

x
通过这个代码,可以获取选择面的相邻面的信息
6 j: ~$ B! i- NNX open C++中使用了 选择对象 selectobject 函数,通过面获取边数据,通过边获取面,从而得到信息!  ]8 r! ~  Q5 e- q* h2 B7 M

. e- `+ e' }, v
  1. #include <uf.h>
    * B5 q2 M3 K( f" {) l
  2. #include <uf_ui.h>, g& b! S0 b0 B/ N6 R
  3. #include <uf_object_types.h>
    8 y: g2 {1 y& _& e* ^+ c
  4. # x4 N& c% `5 [3 b7 e- P. R
  5. #include <NXOpen/Edge.hxx>9 [0 N& U2 d; g* _: d
  6. #include <NXOpen/Face.hxx># o9 U% w) ?* g, l
  7. 7 H" z1 g+ ?6 G" J% l$ \; P  H
  8. #include <NXOpen/ListingWindow.hxx>
    " g4 [- c9 y, a3 r7 n- q
  9. #include <NXOpen/NXException.hxx>% P1 ~) Q% T7 k! }
  10. #include <NXOpen/NXMessageBox.hxx>8 w5 i' v9 ]6 T* ~2 v/ Y- V
  11. #include <NXOpen/NXObject.hxx>
    4 b. y+ _# T( d5 j$ H3 ?& I
  12. #include <NXOpen/Part.hxx>5 X" p5 T3 ^8 a7 v
  13. #include <NXOpen/ParTCollection.hxx>7 ]) M9 o9 X  t# U0 A! L. }
  14. #include <NXOpen/SelectDisplayableObject.hxx>; V3 u. k  z( T3 f# U. v
  15. #include <NXOpen/SelectDisplayableObjectList.hxx>3 P5 F3 r/ d/ V) V3 ]+ i
  16. #include <NXOpen/SelectObject.hxx>0 h& C8 A5 S3 }, ?3 ?7 o( j7 R7 E
  17. #include <NXOpen/SelectObjectList.hxx>  b" G. q9 i4 T8 Z+ e& o  q
  18. #include <NXOpen/Selection.hxx>
    ' ~- J; ~5 Z& r; k- M- i- f5 Q2 _1 r
  19. #include <NXOpen/Session.hxx>% m1 k$ f5 Y3 B* a' T
  20. #include <NXOpen/UI.hxx>
    ) g0 i5 Z- o- D9 ~+ B
  21. #include <NXOpen/View.hxx>
    ' a9 `5 w/ i/ O) r2 |1 }+ p$ c
  22. . k9 A$ _$ R% ^; z
  23. #include <iostream>
    7 j9 Z+ M4 A( o) `. i
  24. #include <sstream>
    ! L0 |0 {2 r9 }3 x+ ^# g
  25. #include <list>
    4 f3 Z9 }; S& |3 Y8 M' `, g
  26. ; {8 h) x! ~2 P* S
  27. using namespace NXOpen;' R3 U3 \8 T9 a
  28. using namespace NXOpen::Annotations;
    3 S! ?# ?8 E, ^  i8 \0 n
  29. using namespace std;: `7 D7 P% e  ]* K& n. `: {# n% k
  30. ( e! _8 |5 ^8 J0 t, L2 C0 p9 z
  31. class Gtac* e' H: n# C- w3 ?
  32. {/ j3 U5 V2 o# N$ i4 c
  33.     // class members
    ) f: G. N6 U" H" ~0 r
  34. public:
    % X4 Z+ l0 H6 t5 r) s
  35.     static Session *theSession;
    , [& q( `: x2 `* b+ A
  36.     static UI *theUI;2 \& v9 [- E3 F, A) l$ D

  37. , k' D, i7 y. T* H& z
  38.     Gtac();5 g4 Z1 g4 }9 V" _: q4 Z
  39.     ~Gtac();( w, V% l/ E- {* m7 t7 b, o  ~
  40. 6 L( d. v4 \0 `# Q& P: F, M+ M
  41.     void do_it();
    0 x6 K6 A1 m) p% Q9 j, W, Z

  42. * a8 g6 C3 F  _7 Z/ a4 f2 f' ~: f1 d
  43. private:( Y+ F2 `3 M% @0 i6 b3 P! [
  44.     Part *workPart, *displayPart;9 I" b+ d) j7 i$ @5 H" A! h
  45.     Selection *sm;5 V4 |* k7 m1 O' N/ U- }
  46.     NXMessageBox *mb;
    $ J3 i8 h# h5 @! m
  47.     ListingWindow *lw;4 v1 f1 ^* ]- H* S: q/ _
  48. $ b% W4 A$ q) F" g" y. Z2 c0 f
  49.     Face* select_a_face();) l1 n  P& Y' D2 H; A5 o% U

  50. ( ~0 C! n9 U( E) J* T! u% C# X( B
  51. };) S9 U3 C( W2 |6 I

  52. ' M4 L5 y; c9 v
  53. //------------------------------------------------------------------------------
    + }2 s# h4 l1 {. f6 y
  54. // Initialize static variables: s/ i0 }* a/ P3 r8 v
  55. //------------------------------------------------------------------------------8 s) @$ ]7 T0 w# H$ b8 e# y
  56. Session *(Gtac::theSession) = NULL;6 f; @7 E' P' @4 m
  57. UI *(Gtac::theUI) = NULL;
    2 n% G  Q( H8 C0 d. p! F
  58. ( m" c3 i0 f, T3 O8 G: o* _
  59. //------------------------------------------------------------------------------
    1 c& T9 w, h/ F" {0 g
  60. // Declaration of global variables
    / z9 F3 W) Q0 D  a3 a+ _( D
  61. //------------------------------------------------------------------------------! B& o: o6 }1 Q8 V6 ?+ _& u' I
  62. Gtac *theGtac;( k+ t3 N4 \  _- J* b9 C7 l" v& d
  63. , q# y3 L  G3 W7 L; ~4 s8 Y
  64. //------------------------------------------------------------------------------2 b/ J/ v8 J. z
  65. // Constructor
    ( W# K* }2 q0 V$ v
  66. //------------------------------------------------------------------------------
    ! J8 \" B- I! P4 G' K
  67. Gtac::Gtac()
    $ b, N( o4 b) D& l% i3 a
  68. {2 B: Y' w0 }8 K/ u8 \
  69.     // Initialize the NX Open C++ API environment* ]( W+ V$ a' C! x! `+ L" I
  70.     Gtac::theSession = NXOpen::Session::GetSession();% v4 ]9 V6 \9 G# g
  71.     Gtac::theUI = UI::GetUI();/ q& h) y' y4 ~0 X) L8 s, }

  72. 7 K- R: \8 `+ w- C$ _% P* s
  73.     sm = theUI->SelectionManager();
    - Z. x* E; |6 f: J! r& i9 ^
  74.     mb = theUI->NXMessageBox();0 o; h: g; J5 B6 G4 T+ f$ i6 T
  75.     lw = theSession->ListingWindow();) @- Z  l" L5 E- v: g# d

  76. 4 I" `) I* Q2 d# |
  77.     workPart = 0;
    8 v2 i0 ~2 F( t0 Z8 e
  78.     displayPart = 0;) \, s; f& {1 ]* E
  79. }
    * e$ h) j; o9 \* _
  80. . K, |4 C+ K9 a8 g' d
  81. //------------------------------------------------------------------------------- @! v# F( s" r0 e- O6 Z3 m
  82. // Destructor. I( O) Q: q& g& Y  T5 G/ I
  83. //------------------------------------------------------------------------------& r! c- v( W; b' \9 _
  84. Gtac::~Gtac()
    # U: U1 @0 a' z0 C
  85. {  ^" B' W! F. i; \3 z! |; t4 e) Z& u
  86. }% P* N9 r: W2 W. @  v; v/ e2 S
  87. + ?0 a/ Y, @+ {  ~
  88. //------------------------------------------------------------------------------
      Z' F; g' P" Q, E" ]' `
  89. // Selection
    5 V$ @" c! @) N: U* _6 \
  90. //------------------------------------------------------------------------------
    # ~5 C. U3 S$ P2 C8 o
  91. Face* Gtac::select_a_face()
    2 }$ B" A" N/ X" ~
  92. {
    * I+ l5 L7 m% ?, ?( E
  93.     // ask user to select a face
    * c/ \& W5 r/ h2 A! \$ ]# a$ n
  94.     UI *ui = UI::GetUI();
    # \: n9 }& c0 X8 s3 R5 @
  95.     Selection *sm = ui->SelectionManager();7 b' t, i* U9 K0 v0 W/ g
  96.     NXMessageBox *mb = ui->NXMessageBox(); // as of NX5
    9 S- c, T& ^2 H* F9 U: T& H# l7 j
  97. ' |. d1 @. u/ t6 V9 W  Q
  98.     NXString message("Select Face:");
    # n! ~- t( s9 B' U
  99.     NXString title("Select Face");
    ! D6 k4 e7 S" Y
  100.     Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
    # \, a. y& Z& L# o
  101.     Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;4 k8 c7 ~4 U" g% \% R- G: @; |) I
  102.     bool include_features = 0;
    ) I. F3 _3 }" n9 J. r3 q- r
  103.     bool keep_highlighted = 0;4 r4 n8 w, g9 g8 X+ _0 g
  104. , }+ i+ t9 p  c# k
  105.     // Define the mask triple(s)
      ~, U! ~% P* y# |( w, P- x
  106.     std::vector<Selection::MaskTriple> mask(1);
    ) y, }# g8 z0 S* i# q+ B% [
  107.     mask[0] = Selection::MaskTriple( UF_solid_type, 0, UF_UI_SEL_FEATURE_ANY_FACE  );
    ! }; H( K' X. b' @( W
  108.     Point3d cursor;
    , [- R. R! [' {  K  A
  109.     NXObject *object;
    2 k8 O1 N& G. ?0 p7 t

  110. : O1 |( o& S1 e, U% R: d6 g
  111.     // Select objects using filter defined by mask triples' r$ m1 k$ k2 {5 ]$ b: B2 c1 a
  112.     Selection::Response res = sm->SelectObject(
    % ^" l" E1 a0 F+ D; d+ ^
  113.         message, title, scope, action, include_features,$ H$ L+ C1 P$ H& ]& Q
  114.             keep_highlighted, mask, &object, &cursor );
    7 G% z: J, L2 S( ^' J) j

  115.   r; Z* b) U5 o5 c
  116.     if( res == Selection::ResponseObjectSelected )
    ' a4 ]9 p/ M4 B0 j5 P  S7 B& H
  117.     {
    4 h4 f3 u# P; `; M# U* x
  118.         Face *aFace;/ D: u7 Y: K( m5 k+ n0 n. H' X, q% {
  119.         aFace = (Face *)(object);
    7 r& x) O) ?, f* W- ~9 H
  120.         return aFace;
    % k5 F, z4 |8 `2 F
  121.     }
    & N( C' d, I0 c6 v+ C/ x5 Q
  122. 4 m+ k& `; S5 [' p
  123.     return 0;
      Y; V" K8 k6 b1 l3 V: m
  124. }% S: m  }& o5 m5 u' g# t( C
  125. 8 |9 h- ^: d+ y( q3 k
  126. //------------------------------------------------------------------------------
    4 B% b. {& l) i1 A! {
  127. // start with our job...' x9 f0 L& Z) z' f! O0 l
  128. //------------------------------------------------------------------------------$ b( x# j3 E5 F" G' f. ^
  129. void Gtac::do_it()2 |7 [8 `( F+ Y0 h9 |8 k+ l
  130. {
    & F8 u, L0 o+ c
  131.     workPart = theSession->Parts()->Work();
    ' B9 q' z  w" D; Q7 [; j3 Z
  132.     Part *displayPart = theSession->Parts()->Display();1 K/ H$ ?( M+ [5 Y" V- U. x
  133.     stringstream out;
    ' C% ?$ y- m8 Y$ t# `: j
  134. 0 g9 F' O( n" ]
  135.     Face *theFace = 0;  [) J% M% G: B1 W# b6 T. \
  136.     std::list<Face*> myfaces;
    ( `: c7 ^$ R0 V% O; G4 f
  137.    
    - X) W$ i7 i+ E0 w6 Z
  138.     while( (theFace=select_a_face()) != 0 ), R8 b3 r% \" w
  139.     {
    1 q* j! |& @# j  {9 |
  140.         if(! lw->IsOpen() ) lw->Open();
    5 s" d2 x* d- G  N
  141. # e4 s5 p9 }1 X! h
  142.         out << "Selected Object: " << theFace->Tag() << endl;( D7 o, U: \( f1 E) `7 }! o
  143.         lw->WriteLine(out.str().c_str());( r$ y. A0 b+ \2 J5 `  P

  144. # z! M7 b+ ]. f+ {; d
  145.         std::vector<Edge*> edges = theFace->GetEdges();# R# W7 S# J( D# v* B2 C- J4 T
  146.         out.str(""); out.clear();
    4 j7 b! D4 E$ d7 H
  147.         out << " Number of edges: " << edges.size() << endl;
    - ?7 K2 g+ A1 ?. Q6 v
  148.         lw->WriteLine(out.str().c_str());
    6 h& ]; h1 `' t' ]2 s
  149. " Z( ~8 |8 N2 e& M3 N' T
  150.         for( int ii = 0; ii < edges.size(); ii++)9 O2 J- i( N1 f2 }
  151.         {, f. M4 a+ V- v' q1 v: {  Q
  152.             out.str(""); out.clear();& y2 n. q* R( d! s8 h# Y" B  }
  153.             out << " Edge: " << edges[ii]->Tag() << endl;
    1 p' x) i) `8 Z& \' J0 h% }
  154.             lw->WriteLine(out.str().c_str());
    - t; c$ c. R* ~, P
  155. . g3 e1 D% \7 Q( }$ _$ j0 G, p
  156.             std::vector< NXOpen::Face * > adj_faces = edges[ii]->GetFaces();
    ! H( A' J' h! Z( Z( J
  157.             out.str(""); out.clear();4 ~/ m& D4 |& }" w5 _6 x
  158.             out << " Number of adjacent faces: " << adj_faces.size() << endl;
    1 O- y! I1 e6 I# z4 i
  159.             lw->WriteLine(out.str().c_str());
    % e/ s) c$ z) m3 R* K; R, m

  160. " k7 f# ?; b% Z7 |" s! _
  161.             for( int jj = 0; jj < adj_faces.size(); jj++)1 E- w) B8 q8 }$ p% D0 t! J& e
  162.             {# N# u" ]8 O6 [8 F" ]+ j
  163.                 out.str(""); out.clear();
    - n* @* g9 w3 D# x+ ~: K" `! x
  164.                 out << " Adjacent face: " << adj_faces[jj]->Tag() << endl;
    9 E; I- M/ R, J; y9 T" K* b: }7 c! |
  165.                 lw->WriteLine(out.str().c_str());: j6 V2 I* x, }  x. l* K# h  D; L

  166. + X; ?( r( X  A, {3 C( ?  x) {
  167.                 myfaces.push_back(adj_faces[jj]);9 d4 m/ r# m, U

  168. 7 F1 A/ E1 Z! i  ]7 h& R( t" O, N
  169.             } // jj3 g& d, |! _1 [! Z: ^- B

  170. 3 \9 c* W3 \9 c0 g8 m
  171.         } // ii6 w) T# @. Y/ ^' J4 B$ J- r
  172. 2 }  r9 I- x) T) Y  z. S
  173.         myfaces.unique();
    ( ^. T& F. I( ~# L3 d
  174.         for (list<Face*>::iterator it=myfaces.begin(); it!=myfaces.end(); ++it)( N& J- s6 M! a, k7 E, E# C
  175.         {7 u; r% l7 t* y
  176.             (*it)->Highlight();& e$ x% v+ r' b$ K; u
  177.         }( L9 k/ z, ?! f  _5 k6 K
  178.         Gtac::theUI->NXMessageBox()->Show("Adjacent Faces", NXOpen::NXMessageBox::DialogTypeInformation, "Confirm");- b% R2 U/ a/ Z- U4 r7 @! L
  179.         for (list<Face*>::iterator it=myfaces.begin(); it!=myfaces.end(); ++it)
    9 m$ e$ h6 d$ F
  180.         {
    $ e8 \" V5 ]; H/ N, V3 p1 K/ U8 _- F3 m& M
  181.             (*it)->Unhighlight();& m* p6 J# I6 J, l
  182.         }
    8 ?4 W, C3 N7 ?3 [2 X- |5 k
  183.         myfaces.clear();  m- O- T& Y2 X+ H: E6 r! ~/ X

  184. $ V: H5 r( T2 q. X$ Q7 v
  185. 4 c# B6 C) b* H  H
  186.     } // while' s* J) C8 Z8 ]0 g
  187. }- O1 n% N2 _- @6 u# E

  188. , K9 b9 z9 \$ u/ c$ j; z. W5 g
  189. //------------------------------------------------------------------------------
    # o" u7 F+ [& h" ^* b' _
  190. // Entry point for our unmanaged internal C++ program9 k) ^) ?5 q* x7 }9 Z
  191. //------------------------------------------------------------------------------
    4 ]) N+ l. g3 @& I
  192. extern DllExport void ufusr( char *parm, int *returnCode, int rlen )2 M" G: X+ X4 v- T* N4 b
  193. {# x; p) ]' N' H$ O3 `/ T6 a
  194.     try
    . J% i6 }- Q) v7 \
  195.     {
    . Y# F5 A+ M# ?/ K( H
  196.         theGtac = new Gtac();- g! m$ i7 i- C' }4 K: y
  197.         theGtac->do_it();" z1 K1 d7 W, d" [5 I
  198.         delete theGtac;8 {( W- ?! i- a
  199.     }
    3 \9 N1 ?! U- a& H
  200.     catch (const NXOpen::NXException& ex)7 j* F! i7 x( l, y6 c! j; l) k. B- u5 ]# E
  201.     {
    ( }1 N0 I6 b5 i& E
  202.         // ---- Enter your exception handling code here -----( `7 n/ u3 I. a: W* y2 U& V
  203.         Gtac::theUI->NXMessageBox()->Show("CaUGht Error", NXOpen::NXMessageBox::DialogTypeError, ex.Message());
    + r" S3 m4 b  L+ y
  204.     }
    : V9 ~* E% k# F* z; K: h( P
  205. }" f' F, ^* u1 G6 h: `
  206. # l7 ?* E0 M$ y! u" y8 U
  207. ! `2 i9 l6 }* y8 X0 x( u& n
  208. //------------------------------------------------------------------------------8 T9 {* U& S0 U0 ^4 p. @2 u3 o
  209. // Unload Handler- h7 n) D' q' W+ J
  210. //------------------------------------------------------------------------------' }  P" w8 a8 k8 D& z
  211. extern "C" DllExport int ufusr_ask_unload()$ j. h2 N% c. f- u3 l
  212. {
    ( U9 G" F9 @0 M% X  Q# C
  213. return (int)NXOpen::Session::LibraryUnloadOptionImmediately;
    ( ~$ y% X! t0 [
  214. }
    ) y/ c% h5 J6 F+ G6 {
  215. 3 Z% q  ~1 J3 P2 b+ P+ 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二次开发专题模块培训报名开始啦

    我知道了