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

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

  [复制链接]

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

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

admin 楼主

2015-3-27 11:17:17

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

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

x

. ?; Q# i% c6 D" m5 `0 F

+ N5 K8 D' M) O9 q- Y, L' E  t, m* d7 d$ F5 O# Z1 S9 L

( c- p% g( L; l0 \2 S  ENX二次开发源码分享:NX10可以直接对资源条进行二次开发& D7 \) B2 F8 T1 R" u3 C" K
这是官方的一个例子,新建了一个资源条,使用MFC的Tree创建了树列表,并加载了所有组件的属性到节点上。
: W. D/ x0 P6 b4 a1 Y! o
. [% e+ u2 f) U# G6 i  G// Mandatory UF Includes/ u, P" B! {' T4 L! \8 [
#include <uf.h>$ D# n. V  D# y, V3 C& o/ f

5 U, F9 r: X2 {* y// NXOpen Includes8 Z3 e# B: s& S
#include <NXOpen/Assemblies_Component.hxx>- \/ N4 C! N. z% I- h" r: a0 C- t' v
#include <NXOpen/Assemblies_ComponentAssembly.hxx>$ B5 D; l( L0 ]. W5 G
#include <NXOpen/ListingWindow.hxx>
8 b  E7 [$ M7 k3 m$ N2 T" C#include <NXOpen/LogFile.hxx>6 H+ E& Y- i/ ~
#include <NXOpen/NXMessageBox.hxx>* n9 ?4 L5 @& F) s) ]3 u
#include <NXOpen/NXException.hxx>
; ]7 A: r8 |6 \/ e; p0 u1 ?#include <NXOpen/NXObject.hxx>
2 _. K9 q6 f% Z+ t#include <NXOpen/Part.hxx>
9 }* v" @. ~" J) a+ u) ?4 R- U" d#include <NXOpen/ParTCollection.hxx>( s7 d# q. W3 ]  x+ J% _
#include <NXOpen/ResourceBarManager.hxx>
, Y. c5 [3 s! o2 r#include <NXOpen/Session.hxx>
1 }5 B  G6 y7 o+ ~#include <NXOpen/UI.hxx>
& _/ [) |" I# f  l/ Qusing namespace NXOpen;2 w( Q  |5 }/ |1 P; ]' e4 A! Z' ^0 n
using namespace NXOpen::Assemblies;
& E2 {' e0 L/ j" j: T8 a0 H: b+ n  S# \/ j
// Std C++ Includes) k8 ^5 O+ d4 ^: U4 E8 g3 J1 \
#include <iostream>
7 G( {# q! @5 p0 Q0 h2 y: v#include <sstream>/ o3 d4 h- R  A9 j
#include <map>$ [( v5 {  `* z- g
using std::exception;
- ]5 ?8 W9 H" c0 Yusing std::endl;& z3 M6 @7 u. q. m! G( U& {- }5 N
using std::cout;% c% u+ ~( S0 ^3 T, ?( d* m; j2 {1 Y
using std::cerr;8 F3 o$ `. N" N) |4 j

# [4 {7 v' p# o// MFC Includes
) y) R; A/ t# O#define _WIN32_WINNT 0x06010000 , L& P- L; M/ `7 {4 Z
#include <afxwin.h>; R0 G$ \6 b) P' x, X
#include <afxcmn.h>5 c2 e' ?3 H3 P' ?: h7 K+ f7 T
  ~# g! A8 ^$ r% j% E2 d1 H& ?
#define IDC_TREE1   1002
3 G* k% @7 t3 @. g' s
# _! R) L+ `) g+ ?//------------------------------------------------------------------------------5 V; e7 c2 k0 Y0 K/ F: A+ x+ H3 ^
// NXOpen C++ class
% t, ]; Q3 k0 F//------------------------------------------------------------------------------& v4 @$ w8 y+ ]* L* v( g
class MyClass9 C' K$ P/ K  E% s: P4 P; @
{' x% U# T9 k! |. K2 y4 i
// class members! `( ]" ^2 B/ P( @4 @4 B" t  C
public:% O0 m" |7 }: O' t
    static Session *theSession;. s# A2 a; |7 ?) \- s% t6 t
    static UI *theUI;1 Z* Q- l9 p% z
    static int m_tab;
. K$ O; |) A1 w8 c    static int m_cbID[2];
3 |1 e5 L7 W% _! U- p5 x9 J& ?
3 J+ ?8 x  T& j$ [% x; y: i    MyClass();
- |8 g" G$ ~* i. L& J    ~MyClass();
: k) d' O/ j) I; e' O+ |
9 x, l5 J  G4 S    void print(const NXString &);
, P1 i1 j) `4 J* n- Z    void log(const NXString &);
9 M6 n- T. {0 C    void getAttributes(Component *, HTREEITEM);9 z0 f. i9 r9 T0 I: T( ^5 Y5 o
    void getComponents(Component *, HTREEITEM);
& S! X; a) W! }$ g2 j( W/ f    int ActivationHandler1(int tab_id);
4 {: ?5 D; X, e    void Clear();4 s, ^. |+ u& H) T9 S7 J4 [: C
    void Populate(BasePart*);) R" D( [: ~% E) B0 U: e
    void cbPartOpened(BasePart*);( `- |, e$ G8 ]2 v
    void cbPartClosed(BasePart*);; m. v3 L; ]( L+ e3 P" m

+ F! D* ]3 V$ t* k7 Wprivate:
7 X5 g4 b  Z! K  T* `4 m    Part *workPart, *displayPart;( T7 z( I  a  d( A
    NXMessageBox *mb;
3 o# J3 |. t$ ^2 T8 H7 d    ListingWindow *listW;* `5 Y' A& \& I. m
    LogFile *logF;$ i# [0 ~: m( e
    CTreeCtrl *m_tree;
4 s1 K& F6 T4 q5 x% o3 ^    CImageList m_Images;
  P; `+ A' E) o+ i( d" G};
6 [+ q6 ^! q& `, F$ j* N
( o% t1 o: \& l//------------------------------------------------------------------------------6 s4 J9 a3 I( t3 I5 ?! Z4 s
// Initialize static variables
% ~$ T' d% V- l! ]5 ^//------------------------------------------------------------------------------
+ b6 D& Z( n( P, G5 ^Session *(MyClass::theSession) = nullptr;6 ?! a' e4 ?; y
UI *(MyClass::theUI) = nullptr;. o2 ?- |& R2 N# Z/ }% q, I
int MyClass::m_tab = 0;
) [$ r7 h: y0 x' ?7 r6 tint MyClass::m_cbID[2] = {0,0};, `& ?( x/ z- Y4 c! q. O! V
) a5 X2 [9 W/ `& E
MyClass *theApp = nullptr;
; }# }) D* a# r7 w0 \/ ^# r/ l" f) d9 s# I) C. n- x
//------------------------------------------------------------------------------
# A: R) |9 x0 W// Constructor 8 e, x. z5 ^4 G6 b$ \, N
//------------------------------------------------------------------------------0 K, [% M. Q  t; ~0 l, C3 q
MyClass::MyClass()# H6 Q+ {/ a# @7 f% b8 p& c1 V' T
{: S0 e- ], x& w( ?0 e  e! V! y6 c
    logF->WriteLine("GTAC: MyClass Constructor");* y& X& }. Z4 S0 w, k( F( q2 r
    theSession = NXOpen::Session::GetSession();' _! R5 d/ C2 |* W0 I7 ^! O
    theUI = UI::GetUI();  \& Z2 Q) A! g) {8 A
    mb = theUI->NXMessageBox();
5 ?% n' L; i) a! I3 c* J- @    listW = theSession->ListingWindow();
0 ?) r  J! n; n- i. t$ \* t6 N# {1 L    logF = theSession->LogFile();
8 H- Y% Z# U! P0 t- G1 W& q3 L
' o" f% N& A0 {8 [    workPart = theSession->;Parts()->Work();
" Y4 Q" ^0 k* h- {( c8 A    displayPart = theSession->;Parts()->Display();4 j! b1 [) S; [3 l  F

# P2 M4 E3 A5 C# v# w2 E. U    m_tree = new CTreeCtrl();
- N# B1 F- Y6 @+ U# p' L" s& u+ v
    BOOL bSuccess = m_Images.Create(16, 16, ILC_COLOR32, 0, 2);
+ N2 z, {$ H8 C' E0 s    int index = m_Images.Add( AfxGetApp()->LoadStandardIcon(IDI_WINLOGO) );
; A( |/ m5 p4 o+ O) e6 p1 {' C    index = m_Images.Add( AfxGetApp()->LoadStandardIcon(IDI_INFORMATION) );0 Z1 `3 K" E& q! l0 W
% g3 |. {, z3 c1 ]/ @# A: k# i
    m_tab = theUI->ResourceBarManager()->ResourceBarManager::Create("Assembly Attributes", "ant_component_mode");
' j2 c( X; _* v! S+ T0 a    theUI->ResourceBarManager()->ResourceBarManager::RegisterActivationCallback(m_tab,
2 g$ g1 u" R1 ]* k& J        make_callback(this, &MyClass::ActivationHandler1));8 }3 e6 K6 o* u& |% s5 u; J
    theUI->ResourceBarManager()->ResourceBarManager::ActivateTab(m_tab);
# D; f, X( [6 ~" d! U. W# z: g8 X# H5 F0 }' u
    m_cbID[0] = theSession->;Parts()->AddPartOpenedHandler(make_callback(this, &MyClass::cbPartOpened));& y8 o0 M4 z6 A  X  s
    m_cbID[1] = theSession->;Parts()->AddPartClosedHandler(make_callback(this, &MyClass::cbPartClosed));
6 V' b3 G! G5 u& n" _0 d}  w* J- D8 z$ O1 u1 x+ C
- ?0 a  F9 d4 p( q& Q& @
//------------------------------------------------------------------------------6 {8 v0 |6 m2 A0 J! e8 g: B# }
// Destructor" n; _5 C2 i9 A% q$ r: N- J/ W
//------------------------------------------------------------------------------
$ U1 ~$ ^2 e/ A$ d; V" XMyClass::~MyClass()1 {7 [/ S3 X' v9 _6 a+ z' U( ~( y  L' Z
{
1 D6 X& \6 M( f+ B5 \    logF->WriteLine("GTAC: MyClass Destructor");
7 Q- O' K$ d. {! w. `9 _% B    if( m_tree->GetSafeHwnd() )+ N6 B- D. s" |$ c) @
    {
3 v2 b6 X5 O. A9 L2 p        BOOL bSuccess = m_tree->DestroyWindow();
  d& p. y1 P: \' f/ ~6 k# t& t    }
2 M" L' Z9 }) x1 j+ B, k. _3 Z6 Y+ [/ Y) W( l; B9 w8 I, K  S; N
    theUI->ResourceBarManager()->Destroy(theApp->m_tab);
$ r2 E' }' N: l5 S2 m- W2 ]9 s) e    theSession->;Parts()->RemovePartOpenedHandler(m_cbID[0]);* d5 L. M2 Z$ f/ q& r. h0 {
    theSession->;Parts()->RemovePartClosedHandler(m_cbID[1]);+ b  n8 m# u/ o5 {" t+ t& e

, k0 v) r. [3 q( T* l}5 x) `4 C; F1 M# b: l9 P

6 g5 X) w0 e  l0 w//------------------------------------------------------------------------------
4 M5 v( X8 S/ `+ l- t5 Y// Print string to listing window and/or syslog
: P* H$ A8 c0 [8 {2 \/ D, Q//------------------------------------------------------------------------------9 @- l$ p0 \; c. u9 x9 q
void MyClass::print(const NXString &msg)
' A  c  |# G, {4 ^: r2 |{' u% ]) m( m! a
    if(! listW->IsOpen() ) listW->Open();6 g4 @# w4 E/ x" v& z
    listW->WriteLine(msg);0 \: @- k% d+ l  ]# u! T
}1 Z0 {) W& l' ?( e. u
void MyClass::log(const NXString &msg)
/ b' ^+ I0 J6 e3 F1 |, y9 v{/ q$ }* \: p, |% C+ K3 L
    logF->WriteLine(msg);" r$ ?: V& a+ g: S
}' |( u5 N9 l4 P% z. N5 L

! o+ u1 q4 m# J) z// Callback triggered when opening resource bar tab
/ ^5 |3 r4 F' g1 C; I5 pint MyClass::ActivationHandler1(int tab_id)
2 b; m) K5 ^8 e{9 ~, X8 }( X, \' E
    // Get the WindowHandle object
0 t3 j, W# g: A* k, X! B3 V/ z    WindowHandle *window_handle = MyClass::theUI->ResourceBarManager()->GetWindowHandle(tab_id);! N! A0 A% j3 g8 X% e7 g% H
    // Get the real handle
. \2 b- n% U7 W3 v; d    HWND parent_handle = (HWND)window_handle->GetHandle();. w! @; P8 Q3 c+ [4 w$ G2 N& j! o
    // Get the CWnd object from HWND, FromHandlePermanent will return 0!4 d3 R  Q# o8 n) J7 ~) q8 W
    CWnd *wParent1 = CWnd::FromHandle(parent_handle);
6 d! _: M5 @: }* c6 Y2 g3 |% ?* K# F( ^    ASSERT(wParent1);
9 C7 H) m6 T5 J) F7 o, i) t4 e8 P& s1 l  D7 y5 A# X
    // Switch module state to avoid Assertion from afxCurrentInstanceHandle
: F$ C% H5 e) n* x    AFX_MANAGE_STATE(AfxGetStaticModuleState());$ H# ~. x6 B) E, T) N# {
0 }* }; d1 D8 ^0 ~2 I+ b
    BOOL bSuccess = m_tree->Create(WS_CHILD|WS_VISIBLE|WS_BORDER|TVS_HASBUTTONS|TVS_HASLINES|TVS_LINESATROOT|TVS_TRACKSELECT,
8 {3 q, K) ~4 Q& O8 Q# w        CRect(10,50,510,1810), wParent1, IDC_TREE1);: \8 L1 ?0 s2 S# C
    m_tree->SetImageList(&m_Images, TVSIL_NORMAL);
4 |( q0 r, X* U- m8 @* O( `
8 c0 k) N, I) }' b( j: f( y. p    Populate(displayPart);' c. i% g( m# O, \7 H7 _

5 Q- |/ Z7 h9 V6 Y9 _% ~$ W    return 0;( _' |- _' @" u* N
}2 a0 l4 G4 {$ ?7 ~# _
' F- r0 z' d" _- N/ {
//------------------------------------------------------------------------------: z$ E: }2 ?3 ^: D; R* d; @9 T
// getAttributes
$ t- S6 R* _$ ^: \3 `//------------------------------------------------------------------------------
8 x. [' ~0 C+ Z0 K: y
游客,如果您要查看本帖隐藏内容请回复

/ K( V9 e  U2 \+ Y% H3 Y4 R% @  I; K& T# P7 @* q1 f- I; z9 R" ?# I. x
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了