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 6105 0

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

admin 楼主

2013-11-6 18:54:58

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

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

x
通过这个代码,可以获取选择面的相邻面的信息' C! t+ x6 T" T& k8 z9 r
NX open C++中使用了 选择对象 selectobject 函数,通过面获取边数据,通过边获取面,从而得到信息!
& q+ O' }; _) i# a0 X
  O" M9 N. T6 [6 X' ~
  1. #include <uf.h>
    0 _; i( ^$ [, n* _
  2. #include <uf_ui.h>
    - W6 r9 _* V' V, m, d7 B1 w7 p9 B
  3. #include <uf_object_types.h>  }2 B1 F9 j6 d6 B7 B
  4. 9 b" m) m4 s* L  c
  5. #include <NXOpen/Edge.hxx>" r7 t0 e, U$ l6 c  P; o& r- o
  6. #include <NXOpen/Face.hxx>
    4 o% ]. Z8 A! _5 q# Q

  7.   N4 y/ Y0 D4 O: w# j: o
  8. #include <NXOpen/ListingWindow.hxx>8 D0 F+ k' F! A( j3 e( Q2 v
  9. #include <NXOpen/NXException.hxx>& t3 N6 ?/ {) R- Y$ }  E2 N6 y
  10. #include <NXOpen/NXMessageBox.hxx>
    , _$ O- h+ G4 U) ~0 t3 V, `7 V/ \, e* d- S
  11. #include <NXOpen/NXObject.hxx>- ?5 G' g% H8 B
  12. #include <NXOpen/Part.hxx>1 G: `5 {0 V$ i( V# y6 M- h
  13. #include <NXOpen/ParTCollection.hxx>, i* d8 ]$ v7 r8 T; Y0 f
  14. #include <NXOpen/SelectDisplayableObject.hxx>
    6 u1 C' u# r/ C: W* E% t
  15. #include <NXOpen/SelectDisplayableObjectList.hxx>5 }3 ?# r6 Z; T+ J
  16. #include <NXOpen/SelectObject.hxx>
    7 ~4 K; q) Q4 c* g- S- p
  17. #include <NXOpen/SelectObjectList.hxx>" D( E/ f+ {  e3 q' @
  18. #include <NXOpen/Selection.hxx>6 T5 T4 W# K& y% ]) k
  19. #include <NXOpen/Session.hxx>
    " p. l, H/ ^- |# U: o/ K
  20. #include <NXOpen/UI.hxx>" x' X0 Y& M* q( L0 Q) Y+ s6 i
  21. #include <NXOpen/View.hxx>: f# {; o; ^9 ^3 T: O6 A
  22. 9 x3 l! e9 z9 p% H2 K3 a! b
  23. #include <iostream>
    # w1 Z: ^7 W0 `' L& ]" N8 H) k% Z
  24. #include <sstream>
    5 k" B8 d! ?1 @. ]$ T6 f/ s; B; r
  25. #include <list>3 ?1 T7 G, p. v) c
  26. ) a( K7 t0 O  t
  27. using namespace NXOpen;
    2 w; a) l' F- W* w- D$ t( B3 l
  28. using namespace NXOpen::Annotations;
    . c- h# {  Q( @3 E: R/ F* c+ i3 R+ L
  29. using namespace std;
    2 R5 [$ W7 z! w
  30. ) b# {! W( L" A" Q, K
  31. class Gtac( ~  {* L8 n" [. {
  32. {& F! Z! o5 d7 v% y, K
  33.     // class members
    3 Y- d0 }& @  u8 q+ T
  34. public:
    * W- d' I% H; r. ?' W" P  t& u/ e; Q
  35.     static Session *theSession;$ @1 B/ S! j7 M5 ]* _" ^  N/ m
  36.     static UI *theUI;
    . _8 x5 ]6 p' r6 B5 m, v% S
  37. 2 M  Y3 e6 a$ J( P0 i0 f3 F! D
  38.     Gtac();- Z2 q0 H6 a: P/ B
  39.     ~Gtac();( `9 M' u/ U/ y& ?

  40. - j$ j% b. f9 H1 X1 X: S4 {
  41.     void do_it();
    - {; G, _0 U1 c1 T
  42. : r9 q2 ]+ O! M* z9 i4 p
  43. private:6 \) C# M1 w5 p
  44.     Part *workPart, *displayPart;
    ) ~' C. n' g* Z; L
  45.     Selection *sm;
    + ?2 [$ H( M" p# g
  46.     NXMessageBox *mb;
    ' g! }7 m! O3 d/ d0 b
  47.     ListingWindow *lw;
    ! c  Y8 n8 }  V8 ]. {8 q
  48. 3 a6 j% Q( f) Y: A$ ^6 y
  49.     Face* select_a_face();+ b2 R$ M  t8 P- ]) F9 ]
  50. - @6 E0 I9 \* h' D  j. z3 q
  51. };
    5 H. u7 X8 l$ s0 p) w3 O
  52. 0 d" h; b$ k# Y, D  F, q1 E) G
  53. //------------------------------------------------------------------------------
    1 U6 F2 \% O. b* P; N! |1 p
  54. // Initialize static variables
    4 O7 U# g$ F* j/ E/ S& y/ G
  55. //------------------------------------------------------------------------------# Q6 Z7 b7 `; i8 A
  56. Session *(Gtac::theSession) = NULL;
    5 S) o4 m( @+ f6 r7 k- S) D
  57. UI *(Gtac::theUI) = NULL;
    ' I/ R" l! o' K7 X2 G8 s+ ?% i/ ?: S& ~
  58. - S9 g' o2 o! u
  59. //------------------------------------------------------------------------------
    4 e9 L# U6 X2 o+ Y+ H) X
  60. // Declaration of global variables! C* w) m" b$ M, |# j
  61. //------------------------------------------------------------------------------; U& I4 C; ]; \4 _5 ?  D
  62. Gtac *theGtac;# U9 g  o* [/ X

  63.   Y( `; o# Q: |& K
  64. //------------------------------------------------------------------------------8 z' l( m2 R2 T  m
  65. // Constructor  F+ }" y8 f9 x9 u$ w
  66. //------------------------------------------------------------------------------
    3 A; U, }3 P4 ~: U0 f' J9 w0 ]  f
  67. Gtac::Gtac(), h  f5 e( Y# H  i5 w
  68. {
    & s4 M* o$ D. M: Z
  69.     // Initialize the NX Open C++ API environment# M4 t8 w7 z% E" Q1 s; c) J) X
  70.     Gtac::theSession = NXOpen::Session::GetSession();8 m/ u& z7 J5 v: F7 u. u
  71.     Gtac::theUI = UI::GetUI();
      X& Y& u2 x. Z& i% o3 u6 G8 |
  72. ! V$ K. L0 K+ W. _; \3 @! P. s
  73.     sm = theUI->SelectionManager();
    6 f" n( Y; |- L$ _
  74.     mb = theUI->NXMessageBox();
    / w5 I, X$ R0 m& l% A
  75.     lw = theSession->ListingWindow();1 \' m. ]5 J2 j2 C$ h
  76. 2 J7 y0 f3 V: X$ D5 d1 ]2 D9 `
  77.     workPart = 0;* S- Y2 H3 y/ R/ I
  78.     displayPart = 0;  t' \: O3 }! O: w
  79. }
    $ N: a8 S! b7 l# c

  80. & e4 b/ o2 P' e; z2 O
  81. //------------------------------------------------------------------------------
    % h- n+ z7 b& f( D7 x7 U
  82. // Destructor/ n! Y; y: {! a* C
  83. //------------------------------------------------------------------------------
    1 ~  Q. n4 r# f6 Y
  84. Gtac::~Gtac()/ `$ @8 R0 _6 W0 Z
  85. {
    ! ]% V( o7 ^$ n# q0 T7 c9 U
  86. }  m1 e/ Y* S2 v8 _$ J' c) W' N

  87. ) ?4 ^. y; F( j( {: F
  88. //------------------------------------------------------------------------------* j7 L! u6 I; A8 \6 q+ O) H% b* N
  89. // Selection
    0 ~7 S/ |- r' Q2 J1 U" s
  90. //------------------------------------------------------------------------------
    : N, ]+ q5 y: r! V
  91. Face* Gtac::select_a_face()
    3 M/ Y0 x9 B. N9 a
  92. {
    2 }3 K/ h- c; J! q  l! G
  93.     // ask user to select a face+ H9 Z, F+ t8 j/ s) s7 [" T2 @
  94.     UI *ui = UI::GetUI();$ {7 I2 j& \4 r6 p8 C2 e, v4 u
  95.     Selection *sm = ui->SelectionManager();
    1 c; _. j! R; K. e* p
  96.     NXMessageBox *mb = ui->NXMessageBox(); // as of NX5) A: D3 N& \; R$ s

  97. ' a2 |) x3 \/ {! T3 d
  98.     NXString message("Select Face:");
    & P- n# Z6 v8 @* r; _
  99.     NXString title("Select Face");
    $ l/ g' y. P3 _! d+ {. q% v* Y
  100.     Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
    & {, e" |. x4 Q1 g% j- @
  101.     Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;9 D* m" s2 a5 k: R% r; _6 G
  102.     bool include_features = 0;
    # A$ H7 l- j  H
  103.     bool keep_highlighted = 0;
    ' a: i1 O3 m5 X. k+ s! X

  104. + y' p% m% Y' r5 e: h" I$ E- o
  105.     // Define the mask triple(s)
    1 x% F9 ~  E; w' ^7 d% w
  106.     std::vector<Selection::MaskTriple> mask(1);
    : _* e; f8 k& F* S
  107.     mask[0] = Selection::MaskTriple( UF_solid_type, 0, UF_UI_SEL_FEATURE_ANY_FACE  );$ \8 h  K) N, U1 w1 }. \- _
  108.     Point3d cursor;5 E( \4 L) _' P$ n6 x& q( @
  109.     NXObject *object;7 z. v) I8 w) V  v

  110. , g" H* [0 D6 x3 X; b
  111.     // Select objects using filter defined by mask triples$ c# F8 N& ^6 e  d" W9 T
  112.     Selection::Response res = sm->SelectObject(9 [7 F* m/ \. W" e6 Q
  113.         message, title, scope, action, include_features,
    % V% u8 T8 `% F0 O3 v
  114.             keep_highlighted, mask, &object, &cursor );
    5 l6 W# O5 F% Q5 p8 q$ D. ~
  115. ( a' M' s2 g, @
  116.     if( res == Selection::ResponseObjectSelected )! U! X, P# c2 X$ k( f# t/ e1 F" e
  117.     {# f6 A# o7 T+ L5 R0 x& t" \
  118.         Face *aFace;5 F9 w: W1 h3 t
  119.         aFace = (Face *)(object);
    ' K/ I1 Y8 |2 m3 U  d3 T+ W% Q
  120.         return aFace;
    1 B) ]* }5 }+ s/ Q+ ~7 Q
  121.     }3 ?  x" z0 R& h- S' G

  122. : M: G4 F# x4 w$ T2 _0 s9 Z
  123.     return 0;6 s5 ^- V0 r. p$ [. ], h
  124. }  t  {/ E0 _: v: l9 |  t

  125. ( p* F+ D  G! }. m) J; d
  126. //------------------------------------------------------------------------------+ i( ]$ W1 W6 \: J% N2 e: `
  127. // start with our job...+ c$ j1 _9 ^; a7 f3 \
  128. //------------------------------------------------------------------------------
    0 [' w& G$ a5 z4 y8 r) ^9 J! H* F8 W
  129. void Gtac::do_it()# u  \  W: `$ C0 `3 X& w' a( C4 O
  130. {8 y6 Q9 b& z) G; `$ g# i, P
  131.     workPart = theSession->Parts()->Work();3 r  F$ v  G% \( o4 L& y  i, X
  132.     Part *displayPart = theSession->Parts()->Display();2 M- c, \1 S/ m6 V" b- ]
  133.     stringstream out;
    . \& v0 R  n- K: l/ G; ~

  134. 4 ~" f1 x5 @$ L' s8 E
  135.     Face *theFace = 0;/ v0 Q2 z: \2 s) [/ H
  136.     std::list<Face*> myfaces;
    9 w& j8 q2 G+ n) {
  137.    
    1 [; G8 r* I6 S5 W3 v% X8 o0 z, p- V
  138.     while( (theFace=select_a_face()) != 0 )
    9 d% I, U% s9 F+ w% _" a
  139.     {2 N+ [- U* B. C* \
  140.         if(! lw->IsOpen() ) lw->Open();
      m8 b; O2 w* q3 a

  141. 3 g. k; K5 Q9 W3 H, @' O
  142.         out << "Selected Object: " << theFace->Tag() << endl;& G1 }+ W4 F3 x. r
  143.         lw->WriteLine(out.str().c_str());
    0 `2 H9 V$ m' s; p4 V/ Q: I8 p

  144. 8 r+ n( v5 ~3 _' F; e" Y
  145.         std::vector<Edge*> edges = theFace->GetEdges();
    , F) x/ z; @: D6 E
  146.         out.str(""); out.clear();, z1 n( u/ y- w* O" A4 o. @
  147.         out << " Number of edges: " << edges.size() << endl;9 O$ m& t' b/ [- Q  z
  148.         lw->WriteLine(out.str().c_str());( T8 g; \. K8 |

  149. ! |/ Q. d0 @* E' p+ e
  150.         for( int ii = 0; ii < edges.size(); ii++)& A+ o( b9 j0 a4 ~: O
  151.         {& }! D* A7 ~+ ~- N4 X3 ~! m
  152.             out.str(""); out.clear();
    / W4 e* j) ]! v/ l6 F
  153.             out << " Edge: " << edges[ii]->Tag() << endl;+ y) W& k5 {- b$ G
  154.             lw->WriteLine(out.str().c_str());
    . V( X; b$ O9 }

  155. % k( b/ Q3 G6 a0 r) p
  156.             std::vector< NXOpen::Face * > adj_faces = edges[ii]->GetFaces();9 ~; U- [/ k& \' a6 _/ v
  157.             out.str(""); out.clear();
    5 v- e% R9 ?5 @4 ^3 r6 J6 t
  158.             out << " Number of adjacent faces: " << adj_faces.size() << endl;
    6 ?4 T2 M6 v1 n* z' m
  159.             lw->WriteLine(out.str().c_str());
    " i$ o/ B, E; s, p" N( }# q
  160. 5 [( u" Y% n% V3 w9 B/ Y1 C1 X9 _
  161.             for( int jj = 0; jj < adj_faces.size(); jj++)/ Z$ i8 r( R3 m% q! D, r
  162.             {3 S2 Z/ V" {5 k$ u* t- l7 @
  163.                 out.str(""); out.clear();
    ; G4 C% G  O, ~/ x5 G
  164.                 out << " Adjacent face: " << adj_faces[jj]->Tag() << endl;; m3 `. n% |6 j" h8 v
  165.                 lw->WriteLine(out.str().c_str());2 H$ }) e( `7 f6 x# u# Z" y, k

  166. 7 D$ I5 S1 C6 n# V% A
  167.                 myfaces.push_back(adj_faces[jj]);' V! Y; m9 l, x( W3 t% Q$ m; ~- B' U
  168. ) K- e) h$ }+ b& a% r
  169.             } // jj5 V9 T  p: `) I
  170. ! j+ U) B  y. }, ^
  171.         } // ii# r5 F. y1 H8 \3 J3 q/ r2 j- |
  172. ! n! w4 g: Y" z! P% U9 H1 o! I
  173.         myfaces.unique();0 c  V5 I- F$ d* F
  174.         for (list<Face*>::iterator it=myfaces.begin(); it!=myfaces.end(); ++it)
    . Q) t/ S- Y& k6 g% z+ b  \9 ~
  175.         {* W  d# G8 F" v: K! F
  176.             (*it)->Highlight();% L7 X$ S0 {& d7 `! S, s" O: k
  177.         }2 v: B3 a+ h7 H9 b
  178.         Gtac::theUI->NXMessageBox()->Show("Adjacent Faces", NXOpen::NXMessageBox::DialogTypeInformation, "Confirm");' ]- X) ^6 X0 C( s$ b; D" c5 J% c
  179.         for (list<Face*>::iterator it=myfaces.begin(); it!=myfaces.end(); ++it)
    & ^- m0 E6 Z1 t, G
  180.         {* c9 a4 z7 E' F2 ?  M4 X
  181.             (*it)->Unhighlight();& L: b% W+ y9 |. d4 D
  182.         }
    + x. r+ o, ]" \- \$ g1 W" B( U4 e7 y
  183.         myfaces.clear();5 V6 I; i; |/ d0 }7 p. X
  184. 7 Q/ p$ c: j. f/ ^4 k

  185. ' u2 g3 R$ u2 R9 X- u
  186.     } // while1 B" h1 a5 l6 O- Q/ C$ e( r
  187. }0 c7 C7 F9 g7 Y! t9 z% Y, p

  188. ( z9 X6 A8 G. \: ]
  189. //------------------------------------------------------------------------------8 t6 e0 X# J" W2 E& D# f- g
  190. // Entry point for our unmanaged internal C++ program
    ( e( y4 P1 ~" q" l
  191. //------------------------------------------------------------------------------
    : M% A) F& x; ?+ m
  192. extern DllExport void ufusr( char *parm, int *returnCode, int rlen )+ [% T5 I" [6 l
  193. {
    1 p7 Z& J& Y4 G7 y/ b, ]0 L
  194.     try1 g2 M- R4 L1 `- w
  195.     {% N7 {; \9 {" g7 P! W
  196.         theGtac = new Gtac();
    : c) F7 O  h+ V8 F% ]
  197.         theGtac->do_it();
    " K( Q. ?, Z0 J# F: M
  198.         delete theGtac;0 h/ a6 C) D* `- [6 f& [7 J
  199.     }
    9 X  W2 Z& O2 P( C% Z6 W! S
  200.     catch (const NXOpen::NXException& ex)1 S* f$ X/ E$ I- w' L
  201.     {
    " x; x; L/ v) b
  202.         // ---- Enter your exception handling code here -----% T7 P7 y5 r2 S6 Q3 L
  203.         Gtac::theUI->NXMessageBox()->Show("CaUGht Error", NXOpen::NXMessageBox::DialogTypeError, ex.Message());6 R, H  o; F) j5 U. p: U
  204.     }
    , V$ R9 ?% F* p; v
  205. }5 i% `( F# V; f0 t3 V* N
  206. ' h( s4 N5 j% f9 v; t; J1 {
  207. ( F/ Y  N5 w$ l  ?1 M
  208. //------------------------------------------------------------------------------
    ( m' G' C2 \- m& D8 }
  209. // Unload Handler/ z2 A/ S( G8 r0 @: i
  210. //------------------------------------------------------------------------------; }8 d" T4 r" u1 `6 |+ c
  211. extern "C" DllExport int ufusr_ask_unload()
    5 V; H# x- c8 l" y' ?
  212. {. y% v6 x; t' e8 D1 u3 h8 @
  213. return (int)NXOpen::Session::LibraryUnloadOptionImmediately;4 n) M0 Y, }1 p4 }& ~3 ?
  214. }* b: B" y0 b" W2 s) V# W
  215. 2 R4 [3 p4 k- x8 i$ T
复制代码
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了