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

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

admin 楼主

2013-11-6 18:54:58

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

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

x
通过这个代码,可以获取选择面的相邻面的信息( ?% g- T* l) n) q
NX open C++中使用了 选择对象 selectobject 函数,通过面获取边数据,通过边获取面,从而得到信息!
9 o7 T: W4 o. N4 i
; ?, ~( o1 Q8 u9 A. E
  1. #include <uf.h>: y3 N# C3 Z% |$ O
  2. #include <uf_ui.h>
    * J' @: ^' Q7 @- R. X$ G& I* p
  3. #include <uf_object_types.h>
    9 }# u9 e% I. f+ ^! ~/ q: o5 i

  4. - q3 N: ^9 k9 ?8 C' x
  5. #include <NXOpen/Edge.hxx>- _* }. R" _8 Z/ D. t! M
  6. #include <NXOpen/Face.hxx>
    ( @6 u$ H1 F1 }5 F4 N
  7. 7 @& H. o1 T5 W- v3 A' }8 J) h
  8. #include <NXOpen/ListingWindow.hxx>; s! f1 ?  n1 K' I1 C# o% a$ n( H
  9. #include <NXOpen/NXException.hxx>' N5 Y" M  N! Q# p
  10. #include <NXOpen/NXMessageBox.hxx>
    7 [! i  i# m- I% Y
  11. #include <NXOpen/NXObject.hxx># |( b: x* U$ w0 \4 R# {
  12. #include <NXOpen/Part.hxx>2 a( U# X+ J* T
  13. #include <NXOpen/ParTCollection.hxx>/ }+ h( l7 k4 `) C3 y, I6 I
  14. #include <NXOpen/SelectDisplayableObject.hxx>
    $ ~7 a8 T, K- D) \  w
  15. #include <NXOpen/SelectDisplayableObjectList.hxx>% o/ x, n: q+ V4 t+ K5 G
  16. #include <NXOpen/SelectObject.hxx>( d" H7 [$ @6 Q  d6 ~% q' I
  17. #include <NXOpen/SelectObjectList.hxx>3 x8 |6 L2 S3 `# j! E
  18. #include <NXOpen/Selection.hxx>
    3 K8 F) F/ I% f  }; a
  19. #include <NXOpen/Session.hxx>
    . S6 f0 M1 O% k# B6 [! s4 b
  20. #include <NXOpen/UI.hxx>
    ; u! @$ k/ ], H# I) [, K- M
  21. #include <NXOpen/View.hxx>' j! C& }& z4 s

  22. & M* x0 [$ s4 H5 O5 W6 N
  23. #include <iostream>
    6 |, a+ X% R" Z1 h; }8 Y8 p
  24. #include <sstream>6 c9 e0 @" a. B3 q
  25. #include <list>
    5 e4 G$ [1 Y* A: ~

  26. + e  q0 x2 u( l. D+ l3 @1 m+ w
  27. using namespace NXOpen;! Q8 ]9 L. g5 C! F/ Z( n
  28. using namespace NXOpen::Annotations;
    7 X$ Q( L4 B7 O- h$ o4 {
  29. using namespace std;5 Y) p  n. C, J  D& H& t
  30. , b* Q# T( Z5 z& B
  31. class Gtac7 b5 c+ M) V$ b9 o- ?4 o+ w' K- \; G
  32. {1 @. _) ], s6 t3 z; L* k
  33.     // class members  |5 q3 G' G. Z
  34. public:7 u. p- `" l& a/ J8 a
  35.     static Session *theSession;
    ' o' |" g/ d, K8 a* Q( O
  36.     static UI *theUI;% n- o  s$ v) K0 H( X8 E9 q% ?; ^8 v

  37. 2 |8 G4 \- f% x; q; d! a
  38.     Gtac();
    * S6 E, m  w8 I4 n6 k
  39.     ~Gtac();
    $ ~9 ]2 J$ i6 E
  40. 1 z7 z- I1 f4 \8 Q! a
  41.     void do_it();' f' R% i2 I( Z* }$ @- n
  42.   r7 J$ }( @- u6 {
  43. private:
    1 f7 Y" f* s5 u3 f3 j* r
  44.     Part *workPart, *displayPart;
    6 F. }% b7 v+ m! t9 a# m2 g( `
  45.     Selection *sm;- X/ `. M. X2 J
  46.     NXMessageBox *mb;
    ( |! I9 ~- H. r, n  }* z1 W
  47.     ListingWindow *lw;
    : Q/ M6 t# R3 j9 Q( c
  48. - T$ K# H% g8 b' B+ P+ i2 @7 H' D
  49.     Face* select_a_face();
    1 Q4 U/ u) @4 j

  50. 8 Y. W! M4 S$ y! [$ d  w8 y# g
  51. };4 ?5 A3 S8 K4 R* ]- E0 e6 ]

  52. 9 e* ^0 `, l6 Z0 y+ o! Y6 R0 c
  53. //------------------------------------------------------------------------------- f/ _) N$ I5 F1 @; K! T5 t+ `. |
  54. // Initialize static variables
    2 K1 h1 i! i7 |# a: p- a; W& T
  55. //------------------------------------------------------------------------------7 O' R, z, r' Y+ {5 X! z
  56. Session *(Gtac::theSession) = NULL;
    4 R% ?+ v- r1 C" k8 L' y
  57. UI *(Gtac::theUI) = NULL;
    0 H0 D% t& p. f& M, K
  58. 9 V; L2 t5 p$ P+ y
  59. //------------------------------------------------------------------------------
    2 N3 K/ Y9 ?5 g4 h- y( f
  60. // Declaration of global variables1 M" \# L! P7 d5 \# g
  61. //------------------------------------------------------------------------------* q7 z! ]  h/ @6 ]* N" C4 E/ \/ C
  62. Gtac *theGtac;3 U" n- w  S9 R
  63. " j5 d9 U; @! W. O6 E
  64. //------------------------------------------------------------------------------
    , q# A& E/ M- {+ H8 {) r4 S
  65. // Constructor, t, c% C9 t' w' h  p( ~. M
  66. //------------------------------------------------------------------------------( Z( l9 q5 j9 O' I+ _; o3 X; j! ]
  67. Gtac::Gtac()
    3 I; y# n+ X; h+ ~5 J
  68. {
    2 u& \2 r- Z- _$ y& r
  69.     // Initialize the NX Open C++ API environment- V- }6 s) E' ]/ e' z& h8 c
  70.     Gtac::theSession = NXOpen::Session::GetSession();
    % u5 y, f' G3 F9 [! [+ T
  71.     Gtac::theUI = UI::GetUI();8 ]1 \  U0 y/ S3 e" _" Y

  72. : @- Z0 M# t& s( V$ y* Q
  73.     sm = theUI->SelectionManager();
    2 S2 [. v0 X- q; ^2 y  U; z
  74.     mb = theUI->NXMessageBox();
    0 c4 J/ U2 s+ E, X% y
  75.     lw = theSession->ListingWindow();+ k& {3 f0 }: m+ e& q- T

  76. 2 Y/ k) c1 @/ k7 g0 ^- b( |) x7 L
  77.     workPart = 0;
    ( A" i& ?. C' a3 z
  78.     displayPart = 0;
    8 V9 Q1 ~, s. u2 D5 v
  79. }9 N! z' R' f  J: }3 G- ?8 i, l
  80. 9 I% V9 z) Z& i& t6 X0 _" z
  81. //------------------------------------------------------------------------------
    5 b: k) K$ D) ?$ i  }( z$ u& k* t
  82. // Destructor/ p% {+ X! c, l8 o9 z, s7 G+ b. ~
  83. //------------------------------------------------------------------------------
    2 ]  {, H' i/ w: u9 F6 c9 t
  84. Gtac::~Gtac()
    1 o$ A' t* u1 y7 @1 F# a
  85. {
    " u9 A2 I( N. u- A  b- ?1 @
  86. }
    ! y4 L+ E6 k0 ^: \2 s- U
  87. % V% o( T% u+ ]# @: v* t* p9 ?* y
  88. //------------------------------------------------------------------------------2 {/ c) }8 j( A0 N
  89. // Selection5 g. s; n4 q9 h% ~
  90. //------------------------------------------------------------------------------2 D+ _" }; z. f& F5 C, `
  91. Face* Gtac::select_a_face()
    & C9 @0 n7 o' I1 B
  92. {# f4 g8 ~+ u) x: N/ k# X% x
  93.     // ask user to select a face' }" P. G' a, {* c: l: O& R
  94.     UI *ui = UI::GetUI();) O0 x& ?8 h+ `" \1 j- x
  95.     Selection *sm = ui->SelectionManager();- w: `! s5 q1 K' |7 k9 f9 c
  96.     NXMessageBox *mb = ui->NXMessageBox(); // as of NX5
    0 Y* U- I6 n: |7 ]# k; o

  97. . o9 }& c2 o5 a
  98.     NXString message("Select Face:");- u' i% e/ @# h, e, b
  99.     NXString title("Select Face");" r6 E9 K$ r6 z& h
  100.     Selection::SelectionScope scope = Selection::SelectionScopeUseDefault;8 v  G# U+ K0 Q( C& _
  101.     Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;
    - @- L( P- W5 Q8 _$ k, g
  102.     bool include_features = 0;
    0 o/ [1 I$ q& U$ Q
  103.     bool keep_highlighted = 0;
    : C- b. N- U7 Z* a& h2 m7 d

  104. 9 N% k: J0 F& X$ z6 \- \
  105.     // Define the mask triple(s); a8 N* T- [1 o  h- ~; [
  106.     std::vector<Selection::MaskTriple> mask(1);8 N  ?# |& ?% R' [
  107.     mask[0] = Selection::MaskTriple( UF_solid_type, 0, UF_UI_SEL_FEATURE_ANY_FACE  );& q% x& Z/ G8 s+ Y6 d' ^
  108.     Point3d cursor;
    ) ?7 R2 T2 b: L# H. W* X8 _8 x
  109.     NXObject *object;8 N" `  o  r. L& }% k
  110. * b5 z! ]$ m& ~  D4 s! K' s
  111.     // Select objects using filter defined by mask triples1 F+ k, d  c! J0 Q/ v( g
  112.     Selection::Response res = sm->SelectObject(7 A( }9 ]2 }' F7 ~
  113.         message, title, scope, action, include_features,
    & h. [# `0 c: K, I! W% {9 M" _8 m
  114.             keep_highlighted, mask, &object, &cursor );
    8 W/ \( I5 p+ b0 c/ J8 P

  115. ! P- m. r& T' w. q7 t2 f- J
  116.     if( res == Selection::ResponseObjectSelected )
    0 O+ Y5 _5 K' V5 _
  117.     {, n" @; p. W* M9 {  S
  118.         Face *aFace;6 k  O- N4 m: ]; v- M- s! i( {+ D
  119.         aFace = (Face *)(object);
    % h% A( ^0 h! d4 e' L+ ~
  120.         return aFace;
    7 a1 [( @- H+ P
  121.     }/ J  ]7 H2 h( N5 D7 G, J3 z0 H

  122. ; r3 m& |$ |8 `8 m/ l
  123.     return 0;
    : e- |' e1 x& Z
  124. }+ M  |$ o8 y5 X1 x/ k2 @

  125. 4 }8 `' I+ _( Q
  126. //------------------------------------------------------------------------------4 c6 \; x1 T4 [4 L0 S0 }- l1 ]5 y6 P' N! t0 a
  127. // start with our job...
    % i' [: j$ }6 N- B1 d( |
  128. //------------------------------------------------------------------------------) E( c9 ~7 U. L4 |* P/ M+ |7 o
  129. void Gtac::do_it()
      H: B/ f: ^! _3 i5 n2 f8 Z
  130. {/ {  n; l; j0 {) w4 H. V1 B
  131.     workPart = theSession->Parts()->Work();7 d9 \2 Z' c, B- i9 ~0 c" o$ n
  132.     Part *displayPart = theSession->Parts()->Display();0 K% h; j/ W* R$ T
  133.     stringstream out;, ^# p/ Q) c5 L# A2 f1 N0 j

  134. , m+ v" l) L% d4 V' m! z* v9 K* A
  135.     Face *theFace = 0;
    $ e/ Z+ t: V4 ?2 Z
  136.     std::list<Face*> myfaces;4 d3 ]: ]0 p+ v% `; M% S& e
  137.     5 M" }& q) m9 C- A
  138.     while( (theFace=select_a_face()) != 0 )& n2 U" A' R( h6 s! v5 \/ x
  139.     {! a% ?% G3 u0 l
  140.         if(! lw->IsOpen() ) lw->Open();
    9 z/ |: ?5 `, z$ ^
  141. , r: @# }( w( F1 T' g
  142.         out << "Selected Object: " << theFace->Tag() << endl;0 d: Y& X" i2 X: K$ S
  143.         lw->WriteLine(out.str().c_str());0 y5 J4 l3 F9 ]) u) s( i

  144. ' T# ^( e) z$ r! p0 j! d
  145.         std::vector<Edge*> edges = theFace->GetEdges();- M, p4 k& o+ P9 r
  146.         out.str(""); out.clear();
    ) p* U" ]: t9 @7 c
  147.         out << " Number of edges: " << edges.size() << endl;
      R6 u% D( x3 `! q
  148.         lw->WriteLine(out.str().c_str());' Y* n4 ^9 l* C7 i+ T5 [8 V" |
  149.   B- ]5 s  |. o. O4 u
  150.         for( int ii = 0; ii < edges.size(); ii++)
    9 D. y) `+ M" \- e& v" B3 k! ^% ?4 d" w
  151.         {! J( @: x8 w/ }, k/ D6 V
  152.             out.str(""); out.clear();) o* d6 m$ L* w# w' X
  153.             out << " Edge: " << edges[ii]->Tag() << endl;
    " b7 v% F1 M! o) ~6 F2 Y' U- M
  154.             lw->WriteLine(out.str().c_str());2 h/ ?8 w/ |& }' |9 P) Q7 G

  155. 3 h" U+ u4 a/ M8 {* C% X; S
  156.             std::vector< NXOpen::Face * > adj_faces = edges[ii]->GetFaces();. m* T* C7 a7 X- z
  157.             out.str(""); out.clear();: N% A2 I0 u. C! x1 o
  158.             out << " Number of adjacent faces: " << adj_faces.size() << endl;
    , I7 x; `6 e, `
  159.             lw->WriteLine(out.str().c_str());
    " o" N- M7 g1 L' B! j$ W6 L3 T2 O  _
  160. ; h3 F+ z$ `& h
  161.             for( int jj = 0; jj < adj_faces.size(); jj++)) Q/ x; F0 W) {. D- o3 c+ J
  162.             {
    - U( D2 q0 ~2 z# U: R9 i6 k8 h
  163.                 out.str(""); out.clear();3 f, |0 ]8 \. j% x* \
  164.                 out << " Adjacent face: " << adj_faces[jj]->Tag() << endl;
    : S5 ~3 v" e+ X
  165.                 lw->WriteLine(out.str().c_str());4 P. f, J5 l( Y! G4 F5 w

  166. 6 I# S7 X) p% |5 D8 M
  167.                 myfaces.push_back(adj_faces[jj]);$ `  a" f: `0 L" o: \8 q+ j: q

  168. / V9 V/ E: N  w
  169.             } // jj) d" X8 w4 p% d2 D3 `4 m: C

  170. ( e% z5 v$ A2 }4 W# j) ]# I  S
  171.         } // ii2 n+ `' N( O2 k5 f" K3 _% P
  172. 6 g7 K+ e& }: L3 m7 K3 y7 e: u9 Z
  173.         myfaces.unique();/ s/ h: j9 Y; A
  174.         for (list<Face*>::iterator it=myfaces.begin(); it!=myfaces.end(); ++it)& x" U" J  f# f! u6 e2 p! }6 T' o
  175.         {+ N, {3 O+ F5 E5 v
  176.             (*it)->Highlight();
    + @( |! z9 O7 ]7 e. u. U" Z
  177.         }5 U6 _4 n1 \1 ^
  178.         Gtac::theUI->NXMessageBox()->Show("Adjacent Faces", NXOpen::NXMessageBox::DialogTypeInformation, "Confirm");
    9 O% V' ^3 X( b6 W9 D
  179.         for (list<Face*>::iterator it=myfaces.begin(); it!=myfaces.end(); ++it), E  n  R3 P; S% F' g! z, E
  180.         {
    2 M9 o4 n+ p5 [* u# b
  181.             (*it)->Unhighlight();* x% j2 l, a/ P- \4 O
  182.         }" A, m9 `8 G, ~0 L  v
  183.         myfaces.clear();
    & @% r, P. d, v* ^
  184. . l5 B8 p" a" y% o: _
  185. " Q4 p$ G6 n0 L) c
  186.     } // while
    # R6 l' {2 k# L; z& @
  187. }/ M6 f; k- u$ A% s3 h
  188. ; H& }/ x! k! b
  189. //------------------------------------------------------------------------------- I, B. H  i# A0 }0 g4 X
  190. // Entry point for our unmanaged internal C++ program7 R& N! k; m, K: J& c
  191. //------------------------------------------------------------------------------- o4 a, W- Y5 h
  192. extern DllExport void ufusr( char *parm, int *returnCode, int rlen )
    ; y6 k5 `) {- c+ q* I
  193. {- R) W1 @) `$ ~" l
  194.     try3 v0 g( W: C1 ?( Z
  195.     {- O/ w' J3 o6 z0 I- Z7 @
  196.         theGtac = new Gtac();
      ^  c# `* J' E
  197.         theGtac->do_it();
    3 B) L( Q; v  u  d; ?
  198.         delete theGtac;
    + L: C$ R) h! F+ A; ^1 W9 y
  199.     }: l" f; w  k9 i9 l
  200.     catch (const NXOpen::NXException& ex)
    ! q" h3 ~9 U5 _+ ?
  201.     {
    . Z0 Q' C, \% N) a  k! H/ N
  202.         // ---- Enter your exception handling code here -----% {6 J. d, {$ V0 A. S, g
  203.         Gtac::theUI->NXMessageBox()->Show("CaUGht Error", NXOpen::NXMessageBox::DialogTypeError, ex.Message());
    3 J1 @! Z7 Y3 p9 g) C8 J
  204.     }/ l! p6 E9 v5 C( |0 _+ T+ Y
  205. }3 Z9 m6 d6 Y8 U. G( ?, R0 p3 P

  206. ) l6 ?! W, d7 K9 e* D' H3 A4 W. ~
  207. $ H" T7 b1 K  W6 m
  208. //------------------------------------------------------------------------------; l6 I: i0 r0 x" z+ X8 e
  209. // Unload Handler
    5 H: A3 g" t6 h" p  q, w+ ?# w
  210. //------------------------------------------------------------------------------3 C! g) {2 Q- E& N  M; T
  211. extern "C" DllExport int ufusr_ask_unload()
    9 Y+ @2 p6 K% x
  212. {3 C; w3 D7 v7 F
  213. return (int)NXOpen::Session::LibraryUnloadOptionImmediately;; B* C2 S9 C" F  k( q$ C4 N
  214. }7 ], k; J% S" w+ g6 n1 c- _
  215. * x/ R  Y0 \! m: E) E+ z
复制代码
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了