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

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

  [复制链接]

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

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

admin 楼主

2015-3-27 11:17:17

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

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

x

/ B' M' @% j3 J! J& v2 e: O
' J! C" e! w3 D

) O( e5 P/ p/ U. [  Z. `5 u$ y( f
! {. u, f  D. S# G
NX二次开发源码分享:NX10可以直接对资源条进行二次开发
, |8 K9 z3 ]" F9 g7 s1 }' ~2 D3 f5 i0 a' j这是官方的一个例子,新建了一个资源条,使用MFC的Tree创建了树列表,并加载了所有组件的属性到节点上。1 t0 b+ K# R! U7 d
4 t0 y+ A& y% r& w; w& g" P
// Mandatory UF Includes4 F3 {$ Z/ A3 t" J% N2 B& w
#include <uf.h>
% A+ e$ {* `) j; X3 k: W8 g+ ~/ S
// NXOpen Includes- N* U! T8 X6 ?2 I' b0 X0 o
#include <NXOpen/Assemblies_Component.hxx>
4 @/ A# N, a" s( z4 T#include <NXOpen/Assemblies_ComponentAssembly.hxx>
/ j( r# H7 ?, R: ?9 D& R#include <NXOpen/ListingWindow.hxx>
$ t& c, j  X7 a, d& D6 h" E#include <NXOpen/LogFile.hxx>! b2 A9 v7 [) L
#include <NXOpen/NXMessageBox.hxx>( s/ ?% Z+ ^1 ~+ {+ A. e
#include <NXOpen/NXException.hxx>
. L4 X* A# d: @" e8 b9 S#include <NXOpen/NXObject.hxx>
+ j8 w9 |4 u* G#include <NXOpen/Part.hxx>
' Q% t' O7 b8 k$ S& I. s# @#include <NXOpen/ParTCollection.hxx>  l7 E" |' v% t; L* G; E
#include <NXOpen/ResourceBarManager.hxx>
$ s. i, N  K* Q3 p( O1 T#include <NXOpen/Session.hxx>
' T1 S( P4 O/ r, @, [# ?& Y  b#include <NXOpen/UI.hxx>
, K7 T/ ?  L; v9 u( D5 v/ Iusing namespace NXOpen;5 ?$ w# u! r( Y2 m! u4 f
using namespace NXOpen::Assemblies;
1 j1 h, [; U+ _
& ]7 J" ~4 r  w// Std C++ Includes
. }: j- j+ L6 ?6 _2 r#include <iostream>
! V, X6 p. y, ]6 }( ]! R. C; t#include <sstream>
  ~- v1 C8 k( |8 C8 Z* U/ t" ^6 ?#include <map>
5 ?- F! e* j+ ]using std::exception;
2 t; N1 g" c" Z$ Tusing std::endl;+ F4 i' a+ ~4 k/ [" ]% n
using std::cout;' R7 k. o+ [, O  a8 `/ ]. U
using std::cerr;
( v& [, O( Y+ w# x
- a' ]* M& E5 W# Q// MFC Includes
, S  M. W7 ~) \0 Y' {, Z#define _WIN32_WINNT 0x06010000 9 k/ H# }% K1 [- W: x
#include <afxwin.h>
+ u- S* ?3 L& Z3 H- L7 u( Q+ Y#include <afxcmn.h>
+ ^. k  A0 q( S- _* K6 O' \" j) P8 X, S# B9 l( a) T7 R; x% o5 S3 E) p
#define IDC_TREE1   1002! h3 j" a& g" n5 v  v

0 @: C' [7 I1 l" V! r//------------------------------------------------------------------------------
- Q+ ?& R) d2 y0 o8 N! ~// NXOpen C++ class ) L+ t' E- @) S3 @
//------------------------------------------------------------------------------
6 I6 V7 n6 e. a4 {' dclass MyClass" v4 H& W6 c6 L
{
" N; \9 z6 f. S! v0 v1 H// class members
% @* a. j- _1 w/ k' x: E% y8 q8 m1 e2 H# xpublic:
7 T! W4 d; c% B# \. w! M7 p! ^4 n    static Session *theSession;8 O/ g3 ?. U  N% ^9 d- T
    static UI *theUI;
- l1 e$ p! K; K$ Q6 J    static int m_tab;
  ~3 ?* w+ U( f+ Z9 B    static int m_cbID[2];
( T, K) L5 h5 o0 q9 P% R, j, o( `" D3 O) I0 r- W
    MyClass();
- U# C7 x/ P5 b1 `) f    ~MyClass();/ G2 g8 R: N9 E: G9 m7 n/ U

- A0 a8 N6 b" Z9 ]" U( V, z% J    void print(const NXString &);
; M- k) v( Q; U9 |4 W  c6 ^" I! o    void log(const NXString &);
. i! r" l! x. ^4 ?    void getAttributes(Component *, HTREEITEM);
& Y0 [! A# G; u# Z+ A    void getComponents(Component *, HTREEITEM);' ?+ x( _) u, {6 L
    int ActivationHandler1(int tab_id);
2 X) n0 [. J1 X4 y7 A% d0 J& J- J    void Clear();
* I, E% @' v6 v1 a( E' W    void Populate(BasePart*);2 q' A, L( a4 i! u& p( |
    void cbPartOpened(BasePart*);% W" z# Y8 y: t0 u
    void cbPartClosed(BasePart*);) S6 O. `# D7 s7 c0 j
; D2 |! @9 o0 m" m8 e8 D! B
private:9 J  }8 V( I3 G6 `! H
    Part *workPart, *displayPart;
2 I* K. `, N0 u+ G. U& Q    NXMessageBox *mb;8 F4 v' T& O* Z4 f1 Q
    ListingWindow *listW;
+ N, ?0 z) J  M* c    LogFile *logF;
7 s# k; I# G+ k) G. y7 y  V: T6 e    CTreeCtrl *m_tree;
  V7 n, i4 X& n  ?" K& ?9 G/ U    CImageList m_Images;9 L/ Z0 i0 D' c+ Y; U
};
  R8 }+ u" ~: M
# F! D  ^1 u9 j+ z//------------------------------------------------------------------------------
% C8 l/ H7 w% }// Initialize static variables; }" S2 @$ H! V1 t6 I
//------------------------------------------------------------------------------$ f' f$ Q# {4 t9 y! r& O+ n# w
Session *(MyClass::theSession) = nullptr;0 S" o8 o" Y& ]$ d( F  H; N" ]
UI *(MyClass::theUI) = nullptr;
/ @; C4 f! ]. n. O7 Uint MyClass::m_tab = 0;
: Z! b) D1 j$ q( R0 o+ l1 Fint MyClass::m_cbID[2] = {0,0};& s$ ?1 [. a: g; E9 V7 Q

5 ^& F: B, |" }  _3 x0 eMyClass *theApp = nullptr;1 i! S, l4 C3 X: ]$ ^# {
3 R# {: R% ^; B/ D2 N( C
//------------------------------------------------------------------------------
9 p, m" {# _4 p// Constructor
4 D0 t) C2 E; y7 Q, l" W7 O//------------------------------------------------------------------------------- a5 P% [# V. M1 R
MyClass::MyClass()4 w' b; u5 {- V+ z$ x" j! z
{7 N: [1 S- S5 K  J
    logF->WriteLine("GTAC: MyClass Constructor");! R) D. g, h4 H; a$ J& j! F* M
    theSession = NXOpen::Session::GetSession();- g" c; t$ u) K* J+ T3 @) ]% y
    theUI = UI::GetUI();
0 F! _3 P+ Y& P" u7 J: U    mb = theUI->NXMessageBox();
: B+ g* ]" g5 [8 J/ i    listW = theSession->ListingWindow();: z! V8 V) y1 r+ D! q2 R
    logF = theSession->LogFile();
6 G& E- t( Z' V
+ o0 m& Z) r# k( A    workPart = theSession->;Parts()->Work();5 C& H' {$ E- `8 `, \
    displayPart = theSession->;Parts()->Display();
8 {& E; X8 _" o* D% n- U5 h
: p3 U5 P4 _# G0 S2 }4 }2 N& x    m_tree = new CTreeCtrl();7 p2 r4 |& M: ~; s9 c

' c- X; H4 }& M5 s2 c+ x+ U: K    BOOL bSuccess = m_Images.Create(16, 16, ILC_COLOR32, 0, 2);5 |5 Y' b2 @& K& ~
    int index = m_Images.Add( AfxGetApp()->LoadStandardIcon(IDI_WINLOGO) );0 C  a4 ]) d& V8 }( o
    index = m_Images.Add( AfxGetApp()->LoadStandardIcon(IDI_INFORMATION) );- _- f* p; \: z0 z  i
3 v6 _" e# a6 Q9 o3 e( a
    m_tab = theUI->ResourceBarManager()->ResourceBarManager::Create("Assembly Attributes", "ant_component_mode");
( ^: Y7 k# i+ S! o1 C5 L    theUI->ResourceBarManager()->ResourceBarManager::RegisterActivationCallback(m_tab,
0 i1 ]' {( a- f5 l+ O" T        make_callback(this, &MyClass::ActivationHandler1));
; i" p- d4 @8 w+ T8 ~    theUI->ResourceBarManager()->ResourceBarManager::ActivateTab(m_tab);% r; @0 T; T8 _$ Y" i, f

! `- i1 `1 O' j    m_cbID[0] = theSession->;Parts()->AddPartOpenedHandler(make_callback(this, &MyClass::cbPartOpened));
  r1 n% y! ]' \4 M' _" O& R    m_cbID[1] = theSession->;Parts()->AddPartClosedHandler(make_callback(this, &MyClass::cbPartClosed));
# P0 Y, V& [; \  V4 v}
$ }! c/ N, _4 X: \! i7 w7 x1 N( j
//------------------------------------------------------------------------------& J& b- C& Q4 @5 t  N* k
// Destructor( |3 |2 T/ h; u2 A8 Q! P$ z7 w
//------------------------------------------------------------------------------' [- J. ^  J6 [$ @9 r
MyClass::~MyClass()6 d: j( L# z* v1 s* x- Q
{
, M6 d' Y3 [' h, k( ~7 n, I    logF->WriteLine("GTAC: MyClass Destructor");- p' T8 Q5 H7 G5 r4 c* C0 E$ \
    if( m_tree->GetSafeHwnd() )
1 R+ K) u1 A# a4 u8 P    {
" B* X3 e/ g. w        BOOL bSuccess = m_tree->DestroyWindow();
" b) t& L1 G; O8 _    }- d8 C( p' o( n1 U
& c& [4 k& H1 ~
    theUI->ResourceBarManager()->Destroy(theApp->m_tab);
" S. J+ k1 v/ w; _    theSession->;Parts()->RemovePartOpenedHandler(m_cbID[0]);$ g5 p# J0 z/ e5 i; m3 G1 s
    theSession->;Parts()->RemovePartClosedHandler(m_cbID[1]);
6 c/ \# J$ N& j( z+ H$ f8 o- e8 f; Y, D+ F) i2 |4 B( d- ]$ c
}
, G# z# }0 C# r8 H/ ]7 b, W  l/ _+ R
$ p" _* I/ x( }0 }$ v, ]/ G//------------------------------------------------------------------------------
: U6 U5 s5 G4 b// Print string to listing window and/or syslog# j; R9 y1 i& Z6 |0 ^
//------------------------------------------------------------------------------& \- L, n6 s+ I8 u9 C9 r# Y6 ]
void MyClass::print(const NXString &msg)0 f" F, F3 `! H4 @' H9 `( u0 \
{( i# X6 O, p8 W
    if(! listW->IsOpen() ) listW->Open();. u+ E7 r) s& ]) l' p3 S( s
    listW->WriteLine(msg);
! V1 O! Y' \5 c}* i2 ~0 q/ \& _. I, i3 z; U
void MyClass::log(const NXString &msg)) S  }1 z; R' e* f9 q
{, F: R1 Y$ ]& N+ I3 \0 v
    logF->WriteLine(msg);( F# H) @5 C7 n) }2 C
}) i: z$ @* V7 h) J. l0 h

- z9 z# n- _: G- z( O! E// Callback triggered when opening resource bar tab/ s. C1 {/ Q3 c3 B
int MyClass::ActivationHandler1(int tab_id)
) ?2 ~* S2 E+ n9 R- z% B& B{
% m9 c# G* u/ K! d. b1 [    // Get the WindowHandle object
+ e! E1 K  q- H8 V" a    WindowHandle *window_handle = MyClass::theUI->ResourceBarManager()->GetWindowHandle(tab_id);" T7 {1 k" w2 `+ T3 q: z
    // Get the real handle* B$ e& [  _  a7 q. r: C! f
    HWND parent_handle = (HWND)window_handle->GetHandle();
/ ^2 H$ N4 r! o' z0 _    // Get the CWnd object from HWND, FromHandlePermanent will return 0!/ h, N" c9 C7 v7 U: o& k0 q6 c. o# d, {
    CWnd *wParent1 = CWnd::FromHandle(parent_handle);4 T. }- [9 H; C6 j& M
    ASSERT(wParent1);; S* @+ i7 R9 u0 \4 u9 k

& F! u* s: {" [    // Switch module state to avoid Assertion from afxCurrentInstanceHandle* G6 N1 Z* Y2 z8 N  p) z
    AFX_MANAGE_STATE(AfxGetStaticModuleState());# a6 _- n1 k2 ]

0 m! C# f  X6 P+ j4 i' F    BOOL bSuccess = m_tree->Create(WS_CHILD|WS_VISIBLE|WS_BORDER|TVS_HASBUTTONS|TVS_HASLINES|TVS_LINESATROOT|TVS_TRACKSELECT, . r: O$ s1 f: C8 J
        CRect(10,50,510,1810), wParent1, IDC_TREE1);
: ~: t1 x  H/ c7 E    m_tree->SetImageList(&m_Images, TVSIL_NORMAL);
- r' }; w$ E- u8 f( `
  o" Z" c8 Q1 i, k    Populate(displayPart);4 V' x1 o+ `+ K5 }0 L/ {$ `
1 a; s, f' d2 I- ~3 q8 u% v. {
    return 0;
" M9 Y: Z8 w( e( ]2 g}
. n* m3 F9 m) X' F, v- A1 u: x: C3 E, L- h/ Y; X0 E8 C
//------------------------------------------------------------------------------* }# n4 `) U3 `: T
// getAttributes
) S5 r, e; W6 Y8 y9 S! P//------------------------------------------------------------------------------
: C9 ~/ I3 E) N" ^8 B1 s$ @# d* ?
游客,如果您要查看本帖隐藏内容请回复
1 a4 J/ E' d/ ^* s
+ }: r7 s) m& d5 ^
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了