PLM之家PLMHome-工业软件与AI结合践行者

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

  [复制链接]

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

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

admin 楼主

2015-3-27 11:17:17

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

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

x
# G5 s% I' X) i% A

% v1 F( @& w" @( ]% v+ O
0 N/ j; A& K% c: O& r
6 P0 a$ k( V1 y2 Q! r
NX二次开发源码分享:NX10可以直接对资源条进行二次开发
; U2 R9 t9 `  Q这是官方的一个例子,新建了一个资源条,使用MFC的Tree创建了树列表,并加载了所有组件的属性到节点上。
! ~6 y! D+ M" ~) O% Q9 o* q: @, U5 [0 i: b) v3 V( Y
// Mandatory UF Includes
8 e- X' \+ b0 F( g5 T#include <uf.h>$ Y+ C- E. S+ C: t# i  C# d" `
, V. s/ {0 E# o: q
// NXOpen Includes* K3 k* n" @, d( B/ x
#include <NXOpen/Assemblies_Component.hxx>  H% a% K! }/ ^5 l! ~  f
#include <NXOpen/Assemblies_ComponentAssembly.hxx>' @2 Z) j% L( w& z9 u4 j- X  H
#include <NXOpen/ListingWindow.hxx>
. I: S9 {, g- m: p#include <NXOpen/LogFile.hxx>
5 C) I/ \: W4 b1 ^3 e( Z#include <NXOpen/NXMessageBox.hxx>
2 i+ m& f% I: O" q#include <NXOpen/NXException.hxx>
) c5 Q1 b" \- M$ d3 k, `9 x5 i" m#include <NXOpen/NXObject.hxx>
3 m; B9 I8 e: R/ ^( Z8 A#include <NXOpen/Part.hxx>
& t+ P" F" a$ @+ B4 c" ]#include <NXOpen/ParTCollection.hxx>  ~9 ~6 Q, G2 Y9 O
#include <NXOpen/ResourceBarManager.hxx>
$ \/ {1 y* ?# ~  y+ D: J#include <NXOpen/Session.hxx>
8 }4 C2 g. p6 t( A$ L#include <NXOpen/UI.hxx>
* j' m2 U' N) H/ Kusing namespace NXOpen;% D2 P/ J/ O& I7 [$ B% v/ {
using namespace NXOpen::Assemblies;
' i" \4 i5 ?4 ]; }2 d; @' f* X+ B
7 G3 h4 F* x% ~; E* m+ ]6 ?0 v// Std C++ Includes! J, r2 h% J, a' _, U! q
#include <iostream>. i: ?3 J2 k$ }2 ]
#include <sstream>
0 K- ^- S) O2 l1 F1 P2 u#include <map>
8 G  Z8 Q/ [/ c9 `using std::exception;
: Z5 v0 _* i) }$ X- c5 Ousing std::endl;! v4 |) D+ P4 ^, [
using std::cout;2 {. f* |, z" d4 D5 ]
using std::cerr;3 F" ?9 V$ l( c) u

; n2 [9 ^! Z- O, Q// MFC Includes. z3 J, d6 ^: P
#define _WIN32_WINNT 0x06010000 : H9 U6 K9 J9 P5 k0 u+ d. ~
#include <afxwin.h>8 z% d9 T/ I4 `0 M
#include <afxcmn.h>3 T- G3 P% n* f2 y

6 D5 M/ e2 M- p% a  ^  s) O- Z9 T% n#define IDC_TREE1   1002$ W9 u2 `5 E" w) P% B
+ F$ i. m3 u; H
//------------------------------------------------------------------------------
: c; n; P3 k+ q/ c4 l3 {% O// NXOpen C++ class
9 t! g/ k, W# m7 b& F//------------------------------------------------------------------------------
9 X* Y7 e% Q: e0 Rclass MyClass8 a0 w* L8 O5 W$ ^' ]# {# d
{  ~% Q0 ~: v" D6 j- d  o
// class members
, u/ P+ X. V2 x, Hpublic:9 F! Y; i5 t# P. v3 _0 J9 [
    static Session *theSession;  Y6 E/ Z/ `6 h
    static UI *theUI;
9 d  {3 D: ]" `    static int m_tab;
4 W  U7 k* Q' r0 t( I' i4 P7 E4 t    static int m_cbID[2];! r) w( Q& I6 V' Z2 m. z1 l; c
2 ~- d3 }+ E/ z: ~& r
    MyClass();5 m0 @, y6 @9 A. o- v9 A
    ~MyClass();) c* E" r4 U4 d* @9 T/ Z4 @! G' _

- o% q$ ]8 }* C% L2 A  y* }    void print(const NXString &);
# L% b6 x% A  d& h5 h9 k9 _    void log(const NXString &);
# [- C* t, q  J! V    void getAttributes(Component *, HTREEITEM);5 L% R7 b% M2 N" B$ e: }, }
    void getComponents(Component *, HTREEITEM);
0 f% i; n# h: u9 C. V, G4 U    int ActivationHandler1(int tab_id);
* k8 p1 b# B( H2 k    void Clear();
" X* i" G; f% h0 l0 m5 C    void Populate(BasePart*);
3 E' G0 H9 Q9 x# b) p# o* _    void cbPartOpened(BasePart*);
, N% Y2 z* h+ I5 F# V    void cbPartClosed(BasePart*);
) k& a* V3 u+ I8 t7 J1 I
6 Q' V' ~7 M: {/ h7 t4 xprivate:- H! y" l% Z8 o
    Part *workPart, *displayPart;( n& W/ |0 U& p, j4 T* G- B8 b" g/ J& t+ R
    NXMessageBox *mb;  \7 n- D  `) y# N9 F6 m% F5 e
    ListingWindow *listW;5 B3 p' b) U. \) V9 _! v' P
    LogFile *logF;5 a3 _9 C0 R4 F, f+ P6 C
    CTreeCtrl *m_tree;
* _5 J. W. n& f9 ~; ~  Q    CImageList m_Images;
% f2 ]/ \$ e) R! E, Y};
$ l% f0 j7 x* X5 a/ b
& `1 L. p9 R# [9 Z//------------------------------------------------------------------------------
$ W1 Y2 S  W0 w0 P  A$ V* T2 n// Initialize static variables
1 U" Y3 m9 A4 }$ p7 [* o3 n2 R//------------------------------------------------------------------------------
/ u9 [* s0 v  q, o, J" D0 SSession *(MyClass::theSession) = nullptr;
) C. J& Y3 V! r0 NUI *(MyClass::theUI) = nullptr;
; c7 e6 z( d( r2 x8 Mint MyClass::m_tab = 0;* |3 V  t  |2 o% P9 Y) X0 s& K1 \
int MyClass::m_cbID[2] = {0,0};
( R9 }2 p: A0 p
) R- b7 A; Y8 B' N  WMyClass *theApp = nullptr;
0 z+ l/ D4 V0 w8 ^2 c) o, T
) C0 [( C% Z3 \. E7 I* R//------------------------------------------------------------------------------
& v5 O0 z+ p( `: O; l7 j0 n7 q3 `, [1 W// Constructor
7 Y. T, i  P3 |//------------------------------------------------------------------------------/ \8 ?& v4 o9 D( z" _
MyClass::MyClass()( l& ^; p+ ^( m( F- B
{- D7 Z: V, k( }) t3 A: D4 D* b
    logF->WriteLine("GTAC: MyClass Constructor");
' L) S: T& \7 l9 w    theSession = NXOpen::Session::GetSession();1 x# U# x: _4 @. ^. e
    theUI = UI::GetUI();1 y" _9 X1 K& ~& ?8 W
    mb = theUI->NXMessageBox();
4 P. S! P# X7 N    listW = theSession->ListingWindow();
  N/ o7 |) N& ?7 Z+ r    logF = theSession->LogFile();$ N5 M! o: j  E1 K* y

) F# U* Z4 w2 w" s" w    workPart = theSession->;Parts()->Work();
! g- O3 o) u( D5 t9 e8 e5 ?' I    displayPart = theSession->;Parts()->Display();$ F) w; m( B8 W! i4 D

1 Q7 e1 t- d' `  F4 P    m_tree = new CTreeCtrl();1 ?" ~7 z0 E/ b7 z
! H; J7 x* t5 W# Q
    BOOL bSuccess = m_Images.Create(16, 16, ILC_COLOR32, 0, 2);
- i4 \$ z" v, M; d3 P; s    int index = m_Images.Add( AfxGetApp()->LoadStandardIcon(IDI_WINLOGO) );3 a, \4 b  R, C  M# ~; a3 h7 s6 z
    index = m_Images.Add( AfxGetApp()->LoadStandardIcon(IDI_INFORMATION) );) @. T+ l: V% P: X

1 H3 {0 D  Q! s8 H    m_tab = theUI->ResourceBarManager()->ResourceBarManager::Create("Assembly Attributes", "ant_component_mode");1 v! V3 ]& \3 C" A* e
    theUI->ResourceBarManager()->ResourceBarManager::RegisterActivationCallback(m_tab,
# Y1 h, \6 r! N: v' d" W( |        make_callback(this, &MyClass::ActivationHandler1));% D. v5 l" i! W4 f& G4 }
    theUI->ResourceBarManager()->ResourceBarManager::ActivateTab(m_tab);
6 R4 o  w: B1 G$ y; L
" |) k% T! G6 e* y+ @    m_cbID[0] = theSession->;Parts()->AddPartOpenedHandler(make_callback(this, &MyClass::cbPartOpened));; T& L$ `( F/ O  K+ \% E# f; _
    m_cbID[1] = theSession->;Parts()->AddPartClosedHandler(make_callback(this, &MyClass::cbPartClosed));* c1 C) X) U  x
}+ N! S5 R; U5 O2 a: C. ?9 j
) n9 R( @' D( d5 `, q4 J, L1 S# Q! o
//------------------------------------------------------------------------------
0 G& X( I) u; {! I% n$ u// Destructor
1 m9 s7 h" r! b9 x' `, z8 Y//------------------------------------------------------------------------------! M. C: f+ O0 F- A$ ^
MyClass::~MyClass()
) w) e- \1 i9 f{: X- D: U. V2 L# [' T* N
    logF->WriteLine("GTAC: MyClass Destructor");
$ Z- M; W0 t: [# a  Y, y. }2 A    if( m_tree->GetSafeHwnd() )
5 A; |: A. @  b2 g    {0 U& x3 R! O* _: F7 j3 z6 F
        BOOL bSuccess = m_tree->DestroyWindow();
: N! t# \" _& r" q* |  w    }/ f+ W9 W5 n$ T
# F' a- P3 Z3 w+ a
    theUI->ResourceBarManager()->Destroy(theApp->m_tab);  Y: N8 k4 w" q6 I
    theSession->;Parts()->RemovePartOpenedHandler(m_cbID[0]);6 {  L$ O+ B8 g- g. m
    theSession->;Parts()->RemovePartClosedHandler(m_cbID[1]);4 c/ d/ {( v& M
, z% b6 I# t9 I9 Z0 N) ^' u
}. e0 y8 \( s+ \
% t/ |2 P' y+ j* L  t6 t1 E
//------------------------------------------------------------------------------
( F7 e7 B  G; k1 _// Print string to listing window and/or syslog
3 A6 K5 k; Z' v. _//------------------------------------------------------------------------------
/ |9 Y$ u  f: Z9 U6 U5 Lvoid MyClass::print(const NXString &msg)
: N. l! T( n0 K6 {. d0 [! N{; m3 ]3 _# R6 v6 s3 L0 k
    if(! listW->IsOpen() ) listW->Open();3 E+ |, W* E# j1 P) G7 ]( G: J
    listW->WriteLine(msg);7 I& e' @$ V9 W
}
$ Q* _7 G, F* w: S$ ?# Jvoid MyClass::log(const NXString &msg)
- l+ }  c' c7 C* p; V{3 n: N3 X9 |$ _! T# W
    logF->WriteLine(msg);# h4 ~) |% E/ O8 T* E  X
}
+ b& b, f5 n8 z- p2 m: Z/ z4 C2 [+ l" c0 G
// Callback triggered when opening resource bar tab
  K4 ]( M5 u2 qint MyClass::ActivationHandler1(int tab_id)
1 y0 b3 O. j; F{+ T( N' \! T& h) N; D2 D2 Y
    // Get the WindowHandle object; ~- u: i4 I4 u* F) W* `# V5 ?
    WindowHandle *window_handle = MyClass::theUI->ResourceBarManager()->GetWindowHandle(tab_id);; d( P" ^( K/ O- h. B" p
    // Get the real handle
. f; K& i, _$ I    HWND parent_handle = (HWND)window_handle->GetHandle();) Q1 A1 A) }6 ]6 }/ J8 L! y2 F
    // Get the CWnd object from HWND, FromHandlePermanent will return 0!; d) A8 H2 [, f- }* P, ?3 E# [8 F
    CWnd *wParent1 = CWnd::FromHandle(parent_handle);
4 k- m  ]+ n" E( X4 W    ASSERT(wParent1);# r9 P4 o& y/ J$ n
- G; }3 @* A9 A: |, S" Q
    // Switch module state to avoid Assertion from afxCurrentInstanceHandle2 x" [$ P0 L; P
    AFX_MANAGE_STATE(AfxGetStaticModuleState());
) N6 O- |& a. M( K1 t5 _, m1 Q
1 F' _) y# j2 C- P  D- O/ y    BOOL bSuccess = m_tree->Create(WS_CHILD|WS_VISIBLE|WS_BORDER|TVS_HASBUTTONS|TVS_HASLINES|TVS_LINESATROOT|TVS_TRACKSELECT,
6 I, L! K+ J5 X3 t        CRect(10,50,510,1810), wParent1, IDC_TREE1);
% H( L# V3 x* \4 D    m_tree->SetImageList(&m_Images, TVSIL_NORMAL);. v$ l$ F5 r0 r7 q
# j4 h- J1 U3 Y4 q4 M) `* e* g
    Populate(displayPart);7 F' T6 {8 ^& g5 Z$ X; y8 F% f4 Z- q
: x4 c0 S9 o! \2 {8 V# a
    return 0;$ r4 t/ E: k& q0 B" o9 T! h
}/ U$ P8 P8 n! l( r2 C

0 h) ]  o  y5 J3 R//------------------------------------------------------------------------------$ M3 {% d7 k) n7 D
// getAttributes
" e! ?8 x( Q+ ]* c6 }//------------------------------------------------------------------------------
0 }0 [8 ?8 Z/ J, t/ V0 K1 l
游客,如果您要查看本帖隐藏内容请回复
; f3 h( W1 E1 G" o4 Y; Z; E, _6 F
; J/ w) x: s3 l/ Y% o/ z  A
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了