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

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

  [复制链接]

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

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

admin 楼主

2015-3-27 11:17:17

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

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

x
# b% ~1 K# i, L
8 O  W; C6 ~: P; r! O, }* W

1 k$ |! g+ G1 C' l: B9 N8 P

( Y3 r$ f1 L+ M2 S9 t6 M% q4 qNX二次开发源码分享:NX10可以直接对资源条进行二次开发& A) ?, E" e1 }1 M' O" w
这是官方的一个例子,新建了一个资源条,使用MFC的Tree创建了树列表,并加载了所有组件的属性到节点上。
9 }- [+ Y+ T+ P# `
4 @7 i' z9 }5 `% X5 M$ }5 F+ N6 L// Mandatory UF Includes
* X% B0 T% V2 o- O4 B$ c: y$ b/ M1 V#include <uf.h>
( t. C1 W+ s7 @6 i3 C! Y+ c4 j' A7 y7 Q( k7 K' j% z6 ~
// NXOpen Includes
. j1 V9 b" {5 ^) G- i; r#include <NXOpen/Assemblies_Component.hxx>+ p  Q. i6 N& Y: g
#include <NXOpen/Assemblies_ComponentAssembly.hxx>
. N: B8 F: X- r, m" T8 A#include <NXOpen/ListingWindow.hxx>
3 \6 g) Z; C! E! M5 P+ U#include <NXOpen/LogFile.hxx># M9 P' I9 T7 x3 X! U, B; M. ], b6 C
#include <NXOpen/NXMessageBox.hxx>' f! p3 u2 a- v: |+ u! S0 B
#include <NXOpen/NXException.hxx>
9 B, w+ |* s; ]- z1 [; i+ v' ?#include <NXOpen/NXObject.hxx>, P7 m9 L# ]/ [2 ]4 P
#include <NXOpen/Part.hxx>
- v5 p- L0 x, D( Y1 ^; |8 A#include <NXOpen/ParTCollection.hxx>2 _4 H: z) q5 a; l
#include <NXOpen/ResourceBarManager.hxx>
3 S1 J. s; J; T( `: K- m$ a! K#include <NXOpen/Session.hxx>' E: n" [/ [: u- ~
#include <NXOpen/UI.hxx>
. B% x. z2 _$ _+ Vusing namespace NXOpen;: ^3 b- G3 \- P* ^  X3 V
using namespace NXOpen::Assemblies;
+ x/ e7 ~- o2 l8 y, d: Z5 R4 ]$ A8 I/ x
// Std C++ Includes
% d0 e/ `, M, g3 Z" P#include <iostream>) n$ W/ d/ ~2 h+ e  t. D
#include <sstream>' T0 e# j& @1 A) f; j5 w2 N8 R0 Q9 N
#include <map>+ g) [5 @/ t+ p( F' w% u5 T
using std::exception;
0 X4 c4 E4 c7 Lusing std::endl;  e2 n  H2 c% {3 G" N) H
using std::cout;3 M$ I6 y' L# J" z/ u
using std::cerr;
* a( S2 P" B, `) c2 h; m1 R- H  X! }! g( z6 J& ?# h
// MFC Includes: z( n9 z0 |$ F
#define _WIN32_WINNT 0x06010000 % g5 T  q- i. a- w& b1 b" n' ?
#include <afxwin.h>, G! u, r8 `  \' a. A$ {
#include <afxcmn.h>
# v7 S# g$ u- |9 n+ N# [: P+ D, T
3 w# Q# w5 z& L2 D, [#define IDC_TREE1   1002
) D6 O0 p. R  e5 Q# r" s' ~( h
% d- I  o3 l9 |! y2 \//------------------------------------------------------------------------------# Z$ U3 e* O  m% U
// NXOpen C++ class % r! q% y! q4 n4 d
//------------------------------------------------------------------------------9 Q) l1 V9 D5 E) O0 U. l
class MyClass
( S+ b6 V/ }. L{
* P+ u2 H$ i1 K// class members
9 j! Q$ r! y4 o5 Q% R8 h5 z& h* hpublic:
; V. V7 o8 f9 R0 ?; n" P0 Q; ~7 I! \    static Session *theSession;
0 g8 ]2 \9 y+ E$ V; o6 e) E. E    static UI *theUI;
% k4 c: {5 R) j. ~    static int m_tab;
, q/ _4 q9 }; ?7 _    static int m_cbID[2];
/ q3 \4 Y5 a+ Y6 R8 \% T' \6 |! ?* ~( W/ j0 p
    MyClass();6 Q- ~  i( q, ?8 ?3 e& u5 \
    ~MyClass();5 ~% L8 L9 T- ^- H9 l
- t) f' B! i9 w  t3 j/ v& e3 d
    void print(const NXString &);5 B' G9 c: D. x  j9 D6 E
    void log(const NXString &);* T% X5 l( a# r1 x# p, L" C
    void getAttributes(Component *, HTREEITEM);) k& ~9 D3 I: B. j8 n$ {
    void getComponents(Component *, HTREEITEM);) f% {3 L4 M3 z$ U) k& J* t
    int ActivationHandler1(int tab_id);
7 N9 T3 t. }. Y    void Clear();: d) T+ E' c5 F; G
    void Populate(BasePart*);0 a6 {# ?# b- r) e. g  o
    void cbPartOpened(BasePart*);
7 C9 N% R; s0 U/ D2 G. H    void cbPartClosed(BasePart*);
" y1 e8 g' D, Y$ H' q7 `& u( B* m) E# ^
private:
& d/ E' Z9 S. B; n, Q    Part *workPart, *displayPart;  ]- k5 X, [# i& A7 M
    NXMessageBox *mb;# V4 y9 x0 f+ F4 g! S0 C# p! H7 ?' T
    ListingWindow *listW;
. s0 Z4 ~* e$ ?! k5 Y    LogFile *logF;8 W1 H' Z6 U+ W0 p6 o
    CTreeCtrl *m_tree; % h7 T6 t2 R1 f3 }
    CImageList m_Images;
% R1 P0 a0 D0 ]( {- `* B};
  d; H0 d* w. F8 a, \0 e: Q2 t+ D/ T6 D8 S. Y/ o. L+ R
//------------------------------------------------------------------------------+ P& G# a$ k& q  j1 D/ e. }) g5 O
// Initialize static variables" n# Y3 T: w: J
//------------------------------------------------------------------------------: W' S4 Y8 F5 k( I  O! w$ ~
Session *(MyClass::theSession) = nullptr;( b' o1 R  M( v& I8 x/ J, Q
UI *(MyClass::theUI) = nullptr;
: G4 a, o! z) i8 X7 \2 n9 Bint MyClass::m_tab = 0;0 j0 ]% K' T( ?: @) S" u
int MyClass::m_cbID[2] = {0,0};
( g! R- u( {4 J3 Z) q1 z  D7 [$ l3 J
MyClass *theApp = nullptr;
5 c& W4 _: `- g" k& d0 U- t
  O+ y% ?* l' O- T' }, r2 u) S//------------------------------------------------------------------------------
+ Q7 `& Q2 b5 r3 l" a1 `6 Y// Constructor % J. R6 ^% H9 ^# L+ x, X2 V
//------------------------------------------------------------------------------. S& E; [8 n6 h( [# A
MyClass::MyClass(); \& x. R# T9 L5 h- E  [* W$ L, S
{
0 A* m4 y3 c" W; u$ G    logF->WriteLine("GTAC: MyClass Constructor");# l5 `1 Z2 J2 Z2 d( U
    theSession = NXOpen::Session::GetSession();' J2 v$ _4 {% A& g0 z0 g% V) s/ @
    theUI = UI::GetUI();
5 `$ Y8 j# ^- h- }+ v' C' I0 r    mb = theUI->NXMessageBox();  {6 O' r6 @! E  z4 z7 g7 M8 O( W; W- s
    listW = theSession->ListingWindow();# U# f  f8 o4 I' Z: O% V
    logF = theSession->LogFile();
# E0 E6 X( e: r  Z
* W6 {4 N) P: m) _) |$ |    workPart = theSession->;Parts()->Work();
" U& _4 j0 l- u% q. F    displayPart = theSession->;Parts()->Display();! v4 x, Y' A# @

9 Q& X6 M) u6 {2 w$ B    m_tree = new CTreeCtrl();) z* T5 a* E; C' @; }2 O2 e

7 t( E: e  u) L    BOOL bSuccess = m_Images.Create(16, 16, ILC_COLOR32, 0, 2);% h& k; M( r2 L! ?1 P
    int index = m_Images.Add( AfxGetApp()->LoadStandardIcon(IDI_WINLOGO) );
" u5 b8 N$ c" G1 U& U    index = m_Images.Add( AfxGetApp()->LoadStandardIcon(IDI_INFORMATION) );1 {9 O1 X# p7 d. R; _
0 `( [$ T+ l1 p# R' ~1 r+ L! C
    m_tab = theUI->ResourceBarManager()->ResourceBarManager::Create("Assembly Attributes", "ant_component_mode");: a( }8 P9 G4 P, P( B: P3 k+ X
    theUI->ResourceBarManager()->ResourceBarManager::RegisterActivationCallback(m_tab, 3 }0 X) R0 c% p# p& _
        make_callback(this, &MyClass::ActivationHandler1));
3 _( u: C6 p+ C/ [( }    theUI->ResourceBarManager()->ResourceBarManager::ActivateTab(m_tab);2 u: g8 G. ^" V4 x
. y! y8 M# {7 p3 ]& f& {
    m_cbID[0] = theSession->;Parts()->AddPartOpenedHandler(make_callback(this, &MyClass::cbPartOpened));
5 _, ^! I# X& x' R2 p    m_cbID[1] = theSession->;Parts()->AddPartClosedHandler(make_callback(this, &MyClass::cbPartClosed));; D7 v2 U, z7 R; W% L. G+ D
}
5 G' ]& b  o8 F4 \
9 G! H8 |( a7 Z4 W! }3 a5 Q//------------------------------------------------------------------------------
5 k1 A2 V" R2 y- R// Destructor
1 i) X" ^" z: \; s6 [//------------------------------------------------------------------------------7 Z& N0 i9 g) v3 {4 }6 _
MyClass::~MyClass(): ~$ Z6 R5 q7 D
{& V/ P1 y# e+ |8 H8 n+ L
    logF->WriteLine("GTAC: MyClass Destructor");) T) t4 k  G) D" J5 Z3 K4 E; E' E
    if( m_tree->GetSafeHwnd() )
9 B% E: m& V7 U, F, m  Q7 ]# E    {$ S9 e) f0 I+ c. C+ u
        BOOL bSuccess = m_tree->DestroyWindow();
2 n/ c; t$ `' u. X. A2 l    }
% M% z& C4 \' H$ x* x
& E( u3 k- \2 r' C* n    theUI->ResourceBarManager()->Destroy(theApp->m_tab);
. v8 L1 F  p6 l1 Z    theSession->;Parts()->RemovePartOpenedHandler(m_cbID[0]);
6 w+ L9 `3 _+ }; M% Z# L9 _  m& T# @    theSession->;Parts()->RemovePartClosedHandler(m_cbID[1]);) i, m6 v6 i4 L5 j8 K/ o) r

8 J# A5 F; I4 E}
% g* Q( a# L' I2 H) a1 `7 W0 j$ j5 j  h0 g8 ]9 t; I
//------------------------------------------------------------------------------
$ o/ L" R) A' ?4 H% J/ W( T$ V// Print string to listing window and/or syslog
4 h, N2 b, C6 [//------------------------------------------------------------------------------) l* V3 _) X( I3 P# I" f
void MyClass::print(const NXString &msg)
4 P( j! {$ w% e2 d  a$ x{
8 Y" ]" t7 q! K- _% K5 q    if(! listW->IsOpen() ) listW->Open();. _2 q$ p$ v9 C& K
    listW->WriteLine(msg);
; `& G% L. z. }6 H$ X! {}. E' B: T9 ^: W$ \0 }: ]" ]
void MyClass::log(const NXString &msg)6 @! G1 n! v3 n
{* k2 S. ]: h- c/ _
    logF->WriteLine(msg);' J+ u$ [6 L, v# f7 I
}) ?* O$ ^2 c: M1 Z; D  j

  i' a9 O& m/ z( a( J" ?4 [3 R2 r// Callback triggered when opening resource bar tab9 N- x4 k8 H, w
int MyClass::ActivationHandler1(int tab_id)3 h( w8 ^, j* V7 F% O- A% U
{4 O0 h3 \* J5 i0 |2 G4 i" R
    // Get the WindowHandle object4 u# x* q! H4 X9 t( j) v& r
    WindowHandle *window_handle = MyClass::theUI->ResourceBarManager()->GetWindowHandle(tab_id);
& Z9 H( _. u- ]& G) L* y    // Get the real handle2 r6 y' S/ P0 s' ]' [
    HWND parent_handle = (HWND)window_handle->GetHandle();
$ L0 q4 b% d; z+ ?2 E    // Get the CWnd object from HWND, FromHandlePermanent will return 0!
* ^: E: I* I: B& H    CWnd *wParent1 = CWnd::FromHandle(parent_handle);
" x% ]  o( r; j+ d% _6 L    ASSERT(wParent1);( |  K* o& l) J% F. e' d
4 m* i- V5 @3 ]4 P4 I- z
    // Switch module state to avoid Assertion from afxCurrentInstanceHandle
+ G3 {$ Y% e/ y$ @, C5 n4 |# V    AFX_MANAGE_STATE(AfxGetStaticModuleState());
" m& |/ W' C( t/ Q7 k( Z- h8 [! t# l5 j8 D0 i# b$ F
    BOOL bSuccess = m_tree->Create(WS_CHILD|WS_VISIBLE|WS_BORDER|TVS_HASBUTTONS|TVS_HASLINES|TVS_LINESATROOT|TVS_TRACKSELECT, 4 h2 n9 c7 X5 L% E+ Y' U
        CRect(10,50,510,1810), wParent1, IDC_TREE1);
/ [9 T1 N& ^0 V( E- `% C! a! t    m_tree->SetImageList(&m_Images, TVSIL_NORMAL);
8 A5 Q% m" d8 b. E( ~- Q# P/ x* M' X% h2 \
    Populate(displayPart);* q% g6 v5 D% R6 E. ]( A

) {5 y, }4 u) J" W0 }    return 0;
: y) c- X' g/ S6 I. v1 I9 {4 i}- A+ v7 h7 u* B1 H$ |. ?

/ T+ K; i; o% \) ]9 A//------------------------------------------------------------------------------
, Y* Q* i3 A" g1 \2 k// getAttributes, _& _6 d3 Y' I$ J- r/ r
//------------------------------------------------------------------------------+ B# R4 }0 k& t/ Z
游客,如果您要查看本帖隐藏内容请回复
! |4 B9 h% t0 [$ y4 {

5 g: G2 Q4 j/ L1 d1 h
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了