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

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

  [复制链接]

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

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

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

x

; a2 U3 x7 [# J& X- e) X* m

3 A# D0 T% l& G7 Z3 [
6 @7 T9 ^! w! J2 Q8 ]

1 T6 m5 O$ J/ d( n' ?; ZNX二次开发源码分享:NX10可以直接对资源条进行二次开发+ c3 ~4 a2 n7 l! B
这是官方的一个例子,新建了一个资源条,使用MFC的Tree创建了树列表,并加载了所有组件的属性到节点上。
0 u1 n- Y5 M3 t! t& {) R- K
# O8 z) |! E, w$ l  c! M- L' Q// Mandatory UF Includes& C! V! X8 h* W: C1 V9 g
#include <uf.h>; z1 s& v% ]0 `5 o" r5 Y1 X0 \
4 Z6 b" K7 q4 \8 R1 H
// NXOpen Includes
9 f& u& \; Y  Y7 v' u7 _& I7 p#include <NXOpen/Assemblies_Component.hxx>
3 c1 u/ x0 Y' F2 k/ R3 L#include <NXOpen/Assemblies_ComponentAssembly.hxx>. w5 E. h0 f; ~" i1 |3 {+ ~* n. v, `
#include <NXOpen/ListingWindow.hxx>
: ^& l% {9 n( B) e% \#include <NXOpen/LogFile.hxx>
6 S( l- [. ^  K$ p/ n#include <NXOpen/NXMessageBox.hxx>
7 n/ p: z8 T% R- ]3 d#include <NXOpen/NXException.hxx>
2 _  o- A' m- ^$ L#include <NXOpen/NXObject.hxx>+ g" k- ?+ u4 ~( F% j" d( @! d
#include <NXOpen/Part.hxx>1 _0 O7 G9 l- c
#include <NXOpen/ParTCollection.hxx>8 L) S0 `4 Q: z' [- N2 r
#include <NXOpen/ResourceBarManager.hxx>2 Z% i" I( w( e
#include <NXOpen/Session.hxx>, k; W4 ]  X5 Q1 |$ p" O7 {# f0 ~
#include <NXOpen/UI.hxx>1 ^  i% b: O& r6 Q9 {
using namespace NXOpen;
7 a6 v5 _$ i& h+ D: s% i. Gusing namespace NXOpen::Assemblies;
* ]- X3 ~% S" _6 ]! q, G6 u
: p  c0 {, b8 q9 e6 @// Std C++ Includes
( Z) T5 @" }$ C#include <iostream>
! G4 E# k7 }; @; m5 T#include <sstream>
! C( P8 B* R- k8 b  \4 L" l#include <map>- G$ r; }* e  A. h1 _; |
using std::exception;
7 M9 R( \8 B+ ~- ^using std::endl;% g5 A  X) I7 z3 `5 t: ^
using std::cout;
. ]4 p  k8 q% T5 o2 [5 ?using std::cerr;$ x; d, |& x( h* u! Q9 x4 }0 d

+ h" K) L4 A4 c' D// MFC Includes
& k& {2 g; ]: d! k3 x#define _WIN32_WINNT 0x06010000 ; t* ~# I' n3 ~# @4 O, P8 ^5 g
#include <afxwin.h>
4 B' ~4 [" ]7 A; u$ D# U#include <afxcmn.h>- \$ U' l& L5 d9 ^9 C
4 U3 n2 M$ i# Z$ p9 l
#define IDC_TREE1   10026 f) ]6 W; {' {- P: l
2 n3 p- q( e& w' z1 t
//------------------------------------------------------------------------------
2 j5 {" R7 i+ X2 m// NXOpen C++ class
2 [5 z  q2 [7 w( x, R) I, {0 q//------------------------------------------------------------------------------
; |- R0 t/ M0 B2 d5 bclass MyClass: ?6 H+ V+ C1 S7 a, X: y; H
{
5 z' k, Q4 Q6 \) m' C1 {* {- v// class members
( R8 S6 k3 l& ?public:
; c$ j6 s1 q' ?4 V1 P' q; @8 G: e    static Session *theSession;( [; t& u% n5 K0 l  {2 }
    static UI *theUI;
( G6 E( a$ t# Y% P5 H    static int m_tab;/ p& R+ k1 [3 C6 l. s1 H( ~5 l, g
    static int m_cbID[2];
8 D3 E' ]8 F9 j; _) p* a! D) V0 |. T1 Z8 {0 E/ T. C
    MyClass();; A$ |# c$ ?$ x: _
    ~MyClass();8 N; `( N/ X* Q5 |/ v; H

7 ^( N2 c4 a+ }* H, i* t- E    void print(const NXString &);
0 T2 ^& L/ O$ X1 o; D) L" c8 ^    void log(const NXString &);
! u& f  l- T' s# d. G    void getAttributes(Component *, HTREEITEM);
6 y6 H# R# y5 L- d/ ~: x    void getComponents(Component *, HTREEITEM);
% _6 W( N! x$ s. y    int ActivationHandler1(int tab_id);
  u8 v# G& f" Q! I. Z* I    void Clear();% W( T+ }4 c! S- f. E
    void Populate(BasePart*);
8 P. h/ [) D% n5 l& B9 b    void cbPartOpened(BasePart*);
4 U5 X6 S% h1 f9 o  \    void cbPartClosed(BasePart*);( H, f3 Z: G* K) L: p0 ?0 q

: |) ?. W5 U8 x8 m# z" f# _private:, _' g  Z6 H+ i: p( A; e& {
    Part *workPart, *displayPart;
" g- ]& y9 l; [    NXMessageBox *mb;
6 p9 I+ l2 }! u: _( Q; u    ListingWindow *listW;/ D  ]3 G1 O2 y! w5 D
    LogFile *logF;3 t: `& V0 `8 L" ^
    CTreeCtrl *m_tree;
7 p7 o: ^. O9 h( U7 ?( L. Y    CImageList m_Images;
2 m* k8 r; f. T1 w5 G};
2 W  B8 M# b6 Q  \5 s6 b6 _0 J
. q0 G7 R: T6 U  X//------------------------------------------------------------------------------3 U- ]8 C4 R! g0 }; X' k
// Initialize static variables
. q. H. S. i: S, i$ r) m3 e, c//------------------------------------------------------------------------------
% g8 V6 A* m, ^: U! o% OSession *(MyClass::theSession) = nullptr;
* K3 P" X3 n+ v/ N/ A* ~UI *(MyClass::theUI) = nullptr;) F+ t4 Q7 V! [  V3 M
int MyClass::m_tab = 0;
6 O  N# l1 t4 f" `6 w! @int MyClass::m_cbID[2] = {0,0};
* E) x# t6 f4 o3 b8 z* }
- Y: W+ i+ _/ OMyClass *theApp = nullptr;
$ |$ h$ n! }/ Z0 f, q- |3 E. P4 H- |+ [" ~+ ]! D$ u1 N2 M
//------------------------------------------------------------------------------
& v4 j) U8 `, D8 X// Constructor % X/ R  K4 N# a7 b) \
//------------------------------------------------------------------------------9 E( z/ L% d6 |5 _7 [2 F
MyClass::MyClass()
+ ], h( H# `6 ?' {{
) \& X. {2 ]9 t$ L3 Z/ t9 c$ K8 `    logF->WriteLine("GTAC: MyClass Constructor");
3 B$ `3 _# h( k& s    theSession = NXOpen::Session::GetSession();; A7 U$ y7 {' a: K2 e: U; e" [
    theUI = UI::GetUI();: Z7 [* ^" `1 h' U2 \
    mb = theUI->NXMessageBox();6 F! W3 \2 n+ Z
    listW = theSession->ListingWindow();
- z- [. f' p+ g    logF = theSession->LogFile();4 g2 h: I+ T( M& y  [6 S! P
  m% I: e) m  B" h( f
    workPart = theSession->;Parts()->Work();
. r/ ]) }0 C0 w! R    displayPart = theSession->;Parts()->Display();  |( u: r) ^* k% }$ v) H
& u% A2 U' l+ @( M' U' V
    m_tree = new CTreeCtrl();
. B6 U" c. _1 a% I/ O, E3 k$ J, a. v- i" V2 O' h. r3 H: E# y
    BOOL bSuccess = m_Images.Create(16, 16, ILC_COLOR32, 0, 2);- C2 W3 Q7 H! v( z$ k% g( H
    int index = m_Images.Add( AfxGetApp()->LoadStandardIcon(IDI_WINLOGO) );$ D" O! b& p6 A) \2 z! K& A* }
    index = m_Images.Add( AfxGetApp()->LoadStandardIcon(IDI_INFORMATION) );
# t2 M' n& |+ ]) v, ^4 s" i9 v  I$ l
    m_tab = theUI->ResourceBarManager()->ResourceBarManager::Create("Assembly Attributes", "ant_component_mode");3 N2 D" [/ ]+ l) v
    theUI->ResourceBarManager()->ResourceBarManager::RegisterActivationCallback(m_tab,
/ o9 {2 T; f" _+ \  t' Y- _0 A7 u4 v        make_callback(this, &MyClass::ActivationHandler1));+ f. q3 q& w: ?/ E5 ]
    theUI->ResourceBarManager()->ResourceBarManager::ActivateTab(m_tab);
& z; O4 R* I. K0 T8 S( o: u+ U# b: a& i3 ^3 l; T& K( S
    m_cbID[0] = theSession->;Parts()->AddPartOpenedHandler(make_callback(this, &MyClass::cbPartOpened));
$ I/ u( l5 b6 q% x    m_cbID[1] = theSession->;Parts()->AddPartClosedHandler(make_callback(this, &MyClass::cbPartClosed));6 |. |9 ?3 x1 N
}
- V, c5 r# ^4 o4 j3 x4 v. t1 k4 Y- h" a: K- G9 w( G
//------------------------------------------------------------------------------
) [! ~# B6 s2 N8 ~. K6 m* V// Destructor% z6 e. z* C6 F$ \
//------------------------------------------------------------------------------) K2 k, X9 R2 y4 N8 ]: O7 J
MyClass::~MyClass()) t2 u2 I( e$ m6 m" ?  c  s7 b
{
& e: m. p4 H& ]$ a8 T+ w    logF->WriteLine("GTAC: MyClass Destructor");
  D' v. ?$ Y: c# H1 t- A: A# [- R    if( m_tree->GetSafeHwnd() )0 ?) S; x- `% Z# s0 A8 v
    {
8 l6 `& Z, \, b$ D8 t" }. z        BOOL bSuccess = m_tree->DestroyWindow();4 P. }9 \/ m) A
    }
& I: a0 `( I" U: i1 r) l  P: K" c
5 o% ~5 [" v; K- O    theUI->ResourceBarManager()->Destroy(theApp->m_tab);
- A- r/ C5 V5 e! t' y' x# ]1 U    theSession->;Parts()->RemovePartOpenedHandler(m_cbID[0]);
$ K& L. N2 E7 }& {    theSession->;Parts()->RemovePartClosedHandler(m_cbID[1]);# O# N  W7 C" t6 e8 [8 ^- `

) Y5 s  Y0 e* n6 j7 u6 r}
4 _6 D& A8 I% P* c- x/ p6 }+ d+ ^  a- @. \) a% G1 h! N
//------------------------------------------------------------------------------
; w3 u. V2 {% x// Print string to listing window and/or syslog/ W6 v! X9 l( @( V! }/ S
//------------------------------------------------------------------------------
& A7 {5 d7 f( ~6 cvoid MyClass::print(const NXString &msg)
4 C: N  l& `2 Y  v{
/ r5 j' k# O/ w) _# _    if(! listW->IsOpen() ) listW->Open();" }* P$ q2 {& s( h
    listW->WriteLine(msg);9 G" C3 S3 u* i7 H" m3 A; M5 G
}
% e6 X$ ^- ^6 O' l6 Rvoid MyClass::log(const NXString &msg)2 q6 [+ z" a" e& h
{
5 e) g- I. O% w  e$ l) h& C3 y    logF->WriteLine(msg);$ Y2 v* _4 L1 k3 D, }. ~
}: [9 }& Z+ Q% J

9 y( l4 P% t/ p" @, Q* H// Callback triggered when opening resource bar tab
$ S  Z, S! i+ g3 f0 ~4 yint MyClass::ActivationHandler1(int tab_id)- [1 N) g0 l5 X6 \# k) |; l
{0 ?  E5 Y# S' s9 L3 t6 O' x0 N; D) Z/ Q
    // Get the WindowHandle object6 l/ ~& i$ A) @0 I' P
    WindowHandle *window_handle = MyClass::theUI->ResourceBarManager()->GetWindowHandle(tab_id);
. j2 g; ~+ p: a' G0 N) h    // Get the real handle
8 K) E6 g; [) E4 Y: n2 R    HWND parent_handle = (HWND)window_handle->GetHandle();
+ x0 s1 U$ K- y$ T2 m2 A    // Get the CWnd object from HWND, FromHandlePermanent will return 0!& p0 \  o9 p  _5 Y9 }; c
    CWnd *wParent1 = CWnd::FromHandle(parent_handle);2 c& X6 s' E; M8 O! q9 c6 n
    ASSERT(wParent1);
8 i9 z+ X: }. x. b
# h  q5 C2 X3 u9 n9 v6 H9 c7 @    // Switch module state to avoid Assertion from afxCurrentInstanceHandle
' p9 {; {4 Z/ T# ^* J/ k0 H. _    AFX_MANAGE_STATE(AfxGetStaticModuleState());
3 u- J& t4 p% h: |- P3 W7 v& ?2 O' N/ S7 R
    BOOL bSuccess = m_tree->Create(WS_CHILD|WS_VISIBLE|WS_BORDER|TVS_HASBUTTONS|TVS_HASLINES|TVS_LINESATROOT|TVS_TRACKSELECT,
, A- k" D9 M7 m! O9 }/ V; j! [* X        CRect(10,50,510,1810), wParent1, IDC_TREE1);
$ l- |- ^9 p  a4 t* P, o, X7 y    m_tree->SetImageList(&m_Images, TVSIL_NORMAL);
$ T6 {9 C9 E! u
* z& K: p( J6 g5 S3 |& F! F    Populate(displayPart);
3 |. }% ~# C9 r/ s& [1 ]/ r2 i1 M: g8 a+ O$ X
    return 0;1 B3 O. w3 @" J8 k
}
; B3 M  e; ]) K/ L& x6 J8 V7 J- B1 y0 x* X
//------------------------------------------------------------------------------/ S* i/ E! ~% j7 V1 j( Z8 v& H
// getAttributes: g7 ]6 \( Y( @$ x1 ]3 I' S( J; w" }
//------------------------------------------------------------------------------
8 \8 B( G1 Z( f6 H: o
游客,如果您要查看本帖隐藏内容请回复

  X' H3 R' m, N; v0 s/ P  b9 a: M' p' K6 A$ D  N! W, v
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了