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

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

admin 楼主

2013-11-6 18:54:58

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

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

x
通过这个代码,可以获取选择面的相邻面的信息2 t! O' h# L- n( D/ o
NX open C++中使用了 选择对象 selectobject 函数,通过面获取边数据,通过边获取面,从而得到信息!
/ m# v2 ]+ v. K% A9 j3 A
1 `' f3 p; j* J% |( K. W8 T
  1. #include <uf.h>& X& z3 K1 ~1 b, d" T
  2. #include <uf_ui.h>. b  j. ]: E- z1 f$ t- n2 x
  3. #include <uf_object_types.h>
    , b* q1 r# c$ V$ z( U% R

  4.   A: }0 X. S7 D# b9 N9 P* w" V
  5. #include <NXOpen/Edge.hxx>
    5 \& {$ `; e/ A  s
  6. #include <NXOpen/Face.hxx>
    9 K/ W$ V/ \  [% }
  7. 2 m8 x0 w/ w( A
  8. #include <NXOpen/ListingWindow.hxx>
    0 _; ~& u/ n# t% _/ x, @
  9. #include <NXOpen/NXException.hxx>
    % K# G5 M, D4 p% H6 U
  10. #include <NXOpen/NXMessageBox.hxx>
    % s5 U5 C2 ?& A, U) C
  11. #include <NXOpen/NXObject.hxx>
    ) v$ K( ]  Y9 P/ K, p
  12. #include <NXOpen/Part.hxx>5 l: f! Z# s% Y
  13. #include <NXOpen/ParTCollection.hxx>
    - C4 m7 E0 `+ N5 @
  14. #include <NXOpen/SelectDisplayableObject.hxx>: w7 c- B, @* t4 A# Z# q
  15. #include <NXOpen/SelectDisplayableObjectList.hxx>
    4 N! ]9 S/ C9 q2 Q) S# X# R
  16. #include <NXOpen/SelectObject.hxx>
    3 N2 e" G3 o7 I" v
  17. #include <NXOpen/SelectObjectList.hxx>) b" B$ p3 T/ i2 ^% `5 `3 e2 u; x
  18. #include <NXOpen/Selection.hxx>' H# S) o: I% h/ g& f
  19. #include <NXOpen/Session.hxx>
    8 v% O5 M+ F4 a
  20. #include <NXOpen/UI.hxx>
    " C4 _( R: J. x  @$ \4 a
  21. #include <NXOpen/View.hxx>1 k$ ^5 L& X' n9 O
  22. ' \3 ~$ E2 h2 Z' ?4 L) Z& T) C! p/ m# M
  23. #include <iostream>
    . D5 _! t' n3 J' b9 k
  24. #include <sstream>! {4 r& ^0 E  N' f8 f' [9 C/ o
  25. #include <list>
    ! B& k, e: \# ^' w" {8 l
  26. 2 N4 [$ t5 \) M0 J* B
  27. using namespace NXOpen;3 a0 r3 `9 Y' j6 N- U, c9 l
  28. using namespace NXOpen::Annotations;+ d# ]  Q/ s' L% h) u* F( ?
  29. using namespace std;
    , {# `8 ]0 W, y( o% ^& D& R
  30. 4 ]1 r4 i; c% A& b+ L' C
  31. class Gtac
    ' r+ e1 F# r5 S1 Q. K$ \* w4 S4 X
  32. {
    / S  v  w' ~- x% V4 Q- `
  33.     // class members- ~- Q  L3 @+ Z4 ?
  34. public:9 M) \& v+ q/ \
  35.     static Session *theSession;9 A0 |( R5 ^4 B3 i* U& r. @
  36.     static UI *theUI;
    7 q: [/ Y1 x# r9 K( P0 q3 X
  37. 7 [* v6 u0 A5 O- V
  38.     Gtac();
    . t& f$ M' u% S7 [
  39.     ~Gtac();3 o8 p" o9 c6 m
  40. ( O. i% Z4 N! U! R' ]
  41.     void do_it();0 z+ r5 |0 j# g8 E
  42. + e5 u* `) n2 m5 \& }2 v0 H: S# F2 ^
  43. private:
    9 O0 I0 Y: K& g) \3 @) v: r. ]6 U
  44.     Part *workPart, *displayPart;
    & Q, g( P$ c. h3 U: c/ B8 j
  45.     Selection *sm;
    ' T. e5 L/ @0 Y- x  y- f# N# D6 O
  46.     NXMessageBox *mb;
    8 c& o; N8 w( x8 u. F' k4 P
  47.     ListingWindow *lw;( W  E4 A1 H* ?2 x+ j
  48. 5 w9 v2 F5 @5 ^' P2 C7 x" ]8 U
  49.     Face* select_a_face();+ Q% g( Q# F* C- n( O

  50. + o% e2 Z4 j. l  @( t+ \
  51. };
    % {3 w! w5 C$ L+ k% y% ?; H. p

  52. / H* X* d5 M. S) c) t& V4 b
  53. //------------------------------------------------------------------------------
    1 l5 _7 o! h) M8 y" H0 e/ T
  54. // Initialize static variables. J: j+ b* w8 m, ^
  55. //------------------------------------------------------------------------------
    9 s7 e8 J) ^! z
  56. Session *(Gtac::theSession) = NULL;2 G* {5 j. ?% S8 e4 o" R9 u
  57. UI *(Gtac::theUI) = NULL;% t3 K$ H1 @( A! w& j

  58. + t' Z. x  P9 f+ b! f- q$ m
  59. //------------------------------------------------------------------------------
    9 T& B! q# p& ?  }3 a9 A5 Z
  60. // Declaration of global variables
    7 L3 c" v/ }, X$ H$ @9 v2 f4 Z
  61. //------------------------------------------------------------------------------
    ( ]) g8 }5 R& T# ^, T! T# r
  62. Gtac *theGtac;
    # E# X& K* u) y2 }: C/ o7 V, u
  63. 0 T( P- k+ a+ i6 J& q
  64. //------------------------------------------------------------------------------2 h; F1 D+ W' k
  65. // Constructor
    # a4 J: k) D' a8 |
  66. //------------------------------------------------------------------------------
    1 l/ A/ B) G9 g8 C/ N! \: ?
  67. Gtac::Gtac()
    5 M9 ]9 o  b' t6 b7 w, q
  68. {
    8 b9 U" s7 Z5 L& j8 A( r
  69.     // Initialize the NX Open C++ API environment1 z! v' _# Q9 W* X8 z
  70.     Gtac::theSession = NXOpen::Session::GetSession();
    4 @# `( N9 @( s1 B& _
  71.     Gtac::theUI = UI::GetUI();
    * N0 z( r! J9 r5 }1 j' j

  72.   d9 E7 Z* X9 Q' U
  73.     sm = theUI->SelectionManager();
    0 L+ }1 j& k! E9 I
  74.     mb = theUI->NXMessageBox();/ ~5 K! Q! J- @8 v
  75.     lw = theSession->ListingWindow();9 N; U/ N. H# f& h
  76. * @  V0 c7 d& I: B4 I
  77.     workPart = 0;
    7 w; B" U1 ]7 s3 x
  78.     displayPart = 0;
    . t3 l  M9 y, z. ^5 _
  79. }
    0 T3 O& c/ Y( |* ]" F# v+ T/ C% y

  80. . z# D0 B! H! S6 u
  81. //------------------------------------------------------------------------------+ L  Z9 L8 _) e# G6 m1 W
  82. // Destructor' u; _6 H3 T3 h( `% f
  83. //------------------------------------------------------------------------------8 G, [+ _# |  X! d
  84. Gtac::~Gtac()8 K; M7 ?, @# l" z
  85. {
    6 j5 j: U/ U' K- k6 s9 A0 c
  86. }4 y. [; j- q$ R; @8 [
  87. , ^* @9 J2 b# H* O! E
  88. //------------------------------------------------------------------------------
    , F) q; [: v; x7 Y' e8 t
  89. // Selection
    0 u- @+ i3 U  T4 P: o; Z) E
  90. //------------------------------------------------------------------------------
    ! Q9 X- m" u  b' ^( y
  91. Face* Gtac::select_a_face()
    + v: Y* _' T) f# M5 V3 @
  92. {
    0 f# M. w7 C; \/ c3 ~7 w: S
  93.     // ask user to select a face
    3 P' [- f6 O" G7 P- w6 [
  94.     UI *ui = UI::GetUI();3 z( h9 Y1 ?  X- K2 o7 E0 H
  95.     Selection *sm = ui->SelectionManager();; x4 B" J0 t( u' V
  96.     NXMessageBox *mb = ui->NXMessageBox(); // as of NX5
    ! ]' O4 H0 f. S6 h) o/ x
  97. + _4 e* `7 o! h3 W+ o- K
  98.     NXString message("Select Face:");
    . m, z: x' L( \& M1 X
  99.     NXString title("Select Face");5 }7 k. T  ^. d- z
  100.     Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;% n/ B. [9 |. C( ~$ _0 @8 W+ v
  101.     Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;
    & J; L1 c* V) t9 ^- I  z6 r% c
  102.     bool include_features = 0;  G- u( ^6 S# T. F
  103.     bool keep_highlighted = 0;1 j5 X3 `8 Z" d- B4 N4 C
  104. 1 c  b3 X! g) g' {$ |) l5 a
  105.     // Define the mask triple(s)
    3 F0 R% n7 ~: j; x, r( ?) _
  106.     std::vector<Selection::MaskTriple> mask(1);
    " P& a  Q( R  ?  B" B
  107.     mask[0] = Selection::MaskTriple( UF_solid_type, 0, UF_UI_SEL_FEATURE_ANY_FACE  );" ?4 X- Z/ F, W: E$ E3 @; z$ l
  108.     Point3d cursor;
    $ r6 D. r" Y7 Z" a& v
  109.     NXObject *object;
    - [0 f9 f, Q4 P6 K" L( B" ?& _

  110. 7 v9 ]6 A1 `# s! ~, A  k
  111.     // Select objects using filter defined by mask triples
    ; s# r$ J  _  N: g7 f
  112.     Selection::Response res = sm->SelectObject(' I- R9 Z4 _$ Y6 m( F
  113.         message, title, scope, action, include_features,
    ' q. f3 b& @" D
  114.             keep_highlighted, mask, &object, &cursor );  D4 a% h6 L: i" n$ y# |" j& B8 a3 N
  115. - c0 t8 }" v1 r9 W
  116.     if( res == Selection::ResponseObjectSelected )- H5 t' E1 M1 R2 `+ w% r
  117.     {
    . G0 q# P9 n: O# B
  118.         Face *aFace;
    7 R9 Y# Z# j7 O1 w# c
  119.         aFace = (Face *)(object);
    , t4 p0 ^7 c# s2 \; K& ^
  120.         return aFace;# J- P' {2 p7 m0 B8 s
  121.     }5 l& A  N8 \5 \/ w% w. d

  122. 5 E6 C0 X9 S- U+ O) \9 z+ E
  123.     return 0;4 I/ g5 V2 R5 x
  124. }; E. f+ _' d" P6 A1 Y
  125. + [) ^. m( K% y3 B7 {8 t7 \
  126. //------------------------------------------------------------------------------
    5 @! f( g& A. v( q
  127. // start with our job...8 U' X0 _1 S# n$ T+ B, R
  128. //------------------------------------------------------------------------------
    $ z1 [, m7 m% X. a" l6 m4 q6 `9 h
  129. void Gtac::do_it()
    $ p6 ~! A2 m: U' N
  130. {
    $ k' T& A+ N) Y% z; {+ u
  131.     workPart = theSession->Parts()->Work();$ |9 W) R  m  S# X+ t
  132.     Part *displayPart = theSession->Parts()->Display();
    " I3 ^1 p& G6 q; U( n
  133.     stringstream out;8 Q2 Y3 d2 ]: ?5 {
  134. 9 W. d3 ~4 S2 H- [5 W' X$ U
  135.     Face *theFace = 0;, J8 t8 m2 u; L0 B4 B
  136.     std::list<Face*> myfaces;
      y' y0 ^5 C( J# T5 u2 N7 h
  137.    
    / p! e8 N! H) n* U
  138.     while( (theFace=select_a_face()) != 0 )4 }6 G& w2 f+ X# L
  139.     {
    9 {  i; B; D, L4 w, M3 J' D
  140.         if(! lw->IsOpen() ) lw->Open();
    $ I" ?3 m7 g3 \& i0 ~* o9 w4 S

  141. . W5 x. j! D* p, o7 M4 |0 w
  142.         out << "Selected Object: " << theFace->Tag() << endl;! ^& D9 }- Z% [. v# G
  143.         lw->WriteLine(out.str().c_str());
    , a% f3 S# N+ Q2 o$ V9 B% P

  144. , s' D' }0 Y, |8 u3 R3 s, |; r
  145.         std::vector<Edge*> edges = theFace->GetEdges();( T( G7 F+ ?4 R# v' r" ?. F
  146.         out.str(""); out.clear();
    / r- ]4 K9 k( \4 d
  147.         out << " Number of edges: " << edges.size() << endl;9 t8 a% o6 v/ Z: A$ R# w
  148.         lw->WriteLine(out.str().c_str());
      i2 _! z* a) g4 k' R
  149. ! B# B* l# O5 r+ a* Z2 o) }6 }7 S
  150.         for( int ii = 0; ii < edges.size(); ii++)
    - q& S/ w: I) W1 e7 |
  151.         {
    $ R+ z+ d) M. h3 @
  152.             out.str(""); out.clear();8 ~7 E7 Z7 c, x: {! f! ^6 J7 i
  153.             out << " Edge: " << edges[ii]->Tag() << endl;
    * Q% J( X7 N8 Q& f; o/ Q
  154.             lw->WriteLine(out.str().c_str());
    4 z+ Z8 A* c& o6 P! q  |
  155. 1 O% p: M/ i' p& h
  156.             std::vector< NXOpen::Face * > adj_faces = edges[ii]->GetFaces();
    & n( Y$ K. x, J
  157.             out.str(""); out.clear();
    # x% p: l9 i2 Z5 n
  158.             out << " Number of adjacent faces: " << adj_faces.size() << endl;$ I, t. j( u3 k/ @( r4 \
  159.             lw->WriteLine(out.str().c_str());* Q$ v! s$ Y, `% p1 Z

  160.   z% g* n- |6 M9 j5 V4 {
  161.             for( int jj = 0; jj < adj_faces.size(); jj++)
    , ^, k6 o2 O" A( I, D4 `) }
  162.             {' \7 s& _5 m& B- ^+ H
  163.                 out.str(""); out.clear();4 J, C# n2 o$ \5 d  I
  164.                 out << " Adjacent face: " << adj_faces[jj]->Tag() << endl;
    - M0 V5 [* ^7 t8 F  z2 R
  165.                 lw->WriteLine(out.str().c_str());' q) Q9 ?! z% c9 m* [* P& r, p1 f4 `
  166. " P% @: ~* X' |! e8 p, Q
  167.                 myfaces.push_back(adj_faces[jj]);. O" F0 {9 R5 a7 `
  168. * M1 ]7 v  `7 t$ A3 k, H& q
  169.             } // jj
    ) v) F7 {; k' w

  170. 7 v( t  o. L, s  J* ^# v6 |" I0 I
  171.         } // ii
    - `4 Y- q1 |2 |8 \
  172. * s+ Q" E( _: S5 d0 A) r5 D+ O
  173.         myfaces.unique();4 m+ b- L6 H% o2 h
  174.         for (list<Face*>::iterator it=myfaces.begin(); it!=myfaces.end(); ++it)
    6 a! q* @. k" x6 K5 V
  175.         {
    0 s% ]& d# X! S. `/ R- G0 b
  176.             (*it)->Highlight();
    7 b% ~, }: ?8 d2 b
  177.         }
    - J1 A( @2 E. S& a8 Q7 U3 C. G" y$ k# Y& _
  178.         Gtac::theUI->NXMessageBox()->Show("Adjacent Faces", NXOpen::NXMessageBox::DialogTypeInformation, "Confirm");
    ) a2 ]. T4 T$ t
  179.         for (list<Face*>::iterator it=myfaces.begin(); it!=myfaces.end(); ++it)) r$ U5 z6 b# w) v4 R
  180.         {
    0 J2 q8 N, M$ w  d+ ]% ]  A* D( R- J+ Y
  181.             (*it)->Unhighlight();
    $ V- T3 D% o. c
  182.         }
    ) Y5 m  m( n$ o3 B1 g" e
  183.         myfaces.clear();( @: b2 |4 }9 b6 D
  184. 8 ]/ U, `- h: P5 }

  185. 4 ^* E4 X: u/ N5 l7 B! I( F
  186.     } // while
    6 L5 u* ?% K- F& K' r, m
  187. }
    ' r) H4 g  J! Y9 I2 G. `' [
  188. 0 n. F6 b0 W( S9 y1 u- r1 z
  189. //------------------------------------------------------------------------------  _& G' u8 B# b9 W' g! Z1 H- a
  190. // Entry point for our unmanaged internal C++ program/ F( b' l1 Z6 Q
  191. //------------------------------------------------------------------------------
    . L* @. a$ ], Y9 X1 n2 k
  192. extern DllExport void ufusr( char *parm, int *returnCode, int rlen )) N; D5 _& f+ w. k9 S
  193. {* z! O! e& I( H" d8 y/ |5 I
  194.     try9 O& w3 |6 D$ j5 H! P: _2 g
  195.     {
    2 J* v9 g$ H4 v9 T2 s$ Q  s
  196.         theGtac = new Gtac();
    % Z. d$ H! C8 `0 N; W4 ?
  197.         theGtac->do_it();
    4 l1 [- Z2 m- y- o. y
  198.         delete theGtac;
    1 f3 T2 t& [/ M& ~
  199.     }3 t( F/ G" {$ M% u8 f
  200.     catch (const NXOpen::NXException& ex)7 j& \2 A& C0 ]' \3 z* `
  201.     {2 D4 I6 m+ w/ D) |* d
  202.         // ---- Enter your exception handling code here -----8 @& S4 W2 i# Q/ c& X% x
  203.         Gtac::theUI->NXMessageBox()->Show("CaUGht Error", NXOpen::NXMessageBox::DialogTypeError, ex.Message());
    1 o% ]* `  Y4 Z/ A0 K* N8 m
  204.     }% O" k2 E* H" ?  o" N  _0 T! B
  205. }0 e" H6 t" Y& o
  206. + f: c( _7 {3 _, m  `; G0 t- G
  207. + x3 P* f9 g. x4 F8 u3 Z- W( T
  208. //------------------------------------------------------------------------------  T) @- Z+ C& W7 S( \% v& m
  209. // Unload Handler
    1 P. }+ D8 b4 _$ K
  210. //------------------------------------------------------------------------------
    0 m& U5 H) [: ?4 @4 V
  211. extern "C" DllExport int ufusr_ask_unload()3 W, }1 p& A8 n4 d$ f9 @
  212. {
    6 a0 ~( k0 v4 I& t) N' u. i  x
  213. return (int)NXOpen::Session::LibraryUnloadOptionImmediately;! @6 V& s! H  a3 m! _. [
  214. }$ M2 k+ U  w# x6 f  f' }8 T

  215. 9 g" d% k* a8 x- }
复制代码
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了