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

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

admin 楼主

2013-11-6 18:54:58

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

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

x
通过这个代码,可以获取选择面的相邻面的信息
  D5 p6 X2 @% I8 [6 l" A, i4 wNX open C++中使用了 选择对象 selectobject 函数,通过面获取边数据,通过边获取面,从而得到信息!3 h& ^7 M: H. J6 ^

  w: C5 J7 O5 N7 j" |1 o
  1. #include <uf.h>
    ' g0 ~; Q# \3 j3 ?+ d/ A4 r
  2. #include <uf_ui.h>* H& n, O( i: q" f' W; ?
  3. #include <uf_object_types.h>
    ( a5 `1 A; Q1 Z+ t6 N, W( X2 j' ?
  4. & k, F# C5 R  P
  5. #include <NXOpen/Edge.hxx>
    4 m4 d& p8 b, T# H+ c2 E0 S
  6. #include <NXOpen/Face.hxx>
    : A- P' g, |- D* P7 i' z
  7. # T8 ^; I# r) S( ~8 K) U1 S
  8. #include <NXOpen/ListingWindow.hxx>9 T3 M$ v: ^1 d! {) a' u
  9. #include <NXOpen/NXException.hxx>
    $ f, H% Y; n/ O. l! t1 S% _! {
  10. #include <NXOpen/NXMessageBox.hxx>7 [. i+ x$ X# h, Q0 ?. p
  11. #include <NXOpen/NXObject.hxx>6 K& ]+ L9 H$ t* {0 |! g& m7 R% c6 W6 P  Z
  12. #include <NXOpen/Part.hxx>
    & D: Q8 U4 ]" \0 a5 F6 P  p' P
  13. #include <NXOpen/ParTCollection.hxx>2 J) P; |$ ]- Z5 I( a2 p
  14. #include <NXOpen/SelectDisplayableObject.hxx>, ]. Y5 c! u- Q  |
  15. #include <NXOpen/SelectDisplayableObjectList.hxx>
    3 n; F% {/ \: m$ t
  16. #include <NXOpen/SelectObject.hxx>
      l" l& B) q* v1 b0 b2 J
  17. #include <NXOpen/SelectObjectList.hxx>( Z3 \$ i: s. D
  18. #include <NXOpen/Selection.hxx>( C3 p8 B. g# ?( A: F' P' b9 S
  19. #include <NXOpen/Session.hxx>: y! g0 i% U% n
  20. #include <NXOpen/UI.hxx>
    # ?' n. Z8 X& f; s' w
  21. #include <NXOpen/View.hxx>
    0 C5 B% Z* O& v- l' A, e
  22. # m$ @+ H6 [# ?& k/ ?
  23. #include <iostream>
    0 A  X2 i( u+ q9 O! q* J
  24. #include <sstream>1 |- s" Y6 _" |5 E; R7 Q2 j
  25. #include <list>4 V) o) F0 M# E0 c5 z2 Q4 L# [$ ^
  26. $ K: f9 j$ O- o
  27. using namespace NXOpen;, j2 \9 z7 s5 h) }4 P
  28. using namespace NXOpen::Annotations;
    . u; T* w6 P) K" {9 O# c
  29. using namespace std;
    ' Q4 o4 ~' O6 c; p. g

  30. 9 o$ R% B% b4 w( Z% t
  31. class Gtac
    0 ^) ]1 Y: j- P) `/ P
  32. {  j" N) y) q; Q7 b
  33.     // class members
    " h$ ?' s5 J* ~
  34. public:3 U' ]$ S# m* W7 T
  35.     static Session *theSession;
    . ~: _0 r" U! P
  36.     static UI *theUI;0 s) E' m* o) w% |/ t
  37.   @7 G6 M8 }7 q3 @. H; q! E
  38.     Gtac();
    9 I! q( @4 b5 y  H  b- A1 z0 ]
  39.     ~Gtac();
    * ?1 J7 Q% `( k( \
  40. ' W& T/ i, e  Q0 a
  41.     void do_it();
    + N. Z8 y, x4 F) Z& \/ q) R
  42. & g' L2 r6 a2 P" ]. z
  43. private:8 M2 c2 ^8 V! ~! i) F6 [
  44.     Part *workPart, *displayPart;' L, t. H9 K: B) T2 b
  45.     Selection *sm;
    ' E" \) T/ X9 _# M( B! W
  46.     NXMessageBox *mb;
    6 a+ N7 T* t8 @2 R1 z4 c. X
  47.     ListingWindow *lw;
    4 @$ C6 ?4 d; Q) k/ Z/ @
  48. & {8 R# n% Z  ?2 w/ d
  49.     Face* select_a_face();
    ( N: q) Z; w8 g) G" Z8 k

  50. $ l  a1 y/ R# d/ X
  51. };; Z- n: E5 \# a1 |9 @8 b

  52. ; x. }" ^/ d2 r) l
  53. //------------------------------------------------------------------------------
    * k( q# c. |% `0 X# @9 e& I  ^
  54. // Initialize static variables
    5 f( D4 W9 h6 S( A& W! D) b  s
  55. //------------------------------------------------------------------------------2 L- s1 o3 f+ L: D0 U) P+ V- [
  56. Session *(Gtac::theSession) = NULL;
    ; j( L/ _$ b' |* t  {$ X, h3 I! s
  57. UI *(Gtac::theUI) = NULL;
    0 _5 `! ]/ p, t+ q

  58. # ]5 B0 Y$ G/ d4 B7 P7 Y. F
  59. //------------------------------------------------------------------------------/ l: Z' J! ?+ E  J: U' N
  60. // Declaration of global variables
    8 B1 h: V9 @- h. t
  61. //------------------------------------------------------------------------------
    / k& Y- w( d, o2 F& ~: e' E% K
  62. Gtac *theGtac;
    $ ~9 b+ X9 w0 u* ~1 L
  63. 3 x9 q1 a' ^" j. |
  64. //------------------------------------------------------------------------------* ^" I, X+ K+ f# L1 N9 Q
  65. // Constructor2 |  S, U4 h0 w
  66. //------------------------------------------------------------------------------6 p9 @0 e; N5 R3 b5 \) @
  67. Gtac::Gtac()
    . o3 s. I  Y# M% ?
  68. {
    4 _# c, ?" y/ u1 t# V  l
  69.     // Initialize the NX Open C++ API environment3 a5 C* G8 X5 x, Q0 B
  70.     Gtac::theSession = NXOpen::Session::GetSession();3 @# C# u0 J' q2 i2 `( G: S
  71.     Gtac::theUI = UI::GetUI();
    3 |# z% \$ G! g7 R- F  H
  72. - {7 O3 B# b5 y! j9 o4 Y# V( }; J6 N
  73.     sm = theUI->SelectionManager();
    # Z8 I4 E5 E: l. u
  74.     mb = theUI->NXMessageBox();4 e" _1 w0 S5 k* g/ Q
  75.     lw = theSession->ListingWindow();! y5 [; D7 m/ P9 Y& D  K; Y

  76. 8 \4 ]+ F2 z7 f& R0 A
  77.     workPart = 0;; W' O% d& @$ g6 M2 Z% \, {2 r
  78.     displayPart = 0;
    % O( |  U) c) u" V
  79. }
    " E- P! m( g) j% W
  80. , ^  T* U- {, h/ y- W5 ]: K
  81. //------------------------------------------------------------------------------
    . w1 c6 y' ~- Q1 Z" \9 J
  82. // Destructor
    ' c. q0 a1 N3 ^) x0 b1 R
  83. //------------------------------------------------------------------------------
    0 ]  v6 O) c3 `( p
  84. Gtac::~Gtac(); E  k2 M! ?3 `
  85. {- g0 X) V& a. V1 k
  86. }1 m: ]8 L( N" @. Z

  87. 9 X. Z) \9 d/ @7 n* K' J' F" z
  88. //------------------------------------------------------------------------------8 q! R; u: ]% `' R
  89. // Selection
    $ H; j4 u, Y/ {2 L, P+ T9 b9 r
  90. //------------------------------------------------------------------------------
    9 o: @. Y1 h( e9 ?2 ]) N
  91. Face* Gtac::select_a_face()+ m' A6 |9 l8 W8 o
  92. {
    * T! n2 B* k1 N/ A6 U
  93.     // ask user to select a face, n6 l* G: D! Q! P, y
  94.     UI *ui = UI::GetUI();
    4 \3 L, t3 I0 m" `% y
  95.     Selection *sm = ui->SelectionManager();
    + r+ _) u; c3 w# b) M7 j, }- d
  96.     NXMessageBox *mb = ui->NXMessageBox(); // as of NX5
    ! t1 |$ L; E/ T) F+ B8 s

  97. ( b& O+ B& n1 z5 R8 M8 l1 q
  98.     NXString message("Select Face:");* ?3 H, c3 X( P
  99.     NXString title("Select Face");& U0 P7 w5 ^) A
  100.     Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
    " f- m: G- {& j" u( N5 V5 }
  101.     Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;7 o1 x; x# |3 f
  102.     bool include_features = 0;
    8 w2 d$ ?4 z! e: Q1 h; m3 e
  103.     bool keep_highlighted = 0;5 m- C+ `, }; b! h) `
  104. : j( Q  z' K! x1 N. \  q
  105.     // Define the mask triple(s)( z  J: v  B6 Z2 ^3 g$ w
  106.     std::vector<Selection::MaskTriple> mask(1);
    : I0 F, w( H6 w% v0 k
  107.     mask[0] = Selection::MaskTriple( UF_solid_type, 0, UF_UI_SEL_FEATURE_ANY_FACE  );
    * ?9 q* x0 ^/ D7 R
  108.     Point3d cursor;3 U2 M! ?8 [) `; u0 K
  109.     NXObject *object;
    9 W. V1 K* g% f0 O/ {2 `! e

  110. " z. Q! L4 u3 j9 F" L$ m) ]% f- f) {
  111.     // Select objects using filter defined by mask triples- W) C* w- ?$ Q* y$ I# h0 k/ M
  112.     Selection::Response res = sm->SelectObject(( h2 S% M$ e, J) @
  113.         message, title, scope, action, include_features,4 {) O* {+ Z9 G! R& C% ^6 K
  114.             keep_highlighted, mask, &object, &cursor );
    + ^6 f( g0 J; @& `( y( Y4 D
  115. ! S5 p8 J$ x) K0 f! R$ v# B0 l: I* A
  116.     if( res == Selection::ResponseObjectSelected )# A2 U# `- g7 V- W; j% a% l) R
  117.     {
    8 Z& `- z+ \$ R3 p; l1 |1 O
  118.         Face *aFace;
    $ v' w) B. q8 q
  119.         aFace = (Face *)(object);
    + `5 [8 K- m9 Y$ o% y) x1 L
  120.         return aFace;. ]( a1 R1 V5 ^6 l0 X# Y4 _; |$ u
  121.     }3 \( e: ~) }* Z0 ~; p+ N
  122. # c. I" \* V3 G! |
  123.     return 0;- Z4 ]/ \* |  b: a
  124. }$ m- _3 o# J5 ~  D
  125. ) T8 s; _# ~$ [3 U5 p+ \
  126. //------------------------------------------------------------------------------/ t8 t! N- y% d: ?" e5 ]
  127. // start with our job...
    - _8 k: C! C& N! a5 }, a; ], L
  128. //------------------------------------------------------------------------------
    3 E- x* b- y5 C7 C, Y8 P! Y
  129. void Gtac::do_it()/ @  |: J* y) C/ s% m; o
  130. {5 j& N7 A2 y4 R# ?
  131.     workPart = theSession->Parts()->Work();
    ( R9 f6 ]& w. C6 `. {( L* x1 R
  132.     Part *displayPart = theSession->Parts()->Display();3 T: S$ \$ l$ t: T* K
  133.     stringstream out;2 [/ j1 ~, s8 G* K) I- Q! N
  134. + L* j6 O; H( c+ L1 A4 ^/ o& D
  135.     Face *theFace = 0;
    & v+ r6 l; G9 S) j* R
  136.     std::list<Face*> myfaces;* P& d8 `) N4 y' z8 {" F+ f
  137.    
    1 u5 y% M6 p- x
  138.     while( (theFace=select_a_face()) != 0 )
    * y6 J8 N9 w' T3 B
  139.     {
    2 K% w: v( k+ {) d4 @/ y: V
  140.         if(! lw->IsOpen() ) lw->Open();
    % v/ p+ C$ w  o# |; g

  141. 8 Z4 h3 E) I7 |. G) \2 Z# b
  142.         out << "Selected Object: " << theFace->Tag() << endl;2 z  P4 l" v" B# g5 V" `
  143.         lw->WriteLine(out.str().c_str());
    $ [- d/ c4 q# u& a
  144. 1 R( p* m: Q0 L! ^# X' `
  145.         std::vector<Edge*> edges = theFace->GetEdges();. G! N& q  o# Q8 r
  146.         out.str(""); out.clear();: n( r4 f+ m- L# [
  147.         out << " Number of edges: " << edges.size() << endl;9 ^2 O; q2 I6 w( l" {6 J
  148.         lw->WriteLine(out.str().c_str());
    5 s! W9 V. d; a3 [& X
  149. ! y3 ^5 l3 e2 }- q+ R7 i
  150.         for( int ii = 0; ii < edges.size(); ii++)5 g0 ?( Z3 K, @7 W: S* p8 I
  151.         {
    , y5 ]: ~! Y/ b0 y( e
  152.             out.str(""); out.clear();
    2 J# n9 }9 M* d- w0 X" `1 P
  153.             out << " Edge: " << edges[ii]->Tag() << endl;- ~% ^* Y( v$ I) J( Z
  154.             lw->WriteLine(out.str().c_str());
    6 G. z  u* {$ Z. [2 _: a. X
  155. ; ]9 y, d3 s/ H5 x! W
  156.             std::vector< NXOpen::Face * > adj_faces = edges[ii]->GetFaces();
    ( l  i" l3 {/ g0 y& P
  157.             out.str(""); out.clear();2 j9 i5 W) c) _: ?- ]4 }+ N2 T- o
  158.             out << " Number of adjacent faces: " << adj_faces.size() << endl;0 v- Z$ @% e( A6 h3 ~+ A: u( y
  159.             lw->WriteLine(out.str().c_str());3 _; c7 Y3 g$ _7 K. ]$ }

  160. 3 C2 `% ~: R" s: }7 {6 g
  161.             for( int jj = 0; jj < adj_faces.size(); jj++)
    ' l8 l% L2 G) L2 g' ], ~7 }  r  s
  162.             {
    1 t- A/ c3 @6 o/ s5 L" z  O  L6 M
  163.                 out.str(""); out.clear();
    : A+ |" j2 |3 u# K4 v3 p" G* W9 d
  164.                 out << " Adjacent face: " << adj_faces[jj]->Tag() << endl;
    8 ]0 s) {: V6 L
  165.                 lw->WriteLine(out.str().c_str());
    - i* L* m. ^/ {0 O' e( j
  166. 1 W0 A4 Q1 Z% i) y8 l8 W8 D( Q2 m
  167.                 myfaces.push_back(adj_faces[jj]);6 `# {5 O& r( u* P6 |
  168. 6 q' X4 X! v# k. }, T! S- X
  169.             } // jj
    4 T7 z4 |: Z; z1 I/ A. ]' z% l

  170. 7 o7 v+ r# F0 X, |9 \/ [- i* X
  171.         } // ii
    # ^5 \/ }* }; \7 P1 F3 l8 N

  172. 4 O- P4 w0 O5 I2 B8 d# |
  173.         myfaces.unique();- W. k+ o0 {& p, x4 x' w# ]/ i0 e
  174.         for (list<Face*>::iterator it=myfaces.begin(); it!=myfaces.end(); ++it)
    5 ]% I7 x0 A  K: v& Q/ t
  175.         {0 D, z! k+ l, f( ^* d
  176.             (*it)->Highlight();# {8 Y: K: S2 A7 s* _( p
  177.         }
    2 o4 E9 X: M8 e9 b0 [2 g
  178.         Gtac::theUI->NXMessageBox()->Show("Adjacent Faces", NXOpen::NXMessageBox::DialogTypeInformation, "Confirm");0 Z: `8 D9 \' K$ s) o
  179.         for (list<Face*>::iterator it=myfaces.begin(); it!=myfaces.end(); ++it)! m* M+ [1 E  @5 `' C
  180.         {6 ~$ c5 x% n* G' S, E( X
  181.             (*it)->Unhighlight();. k3 g3 M+ u; ~3 X0 }. F+ ~) A
  182.         }) R, c* o8 x" n5 `& U
  183.         myfaces.clear();
    1 k# ]: c- t/ U
  184. , [" U0 r( n6 e

  185.   [  _$ K# _  F* x$ s
  186.     } // while3 G( J) ~# @6 Q5 I; P. U2 U
  187. }, {: K/ L4 J7 G. L" U
  188. 8 V$ R" y# P4 Y
  189. //------------------------------------------------------------------------------3 E& ~# @0 U( e: @3 T% [% F
  190. // Entry point for our unmanaged internal C++ program8 y/ H! r* ]9 A9 r3 _" l; Y
  191. //------------------------------------------------------------------------------6 I: N& K1 V$ B
  192. extern DllExport void ufusr( char *parm, int *returnCode, int rlen ). ^6 F0 R7 F8 n0 v
  193. {
    9 E- Y. F( v7 M' n
  194.     try
    6 y9 {' T# N# l9 B' z
  195.     {' E3 j2 q/ e( ?5 j% t
  196.         theGtac = new Gtac();
    4 l9 J# q1 c* ?
  197.         theGtac->do_it();, U. e# W: P/ X; U8 O3 T
  198.         delete theGtac;
    / S  w: R+ }7 S9 \* L8 _
  199.     }3 k8 U3 C, P! [: Z# F
  200.     catch (const NXOpen::NXException& ex); p5 p  B  @3 s1 i8 U
  201.     {
    6 {. l2 z' m( d
  202.         // ---- Enter your exception handling code here -----
    ' h+ I5 ]% H% V" `$ h6 |
  203.         Gtac::theUI->NXMessageBox()->Show("CaUGht Error", NXOpen::NXMessageBox::DialogTypeError, ex.Message());7 L( U0 G$ e+ X' C2 V; r. M3 T6 I
  204.     }" l2 O/ a9 R; M7 E0 f- i
  205. }/ ]' ^% E7 _8 H3 h. w/ k, O# I

  206. & |. C9 K# ]+ O* B/ m! o( K5 W0 X& z% \
  207. ) e  `3 ^( x4 ^$ E
  208. //------------------------------------------------------------------------------% l+ L) I% J- R& |, c
  209. // Unload Handler3 U1 N+ e3 _3 C  g4 A+ b
  210. //------------------------------------------------------------------------------8 \  g  e' C5 D4 p  W) ]6 G/ t
  211. extern "C" DllExport int ufusr_ask_unload(); m) D4 N7 H5 s- `
  212. {
    & A$ `1 ~; l2 p! a' w: M0 h+ G
  213. return (int)NXOpen::Session::LibraryUnloadOptionImmediately;4 z# }: A1 j: Q* s
  214. }
    ! w( `6 L: l0 X

  215.   C+ A! y/ |* o( }. }' Q5 _
复制代码
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了