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

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

  [复制链接]

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

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

admin 楼主

2015-3-27 11:17:17

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

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

x
- G3 @$ \& @3 ^; e7 I
. b8 h# c/ h' i1 m7 `  z

, o; t9 V1 }$ _. X* _
9 ]1 U) L% r. `$ ?4 r. i
NX二次开发源码分享:NX10可以直接对资源条进行二次开发
( B' D: \/ S; j9 V! g这是官方的一个例子,新建了一个资源条,使用MFC的Tree创建了树列表,并加载了所有组件的属性到节点上。- T: _1 X5 E0 G

# C9 D$ H  b; C, v; u7 S& W2 e// Mandatory UF Includes
& H" _8 [- X' s! W9 r#include <uf.h>  y5 j0 b' A, w( r# [  D. q9 _

+ I8 x: [$ T4 `5 f7 d// NXOpen Includes
# Z/ w) c+ k3 ?#include <NXOpen/Assemblies_Component.hxx>' o" Z& ]; _! q: f( q' c
#include <NXOpen/Assemblies_ComponentAssembly.hxx>
& P; T4 l& W- ^$ x* C& u4 w#include <NXOpen/ListingWindow.hxx>" x. \1 \+ Q  O
#include <NXOpen/LogFile.hxx>: i+ B: W' U4 ]$ l$ ^+ q5 ^
#include <NXOpen/NXMessageBox.hxx>4 w# n  H+ E4 F* t5 w
#include <NXOpen/NXException.hxx>
) X2 t/ G) W2 X6 y' E" q#include <NXOpen/NXObject.hxx>8 P: J6 t; ~3 G0 X! ?7 B6 o% H
#include <NXOpen/Part.hxx>
# p0 r. t7 c) M, j. \  f#include <NXOpen/ParTCollection.hxx>
. _! Z- Y% W; }; k% l#include <NXOpen/ResourceBarManager.hxx>
0 i: V) u, |: s( Q4 m0 s#include <NXOpen/Session.hxx>
5 a, Z, i6 ?% x/ a# z2 X- P" J#include <NXOpen/UI.hxx>8 X8 Y* [- B# O2 d
using namespace NXOpen;# i- U7 i, v( t2 g* ^+ P
using namespace NXOpen::Assemblies;4 b6 {, ~7 M, w7 D

( a8 B( b+ H, d0 W// Std C++ Includes
  Y8 ~: i$ c; R% x#include <iostream>
/ ~0 y+ @4 v: k#include <sstream>
( Q9 j, ^8 X# ~#include <map>
% Q4 G! u2 y: X. d- s) @; Jusing std::exception;) [& B8 L7 s8 u9 ^8 z5 e
using std::endl;
& V3 m! P( Z+ fusing std::cout;
# A" C3 u! G" y4 k: W& Xusing std::cerr;
, @* S2 p5 L( _  b
0 J3 x9 N/ Q. d4 Q// MFC Includes
) z/ E. ^/ r, e, L* I& w0 C#define _WIN32_WINNT 0x06010000
% u: J$ K% Y$ \) o: F: H#include <afxwin.h>% q2 J3 X" a* I; ^* F
#include <afxcmn.h>+ X6 a( K) z6 A7 j: g
. M" O7 K& t$ `' G
#define IDC_TREE1   1002- G8 |. p2 @  X' u1 N# n4 U# P" Y1 C7 {

9 f$ ~0 G5 c. H* j+ Q& U! ~//------------------------------------------------------------------------------
  K& W, m* x9 Q* K: D; v// NXOpen C++ class
0 `; R+ Z  R" c; ~3 h//------------------------------------------------------------------------------
* V& G( ?8 u# Nclass MyClass
' R  L! D' d; ]* M* V# N! r( W7 W{
* Y7 z( @; l( E+ P7 L. j// class members' H  ^0 W. d; Y1 ^3 z9 R
public:) O( @, H0 O3 i" B, s
    static Session *theSession;5 K. [( Y8 M4 p2 d4 Z  j
    static UI *theUI;
/ e$ j) ^# @2 F1 ~  T8 u    static int m_tab;" d9 Y) V2 D$ ^% w% L6 `$ i0 E
    static int m_cbID[2];" h; m3 r  _9 A6 p6 R
8 L8 K1 N2 A% L% ?" O5 M/ ^/ K; `$ _
    MyClass();
) b9 U6 |3 n$ g& A0 _; u& q    ~MyClass();
4 L4 a. O; c$ n/ i3 s3 K6 u/ V+ G/ j, Y# o
    void print(const NXString &);
1 m( I2 Y1 L2 @6 Z. y; u    void log(const NXString &);
* U( }' j4 }$ V# b1 c/ S, M! C: x1 o    void getAttributes(Component *, HTREEITEM);
) R0 I7 \- `7 [# _" I( j- V7 m* B3 F    void getComponents(Component *, HTREEITEM);
: I5 p7 z& Z- a8 y! r# o    int ActivationHandler1(int tab_id);' W$ B3 s* r- {9 R
    void Clear();
) Q9 s# b0 u+ Y    void Populate(BasePart*);
3 ]+ \- r  g8 r: x" K1 w8 p    void cbPartOpened(BasePart*);2 J! [4 M1 Q3 m+ [1 c* r
    void cbPartClosed(BasePart*);$ |/ Z8 w( l0 `/ H% r( K8 s3 E' b
6 q6 X8 w1 h/ G! G6 Y1 n; G$ [9 s
private:8 }' m9 b$ X. u6 q) J
    Part *workPart, *displayPart;0 B$ s0 N0 G; Z+ F0 Z% T# b3 N
    NXMessageBox *mb;" O# L, z/ v+ ]3 ?6 V3 ^  M- ]
    ListingWindow *listW;1 Q8 ?' h/ v9 x  L( F3 H0 Z6 z
    LogFile *logF;+ P1 m5 D7 z" |* v$ d
    CTreeCtrl *m_tree;
" K  C" y" c, l  Q+ o* u    CImageList m_Images;
: M$ O% g2 A7 ]/ s};
1 N; I6 K7 i, H  W8 I" m+ O3 K
9 ?8 L& q0 x9 D0 Q//------------------------------------------------------------------------------: v. t8 R: i; n% @/ B0 ?( v( ]
// Initialize static variables
5 a& r- o2 \0 P% m//------------------------------------------------------------------------------/ F) F) {  x, g6 J! E/ P6 Q
Session *(MyClass::theSession) = nullptr;! ^' R! |  L8 n" Z/ t2 O" u
UI *(MyClass::theUI) = nullptr;* d. x( @( H; o% N8 C# T
int MyClass::m_tab = 0;
2 ^# Z4 U8 h+ dint MyClass::m_cbID[2] = {0,0};
. f" R" D. D$ r& W( i/ C! r. i- e+ G/ f2 ^! u
MyClass *theApp = nullptr;
! I1 l9 `" o/ i6 E. I. o% _6 }/ p+ |* r0 T- e  u2 t) n
//------------------------------------------------------------------------------1 h3 B! ~8 [( G
// Constructor
+ R% k2 j2 u' v, a1 k# |; Y1 B: E//------------------------------------------------------------------------------6 O7 I2 G' q2 X* {4 `) ?
MyClass::MyClass()
% F: [7 _# ?4 V- |$ e. C/ \{
- G8 `" |8 Y/ z: l3 C/ h. Z! ~    logF->WriteLine("GTAC: MyClass Constructor");' v/ ~' A; q+ i2 y3 |
    theSession = NXOpen::Session::GetSession();
) N/ _6 G! q% \/ Y' A$ M$ a    theUI = UI::GetUI();
' d1 e7 c. x* ]% ~; W5 S8 ?    mb = theUI->NXMessageBox();
2 s  ^9 H) z. k9 r1 P0 I5 _    listW = theSession->ListingWindow();
# j, U' q+ ^7 S, B    logF = theSession->LogFile();
7 Q  g1 T9 k# s" Y9 V  w' q
- O! t- e: _+ ]    workPart = theSession->;Parts()->Work();! o( ^$ D' C  B0 B
    displayPart = theSession->;Parts()->Display();3 C0 _% l4 H6 l- C0 ?+ V; j
7 _" `. d  f* ~. O0 G! V3 `9 i
    m_tree = new CTreeCtrl();
* a' G/ o2 r: V' K5 V
" G# Z$ o4 L, E) F- [+ V1 w: W6 ~( P    BOOL bSuccess = m_Images.Create(16, 16, ILC_COLOR32, 0, 2);
, a6 V" Z# C6 z    int index = m_Images.Add( AfxGetApp()->LoadStandardIcon(IDI_WINLOGO) );. P' n1 S) [6 V2 w: N. {
    index = m_Images.Add( AfxGetApp()->LoadStandardIcon(IDI_INFORMATION) );
- y5 T7 b& ?, \; K
, L7 \3 B8 Y1 V    m_tab = theUI->ResourceBarManager()->ResourceBarManager::Create("Assembly Attributes", "ant_component_mode");
, V7 j" _& G7 J0 k    theUI->ResourceBarManager()->ResourceBarManager::RegisterActivationCallback(m_tab, & f6 h, s, ^0 `- [
        make_callback(this, &MyClass::ActivationHandler1));- D% P) T% H0 _. o- a
    theUI->ResourceBarManager()->ResourceBarManager::ActivateTab(m_tab);
" V# J& M5 Q  H3 T; P! H9 X: \( m* |: N: D: Y
    m_cbID[0] = theSession->;Parts()->AddPartOpenedHandler(make_callback(this, &MyClass::cbPartOpened));% V/ ]8 |& @0 U: P
    m_cbID[1] = theSession->;Parts()->AddPartClosedHandler(make_callback(this, &MyClass::cbPartClosed));
+ d( U9 j: Y9 O* x}
: h# J. ^% c8 L; N+ d! b& g3 p9 @: `; I- |
//------------------------------------------------------------------------------
. i) }# n8 Y: |- V) c// Destructor
) J! c; W* h3 g//------------------------------------------------------------------------------
  T9 i4 {5 N* }4 }' B* a1 Y0 |0 x) eMyClass::~MyClass()8 _4 E$ O2 }* @! }  P
{
$ k4 P0 q) ~: T, j9 r. K' V    logF->WriteLine("GTAC: MyClass Destructor");0 _2 A4 Q" O2 Z  t' g' ?# ]$ V6 S
    if( m_tree->GetSafeHwnd() )
1 z7 I$ f! L2 }    {# P4 H3 z! k& `1 ?5 T/ z* o
        BOOL bSuccess = m_tree->DestroyWindow();
5 N3 O5 U" H) ^9 O' x    }
9 b% f" ~8 }0 @7 _* r
( U. p3 [5 j  \2 ?, I- f4 Q, X1 d" R    theUI->ResourceBarManager()->Destroy(theApp->m_tab);5 j  M! r. v. z3 w+ i7 T; `
    theSession->;Parts()->RemovePartOpenedHandler(m_cbID[0]);. V3 Y4 F' ~3 k1 y7 C& T4 H3 u
    theSession->;Parts()->RemovePartClosedHandler(m_cbID[1]);
7 B# U# w5 v6 Z/ Q' u6 f
3 [7 }4 U$ X/ X+ }& m" \. n" L}
$ h$ T/ h5 H: \! J& _8 ]; R( \) L) J% U, G8 E0 X
//------------------------------------------------------------------------------+ O. M- D3 @5 y# C& I) J7 r
// Print string to listing window and/or syslog
2 b8 l* I: G; m% j6 \//------------------------------------------------------------------------------4 o8 ^- a6 ?1 f# i6 w( Y4 ?" e
void MyClass::print(const NXString &msg)/ a7 v- R" A) F
{( ~8 o1 b) K. s( c/ G5 C' ]
    if(! listW->IsOpen() ) listW->Open();! D2 I! \. ^# g' y7 M
    listW->WriteLine(msg);
+ D# j4 r5 n9 V}, a  e6 V# m$ A! b; ?+ V6 n
void MyClass::log(const NXString &msg)
) ~& q: M) k. z6 I: [{
' p8 {) E# l/ ]/ n7 i- J" V    logF->WriteLine(msg);* @( N3 g' `: ^8 t
}7 _9 P/ y7 a4 M/ ~5 W# Q
0 ^# l+ N  E; ^1 h, d
// Callback triggered when opening resource bar tab
( y3 b( e5 F3 _4 yint MyClass::ActivationHandler1(int tab_id)
" F7 B% ]4 _* ?" _# ^: x{
( A9 \4 X4 r: R2 ~' m' J4 @    // Get the WindowHandle object
2 \# ^5 `7 x$ ?: E3 f1 E    WindowHandle *window_handle = MyClass::theUI->ResourceBarManager()->GetWindowHandle(tab_id);, {0 Q! j$ q0 T6 l
    // Get the real handle
1 ^, }% }# t* I0 X! l) E5 A    HWND parent_handle = (HWND)window_handle->GetHandle();/ e6 e* s3 Y/ h+ V6 p
    // Get the CWnd object from HWND, FromHandlePermanent will return 0!" x  D9 u/ g! a, p0 G  X( C
    CWnd *wParent1 = CWnd::FromHandle(parent_handle);
: b- y  ~7 ?, Z    ASSERT(wParent1);
+ o+ j$ c; T" m! q' v
2 d; P' y3 @& `* A5 z    // Switch module state to avoid Assertion from afxCurrentInstanceHandle1 Q* f, y' [; [1 S6 B
    AFX_MANAGE_STATE(AfxGetStaticModuleState());
) @% u) P0 u: M( e8 Q
- B* _9 q2 F" |$ U7 k* z    BOOL bSuccess = m_tree->Create(WS_CHILD|WS_VISIBLE|WS_BORDER|TVS_HASBUTTONS|TVS_HASLINES|TVS_LINESATROOT|TVS_TRACKSELECT,
. u* ~* H# _) s        CRect(10,50,510,1810), wParent1, IDC_TREE1);4 l6 \7 T  g! e- x0 V3 L
    m_tree->SetImageList(&m_Images, TVSIL_NORMAL);
& \. e  @/ F# x" O
3 ]8 f; ?  ]% \* C$ d2 ^    Populate(displayPart);' P* g5 }( S6 Y) ^0 j/ G
( w* F, Z& l# J! D% m  F
    return 0;2 j% Q! w, I% \# K5 A3 @
}
1 I0 m+ i8 _1 p6 X
, V0 }/ @  T2 M7 s0 Q7 J6 m2 j//------------------------------------------------------------------------------, m+ V% N6 w% Q1 d6 {  Z& G
// getAttributes9 W7 |; r7 x8 [5 J3 P5 m( W
//------------------------------------------------------------------------------
3 R+ t4 s- o+ y. a5 C) N  u
游客,如果您要查看本帖隐藏内容请回复
+ _' o' H4 N# E& U0 z5 ]8 p6 m& x

% |) h# g  g4 q2 ?
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了