PLM之家精品课程培训

PLM之家精品课程培训

联系电话:18301858168   |   QQ咨询:939801026
NX二次开发培训

NX二次开发培训

UFUN/NXOpen C++和实战案例

适合初级入门或想深入了解二次开发的工程师,本培训结合ufun,NXOpen C++,大量的实例及官方内部的开发技术。
公众号二维码

关注公众号

点击扫描二维码免费在线高清教程

课程详情
Catia二次开发培训

Catia二次开发培训

市场需求大,掌握核心技术前景广阔

Catia二次开发的市场需求大,人才稀缺。掌握开发技能潜力巨大,随着经验积累将在汽车、航空等领域有所作为。
B站二维码

在线原创B站视频

点击关注工业软件传道士主页

课程详情
Teamcenter培训

Teamcenter培训

全方位培训,从基础应用到高级开发全覆盖

涵盖用户应用基础培训、管理员基础培训、管理员高级培训及二次开发培训等全方位内容,由多年经验讲师打造。
QQ群二维码

加入同行交流

点击扫描二维码加入QQ群

课程详情
×

PLM之家plmhome公众号

课程涵盖: PLM之家所有原创视频

×

关注B站视频

所有高清视频一览无余,全部在线播放学习

×

加入PLM之家QQ群

同行交流,疑问解答,更多互助

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

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

[复制链接]

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

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

admin 楼主

2013-11-6 18:54:58

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

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

x
通过这个代码,可以获取选择面的相邻面的信息1 G2 Y. ?4 a4 m0 d
NX open C++中使用了 选择对象 selectobject 函数,通过面获取边数据,通过边获取面,从而得到信息!
0 I  I5 ]! e" Z7 L% K9 l: b' J; e) _5 r: M
  1. #include <uf.h>, @' l! D9 y  O! Y  H* X0 t. \& g
  2. #include <uf_ui.h>
    ' h5 `+ ]& T# x* q4 j) I
  3. #include <uf_object_types.h>
    / h0 B. m  f7 x' H# G$ A

  4. ( Q) \: e- o& L
  5. #include <NXOpen/Edge.hxx>
    - U6 W7 ?! x; g, }2 A5 O
  6. #include <NXOpen/Face.hxx>
      K6 p4 D# k6 J+ w5 w! g

  7. 6 G3 t% D- ~: p' n+ |9 Q
  8. #include <NXOpen/ListingWindow.hxx>
    & g3 r* U# B, @3 _$ k( U
  9. #include <NXOpen/NXException.hxx>
    & @. ~, d3 n1 S9 E7 z& U- i: `8 j1 I
  10. #include <NXOpen/NXMessageBox.hxx>
    ! H. f; K% L' N, [3 ]
  11. #include <NXOpen/NXObject.hxx>
    , Q8 v! J: V8 n2 A
  12. #include <NXOpen/Part.hxx>9 `  }$ ?) ]/ N  t9 ?0 o5 @
  13. #include <NXOpen/ParTCollection.hxx>
    3 q# l3 G5 D" t5 n7 K
  14. #include <NXOpen/SelectDisplayableObject.hxx>" Z- y5 x" Q& R
  15. #include <NXOpen/SelectDisplayableObjectList.hxx>
    & y8 H: [- p) F' _1 F
  16. #include <NXOpen/SelectObject.hxx>, j5 I: S2 i" A# [. G
  17. #include <NXOpen/SelectObjectList.hxx>
    ' _. x8 {" T+ ~" _
  18. #include <NXOpen/Selection.hxx>3 C8 S! E& m; r! g/ d% i
  19. #include <NXOpen/Session.hxx>
    ( w7 X. T% r1 f* `+ d
  20. #include <NXOpen/UI.hxx>. y4 E$ P. y! o4 r: J1 s0 P
  21. #include <NXOpen/View.hxx>
    ) V( K" H; G8 D! d

  22. ! S& o8 e& L* }" a' \; h
  23. #include <iostream>
    + K: S8 Q0 @- Q( `
  24. #include <sstream>4 k$ a3 K, B* Z" i8 w5 J4 ?
  25. #include <list>/ A! }( B1 m/ {6 ]. U' I7 T- x' j2 w
  26. 1 ~3 d( C/ Z, e) \
  27. using namespace NXOpen;
    3 U) q5 F& Y3 Z9 ~
  28. using namespace NXOpen::Annotations;8 H% A" G7 D# S% m  r+ F' x
  29. using namespace std;
    % W8 c% F  p# `, N" k
  30. 9 X# V# L5 t$ U
  31. class Gtac) N! [; k  \1 ]) u8 k
  32. {
    6 g% P+ }: h( |% M2 F( ~/ t( U% w0 v
  33.     // class members
    : }; p  A3 E; }1 ^" g
  34. public:' l/ {; y* e2 Q4 O
  35.     static Session *theSession;
      l  m& D3 l- N2 n8 i
  36.     static UI *theUI;; |  ]+ J. _4 n4 S. G1 f
  37. 1 P1 q; P' F" e* o
  38.     Gtac();
    # y" l  U* k" I0 ^: F' ~
  39.     ~Gtac();! k! @" h  {) `$ X

  40. % e! @0 ^7 l& q! [* s' b$ _% b
  41.     void do_it();
    : y, M9 b+ ?5 z

  42. 0 @; d$ B7 }3 B
  43. private:" e  B& A. w2 ^4 ~5 e% B: Z5 @
  44.     Part *workPart, *displayPart;
    " i# v2 u2 m9 Q5 m
  45.     Selection *sm;
    8 i/ ^, Y6 c* m% v+ d" C
  46.     NXMessageBox *mb;
    # `: @2 A  w$ l$ c3 _: p5 e. R2 B
  47.     ListingWindow *lw;
    # b; N( f8 O7 u9 ~  {

  48. # I9 k* H0 y* T' x" [
  49.     Face* select_a_face();* c& |; m. z- O) M( i" }
  50. . k: ?. L! a, e/ E. ~' a
  51. };
    % S* W) w0 W4 q; Q  c
  52. . P/ u4 K& e7 Z: z: {3 H; `) z
  53. //------------------------------------------------------------------------------6 H9 d; p# E  d" ]* l! u
  54. // Initialize static variables
    4 B$ x: S( c- t& {
  55. //------------------------------------------------------------------------------. J% F6 e: m' R8 m/ T/ q4 l
  56. Session *(Gtac::theSession) = NULL;/ M- I5 ?4 L; G1 q8 |
  57. UI *(Gtac::theUI) = NULL;
    ; n6 M! I! \3 ]. x
  58. 8 O+ |; ?/ I0 l3 G
  59. //------------------------------------------------------------------------------
    + ~" t/ q' J- N6 d. w$ v7 q) Y' Z5 ]6 T
  60. // Declaration of global variables
    & h- ]& s) G; f9 F# @
  61. //------------------------------------------------------------------------------0 }2 q! e" J. |% W
  62. Gtac *theGtac;' H# p. m2 _- \" F3 \" g

  63. * @; E( y6 v  ^6 w$ Y( W
  64. //------------------------------------------------------------------------------
    ! Z% `8 y9 G. r& A, b: X% q- q( D4 Z
  65. // Constructor4 n1 R' ~1 D( ]8 T( P3 l! J
  66. //------------------------------------------------------------------------------
    + h% U* k$ |2 {& q
  67. Gtac::Gtac()
    ' a6 ^6 p, Q6 @$ z
  68. {) d6 A, s! W' b  T3 j: U
  69.     // Initialize the NX Open C++ API environment
    ' M) h* C# b( A, b1 [
  70.     Gtac::theSession = NXOpen::Session::GetSession();' O5 x( D3 M# y5 }- n8 Y
  71.     Gtac::theUI = UI::GetUI();
    ( R7 B0 A8 b8 G) N

  72. 7 |# ^, D, L  b9 z3 D2 ?; p& L
  73.     sm = theUI->SelectionManager();6 W, T# m* ~' K3 X; j  p4 m# G* Q
  74.     mb = theUI->NXMessageBox();, x4 N0 h+ N4 {  u3 C" `$ t
  75.     lw = theSession->ListingWindow();
    , k( t5 D! \5 e" H. j% T! A
  76. 6 ~! U5 x. R) G: F# h( G
  77.     workPart = 0;( `8 ~( l7 N5 Z; e+ V! d
  78.     displayPart = 0;
    1 z* b+ d# k. S* B. ]
  79. }1 ^' \6 c4 X$ s) r# W
  80. $ s2 G4 g, G' ?8 ^' e. E
  81. //------------------------------------------------------------------------------9 w0 R/ m( n' G. H8 O: c3 E+ q; I% d
  82. // Destructor6 h, N# |. s! T9 d& g
  83. //------------------------------------------------------------------------------
    * q* H: o6 c# k  W4 e' T
  84. Gtac::~Gtac()7 c. X/ D; s6 L
  85. {4 Z3 g. I4 w! @; z, f  q3 Y
  86. }
    $ s* ^3 J! E( {1 M

  87. 9 E* ^  J+ O+ S) z/ |: {
  88. //------------------------------------------------------------------------------
    8 ^$ p, n3 d2 }) [9 N; H
  89. // Selection
    - s, }6 V  C2 @  w) i6 d( d# |' s8 a
  90. //------------------------------------------------------------------------------
    . e! p2 y$ v  c& p& B6 q
  91. Face* Gtac::select_a_face()
      a! x) D- p' _6 u4 l
  92. {
    & B/ Y. \, _# `8 z' P; U
  93.     // ask user to select a face; {1 E! ~5 u. ?" A; E2 p4 q7 y
  94.     UI *ui = UI::GetUI();
    0 h% k+ j  D( z9 {# x
  95.     Selection *sm = ui->SelectionManager();
    3 j% i0 }: n& ?4 r9 {. D( }
  96.     NXMessageBox *mb = ui->NXMessageBox(); // as of NX5
    ; v3 a* B# U1 o3 V  A
  97. 6 Q0 r8 q' U! l+ N9 W% H) j& H
  98.     NXString message("Select Face:");
    & \2 o1 w8 T% A! D3 Q! J
  99.     NXString title("Select Face");- B: v  |( q6 t8 x$ Z  Y) \
  100.     Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
    : P9 ]$ M1 T% M3 n. A
  101.     Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;* w1 I3 ]7 j) \# H$ t  g: _
  102.     bool include_features = 0;% X* ]! O1 j: ?' a$ G! O
  103.     bool keep_highlighted = 0;
    $ M4 y& w2 C1 L3 {% E# W3 A
  104. $ U4 T' k. F5 o% d# \+ h, }, w% ^: i
  105.     // Define the mask triple(s)+ m$ ]! w& s3 X5 I- U% p
  106.     std::vector<Selection::MaskTriple> mask(1);( R# y( ?) K/ I, B% L* {
  107.     mask[0] = Selection::MaskTriple( UF_solid_type, 0, UF_UI_SEL_FEATURE_ANY_FACE  );
    8 I( a8 d2 \3 k2 c0 M. }
  108.     Point3d cursor;
    $ u# A& x( s7 m
  109.     NXObject *object;1 y  Y* [: G- T6 p
  110.   d9 x6 M  r6 t* I) J1 O. k. U
  111.     // Select objects using filter defined by mask triples% `4 s* v# U( s
  112.     Selection::Response res = sm->SelectObject(
    / F7 y  P& a- L! T$ ]
  113.         message, title, scope, action, include_features,
    ; n7 w' O8 q- n5 I( B
  114.             keep_highlighted, mask, &object, &cursor );
    ' P/ E3 w" d5 v5 k" |# E5 g$ O

  115. 8 t! U% q4 H. k# \( T
  116.     if( res == Selection::ResponseObjectSelected )
    $ c7 x" v  W% P, k( a0 u) T8 c
  117.     {) u! z7 ?: }- v0 I! Z. r$ m) w# m
  118.         Face *aFace;
    $ O/ n7 o# h# w) [9 W2 M  @$ x
  119.         aFace = (Face *)(object);
    # K8 c: O) \% [4 y) }
  120.         return aFace;+ |1 q8 a8 H- v+ i
  121.     }+ k! @+ `7 \1 H8 z5 P6 F  y
  122. & r  O' ~, i9 P
  123.     return 0;
    6 T# q# s9 e0 v7 P3 o8 I1 ?/ B* E
  124. }
    : A2 z1 C8 G2 f$ a8 q2 o! e
  125. 1 C, ^- N$ v4 a( W  w& A" _
  126. //------------------------------------------------------------------------------1 Y! l. o; g2 d7 Z. U: y
  127. // start with our job...
    1 O" _  g  k, i4 k) x  H; d
  128. //------------------------------------------------------------------------------
    1 v9 A( v8 {/ z, S+ w7 m
  129. void Gtac::do_it()
    * j+ w2 a* q8 ^! s- f
  130. {
      }$ G* u/ ^% y1 _
  131.     workPart = theSession->Parts()->Work();
    * J+ E& ]" Z/ x, Z' Y* L
  132.     Part *displayPart = theSession->Parts()->Display();
    5 u& C8 Y3 x* ]: q/ g" O
  133.     stringstream out;
    - F- B. i1 e. q7 r
  134. / g( m4 C# I+ _( l; }
  135.     Face *theFace = 0;
    - z2 B2 U' Y, Q5 u
  136.     std::list<Face*> myfaces;0 A; Z; I. a2 G; v
  137.     - F  n, J9 Z& |& G2 s. m
  138.     while( (theFace=select_a_face()) != 0 )
    , ]* S2 C1 t* L7 |* B
  139.     {% d& p. y) ]+ r" P7 y
  140.         if(! lw->IsOpen() ) lw->Open();& {9 V6 T2 D2 @! @0 U0 ?) I* b
  141. + ?; U* G8 m! [# k6 s
  142.         out << "Selected Object: " << theFace->Tag() << endl;( r) @7 J3 t) G
  143.         lw->WriteLine(out.str().c_str());6 ^% d+ R- u" r) V
  144. & N# t7 a) b! @$ k# P  ^; u4 Z+ M
  145.         std::vector<Edge*> edges = theFace->GetEdges();, ]9 O# N  n: a, g
  146.         out.str(""); out.clear();
    6 g! Q) R; O- ]
  147.         out << " Number of edges: " << edges.size() << endl;0 |! B+ I! w7 ^8 X3 C
  148.         lw->WriteLine(out.str().c_str());% N/ O6 F1 E9 G6 L- s

  149. 0 [  I2 o; ]; O; a
  150.         for( int ii = 0; ii < edges.size(); ii++)
    . @* h% k! `" }- b
  151.         {2 m% D% e6 x; R* m
  152.             out.str(""); out.clear();
    # ~. V9 T$ a8 s' [( l+ W
  153.             out << " Edge: " << edges[ii]->Tag() << endl;
    + O4 l/ k* |7 V5 Y: ^* ]: F& F1 B( I
  154.             lw->WriteLine(out.str().c_str());
    1 B' E( Y  k  u" |' d. d

  155. , X0 s' P$ Z7 F$ ^. `/ T$ v7 }: o" i
  156.             std::vector< NXOpen::Face * > adj_faces = edges[ii]->GetFaces();6 z* H6 Q7 H" v* R: C, h
  157.             out.str(""); out.clear();
    0 D. H0 |8 w+ z5 l9 O
  158.             out << " Number of adjacent faces: " << adj_faces.size() << endl;2 n) f! K8 S: ]3 K% `) k6 x
  159.             lw->WriteLine(out.str().c_str());% q! L: ?; V" G5 q# b. }- E$ r# z& t4 \

  160. $ P# M, c7 v: [9 |
  161.             for( int jj = 0; jj < adj_faces.size(); jj++)1 \6 w5 G. l' g3 R
  162.             {9 _2 b2 o2 m$ Q) ^- ~
  163.                 out.str(""); out.clear();
    ' a+ W9 G( k/ x5 g
  164.                 out << " Adjacent face: " << adj_faces[jj]->Tag() << endl;
    ( {; g! j7 T+ _$ O7 q. N+ y2 c
  165.                 lw->WriteLine(out.str().c_str());2 M5 P6 e/ y; W2 P6 u9 `, T7 X' [
  166. 2 {9 g' y, q% U( g& q
  167.                 myfaces.push_back(adj_faces[jj]);) R' h& a$ ^' ]& a3 j

  168. 1 X0 i8 X2 K4 c5 L
  169.             } // jj' P& f0 n/ n6 F" a" y$ b% o
  170. 1 R! S& K7 Q; g6 K$ U7 u5 z. b
  171.         } // ii1 O. O  Q: H  \: u- Z

  172. 0 u) A5 U" _* l4 X9 k% N1 {
  173.         myfaces.unique();* n8 L5 K7 m' @
  174.         for (list<Face*>::iterator it=myfaces.begin(); it!=myfaces.end(); ++it)# ]& ^  N1 h! n
  175.         {
    ' X* {1 V* n% `- b: U% }
  176.             (*it)->Highlight();
    & k0 y0 L* j1 m+ U" t" A' [
  177.         }
    8 o! {0 ]7 ~4 l& O6 `
  178.         Gtac::theUI->NXMessageBox()->Show("Adjacent Faces", NXOpen::NXMessageBox::DialogTypeInformation, "Confirm");
    & l, ?7 G  ?8 u3 B* T+ _: g
  179.         for (list<Face*>::iterator it=myfaces.begin(); it!=myfaces.end(); ++it)
    ( e! H, Z3 E9 i( u. [' f
  180.         {
    / c/ H" x- ^6 j) J
  181.             (*it)->Unhighlight();5 x! m6 M' s4 t
  182.         }
    4 ~2 s, s$ h& k1 J7 i
  183.         myfaces.clear();- v7 z1 k* V$ ?

  184. - ?; o) F  _, m+ N2 {2 D4 N
  185. 0 `3 _3 C/ z! b6 x0 D
  186.     } // while: R& V7 C+ N/ V6 ^# b
  187. }
    - \  D/ ^1 \; E2 q- D
  188. + ]' B6 f! Q! A) ?9 Q) U8 `
  189. //------------------------------------------------------------------------------
    * j- r! E" o+ ~6 b4 }; t
  190. // Entry point for our unmanaged internal C++ program
    1 j. x, q8 S# d2 i& I4 @, d) I7 E
  191. //------------------------------------------------------------------------------9 l% j/ z# u, R
  192. extern DllExport void ufusr( char *parm, int *returnCode, int rlen )
    % b3 \8 s9 i  S1 T2 N7 O/ @; Q! k7 X# O
  193. {
    - a  \3 X7 I' P6 D: Z3 T( k
  194.     try
    6 M* }9 V% k  B% @6 j
  195.     {! V2 X  W, _  u* N/ T
  196.         theGtac = new Gtac();
    & V6 S/ ]3 Q/ a; T
  197.         theGtac->do_it();
    : ?+ T  Q8 c6 N, r5 O) n) Z
  198.         delete theGtac;
    9 ]1 u5 t0 w% Z/ N; f# D& a$ k0 R; B5 u
  199.     }4 G2 J$ {& \" e. i5 I6 G
  200.     catch (const NXOpen::NXException& ex)
    ; U; _) `3 ?/ F
  201.     {
    ' e5 G& b$ w) m  R2 k
  202.         // ---- Enter your exception handling code here -----
    $ o! N3 q6 B6 T  d
  203.         Gtac::theUI->NXMessageBox()->Show("CaUGht Error", NXOpen::NXMessageBox::DialogTypeError, ex.Message());& P- G/ i! s& ?! F: I9 z) C
  204.     }; A" i8 y( ]2 d0 P. N) d) X
  205. }' c- \  G" t# \2 }8 e% ~3 K1 p: f/ t

  206. 6 G5 e. X) F0 ?6 o. L! m4 I
  207.   V, ^8 [/ X4 c3 h
  208. //------------------------------------------------------------------------------7 I" b$ u8 C: f( X
  209. // Unload Handler% ^0 t, A7 _8 e" b0 b6 c" m, g
  210. //------------------------------------------------------------------------------
    - K6 L" P' M6 H& Q* w% f9 u  |2 Q
  211. extern "C" DllExport int ufusr_ask_unload(): c# \) r/ J* T( D6 ~
  212. {/ T  U5 R$ l: ^
  213. return (int)NXOpen::Session::LibraryUnloadOptionImmediately;
    6 i# K7 f& g- I) o9 f) U
  214. }8 P+ m# l" _% m5 i  F" B2 \
  215. * c3 {6 E7 A' C; o: O1 q
复制代码
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了