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

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

  [复制链接]

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

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

admin 楼主

2015-3-27 11:17:17

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

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

x
; z. h5 N8 a' U, R+ j
' y) }" J" ?: [& T
5 [4 z9 N, b, p% c, ?
; t0 R  G8 m7 _" N( R
NX二次开发源码分享:NX10可以直接对资源条进行二次开发
/ m8 k  t& Z- l% ^3 K2 ~这是官方的一个例子,新建了一个资源条,使用MFC的Tree创建了树列表,并加载了所有组件的属性到节点上。! C1 d, M' C" J8 i' z( d

8 q  t7 U0 c% V) `  j// Mandatory UF Includes
# o/ U! B+ O  v) E3 M#include <uf.h>
+ i  j- a5 L& D+ r2 d: w6 ^" r3 y3 q  V4 w* F' l4 \& G
// NXOpen Includes  q7 q5 w7 C7 h" v$ ~: ~( X- V# g
#include <NXOpen/Assemblies_Component.hxx>/ U. L: ?) O( O. E5 u0 y- P
#include <NXOpen/Assemblies_ComponentAssembly.hxx>
( x: x7 q* c& I6 u2 A#include <NXOpen/ListingWindow.hxx>
1 _6 t! a% m' e7 P% L#include <NXOpen/LogFile.hxx>; `. F/ I2 {5 S) O' K9 C# O
#include <NXOpen/NXMessageBox.hxx>* C! @  H$ }& V" {  y" ?
#include <NXOpen/NXException.hxx>; \+ V  e8 w1 e; J% N' g
#include <NXOpen/NXObject.hxx>" |: g( g1 [1 K( d. q3 b" p* ?  d
#include <NXOpen/Part.hxx>
0 Q' c1 V" @; _5 k& l#include <NXOpen/ParTCollection.hxx>
/ \. w8 m: S: h; `' p9 M4 _5 u#include <NXOpen/ResourceBarManager.hxx>" m) `+ f/ c0 C1 e# |) ]* l$ F) g
#include <NXOpen/Session.hxx>6 m% I  r) f2 m( Z: d) i9 w
#include <NXOpen/UI.hxx>
5 ^" V: R% w4 p$ H. fusing namespace NXOpen;
! N& N: @  j! z' |4 Susing namespace NXOpen::Assemblies;6 }: l( t; R6 Y1 i( V* K' R+ k5 U' n

0 Q. e8 b' _/ |8 ~// Std C++ Includes
. }$ a0 K+ I& b4 o6 G#include <iostream>9 B* J% K6 q0 R
#include <sstream>
. T; \5 n9 r1 m# u) O* Z#include <map>' }- U* |. {$ N! [
using std::exception;' O: ^2 W( K9 p& Z' M4 t
using std::endl;
: k" A4 Z. k+ P4 E% tusing std::cout;
% U( e: Q5 e' B+ busing std::cerr;
4 ^$ U$ j4 j8 r! i8 s
3 e( g# i; L- @, m( W' ?% J0 J// MFC Includes
  s3 K* ?$ n* X- J#define _WIN32_WINNT 0x06010000 8 @1 e8 h. p3 Y( n
#include <afxwin.h>
, |4 |( V2 p4 W8 J( \  S#include <afxcmn.h>
# B' l9 S4 z0 u4 ?9 u6 c$ `1 h. _/ I  J$ K
#define IDC_TREE1   1002
$ j* ~, d: I* Y+ ?7 t/ }
2 ~2 ?, j; n( \$ ^1 n& y2 ~; N) g//------------------------------------------------------------------------------& t7 ~. Y/ f2 A6 l. m
// NXOpen C++ class
) M, P- F5 M! V' L$ E$ e8 j//------------------------------------------------------------------------------
0 |/ p) Z& ^, Oclass MyClass& B2 K8 Q( O7 I, Z
{$ s, t' m- S: O$ U5 n
// class members7 C- t- }, a0 ^4 d+ [" @, `
public:
( M, U1 b, G5 N# Q0 a! a    static Session *theSession;* k. f$ e$ K1 R8 i) w1 J( H
    static UI *theUI;# z8 E% M/ C+ z
    static int m_tab;
$ H% h4 _$ F4 r8 t! `8 n    static int m_cbID[2];2 f7 l+ _  F; ]# k  G" `$ H; a

- @+ C9 E* g5 Y& ~6 e0 h    MyClass();+ N6 D. d) ?  z2 i7 w: S; N$ ?
    ~MyClass();8 p" _: f9 \5 W3 @$ p* g

0 q1 J3 `2 L& w& w. B: w' ]    void print(const NXString &);
1 {% `" p0 X# D( _3 t: K0 {    void log(const NXString &);5 M; m4 u9 _8 C0 d0 S( g/ X
    void getAttributes(Component *, HTREEITEM);
" R+ A; `$ T: n" [; @5 l    void getComponents(Component *, HTREEITEM);
/ W5 F9 o, A1 H    int ActivationHandler1(int tab_id);
( s' y) T) F* J    void Clear();2 N& r- ~2 X  H3 }- j
    void Populate(BasePart*);- E! o8 c5 o, X0 z. x" V. t& ~
    void cbPartOpened(BasePart*);0 \- t+ ]4 n2 S* M$ d/ D
    void cbPartClosed(BasePart*);
+ c" W' m1 |& ]% R5 K# Z6 E$ i2 Z6 [: K& V2 R9 {: z7 g9 z- q
private:
# d: v* \$ @8 i+ y    Part *workPart, *displayPart;: {8 {( R5 |6 i" [
    NXMessageBox *mb;
3 F: l4 d7 y! X9 z6 p+ b    ListingWindow *listW;
" r  Q6 T+ A: h  ]- Q( [4 Z    LogFile *logF;$ ]- V5 I  V$ g* z. Y) {  [
    CTreeCtrl *m_tree; ( c' G, ?" e# C8 m
    CImageList m_Images;
6 \0 l  G3 `5 _; ]+ ]};
, }2 j( P* S" l: ~8 \7 R" R( [2 [8 a7 j: ?
- H, m, y3 L0 ]//------------------------------------------------------------------------------
; T0 m( D" Z, e. V7 F/ N// Initialize static variables
! K$ h' @% W4 J7 y0 [//------------------------------------------------------------------------------2 C3 O1 W4 n/ Y6 A4 m, S. `2 L. L
Session *(MyClass::theSession) = nullptr;
! ?  Z$ R# \# L% wUI *(MyClass::theUI) = nullptr;8 B. z  H7 K( {/ ^) n2 p
int MyClass::m_tab = 0;
3 l; S( G1 W3 }: q, t2 R  ]0 vint MyClass::m_cbID[2] = {0,0};$ ^. q  C6 ^# D- a, ?

: S& n  `% q5 b, l3 b4 iMyClass *theApp = nullptr;
  H4 M! J3 F1 a4 n: r" {6 u; Q/ S5 O" l4 \
//------------------------------------------------------------------------------; {4 G, ~* o3 I5 d) g1 Q
// Constructor % i+ h5 R7 f. Y  S' A
//------------------------------------------------------------------------------5 ~3 w0 `: i- A( V( o; R
MyClass::MyClass()
2 z4 G- Z# B& [. I9 A- `{9 p) @9 t) j5 V$ m5 a' L# i
    logF->WriteLine("GTAC: MyClass Constructor");* z4 U% D( W: g  j
    theSession = NXOpen::Session::GetSession();
( W6 v0 C  C: v9 k: k2 M: E    theUI = UI::GetUI();
" u$ ^3 l1 l. g- I    mb = theUI->NXMessageBox();) M* ~% C' t7 o2 d
    listW = theSession->ListingWindow();
9 a" ^9 G% h7 s9 P- G4 G    logF = theSession->LogFile();; r6 O4 o1 z6 ?) i$ }4 E! n% H
! P& O3 d  O$ j  m6 r% H$ |
    workPart = theSession->;Parts()->Work();
/ w6 |. R; r4 F0 Q/ H7 ?' V( `    displayPart = theSession->;Parts()->Display();. H: f% P  S% |0 H+ [
' U9 }) t/ Y  ~) l* ~9 I5 u
    m_tree = new CTreeCtrl();5 |$ ~9 T: @* s- {3 b* [

2 j* _/ e& k; p" v) z) A1 Z% z. }    BOOL bSuccess = m_Images.Create(16, 16, ILC_COLOR32, 0, 2);3 l" b7 F! v2 G* Q! e
    int index = m_Images.Add( AfxGetApp()->LoadStandardIcon(IDI_WINLOGO) );
  t4 z! k+ k, T6 f; B* ^' b6 X    index = m_Images.Add( AfxGetApp()->LoadStandardIcon(IDI_INFORMATION) );4 [/ x2 K7 m; Z3 d0 E

& h6 j; a% \  U) r5 E3 Q, Y    m_tab = theUI->ResourceBarManager()->ResourceBarManager::Create("Assembly Attributes", "ant_component_mode");$ U+ c' C( V. {% p
    theUI->ResourceBarManager()->ResourceBarManager::RegisterActivationCallback(m_tab,
( C' r- J  r7 [        make_callback(this, &MyClass::ActivationHandler1));
3 s) p7 W. i( [4 h- d- Y4 _( i: _/ z    theUI->ResourceBarManager()->ResourceBarManager::ActivateTab(m_tab);
7 c. C6 [/ }8 C1 B4 u* R% W5 y& ]" M9 S+ E" f+ \+ A" P
    m_cbID[0] = theSession->;Parts()->AddPartOpenedHandler(make_callback(this, &MyClass::cbPartOpened));
* @% W) B# ?* R) \! ^4 Y7 h    m_cbID[1] = theSession->;Parts()->AddPartClosedHandler(make_callback(this, &MyClass::cbPartClosed));9 r  ^5 a- e7 m+ m
}
8 k3 T2 r/ n  E5 {. J, s6 ]" Z- V% l6 j/ c# I
//------------------------------------------------------------------------------8 u; y$ [) x* X! i* S! a
// Destructor, ?( f7 ]7 _' T$ w
//------------------------------------------------------------------------------$ x9 E! o8 o* Y+ J5 P3 u
MyClass::~MyClass()
+ K% U' b5 S+ o8 H$ E9 ~6 m{" l) B/ h6 K/ D4 Y! _
    logF->WriteLine("GTAC: MyClass Destructor");9 u  ^. l0 j: ]/ m
    if( m_tree->GetSafeHwnd() )
& s7 |+ V$ `0 c4 G3 j    {
: u0 A: n' p8 [# V0 [# H        BOOL bSuccess = m_tree->DestroyWindow();
1 B% K+ g1 {5 G% E) m    }
; a# X; n, N- j& _8 D; _
" F/ M& y/ v( m- F5 B    theUI->ResourceBarManager()->Destroy(theApp->m_tab);
' b+ a$ y$ m! p6 E  U    theSession->;Parts()->RemovePartOpenedHandler(m_cbID[0]);
0 x, p; M) a* j0 U  z. u5 u    theSession->;Parts()->RemovePartClosedHandler(m_cbID[1]);
+ x2 B$ {% x9 _' `7 r1 d/ P* Q; C
* I' \& Z7 L& {2 V) X' u8 ]}
% R2 s+ s/ N" f1 u* s
* w& \5 K0 g0 O$ D- ^" `! l//------------------------------------------------------------------------------
* l0 L' I7 t; a, w; [* ]// Print string to listing window and/or syslog1 c9 s- @# e& d
//------------------------------------------------------------------------------
% ]6 a* J8 g  n: Y* H" xvoid MyClass::print(const NXString &msg)
) ?% e4 ]! ^$ s! S" @/ V) }  V{& p  G( E% b5 T2 h
    if(! listW->IsOpen() ) listW->Open();: r: N1 R0 Y$ Y2 r5 B! I" y- [/ ?! V
    listW->WriteLine(msg);0 A! V) F3 l7 y
}4 s  f6 @8 T4 C
void MyClass::log(const NXString &msg)
% r8 s4 k2 s( J1 y3 w1 {4 ]{
6 E' A$ q4 I1 H' C2 [    logF->WriteLine(msg);2 w& u3 e8 A# Z1 h, {$ z3 c
}
/ J  E1 ?- y) _; L6 ^0 a9 d  s
// Callback triggered when opening resource bar tab
+ [, p' L. b8 P5 u+ c; }int MyClass::ActivationHandler1(int tab_id)
9 p; M* f1 L8 Y+ O/ I* E{6 X2 @/ f- b' K4 I/ f2 }
    // Get the WindowHandle object
* t; H3 C/ ?) U$ h0 R1 o    WindowHandle *window_handle = MyClass::theUI->ResourceBarManager()->GetWindowHandle(tab_id);
' W4 G2 k5 q& m- h    // Get the real handle0 Q; O8 M: S$ c$ U5 B) X4 \4 ^3 a- p
    HWND parent_handle = (HWND)window_handle->GetHandle();5 B* O" ]) H& |$ c# O7 V; j6 }
    // Get the CWnd object from HWND, FromHandlePermanent will return 0!
) r8 G' ?" _% G6 C5 k    CWnd *wParent1 = CWnd::FromHandle(parent_handle);5 N4 n6 t$ j+ A3 T7 n
    ASSERT(wParent1);
8 j7 ~' d8 X- x5 W
0 N. j5 {+ W9 F6 T6 ~    // Switch module state to avoid Assertion from afxCurrentInstanceHandle+ [4 \2 x& y- V3 Z5 V2 x$ O0 U
    AFX_MANAGE_STATE(AfxGetStaticModuleState());
  {+ [9 T1 M& @# y: q2 u; u. r
2 l( N( t7 V+ Z5 W- N; Z, M    BOOL bSuccess = m_tree->Create(WS_CHILD|WS_VISIBLE|WS_BORDER|TVS_HASBUTTONS|TVS_HASLINES|TVS_LINESATROOT|TVS_TRACKSELECT,
. c  J2 q  C5 T0 L6 |. U        CRect(10,50,510,1810), wParent1, IDC_TREE1);' j1 e$ Q% G( V
    m_tree->SetImageList(&m_Images, TVSIL_NORMAL);: Y( b' b7 V3 b
. H% F: G2 L: g3 r
    Populate(displayPart);: n2 s! l  Q- N; o/ m
/ g, z2 I4 m0 k2 S1 D
    return 0;% n$ ?2 O( c$ D
}* d4 v1 ]$ g7 }8 ^( {$ A7 Z& j# i" Z

6 T" b2 h0 g" D6 s& J//------------------------------------------------------------------------------. ~7 r% e8 v" z7 F: _8 O. q" e
// getAttributes% }, S# H$ p8 ?1 I5 s, H$ Z
//------------------------------------------------------------------------------
( w4 ~# v7 S& m
游客,如果您要查看本帖隐藏内容请回复

8 @7 X& I2 |2 W+ _4 i8 a
; F& D' P2 g9 z* O
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了