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

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

admin 楼主

2013-11-6 18:54:58

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

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

x
通过这个代码,可以获取选择面的相邻面的信息4 ^6 b! A5 `! g( v8 `" y" u4 y$ B
NX open C++中使用了 选择对象 selectobject 函数,通过面获取边数据,通过边获取面,从而得到信息!
" {* d1 K: [3 j; |! d! C. n6 u' o4 h1 P2 n  e( i5 D
  1. #include <uf.h>
    , N" m2 }/ V9 y! m
  2. #include <uf_ui.h>
    0 ?3 v$ j& @/ j8 n) c
  3. #include <uf_object_types.h>; P; V0 Y8 b4 P( x2 C& u5 x
  4. " Z% }# O* V% g( ~9 ?
  5. #include <NXOpen/Edge.hxx>6 d4 W5 f! p5 K5 a6 i7 d: `9 ]
  6. #include <NXOpen/Face.hxx>2 Q- \5 t$ m: E5 o& o- B9 T
  7. & ^5 r6 ^- r- X6 B" ?8 ]
  8. #include <NXOpen/ListingWindow.hxx>6 I! {, q/ m; F% b% @% t, L
  9. #include <NXOpen/NXException.hxx>
    4 y& d$ D! r. ^: d4 `% Z  L3 C$ O
  10. #include <NXOpen/NXMessageBox.hxx>0 C, y$ Q9 f9 C& D" o6 p
  11. #include <NXOpen/NXObject.hxx>) W4 h0 o. v7 x; F% v
  12. #include <NXOpen/Part.hxx>8 ]# J# P) u" K1 i9 M- y
  13. #include <NXOpen/ParTCollection.hxx>
    8 @% j) Q: s# z
  14. #include <NXOpen/SelectDisplayableObject.hxx>) w9 ?+ S1 w( k' @
  15. #include <NXOpen/SelectDisplayableObjectList.hxx>% R; K! H/ c$ w
  16. #include <NXOpen/SelectObject.hxx>
    5 J3 G( ~8 O4 _
  17. #include <NXOpen/SelectObjectList.hxx>
    % ?; N3 r  j  {% S# y9 `
  18. #include <NXOpen/Selection.hxx>
    7 U( b6 `" O$ y1 n; x- _& p
  19. #include <NXOpen/Session.hxx>
    ; d3 \% l2 k4 s3 v3 ?0 J1 y/ W
  20. #include <NXOpen/UI.hxx>4 A! F1 E1 A* n9 K3 L, R$ {9 x
  21. #include <NXOpen/View.hxx>
    " n: p  |7 g7 Q; @2 F+ W

  22. 2 m4 Z: s" M9 _2 K9 C' c
  23. #include <iostream>
    * |1 E( c' o2 w2 m% |8 Y
  24. #include <sstream>
    1 T. [) G/ {* `
  25. #include <list>
    ; D8 j7 v" P) O0 ^& s  @, b
  26. % z$ R% s3 h8 q" S) d: W
  27. using namespace NXOpen;
    , A# B* y6 U# `, j! e2 m
  28. using namespace NXOpen::Annotations;
    0 ?* }. ?- {" O5 T7 B" T
  29. using namespace std;
    % h% i3 a! f7 T- n, W

  30. / u, J" M+ T2 {# w( N
  31. class Gtac& a- t. t& {3 }3 Q" ^* S/ }; h0 Y. b
  32. {
    . W& g( I- k" P9 |2 A' y  h, }
  33.     // class members+ U5 H8 z) T) a: |' `+ `
  34. public:/ {0 J0 M( R4 ?3 R
  35.     static Session *theSession;
    , U+ G8 @0 q6 R' K" Z: E
  36.     static UI *theUI;
    ; U+ V8 t: x! D" K

  37. ! |" t/ W/ |) d- ^1 V
  38.     Gtac();( v  S# K$ C# w/ z; j- X1 x
  39.     ~Gtac();+ d" I8 `4 Z1 ]! y  k$ |% m

  40. 5 }" S2 I' t7 f& X
  41.     void do_it();+ W3 G$ k: j+ h0 h- q. x0 g
  42. , N4 A5 Y- s8 F$ {" [) U
  43. private:
    ) u& [! k/ k' @
  44.     Part *workPart, *displayPart;' \9 g3 u. n! q8 E# C' I, V! l4 ]" R
  45.     Selection *sm;
      G! L0 f1 v) d4 F
  46.     NXMessageBox *mb;. c8 `" o! l8 k, K+ B1 C: ~
  47.     ListingWindow *lw;
    . U( [6 p6 ^8 r, f) C+ a
  48. " W- t$ k& V% t+ \4 O5 s
  49.     Face* select_a_face();  F5 `7 Y5 A. P

  50. + ]* k( Y6 X- j- K/ A) P5 b
  51. };
    4 K: K5 @$ j, v) P' p0 s. X; H
  52. , r' D2 x# u6 T6 `+ x$ d
  53. //------------------------------------------------------------------------------
    7 B; G3 ^5 a  w  w) K
  54. // Initialize static variables# ~. r' b: Z6 h" j( n' S& ]% o
  55. //------------------------------------------------------------------------------  ?, \0 I) m0 @; s' B& f- L
  56. Session *(Gtac::theSession) = NULL;7 t/ ~. @/ V8 F) T) u
  57. UI *(Gtac::theUI) = NULL;4 F1 f1 n: l9 ^% K

  58. 4 E' }+ ]+ S+ |/ B; I
  59. //------------------------------------------------------------------------------( ^/ J; w+ [4 _" U4 n& X2 _
  60. // Declaration of global variables: d8 x6 K7 _7 v: m( J! m' D
  61. //------------------------------------------------------------------------------/ y# ?; ^7 j. [% M0 [7 I' ?( h
  62. Gtac *theGtac;! x" i8 J, q6 C! c, @+ {* b9 W$ s- M

  63. ; t1 k3 V6 F4 g! q: T" Z3 R
  64. //------------------------------------------------------------------------------) I- n, E# c3 l- `. ^  c
  65. // Constructor
    2 b- n+ A* @: m3 C* _
  66. //------------------------------------------------------------------------------* G& O& ?8 b. I( T
  67. Gtac::Gtac()
    " f5 p8 e& |- U
  68. {
    & Q: D8 @; H. I  S- b& H7 q  ~
  69.     // Initialize the NX Open C++ API environment8 S8 ]0 L+ H$ J- T- _/ N
  70.     Gtac::theSession = NXOpen::Session::GetSession();1 n' a' x$ P: t# X
  71.     Gtac::theUI = UI::GetUI();0 e4 ~( t4 \5 Q* h

  72. % C9 b" Z, F, J5 L+ k
  73.     sm = theUI->SelectionManager();9 B4 {9 T: T" T- u
  74.     mb = theUI->NXMessageBox();
      n  s: C6 _) }* k0 V
  75.     lw = theSession->ListingWindow();
    ( V4 v! A! H% t/ D8 e8 n) r8 L) z$ p

  76. . H# X! P+ G! }9 S. p) H
  77.     workPart = 0;/ S+ m0 n5 B1 n, g; l* M3 l% M7 j
  78.     displayPart = 0;$ ~& m. U, F7 X" L5 l
  79. }
    ' t) Z- _6 d( B8 k
  80. 6 Y) b7 D7 K* n2 G
  81. //------------------------------------------------------------------------------7 z3 }3 S6 d+ g2 ]. T+ p. e' T
  82. // Destructor2 i. s7 ^' V; L5 n! D4 K, O9 c* S
  83. //------------------------------------------------------------------------------2 K, R- X) h2 d
  84. Gtac::~Gtac()5 `7 b5 k$ H2 L9 ?0 }- b# l
  85. {
    * X' k! x  D3 j& K% f  u6 R
  86. }
    5 S3 q+ G7 |1 D
  87. ) l' F' j" K2 T
  88. //------------------------------------------------------------------------------. |) ^5 Q# `0 p
  89. // Selection! }3 s3 i& T! v7 R& Q4 }
  90. //------------------------------------------------------------------------------$ G  ^# q6 Q# m4 C; _
  91. Face* Gtac::select_a_face()+ C9 H& C  m) w8 i7 ?7 [, L
  92. {- p2 P* \4 {$ W& Z
  93.     // ask user to select a face
    7 X: u( y+ p8 ]7 H
  94.     UI *ui = UI::GetUI();
    5 ?) Z% ~  v& |; M+ m9 M/ G+ F
  95.     Selection *sm = ui->SelectionManager();- Z5 z& d6 _; ?: V. L7 I& H
  96.     NXMessageBox *mb = ui->NXMessageBox(); // as of NX51 \0 {0 x; L  I# Q
  97. ' f% U7 v1 d7 U2 g* a
  98.     NXString message("Select Face:");
    ! M2 {0 B. e: q' G$ Z" z% E
  99.     NXString title("Select Face");
    , D; z5 ~4 }4 g: l7 E
  100.     Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;
    ! M3 V7 K9 p0 o' X4 L
  101.     Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;+ R6 _: f) U0 W! F
  102.     bool include_features = 0;
    - D5 c3 X. U0 f0 a; C
  103.     bool keep_highlighted = 0;
    & D) I+ r, d% }6 A8 \

  104. . J6 \  V, X' t% i: R( z- c+ Y
  105.     // Define the mask triple(s)5 \: G% H, E. C) X% i) o
  106.     std::vector<Selection::MaskTriple> mask(1);4 b% p9 A9 X! _6 M' v. u, _- c
  107.     mask[0] = Selection::MaskTriple( UF_solid_type, 0, UF_UI_SEL_FEATURE_ANY_FACE  );
    2 ^. t: M. L; N  g: X) G: u
  108.     Point3d cursor;
    ( L1 v% l* j+ ]8 k0 \' H. G
  109.     NXObject *object;
    ( ]( u, Y  S4 n. |. j5 q) C
  110. " p. m8 j- h# A, @
  111.     // Select objects using filter defined by mask triples# S# n& L$ |  g+ u) E+ W
  112.     Selection::Response res = sm->SelectObject(
    8 M+ Y* l# K. M4 u2 ~# z( V: o: T
  113.         message, title, scope, action, include_features,2 X( ], ]: S% k5 x0 R
  114.             keep_highlighted, mask, &object, &cursor );
    2 z7 F# c% h* [3 [& P

  115. 9 s1 q- r. ], f/ K- \& T
  116.     if( res == Selection::ResponseObjectSelected )
    6 n. S& r* y; Y
  117.     {5 j& ]0 i- @. s  q1 _& t
  118.         Face *aFace;- `, o% T. w4 k) e; M" |/ ]
  119.         aFace = (Face *)(object);
    3 ]# e" I$ `9 L' d; j7 P
  120.         return aFace;
    ; B: p* @2 Q% ?, g. D1 @& X* `
  121.     }
    , H+ G# Z- Q9 _5 c. v* P

  122. # P; a+ s; L) [+ \1 d: w
  123.     return 0;
    % G. C% F+ c8 M7 _$ \0 A& y0 M  a$ `
  124. }
    % m8 s8 a" a" G% r0 K

  125. 9 p4 ~/ x: r- T
  126. //------------------------------------------------------------------------------4 i( \4 J9 Q9 [4 `/ B
  127. // start with our job...
    3 `+ n, s$ d- R
  128. //------------------------------------------------------------------------------" n$ Y0 p2 {$ H- h! O, l5 h
  129. void Gtac::do_it()$ w0 Y& S6 G' R9 X
  130. {
    ( A5 W; K1 |* J" D+ W& M" S
  131.     workPart = theSession->Parts()->Work();
    7 q5 S: K; j4 F. n4 t
  132.     Part *displayPart = theSession->Parts()->Display();
    / b: _, y9 a( J5 i. ?% [
  133.     stringstream out;" c: {. P/ c+ N0 ?) O0 w8 K; P
  134. 6 V, Y8 p/ E! R9 G8 r' D3 k/ V
  135.     Face *theFace = 0;6 l* X% Z, \% ^
  136.     std::list<Face*> myfaces;7 ^  F5 X" e9 L  \4 R
  137.    
    5 q' c7 B6 y: Y* F
  138.     while( (theFace=select_a_face()) != 0 )/ ?/ e* j- S+ D' t3 [! q' L
  139.     {; h5 [4 F" Y0 W' {# S: t$ X
  140.         if(! lw->IsOpen() ) lw->Open();. Z3 {3 O  x1 X) c5 F

  141. 1 w9 V; p0 D5 s; F" O7 ]( G! s
  142.         out << "Selected Object: " << theFace->Tag() << endl;
    ) ]" ]/ U) X' C" ]/ x8 ?
  143.         lw->WriteLine(out.str().c_str());* s0 y3 K1 }1 U7 a  G8 R7 ^- f+ Y8 p

  144. 4 H3 S- g0 N, W* f6 m( a: J$ ]
  145.         std::vector<Edge*> edges = theFace->GetEdges();
    % p/ z% v6 o- O/ M
  146.         out.str(""); out.clear();
    ) U5 p! t1 V; W( B
  147.         out << " Number of edges: " << edges.size() << endl;
    , X! H$ W  K& P. a+ l/ i3 W" j2 E
  148.         lw->WriteLine(out.str().c_str());
    8 k+ s& [  p2 e/ A1 V$ L- f% f

  149. ( u0 V- N5 Q: t, o! d" f
  150.         for( int ii = 0; ii < edges.size(); ii++)
    5 }/ T( i% ~  b) ~
  151.         {
    - }. w6 Z! l& D5 a
  152.             out.str(""); out.clear();8 j8 l: Y) v% }  H6 q1 E0 Q$ {) d
  153.             out << " Edge: " << edges[ii]->Tag() << endl;
    $ f7 C1 K' H' Z" i( T
  154.             lw->WriteLine(out.str().c_str());/ B# C% x1 t7 [. t4 F$ n" A

  155. 7 `' |4 l8 }% l" i8 ~8 y
  156.             std::vector< NXOpen::Face * > adj_faces = edges[ii]->GetFaces();7 ?# u7 r  z/ j/ Z& R' Y2 I- G- x
  157.             out.str(""); out.clear();. L+ W. y, B8 |$ y
  158.             out << " Number of adjacent faces: " << adj_faces.size() << endl;2 z! n/ A0 l% h3 }) z/ o
  159.             lw->WriteLine(out.str().c_str());0 C; I! g/ {' z2 X7 K

  160. : T/ v7 p, u# F/ k1 d! O! z
  161.             for( int jj = 0; jj < adj_faces.size(); jj++); p& z' t9 A0 ~
  162.             {
    + y% H, ]; |2 L
  163.                 out.str(""); out.clear();/ h$ j9 V1 U; c1 u) i4 w% d4 c. M; _
  164.                 out << " Adjacent face: " << adj_faces[jj]->Tag() << endl;
    3 l  t; \9 S( z9 n
  165.                 lw->WriteLine(out.str().c_str());
      ?$ z6 y- J. L" B4 {5 \
  166. 1 Y1 d$ |3 [4 a" _' D, X
  167.                 myfaces.push_back(adj_faces[jj]);+ S3 D' O3 v: Y: s: N

  168. 6 Y" l3 W8 f" ~. n/ |$ V& B! H
  169.             } // jj
    / m& |1 J: ]6 {6 f( {
  170. $ x% ~) U5 j  i' ~; D6 b, g
  171.         } // ii  e6 J4 \" ^% t* z3 [9 e/ K

  172. / a0 c1 L% K0 f! ], {/ e
  173.         myfaces.unique();$ N% E! I  z9 L1 B( i* \0 p
  174.         for (list<Face*>::iterator it=myfaces.begin(); it!=myfaces.end(); ++it)
    - x' }! n# E( E  S  l; @
  175.         {
    4 S. b; n( C; C8 }
  176.             (*it)->Highlight();
    # ^6 i  m4 j  Z% A! E- |0 s$ s1 _
  177.         }0 K8 T# e' w5 X" d$ X, M$ d  f* K8 J
  178.         Gtac::theUI->NXMessageBox()->Show("Adjacent Faces", NXOpen::NXMessageBox::DialogTypeInformation, "Confirm");
      Y* m; A* v  ^; L: Z
  179.         for (list<Face*>::iterator it=myfaces.begin(); it!=myfaces.end(); ++it)6 ?8 j* h9 q1 b% a' [" Z  P! V
  180.         {3 T+ L2 ]# t2 f' g( f# l
  181.             (*it)->Unhighlight();; Z/ H  R' F+ W- l# G+ d
  182.         }5 |: @8 P: I8 G5 I" ^! c
  183.         myfaces.clear();# E# |! G1 P' |, v, Y* j7 e

  184. 2 q, h! j! b5 l7 }) a* B

  185. 7 Z8 @; ^9 l( }  O  `1 B& I
  186.     } // while
    0 R) M; h# \* B0 ^
  187. }
    % m1 |; ]" U- }

  188. & i0 d3 Y7 a6 M3 _( M
  189. //------------------------------------------------------------------------------
    9 v, y" q  J! n2 P6 O2 L
  190. // Entry point for our unmanaged internal C++ program, n9 h4 i) `2 m# |6 _/ H% m/ T! n$ i
  191. //------------------------------------------------------------------------------4 M4 |3 M1 J* Y% E3 N8 b
  192. extern DllExport void ufusr( char *parm, int *returnCode, int rlen )
    6 o% }; H8 j" @0 ^7 `5 |
  193. {; u1 U( Z  }# r1 U5 w' n) [% ?
  194.     try
    9 ^" R1 a) H4 ?; l6 M' V
  195.     {( M. ^' p1 ^1 X; S. X1 m  h9 \  q+ J6 `' p
  196.         theGtac = new Gtac();
    - O; @' I; h1 d( S
  197.         theGtac->do_it();6 ]$ S* F- c/ |6 ]7 E0 B
  198.         delete theGtac;1 R( [: t& O+ B
  199.     }
    : m6 Q7 x6 a. c$ e$ A) C
  200.     catch (const NXOpen::NXException& ex)" }" S' e1 S" y; y7 \% ]# K
  201.     {
    / H% `9 Q6 P, L8 s; u" m
  202.         // ---- Enter your exception handling code here -----* n4 y$ T+ B3 i/ G$ Q# b$ a9 h2 A
  203.         Gtac::theUI->NXMessageBox()->Show("CaUGht Error", NXOpen::NXMessageBox::DialogTypeError, ex.Message());6 }2 r$ u7 E9 w
  204.     }
    1 G( A! w, q/ z8 b4 [' p8 l! s$ k0 y
  205. }
    - F$ \& i# W% a5 W; ^& G

  206. & x! G* @9 |6 n& U
  207. 2 ]. M* b6 |: Q" _8 y. e- G9 f  A
  208. //------------------------------------------------------------------------------3 M  l/ t. c. w& A; {8 }
  209. // Unload Handler
    - J! h  Z% |! J2 a1 C+ n
  210. //------------------------------------------------------------------------------* s6 r: s0 \9 N) }9 V! \% O( g$ q
  211. extern "C" DllExport int ufusr_ask_unload()
    . s3 z# h  }' o4 S& O" Z0 w
  212. {
    2 ]; u+ W. l* [
  213. return (int)NXOpen::Session::LibraryUnloadOptionImmediately;
    $ Q$ H, N8 B) r
  214. }; Q! i* ]  W) x' u
  215. 0 ]) r# ^6 T* b6 X; p% |2 e- J& d2 n
复制代码
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了