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

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

  [复制链接]

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

2471

主题

1276

回帖

8万

积分

管理员

PLM之家站长

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

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

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

x
: S. Q# D7 c* U

4 {: F8 X% h1 T' c3 ?% |7 ~0 `) M
6 j  t/ t" f& w* f) Z) L- e- y

. X/ ^9 d: u) NNX二次开发源码分享:NX10可以直接对资源条进行二次开发
% J" l% G% a" S, z- g% f这是官方的一个例子,新建了一个资源条,使用MFC的Tree创建了树列表,并加载了所有组件的属性到节点上。8 V. g2 N$ `; g- a8 G

- w0 r2 x& w' q4 X( n" V// Mandatory UF Includes
. H7 k  {$ M0 b- j7 _7 a8 Z#include <uf.h>
0 S7 O% p0 F: _5 ~) ^$ y, ^! M1 w  s7 F" r
// NXOpen Includes
# i  f7 p* c( }0 l$ L/ G- @6 c6 [3 M#include <NXOpen/Assemblies_Component.hxx>. g4 e1 j3 Q. l! S
#include <NXOpen/Assemblies_ComponentAssembly.hxx>
5 p! U8 k. I# {6 t, [#include <NXOpen/ListingWindow.hxx>$ h/ U  _7 H* B" K; S9 {
#include <NXOpen/LogFile.hxx>2 V3 S' K8 m4 e; k) R7 Y  [
#include <NXOpen/NXMessageBox.hxx>& x" R6 N* W9 X$ ^3 f5 Q! S7 A
#include <NXOpen/NXException.hxx>$ R% d( X7 d. S5 u% z+ Y0 }# P
#include <NXOpen/NXObject.hxx>/ p6 U8 F2 T: e5 z
#include <NXOpen/Part.hxx>
" D- D8 v0 L! u% D: y- n#include <NXOpen/ParTCollection.hxx>
2 ]! G+ x1 U& p2 x#include <NXOpen/ResourceBarManager.hxx>3 m2 w' N% g0 l( y$ Z
#include <NXOpen/Session.hxx>' z. ^& p: v8 i
#include <NXOpen/UI.hxx>3 |* C0 J9 I* k: u
using namespace NXOpen;& O* E- p0 x8 @8 e2 q/ Y
using namespace NXOpen::Assemblies;
) E' L8 Q" Z( O8 h9 e( I2 r& L+ f% n  D( f
// Std C++ Includes1 n4 H! D* V& ?( n' I% F
#include <iostream>
- R: A# ?) L9 \0 ^2 q: J#include <sstream>2 T5 d$ m3 @, u
#include <map>6 \. Y1 r  n) V. b) J
using std::exception;
6 h2 U$ G& N  r% t+ j3 n; Y2 nusing std::endl;/ ]% u4 C. x- N' u
using std::cout;
9 m2 T$ `4 S7 {' kusing std::cerr;
- j* c& R$ i4 B1 a6 C- E
% U% S5 Q% Q4 K3 Y4 R  R// MFC Includes
! M3 x) E' {+ ~#define _WIN32_WINNT 0x06010000 4 c, k$ m+ Z. O, r
#include <afxwin.h>! ]" U2 j: C( D; s. V
#include <afxcmn.h>
% |: g/ D; E1 k( B4 A* Z& Z' N9 X( N
#define IDC_TREE1   1002" s+ X+ o1 w2 s- k
1 d  Q& b) z/ W+ \* h% s; F0 l8 Z, N
//------------------------------------------------------------------------------
; F2 ~* W7 _; y// NXOpen C++ class ; L" g! J4 V/ }- H6 w* l
//------------------------------------------------------------------------------% x* z1 C' O& j- N8 i3 P
class MyClass! U9 A! Z% n8 E8 c4 D+ V, U
{
5 }# j& s3 N2 A% I0 T. w$ Q* V# r// class members
2 M# a  I5 p, V/ y% mpublic:% j; w& i3 f+ Y2 u
    static Session *theSession;5 B$ ?- L! c! b6 Y! x$ I
    static UI *theUI;- w0 ^8 g( u  |- p" j% n
    static int m_tab;% F3 s+ k7 M# }1 d0 |
    static int m_cbID[2];
1 X0 q( Z7 q% g0 E$ M7 {% x7 J+ r) }
    MyClass();7 a9 J' S8 w8 _2 B4 A8 p5 U" U5 S
    ~MyClass();
- ^- l! }" Q6 s: A. v/ h2 h1 A6 T+ w; G2 X) w9 G% g5 c2 w4 H
    void print(const NXString &);
0 m+ Y1 E# X6 O# M    void log(const NXString &);
, L! |' ]# ~- q" z. ^    void getAttributes(Component *, HTREEITEM);
$ l0 I2 B: q* C1 M9 i( B7 W3 _2 x    void getComponents(Component *, HTREEITEM);
. I# B  e1 d5 Y0 X9 ~    int ActivationHandler1(int tab_id);- D4 M( q$ \) x* k* B. h
    void Clear();4 V2 t- g0 `8 x+ @3 X/ K  s7 t" k9 G
    void Populate(BasePart*);! p: Q* Q/ f8 w. i: c/ ~
    void cbPartOpened(BasePart*);
' s. P9 a- y4 \1 x    void cbPartClosed(BasePart*);
/ U% z1 ?. A; L. o: S) I
( P; Y/ I, j  z- ?* m0 Tprivate:; D% d# T' F9 l0 c- w
    Part *workPart, *displayPart;
7 `: U8 I9 V, a% `& d  a! x! W; V; ?    NXMessageBox *mb;5 _- p! I: t5 H3 R
    ListingWindow *listW;
" y; J4 V3 P' o" ^" e    LogFile *logF;
# \  P, A6 {8 T! c. M    CTreeCtrl *m_tree; " i, O6 D8 J) f4 R( L9 N
    CImageList m_Images;
3 F: W+ S4 Y& I" A% w1 V) C7 e- ?};
! E4 @3 T1 w2 D3 J: w# M! w+ e5 F5 f4 y1 k( i2 J" u
//------------------------------------------------------------------------------
( ~9 Y" j# ?9 O! N// Initialize static variables
+ j2 g. P* @* [6 s! T! E& V  ?//------------------------------------------------------------------------------" R* C8 o# ?' l
Session *(MyClass::theSession) = nullptr;0 S$ U% m& g. }: X; R
UI *(MyClass::theUI) = nullptr;% v' }( [. d3 Q  j- e" H
int MyClass::m_tab = 0;
" _+ g9 v& s$ C# y: O9 hint MyClass::m_cbID[2] = {0,0};
. p, ~2 w; y1 w
- C; m2 D7 j" b! N' O4 G3 gMyClass *theApp = nullptr;& O- A' \& Y- L% ~2 u: S

$ X) l+ c; M, n//------------------------------------------------------------------------------7 J# b( s- A# A% B' S1 _
// Constructor
  b7 _" A9 ^9 t! Z1 a//------------------------------------------------------------------------------/ s" f& q% h- L$ E0 {$ s
MyClass::MyClass()
( g4 |7 g1 m- w{
6 `0 Q, ?0 E3 r8 y7 y, i: i+ M    logF->WriteLine("GTAC: MyClass Constructor");1 p1 B. |4 `& y2 q4 ?+ a. V
    theSession = NXOpen::Session::GetSession();
* v) E  I# M0 R7 r/ {) {    theUI = UI::GetUI();
4 B9 j2 K  `. y; w    mb = theUI->NXMessageBox();+ [8 |( t# u/ F+ U4 [, r9 l. g' R& ]! i
    listW = theSession->ListingWindow();$ P" G5 G! s& }
    logF = theSession->LogFile();" C0 }( |' x* B# l* z
6 l& ~( x7 W3 ^# `( B3 }1 s
    workPart = theSession->;Parts()->Work();( F, v) P7 u1 I0 J( F
    displayPart = theSession->;Parts()->Display();6 P% r5 r5 M' o6 |$ A5 n2 d

* ]5 d8 @) e/ J4 W* v9 I4 Z" q    m_tree = new CTreeCtrl();6 ^+ P- ^! [6 u' D
+ b; _& V; i  r
    BOOL bSuccess = m_Images.Create(16, 16, ILC_COLOR32, 0, 2);
. K- m" W1 w5 m; n9 }4 \0 J    int index = m_Images.Add( AfxGetApp()->LoadStandardIcon(IDI_WINLOGO) );3 C, O: v/ Z2 t9 ]" U
    index = m_Images.Add( AfxGetApp()->LoadStandardIcon(IDI_INFORMATION) );. l" A( U" v) a% F$ g9 l
" o7 \1 z4 y$ {5 N. w0 {
    m_tab = theUI->ResourceBarManager()->ResourceBarManager::Create("Assembly Attributes", "ant_component_mode");0 A- w' m$ k/ n! R
    theUI->ResourceBarManager()->ResourceBarManager::RegisterActivationCallback(m_tab,
  M1 S( R0 m; E" j! N        make_callback(this, &MyClass::ActivationHandler1));' c+ i4 o4 Y7 G7 b* }  U) L9 V
    theUI->ResourceBarManager()->ResourceBarManager::ActivateTab(m_tab);
' Y  X& E) R4 M+ [2 S0 r7 C
8 i3 x7 G* l# a+ f" O6 L0 m    m_cbID[0] = theSession->;Parts()->AddPartOpenedHandler(make_callback(this, &MyClass::cbPartOpened));( }. c5 h- ]: R2 ^
    m_cbID[1] = theSession->;Parts()->AddPartClosedHandler(make_callback(this, &MyClass::cbPartClosed));0 x! L% y! `! s9 {; R
}+ i& T' C! N- ?9 b+ K4 R! K
5 j5 ], a/ w3 K" L! w  b
//------------------------------------------------------------------------------; ]. n% c( c: v5 n3 j' l
// Destructor9 n! [" z3 l; Z; ]7 \0 g3 V# i
//------------------------------------------------------------------------------& c3 J1 n* s/ S8 {9 X$ E- D
MyClass::~MyClass()
: b- I0 ~* ]# k7 q7 X! V# C4 ~2 g{
4 S" F& E9 p9 `    logF->WriteLine("GTAC: MyClass Destructor");
9 h: l! ~) j/ y- U; c    if( m_tree->GetSafeHwnd() )1 j8 k1 P% p8 |% s  L3 {
    {5 P1 p" o" c4 \7 Y
        BOOL bSuccess = m_tree->DestroyWindow();
- O* a5 S7 q. R9 I4 c( y. a    }
3 d, g& l8 {5 K$ |# G' t+ U
! w; C% e' |2 G) Q    theUI->ResourceBarManager()->Destroy(theApp->m_tab);- D4 t$ T+ G% S0 t$ b
    theSession->;Parts()->RemovePartOpenedHandler(m_cbID[0]);  M& W  N  g4 F
    theSession->;Parts()->RemovePartClosedHandler(m_cbID[1]);
0 E9 e4 w* R4 W. h4 w6 v, J6 T) ?% D( f* v$ k6 P7 |% j# h5 a7 C
}. K& d$ B! {3 _5 n" c  S

/ u$ ~3 ~5 I$ r  v; ^' Q//------------------------------------------------------------------------------
" V2 C5 [# K; [7 ^+ ~* p// Print string to listing window and/or syslog
) O) f- M( n& C+ s; y: K//------------------------------------------------------------------------------
+ C; N. Z% d& C, v9 Uvoid MyClass::print(const NXString &msg)* U1 j, x7 ]% C. K3 B7 p
{4 ]( W0 B& v; Y& D
    if(! listW->IsOpen() ) listW->Open();4 ?6 b7 f) m% ~- z2 @% L* F; r
    listW->WriteLine(msg);- Z: c+ c' s8 V) A* L
}2 _: e  q2 f0 H! a% ]2 M3 U' o/ Z' J
void MyClass::log(const NXString &msg)
1 \9 j+ |% Y( h# X! ~8 _1 {{
. t6 ]% X$ `0 m, C# W3 n8 R    logF->WriteLine(msg);
8 U9 Y/ f! @3 Q2 ~$ Z2 ]}
% Y; H" G; t% L9 t. r- D9 @8 y1 [
5 b3 ]  B7 M4 Z) f; J// Callback triggered when opening resource bar tab
4 R" D" R$ z0 o: E) s% Fint MyClass::ActivationHandler1(int tab_id); z$ L6 f4 V& [
{
2 \* j$ B1 J( U" W    // Get the WindowHandle object
* j9 g( `. g) ^( P    WindowHandle *window_handle = MyClass::theUI->ResourceBarManager()->GetWindowHandle(tab_id);
  k) G& M3 }9 d! L# I& k; ?: d4 T    // Get the real handle  j; e! d( w( N1 F$ C% V5 H- A6 n
    HWND parent_handle = (HWND)window_handle->GetHandle();4 S+ u& W$ [' l3 n# E$ G+ W
    // Get the CWnd object from HWND, FromHandlePermanent will return 0!' |. M& F; w. P1 [
    CWnd *wParent1 = CWnd::FromHandle(parent_handle);
2 y% o8 `; |& t0 A. |1 ^2 z    ASSERT(wParent1);
0 v% t# T) H  p: F6 }2 B
* {: O* k# x* I( t4 @    // Switch module state to avoid Assertion from afxCurrentInstanceHandle! M$ ^( Z/ ~0 m# E
    AFX_MANAGE_STATE(AfxGetStaticModuleState());
6 G7 X  X; R6 {& U) B) y7 O8 O
    BOOL bSuccess = m_tree->Create(WS_CHILD|WS_VISIBLE|WS_BORDER|TVS_HASBUTTONS|TVS_HASLINES|TVS_LINESATROOT|TVS_TRACKSELECT,
$ \6 B+ Q3 \6 s1 p# j7 A' H        CRect(10,50,510,1810), wParent1, IDC_TREE1);5 y! x* E: a1 d4 a1 _# L( f6 C
    m_tree->SetImageList(&m_Images, TVSIL_NORMAL);. a+ G0 Q1 N% q

$ w" N: k/ U% f5 H0 ]    Populate(displayPart);4 J2 {. M" _+ A7 ?- e5 V0 l

$ o% j8 n1 q4 s( u5 e' k' z9 v( ^6 W    return 0;
) |. {, ]" M7 t}2 }( l8 L. M  p8 p6 ~* }2 ^4 u% X

8 T' Y/ A% e$ d  E  c//------------------------------------------------------------------------------  t( t& A1 l4 f: ~3 E) U1 o8 w
// getAttributes' N; b! T* B; s' @+ W: {5 q
//------------------------------------------------------------------------------
7 H! Q% z. ^: p
游客,如果您要查看本帖隐藏内容请回复
" b" L5 m+ x% f: |0 [

" f( @9 F3 i1 Q: F' H) {
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了