PLM之家精品课程培训,联系电话:18301858168 QQ: 939801026

  • NX二次开培训

    NX二次开培训

    适合初级入门或想深入了解二次开发的工程师,本培训结合ufun,NXOpen C++,大量的实例及官方内部的开发技术对于老鸟也值得借鉴!.

    NX CAM二次开发培训报名 NX二次开发基础培训报名
  • PLM之家Catia CAA二次开发培训

    Catia二次开发培训

    Catia二次开发的市场大,这方面开发人才少,难度大。所以只要你掌握了开发,那么潜力巨大,随着时间的积累,你必将有所用武之地!

  • PLM之Teamcenter最佳学习方案

    Teamcenter培训

    用户应用基础培训,管理员基础培训,管理员高级培训,二次开发培训应有尽有,只要你感兴趣肯学习,专业多年经验大师级打造!

  • PLM之Tecnomatix制造领域培训

    Tecnomatix培训

    想了解制造领域数字化吗?想了解工厂,生产线设计吗?数字化双胞胎,工业4.0吗?我们的课程虚位以待!

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

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

[复制链接]

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

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

admin 楼主

2013-11-6 18:54:58

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

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

x
通过这个代码,可以获取选择面的相邻面的信息+ h8 R4 a" B' J' G, ]0 @" K
NX open C++中使用了 选择对象 selectobject 函数,通过面获取边数据,通过边获取面,从而得到信息!
2 Y2 O9 r* N5 r3 S2 \, h8 f+ \7 Z7 v' r& x' N" R
  1. #include <uf.h>
      C( n! f1 [% D2 x4 Q- m# M
  2. #include <uf_ui.h>5 m# k5 K$ Q1 F5 B9 U! w
  3. #include <uf_object_types.h>
    4 u7 o" n( ^0 Q4 h% c$ l
  4. ) I& @. a$ e8 @8 S3 s3 q
  5. #include <NXOpen/Edge.hxx>+ t6 P+ p- E  M. M8 M
  6. #include <NXOpen/Face.hxx>
    - O+ t5 M: @( s3 ^8 Y- y0 W
  7. 7 K" I' c! o! d1 }9 U
  8. #include <NXOpen/ListingWindow.hxx>
    " b, n: w. q3 E9 Y1 |6 K8 U
  9. #include <NXOpen/NXException.hxx>  K& o( l7 _$ \: z! S
  10. #include <NXOpen/NXMessageBox.hxx>2 W! L0 H4 J4 I
  11. #include <NXOpen/NXObject.hxx>6 h+ k$ p; R3 x* l' g
  12. #include <NXOpen/Part.hxx>: r" j# _1 x; H4 R8 j0 _
  13. #include <NXOpen/ParTCollection.hxx>( \& r% T5 r0 e# v0 S7 j4 N& P
  14. #include <NXOpen/SelectDisplayableObject.hxx>
    $ w' q( ~4 L( [4 z; v
  15. #include <NXOpen/SelectDisplayableObjectList.hxx>
    ( r5 z. A( P- Q: w
  16. #include <NXOpen/SelectObject.hxx>
    ' A9 i5 y6 [- c7 P; n& U1 C# f
  17. #include <NXOpen/SelectObjectList.hxx>4 S2 E5 F1 O6 ?& w( f' k( W2 M
  18. #include <NXOpen/Selection.hxx>9 `. |! [6 G/ E  U0 z- J7 t
  19. #include <NXOpen/Session.hxx>  D6 h! N& b# P3 ~% p
  20. #include <NXOpen/UI.hxx>
    # Y! H; Z5 J# s3 Y, p
  21. #include <NXOpen/View.hxx>: N" [- Y) M1 b  B

  22. * E3 }2 D8 O- H5 ^7 U& U+ n# F+ a+ a
  23. #include <iostream>
    ! u6 N& w9 t2 |' l
  24. #include <sstream>: i& j7 p; k, D4 K
  25. #include <list>2 z4 o. W6 u2 e5 t

  26. ( J$ u& Y  j" c* E# z( n2 `9 g& |+ b& \
  27. using namespace NXOpen;
    " T( d6 _( A$ q1 f! U
  28. using namespace NXOpen::Annotations;
    ( n6 Y/ a1 l5 x. P$ y
  29. using namespace std;2 a  B+ n$ a- @# B" t2 K! G: K4 j. Y8 U

  30. : m1 {% n& P3 \9 r
  31. class Gtac6 B0 k2 r) D6 {8 V- F
  32. {; W7 o' f* |2 _% B# _/ t5 X5 X
  33.     // class members( i4 `) Q* t. ?6 S3 b' w% H
  34. public:; g& k& L% d$ |% t" {
  35.     static Session *theSession;
    8 P6 n: \& N# F  _, X9 b
  36.     static UI *theUI;
    $ A3 G+ d% |5 H7 s. w% ]9 N& i

  37. 4 ~6 v8 n3 `- w4 y& T/ f
  38.     Gtac();! P/ {: t6 k, [. ]
  39.     ~Gtac();
    5 s+ u6 g/ e$ a, N/ |

  40. ; x9 P4 d0 @2 x  J0 k' [
  41.     void do_it();: M) |( Z7 H; z0 Y
  42. 5 ~) p( u! v- Y0 L3 a0 G
  43. private:4 m* e, R. n, |& x( J- k/ [& Q6 m
  44.     Part *workPart, *displayPart;
    - j3 r. y7 e1 r+ B+ U
  45.     Selection *sm;- M3 b, X' g2 h- K0 I* D6 N) S
  46.     NXMessageBox *mb;
    4 K5 x6 s5 e! H0 P/ b: W
  47.     ListingWindow *lw;
    3 @" D3 L' W; s3 @: |. h9 Z6 D, r

  48. ; b! v7 A$ @% {4 K. f' C1 v
  49.     Face* select_a_face();' G2 d0 A& B) D7 h/ z

  50. % B) _9 C4 g# U3 \$ F4 V: ]
  51. };! v2 C+ s6 R% u

  52. + ^* a  @# ^; ?) ^0 N
  53. //------------------------------------------------------------------------------0 j" `9 `0 a! u$ ~: r+ Y
  54. // Initialize static variables
    3 `  R7 B# n9 n- b+ G% I8 D
  55. //------------------------------------------------------------------------------
    5 b1 `* i  F$ Z
  56. Session *(Gtac::theSession) = NULL;
    4 g2 V+ s( b3 i" T) n  O! z
  57. UI *(Gtac::theUI) = NULL;* w2 w  N. w- v4 S/ Z
  58. . P8 s1 h$ w+ v
  59. //------------------------------------------------------------------------------: }4 \3 t1 N; v% N
  60. // Declaration of global variables
    - L6 o# p- `0 U0 c
  61. //------------------------------------------------------------------------------
    3 R" k! n- w( t* B+ Y) b
  62. Gtac *theGtac;
    & m; r0 q* L& |5 C/ J
  63. ; `+ r, }" g, X. J$ o
  64. //------------------------------------------------------------------------------" p: D& _. O5 y" M* T9 I' C
  65. // Constructor
    , j. k9 ]9 B4 ^$ ?8 U
  66. //------------------------------------------------------------------------------
      [1 F* Q" _% G4 U' v7 A
  67. Gtac::Gtac()
    . y2 Y" K/ o6 Z) d+ h8 H* M- [& g
  68. {
    ! @2 k7 X% r6 H9 c
  69.     // Initialize the NX Open C++ API environment
      {( d& [& B2 k: k9 m- H
  70.     Gtac::theSession = NXOpen::Session::GetSession();
    : q+ {! K" R2 ?/ M$ Y
  71.     Gtac::theUI = UI::GetUI();* o7 j! y$ a" d
  72. 2 {/ ^  l! x& {! B+ o
  73.     sm = theUI->SelectionManager();
    6 J- ?# r7 k" c: {& A8 f
  74.     mb = theUI->NXMessageBox();
    : E: K2 T7 l$ N  |/ \+ E1 J# b
  75.     lw = theSession->ListingWindow();* R7 Q+ p* ?7 i9 L4 f0 `/ ~
  76. ) g5 p- m1 _4 V2 i9 c) d: z. B% K
  77.     workPart = 0;
    # L7 m' }3 _7 m$ M2 s) Z& F) U
  78.     displayPart = 0;( w. d! ]0 i% C9 e  K6 a- F
  79. }
    8 [" h7 G) g4 M  r4 R  N: r, m
  80. # s; b2 w+ z# l# m) E
  81. //------------------------------------------------------------------------------5 Q9 T: s. d4 B3 p! f9 }$ F" [; o: R
  82. // Destructor* J- m9 @  K, G
  83. //------------------------------------------------------------------------------$ L4 S& W, [) N0 S2 M8 W
  84. Gtac::~Gtac()) U# v' ?) g& Q) s4 U6 k# c  X
  85. {
    # q0 H% w, X$ f0 [; h( R
  86. }
    ) _- q2 w5 y2 s
  87. # m# w5 T5 u( _5 f# \
  88. //------------------------------------------------------------------------------. V/ }! U  q, R) b( o! R
  89. // Selection- t& M9 n- S. z# V
  90. //------------------------------------------------------------------------------+ _' Y' Z& R& @# q, M
  91. Face* Gtac::select_a_face()7 o1 V/ j; y6 k. P3 f
  92. {, V+ v$ W1 a3 c2 h" D
  93.     // ask user to select a face" L2 y4 x( A" O! m  z" O, G
  94.     UI *ui = UI::GetUI();% i3 ]5 z9 l: j+ ^
  95.     Selection *sm = ui->SelectionManager();; u4 L9 ^4 Q% ^5 B1 v* _
  96.     NXMessageBox *mb = ui->NXMessageBox(); // as of NX5
    6 G0 ]4 i* w" e. g; u) r) `2 M

  97. % Y! V2 v. G, K" z: p: s% E
  98.     NXString message("Select Face:");1 `% s( Z6 ]; m' b/ a, j
  99.     NXString title("Select Face");$ d" H( g0 R! A6 n- T2 v
  100.     Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
    * m( [$ m( p. `$ M& o$ l6 D, A
  101.     Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;- r- q' U" }8 P+ f# F
  102.     bool include_features = 0;
    4 F! B$ p$ A! d6 }' Y8 y
  103.     bool keep_highlighted = 0;( m6 h% O1 b! r" K2 A

  104. , s) K' E  G4 {* X
  105.     // Define the mask triple(s)3 s/ q9 p5 o1 M- b5 r- N% H
  106.     std::vector<Selection::MaskTriple> mask(1);
    + s8 d: |+ J* p
  107.     mask[0] = Selection::MaskTriple( UF_solid_type, 0, UF_UI_SEL_FEATURE_ANY_FACE  );  ^, [0 B' Y* N
  108.     Point3d cursor;
    5 B% p% w! l& m
  109.     NXObject *object;
      J  z4 H/ X* ^; K6 e3 J

  110. 8 N9 o8 c( N2 n9 R4 Q
  111.     // Select objects using filter defined by mask triples2 w2 e% {- R$ _. P; A7 R/ e6 g
  112.     Selection::Response res = sm->SelectObject(8 q7 y! z' u! u, n
  113.         message, title, scope, action, include_features,
    & `: h. b) G5 A: M# \$ H
  114.             keep_highlighted, mask, &object, &cursor );
    8 X; q! A% t/ I, j* E8 d# s* I2 }% C

  115. 4 q9 Y% f7 E, e8 t
  116.     if( res == Selection::ResponseObjectSelected ), Y& S- Y/ C! y
  117.     {
    2 ^7 q8 m, B1 o- j4 f% Q, o  ~
  118.         Face *aFace;- R+ _$ V0 t( b# I
  119.         aFace = (Face *)(object);$ X: n6 {* I! N( T$ b
  120.         return aFace;" l5 Q1 g& z/ ^
  121.     }8 E7 l$ E# T5 |8 h: o2 V6 Q, w
  122. , W$ P( ?1 R1 V- q5 z& j) C9 U1 Z$ X
  123.     return 0;
    * e4 k! f7 P) R* c  ?, ?$ V3 G
  124. }+ |1 u: ?# \  Y% c
  125. , k0 n% J: v' f& L' Q5 [4 A
  126. //------------------------------------------------------------------------------* K7 c) b$ E7 V# \6 y' [
  127. // start with our job...
    9 I! B4 o1 J7 I9 m" T. y2 d# S9 p
  128. //------------------------------------------------------------------------------
    " L5 P# {1 N3 B( R
  129. void Gtac::do_it()4 y5 Q# G! ?9 c7 e
  130. {
    % o1 F0 o( V0 @! R1 y% A
  131.     workPart = theSession->Parts()->Work();
    1 L5 f# u) l! j, ?
  132.     Part *displayPart = theSession->Parts()->Display();
    2 ?7 \! Y# J9 n& G
  133.     stringstream out;
    ) M3 l3 S( O# o

  134. ; D4 D/ ]' J# N) D- j3 G' X
  135.     Face *theFace = 0;% ]" `& U) W: W
  136.     std::list<Face*> myfaces;- P' z4 X5 w( u/ M
  137.     # e& |3 Y" f5 E- X" {
  138.     while( (theFace=select_a_face()) != 0 )
    ! e) e5 C( m8 x8 e& |
  139.     {
    ; T4 j% h1 [4 t2 I6 ^
  140.         if(! lw->IsOpen() ) lw->Open();( a7 W( n/ v4 H4 e, A* P
  141. 3 y9 ]: F7 w# v' Y: p' A
  142.         out << "Selected Object: " << theFace->Tag() << endl;$ M- ]5 B0 C  E6 j8 u
  143.         lw->WriteLine(out.str().c_str());, d; i" ^/ e* g, ^1 J* F

  144. ) N: o$ ^, c1 w7 _; U
  145.         std::vector<Edge*> edges = theFace->GetEdges();
    " Q. b7 F2 m5 P4 [
  146.         out.str(""); out.clear();- A0 T  \2 u# n. ^$ q2 l5 r
  147.         out << " Number of edges: " << edges.size() << endl;
    4 f7 O7 s' i& I! G  o( H
  148.         lw->WriteLine(out.str().c_str());4 v! f. `5 O7 @5 [- ~* Y

  149. 1 I! G# _0 T2 ]
  150.         for( int ii = 0; ii < edges.size(); ii++)$ a! o4 a" d: c* O( c. C- D
  151.         {+ r; \8 y1 x' V  n/ |0 {: Z; k
  152.             out.str(""); out.clear();
    " a# w( `2 R$ d3 J' @. D* f$ y
  153.             out << " Edge: " << edges[ii]->Tag() << endl;% |' U- y" C. l! W2 V
  154.             lw->WriteLine(out.str().c_str());9 G, p: E+ Q$ F0 a/ q. T
  155. : @$ v- x; C5 P; w/ u0 f
  156.             std::vector< NXOpen::Face * > adj_faces = edges[ii]->GetFaces();/ R$ b" ]' D- M3 y) Q: u
  157.             out.str(""); out.clear();
    8 k+ X1 o! Q# p& M1 `2 ~
  158.             out << " Number of adjacent faces: " << adj_faces.size() << endl;. I$ B& O1 e/ w$ s4 Z
  159.             lw->WriteLine(out.str().c_str());
    & ^  a, H, ]. h
  160. 9 r2 ~! O1 j; C* B6 Y3 ]1 j+ G1 Z
  161.             for( int jj = 0; jj < adj_faces.size(); jj++)% H" f+ q* }7 T) n; H
  162.             {* j8 b0 M3 f  I7 O& P" V
  163.                 out.str(""); out.clear();" Z+ p+ P4 {) Q: v, D( Z% s
  164.                 out << " Adjacent face: " << adj_faces[jj]->Tag() << endl;( t& t* z. H# j* Z4 j' T
  165.                 lw->WriteLine(out.str().c_str());
    , E/ Q7 o$ Q  O8 C. k
  166. 3 Y$ h/ _7 ]; E* f- U
  167.                 myfaces.push_back(adj_faces[jj]);
    8 }) ]* A9 W. V$ t; n+ B

  168. 1 z6 J* s4 [2 A
  169.             } // jj
    ( n1 G: H9 i3 B: U  S4 }
  170. ( M, J& ]! J& q- A9 M7 e
  171.         } // ii; M1 e7 H5 H+ s( u! u) n; K

  172.   A& |' x% {6 {" N: \4 w
  173.         myfaces.unique();
    & n" O" B6 m( a, v1 C2 d# A
  174.         for (list<Face*>::iterator it=myfaces.begin(); it!=myfaces.end(); ++it)
    2 U6 S- ]. H9 B3 A7 I5 s
  175.         {
    5 f1 G, K( M8 i: h& d
  176.             (*it)->Highlight();' O# E8 z; j" j; t1 U/ b8 k% `1 t9 x
  177.         }
    + X, F8 o4 X# i: b0 O5 p
  178.         Gtac::theUI->NXMessageBox()->Show("Adjacent Faces", NXOpen::NXMessageBox::DialogTypeInformation, "Confirm");
    % ^" h, f; F5 o2 J
  179.         for (list<Face*>::iterator it=myfaces.begin(); it!=myfaces.end(); ++it)
    ! a' B3 l) V. n
  180.         {
    - z% v0 P9 p" \, R5 B6 L" K
  181.             (*it)->Unhighlight();9 H( n& n' s+ _# o2 ~( I* ^
  182.         }5 e3 d( k( P( x7 b- e2 ]
  183.         myfaces.clear();
    7 [. x; K" B& h

  184. * f3 e; ?- x- ]7 d2 ]

  185. ) G5 [# j  o$ M6 b. `
  186.     } // while
    : T% B! }% B! R0 V8 `2 k; \
  187. }
    3 a7 W7 P6 l2 K: x7 K# u
  188. * ?9 p3 {6 o( `6 e# r
  189. //------------------------------------------------------------------------------
    2 y2 v! E: B# F/ M' C
  190. // Entry point for our unmanaged internal C++ program
    * M- H: z& x' O, a
  191. //------------------------------------------------------------------------------& H  W( N5 v! ?7 Z2 d/ p
  192. extern DllExport void ufusr( char *parm, int *returnCode, int rlen )" J  c/ y$ W/ r
  193. {( \5 C# s7 J. G# U& X
  194.     try& }  ~1 r3 M  b! j, T9 r
  195.     {8 v( b! @3 I& W
  196.         theGtac = new Gtac();7 X- ^; Z3 C+ U; ~9 {
  197.         theGtac->do_it();
    + r4 U- @: C7 h7 H( Z
  198.         delete theGtac;
    9 E8 i5 @& }. f3 h6 W7 q
  199.     }
    : H0 g: r# n6 x- E% d, A
  200.     catch (const NXOpen::NXException& ex), q. N( y1 j4 M$ s$ o8 B1 ^
  201.     {
    % H2 }4 T% J) v9 w+ c) @/ {
  202.         // ---- Enter your exception handling code here -----3 `4 x  R5 f1 b- W" K* {
  203.         Gtac::theUI->NXMessageBox()->Show("CaUGht Error", NXOpen::NXMessageBox::DialogTypeError, ex.Message());
    / ~3 w9 _) F& t( _3 e; @2 E4 U" N
  204.     }
    * Y! [! C; b: P( d  m
  205. }3 U# Z3 o& |& K! f% W% v5 t8 p- u

  206. / ~0 l6 |' d/ _6 M
  207. , C& C% `6 |; ]3 r
  208. //------------------------------------------------------------------------------' A% U1 i, K# m& [& Y; b
  209. // Unload Handler+ ^8 J5 z2 a! R
  210. //------------------------------------------------------------------------------2 H& I4 J2 S0 t# s: ^% T
  211. extern "C" DllExport int ufusr_ask_unload()! B3 I& Z7 M* A% [/ T
  212. {; M2 H! n( e6 g9 t/ H5 o0 e- w
  213. return (int)NXOpen::Session::LibraryUnloadOptionImmediately;
    * G: S6 i* l/ U& F- t# n& K
  214. }1 M& l5 T9 F) Y% H+ }& K! w' Z

  215. . ~4 J( C5 v0 S- b
复制代码
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了