PLM之家PLMHome-国产软件践行者

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

  [复制链接]

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

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

admin 楼主

2015-3-27 11:17:17

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

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

x

; v3 ^( N0 y2 z

: j; ^# M3 g: n- X  i; ?* d& D
) H) Q4 O5 H1 Q0 J2 \) t/ r5 O
; Z* Y& S, ^* U
NX二次开发源码分享:NX10可以直接对资源条进行二次开发
6 V2 z. c( A; a  f这是官方的一个例子,新建了一个资源条,使用MFC的Tree创建了树列表,并加载了所有组件的属性到节点上。
: ~& w" v- P8 h" D( R8 a1 Z' [, j' |+ C
// Mandatory UF Includes
% r9 v' W6 ^. @& s#include <uf.h>
1 q$ N  X# E& ~! k/ D/ [2 l( s  [0 r( M5 G- Z7 p! S
// NXOpen Includes
( R5 x' l6 [# b" x/ t#include <NXOpen/Assemblies_Component.hxx>1 ~" c# K5 a# ~4 F+ ~3 K5 I
#include <NXOpen/Assemblies_ComponentAssembly.hxx>6 K. z4 D& `, n/ ?
#include <NXOpen/ListingWindow.hxx>
6 m; v' E  @* i5 d( w8 D#include <NXOpen/LogFile.hxx>: ~4 ?- S6 d0 O
#include <NXOpen/NXMessageBox.hxx>2 \+ V5 b; r5 y7 e! ^7 N, R
#include <NXOpen/NXException.hxx>
" I% r6 }# c8 Z& ]  M#include <NXOpen/NXObject.hxx>  `8 a. P) M6 t9 O% ^& m9 e" l
#include <NXOpen/Part.hxx>; K  W4 I0 ^6 c9 a' q
#include <NXOpen/ParTCollection.hxx>
. K8 i" m# C3 _2 t1 {#include <NXOpen/ResourceBarManager.hxx>
4 w) r7 |1 w  ~# h- x* C#include <NXOpen/Session.hxx>
8 j5 c7 R. i" T#include <NXOpen/UI.hxx>
; Y! X+ b) h( F3 q  iusing namespace NXOpen;
) }- R" |0 O2 u5 Y, f) zusing namespace NXOpen::Assemblies;  s. i! E$ S+ d$ x0 E  a' R
1 a/ b/ g4 ?- C/ @
// Std C++ Includes+ n, ?. {% w. _6 a2 I5 F! _! u6 a
#include <iostream>' h7 q% E3 H# v0 h- U
#include <sstream>. [4 n' P* M0 y4 A# l& j8 `
#include <map>6 F/ o9 Y; e% L" _) b
using std::exception;
0 f) m# E; e" |, g0 U6 Lusing std::endl;
6 L/ J# q4 j. d4 ]# t6 |2 j: y1 tusing std::cout;% m: q8 V5 M3 U, `% M$ g
using std::cerr;4 q( f9 i0 x7 q; u6 `; Y
# T, X, Z0 Y( _. }
// MFC Includes6 [) @9 v" a$ g* W# I8 d) C
#define _WIN32_WINNT 0x06010000
1 H3 Y9 ]3 @% e& }1 G5 S#include <afxwin.h>
( H3 y/ }) d$ y; R$ j/ e#include <afxcmn.h>
! A+ W0 d) J. Z) Z" h6 a
8 l7 D. K, T( U#define IDC_TREE1   1002* H6 e0 y" I# p4 i( o

5 c6 h, u5 H0 [4 c$ S//------------------------------------------------------------------------------
* A- u# ~$ H5 r1 ^" v// NXOpen C++ class 0 `  P7 r7 N1 t' r% J
//------------------------------------------------------------------------------, c4 t$ A( ~/ s, _
class MyClass* F& R/ H: ~2 O4 h. Z
{5 q' A, o# F' e7 U  E/ l) H
// class members$ R$ l8 ]: f! |6 [( ?
public:
7 I2 o' j" k' H7 \- D2 V  |    static Session *theSession;
* z. ~. A" p  ]    static UI *theUI;
; ?& V& b) Y2 `5 L3 o" x$ e    static int m_tab;! i) i3 O3 t+ A
    static int m_cbID[2];
: k3 X3 P; I( S0 H) {6 i
% ?. g: q: W/ S6 j    MyClass();1 t/ ~# T0 k8 @5 I4 \' f. N
    ~MyClass();# s9 {2 h( o5 b6 d" p
: T; p* d% N, q( t, P; A: Y2 n5 s
    void print(const NXString &);
" Z' q) {+ M- e/ N6 U4 D. t! B1 ^    void log(const NXString &);8 K# }$ M- G) X) B8 d6 s) \0 w, M
    void getAttributes(Component *, HTREEITEM);
* g) T+ K( @" ?( n% Z    void getComponents(Component *, HTREEITEM);8 {3 k0 u) w; }0 `* H' p% X
    int ActivationHandler1(int tab_id);. Y# v  e3 u; o2 Z3 L
    void Clear();" m$ Z% V! A6 i7 x0 P! i
    void Populate(BasePart*);
' W/ h- J( A& K$ W    void cbPartOpened(BasePart*);  y6 {8 q  S1 y, X
    void cbPartClosed(BasePart*);
) D% ?# ?  l. ]8 g
* @( l! D! J9 {3 ]3 c- }5 lprivate:
7 p/ k& m& q9 f2 i( G    Part *workPart, *displayPart;& d' c8 M7 O0 g' {1 O( z' J; Z
    NXMessageBox *mb;4 [: D7 H; Q0 J+ c$ z
    ListingWindow *listW;
7 j1 L+ t: W: h3 g    LogFile *logF;
& A1 ^% S# w1 \' F    CTreeCtrl *m_tree;
- J5 @5 b2 \% ]9 L    CImageList m_Images;
" P- H* K" |! L3 y};
8 ^0 A" t! G' V, p* r& Z# i
$ H& x! U; i0 S3 e//------------------------------------------------------------------------------7 y' t' C+ M7 {9 R
// Initialize static variables5 q# C+ a! x) t: L9 E) `
//------------------------------------------------------------------------------
+ T: K1 k: a3 W# T* j* V/ gSession *(MyClass::theSession) = nullptr;6 n8 \& D1 n/ W- |! Y" l
UI *(MyClass::theUI) = nullptr;
- X" s2 \9 y% u( k, q  b$ D# Cint MyClass::m_tab = 0;
: k: j6 D% z4 C0 h0 q) Uint MyClass::m_cbID[2] = {0,0};( ~, y2 M( K; ~, U" U$ V
. {7 D4 B  x/ ]% v
MyClass *theApp = nullptr;
. r$ y; |; k2 H8 d  R( T/ P/ p1 \9 ~0 F
//------------------------------------------------------------------------------. S6 `% m9 L* P+ f' c
// Constructor 0 w6 u, Y* L6 p5 h. T: }. J0 ~9 U
//------------------------------------------------------------------------------
1 D' Q# I+ l4 Z  xMyClass::MyClass()
1 x* g" r: q& W" b  E) W" Y{
4 d% o* Q* w: H4 R2 B, N, r/ \    logF->WriteLine("GTAC: MyClass Constructor");
8 y: n$ L4 u; `) `; b, m7 r    theSession = NXOpen::Session::GetSession();
" z$ m+ D7 i& [- r# `: c1 I$ r# @- O    theUI = UI::GetUI();
9 ?  w* D; D; l& t  Z4 H    mb = theUI->NXMessageBox();
+ m/ T3 Z, `+ }, T. b4 [    listW = theSession->ListingWindow();
/ \% j7 A, ]8 [3 k# W, q! I) z2 P    logF = theSession->LogFile();
0 w2 @! N# {: y, L. {( `
6 e6 v; F3 t" M5 i8 Q    workPart = theSession->;Parts()->Work();
0 j5 X" m& C6 p, P$ d1 U    displayPart = theSession->;Parts()->Display();
! ?" c: W2 H+ \1 n  C$ Z$ y+ v0 \4 @" L# o* N* _
    m_tree = new CTreeCtrl();. s/ I/ }/ k% Z5 [# {' x7 I
$ S6 d- r& K* S7 Y; J  g
    BOOL bSuccess = m_Images.Create(16, 16, ILC_COLOR32, 0, 2);
/ _0 m) k: y3 n' b4 d. W    int index = m_Images.Add( AfxGetApp()->LoadStandardIcon(IDI_WINLOGO) );& _! b; A# ^6 d
    index = m_Images.Add( AfxGetApp()->LoadStandardIcon(IDI_INFORMATION) );* |! o. O3 I' G: [) Q7 i5 _, c
5 u  E0 i: ~! h/ V9 V! I
    m_tab = theUI->ResourceBarManager()->ResourceBarManager::Create("Assembly Attributes", "ant_component_mode");
; D$ q5 {) L- n* [! a! X1 t6 J3 U    theUI->ResourceBarManager()->ResourceBarManager::RegisterActivationCallback(m_tab,
7 T( M7 i. U4 j        make_callback(this, &MyClass::ActivationHandler1));2 N! V% N1 J# B. d) f+ }) H' K. n* x
    theUI->ResourceBarManager()->ResourceBarManager::ActivateTab(m_tab);. n$ F$ Y+ z* `0 L$ _3 z8 X

, H6 q% {% g, P  P4 [    m_cbID[0] = theSession->;Parts()->AddPartOpenedHandler(make_callback(this, &MyClass::cbPartOpened));
' ~4 w+ n- L) \0 K+ U0 a    m_cbID[1] = theSession->;Parts()->AddPartClosedHandler(make_callback(this, &MyClass::cbPartClosed));
7 H: A: I! J; C: A}
* ^( w" t; G9 Z. Y* F/ ]* a. j
$ c0 O) R2 r$ F8 s8 @& w//------------------------------------------------------------------------------' P: t, F- Z; }2 h
// Destructor. w( D& E2 n' Q$ b9 e- N
//------------------------------------------------------------------------------! i- Z1 E  R, |* O
MyClass::~MyClass()" w& O1 }4 ]! h2 q2 s; ^5 ~* L
{
  r, p( N- m9 H- W+ P$ _    logF->WriteLine("GTAC: MyClass Destructor");
) j- W, ^  l+ {' E  j$ {    if( m_tree->GetSafeHwnd() )
: \3 _  K! L4 Y    {, j6 |4 f- |+ w  X6 @
        BOOL bSuccess = m_tree->DestroyWindow();( F& C$ T1 ^: \5 ?
    }9 s! t1 G& U9 _1 M) u- o
  I5 J2 b: G' I' U% T
    theUI->ResourceBarManager()->Destroy(theApp->m_tab);
; n. x# y/ R& F) U7 \! m( x0 D    theSession->;Parts()->RemovePartOpenedHandler(m_cbID[0]);+ X$ g8 S2 W" v( F
    theSession->;Parts()->RemovePartClosedHandler(m_cbID[1]);
& @9 Y! e$ t4 l; k
3 k2 Y) B: E9 ~7 g$ @" t6 I- d3 p}
# }! X2 ]" N  X' o7 a: }
& f7 t4 e! I+ \) G+ }$ V, M//------------------------------------------------------------------------------
+ F/ K2 h2 O% A  d' n( D// Print string to listing window and/or syslog, ~9 _1 t# ]9 }3 b* T
//------------------------------------------------------------------------------
2 L" ^! i( L) ?) W4 b$ @6 |void MyClass::print(const NXString &msg)) s7 ~, V% e- d1 K: L& N% K# a6 v
{7 O, s" `  }1 G% N
    if(! listW->IsOpen() ) listW->Open();
3 \' u  L- f2 s7 v' f    listW->WriteLine(msg);$ ^! ]8 l+ \  c8 E
}
5 s* ?$ z+ O1 M- v" tvoid MyClass::log(const NXString &msg)
- X' Q; V. ?+ s: C; F( d{
7 B. l8 [6 x3 V! `3 c5 j: a* J0 m: |7 t    logF->WriteLine(msg);
1 k% b$ G1 Y/ _3 G' |# N6 R% N  F}, A0 v: I( H( v9 A3 z
; R; V, m  W0 i' T$ D, y' k
// Callback triggered when opening resource bar tab0 t3 e! L8 n+ `/ U: w, w7 Z
int MyClass::ActivationHandler1(int tab_id)0 ?8 `) T9 k" h+ r% i2 X( P( |
{! V/ m$ D- u& a- K
    // Get the WindowHandle object
$ B, ~/ N6 j9 C" U. e    WindowHandle *window_handle = MyClass::theUI->ResourceBarManager()->GetWindowHandle(tab_id);
& d. k+ p9 z" M* H6 a: J8 m    // Get the real handle4 M/ G1 J3 P9 b
    HWND parent_handle = (HWND)window_handle->GetHandle();. b9 V. S& X1 y, v4 r% c6 j
    // Get the CWnd object from HWND, FromHandlePermanent will return 0!, c  o6 `! ?' X/ \8 ]
    CWnd *wParent1 = CWnd::FromHandle(parent_handle);
+ J& S7 h! `/ _( z# F. ]/ ?3 E    ASSERT(wParent1);
3 Q' S: ?5 ^0 x) c
7 N1 f+ \& y. ~$ H; I8 i; w1 L# y: g3 ]    // Switch module state to avoid Assertion from afxCurrentInstanceHandle
* D1 J# k1 O# N! ]; {* t: p    AFX_MANAGE_STATE(AfxGetStaticModuleState());; k7 X+ @+ n& v1 b% f/ u4 w$ ?

; e) H% d. f0 W. F, X' N    BOOL bSuccess = m_tree->Create(WS_CHILD|WS_VISIBLE|WS_BORDER|TVS_HASBUTTONS|TVS_HASLINES|TVS_LINESATROOT|TVS_TRACKSELECT, . r6 y1 Z) @. D9 ?3 q! L
        CRect(10,50,510,1810), wParent1, IDC_TREE1);$ S& L& G  n/ h$ W  i
    m_tree->SetImageList(&m_Images, TVSIL_NORMAL);
- [( R" I8 j0 e  t9 h. [. Q/ ?3 G% a$ W9 W( B7 s9 S) M) w
    Populate(displayPart);
4 _$ N* N" Y2 B, Z6 P; h# Q( i' t' \6 C+ ?: `" i% E, x6 l2 ^) E
    return 0;1 c1 H, x0 r, [: [* c' c1 N
}
* u' m3 @. n/ ~$ m9 Z" N/ B9 @. [8 ^3 _/ O
//------------------------------------------------------------------------------% m/ L7 b5 h7 i  U5 j2 y
// getAttributes
: {3 y! N' _. ^( s' ^: F1 ]/ A$ i//------------------------------------------------------------------------------+ V2 T0 T8 n. n; t+ |/ f+ \
游客,如果您要查看本帖隐藏内容请回复
' t3 T$ c. l  E+ n
% D% Z; w. q% a2 C! h3 F0 w
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了