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

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

admin 楼主

2013-11-6 18:54:58

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

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

x
通过这个代码,可以获取选择面的相邻面的信息- P7 A( w& B& a" l2 E4 T3 b
NX open C++中使用了 选择对象 selectobject 函数,通过面获取边数据,通过边获取面,从而得到信息!# D/ Z0 x9 Q% J  z  E! f( }/ U
7 Q; k, Q. |3 M) s* g1 T& M% b
  1. #include <uf.h>
    & {* @. f2 J/ E# i
  2. #include <uf_ui.h>/ H+ a' k0 N1 ]# W+ Q5 H
  3. #include <uf_object_types.h># f! H! l. o9 t( j# d
  4. & R3 `. \& l1 n: L
  5. #include <NXOpen/Edge.hxx>
    / b0 f4 |1 B0 k) p2 N8 x
  6. #include <NXOpen/Face.hxx>
    " o4 P: h- x2 F- M2 d
  7. 6 U( `9 M: r! r5 n  N8 P
  8. #include <NXOpen/ListingWindow.hxx>
    ) [, t( E5 k4 n; N8 w2 Q  h2 A
  9. #include <NXOpen/NXException.hxx>
    - b- ?7 k7 w3 F
  10. #include <NXOpen/NXMessageBox.hxx>+ u( |# N- i# O
  11. #include <NXOpen/NXObject.hxx>! i% w% `) _1 g8 [/ i* z, W% R
  12. #include <NXOpen/Part.hxx>
    1 N5 S5 m8 ^8 y3 ^
  13. #include <NXOpen/ParTCollection.hxx>
    3 \# [4 r1 o2 W7 j' j1 \
  14. #include <NXOpen/SelectDisplayableObject.hxx>
    4 ]. K- b! ?) N5 Z  i8 r
  15. #include <NXOpen/SelectDisplayableObjectList.hxx>
    / Z! @2 x' Z- a  z2 F2 {; _) ?
  16. #include <NXOpen/SelectObject.hxx>) t- {' |2 K) u& @2 L; [
  17. #include <NXOpen/SelectObjectList.hxx>
    3 f  Z; p" Z1 G3 Q3 }- ^
  18. #include <NXOpen/Selection.hxx>) E0 ~7 @1 p& e4 k, M# S
  19. #include <NXOpen/Session.hxx>
    ! x$ p' w4 s: j* N
  20. #include <NXOpen/UI.hxx>
    0 }$ u5 O0 U* |0 H7 s: K. |* W
  21. #include <NXOpen/View.hxx>9 N- x7 ]$ ?8 ~7 A
  22. 6 e: Y. u5 F9 W7 B3 Y' f
  23. #include <iostream>
    ( H  }3 `6 m* d% S, T$ V: p
  24. #include <sstream>
    6 Y+ c* j* b& P9 [% j
  25. #include <list>
      e( v; }3 N9 S* K/ C5 M  @
  26. 4 n9 y  I7 l6 }! m4 A
  27. using namespace NXOpen;
    + E! m" J9 J/ {( F& ~
  28. using namespace NXOpen::Annotations;
    % W) M. z0 D5 A/ a. L# r5 Q  w
  29. using namespace std;  E- u( S# f) C9 g: P+ K% J) e
  30. ; T; b/ L) `3 t3 `( L- l
  31. class Gtac5 L' b8 q5 _' c7 \7 y
  32. {
    * S- T  Q+ t0 B  K
  33.     // class members1 F7 e* m# V7 L5 U, \
  34. public:: f: t3 @5 A# N4 K9 a
  35.     static Session *theSession;
    8 I" T, B! c; [; H+ H1 q! I6 z: ~, I
  36.     static UI *theUI;4 h7 ]3 s! u* {: a8 g( `4 V7 P( T
  37. 0 v" }/ K6 q$ g! q4 \9 ?. B
  38.     Gtac();1 I* G6 y/ A/ N$ |7 G: p
  39.     ~Gtac();
    2 c) V3 w7 z7 Q7 L" y+ S

  40. 0 e& }+ ~9 [8 s
  41.     void do_it();* G  R, e" t: C3 e+ B

  42. / l9 c1 V& u/ q* Q* R8 Z  P! r/ m
  43. private:
    # D; ?1 \4 o1 c/ {- V. N" S6 V) }
  44.     Part *workPart, *displayPart;
    ; [# P: ^  |! T, ~& r! v1 |* ]! `
  45.     Selection *sm;
    # m  e8 r! R! ^% _" T. x7 l
  46.     NXMessageBox *mb;
    & h8 [3 j. _0 z9 W. j8 h
  47.     ListingWindow *lw;/ q$ n! O7 F5 u. `2 t. f& [  s- F
  48. ; j4 M% `' ^* i& |; ]: B; b& @5 g
  49.     Face* select_a_face();/ T$ l' h, b! M" y. a$ x: a
  50. ( V$ S0 Y1 t6 u
  51. };
    - y8 b  `# F8 T2 O/ ]. {0 E4 I

  52. , ?0 ?8 d& p# Y4 ~, U" ^' @
  53. //------------------------------------------------------------------------------
    . S" ~2 n  K+ A* v2 x
  54. // Initialize static variables
    # N" ]' p. I& K' G7 ^+ \
  55. //------------------------------------------------------------------------------4 g8 @7 i2 w( @9 E
  56. Session *(Gtac::theSession) = NULL;$ Y) W( t, w0 T; p8 @6 |( V2 S5 R/ S
  57. UI *(Gtac::theUI) = NULL;
    . J+ t! {' S/ b+ T: S& o8 K$ |
  58. & D; w/ E8 H6 E5 h) N
  59. //------------------------------------------------------------------------------* w. p& I& N. ?+ k7 I9 [
  60. // Declaration of global variables) M6 A7 Q" s% L7 \, ?7 T5 T5 \0 `
  61. //------------------------------------------------------------------------------! R/ f5 |; E7 L( A4 F
  62. Gtac *theGtac;5 I  \$ J- p+ o0 |9 O( p

  63.   t# \( z2 g+ j8 J% v
  64. //------------------------------------------------------------------------------4 L/ Q  h6 j0 x& C! J' E1 g0 A. H5 b
  65. // Constructor
    : g3 h, G1 a+ Z! R2 f) ]
  66. //------------------------------------------------------------------------------& J0 P8 C. W1 _
  67. Gtac::Gtac()' Q* R7 y$ p1 S5 R. t' S
  68. {
    # G# f" @+ l" V0 o* r( a: q0 ?
  69.     // Initialize the NX Open C++ API environment
    & E6 y1 F$ M  x% U7 m
  70.     Gtac::theSession = NXOpen::Session::GetSession();# b; \* I3 y: H+ E. b* v2 W
  71.     Gtac::theUI = UI::GetUI();$ W2 X" K3 S" z

  72. " O/ b; K" F2 f; u( t8 U
  73.     sm = theUI->SelectionManager();! T8 J) e" t( f" `% O
  74.     mb = theUI->NXMessageBox();$ d$ p' h9 M. U4 T( Y% p9 S/ `5 l
  75.     lw = theSession->ListingWindow();
    + H. K& [# r$ E( ]
  76. 8 W1 C% t$ n  n& H
  77.     workPart = 0;
    / W% `) T  O* H
  78.     displayPart = 0;
    & ~! H- s( C6 f
  79. }& K+ s% K1 \; {1 f/ _. o
  80. 4 |" c1 e- W1 L4 `4 c: w
  81. //------------------------------------------------------------------------------
    + z1 E, ]$ F" v$ V2 U; w4 W) l0 H
  82. // Destructor( W1 S: G% z% x( @+ V$ ^
  83. //------------------------------------------------------------------------------
    ' @% Z7 H+ q- _' A
  84. Gtac::~Gtac()
    ' b/ `2 @0 {2 Z- D- _4 W
  85. {
    2 y: o  \" n( L5 f. E
  86. }
    $ C% S7 m% l) }: ?( m

  87. 8 ?* ~# d3 n6 g& C. |
  88. //------------------------------------------------------------------------------% b. S$ J! `6 Z  ]2 a. T' u4 B
  89. // Selection
    , {4 a% p% N. _) Z6 H5 ?/ H
  90. //------------------------------------------------------------------------------
    $ S# Q4 f0 l9 Y/ o8 `
  91. Face* Gtac::select_a_face()
    - T0 j( k. z: X/ |: Q& z5 l* Z
  92. {& G1 t5 k& b0 G$ W) g/ [
  93.     // ask user to select a face( P' @! C4 F4 I0 Z* }4 O" x: n+ x
  94.     UI *ui = UI::GetUI();4 A- U: F2 l' G9 I2 h
  95.     Selection *sm = ui->SelectionManager();
    ) R+ a$ t% C1 O) j
  96.     NXMessageBox *mb = ui->NXMessageBox(); // as of NX5
    - |. o! F) E* I$ t1 z) A9 M

  97. ( c" x: b' |1 `- x- C* A
  98.     NXString message("Select Face:");
    * I+ a0 \0 c8 Z8 v4 p0 u
  99.     NXString title("Select Face");; S( G* _4 U7 y
  100.     Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;3 V# P. N% @/ r$ L* L* K! t' N  D
  101.     Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;
    4 E- Z8 J$ P7 N' m  G7 V
  102.     bool include_features = 0;
    9 L% |$ |6 R3 ?
  103.     bool keep_highlighted = 0;* B. X$ `0 ]  Z
  104. & W) [5 r: s+ S$ c
  105.     // Define the mask triple(s)
    ; j% _; j# _! E  \" A; C
  106.     std::vector<Selection::MaskTriple> mask(1);! K  z5 t+ @# r8 U, B  ~4 f% o. ?7 _
  107.     mask[0] = Selection::MaskTriple( UF_solid_type, 0, UF_UI_SEL_FEATURE_ANY_FACE  );) c. ]5 E( F. E  X, J
  108.     Point3d cursor;
    ; c2 ?2 N4 L6 ?
  109.     NXObject *object;) j  [$ `) d  y: X

  110. 2 N& y  g( Q+ c1 ~9 S5 @0 J
  111.     // Select objects using filter defined by mask triples3 O6 F8 v* M0 K/ H  T0 q* Y
  112.     Selection::Response res = sm->SelectObject(& x+ N" R8 k0 k$ `5 q
  113.         message, title, scope, action, include_features,
    % k1 Z& _2 O/ z$ G+ r7 `; U
  114.             keep_highlighted, mask, &object, &cursor );
    1 [! Z0 m# p) {  s* t

  115. , V! U/ E" N: K* I
  116.     if( res == Selection::ResponseObjectSelected )
    6 l0 D4 h* @9 o& Q; K: F
  117.     {% l3 k& p+ \( j+ f* i: z8 v; f
  118.         Face *aFace;
    ; a9 N0 d! ^- l" B
  119.         aFace = (Face *)(object);
    9 I7 @! R) t& C( R
  120.         return aFace;
    7 v- P9 b4 n7 N4 W6 T8 p% {* s2 K
  121.     }
    / c" Q$ v$ v7 |7 x1 T
  122. & p4 }- a1 y/ U1 C) f/ i* U
  123.     return 0;
    9 n9 \1 v) ~- E
  124. }
    5 S' i) u1 p7 R3 i( ~& x

  125. . N- b3 `9 ]* q8 L+ _* f
  126. //------------------------------------------------------------------------------
    . ?. Q% d7 g- p2 Y. |
  127. // start with our job...
    ' \/ o7 q2 q! M" M
  128. //------------------------------------------------------------------------------  c1 U1 j, C. j) _# w6 ]$ ?
  129. void Gtac::do_it(). M6 Q  w% w" \5 _+ L7 q
  130. {
    4 O5 Y4 K  g. O9 @; E
  131.     workPart = theSession->Parts()->Work();
    7 ]# F$ Y7 f  n3 e: |8 o4 L9 s2 @
  132.     Part *displayPart = theSession->Parts()->Display();: ^$ e, w1 F1 s1 S8 _, K8 ^
  133.     stringstream out;& Z# l" a5 f8 f7 ?; u6 D  A
  134. 5 Y) h* ]+ W% K1 E- j, T# v! S$ u
  135.     Face *theFace = 0;" E% ~" Y3 i; v8 W2 t% b; f8 P, b
  136.     std::list<Face*> myfaces;
    + A/ h! k1 B7 n6 T' \
  137.    
    0 |' |* y0 f* s6 Q/ y
  138.     while( (theFace=select_a_face()) != 0 )
    & [# Y- J# [& X* j" l* R
  139.     {
    1 L) \) w9 d* z$ L7 U, m$ k
  140.         if(! lw->IsOpen() ) lw->Open();7 k. a' r  O  M; `
  141. # D6 x5 P& y9 D' l; X5 d  E
  142.         out << "Selected Object: " << theFace->Tag() << endl;. x. \7 Q' z! ?6 j* Q! c
  143.         lw->WriteLine(out.str().c_str());. M( p1 l* l( U* A& R6 r$ c
  144. $ J  u2 w# P' p7 c. h9 {$ R2 r' a+ U
  145.         std::vector<Edge*> edges = theFace->GetEdges();. ?5 ^. j" [, ^2 h9 `% e/ F# A  M+ y. {
  146.         out.str(""); out.clear();- y& x( q6 [7 r( h* E" r+ _3 W1 m
  147.         out << " Number of edges: " << edges.size() << endl;
    ' k$ g. g/ A* _* Q
  148.         lw->WriteLine(out.str().c_str());, J8 S5 P0 ~) o6 r- M

  149. - J) }- b9 N8 b0 A6 T* A5 `
  150.         for( int ii = 0; ii < edges.size(); ii++)
    ! R# h2 ?9 Z1 \* c/ E" T* S, d
  151.         {
    ! A& c8 j1 f. e' i. d! {6 O) H6 }. y2 [
  152.             out.str(""); out.clear();6 @  C6 ^$ E9 r9 o
  153.             out << " Edge: " << edges[ii]->Tag() << endl;, ]: H& @4 `9 c3 g/ d6 k
  154.             lw->WriteLine(out.str().c_str());
    $ W" i  {  R; O6 g, d8 r, x' V. E
  155. 4 e$ h+ D' B# A+ C- Z$ D
  156.             std::vector< NXOpen::Face * > adj_faces = edges[ii]->GetFaces();7 p, [" M1 b# S" r* k8 m
  157.             out.str(""); out.clear();# ~, E0 t! l' h* t0 y4 W+ C% F
  158.             out << " Number of adjacent faces: " << adj_faces.size() << endl;
    # l+ F; n2 b& z3 N# b% c9 y
  159.             lw->WriteLine(out.str().c_str());
    ; s! {1 i/ M# s

  160. ) X3 A- E" E6 C3 U5 ?, P
  161.             for( int jj = 0; jj < adj_faces.size(); jj++)3 T0 i* l" I* f9 s) k
  162.             {9 s: E, C- @0 s
  163.                 out.str(""); out.clear();
    ' Z7 n+ p+ r5 h; |/ S
  164.                 out << " Adjacent face: " << adj_faces[jj]->Tag() << endl;
    + ^% r. w' P5 K
  165.                 lw->WriteLine(out.str().c_str());
    ! K# k5 D2 `1 N  h) B: E+ @6 V# V- J

  166. ( P4 W2 Z( _; T( ]7 a& X( P
  167.                 myfaces.push_back(adj_faces[jj]);% Q( L& N( b2 [1 q: x

  168. 2 J1 t2 w+ D3 x4 T  i" w
  169.             } // jj
    & Q* z% r9 d9 F3 \- }
  170. # m; ]( J( ]" _1 S2 ^
  171.         } // ii2 }% e& W8 Q" F8 B0 e7 S
  172. ! @$ r6 g! C7 y/ n) \8 H0 K
  173.         myfaces.unique();
    ( Z$ J  g+ ?% j5 |4 W* _+ ?0 ~
  174.         for (list<Face*>::iterator it=myfaces.begin(); it!=myfaces.end(); ++it)% n$ F0 l" G" }. F+ |: W
  175.         {
    6 B6 B0 V& q: N0 w* W
  176.             (*it)->Highlight();, `3 @4 ?7 o, k% q/ `1 |3 b
  177.         }
    . a1 s* ^) Q6 M, L
  178.         Gtac::theUI->NXMessageBox()->Show("Adjacent Faces", NXOpen::NXMessageBox::DialogTypeInformation, "Confirm");
    3 i% M+ Y/ k5 ~- R  v: }. q
  179.         for (list<Face*>::iterator it=myfaces.begin(); it!=myfaces.end(); ++it)8 A2 Y: J# t1 Q. r. R+ z5 F
  180.         {$ ~3 f1 {7 b8 q$ G" v2 B/ v0 t
  181.             (*it)->Unhighlight();, G9 a# t" A1 B% D7 F" _; e
  182.         }: `2 c/ R+ Y, ]4 |( v& L, n. O, T
  183.         myfaces.clear();
    " d. Z1 J+ X, D

  184. ( S9 p) Y; c0 q! M( U$ u
  185.   a* I+ s  d- X* _* \
  186.     } // while
    ; C: ], J) U4 ]4 @7 s
  187. }( M* }$ `7 b- s
  188. / |3 @# i# }# {0 E- b- _- ]! \9 D
  189. //------------------------------------------------------------------------------8 l4 h% j9 K7 U8 N
  190. // Entry point for our unmanaged internal C++ program  D% o: m  P% B- d
  191. //------------------------------------------------------------------------------
    & A. f& w2 L& J4 @% }+ _+ U
  192. extern DllExport void ufusr( char *parm, int *returnCode, int rlen )/ [3 i3 X* @- c
  193. {
    ! R* [# E; x" I% X
  194.     try4 [' [8 W7 x4 }( B9 y, @
  195.     {
    * Z+ T( m& y- Y
  196.         theGtac = new Gtac();# U" l. V$ _2 ~$ _$ B
  197.         theGtac->do_it();
    & q" E- S9 f7 P. s) f
  198.         delete theGtac;
    * _, I+ o1 C; `0 K) @6 o
  199.     }" c( Z9 d* |6 S, n; l! z" G$ j
  200.     catch (const NXOpen::NXException& ex)
    * u6 e! U( S; s1 W
  201.     {$ G/ T( Y% |5 W; _- r
  202.         // ---- Enter your exception handling code here -----7 [- `: r! R# U& k6 Z
  203.         Gtac::theUI->NXMessageBox()->Show("CaUGht Error", NXOpen::NXMessageBox::DialogTypeError, ex.Message());& C& s3 u1 l( s' p6 L; L( `. C; T7 R
  204.     }' y0 N, i* B8 y' Q! h& n+ i
  205. }
    ( @( B7 X# |6 E( v* Y1 y! i- X

  206. ) C5 r) N7 G/ m$ U( d2 h0 E! u

  207. ) `9 {% b. D0 ^4 S+ G. w
  208. //------------------------------------------------------------------------------
    + u7 {5 [# B; T4 M
  209. // Unload Handler- @! O1 f7 {& [  k8 @, `- v
  210. //------------------------------------------------------------------------------
    ' V3 f% F! P$ N; Y; i* \
  211. extern "C" DllExport int ufusr_ask_unload()6 U  X* q% D) B& H% L
  212. {9 h0 }7 |% Y) G6 U* {* P
  213. return (int)NXOpen::Session::LibraryUnloadOptionImmediately;
    ( T$ n3 E. ~; y5 t7 e9 @8 {6 K
  214. }/ Y4 \5 Q9 A7 y9 f  ]3 l/ \

  215. * i' ?2 ?* {& j5 M8 `5 o
复制代码
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了