PLM之家PLMHome-工业软件践行者

[二次开发源码] NX二次开发源码分享:NX10可以直接对资源条进行二次开发

  [复制链接]

2016-3-8 12:00:27 22495 44

admin 发表于 2015-3-27 11:17:17 |阅读模式

admin 楼主

2015-3-27 11:17:17

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

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

x
# _7 Z# y, j2 ?( c9 s. O

7 j; z6 F. G6 m7 I* E* J" C' |3 a' B) {' p6 ^: Z+ {
" d6 g# C, Z% Y# P( ^
NX二次开发源码分享:NX10可以直接对资源条进行二次开发
9 a4 [7 X* n0 v, t8 U% y这是官方的一个例子,新建了一个资源条,使用MFC的Tree创建了树列表,并加载了所有组件的属性到节点上。
* C! X- k! C  T7 q- _! ~* M
% T, f4 Z% n) V8 k" I2 G// Mandatory UF Includes
1 v) {1 \1 \% z/ G3 u$ `#include <uf.h>" ^8 |7 d: e! B' f& z
9 u, m- f5 p& x; A, X
// NXOpen Includes. n$ K+ n+ y0 W# m, [
#include <NXOpen/Assemblies_Component.hxx>1 x6 [6 ^; f( s; p
#include <NXOpen/Assemblies_ComponentAssembly.hxx>
) ^' x1 i( b1 b( y# E#include <NXOpen/ListingWindow.hxx>
: n: c/ ]* A$ m$ Z4 H* d5 u5 P#include <NXOpen/LogFile.hxx>
: B, y( |8 Y6 I  S#include <NXOpen/NXMessageBox.hxx>
3 n( E" A5 W2 x$ T5 F#include <NXOpen/NXException.hxx>
; z( j  Q7 l1 J#include <NXOpen/NXObject.hxx>/ ~, I" I" x% _! W
#include <NXOpen/Part.hxx>
/ y0 A5 f3 c) W9 c: j#include <NXOpen/ParTCollection.hxx>+ A. [/ m; G5 B& i8 F1 q* Z
#include <NXOpen/ResourceBarManager.hxx>
% l$ S# z$ X( r! |4 @+ e, W' g4 G#include <NXOpen/Session.hxx>
0 i6 x9 U4 ~) B. E#include <NXOpen/UI.hxx>
+ n5 V" }& S1 Z  m) kusing namespace NXOpen;
/ e/ a  c( q- M: _4 Wusing namespace NXOpen::Assemblies;& x1 n) ^% V7 {0 W
# ?1 Q: @, l% _$ `4 U5 T% ]* v
// Std C++ Includes" w. H& X$ v7 B2 [6 Z* k
#include <iostream>' d) Z; c8 ~4 P
#include <sstream>0 N9 a1 C' E! C. d( `$ p" C
#include <map>
5 j& L' q0 w/ Xusing std::exception;
6 ~+ W5 B& N% J' Y# P2 T' e0 |using std::endl;7 b7 i6 }1 H% F4 ], Q5 A# w, T0 `
using std::cout;
) [& d" [# n0 ]/ _+ v% vusing std::cerr;4 N) ~9 C+ r7 s7 d

6 H$ ~+ @: J: W  ~4 ~) a$ ]// MFC Includes* A( v6 ]; }: J" ^+ H
#define _WIN32_WINNT 0x06010000
  G% P) T( L( p0 s#include <afxwin.h>
( D. e( G/ U. u/ |#include <afxcmn.h>" h; r* e7 C$ ~
2 Z0 h. T7 f" t1 K7 N4 V
#define IDC_TREE1   1002
& @6 G) Y. m4 s' X8 q$ I
0 {  P6 b  P# Y8 Y$ \" P* w; X8 B3 ~//------------------------------------------------------------------------------2 d. c* P; [$ c
// NXOpen C++ class
9 }& M  P) O, L' G//------------------------------------------------------------------------------  B$ k1 a: ^3 x* k
class MyClass/ d) u. t$ ?) L% }' F  }
{8 m- G' z; f( F& o: N* v
// class members# ?* G, P4 Q4 C/ q, K
public:
* r. |& F6 [' I2 Z8 L    static Session *theSession;
( k% H  b) L; l. Y( R# k9 s0 J    static UI *theUI;
( u& v# S% v" O/ y( l( [; E    static int m_tab;" x. c/ q5 ~# X- N4 P
    static int m_cbID[2];
, B/ [3 H/ J2 E* g9 O7 A
2 U& g, g$ o- P# |. M    MyClass();
/ o4 G1 S( j& m0 y    ~MyClass();" |9 ^* F% A* z+ D! T9 @' L% y) Q
! S# f$ |& [  ]7 D& S
    void print(const NXString &);
0 p4 l) C$ `2 G* Y! `6 N" c    void log(const NXString &);/ `2 x0 O# j; S; q( S) r8 |7 F
    void getAttributes(Component *, HTREEITEM);
4 L0 `' H3 V1 m8 O    void getComponents(Component *, HTREEITEM);
1 w( r& ^2 y9 p/ }    int ActivationHandler1(int tab_id);
! t8 L. l0 b- r; ?    void Clear();
% |) m! N. Z* `- T  T7 U/ W    void Populate(BasePart*);" ?7 N6 @3 w4 M3 F% S5 Q+ y
    void cbPartOpened(BasePart*);
& t$ B( M  A% W, D' g    void cbPartClosed(BasePart*);
8 ~, ]: b7 Q& @* g: O
6 u* C. `, X. h5 u( sprivate:+ c; J& z3 V5 k) k: ^" Q# F
    Part *workPart, *displayPart;/ b/ f! j, }1 i* \* m. y
    NXMessageBox *mb;
; p" O8 E% t) {9 t& P4 M  z    ListingWindow *listW;3 d( b9 c0 \: O) E
    LogFile *logF;' X+ W% l7 i  s6 V$ l( l; R
    CTreeCtrl *m_tree; 9 \$ {4 o& e1 C( k  V
    CImageList m_Images;/ t: x: M1 B% }; V* s
};
9 m' ?9 @0 Q8 f1 J6 H" k
, d0 M' S7 @8 l# ^. s//------------------------------------------------------------------------------
) V/ Y+ |, M: G6 S// Initialize static variables
6 y6 Q: F- r% k1 V7 |! d* `//------------------------------------------------------------------------------$ \! H6 N5 q! p' K. t- h7 X# s
Session *(MyClass::theSession) = nullptr;
, F# U& g, K9 b  c3 jUI *(MyClass::theUI) = nullptr;) p& }: W) R' E
int MyClass::m_tab = 0;6 y1 C; X2 d9 N9 i
int MyClass::m_cbID[2] = {0,0};' e3 |7 r( U9 w
7 X9 F: B# R. W' c9 T- _# S9 m
MyClass *theApp = nullptr;
' E2 R5 Z2 C4 d. ^" |* R
( k" c8 m% k% [" L7 _& O//------------------------------------------------------------------------------
0 {! v# W# w/ p// Constructor
2 ?; O/ Q# {0 @+ a' a//------------------------------------------------------------------------------
' m! ]& O8 a# q, NMyClass::MyClass()
: T% d3 c# @; l+ Z, H5 h{! W( f. x& x* O& E8 }! `& R
    logF->WriteLine("GTAC: MyClass Constructor");- B6 X0 {( k# y* B  }
    theSession = NXOpen::Session::GetSession();
$ f, l3 {& `" u) c    theUI = UI::GetUI();% D4 u' l7 z$ d/ u! o
    mb = theUI->NXMessageBox();6 o" ]- ?( G3 H8 ]6 m5 `8 r0 Z
    listW = theSession->ListingWindow();( _4 j( A9 ?1 d
    logF = theSession->LogFile();$ ?3 U; C6 L6 O- u

6 Y; [/ ]  l+ \# [$ g( W$ O    workPart = theSession->;Parts()->Work();
! ~& @2 f. u5 e! W$ c    displayPart = theSession->;Parts()->Display();; S0 f1 l2 ?! n  h7 ]# E% r- ^

5 _$ Q' e4 O- F    m_tree = new CTreeCtrl();3 G, ]  X. c( q3 [, q- {
* d, |" |7 I7 O8 @, ^1 I
    BOOL bSuccess = m_Images.Create(16, 16, ILC_COLOR32, 0, 2);
3 Y+ X+ v' E* ?6 s/ d7 Z( `  O    int index = m_Images.Add( AfxGetApp()->LoadStandardIcon(IDI_WINLOGO) );
6 x% s5 a: D+ D6 H' E. C, ^; v    index = m_Images.Add( AfxGetApp()->LoadStandardIcon(IDI_INFORMATION) );: h9 [6 e3 t8 V: V

+ Z) `$ v6 z9 ?* g1 O, N5 O    m_tab = theUI->ResourceBarManager()->ResourceBarManager::Create("Assembly Attributes", "ant_component_mode");' P4 I+ N7 _- ^2 e: @% ?/ s  J8 a
    theUI->ResourceBarManager()->ResourceBarManager::RegisterActivationCallback(m_tab,
' p* n" _: b  U  k        make_callback(this, &MyClass::ActivationHandler1));$ R$ ^7 [2 R6 q& q
    theUI->ResourceBarManager()->ResourceBarManager::ActivateTab(m_tab);/ M. V! p/ i6 Y  o; a0 o' j

, T9 N, U/ o/ e0 ]* d6 h) U9 Q8 E9 e    m_cbID[0] = theSession->;Parts()->AddPartOpenedHandler(make_callback(this, &MyClass::cbPartOpened));
* E: g1 L" V9 r    m_cbID[1] = theSession->;Parts()->AddPartClosedHandler(make_callback(this, &MyClass::cbPartClosed));& O) T* R: R0 K
}% a/ @$ n7 F" v+ H5 [5 J
$ c( i4 `' K9 I8 q
//------------------------------------------------------------------------------
. j# S7 M( Y. l% T) D4 V5 m// Destructor: |  x  S9 T& P8 B
//------------------------------------------------------------------------------
# {$ d' D$ W4 n% MMyClass::~MyClass()$ u, o; y7 o; W6 ^5 p
{/ t  _8 d$ c* A* D( U: ?0 s
    logF->WriteLine("GTAC: MyClass Destructor");. H) G# Z5 R3 {3 V1 H4 U
    if( m_tree->GetSafeHwnd() )
4 l0 G+ T4 U3 n# H( m" E! ~5 N    {; X3 }) e# e! V
        BOOL bSuccess = m_tree->DestroyWindow();- x" F2 `" T0 c2 _  @, t( V
    }
4 L! I5 o; n. S( h6 M0 C. t) d/ W0 X+ x/ }
    theUI->ResourceBarManager()->Destroy(theApp->m_tab);& u7 X1 I; w  Q. F' m, R
    theSession->;Parts()->RemovePartOpenedHandler(m_cbID[0]);
. G$ P' Q4 q4 g3 ?- V4 j    theSession->;Parts()->RemovePartClosedHandler(m_cbID[1]);4 H- }  U( {/ X( j1 \' I

' s  t7 {& J$ R/ U}: F$ i( r/ X# T+ o/ V; t

, i! \5 ~0 |( X; L4 ?/ b2 F' [: A//------------------------------------------------------------------------------
7 I0 O* N  y6 B5 A5 h8 b// Print string to listing window and/or syslog: m3 j  k/ O( g- a
//------------------------------------------------------------------------------
4 p6 v6 n4 U$ X4 q9 k- Kvoid MyClass::print(const NXString &msg)
' c6 @# |- a" y$ i/ d; q{' s% S8 G3 U7 a$ l! M* @3 {1 W
    if(! listW->IsOpen() ) listW->Open();, B/ a5 Q  b$ S% X& y
    listW->WriteLine(msg);+ [- K4 f" l# Q! c9 k
}
( _3 w) d* w+ fvoid MyClass::log(const NXString &msg)/ c6 B: N' A5 t9 R! F2 G: z( r
{
3 h: K- E7 o- z    logF->WriteLine(msg);7 F6 Y$ m! ]* r! h. g
}3 W( z# N5 R4 r! w6 ]' S: ?' c+ `

$ J, y3 p/ S! U% y( R// Callback triggered when opening resource bar tab
0 y: ]3 }1 ]$ [% dint MyClass::ActivationHandler1(int tab_id)4 L& g8 ]2 e! F
{) b4 Y! `! f% H$ q0 B1 E, H
    // Get the WindowHandle object
- a3 O6 i7 d, T' R. B    WindowHandle *window_handle = MyClass::theUI->ResourceBarManager()->GetWindowHandle(tab_id);6 ~1 C; u0 n2 [$ R) E3 V. l- f4 A* L
    // Get the real handle
1 ^, |4 }0 Y1 R0 T( ~: \7 A6 ^) e    HWND parent_handle = (HWND)window_handle->GetHandle();
4 Y3 j& u! A: \    // Get the CWnd object from HWND, FromHandlePermanent will return 0!& u( V. d& q/ P
    CWnd *wParent1 = CWnd::FromHandle(parent_handle);4 j6 p( {7 v0 S) E6 j; _& Z, P
    ASSERT(wParent1);! p  @% H* m4 X& R' n( z( i
# T. S5 K, W& [' v8 _1 z& B- M. F
    // Switch module state to avoid Assertion from afxCurrentInstanceHandle
' G. N! D: n& J# A+ {6 |% g. Y; n7 D    AFX_MANAGE_STATE(AfxGetStaticModuleState());2 B+ I3 ]: v# [! P; y8 O1 |
) C" R$ H3 b5 G; W
    BOOL bSuccess = m_tree->Create(WS_CHILD|WS_VISIBLE|WS_BORDER|TVS_HASBUTTONS|TVS_HASLINES|TVS_LINESATROOT|TVS_TRACKSELECT,
. D9 R0 T6 A! T2 p7 Q        CRect(10,50,510,1810), wParent1, IDC_TREE1);& F$ |3 i: u. K. y( Z3 ^
    m_tree->SetImageList(&m_Images, TVSIL_NORMAL);5 d2 y4 `/ V2 B- \" n$ }

( M# s6 ]! b  r4 B# e) q* B    Populate(displayPart);
$ t$ u  s' i4 k  l( u2 y9 v  t  k: E/ A) b4 U% l
    return 0;
3 t0 E; E3 Y' K: b" G" H7 Y}
2 I$ o: [0 {! T- I6 g9 D8 A; E
//------------------------------------------------------------------------------1 Z8 V1 |3 N; u/ K
// getAttributes% l# e9 L: V) t7 t
//------------------------------------------------------------------------------
; B9 c7 l$ z6 l
游客,如果您要查看本帖隐藏内容请回复

, H! i+ R+ I8 F/ ^5 H1 M+ ^/ F
  K% h' j0 {. |  }9 i
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 doTeam.tech
回复

使用道具 举报

全部回复44

airleng 发表于 2015-3-28 08:52:40

airleng 沙发

2015-3-28 08:52:40

二次开发完全不会啊
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复 支持 反对

使用道具 举报

ll_109 发表于 2015-3-30 11:24:29

ll_109 板凳

2015-3-30 11:24:29

我想看看,进来
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复 支持 反对

使用道具 举报

humanster 发表于 2015-5-24 12:02:04

humanster 5#

2015-5-24 12:02:04

看看,这个好像很牛的样子!
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复 支持 反对

使用道具 举报

smthan 发表于 2015-7-26 01:33:35

smthan 6#

2015-7-26 01:33:35

谢谢高手的分享哈
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复 支持 反对

使用道具 举报

503627752 发表于 2015-8-12 14:24:53

503627752 7#

2015-8-12 14:24:53

学习学习学习
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复 支持 反对

使用道具 举报

ke111026 发表于 2015-9-15 21:49:29

ke111026 8#

2015-9-15 21:49:29

ddddddddddddddddddd
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复 支持 反对

使用道具 举报

283925513 发表于 2016-3-8 12:00:27

283925513 10#

2016-3-8 12:00:27

卡看看 阿发撒旦法撒旦法
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了