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

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

admin 楼主

2013-11-6 18:54:58

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

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

x
通过这个代码,可以获取选择面的相邻面的信息% Y" ^  _+ z- @& Q6 f8 c
NX open C++中使用了 选择对象 selectobject 函数,通过面获取边数据,通过边获取面,从而得到信息!; g9 l% e6 B- g3 |6 d5 [4 Y; i$ l( b# [

: x5 _/ Q1 [7 x4 j4 t
  1. #include <uf.h>
    + u5 O- \- d. Z" {+ z! r9 _4 p
  2. #include <uf_ui.h>2 {# B1 n. S: o. p
  3. #include <uf_object_types.h>
    ; K9 j+ \' l* B( t3 u" K3 x; A
  4. ( }, j" c0 g0 S! v
  5. #include <NXOpen/Edge.hxx>6 v; w  D! f. k- D4 @0 S" f
  6. #include <NXOpen/Face.hxx>- I6 n0 c  C) d( y+ R  e6 h1 S2 q; m
  7. : G! a! w. S4 o  u0 V* @! H& r
  8. #include <NXOpen/ListingWindow.hxx>2 z* ^0 Q  [6 u5 g4 e+ X
  9. #include <NXOpen/NXException.hxx>: p5 H; I+ X  d& x' Q( c
  10. #include <NXOpen/NXMessageBox.hxx>
    ( v0 {5 A; R  S% x4 N2 m' S: E. o
  11. #include <NXOpen/NXObject.hxx>! I% c$ y4 Q  M
  12. #include <NXOpen/Part.hxx>
    ; Z7 n9 r4 k/ D; y3 a1 h# E
  13. #include <NXOpen/ParTCollection.hxx>) c& E. F7 {; N, _% `% b8 o
  14. #include <NXOpen/SelectDisplayableObject.hxx>
    ; w3 H/ V8 E# A* h* T$ d; z2 I
  15. #include <NXOpen/SelectDisplayableObjectList.hxx>
    8 a" N5 [/ N, q$ d6 R
  16. #include <NXOpen/SelectObject.hxx>" ]& ?! v& c- E( r0 O
  17. #include <NXOpen/SelectObjectList.hxx>) q9 Z8 U( G2 d. `
  18. #include <NXOpen/Selection.hxx>
    5 V) }' M! G4 g1 A" b) C3 F
  19. #include <NXOpen/Session.hxx>0 t# `- a0 l1 M" t. T
  20. #include <NXOpen/UI.hxx>8 [! B% R9 f& T- X, W- }; ^% \- a
  21. #include <NXOpen/View.hxx>6 O! r4 R7 |+ [6 [+ I! ?+ G3 c
  22. 1 X! }$ I8 i8 b; G
  23. #include <iostream>
    2 u. M1 ]0 k. M2 B. p, W
  24. #include <sstream>
    ! N" Z! J2 o2 l$ W$ c, `4 m
  25. #include <list>7 @1 H! p; X3 V5 x. h

  26. 1 M$ e4 u9 S' b. b
  27. using namespace NXOpen;  H& Q  p# q+ ^0 y
  28. using namespace NXOpen::Annotations;( n# `9 [4 f( q" p+ g$ Y: x. Z* o# Q
  29. using namespace std;" F! [3 e$ r5 e7 {4 L

  30. * @. x  Q" k! D% Z8 I
  31. class Gtac
    : n9 k( T9 b$ W/ [  ]& a( Y' K3 j/ `
  32. {" \7 S# L+ e4 `, _1 |. l/ M8 w
  33.     // class members
    % ^" E$ Q+ H$ X$ A3 j
  34. public:+ j8 t7 F( p; `5 D3 Q& J3 {/ P
  35.     static Session *theSession;
    8 P' A2 }& {* ?0 t. X
  36.     static UI *theUI;+ r0 T( B3 B$ |8 C( ?' b9 v9 X" @5 F
  37. 1 Y2 S! r* p; C1 W3 j  }3 @
  38.     Gtac();
    / M& p, X9 F/ X
  39.     ~Gtac();- q7 N  X! Z! l: ?
  40. # Y* k6 R, I) O, P# \
  41.     void do_it();7 n9 t" [; Q2 C

  42. : ^  q9 k: c" ~. Q, Q+ H8 X
  43. private:
    / f/ ]+ Y) Y, F0 b9 k% K
  44.     Part *workPart, *displayPart;/ b" ?2 x! R6 }
  45.     Selection *sm;
    0 L  @; P6 U' {' ~. V4 u8 r; l" [' v
  46.     NXMessageBox *mb;2 ]: t( f6 T. i( k
  47.     ListingWindow *lw;$ h! i/ v+ Q# u! D" Y# V2 A% j

  48. 5 B; U/ L2 |) T$ L$ P+ A
  49.     Face* select_a_face();. v7 a" Y1 w) j' m8 z  O

  50. 6 D% q% i8 E* B. G" d! C
  51. };
    8 i: Z1 z0 f* x. R% p

  52. 1 c7 g, |( m+ A& ?
  53. //------------------------------------------------------------------------------
    , b  A: u3 b4 |, @) Q+ ]* k4 `+ i
  54. // Initialize static variables/ y' J* v; e- i! p( v$ G
  55. //------------------------------------------------------------------------------- |* o0 N2 I- e" c0 E& v. O
  56. Session *(Gtac::theSession) = NULL;
    & t# V) P( j4 l, `/ p# b
  57. UI *(Gtac::theUI) = NULL;
    . r: g9 G. A) ^0 C4 A

  58. 7 A$ K4 V4 ~3 g' |7 d% A0 y
  59. //------------------------------------------------------------------------------
    2 I" M) I8 A0 [  G4 S
  60. // Declaration of global variables' }& f! g" E! c7 t' O
  61. //------------------------------------------------------------------------------$ N" C# E! j- a" g
  62. Gtac *theGtac;' z4 F6 X* H8 U8 b

  63. 3 T+ f; Y. l& M# l5 S7 y- g
  64. //------------------------------------------------------------------------------
    / x; B4 ~  k7 ?9 }6 g' Q  u. G
  65. // Constructor! m; H2 ?" G- T) F' f" w# B: N5 v
  66. //------------------------------------------------------------------------------0 t1 x) X* n/ \) ^& H
  67. Gtac::Gtac(): b0 t5 X7 d# v1 s8 e# o# {8 S  \
  68. {$ Y% ^$ t+ Y8 I5 Q  G* v
  69.     // Initialize the NX Open C++ API environment
    0 f! F# j* j& Y) P; y2 x
  70.     Gtac::theSession = NXOpen::Session::GetSession();0 v7 D- I6 _% ~2 w
  71.     Gtac::theUI = UI::GetUI();0 h+ o& |9 h; D% k1 w9 G

  72. ' ?. H# }4 J9 v0 }/ d
  73.     sm = theUI->SelectionManager();" b- H! T; V( D! N; [
  74.     mb = theUI->NXMessageBox();
    / m. A; L& L: N, L5 p
  75.     lw = theSession->ListingWindow();
    ! c, Z* g& t5 f* U

  76. 8 h- T, z2 x+ e0 P' L8 ]
  77.     workPart = 0;2 M, P( z, \/ q( n6 H
  78.     displayPart = 0;( j& X1 E+ b4 a7 E, s
  79. }
    ( D; X% h9 q4 b3 T/ ~

  80. : w- I+ G1 r& u& z( @
  81. //------------------------------------------------------------------------------
    . U6 u# E% Y8 I1 J
  82. // Destructor
    ' x- Q; Q* P8 b5 H: T& V
  83. //------------------------------------------------------------------------------
    2 |1 D, d! ?4 [' t5 k0 J  w
  84. Gtac::~Gtac(); x  B& ]) D' s: |6 A
  85. {( W  i* v) Q3 \0 \$ Q  G
  86. }2 m2 v& F4 J+ y4 n

  87. 9 ^4 f3 ~) m* X& E
  88. //------------------------------------------------------------------------------7 I) x6 H5 q: f% m7 P8 I- p
  89. // Selection
      X4 A! Y" \" v3 {( ^8 E6 [
  90. //------------------------------------------------------------------------------
    % L3 o0 y$ P  u8 v
  91. Face* Gtac::select_a_face(); o/ S$ H% i+ H% x
  92. {
    ; x3 J+ c2 |. X. `7 i; |- s9 F; S. d3 h& \
  93.     // ask user to select a face
      D1 v0 ]: w2 Z9 i# `
  94.     UI *ui = UI::GetUI();/ c2 Z8 S  J" r- _0 e5 U
  95.     Selection *sm = ui->SelectionManager();
    ! u  r( n; ?& B
  96.     NXMessageBox *mb = ui->NXMessageBox(); // as of NX5
    5 s# ~( x  o& t/ j& I8 B
  97. * `2 R5 ~* h2 U+ }3 B; O, e+ a" C
  98.     NXString message("Select Face:");
    - L5 z: w$ s' x! _( \9 ]
  99.     NXString title("Select Face");
    , }% ^- h# x9 S" @  e, F' F
  100.     Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;+ J( ]- ]( M5 ?  J5 [
  101.     Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;0 z) g- L- m" t8 h6 s, c
  102.     bool include_features = 0;8 N! {5 j' I0 w0 m, N* [$ p, C) Z
  103.     bool keep_highlighted = 0;
    $ n9 n* Z4 c2 W1 b

  104. + @  R3 W3 M# q3 W7 i
  105.     // Define the mask triple(s)
    6 g4 Z! B% D. s8 V- M
  106.     std::vector<Selection::MaskTriple> mask(1);5 B; @& {7 o( e
  107.     mask[0] = Selection::MaskTriple( UF_solid_type, 0, UF_UI_SEL_FEATURE_ANY_FACE  );0 n3 z$ j. I  G% W- R
  108.     Point3d cursor;0 ?1 B7 [- t4 j3 p' d& b
  109.     NXObject *object;- f. b0 Z9 a2 ?) [

  110. 9 b1 d/ R4 b" g. {7 T
  111.     // Select objects using filter defined by mask triples
    & o% C' D: v# z& o
  112.     Selection::Response res = sm->SelectObject(2 @! Q* u2 S# q# q5 z
  113.         message, title, scope, action, include_features,& Y7 l  `& q  C- s
  114.             keep_highlighted, mask, &object, &cursor );
    & k& q! A" v1 K# B: R; {
  115. ( }3 l( W8 {0 Q( r7 r
  116.     if( res == Selection::ResponseObjectSelected )
    & W# o; \; A* m' d7 y+ M
  117.     {
    ) w. _: C. b% q  a  k
  118.         Face *aFace;- i+ e5 M" X: @4 k
  119.         aFace = (Face *)(object);
    # \2 w. |6 N/ n3 O
  120.         return aFace;
    7 p8 t. T: Y5 R/ C
  121.     }
    % l/ D2 b8 h0 \. {9 s2 C
  122.   G4 U6 c; r3 [
  123.     return 0;2 E1 @  O+ z3 c$ O0 u+ X1 [
  124. }
    - n' @9 W  J: A% W* [
  125. : G3 c/ v: B* ?3 K7 f% ]# O7 Q
  126. //------------------------------------------------------------------------------, C. S  \- N1 I3 i1 z5 [
  127. // start with our job...
    4 J- `6 {7 E3 O6 P# F+ {7 D
  128. //------------------------------------------------------------------------------) r  Y- x7 c% Z5 q' U1 g" e
  129. void Gtac::do_it()  j3 J1 G, l7 d; Q2 @' n
  130. {
    8 O" ~6 p  w6 B1 _. {4 ^
  131.     workPart = theSession->Parts()->Work();5 s7 x) ?, P/ a
  132.     Part *displayPart = theSession->Parts()->Display();
    $ `' U0 ?* n+ y, ]  ~+ B7 x9 |  U" z% Z
  133.     stringstream out;9 S( T) m. j0 p* m/ o" _& u4 R
  134. # `' D+ c2 m# f- M5 p
  135.     Face *theFace = 0;
    7 h" H$ d/ R- V  }: |
  136.     std::list<Face*> myfaces;
    ! q5 Y9 p' G7 L. E: w3 q2 g6 u
  137.     : I& l: _" K( d% t! V* [
  138.     while( (theFace=select_a_face()) != 0 ): D& ^# d% f/ z
  139.     {
    & r. g, [$ G" p
  140.         if(! lw->IsOpen() ) lw->Open();
    ' t3 p/ x1 j2 N, q

  141. , |: p- h( o" w' p3 }+ T) E! M
  142.         out << "Selected Object: " << theFace->Tag() << endl;4 ^9 J" ^' g9 j# m
  143.         lw->WriteLine(out.str().c_str());
    : {# s7 y% w' F! u4 Y* k' C) y

  144.   d+ w8 B+ K2 g1 `. a* ~' H
  145.         std::vector<Edge*> edges = theFace->GetEdges();
    ( @# B" r( v8 r! _6 Z" a' K9 {/ `
  146.         out.str(""); out.clear();
    1 O" v0 g; \" W, o: t' w
  147.         out << " Number of edges: " << edges.size() << endl;
    3 K. `) {  Y, s! d, N. b
  148.         lw->WriteLine(out.str().c_str());
    . n: f- y& F, N% u! r# q% s6 \

  149. & \2 Y% s. w1 N+ w0 e( q; F, L
  150.         for( int ii = 0; ii < edges.size(); ii++)1 z$ g/ k3 }7 I9 h& p$ M
  151.         {
    " l2 P2 K5 i  v  {. y
  152.             out.str(""); out.clear();
    ; p8 W. p3 p8 W; p: B3 x
  153.             out << " Edge: " << edges[ii]->Tag() << endl;
    ( {; o/ S- B- I' l1 H: x1 e
  154.             lw->WriteLine(out.str().c_str());
    / ^4 M% I1 V4 B
  155. ! F2 W3 A, O8 D8 c5 B: y+ D+ x# u. J
  156.             std::vector< NXOpen::Face * > adj_faces = edges[ii]->GetFaces();* J4 E3 j" J, G! F
  157.             out.str(""); out.clear();6 T: C4 u. {) o& z
  158.             out << " Number of adjacent faces: " << adj_faces.size() << endl;
    1 f7 V# Q/ L0 y" k. @5 c) m
  159.             lw->WriteLine(out.str().c_str());5 X9 s( A6 V( \- l4 ~7 l
  160. $ s/ V: Y, w. a! }% k0 C1 w
  161.             for( int jj = 0; jj < adj_faces.size(); jj++)
    7 R" w: q5 u/ L& S7 g2 N
  162.             {4 d' Q5 ~" w* K0 ~7 t" ?. K+ X
  163.                 out.str(""); out.clear();7 u7 r4 A) N% \: \
  164.                 out << " Adjacent face: " << adj_faces[jj]->Tag() << endl;. R% B" S& i0 @' |# `9 m
  165.                 lw->WriteLine(out.str().c_str());
    , J- m+ e; v6 Q9 n1 k9 q3 N7 p
  166. * B4 ~! [5 p: ~* m) q$ |& w! f
  167.                 myfaces.push_back(adj_faces[jj]);2 F1 L6 N& k6 @9 y- T& f$ @
  168. ; n, `4 N6 @/ A: X  a% Y, h
  169.             } // jj
    3 }* \- o" j9 Z7 R
  170. 7 F' Q# p% E+ r( Z$ }3 @# P  }; u
  171.         } // ii4 G) `* a- \" Y0 R
  172. % r6 A6 Q8 g1 x  H# a( M
  173.         myfaces.unique();
    2 J3 H$ B% c( z1 u0 I
  174.         for (list<Face*>::iterator it=myfaces.begin(); it!=myfaces.end(); ++it)0 F- l% u' h' S4 |2 w$ f# _
  175.         {# C! v* u# C: u3 U) L
  176.             (*it)->Highlight();; c( b  [* a& d  M3 P
  177.         }
    , {- [" e' `& Y6 q. N( i, r7 o# S
  178.         Gtac::theUI->NXMessageBox()->Show("Adjacent Faces", NXOpen::NXMessageBox::DialogTypeInformation, "Confirm");
    8 J5 ^7 j7 d# h7 `. Z+ |
  179.         for (list<Face*>::iterator it=myfaces.begin(); it!=myfaces.end(); ++it)" X" |3 L9 }) u
  180.         {
    / Y9 [, \. W: ?  \
  181.             (*it)->Unhighlight();
    - z5 s5 g* Y4 O1 {9 W% ~& j4 P( Z9 L$ p9 f
  182.         }
    9 [  Y. M# m/ y. E1 p/ q( w& ^
  183.         myfaces.clear();
    1 N% j5 d8 e% P5 H- B
  184. 7 G) J! h/ r* ^
  185. ' q( D2 R5 Q. R/ |4 }) A1 V8 Z6 W
  186.     } // while
    - T' G8 T) l4 }/ {
  187. }
    % }; U! b  z, x' S2 P

  188. 8 s; C0 s7 |2 N7 \, d9 O5 d
  189. //------------------------------------------------------------------------------  \4 J6 S' i# Y% v
  190. // Entry point for our unmanaged internal C++ program/ h% K4 R7 D' \+ n" U  [, T/ V& J
  191. //------------------------------------------------------------------------------
    5 v, A/ X7 H) }4 z( q3 F
  192. extern DllExport void ufusr( char *parm, int *returnCode, int rlen )
    3 j, j7 k( m; N% V: Z0 N
  193. {% }) b! k( q$ Y* g2 T
  194.     try
    ) x0 i8 ?) g4 X$ k
  195.     {' y1 u/ J/ D& J* Y& P& r
  196.         theGtac = new Gtac();$ t5 C4 F4 `. _6 A3 e  ~' Y* D7 v
  197.         theGtac->do_it();
    8 `8 K, Z$ J- A+ j
  198.         delete theGtac;$ ]% j9 |2 W8 l2 x5 @' O! T
  199.     }  x! ^! i  \* ]' k8 T
  200.     catch (const NXOpen::NXException& ex)( t5 {7 k/ o6 G9 I7 Q+ a( s% U% K
  201.     {, J# K& R" y' ]& N8 d
  202.         // ---- Enter your exception handling code here -----3 q& n! ^: i6 O
  203.         Gtac::theUI->NXMessageBox()->Show("CaUGht Error", NXOpen::NXMessageBox::DialogTypeError, ex.Message());
    7 s* a$ V; P6 N( s4 s1 _+ x
  204.     }
    / o5 G' {9 J  u( Z" V
  205. }
    # w) V0 R+ d5 V5 v% v/ X

  206. # O4 }5 _( y9 F7 O2 |7 U6 T
  207. 0 {: ?/ S3 C  H& I. l
  208. //------------------------------------------------------------------------------7 N. y* x9 a4 k7 ?
  209. // Unload Handler
    ( q1 W0 s2 W, T8 M4 ], X% f
  210. //------------------------------------------------------------------------------  u8 U. e- c$ N' z
  211. extern "C" DllExport int ufusr_ask_unload()/ }& B$ ~5 s- S3 }1 w7 }! R% |1 k
  212. {
    5 e% g! s' J# f$ C' l
  213. return (int)NXOpen::Session::LibraryUnloadOptionImmediately;; M- K" k' f7 z! D9 F
  214. }; v8 \8 e) `$ y% d
  215. % n& n) O2 u' B& r' ]: S) U* W  `
复制代码
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了