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

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

  [复制链接]

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

2470

主题

1275

回帖

8万

积分

管理员

PLM之家站长

积分
82162
QQ
发表于 2015-3-27 11:17:17 | 显示全部楼层 |阅读模式

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

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

x

* P$ R- {2 V5 W7 t/ e' ?
0 T# N* p! d: {

4 s' D! x! M6 j! Q, r
- Y8 M! Q2 }% X' m& P% \
NX二次开发源码分享:NX10可以直接对资源条进行二次开发+ P) E  ^- S3 F4 W- f
这是官方的一个例子,新建了一个资源条,使用MFC的Tree创建了树列表,并加载了所有组件的属性到节点上。
6 ~4 `$ J7 f: l. y& N* B
6 ?0 j. r$ V  Z. I0 _. A* {// Mandatory UF Includes' p+ M. N4 T* I* w  c1 C/ {
#include <uf.h>
5 U& B! j; n8 e: A
) C1 t4 d+ D7 e- e3 d$ E. |// NXOpen Includes$ M5 }6 L* O* r+ l7 _
#include <NXOpen/Assemblies_Component.hxx>
0 }/ M! i+ V. R" R. E#include <NXOpen/Assemblies_ComponentAssembly.hxx>
, i* g& o) s8 x, E#include <NXOpen/ListingWindow.hxx>" B* U% }5 G  r5 Z. U
#include <NXOpen/LogFile.hxx>
. _6 A2 Y1 c( A: @' j' [  s#include <NXOpen/NXMessageBox.hxx>: Z7 F+ K- x- E. ^5 c) k) o6 `1 l
#include <NXOpen/NXException.hxx>0 V8 R" \$ R" @5 g9 p
#include <NXOpen/NXObject.hxx>$ a# {7 n5 J% W/ W0 _2 Z# M
#include <NXOpen/Part.hxx>5 X& p1 o/ H6 u, T: V
#include <NXOpen/ParTCollection.hxx>& u% G" I/ C! H* I. z
#include <NXOpen/ResourceBarManager.hxx>
3 A: }, H% f' L#include <NXOpen/Session.hxx>( @* F" e2 |8 n+ W2 \
#include <NXOpen/UI.hxx>
2 m3 M4 T, `& iusing namespace NXOpen;
) W: _; a5 ]* Zusing namespace NXOpen::Assemblies;
# _& M  v/ {9 X) C( U! H1 [6 a9 @( ?( p
// Std C++ Includes
. J3 r9 N& c* n. A#include <iostream>
9 o4 T5 z# @1 z8 n  |#include <sstream>" i0 Y4 ^- U* s, u; i, t1 K) L
#include <map>3 M& h, T+ |, ^# X9 N
using std::exception;
7 S% K2 ?5 ]! C7 `. `3 G! Xusing std::endl;
- E( C2 t7 c3 n2 xusing std::cout;
- v6 M3 R- [8 ?$ g/ D5 [" Wusing std::cerr;) E; ~2 T# @% x+ {2 q5 x
( O& ]6 @9 U3 e4 V' _
// MFC Includes
2 b. z5 N& Z4 n. N3 i#define _WIN32_WINNT 0x06010000
$ [% U1 l7 g! ?& s6 Q1 g4 _#include <afxwin.h>
0 ]6 O( b+ S9 y& t. W#include <afxcmn.h>
$ _: t$ r+ a% r+ ~8 s+ P3 A
2 D" w+ ?* e2 k; e#define IDC_TREE1   1002
! t1 M* ?4 D$ c6 R' F9 v7 s" c# W" l
//------------------------------------------------------------------------------- W# G5 f9 g+ L0 i" E+ |
// NXOpen C++ class
/ ^( `" j' H3 a; u9 M//------------------------------------------------------------------------------
' B6 \" b+ E% P5 {! j* }* Bclass MyClass
& ?1 U% S6 C  |4 g5 S{
% Z9 S" m0 l# g( @// class members
- X' {, O% Z' O9 @- ~public:- j# \& g9 c1 @. L+ F4 g
    static Session *theSession;5 s, v( v+ {7 A: E
    static UI *theUI;
) f2 P$ J' W0 d+ r    static int m_tab;
9 M+ u# D- c& v; n8 P! ^    static int m_cbID[2];
% T; e3 E6 [6 Y( Y; o& |/ V/ K& M) p
    MyClass();  I  j" [8 L+ D& |6 G4 N% U
    ~MyClass();
2 \5 G8 P  i1 z1 \! Q
6 x4 p: D' m' }    void print(const NXString &);
( u7 l3 q: r# o/ M/ J. {9 n    void log(const NXString &);
2 d! L2 x! s1 _' Q    void getAttributes(Component *, HTREEITEM);
/ C& b( q3 C% }    void getComponents(Component *, HTREEITEM);
+ o1 M8 S* J; Q    int ActivationHandler1(int tab_id);: O7 H1 d5 C3 R" f
    void Clear();
" y! \' D- L: }# L5 g1 a  u    void Populate(BasePart*);  a- ~2 X/ S8 J3 N9 k
    void cbPartOpened(BasePart*);1 P# \' u0 K$ }8 P
    void cbPartClosed(BasePart*);
# S9 |  q: f4 V! Z
/ j) m4 q8 @4 F4 I& [private:
5 R0 h. w0 e" ], Q& q( N8 N    Part *workPart, *displayPart;  ]) ?2 a& z! Q& }- x8 d, U1 i( n
    NXMessageBox *mb;& m& e/ F1 D3 \# A
    ListingWindow *listW;
8 q. _; o2 b4 g  ~" ~) K9 W% i    LogFile *logF;0 g( b+ j6 M1 T& X* F2 l! z5 H8 w
    CTreeCtrl *m_tree; $ A( k+ w6 Z' R9 q) `( ?  M9 _
    CImageList m_Images;) U0 M% G; {. z  A0 z0 j' r& z
};5 j3 U8 R4 x0 c' @$ f  f
" Z9 {+ Y, x3 G- v
//------------------------------------------------------------------------------
2 s* Q" o! E+ T' f// Initialize static variables8 I' x% ~. l* H! K/ A+ C; M$ ?% R9 b
//------------------------------------------------------------------------------
+ ^4 X- i* p" m0 {6 GSession *(MyClass::theSession) = nullptr;+ g6 B0 m6 M: w0 L
UI *(MyClass::theUI) = nullptr;
2 B4 T& t6 w* w' Iint MyClass::m_tab = 0;
0 j/ L4 K( f5 T- Q3 m1 sint MyClass::m_cbID[2] = {0,0};( p- M5 W( Q8 s6 n7 I! E

1 F) o3 u. A! W& i# G# eMyClass *theApp = nullptr;- j( e/ U2 n. r* U6 \- X. f

% `% v6 ?0 y% D5 k! L+ e//------------------------------------------------------------------------------
1 v! }: g+ B, X1 j  e& D// Constructor ( D, `7 o3 l) I1 e1 E
//------------------------------------------------------------------------------9 H, x! I" \6 M( ~$ I9 \$ w
MyClass::MyClass()" ~/ e; S5 N  W% g7 l
{
0 R" a8 J# W: b# V, k0 U- y( G% I    logF->WriteLine("GTAC: MyClass Constructor");
5 Y& U6 H5 x+ L6 d  j    theSession = NXOpen::Session::GetSession();
0 {: o# E) u9 u% M0 c& W: ^* ?' N    theUI = UI::GetUI();( s2 ^1 t! E4 S1 j$ A
    mb = theUI->NXMessageBox();
8 d4 M, y2 X& X" M' ]9 f! h    listW = theSession->ListingWindow();3 ]" o, K8 _, S" v4 Y5 u' M
    logF = theSession->LogFile();
: o$ H( s. U" \* G! i( d* l: H; u3 L# g
    workPart = theSession->;Parts()->Work();" x1 P% g- x: t5 @1 `7 F- O
    displayPart = theSession->;Parts()->Display();
. ]; ?8 _2 y1 M; C; s6 Y/ u( ?7 f" }6 w3 X3 X) M; Z# u
    m_tree = new CTreeCtrl();
7 T. u8 N- J1 O9 k3 G; F' s' `5 [% N& P
    BOOL bSuccess = m_Images.Create(16, 16, ILC_COLOR32, 0, 2);  ]1 B! o/ {" m0 v9 N- ^, v3 s& [
    int index = m_Images.Add( AfxGetApp()->LoadStandardIcon(IDI_WINLOGO) );
& Y+ o) R4 X* }( {# \+ _    index = m_Images.Add( AfxGetApp()->LoadStandardIcon(IDI_INFORMATION) );& K% C$ q2 s# [

$ n! p, j8 E- N- I* v" ]    m_tab = theUI->ResourceBarManager()->ResourceBarManager::Create("Assembly Attributes", "ant_component_mode");! u$ a! z. G- ^6 g1 `
    theUI->ResourceBarManager()->ResourceBarManager::RegisterActivationCallback(m_tab, 9 P) i. T( E3 u% q8 B4 K( \2 V+ k. a
        make_callback(this, &MyClass::ActivationHandler1));( i, [4 [) r4 e
    theUI->ResourceBarManager()->ResourceBarManager::ActivateTab(m_tab);
( b5 c8 z8 V4 g. w0 b
7 n# X' ?/ J: n    m_cbID[0] = theSession->;Parts()->AddPartOpenedHandler(make_callback(this, &MyClass::cbPartOpened));
: N6 h. j( Z: y5 F+ C    m_cbID[1] = theSession->;Parts()->AddPartClosedHandler(make_callback(this, &MyClass::cbPartClosed));
1 R4 g+ h# J* e0 ^}
2 X2 v+ m; C; v. i8 D  [/ k9 `$ j8 S8 b! k% E9 t3 {5 ]4 @0 b+ {
//------------------------------------------------------------------------------6 k( D* J0 N) v; O% [; y  P: X
// Destructor7 w  n& r( S4 E; O! d) A
//------------------------------------------------------------------------------4 v: @) h5 e0 x  @  G: P$ J
MyClass::~MyClass()
# l" @" u: c% n0 ]4 T{
) D+ w: M- S8 {9 z! r; m    logF->WriteLine("GTAC: MyClass Destructor");
. K8 \# B2 k+ r) s% f    if( m_tree->GetSafeHwnd() ), _( S, Y/ \; ~6 ]: m$ W6 t/ i
    {! e% Q1 i) w: z! [
        BOOL bSuccess = m_tree->DestroyWindow();9 h0 s1 t& W- z  k- S8 c
    }
% G- y, r7 p2 M( |+ K( j3 i* K  J$ q
    theUI->ResourceBarManager()->Destroy(theApp->m_tab);: G$ |, n+ T& O) H/ H& _8 p) L3 g
    theSession->;Parts()->RemovePartOpenedHandler(m_cbID[0]);
  t7 j' w! T4 g) L( s    theSession->;Parts()->RemovePartClosedHandler(m_cbID[1]);% X$ C/ D$ ]4 m' ^' ?

" h9 a( s. ?. ^% b. [}' i8 [% f) F2 a7 G0 j. x

8 t* k+ ?1 K! R1 C1 e5 @//------------------------------------------------------------------------------4 s6 w. s4 J; E8 g- M8 b, L
// Print string to listing window and/or syslog4 |# e4 ]# n+ N7 R0 P4 @. B& c
//------------------------------------------------------------------------------6 d/ I" i; N& I/ F# L
void MyClass::print(const NXString &msg)6 H9 T2 \7 K5 Q
{
/ A; y& O  W/ o! D( b" w    if(! listW->IsOpen() ) listW->Open();0 P. Z6 H' ~2 O
    listW->WriteLine(msg);' c& m0 b1 V  x$ u  u& H3 A9 G3 L* H
}
5 O& y2 m- C, N1 K' L% ~' ], `void MyClass::log(const NXString &msg)5 o, Z$ |; ^, g  A8 N. x
{; J  Z* M+ w- y! O, L1 H9 _
    logF->WriteLine(msg);
2 K  D8 p4 D5 U! m( D% |}
8 r3 J  I9 b0 ?8 O' K0 t" H3 m7 A$ q+ @1 b$ e! k/ W- m
// Callback triggered when opening resource bar tab. f7 i  U, Q1 X1 C
int MyClass::ActivationHandler1(int tab_id)* f; _) U0 l4 m8 k  A+ g6 x' e
{
3 f# g2 y/ }* P9 U( ]    // Get the WindowHandle object- S  t- P5 J% t& X5 @" E# B
    WindowHandle *window_handle = MyClass::theUI->ResourceBarManager()->GetWindowHandle(tab_id);
( ~" D3 H6 l! o' O# w3 e" v    // Get the real handle6 B! p+ A% s+ k$ }! \  r
    HWND parent_handle = (HWND)window_handle->GetHandle();
( E& l7 T1 }3 F" E* N. b+ ~1 Q$ u    // Get the CWnd object from HWND, FromHandlePermanent will return 0!
, J( D. Q, x* F" K* f. ?: q* K    CWnd *wParent1 = CWnd::FromHandle(parent_handle);
3 p9 Q' |* d% ~1 a5 R    ASSERT(wParent1);
' [- ?7 Z( L- v- R1 O* i- C) c. T) y5 a8 G$ e3 U8 j
    // Switch module state to avoid Assertion from afxCurrentInstanceHandle. ?" D4 ~6 n# q& N0 u
    AFX_MANAGE_STATE(AfxGetStaticModuleState());0 F. b1 _9 F6 ]- }+ ]

6 _! v$ T+ S- |$ K: v2 H( j5 t+ g    BOOL bSuccess = m_tree->Create(WS_CHILD|WS_VISIBLE|WS_BORDER|TVS_HASBUTTONS|TVS_HASLINES|TVS_LINESATROOT|TVS_TRACKSELECT,
% l9 _2 [- u8 I        CRect(10,50,510,1810), wParent1, IDC_TREE1);
) w% V7 h2 `! D0 p* p- W    m_tree->SetImageList(&m_Images, TVSIL_NORMAL);
* F- w0 G7 y$ g- \. g8 \8 `: j4 k; m* }0 a2 }% L& V
    Populate(displayPart);
) b1 p+ c% r4 F8 |) z
5 v6 R2 Q' X9 l" x, l! }' T( C    return 0;% O! k, @8 C. n# }8 Y6 z, Y7 _
}- W( q2 ^& ^0 d  g

8 m/ x; a3 S( O/ @//------------------------------------------------------------------------------# [& S2 `6 P! e" i# W
// getAttributes
( D8 F  l7 ]9 M6 s; ^, q) t//------------------------------------------------------------------------------
- @! A8 q: T: H9 P  F
游客,如果您要查看本帖隐藏内容请回复

/ _- Q! U4 J* ^% }8 ]) |( o# |' U* ?$ a' j' t# K6 n" Z
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 doTeam.tech
回复

使用道具 举报

全部回复44

0

主题

4

回帖

20

积分

新手上路

积分
20
发表于 2015-3-28 08:52:40 | 显示全部楼层
二次开发完全不会啊
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复 支持 反对

使用道具 举报

28

主题

60

回帖

530

积分

超级版主

积分
530
发表于 2015-3-30 11:24:29 | 显示全部楼层
我想看看,进来
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复 支持 反对

使用道具 举报

2

主题

34

回帖

505

积分

高级会员

积分
505
发表于 2015-5-24 12:02:04 | 显示全部楼层
看看,这个好像很牛的样子!
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复 支持 反对

使用道具 举报

3

主题

53

回帖

551

积分

高级会员

积分
551
发表于 2015-7-26 01:33:35 | 显示全部楼层
谢谢高手的分享哈
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复 支持 反对

使用道具 举报

3

主题

34

回帖

203

积分

中级会员

积分
203
发表于 2015-8-12 14:24:53 | 显示全部楼层
学习学习学习
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复 支持 反对

使用道具 举报

0

主题

31

回帖

409

积分

中级会员

积分
409
发表于 2015-9-15 21:49:29 | 显示全部楼层
ddddddddddddddddddd
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复 支持 反对

使用道具 举报

0

主题

28

回帖

152

积分

注册会员

积分
152
发表于 2016-3-8 12:00:27 | 显示全部楼层
卡看看 阿发撒旦法撒旦法
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.doteam.tech
回复 支持 反对

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 注册

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

    本网站(plmhome.com)为PLM之家工业软件学习官网站

    展示的视频材料全部免费,需要高清和特殊技术支持请联系 QQ: 939801026

    PLM之家NX CAM二次开发专题模块培训报名开始啦

    我知道了