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

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

  [复制链接]

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

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

admin 楼主

2015-3-27 11:17:17

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

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

x
  y+ M! I& r) w9 ?/ M! R
1 m( |! `6 D9 x) k
: ~5 o) x& R" S5 X6 ~
7 C3 [$ g% p) ^. p; \6 t0 ^- H! s- n
NX二次开发源码分享:NX10可以直接对资源条进行二次开发2 O2 L# ?$ W+ D4 g5 u: G
这是官方的一个例子,新建了一个资源条,使用MFC的Tree创建了树列表,并加载了所有组件的属性到节点上。0 q4 @+ T# e" s# g& `* U( L

; [1 ?8 ~, ~" f, g$ f; m// Mandatory UF Includes- o/ F3 |& x  s! O5 Q3 v6 ]# d0 R6 J
#include <uf.h>
) I7 o7 v! c9 D7 O+ a
, K" w3 ?* [1 F5 t// NXOpen Includes8 K/ r, Y& v$ H1 f7 [1 R) H" J
#include <NXOpen/Assemblies_Component.hxx>& \. |' K& `5 O4 E$ G
#include <NXOpen/Assemblies_ComponentAssembly.hxx>
; i5 Y. A5 j6 C; I4 l8 U: H#include <NXOpen/ListingWindow.hxx># ]9 f6 F) F$ y4 E
#include <NXOpen/LogFile.hxx>7 t: W( b4 c! Z* Q
#include <NXOpen/NXMessageBox.hxx>
" i+ U) D9 L- ~( q#include <NXOpen/NXException.hxx>
3 r5 j& V5 v; q5 u#include <NXOpen/NXObject.hxx>
# J3 y4 I- o8 q#include <NXOpen/Part.hxx>5 I- i+ H0 r$ y) l4 @
#include <NXOpen/ParTCollection.hxx>8 x0 v- q' {$ f2 m: h! E/ r* F
#include <NXOpen/ResourceBarManager.hxx>" @8 @- @( R: c; v
#include <NXOpen/Session.hxx>
, r1 n6 H7 _" a#include <NXOpen/UI.hxx>
# I# i5 @) S+ \1 @5 {1 Rusing namespace NXOpen;+ G5 G! P. w* D% n
using namespace NXOpen::Assemblies;
  V7 e- x: E: e5 F
% V( d9 m. d6 g! Z8 a- t# w' a// Std C++ Includes) M; F" |- ~' y
#include <iostream>
9 E, X1 ^9 I: I  f7 ^- X#include <sstream>4 F- i$ X: N4 x) L  S; g
#include <map>
; g6 q/ L3 n# ^' h! Z# T  S) A$ Busing std::exception;# A# p9 n  p5 ]# k8 p
using std::endl;
/ H$ R/ H, y- e  B" uusing std::cout;; m' Z, |! U5 E! `- S1 O- F. \+ O
using std::cerr;
7 e* _* F2 D* r$ p& k
& U& l$ d- `5 M  h$ |// MFC Includes$ U6 K$ w: U8 U  n: d5 ~
#define _WIN32_WINNT 0x06010000
5 m0 F0 b, I7 l0 {#include <afxwin.h>
5 J( c9 {' W8 i; y#include <afxcmn.h># }# }8 p1 F4 _6 g$ T% z: j7 c7 `

% w$ C5 b: T2 R5 Y% }' D#define IDC_TREE1   10023 H  `/ N* \& q- f# H7 C1 J' Y

& h# N/ f$ F" p5 D1 _//------------------------------------------------------------------------------
4 _& A- T: s0 ]5 @// NXOpen C++ class 1 K  ?, p+ a9 O. w2 p0 m6 H
//------------------------------------------------------------------------------3 {5 I8 J+ F$ K5 |) @1 K$ T
class MyClass
/ [9 K. h9 ]; ?{- X, D  ~( J* G& g2 a0 e
// class members
6 _0 D% ?8 o2 {! B% S0 \; Npublic:$ ~' E7 N$ |* L0 q
    static Session *theSession;
9 q/ Y' j' t3 Y7 Q    static UI *theUI;
& {0 e* {" H3 H: D' @7 x    static int m_tab;" O+ ], L& F, t( I6 x# p1 r' n" D* @: S
    static int m_cbID[2];
# L; n* Z5 q2 ?1 O8 M
3 E3 `% {* U" G' r% F" c6 W! ?    MyClass();% n7 N* v/ e0 [
    ~MyClass();
1 M: z3 _5 L% Q' f  \4 M4 N2 E$ B7 e) f2 c0 ^& f9 ~
    void print(const NXString &);) E! g( j% S- y; I/ W8 m+ r
    void log(const NXString &);
) r: K( v7 u  E, g( I  j5 Z4 ?    void getAttributes(Component *, HTREEITEM);
* c4 c8 f# ], H: f7 {: M  A6 U    void getComponents(Component *, HTREEITEM);
# l& W2 M0 J0 |3 M( {" V( L4 _    int ActivationHandler1(int tab_id);
& s- ~4 {+ b9 `& a/ ]    void Clear();) V, Y/ s9 n, j& _- M1 p& P
    void Populate(BasePart*);; u9 s! Z3 r2 p, Z
    void cbPartOpened(BasePart*);. N+ J* E5 w, L/ I. H# O; @
    void cbPartClosed(BasePart*);( t- N8 |, `% E2 O6 X! O3 C
/ G; f; @8 R3 U" B$ I
private:2 }# a$ S: G9 k' ^- X% L
    Part *workPart, *displayPart;
+ d6 _9 a  t. ~1 C8 r4 i& A$ ~    NXMessageBox *mb;
0 Z8 G: u2 M  Y0 I! M1 s    ListingWindow *listW;
5 S: {" B* S. S" ^1 P9 G    LogFile *logF;
, C' S1 G; U, U6 Z' ^2 U    CTreeCtrl *m_tree;
; @1 U' t8 i7 u; l8 H6 N+ w- a    CImageList m_Images;
) n6 ?& Z8 @  _};
8 x% g# d* S2 a4 ^
. O- U; L+ E3 W1 n) d//------------------------------------------------------------------------------
5 P. e% G5 W% l, f// Initialize static variables3 c/ K) S' u; E' Y& \9 V
//------------------------------------------------------------------------------% T* ~1 Z/ A2 R
Session *(MyClass::theSession) = nullptr;
% p6 r3 A5 n7 u. Q' fUI *(MyClass::theUI) = nullptr;
8 T( H/ g/ G$ s& p8 G7 C4 Yint MyClass::m_tab = 0;
4 Z; v6 G! A! @; Iint MyClass::m_cbID[2] = {0,0};
; `- Q) f3 i7 s2 I$ I0 r0 \1 }+ P" C0 k- x( d& E$ y
MyClass *theApp = nullptr;; [3 B! t5 r2 ^, l! A7 q" @
$ V; U2 R0 I0 |+ [: V2 T1 ~/ B! w6 Y
//------------------------------------------------------------------------------3 @7 |: D4 l2 v5 p
// Constructor
: E) m- {* O6 Q7 E% ^: _//------------------------------------------------------------------------------
0 g% `, V  [9 t; j# NMyClass::MyClass()8 L. Q& \+ q) N( e
{* {! n; b5 j) K$ t3 k4 @. f
    logF->WriteLine("GTAC: MyClass Constructor");
) o& X* C2 X4 W    theSession = NXOpen::Session::GetSession();3 R- G% G+ k8 X5 ^
    theUI = UI::GetUI();
" R8 N& J0 ~" C0 \9 j: b0 y    mb = theUI->NXMessageBox();; ?1 S$ h/ z" |" y/ y
    listW = theSession->ListingWindow();. p$ ~1 j5 d8 l( u# O2 p9 H
    logF = theSession->LogFile();
. ^! W3 o& |8 V1 ^7 p1 G- p8 @9 V  L" Y7 i) |6 n4 k, A
    workPart = theSession->;Parts()->Work();, _9 @. Q# a4 ?1 Y/ v: ]  I+ }) u
    displayPart = theSession->;Parts()->Display();
  L" V; p3 B" w) O+ ]) M6 D6 i& O( M4 r. j7 w# [  ?
    m_tree = new CTreeCtrl();0 U' n% T- @! Y8 a6 s1 m
3 d- r5 O; u1 G. l2 m
    BOOL bSuccess = m_Images.Create(16, 16, ILC_COLOR32, 0, 2);: f* V2 C' t! q# l
    int index = m_Images.Add( AfxGetApp()->LoadStandardIcon(IDI_WINLOGO) );7 Q) t+ }; Q$ H
    index = m_Images.Add( AfxGetApp()->LoadStandardIcon(IDI_INFORMATION) );
; |! s2 |6 ]9 X* K5 n) N6 U1 ^+ O' }; M
    m_tab = theUI->ResourceBarManager()->ResourceBarManager::Create("Assembly Attributes", "ant_component_mode");0 E' g# j2 |9 L2 s8 L
    theUI->ResourceBarManager()->ResourceBarManager::RegisterActivationCallback(m_tab,
/ N8 F# e% M0 v3 K        make_callback(this, &MyClass::ActivationHandler1));$ F7 C: J" K+ m' [9 M
    theUI->ResourceBarManager()->ResourceBarManager::ActivateTab(m_tab);- V% |) R$ }) P4 f& O% u
5 [) N0 k4 ?+ X  V2 r2 ~% G0 k
    m_cbID[0] = theSession->;Parts()->AddPartOpenedHandler(make_callback(this, &MyClass::cbPartOpened));- R2 d1 L. U8 N" P' n. Q
    m_cbID[1] = theSession->;Parts()->AddPartClosedHandler(make_callback(this, &MyClass::cbPartClosed));
7 u" Z2 T. ~1 V' X( R5 Y}
; P) W  |5 u' [
' R9 d+ }5 R$ ~0 [& x. x2 \8 v//------------------------------------------------------------------------------0 N5 c7 x, `3 X1 m; g9 A3 @
// Destructor
3 l% M; d- U( z$ ?+ k3 K//------------------------------------------------------------------------------
) v. t$ H+ |8 N% }* \; }MyClass::~MyClass()# A! v$ o% ?# x% B" U+ i
{
3 \/ s! M( }4 D5 X    logF->WriteLine("GTAC: MyClass Destructor");
+ V7 q# `* n' v" o    if( m_tree->GetSafeHwnd() )& w/ Z- Q) t) {. q% n9 n
    {8 H/ `' y5 V- p0 k9 ?
        BOOL bSuccess = m_tree->DestroyWindow();# V, y' i# b6 f& J. x" w
    }
3 ^5 ~- l% Y" i* G) g/ l* G0 @+ p' t0 [) z% D* R+ b7 _
    theUI->ResourceBarManager()->Destroy(theApp->m_tab);0 }* a& N0 t; G% c1 f! Z4 c
    theSession->;Parts()->RemovePartOpenedHandler(m_cbID[0]);/ [5 d. y" C( W0 S; k
    theSession->;Parts()->RemovePartClosedHandler(m_cbID[1]);2 h9 b5 z6 l# q( ]1 D# \. O

# i  ]/ Z' Y$ |9 h) M7 R}
* ~5 G% U; o& F* L3 Y% b& b# Q2 M) @5 m% q# T. T
//------------------------------------------------------------------------------
1 V: h, y9 X' E1 W2 U& l9 D6 m// Print string to listing window and/or syslog
4 e7 K# g6 Q0 ~) i0 ]//------------------------------------------------------------------------------
) d. F3 D0 A6 Yvoid MyClass::print(const NXString &msg)" U! A& `4 R+ P6 ~. y5 d6 S
{
7 q7 k' A2 @% J2 M    if(! listW->IsOpen() ) listW->Open();
2 i- D8 g* w7 l" P  b    listW->WriteLine(msg);
7 i( @4 h# H( U8 t}, d  k" H! N' o! `0 Y6 r% [
void MyClass::log(const NXString &msg)
5 J6 s/ b3 A$ s! [; o7 ~' x1 ^) Q{; j, u0 v* s0 f) D4 O9 O' N
    logF->WriteLine(msg);
; x5 r/ {. e1 n9 z& V}- ~% A$ q. `0 W' g+ J0 }  J( _- K

1 k0 e+ q/ r9 o+ z// Callback triggered when opening resource bar tab
# r/ s* [8 Y( h$ h  s6 Q3 [3 Lint MyClass::ActivationHandler1(int tab_id), o$ v# A3 J- N. e# H5 n0 E0 g
{
; R/ L6 n! ]) Y7 a! S6 Y6 G    // Get the WindowHandle object' @; H0 @8 C3 o& F& _
    WindowHandle *window_handle = MyClass::theUI->ResourceBarManager()->GetWindowHandle(tab_id);6 X, D" [* q. I' N% o0 C& [
    // Get the real handle" m! N1 D- l% f. ?. t
    HWND parent_handle = (HWND)window_handle->GetHandle();% D+ x4 O( h& S" \  `
    // Get the CWnd object from HWND, FromHandlePermanent will return 0!. h0 Y, Q( H  H0 d
    CWnd *wParent1 = CWnd::FromHandle(parent_handle);
+ K% h% }8 D' F1 x% v    ASSERT(wParent1);+ I3 L) C" z+ V( [0 L4 J: ]
( m* }( ?  d7 ?
    // Switch module state to avoid Assertion from afxCurrentInstanceHandle5 _% t4 V" D- @) s* I& j% P
    AFX_MANAGE_STATE(AfxGetStaticModuleState());' @! A& ^/ N8 n  H+ t/ Q$ `$ t
* L* A; l6 L( K0 t& U
    BOOL bSuccess = m_tree->Create(WS_CHILD|WS_VISIBLE|WS_BORDER|TVS_HASBUTTONS|TVS_HASLINES|TVS_LINESATROOT|TVS_TRACKSELECT, 2 H8 \4 N2 r7 l5 b1 M; h' W4 q
        CRect(10,50,510,1810), wParent1, IDC_TREE1);
$ `6 l9 k, r. C8 ~$ n! M5 I1 s    m_tree->SetImageList(&m_Images, TVSIL_NORMAL);! M7 p2 K8 [7 ^  r( u
- K1 V$ z% q! @! G4 |
    Populate(displayPart);
7 q, Y" ~5 w- U3 h4 \% f" ]8 i
3 s* j& l8 \7 ]' U) w" N$ @8 l& R5 |9 r    return 0;* B" y+ C! G$ J2 h  }! Z
}/ K9 F  b; ~- V$ t* S

5 m1 V# G) S6 p& S6 v  G/ K$ J//------------------------------------------------------------------------------
, @% ], w) i8 u0 T, `. d// getAttributes
; `- P8 X8 u: q+ j//------------------------------------------------------------------------------* q$ W9 ~2 y4 w5 S2 p- U* S7 V
游客,如果您要查看本帖隐藏内容请回复

. h7 s1 Q$ y# f: a
3 L  q. O" k, S+ p/ s
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了