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

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

[复制链接]

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

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

admin 楼主

2013-11-6 18:54:58

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

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

x
通过这个代码,可以获取选择面的相邻面的信息
0 R$ l9 L* e  m! mNX open C++中使用了 选择对象 selectobject 函数,通过面获取边数据,通过边获取面,从而得到信息!
! P4 b( x7 j: B: G0 R1 W1 Z$ s/ f
% ^7 Z! B$ i; d. i8 ]
  1. #include <uf.h>5 G* }& H7 ?3 y' k. J: p6 v" o# x
  2. #include <uf_ui.h>5 d$ d5 m# i8 a  v7 L: o/ C/ Z, k
  3. #include <uf_object_types.h>
      z) {3 A& t( p5 F% x; Z
  4. % Q0 ]( ~* x6 n0 ?
  5. #include <NXOpen/Edge.hxx>
    . y; F& Z/ H5 v1 z
  6. #include <NXOpen/Face.hxx>
    . {1 N1 }' _4 y1 j# e! Y
  7. 1 t$ L" ?, |* q. W' u+ ]% D
  8. #include <NXOpen/ListingWindow.hxx>
    $ d! Q" S! Z1 R; `9 M5 E. J6 A
  9. #include <NXOpen/NXException.hxx>
    , E$ k( q" i$ b. ^
  10. #include <NXOpen/NXMessageBox.hxx>
    0 o& x  k+ y# F+ ]) l" k' O
  11. #include <NXOpen/NXObject.hxx>2 J7 C. Q: x6 B( ?
  12. #include <NXOpen/Part.hxx>% k4 g# S3 Q% x" F, E# l
  13. #include <NXOpen/ParTCollection.hxx>) b# G; D" g( P5 y0 T0 q8 B
  14. #include <NXOpen/SelectDisplayableObject.hxx>5 F- v' l1 z! Z; X6 z1 S
  15. #include <NXOpen/SelectDisplayableObjectList.hxx>
    7 x' c7 n: P2 i+ y" j
  16. #include <NXOpen/SelectObject.hxx>
    + h1 e5 [' k) g4 Z; L8 E
  17. #include <NXOpen/SelectObjectList.hxx>
    * f% f8 i% t( Q5 |' N" n  D2 H
  18. #include <NXOpen/Selection.hxx>9 F. ~4 I, A! J6 y/ W
  19. #include <NXOpen/Session.hxx>
    ' V0 y  R+ Y, m
  20. #include <NXOpen/UI.hxx>$ }" [" F; f  r" m' d5 {3 o
  21. #include <NXOpen/View.hxx>/ k# L" A+ e/ W, L# @

  22. ) m# P+ N. ~3 b9 V3 V4 k0 Y2 e
  23. #include <iostream>/ G5 p2 A5 l& M8 U
  24. #include <sstream>
    9 U+ `( y. m* U7 ^4 l' p2 w0 W
  25. #include <list>
    6 f& M" r. W- R; @8 l! ]1 y

  26. + G, F8 @6 Q2 r* t9 A3 o. o4 A
  27. using namespace NXOpen;6 V% X% k( U) \) S8 |* b
  28. using namespace NXOpen::Annotations;( Z: V$ c( N9 m- \4 ?! \4 ^7 F% R2 {/ d
  29. using namespace std;+ `6 m' J/ o' S+ \
  30. 1 V1 ]& g& l$ S
  31. class Gtac+ s, Q( y$ g) \2 |3 |; d& G
  32. {# H& r7 o9 O, z4 v3 @  @) P
  33.     // class members
    " q' w& |3 m1 j* _
  34. public:8 m3 y7 Z' K9 C& u* S, `
  35.     static Session *theSession;. ?5 M/ p) N3 R. u/ c' A/ [4 G
  36.     static UI *theUI;! Q) v" l0 ^3 M3 f! D

  37. 4 n6 }* ^# x  W. n3 p
  38.     Gtac();- x3 c" B$ J9 w
  39.     ~Gtac();. V) [7 v/ v3 h0 I
  40. 0 o- g$ n( j+ V0 v. U$ W
  41.     void do_it();- D# v# O/ B1 Q" |

  42. ; [5 ]9 v3 ?' {! q; z+ e+ C3 s
  43. private:
    3 F7 z4 A: Q' \+ f' u6 q$ u7 I
  44.     Part *workPart, *displayPart;- y) v. N" P+ J
  45.     Selection *sm;
      v8 _) r! q. D$ `
  46.     NXMessageBox *mb;
    % }7 ~4 A7 F7 ^- C- ^
  47.     ListingWindow *lw;
    ) R, L* _% G' q5 g+ q
  48. : W4 w* K  W+ }2 Q: y6 ^
  49.     Face* select_a_face();. W. j0 _( u% c4 a
  50. + Z  [" o2 p$ b% H. g+ V4 L
  51. };+ E# G- k9 B8 v

  52. , B; P% \" d& ~6 ^
  53. //------------------------------------------------------------------------------
    ! R, k0 L: `: e1 i
  54. // Initialize static variables
    ; {" b5 I/ B/ _7 D9 `
  55. //------------------------------------------------------------------------------
    , r: w, i( }' ?
  56. Session *(Gtac::theSession) = NULL;
    + t6 s1 q# r1 L* g
  57. UI *(Gtac::theUI) = NULL;. Y! [7 `1 i% W
  58. 0 Z3 ^5 \) H8 p' v" [! ^# ?& T; [
  59. //------------------------------------------------------------------------------' b) Z( y; p9 y' P. ^+ F2 T
  60. // Declaration of global variables
    ! O+ y7 s) ^9 ], B! L) ~: D  Y
  61. //------------------------------------------------------------------------------
    ( ?5 [0 W" C3 U
  62. Gtac *theGtac;0 \& z0 ?% O4 E! o

  63. 3 k* s3 }2 l' F2 ?+ _& ~( ?( M
  64. //------------------------------------------------------------------------------% S3 k% {' n  C& P
  65. // Constructor
    & g# b4 H  ^1 X4 x
  66. //------------------------------------------------------------------------------4 J8 _+ E1 ~/ Y! W* B+ ~
  67. Gtac::Gtac()
    7 ]. m/ C0 q% {
  68. {& M" N2 G, W0 z* a; V; z& C8 U
  69.     // Initialize the NX Open C++ API environment% z! m" h' a) R8 s3 i8 ~# U0 f1 S
  70.     Gtac::theSession = NXOpen::Session::GetSession();) r# k" u5 ^% o  G' _2 S' ^
  71.     Gtac::theUI = UI::GetUI();
    5 D7 v# ^1 ^# F& ~6 v/ o

  72. 2 J6 z# k8 c9 r, y* c& x: q8 P
  73.     sm = theUI->SelectionManager();- |; t6 H# j: ~: a& P
  74.     mb = theUI->NXMessageBox();1 K* t0 X  ^8 H
  75.     lw = theSession->ListingWindow();% L; ~& J: W0 p$ ^! D3 n
  76. 1 X: C0 c+ j4 M' t8 ^. H. D3 Q
  77.     workPart = 0;
    5 D3 F# i3 h  v+ }6 ^1 X# g
  78.     displayPart = 0;
    2 R5 F, h/ w0 d% g* K
  79. }
    " T) A8 ?6 }" o
  80. 1 u. X+ K) m9 P1 }& J5 j
  81. //------------------------------------------------------------------------------
    5 x! \+ r0 A2 Z3 M* ~- I+ m1 }
  82. // Destructor
    6 Z! a; V/ A5 R5 @( d
  83. //------------------------------------------------------------------------------
    ! |0 d6 w3 Z6 w
  84. Gtac::~Gtac()" S2 M: }9 U3 j8 a9 A) X+ ^
  85. {6 _* @3 f5 t* D2 b" s0 t
  86. }' d8 g1 O3 J, j+ ~
  87. . l8 h  C* C. G9 a/ ~; K( P
  88. //------------------------------------------------------------------------------# @) Y% N/ _+ X
  89. // Selection4 `$ |' m( D# |' e2 o# l
  90. //------------------------------------------------------------------------------
    6 M7 V9 c4 ^  q& ~5 L! S$ k* {
  91. Face* Gtac::select_a_face()+ \( X5 A: s4 B8 u; w
  92. {
    # S" m# c  E  D# P' m; [
  93.     // ask user to select a face& {; t5 H" D- f2 q( X
  94.     UI *ui = UI::GetUI();0 r) b/ n0 j4 J* I7 |0 A8 ~* D
  95.     Selection *sm = ui->SelectionManager();
    6 ^! ~- t  I4 [8 ~, X3 B4 I' j
  96.     NXMessageBox *mb = ui->NXMessageBox(); // as of NX5! ^, X) }# A8 `" R/ a% b% F1 w0 @/ k

  97. - x- C/ Y4 \2 F
  98.     NXString message("Select Face:");
    : l' x7 C6 A6 g( R
  99.     NXString title("Select Face");" |: K2 n6 x  R/ i
  100.     Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;1 G3 a" X! r  V2 s- }9 s
  101.     Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;/ ?$ Q1 X# v7 m( M
  102.     bool include_features = 0;3 d) \+ [, E3 l! W% k5 M7 [+ Q. f8 q) x6 {
  103.     bool keep_highlighted = 0;
    ; d, c) ?+ ~1 k% o) `5 W: v+ Q

  104. 4 u4 C; C4 y7 o
  105.     // Define the mask triple(s); C# j7 p) S+ b& q% y; n
  106.     std::vector<Selection::MaskTriple> mask(1);$ H! F& h" y. E5 y/ J! f2 {# _- b
  107.     mask[0] = Selection::MaskTriple( UF_solid_type, 0, UF_UI_SEL_FEATURE_ANY_FACE  );8 i% F+ s& m1 q$ C9 C' E& r+ e
  108.     Point3d cursor;
    8 U/ G1 w7 T9 i$ U( f
  109.     NXObject *object;
    7 p; E' R2 I8 w2 p+ p1 x! D# [
  110. ; X' ^8 r' G# @+ D
  111.     // Select objects using filter defined by mask triples1 O) Q7 E; z( L4 L
  112.     Selection::Response res = sm->SelectObject(
    , X2 m5 h& h% |  U, c
  113.         message, title, scope, action, include_features,  P- N+ N, o4 F+ k
  114.             keep_highlighted, mask, &object, &cursor );0 E# x- G3 {3 Z) j

  115. 9 W  Y1 E, o) Y
  116.     if( res == Selection::ResponseObjectSelected )6 X3 n3 g% F, e( o! i3 D+ s
  117.     {* v: `$ Q9 V0 Z
  118.         Face *aFace;
    9 i: k" b# z; j! m* a8 a
  119.         aFace = (Face *)(object);3 y3 d( c& p/ w! X3 L# [5 f% a. ^
  120.         return aFace;2 d" t' O6 ~4 W& A; ^9 ?" S7 R+ T6 D
  121.     }
    + i4 m  B7 L. D, K5 a  E/ b

  122. * f& v8 U/ Y' o$ N1 i  u, b: Q' @
  123.     return 0;
    + i0 T( e$ |+ H9 h$ R$ c9 d
  124. }
    $ j3 c% F( T0 p, e: h# _% P
  125. 6 w( N! Z% b: v* [
  126. //------------------------------------------------------------------------------: s  Z) Q* a( ^. J3 s6 Z
  127. // start with our job...' Y1 w0 C1 x; o6 W5 f( J1 F: k3 g% p' V
  128. //------------------------------------------------------------------------------' F7 K2 G- H! x9 Q* @) N
  129. void Gtac::do_it()( R0 H# Y* P8 o! G1 a
  130. {3 s/ n8 w# K( D' d" L4 @5 P
  131.     workPart = theSession->Parts()->Work();
    ( x' M4 @( |; p/ z( A! ?% I
  132.     Part *displayPart = theSession->Parts()->Display();
    # x! z/ S: w$ W6 h( j2 \0 Q" m
  133.     stringstream out;  K) @: s3 w2 A- z3 c% ~- m

  134. 7 |. Z: f8 D2 a% u% \2 d0 j
  135.     Face *theFace = 0;8 }) m! e, a7 G  T2 @: Z5 \6 F# Y
  136.     std::list<Face*> myfaces;8 V4 m3 m% z/ f( ]4 ^
  137.    
    , h! y/ m" h8 }  a: u" a8 ?6 }
  138.     while( (theFace=select_a_face()) != 0 )' Z3 A7 f: @# B5 V6 J5 |. u+ r
  139.     {
      o0 g! f9 }0 N: m# @
  140.         if(! lw->IsOpen() ) lw->Open();
    1 X7 r7 s: D5 l6 I5 d
  141. 4 \( j. P8 q) G0 e; t2 Z% r7 H) Z1 o
  142.         out << "Selected Object: " << theFace->Tag() << endl;
    0 e& s" F8 b) [0 Q+ _/ q( p# c
  143.         lw->WriteLine(out.str().c_str());
    $ m: F5 [2 p% Y

  144. + T3 ]: H4 K. l4 u) _( X- K
  145.         std::vector<Edge*> edges = theFace->GetEdges();. g$ k1 n$ X: f
  146.         out.str(""); out.clear();' C9 {1 Z7 i* q2 }: j' l, d
  147.         out << " Number of edges: " << edges.size() << endl;
    ; U6 E- a+ i: ~5 ?% z
  148.         lw->WriteLine(out.str().c_str());
    + t% L! i. f6 L; Q8 ]1 i& d2 t

  149.   n( q  t! X+ |# Z% a, s
  150.         for( int ii = 0; ii < edges.size(); ii++)9 N- n! W- ~( R- |
  151.         {+ g, H5 z. p3 `: O# }: e
  152.             out.str(""); out.clear();
    0 q- K8 ^6 n, g# Z% g" [
  153.             out << " Edge: " << edges[ii]->Tag() << endl;. z9 O/ ]; k! s
  154.             lw->WriteLine(out.str().c_str());
    ; @6 V( z& Q" f

  155. 8 Z5 E* E) T+ l) I7 D7 o% x( I
  156.             std::vector< NXOpen::Face * > adj_faces = edges[ii]->GetFaces();' G% [( a2 \7 P1 g# q
  157.             out.str(""); out.clear();
    : Q  o$ N; F( Q8 P3 N
  158.             out << " Number of adjacent faces: " << adj_faces.size() << endl;
    $ y2 K$ G9 R' S
  159.             lw->WriteLine(out.str().c_str());$ t3 ?9 D- B8 r6 _

  160. 5 r. C7 E. r, |& p3 T
  161.             for( int jj = 0; jj < adj_faces.size(); jj++)
    . ~1 }' S. |: M5 @! ^
  162.             {
    $ m$ U6 ?: p4 I; P
  163.                 out.str(""); out.clear();% {& y8 c/ U/ U: M+ @6 A7 k
  164.                 out << " Adjacent face: " << adj_faces[jj]->Tag() << endl;
    0 I  A6 `! |( t/ X7 n) [
  165.                 lw->WriteLine(out.str().c_str());' E" j4 o2 g8 I& `, |3 H
  166. : Q" o  ~/ Q: G+ r) @% b
  167.                 myfaces.push_back(adj_faces[jj]);
    . w* N& A4 G0 y% z' e% n  M+ i9 ~, \
  168. # _7 i$ M4 a% ~3 ^
  169.             } // jj
    . R! a  ]" v( o5 a
  170. 8 z% P, J$ Y  z, s: \. w* e
  171.         } // ii
    6 m' ?7 U9 s: i. R
  172. $ U- r7 y0 ]8 q4 M6 ]5 I+ w
  173.         myfaces.unique();
    # I" ?/ P, c  q, y! N) x; I9 Y
  174.         for (list<Face*>::iterator it=myfaces.begin(); it!=myfaces.end(); ++it)( o! P& o1 a. M$ }
  175.         {
    2 U% S# s. O- a0 N
  176.             (*it)->Highlight();
    - ?/ ~2 S' M, X/ G0 w' [8 {
  177.         }4 B. A# o5 H  b, x
  178.         Gtac::theUI->NXMessageBox()->Show("Adjacent Faces", NXOpen::NXMessageBox::DialogTypeInformation, "Confirm");/ L; p, w! q9 Z
  179.         for (list<Face*>::iterator it=myfaces.begin(); it!=myfaces.end(); ++it)
    - Q. [  n. u! g3 v( u8 ^6 f3 l
  180.         {/ {! W* E) H2 w( i* f2 x6 y
  181.             (*it)->Unhighlight();4 @( r/ W9 G% A7 [4 E; h
  182.         }
    - }7 E3 ]  j9 ~6 n5 a  F) c& p( Y
  183.         myfaces.clear();
    * o7 ~- W! }! u& ?  p
  184. ; ]& x: d) L  |

  185. ) X# {9 f% j& F( E+ _
  186.     } // while3 J0 x8 {. O4 C/ W$ ~4 ?5 k
  187. }
    # r% G8 G( _7 z7 K! F) L2 @- R

  188. 3 m  R+ u8 M: y* B
  189. //------------------------------------------------------------------------------5 c: v$ s9 B/ X! u: a1 ~3 v
  190. // Entry point for our unmanaged internal C++ program$ o% C% u8 _! y1 f( L) {
  191. //------------------------------------------------------------------------------
    7 T. d# p' m& x. ?
  192. extern DllExport void ufusr( char *parm, int *returnCode, int rlen )
    / x7 Q1 z1 ]% y: x5 |
  193. {
    " ^! z# Q, j& v- B: W. Z
  194.     try/ t- E# }3 X8 R. _
  195.     {: y! C- D; y% C8 J2 n# `
  196.         theGtac = new Gtac();
    , h0 C$ e8 A+ v2 l8 i' t- `# j
  197.         theGtac->do_it();6 z& E! W% N( q
  198.         delete theGtac;  e2 m5 l4 G! l9 A5 O# v( q
  199.     }) B8 v0 H$ q: d0 O" ?
  200.     catch (const NXOpen::NXException& ex)
    3 H: i0 ?7 U2 l& f! o, L% U
  201.     {
    7 d1 z3 {* u& Y' _
  202.         // ---- Enter your exception handling code here -----$ @9 u- W9 c) V4 F
  203.         Gtac::theUI->NXMessageBox()->Show("CaUGht Error", NXOpen::NXMessageBox::DialogTypeError, ex.Message());2 z" |0 b8 t/ ]! z
  204.     }
    3 L; T6 `2 j" }/ ?" p* Y
  205. }
    , h, c4 T8 N  U1 T

  206. % k% T; R( I( K4 y
  207. ) ^. D* h+ ^& o" g/ {
  208. //------------------------------------------------------------------------------# ~4 v. |- u; t- A  d: a+ N3 Q
  209. // Unload Handler! M& I3 E, L/ n+ `' }% `
  210. //------------------------------------------------------------------------------
    / Q$ h, m8 V2 ^0 }  d: `8 I
  211. extern "C" DllExport int ufusr_ask_unload()
    0 h- x$ p2 ?  O
  212. {
    : `  X: z. P; N0 @* _% K
  213. return (int)NXOpen::Session::LibraryUnloadOptionImmediately;
    - r" {& ]2 O1 i, ^/ w# W+ q. q
  214. }
    2 h* i' P' n4 _* H9 T
  215. " X' [5 Y. T" b" c% W- f' E
复制代码
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 注册

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

    本网站(plmhome.com)为PLM之家工业软件学习官网站

    展示的视频材料全部免费,需要高清和特殊技术支持请联系 QQ: 939801026

    PLM之家NX CAM二次开发专题模块培训报名开始啦

    我知道了