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

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

  [复制链接]

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

2470

主题

1275

回帖

8万

积分

管理员

PLM之家站长

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

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

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

x

: ]+ K5 C3 u" J/ y, C* @2 b$ X+ k! }

+ o% S+ X+ z8 w8 k4 z4 P
( W; s0 y7 @6 Q! i5 S

2 K2 `% S8 J6 z1 r* BNX二次开发源码分享:NX10可以直接对资源条进行二次开发
: f4 f, D( E/ [这是官方的一个例子,新建了一个资源条,使用MFC的Tree创建了树列表,并加载了所有组件的属性到节点上。
+ |; U$ U' ]: R' ~  c6 g5 ~& d" _& q+ J! b
// Mandatory UF Includes
. X* N  |6 L8 I, D! d9 W4 S- r#include <uf.h>/ j7 ?" H8 Z3 @. f
* ?9 C8 p, [# ]# r. l5 B+ l
// NXOpen Includes
. n8 E. J$ f0 g( Q- u7 |0 H2 K#include <NXOpen/Assemblies_Component.hxx>
2 K, I1 A4 p# j( ~) M$ A1 g: k  ^#include <NXOpen/Assemblies_ComponentAssembly.hxx>7 W& v$ z3 W7 a2 ^4 ^( s
#include <NXOpen/ListingWindow.hxx>
, J* {' T$ k8 F#include <NXOpen/LogFile.hxx>, V  w* @7 P! |$ h
#include <NXOpen/NXMessageBox.hxx>; y: A- W" X/ {* Q# j
#include <NXOpen/NXException.hxx>* x/ M! M0 O; ], ^6 R+ o! F# ~4 c6 h
#include <NXOpen/NXObject.hxx>: Z+ U. r' c- _* R8 c- O7 a8 q& z
#include <NXOpen/Part.hxx>
; I& o) J- s9 V! _- S( q#include <NXOpen/ParTCollection.hxx>
1 E% R; G- r; {( Y; e#include <NXOpen/ResourceBarManager.hxx>* b- F1 z: y& I5 O5 l2 V5 A- X
#include <NXOpen/Session.hxx># `  p! b& U% f; o; y( X$ H
#include <NXOpen/UI.hxx>4 H9 c7 S$ _% n, L! q* h
using namespace NXOpen;
) o: x. ]" n& k* P6 j( c7 lusing namespace NXOpen::Assemblies;2 Q9 }3 d$ u# f5 m
/ b$ A( M, q) c( P, ~2 _' X
// Std C++ Includes
2 w3 A% N: A$ D/ n' S#include <iostream>) A( T  d! V- G# j; Y$ l9 b! }1 o5 v
#include <sstream>
% A1 y' e( ]1 C! {  R. s#include <map>
" W' h- ~8 o) X  P8 E" W8 Ousing std::exception;
) u$ i1 q5 y; j# Vusing std::endl;
$ i$ s4 N2 h+ l0 r2 X5 E+ q6 H/ }using std::cout;) M& v, I6 ~' R! {, k( E9 i) S
using std::cerr;
5 u/ e2 o# c; V( n7 O9 ]
. \- E7 q. T' C9 n1 S: K' o3 V# z// MFC Includes
7 N5 f" ?9 H! z0 F0 A8 J#define _WIN32_WINNT 0x06010000
+ K2 K- t( g4 Q" r#include <afxwin.h>
; ]/ O9 w) N  L# |8 O, _: J3 H#include <afxcmn.h>
  q5 v, [! |& _- q2 z; D
, j' Y, {4 l8 p9 [/ T#define IDC_TREE1   1002+ E: _/ x( y2 |: ]7 ]: K  q

. j  r) x( b+ N6 H//------------------------------------------------------------------------------
  E' d$ v1 _: |. I3 Q) y// NXOpen C++ class
9 U8 z7 ]3 ~9 d" D5 A3 `- ~//------------------------------------------------------------------------------
# @5 G- `- h  A" A1 Kclass MyClass7 g! q0 E9 Z  ^" Q& z* N4 o
{) _; y" _- \+ Y+ g7 S1 h
// class members2 i9 Z* t" l7 u6 ]/ P' H
public:7 V1 `4 x  g' P3 n7 y# z) E  F
    static Session *theSession;# m# q1 b: ^% O3 {( R) f# d3 B
    static UI *theUI;$ y0 o. }3 S( ], K+ B) ^
    static int m_tab;
4 d5 D% b% {% ]8 W: E" ^9 `    static int m_cbID[2];$ ]3 S0 I& E% L  r6 n7 M8 O
( O9 V" e7 z/ D0 A  J9 [/ S
    MyClass();- ]3 e4 k+ O+ A. o3 W$ ]% Z
    ~MyClass();. N7 h: _! Z$ g; a: ^% k

: i  S" c  i2 @& B) i% a    void print(const NXString &);
/ v5 Z) I; Q) L; z# T    void log(const NXString &);% r$ o9 }$ y% L5 X" P; w
    void getAttributes(Component *, HTREEITEM);9 ~& |  B2 I3 R
    void getComponents(Component *, HTREEITEM);
; J9 L4 L/ Z# Q2 t( H    int ActivationHandler1(int tab_id);0 G9 |7 K+ E# Q) A# P
    void Clear();
& A: n5 p. Y/ e. D+ I4 ]: ~    void Populate(BasePart*);
1 }$ k) X# o4 i( |    void cbPartOpened(BasePart*);. Q! L; k' x; P$ `
    void cbPartClosed(BasePart*);
( O+ Q9 C# `4 P( P" y  I% s# z; ]+ U- ^
private:5 Y4 a0 W' X4 S6 J$ c# Q
    Part *workPart, *displayPart;. b# z& M0 \" J  }: P( }7 j% ]
    NXMessageBox *mb;
9 J  X: R4 o: A2 q; i; N( ~- Z    ListingWindow *listW;, V! h, R  b9 o/ V0 w) s( J
    LogFile *logF;6 ?$ K' r% j0 q* [3 Q, ^
    CTreeCtrl *m_tree;
: {0 N2 k1 Q: ], S# T    CImageList m_Images;
" F# F; [) e: w" ^: F' E" v  m: v};
3 g! I5 [$ ]9 l9 n6 l9 I" g8 t8 O3 X% p; E: Y+ ?
//------------------------------------------------------------------------------) u, L) ~$ p* X/ b- x
// Initialize static variables+ G) I8 o8 ~9 B& @# c4 N3 e0 Y
//------------------------------------------------------------------------------% |% U1 w& Y, e( q
Session *(MyClass::theSession) = nullptr;
" p6 D* O; \3 o' E- ^5 E( j+ a' o% k7 DUI *(MyClass::theUI) = nullptr;
7 V# l/ n* R$ s- m% m1 o: N' \int MyClass::m_tab = 0;
) {' E8 S# Y$ F8 c' e9 D/ w* Eint MyClass::m_cbID[2] = {0,0};
0 k; m" M" Z9 \' k8 a8 I. w3 [2 ?, f0 Z
MyClass *theApp = nullptr;8 e4 y. w! Q" C9 S, w2 Y7 x

  t! z3 }$ I, [7 R2 D8 d; n//------------------------------------------------------------------------------
4 c- j8 G* ~$ w: j# l// Constructor 3 t2 c0 s. `( d2 k
//------------------------------------------------------------------------------
4 t5 _4 Q9 {/ p# h6 o( kMyClass::MyClass()
4 K5 Q" _3 e' H{' z) |: g5 G; n3 L
    logF->WriteLine("GTAC: MyClass Constructor");" U/ l5 A  x: c* }7 E/ a/ G
    theSession = NXOpen::Session::GetSession();
4 @' h. [) a! n  u" c: A% ^3 e" \3 G    theUI = UI::GetUI();
' f0 ^5 p) x( b7 A' h# R5 V8 d    mb = theUI->NXMessageBox();% A! `6 x1 R5 {: C9 s
    listW = theSession->ListingWindow();
- q& W5 j6 X0 d- G    logF = theSession->LogFile();1 X. g: J' x4 d! \  N0 @5 r

- h$ A7 E* h- ?    workPart = theSession->;Parts()->Work();
7 D( X7 X/ c3 u, Z/ s/ ?    displayPart = theSession->;Parts()->Display();7 C2 H' w! K: X' K# O5 k" j$ i# V! o

1 V) i" P. m; m  h3 F' G    m_tree = new CTreeCtrl();' j8 a7 x5 J0 O: ~
  v! X& N. K4 y. q
    BOOL bSuccess = m_Images.Create(16, 16, ILC_COLOR32, 0, 2);: N+ n2 j# E2 @
    int index = m_Images.Add( AfxGetApp()->LoadStandardIcon(IDI_WINLOGO) );
& E3 \* ]% E; V( Z) _    index = m_Images.Add( AfxGetApp()->LoadStandardIcon(IDI_INFORMATION) );
$ V2 S( T  l% U1 @; W# F$ t* i" X- M  _0 d. V9 q
    m_tab = theUI->ResourceBarManager()->ResourceBarManager::Create("Assembly Attributes", "ant_component_mode");
3 A; T- p8 }9 [$ L2 t    theUI->ResourceBarManager()->ResourceBarManager::RegisterActivationCallback(m_tab,
  ]7 \4 {0 g* @- `2 h6 J        make_callback(this, &MyClass::ActivationHandler1));
3 J2 ~+ N# f+ H    theUI->ResourceBarManager()->ResourceBarManager::ActivateTab(m_tab);0 h9 g% ?, S8 n0 L4 q
8 \1 r6 p3 u( R& N9 _/ Q
    m_cbID[0] = theSession->;Parts()->AddPartOpenedHandler(make_callback(this, &MyClass::cbPartOpened));
. R0 _$ u3 j7 H3 W4 R* V9 W  k% D    m_cbID[1] = theSession->;Parts()->AddPartClosedHandler(make_callback(this, &MyClass::cbPartClosed));
0 h% ]9 X; a+ I9 T" a2 T9 I: Y}
3 c" \! c8 }8 T; W  D& Z
# d+ k# K, [: Y) Q//------------------------------------------------------------------------------+ G) Q) w8 d+ G& J
// Destructor. J4 o2 q! e# ^; f! W9 ^
//------------------------------------------------------------------------------
9 f; h! ]; z  `: m; ]/ U) O8 zMyClass::~MyClass()
& _) t3 n; f4 i7 [{6 i  P1 [3 H4 Z7 S- w! L
    logF->WriteLine("GTAC: MyClass Destructor");$ E3 V" A8 L' t- Y
    if( m_tree->GetSafeHwnd() )9 `0 {* r- x& ]) `3 R- i  G9 A  y
    {! u  A/ v% Y7 a) l2 R
        BOOL bSuccess = m_tree->DestroyWindow();& y3 y8 k6 s  o( [
    }8 S4 U. A! D& Q- V: c. B  w

6 T% w. {% p/ ~6 X, P. m$ K# p    theUI->ResourceBarManager()->Destroy(theApp->m_tab);
" H* Q: r" u% t9 s8 r5 y  [    theSession->;Parts()->RemovePartOpenedHandler(m_cbID[0]);/ i  r" N& M) A. a. A. Z5 q8 f
    theSession->;Parts()->RemovePartClosedHandler(m_cbID[1]);
# ^+ C2 z! A0 q, S% S6 N
9 {7 J& A+ `  L1 L* A; O}
' H& Q; W( B6 ?5 u
* M2 f' k9 E6 o+ h//------------------------------------------------------------------------------2 K* m2 e/ ~, ?
// Print string to listing window and/or syslog8 p* \: x; p: A/ p' W
//------------------------------------------------------------------------------
: {1 j6 N+ |1 hvoid MyClass::print(const NXString &msg)* e3 ]0 e# A- f1 d
{
) d' r6 m2 N9 K, }$ }    if(! listW->IsOpen() ) listW->Open();( g2 E3 J) I3 t: ]0 U1 T* Y
    listW->WriteLine(msg);9 _5 R, b( U( d5 n; _
}
5 |2 ?# R: ]; j) _9 d8 p4 p4 Lvoid MyClass::log(const NXString &msg)
& N6 m, S* [* R% t1 ~) y{
' f7 d% g% H, e, E- v1 l    logF->WriteLine(msg);% ~4 K8 d7 \& d2 h5 G+ K4 Q2 Q
}
4 x& {+ V) o7 i  J8 V/ L
1 j: E1 U5 R5 u4 ?// Callback triggered when opening resource bar tab
* |4 t' M( k/ M9 uint MyClass::ActivationHandler1(int tab_id)
0 [% x$ S% Y- R  a1 X8 h) @{
5 T& M" z4 O; J$ U7 g    // Get the WindowHandle object3 J* _+ e; N" @& D; y
    WindowHandle *window_handle = MyClass::theUI->ResourceBarManager()->GetWindowHandle(tab_id);5 b) v0 U' _$ @0 E4 n1 p
    // Get the real handle
+ v4 z' M& g4 l1 L! O$ p' N# l    HWND parent_handle = (HWND)window_handle->GetHandle();8 H7 E) P: r, M5 ~
    // Get the CWnd object from HWND, FromHandlePermanent will return 0!
. T. _4 h& q) `    CWnd *wParent1 = CWnd::FromHandle(parent_handle);, e: _0 ~8 d0 @8 ]; N% K5 W
    ASSERT(wParent1);5 m/ u4 M3 e. V- N. b, E& [
6 _! M8 T4 {  R! p% ~  w' m
    // Switch module state to avoid Assertion from afxCurrentInstanceHandle3 f7 k3 d0 _/ Z* |' t$ F
    AFX_MANAGE_STATE(AfxGetStaticModuleState());
8 X: K2 B/ Q5 F, r8 L0 g8 o
: W/ T& \7 n3 f- f    BOOL bSuccess = m_tree->Create(WS_CHILD|WS_VISIBLE|WS_BORDER|TVS_HASBUTTONS|TVS_HASLINES|TVS_LINESATROOT|TVS_TRACKSELECT, , i4 h9 `3 X4 Z3 J
        CRect(10,50,510,1810), wParent1, IDC_TREE1);. ]2 Y& q# s' O9 K' E3 A5 p
    m_tree->SetImageList(&m_Images, TVSIL_NORMAL);# U. C2 ]: h8 d) n% s* [" A
7 k8 H+ ]9 ^2 V  d. Q. [. y
    Populate(displayPart);
5 }$ C# W% \4 ^9 E# S7 U; H7 t0 ~! `4 ]/ I& `
    return 0;! I' m  F: N0 M6 {
}
: j$ x7 q6 Z$ D" `$ v7 G5 z9 j) w' ^+ P  A
//------------------------------------------------------------------------------: [/ w+ K1 V. Z
// getAttributes2 o, F% r4 F, ?# ^+ G5 e. y
//------------------------------------------------------------------------------
  v+ X* u" v- H/ D
游客,如果您要查看本帖隐藏内容请回复

! r8 _' l9 S+ Z7 }* N$ X% _
. k3 e: B1 s+ Y6 `2 w: L5 e, j
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了