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

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

admin 楼主

2013-11-6 18:54:58

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

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

x
通过这个代码,可以获取选择面的相邻面的信息
4 H5 {9 O+ Q! Y* R9 V6 {! E- PNX open C++中使用了 选择对象 selectobject 函数,通过面获取边数据,通过边获取面,从而得到信息!
( O9 p1 y5 ^& m) X/ m! n: P0 x1 E) s4 n4 g
  1. #include <uf.h>
    / Q0 T2 I% m& O5 ~5 q1 H+ I. _8 M# j
  2. #include <uf_ui.h>
    , Z4 }3 f) q7 t* i+ |
  3. #include <uf_object_types.h>
    $ v8 {  {: H- g
  4. 7 c1 x* J4 A" N- _, e
  5. #include <NXOpen/Edge.hxx>
    , F1 o% ^$ |8 ?
  6. #include <NXOpen/Face.hxx>5 W$ R: R/ U/ p/ A1 V

  7. : D3 D" N3 s" u# T
  8. #include <NXOpen/ListingWindow.hxx>5 i5 ^' ]3 M8 w, v) e9 J
  9. #include <NXOpen/NXException.hxx>5 K: A4 r$ `1 V! b5 I* E' @, R
  10. #include <NXOpen/NXMessageBox.hxx>
    6 p6 F6 j6 D& W* c' Z6 o
  11. #include <NXOpen/NXObject.hxx>0 s! b7 w) q2 ~! t7 V1 a1 f% T
  12. #include <NXOpen/Part.hxx>8 C& U, d' R1 ?3 z; B
  13. #include <NXOpen/ParTCollection.hxx>
    - H# G$ G: R) o% T
  14. #include <NXOpen/SelectDisplayableObject.hxx>
    % s+ ]6 o& q# e. o
  15. #include <NXOpen/SelectDisplayableObjectList.hxx>
    % a9 d$ o3 C0 \: D9 i
  16. #include <NXOpen/SelectObject.hxx>3 _" b# [5 j6 G: G
  17. #include <NXOpen/SelectObjectList.hxx>! S0 B1 O# _6 l- @" J
  18. #include <NXOpen/Selection.hxx>
    3 E1 a+ c; u0 u3 f/ H: u
  19. #include <NXOpen/Session.hxx>
    ; P% [) ?/ ^& W/ E. C
  20. #include <NXOpen/UI.hxx>+ a5 r: r0 K6 \4 u9 p
  21. #include <NXOpen/View.hxx>
    # }% o7 C3 @# Y6 O% {
  22. - v7 z9 \; Q2 ^+ U0 Z+ ], w( {
  23. #include <iostream>9 }' ^8 u% u* s' j  P
  24. #include <sstream>  n8 n8 ^" W8 e0 t" X
  25. #include <list>
    $ ]4 a6 u' B7 x9 ?

  26. , X1 o/ ~: }- }. |. I/ P2 @0 S
  27. using namespace NXOpen;
    # E' S7 P) k1 p* E
  28. using namespace NXOpen::Annotations;# i! o* a$ `5 e; D5 d0 P
  29. using namespace std;
    2 G/ m+ ~! @$ _- K' m
  30. " i" X( E4 i2 ]2 o: C6 Q
  31. class Gtac2 }, B% q3 Z, b
  32. {
    / x9 P' L6 R: Y5 p7 H
  33.     // class members
    , l$ F7 q. d& M; F$ E- h1 ?  T4 A
  34. public:
      i/ U1 M& b, Z6 u- L! n( W
  35.     static Session *theSession;. V3 M! F# \: E' f
  36.     static UI *theUI;
    , N, D, g$ V2 B, J7 r5 Y

  37. # j: n+ o8 a- g3 e1 A7 i/ l/ X  C
  38.     Gtac();
    9 Y3 ^+ i/ P0 e* _6 S# g, f4 u. _
  39.     ~Gtac();0 i# r' Y. W! z8 P% l; C) {" s
  40. 5 R( \0 ?) i! Z2 w: o1 F
  41.     void do_it();* I; G: _9 Y, a( `! I, d, ?( d1 }
  42. : q0 c8 w1 w; s
  43. private:9 V7 P3 s# h/ Q% H# E3 U5 v' S
  44.     Part *workPart, *displayPart;, _! M' K1 w; f+ s) S- R9 D
  45.     Selection *sm;/ y4 y- p7 F. e% e4 r6 b4 b1 W
  46.     NXMessageBox *mb;
    7 K2 z2 I. C$ `8 z1 ?
  47.     ListingWindow *lw;  D7 ~- D+ j& C. g

  48. - m9 W. s4 m' h9 R: a- g2 Y+ }
  49.     Face* select_a_face();
    ; Y. A+ I8 ?: e! n
  50. ( h; c0 q- m0 n/ x  y( x
  51. };3 N; e" ~6 S% Y; F4 n9 N

  52. ' K% ?7 X0 x. ]! s. w% m
  53. //------------------------------------------------------------------------------. P* f6 t. o! J5 a, V7 q' K; u
  54. // Initialize static variables
    * y' B% f% ?( f+ ^
  55. //------------------------------------------------------------------------------% e7 _- S# [- E
  56. Session *(Gtac::theSession) = NULL;, v4 E* t6 h$ @1 V
  57. UI *(Gtac::theUI) = NULL;  ~+ S2 W/ ?1 ~0 R3 v3 V2 @0 @: k" J1 ~! }
  58. ; [& w; ?' `6 P7 L2 Y
  59. //------------------------------------------------------------------------------% k5 \5 q8 y5 a
  60. // Declaration of global variables9 l( Z9 j: M8 |* H  s
  61. //------------------------------------------------------------------------------; P8 e# F) K6 X; e7 |) d& U
  62. Gtac *theGtac;
    # O7 _7 n, O: B  M7 w3 A! Y

  63. 3 H% ^& N2 T1 S4 N$ O
  64. //------------------------------------------------------------------------------
    6 Q& q$ ]+ h' R  l1 y
  65. // Constructor
    5 U* H* \) Q0 Q
  66. //------------------------------------------------------------------------------* e+ n0 o% [8 ~5 F. ]/ ?
  67. Gtac::Gtac()- Q. T( J" S6 h: k
  68. {
    , R2 I) h0 w+ d' l
  69.     // Initialize the NX Open C++ API environment
    7 p  i# Y3 L# b2 E4 e
  70.     Gtac::theSession = NXOpen::Session::GetSession();% k3 h9 W( N6 v  p9 g
  71.     Gtac::theUI = UI::GetUI();
    4 Y/ o9 L/ t- W% e! A! [! p# W

  72. . c3 l8 A0 P2 g: a6 w4 t
  73.     sm = theUI->SelectionManager();
    0 s8 V9 M$ @# A( E: |# |, w
  74.     mb = theUI->NXMessageBox();- E% B7 s0 M7 k
  75.     lw = theSession->ListingWindow();4 x8 Y$ H6 e) M2 R
  76. # p! u! \! P% v: l  N6 l0 [8 ]
  77.     workPart = 0;
    1 j0 Y7 a) @) O! x. u  r  u
  78.     displayPart = 0;
    , D! `( c0 Q5 ]+ X0 o* R# g  _( t
  79. }
    ' T4 U: V0 M% a
  80. % I9 k" `* z) s0 ^
  81. //------------------------------------------------------------------------------  K# b3 V+ x" p; Q
  82. // Destructor
    0 s# k7 F7 A6 ]7 B0 k
  83. //------------------------------------------------------------------------------- y: L6 I% P- M1 y, S
  84. Gtac::~Gtac()
    5 D) }( g( ?4 z1 R3 \
  85. {
    + f! w1 g. V& K! }. ?
  86. }
    * y# i7 o9 X; y1 i  H, f$ b+ Q8 S. a
  87. 7 ~7 a( i9 l, z3 M9 M/ T5 r
  88. //------------------------------------------------------------------------------
      _( i- J" x( [* _. L" ?
  89. // Selection) G1 J* }% S. ~* m5 H% Z& P$ m/ C
  90. //------------------------------------------------------------------------------
    5 g% v3 k, c! a. _  m& C8 H3 ~
  91. Face* Gtac::select_a_face()" q3 ?' q5 e6 Q8 Q& S) E3 {
  92. {. L) m& F' _: S! v& J! @
  93.     // ask user to select a face" k& @) p4 j2 q) F  a9 W
  94.     UI *ui = UI::GetUI();% E+ y0 G+ S1 a
  95.     Selection *sm = ui->SelectionManager();. i& W2 P- W# i
  96.     NXMessageBox *mb = ui->NXMessageBox(); // as of NX5" T/ a! t6 f. E1 A5 m
  97. " r4 \$ l5 w7 U/ F8 e7 m
  98.     NXString message("Select Face:");
    . m" a) [. M2 B* e8 Y- [2 v& @* {
  99.     NXString title("Select Face");
    , V2 V; n. I! t1 N% k
  100.     Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;3 ?; F1 W, o0 J
  101.     Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;
    ) p. J9 t' ]9 `/ m/ r# }% y
  102.     bool include_features = 0;
    : m5 H8 ^8 U% m) i3 K9 s* j: [& ~
  103.     bool keep_highlighted = 0;4 P. i* v- {6 }% |

  104. 0 }6 Q% I! }8 e7 p. Q
  105.     // Define the mask triple(s)& u" D( W$ V- T3 z
  106.     std::vector<Selection::MaskTriple> mask(1);- m4 m  y- k9 K! t& y
  107.     mask[0] = Selection::MaskTriple( UF_solid_type, 0, UF_UI_SEL_FEATURE_ANY_FACE  );" H# B& H: f  i5 T3 P6 U
  108.     Point3d cursor;8 D* l% f' m' w4 A" i& l' F, Z5 I
  109.     NXObject *object;) t* M% |3 q0 ?
  110. ) v; B* I9 u& X
  111.     // Select objects using filter defined by mask triples
    , W; v0 ?. ~# H( A( k5 o9 L- d
  112.     Selection::Response res = sm->SelectObject(! T* D+ a9 v- O3 A
  113.         message, title, scope, action, include_features,
    ) {" }+ ^4 N3 a% B
  114.             keep_highlighted, mask, &object, &cursor );2 U" ^$ x9 T& A! G0 c( s% C% V
  115. + f2 ^. t5 Z/ ?7 T/ ]
  116.     if( res == Selection::ResponseObjectSelected )- J! g9 b4 L3 k8 V& H7 r
  117.     {9 u: V6 F* \8 |" {% n: }! j
  118.         Face *aFace;# ~3 w+ T- U- T! r4 H
  119.         aFace = (Face *)(object);6 T) B# z+ y2 P
  120.         return aFace;
    : B, I2 ]0 t: T
  121.     }9 E/ G3 R2 [; a- B
  122. + V. @* i. T5 o  R; O/ o/ \: D7 p
  123.     return 0;
    2 B3 r6 b& T+ s: v- ?
  124. }
    ! q3 }' Y2 }1 q9 C* ~; t6 I* E

  125. 4 a4 `& a; }" {& k$ B4 ^
  126. //------------------------------------------------------------------------------
    , j3 G$ U$ f' L; n7 F0 G9 }
  127. // start with our job...0 j& X' d4 \& |! F5 N/ u% t
  128. //------------------------------------------------------------------------------5 m' _! a" P$ L
  129. void Gtac::do_it()' g; g2 g8 }/ L) j; E6 S, X
  130. {
    ' j8 ]8 k; I. e( f: d) P; s
  131.     workPart = theSession->Parts()->Work();
    + E/ f( V6 }0 p( ]1 x4 R  r3 I8 G$ T
  132.     Part *displayPart = theSession->Parts()->Display();
    / l7 a# P1 o  D  c0 x5 ]* u: `
  133.     stringstream out;
    & ?# e! k4 U( T+ P" i" ?" Q6 `
  134. 2 M7 q) e% Z  W& s) O7 y
  135.     Face *theFace = 0;( [: W. S9 k7 F2 w. u0 j
  136.     std::list<Face*> myfaces;- C7 X0 [2 ], t& c/ L& ^. t/ f
  137.     8 G8 G4 L' @8 v7 F% t, Z- v
  138.     while( (theFace=select_a_face()) != 0 )
    + U" d* H, [. x: v8 _" R2 \
  139.     {6 j8 X# \" g0 G- o  _* n- t1 F
  140.         if(! lw->IsOpen() ) lw->Open();  }, ?( ~" R% L
  141. 3 R* M" H+ {( [# e0 q) E$ i. N; F
  142.         out << "Selected Object: " << theFace->Tag() << endl;
    ! ^" M! _0 s& b& u; Y" i8 c
  143.         lw->WriteLine(out.str().c_str());
    6 y2 s8 V0 q! j, S

  144. - M& Y" C/ b3 d  Z) N
  145.         std::vector<Edge*> edges = theFace->GetEdges();
    - [) ?4 C! `5 B, p" [5 i
  146.         out.str(""); out.clear();
    / P0 c5 s  t4 K% b
  147.         out << " Number of edges: " << edges.size() << endl;
    + ?4 H, M% {: p, ]/ G1 H+ [7 a
  148.         lw->WriteLine(out.str().c_str());
    % W  ^# I1 i, V  y
  149. ! R7 j2 r3 ^4 H" O
  150.         for( int ii = 0; ii < edges.size(); ii++)& o" w1 A' o! M+ U- J6 Z
  151.         {7 {. K* w3 a9 r  P, M
  152.             out.str(""); out.clear();
    + _' {; p: J; g9 K$ m0 W* c6 G
  153.             out << " Edge: " << edges[ii]->Tag() << endl;
    + o. r9 J- s! Z6 p
  154.             lw->WriteLine(out.str().c_str());& a5 P5 J1 W$ k4 j7 B
  155. ; U8 o8 q, }) W" Q' D0 |& i9 X
  156.             std::vector< NXOpen::Face * > adj_faces = edges[ii]->GetFaces();# e, e8 d# c8 @/ h. {
  157.             out.str(""); out.clear();
    ( [) o5 z; O: ^$ [
  158.             out << " Number of adjacent faces: " << adj_faces.size() << endl;/ i1 m( E% P4 P( ~& G
  159.             lw->WriteLine(out.str().c_str());
    6 B) C/ t0 a  \' D

  160. * K6 g) n% g9 l4 X! l% \
  161.             for( int jj = 0; jj < adj_faces.size(); jj++)( R4 \5 u" F- H
  162.             {
    5 J. Z' _! i* v3 h% ]! G% j& k
  163.                 out.str(""); out.clear();* x: w2 T9 l6 A8 ^' S
  164.                 out << " Adjacent face: " << adj_faces[jj]->Tag() << endl;& c5 l7 f" ^0 r1 R  j
  165.                 lw->WriteLine(out.str().c_str());$ o3 l7 t! I* t; w+ N. j

  166. ' V! ]. B6 w* `4 a
  167.                 myfaces.push_back(adj_faces[jj]);  j# b" z% ^: s, g

  168. ! ^! P! {9 E& ^, P6 P
  169.             } // jj, I8 ?3 _( D4 U6 _" ?1 `+ D
  170. * \/ c" G/ }& h0 N0 d
  171.         } // ii
    6 g; D, [  _" y  c- L2 |0 {. |1 m* d
  172. ; ^5 t7 F6 S) w3 u  @1 ?! c
  173.         myfaces.unique();
    : M# i: i; ~; ^9 j' S2 V1 }: ^
  174.         for (list<Face*>::iterator it=myfaces.begin(); it!=myfaces.end(); ++it). j% [9 M' C# h3 i8 K0 |6 m
  175.         {
    : b: M  o) k: J' w+ G  e4 I7 I
  176.             (*it)->Highlight();: Z4 h5 a3 Q% c2 U$ w4 p" @
  177.         }
    " M, N+ ~9 r2 V& r
  178.         Gtac::theUI->NXMessageBox()->Show("Adjacent Faces", NXOpen::NXMessageBox::DialogTypeInformation, "Confirm");+ W9 `$ E9 Z$ r
  179.         for (list<Face*>::iterator it=myfaces.begin(); it!=myfaces.end(); ++it)
    : A, W6 z$ z5 Q6 o0 ?
  180.         {8 o6 F; |' {* z) A- P
  181.             (*it)->Unhighlight();7 O3 Z# v& V! n8 h
  182.         }
    0 {2 `1 v# E8 G+ Y! L% ]# E
  183.         myfaces.clear();
    , t( O/ N9 b8 v- M* Z  l- j

  184. / Y2 P( L+ J6 i/ W

  185. ) G6 S( H: h% ?0 T
  186.     } // while  w& ^* L. F2 e, v( l  R
  187. }
    " v* U' O. c9 n

  188. ) m' M2 A* z* h# z# u+ `+ `5 g
  189. //------------------------------------------------------------------------------1 q) S( g# d" Z) f
  190. // Entry point for our unmanaged internal C++ program( x% M! r- v0 \+ m1 U  S; s
  191. //------------------------------------------------------------------------------. s# Y2 n/ E5 V' Q- w
  192. extern DllExport void ufusr( char *parm, int *returnCode, int rlen )
    3 L. x( F' b+ _$ K! `% T) n. R& ~2 j
  193. {8 |9 U! |3 d7 F" |/ [1 ^
  194.     try
    2 v* v, l' J2 M5 [7 S, O% @# G
  195.     {
    + R, W" U; F! c( I! l
  196.         theGtac = new Gtac();
    9 v! p2 w4 N5 Z2 Y  w
  197.         theGtac->do_it();& k4 N1 h3 E0 K. q
  198.         delete theGtac;5 Q' j2 g; r1 b0 z/ y& I
  199.     }1 K6 X' Z6 n) C
  200.     catch (const NXOpen::NXException& ex)" W+ e$ p* d% i( B  J
  201.     {
    2 K' C& Y6 A! R# \
  202.         // ---- Enter your exception handling code here -----
    ) f# l- B+ Z: r  a1 H4 T4 M
  203.         Gtac::theUI->NXMessageBox()->Show("CaUGht Error", NXOpen::NXMessageBox::DialogTypeError, ex.Message());( t! r& m; ^! l5 U' Q' E
  204.     }
    . `( v, B2 b% X
  205. }
    - f8 ^4 s2 n& u" @  F
  206. * v0 ?) |' t2 k# O9 e$ H+ z

  207. : N6 Y4 X/ E$ _) z/ Y
  208. //------------------------------------------------------------------------------
    7 s/ Q: b3 J: }7 d4 I6 U; p+ o
  209. // Unload Handler" W. M7 D5 {: _0 U1 g6 i; {
  210. //------------------------------------------------------------------------------
    9 b* {, A9 e0 M% V+ s4 b' w! I% f
  211. extern "C" DllExport int ufusr_ask_unload()
    , X. E$ w2 G9 p, k3 p7 x
  212. {' f. D" R4 ^1 q0 O( [* A$ Q/ G
  213. return (int)NXOpen::Session::LibraryUnloadOptionImmediately;$ s0 A% E$ v& G
  214. }" P0 f- p5 Y* ^* Q- l2 V4 O
  215. $ e9 Y$ \" E, s5 i: l7 x3 o( a
复制代码
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了