4241 lines
113 KiB
C++
4241 lines
113 KiB
C++
// TKWorkspace.cpp : implementation file
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
|
|
#include "TKWorkspace.h"
|
|
#include "Progresswnd.h"
|
|
#include "Ayrdlg.h"
|
|
#include "TkwFile.h"
|
|
#include "XFilePathName.h"
|
|
#include "BlkManReplaceOption.h"
|
|
#include "TKAboutDlg.h"
|
|
#include "NewTKWDlg.h"
|
|
|
|
#include "ximage.h"
|
|
#include "NewDbfAccessTools.h"
|
|
//add by xlc on 070816
|
|
typedef struct {
|
|
LVITEM* plvi;
|
|
CString sCol2;
|
|
} lvItem, *plvItem;
|
|
#include <afxtempl.h>
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
extern TARCH_IMPEXP BOOL MoveMaterial2MSpace(AcDbObjectId idBlock);
|
|
extern BOOL DoReplaceBlock(int nControlFlag, Entity &ent, AcDbObjectId &idBlock);
|
|
extern CString GetFileNameByAllName(const TCHAR* szAllFileName);
|
|
extern CString GetPathNameByAllName(const TCHAR* szAllFileName);
|
|
extern BOOL CreateTKFile(const TCHAR *pszFile);
|
|
extern void SplitStr(const TCHAR *szInput, XStringList& lstKind);
|
|
//extern void MakeVisible(PickSet &ss, bool bTrue);
|
|
//extern TARCH_IMPEXP int DragInsertBlock1(const TCHAR *szBlock, int nFlag, const AcGeScale3d &scales);
|
|
extern TARCH_IMPEXP int g_nRunMode;
|
|
extern TARCH_IMPEXP int g_nProductId;
|
|
extern BOOL GetTchtkwAllItem(XStringList &lstTkwItem);
|
|
extern BOOL GetTkwFileByMenu(const TCHAR* szMenuName, CString &csTkwFileName);
|
|
|
|
extern TCHAR g_szDirName[]; //申请自己的16K缓冲区
|
|
extern CRect GetVPRect(int cvport);
|
|
extern void GetRectBmpFromBmp( CWnd *pWnd ,CRect rectClient, CBitmap &bitmap);
|
|
extern BOOL SetLayerLocked(const TCHAR* szLayerName, BOOL bLock);
|
|
extern void GetAShadePickSet(PickSet &ssMat, PickSet &ssSel);
|
|
extern void TWBlock(PickSet &ss, const TCHAR* szFileName, XPoint ptIns);
|
|
//GEOAPI BOOL arxWBlock(PickSet &ss, const TCHAR* szFileName, XPoint ptIns);
|
|
//extern int WriteJpeg( FILE * input_file, FILE * output_file);
|
|
int GetNextDrawing(const TCHAR *tkName, TCHAR *dwg);
|
|
const UINT OpenMenuID = 9110;
|
|
const int g_nMaxRecentBlb = 5;
|
|
//extern GEOAPI int GetPickSetByGroup(const TCHAR *szGroup, PickSet &ss);
|
|
|
|
|
|
int TKW()
|
|
{
|
|
CTKWorkspace dlg(acedGetAcadFrame());
|
|
CTemporaryResourceOverride vTmp;
|
|
dlg.DoModal();
|
|
return RTNORM;
|
|
}
|
|
|
|
|
|
CString GetTypeByRecord(const TCHAR * szTKFile, const TCHAR * csRecord)
|
|
{
|
|
CodeBase db;
|
|
XDbfTable *pTable = db.Open(szTKFile);
|
|
if(!pTable) {
|
|
AfxMessageBox(_T("TK文件只读或损坏!"));
|
|
return CString();
|
|
}
|
|
CString csKind, csItem, csDrawing;
|
|
for(pTable->MoveFirst(); !pTable->IsEOF(); pTable->MoveNext()) {
|
|
GET_FIELD(pTable, _T("kind"), csKind);
|
|
GET_FIELD(pTable, _T("item"), csItem);
|
|
GET_FIELD(pTable, _T("Drawing"), csDrawing);
|
|
if(_tcsicmp(csRecord, csDrawing)==0) {
|
|
if(csKind.IsEmpty())
|
|
csKind=_T("*");
|
|
return csKind;
|
|
}
|
|
}
|
|
return CString();
|
|
}
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CTKWorkspace dialog
|
|
|
|
IMPLEMENT_DYNAMIC(CTKWorkspace, CAcUiDialog)
|
|
|
|
CTKWorkspace::CTKWorkspace(CWnd* pParent /*=NULL*/)
|
|
: CAcUiDialog(CTKWorkspace::IDD, pParent)
|
|
{
|
|
//{{AFX_DATA_INIT(CTKWorkspace)
|
|
// NOTE: the ClassWizard will add member initialization here
|
|
//}}AFX_DATA_INIT
|
|
m_nOpenMode = 0;
|
|
m_bEditLabel = FALSE;
|
|
m_bMultiSel = TRUE; // 多选
|
|
m_bInitSize = FALSE;
|
|
m_nPageRow = 3; // 行数
|
|
m_nPageColumn = 2; // 列数
|
|
m_bLock = FALSE;
|
|
m_pOpenMenu = NULL;
|
|
m_csCurTKWFile = _T("");
|
|
m_csRet = _T("");
|
|
|
|
m_iWorkType=0;//add by whl
|
|
XString xsRoot, xsKey;
|
|
xsKey = _T("BLKMAN");
|
|
_tcscat(xsRoot, GetRegLocation());
|
|
CRegProperty regProp(xsRoot, xsKey);
|
|
regProp.SetTopRootKey(HKEY_CURRENT_USER);
|
|
regProp.GetValue(_T("PageRow"), m_nPageRow); // 行数
|
|
regProp.GetValue(_T("PageColumn"), m_nPageColumn); // 列数
|
|
|
|
m_bDragging = FALSE;
|
|
}
|
|
|
|
CTKWorkspace::CTKWorkspace(const TCHAR* szTKWName, const TCHAR* szTKName, const TCHAR* szRecord, BOOL bSingleSel, CWnd* pParent /*=NULL*/)
|
|
: CAcUiDialog(CTKWorkspace::IDD, pParent)
|
|
{
|
|
//{{AFX_DATA_INIT(CTKWorkspace)
|
|
// NOTE: the ClassWizard will add member initialization here
|
|
//}}AFX_DATA_INIT
|
|
CString csTKWName , csTKName, csRecord;
|
|
csTKWName = szTKWName;
|
|
csTKName = szTKName;
|
|
csRecord = szRecord;
|
|
|
|
m_iWorkType=0;//add by whl
|
|
|
|
m_nOpenMode = 1;
|
|
m_bMultiSel = bSingleSel;
|
|
m_ImageBox.m_bMultiSel = bSingleSel;
|
|
m_bInitSize = FALSE;
|
|
m_bEditLabel = FALSE;
|
|
m_nPageRow = 3; // 行数
|
|
m_nPageColumn = 2; // 列数
|
|
m_bLock = FALSE;
|
|
m_pOpenMenu = NULL;
|
|
XString fullFile;
|
|
XPathParser parser1(szTKWName), parser2(szTKName);
|
|
if(!parser2.m_sDir)
|
|
parser2.m_sDir=parser1.m_sDir;
|
|
if(!parser2.m_sDrive)
|
|
parser2.m_sDrive=parser1.m_sDrive;
|
|
fullFile << parser2.m_sDrive << parser2.m_sDir << parser2.m_sFileName << _T(".tk");
|
|
|
|
if(!FindFile(fullFile))
|
|
{
|
|
fullFile=_T("");
|
|
csRecord=_T("");
|
|
}
|
|
m_csCurTKWFile = csTKWName;
|
|
m_csLastTKName = (const TCHAR*)fullFile;
|
|
m_csCurRecord = csRecord;
|
|
if(!m_csCurRecord.IsEmpty() && !m_csLastTKName.IsEmpty())
|
|
m_csLastType = GetTypeByRecord((const TCHAR*)m_csLastTKName, csRecord);
|
|
m_csRet = _T("");
|
|
XString xsRoot, xsKey;
|
|
xsKey = _T("BLKMAN");
|
|
_tcscat(xsRoot, GetRegLocation());
|
|
|
|
//modify by xlc on 080519
|
|
if(m_nOpenMode == 1)
|
|
{
|
|
_tcscat(xsRoot, _T("\\BLKMAN"));
|
|
TCHAR szDrive[_MAX_DRIVE]=_T(""), szDir[_MAX_DIR]=_T(""), szFile[_MAX_FNAME]=_T(""), szExt[_MAX_EXT]=_T("");
|
|
_tsplitpath(m_csCurTKWFile, szDrive, szDir, szFile, szExt);
|
|
|
|
//modify by xlc on 090116 插入图框崩溃
|
|
//_tcscpy(xsKey, szFile);
|
|
xsKey = szFile;
|
|
}
|
|
|
|
CRegProperty regProp(xsRoot, xsKey);
|
|
regProp.SetTopRootKey(HKEY_CURRENT_USER);
|
|
regProp.GetValue(_T("PageRow"), m_nPageRow); // 行数
|
|
regProp.GetValue(_T("PageColumn"), m_nPageColumn); // 列数
|
|
if(!m_bMultiSel)
|
|
m_treeCtrl.m_bNeedMenu = FALSE;
|
|
|
|
m_bDragging = FALSE;
|
|
}
|
|
|
|
CTKWorkspace::~CTKWorkspace()
|
|
{
|
|
if(m_pOpenMenu)
|
|
{
|
|
m_pOpenMenu->DestroyMenu();
|
|
delete m_pOpenMenu;
|
|
}
|
|
|
|
m_cMenu.DestroyMenu();
|
|
}
|
|
|
|
void CTKWorkspace::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CAcUiDialog::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(CTKWorkspace)
|
|
DDX_Control(pDX, IDC_VSBAR, m_vsBar);
|
|
DDX_Control(pDX, IDC_S_DESCRIPTION, m_ctrlDescription);
|
|
DDX_Control(pDX, IDC_PIC_IMAGE , m_ImageBox);
|
|
DDX_Control(pDX, IDC_TK_TREE, m_treeCtrl);
|
|
DDX_Control(pDX, IDC_TK_LIST, m_listCtrl);
|
|
//}}AFX_DATA_MAP
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CTKWorkspace, CAcUiDialog)
|
|
//{{AFX_MSG_MAP(CTKWorkspace)
|
|
ON_WM_SIZE()
|
|
ON_WM_CREATE()
|
|
ON_WM_VSCROLL()
|
|
ON_WM_CONTEXTMENU()
|
|
ON_NOTIFY(LVN_ITEMCHANGED, IDC_TK_LIST, OnItemchangedTkList)
|
|
ON_NOTIFY(NM_CLICK, IDC_TK_LIST, OnClickTkList)
|
|
ON_WM_LBUTTONUP()
|
|
ON_NOTIFY(TVN_SELCHANGED, IDC_TK_TREE, OnSelchangedTkTree)
|
|
ON_COMMAND(ID_BLK_REVERT, OnBlkRevert)
|
|
ON_COMMAND(ID_BLK_MERGE, OnBlkMerge)
|
|
ON_NOTIFY(TBN_DROPDOWN, IDR_TOOLBAR_TKW, OnToolbarDropDown)
|
|
ON_NOTIFY(LVN_ENDLABELEDIT, IDC_TK_LIST, OnEndlabeleditTkList)
|
|
ON_NOTIFY(LVN_BEGINLABELEDIT, IDC_TK_LIST, OnBeginlabeleditTkList)
|
|
ON_COMMAND(ID_BLK_RENAME, OnBlkRename)
|
|
ON_COMMAND(ID_BLK_SORT, OnBlkSort)
|
|
ON_COMMAND(ID_BLK_DEL, OnBlkDel)
|
|
ON_COMMAND(ID_BLK_LAYOUT, OnBlkLayout)
|
|
ON_COMMAND(ID_BLK_NEWLIB, OnBlkNewlib)
|
|
ON_COMMAND(ID_BLK_OPENLIB, OnBlkOpenlib)
|
|
ON_COMMAND(ID_TK_POPUP_INSERTTK, OnTkPopupInserttk)
|
|
ON_COMMAND(ID_TK_POPUP_NEWTK, OnTkPopupNewtk)
|
|
ON_COMMAND(ID_TK_POPUP_TREETYPE, OnTkPopupTreetype)
|
|
ON_COMMAND(ID_TK_POPUP_REMOVETK, OnTkPopupRemovetk)
|
|
ON_COMMAND(ID_TK_POPUP_RENAMEKIND, OnTkPopupRenamekind)
|
|
ON_COMMAND(ID_TK_POPUP_NEW, OnTkPopupNew)
|
|
ON_COMMAND(ID_TK_POPUP_DEL, OnTkPopupDel)
|
|
ON_COMMAND(ID_BLK_DELKIND, OnBlkDelkind)
|
|
ON_COMMAND(ID_BLK_PAGEDOWN, OnBlkPagedown)
|
|
ON_COMMAND(ID_BLK_PAGEUP, OnBlkPageup)
|
|
ON_COMMAND(ID_BLK_UPGRADE, OnBlkUpgrade)
|
|
ON_COMMAND(ID_BLK_NEWDWG, OnBlkNewdwg)
|
|
//ON_COMMAND(ID_BLK_ABOUT, OnBlkAbout)
|
|
ON_WM_LBUTTONDBLCLK()
|
|
ON_COMMAND(ID_BLK_REPLACE, OnBlkReplace)
|
|
ON_WM_LBUTTONDOWN()
|
|
ON_WM_MOUSEMOVE()
|
|
ON_WM_CLOSE()
|
|
ON_COMMAND(ID_BLK_REBUILD, OnBlkRebuild)
|
|
|
|
//add by xlc on 070816
|
|
ON_WM_QUERYDRAGICON()
|
|
ON_NOTIFY(LVN_BEGINDRAG, IDC_TK_LIST, OnBegindragList)
|
|
ON_NOTIFY(NM_RCLICK, IDC_TK_LIST, OnRclickList)
|
|
ON_NOTIFY(TBN_DROPDOWN, IDR_TOOLBAR_TKW1, OnToolbarDropDown)
|
|
ON_NOTIFY(TBN_DROPDOWN, IDR_TOOLBAR_TKW2, OnToolbarDropDown)
|
|
|
|
ON_COMMAND(ID_MENUITEM_2DTK, OnSelect2DTKLib)
|
|
ON_COMMAND(ID_MENUITEM_EULIB, OnSelectEuroLib)
|
|
ON_COMMAND(ID_MENUITEM_MVLIB, OnSelectMViewLib)
|
|
ON_COMMAND(ID_MENUITEM_EBALLIB, OnSelectEBalLib)
|
|
ON_COMMAND(ID_MENUITEM_EWDLIB, OnSelectEWDLib)
|
|
ON_COMMAND(ID_MENUITEM_POLYSLIB, OnSelectPolyShapeLib)
|
|
ON_COMMAND(ID_MENUITEM_LINEPLIB, OnSelectLinePatLib)
|
|
ON_COMMAND(ID_MENUITEM_TITLEFLIB, OnSelectTitleFrameLib)
|
|
ON_COMMAND(ID_MENUITEM_DORLIB2D, OnSelectDorLib2D)
|
|
ON_COMMAND(ID_MENUITEM_WINLIB2D, OnSelectWinLib2D)
|
|
ON_COMMAND(ID_MENUITEM_WDLIB3D, OnSelectWDLib3D)
|
|
ON_COMMAND(ID_MENUITEM_RAILLID, OnSelectRailLib)
|
|
ON_UPDATE_COMMAND_UI(ID_BLK_REVERT, OnUpdateRevert)
|
|
ON_UPDATE_COMMAND_UI(ID_BLK_MERGE, OnUpdateMerge)
|
|
ON_UPDATE_COMMAND_UI(ID_MENU_SSORT, OnUpdateSort)
|
|
ON_UPDATE_COMMAND_UI(ID_MENU_SSAVE, OnUpdateSave)
|
|
|
|
|
|
//}}AFX_MSG_MAP
|
|
ON_COMMAND_RANGE(ID_MENU_SSORT, ID_MENU_SSAVE, OnSort)
|
|
ON_COMMAND_RANGE(ID_LAYOUT1X1, ID_LAYOUT5X4, OnLayout)
|
|
ON_COMMAND_EX(OpenMenuID, OnSelectRecentBlb)
|
|
ON_COMMAND_EX(OpenMenuID + 1, OnSelectRecentBlb)
|
|
ON_COMMAND_EX(OpenMenuID + 2, OnSelectRecentBlb)
|
|
ON_COMMAND_EX(OpenMenuID + 3, OnSelectRecentBlb)
|
|
ON_COMMAND_EX(OpenMenuID + 4, OnSelectRecentBlb)
|
|
ON_COMMAND_EX(OpenMenuID + 5, OnSelectRecentBlb)
|
|
|
|
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CTKWorkspace message handlers
|
|
void CTKWorkspace::OnClose()
|
|
{
|
|
SaveStatus();
|
|
CAcUiDialog::OnClose();
|
|
}
|
|
BOOL CTKWorkspace::PreTranslateMessage(MSG* pMsg)
|
|
{
|
|
if (pMsg ->message == WM_KEYDOWN)
|
|
{
|
|
if (m_bEditLabel && (pMsg ->wParam == VK_RETURN || pMsg ->wParam == VK_DELETE
|
|
|| pMsg ->wParam == VK_ESCAPE || GetKeyState(VK_CONTROL)))
|
|
{
|
|
::TranslateMessage(pMsg);
|
|
::DispatchMessage(pMsg);
|
|
return TRUE;
|
|
}
|
|
}
|
|
return CAcUiDialog::PreTranslateMessage(pMsg);
|
|
}
|
|
BOOL CTKWorkspace::OnInitDialog()
|
|
{
|
|
CAcUiDialog::OnInitDialog();
|
|
InitToolBar();
|
|
CTemporaryResourceOverride vTmp;
|
|
m_imageTree.Create( IDB_TREE1, 14, 1, RGB(255,255,255) );
|
|
m_treeCtrl.SetImageList( &m_imageTree, TVSIL_NORMAL );
|
|
m_imageList.Create( IDB_LIST, 14, 1, RGB(255,255,255) );
|
|
m_listCtrl.SetImageList( &m_imageList, LVSIL_SMALL);
|
|
|
|
//add by xlc on 080828
|
|
if(m_nOpenMode == 0)
|
|
{
|
|
m_menu.LoadMenu(IDR_MENU_TKMAN);
|
|
}
|
|
else if(m_nOpenMode == 1)
|
|
{
|
|
if(m_bMultiSel)
|
|
{
|
|
m_menu.LoadMenu(IDR_MENU_TKW2);
|
|
}
|
|
else
|
|
{
|
|
m_menu.LoadMenu(IDR_MENU_TKW1);
|
|
}
|
|
}
|
|
m_menu.CheckMenuItem(ID_BLK_MERGE,m_treeCtrl.m_bMerge?MF_CHECKED:MF_UNCHECKED);
|
|
m_menu.CheckMenuItem(ID_BLK_REVERT,m_treeCtrl.m_bMerge?MF_UNCHECKED:MF_CHECKED);
|
|
m_menu.EnableMenuItem(ID_TK_POPUP_INSERTTK,IsLock()?MF_GRAYED:MF_ENABLED);
|
|
m_menu.EnableMenuItem(ID_TK_POPUP_REMOVETK,IsLock()?MF_GRAYED:MF_ENABLED);
|
|
m_menu.EnableMenuItem(ID_TK_POPUP_RENAMEKIND,IsLock()?MF_GRAYED:MF_ENABLED);
|
|
SetMenu(&m_menu);
|
|
|
|
if(m_bMultiSel)
|
|
{
|
|
HWND hWndList = m_listCtrl.m_hWnd;
|
|
|
|
LONG_PTR dwOldStyle;
|
|
#ifndef _WIN64
|
|
dwOldStyle = GetWindowLong(hWndList, GWL_STYLE);
|
|
#else
|
|
dwOldStyle = GetWindowLongPtr(hWndList, GWL_STYLE);
|
|
#endif
|
|
|
|
DWORD dwNewStyle = LVS_SINGLESEL;
|
|
dwNewStyle |= dwOldStyle;
|
|
dwOldStyle &=~LVS_SINGLESEL;
|
|
|
|
#ifndef _WIN64
|
|
SetWindowLong(hWndList, GWL_STYLE, dwOldStyle);
|
|
#else
|
|
SetWindowLongPtr(hWndList, GWL_STYLE, dwOldStyle);
|
|
#endif
|
|
}
|
|
m_listCtrl.ModifyStyle(LVS_SMALLICON, 0);
|
|
m_listCtrl.ModifyStyle(0, LVS_REPORT);
|
|
m_listCtrl.InsertColumn ( 0, _T("图块名称"), LVCFMT_LEFT, 400);
|
|
|
|
|
|
CRect rectDlg;
|
|
GetClientRect(rectDlg);
|
|
m_sizeDlg.cx = rectDlg.Width();
|
|
m_sizeDlg.cy = rectDlg.Height();
|
|
long nIncY = m_sizeDlg.cy - m_nOldSizeY; // 对话框绝对尺寸
|
|
long nIncX = m_sizeDlg.cx - m_nOldSizeX;
|
|
m_bInitSize = TRUE;
|
|
ResetSize(nIncX, nIncY);
|
|
|
|
m_ySplitter.BindWithControl(this, IDC_YBAR);
|
|
m_ySplitter.AttachAsAbovePane(IDC_TK_TREE);
|
|
m_ySplitter.AttachAsBelowPane(IDC_TK_LIST);
|
|
m_ySplitter.RecalcLayout();
|
|
m_ySplitter.SetMinHeight(50, 50);
|
|
m_xSplitter.BindWithControl(this, IDC_XBAR);
|
|
m_xSplitter.AttachAsLeftPane(IDC_TK_TREE);
|
|
m_xSplitter.AttachAsLeftPane(IDC_YBAR);
|
|
m_xSplitter.AttachAsLeftPane(IDC_TK_LIST);
|
|
m_xSplitter.AttachAsRightPane(IDC_PIC_IMAGE);
|
|
m_xSplitter.RecalcLayout();
|
|
m_xSplitter.SetMinWidth(20, 320);
|
|
|
|
m_ImageBox.ModifyStyle(0, SS_NOTIFY);
|
|
if(m_nOpenMode == 0 || m_bMultiSel)
|
|
{ //主功能对话框从注册表读取TKW信息,调用对话框通过参数传递
|
|
LoadStatus();
|
|
if(m_treeCtrl.m_bMerge)
|
|
m_ToolBar.CheckButton(ID_BLK_MERGE, 1);
|
|
else
|
|
m_ToolBar.CheckButton(ID_BLK_REVERT, 1);
|
|
|
|
//add by xlc on 080829
|
|
m_menu.CheckMenuItem(ID_BLK_MERGE,m_treeCtrl.m_bMerge?MF_CHECKED:MF_UNCHECKED);
|
|
m_menu.CheckMenuItem(ID_BLK_REVERT,m_treeCtrl.m_bMerge?MF_UNCHECKED:MF_CHECKED);
|
|
m_menu.EnableMenuItem(ID_TK_POPUP_INSERTTK,IsLock()?MF_GRAYED:MF_ENABLED);
|
|
m_menu.EnableMenuItem(ID_TK_POPUP_REMOVETK,IsLock()?MF_GRAYED:MF_ENABLED);
|
|
m_menu.EnableMenuItem(ID_TK_POPUP_RENAMEKIND,IsLock()?MF_GRAYED:MF_ENABLED);
|
|
}
|
|
m_ImageBox.SetPageSize(m_nPageRow, m_nPageColumn);
|
|
if(m_csCurTKWFile != _T(""))
|
|
{
|
|
m_treeCtrl.m_csLastTK = m_csLastTKName;
|
|
m_treeCtrl.m_csCurKind = m_csLastType;
|
|
m_treeCtrl.SetDataSource(m_csCurTKWFile);
|
|
m_ImageBox.m_bIsJpgShow = m_treeCtrl.m_bIsJpgShow;
|
|
}
|
|
|
|
int len = m_ImageBox.m_lstBlk.Length();
|
|
for(int i=0; i<len ; i++)
|
|
{
|
|
if(m_csCurRecord == m_ImageBox.m_lstBlk[i]->csDrawing)
|
|
{
|
|
m_ImageBox.m_lstSelected.Append(new int(i));
|
|
m_listCtrl.SetItemState(i, LVIS_SELECTED, LVIS_SELECTED);
|
|
m_ImageBox.SelectIndex(i);
|
|
m_listCtrl.EnsureVisible(m_ImageBox.m_nIndex, TRUE);
|
|
m_vsBar.SetScrollPos(m_ImageBox.CurPage() * m_nPageRow);// 使滚动条跟着发生变化
|
|
ResetStateText();
|
|
break;
|
|
}
|
|
}
|
|
|
|
//add by xlc on 090728 添加图库动态菜单
|
|
if(m_nOpenMode==0)
|
|
{
|
|
AddDynMenu(TRUE);
|
|
}
|
|
return TRUE; // return TRUE unless you set the focus to a control
|
|
// EXCEPTION: OCX Property Pages should return FALSE
|
|
}
|
|
|
|
BOOL CTKWorkspace::OnCommand(WPARAM wParam, LPARAM lParam)
|
|
{
|
|
CString csCommand, csTKWFullName;
|
|
// if(!m_pOpenMenu)
|
|
// return CAcUiDialog::OnCommand(wParam, lParam);
|
|
if(m_pOpenMenu)
|
|
m_pOpenMenu->GetMenuString(wParam, csCommand, MF_BYCOMMAND); //判断用户是否点的是弹出菜单
|
|
else
|
|
m_cMenu.GetMenuString(wParam, csCommand, MF_BYCOMMAND); //判断用户是否点的是弹出菜单
|
|
|
|
if(csCommand.IsEmpty())
|
|
return CAcUiDialog::OnCommand(wParam, lParam);
|
|
|
|
GetTkwFileByMenu(csCommand, csTKWFullName);
|
|
if(!csTKWFullName.IsEmpty() && FindFile(csTKWFullName))
|
|
{
|
|
m_csCurTKWFile = csTKWFullName;
|
|
m_treeCtrl.SetDataSource(m_csCurTKWFile);
|
|
m_ImageBox.m_bIsJpgShow = m_treeCtrl.m_bIsJpgShow;
|
|
m_treeCtrl.SelectItem(m_treeCtrl.GetRootItem());
|
|
SetDlgItemText(IDC_S_DESCRIPTION, _T("打开tkw图库组文件"));
|
|
SaveStatus();
|
|
LoadStatus();
|
|
return TRUE;
|
|
}
|
|
else if(!FindFile(csTKWFullName) && !csTKWFullName.IsEmpty())
|
|
MessageBox(_T("没有找到库文件!请确认安装是否完全。"));
|
|
return CAcUiDialog::OnCommand(wParam, lParam);
|
|
}
|
|
|
|
void CTKWorkspace::ResetListData()
|
|
{
|
|
m_listCtrl.DeleteAllItems();
|
|
int len = m_ImageBox.m_lstBlk.Length();
|
|
m_bLock = TRUE;
|
|
for(int i=0; i<len ; i++)
|
|
{
|
|
m_listCtrl.InsertItem(i, m_ImageBox.m_lstBlk[i]->csItem);
|
|
}
|
|
|
|
len = m_ImageBox.m_lstSelected.Length();
|
|
for(i = 0;i<len;i++)
|
|
{
|
|
int sel = *m_ImageBox.m_lstSelected[i];
|
|
m_listCtrl.SetItemState(sel, LVIS_SELECTED, LVIS_SELECTED);
|
|
}
|
|
m_listCtrl.EnsureVisible(m_ImageBox.m_nIndex, TRUE);
|
|
m_listCtrl.SetFocus();
|
|
m_bLock = FALSE;
|
|
}
|
|
|
|
void CTKWorkspace::InitToolBar()
|
|
{
|
|
CTemporaryResourceOverride vTmp;
|
|
if(m_nOpenMode == 0)
|
|
{
|
|
//int ButtonID[]={ ID_BLK_NEWLIB, ID_BLK_OPENLIB ,0,
|
|
// ID_BLK_REVERT,ID_BLK_MERGE,0, ID_BLK_UPGRADE,
|
|
// ID_BLK_NEWDWG, ID_BLK_REBUILD, 0, ID_BLK_DELKIND,
|
|
// ID_BLK_DEL, 0, ID_BLK_LAYOUT, ID_BLK_PAGEUP,
|
|
// ID_BLK_PAGEDOWN, ID_BLK_SORT, 0, ID_BLK_ABOUT, ID_BLK_REPLACE, IDOK,};
|
|
int ButtonID[]={ ID_BLK_NEWLIB, ID_BLK_OPENLIB/* ,0,
|
|
ID_BLK_REVERT,ID_BLK_MERGE,0, ID_BLK_UPGRADE,
|
|
ID_BLK_NEWDWG, ID_BLK_REBUILD, 0, ID_BLK_DELKIND,
|
|
ID_BLK_DEL, 0, ID_BLK_LAYOUT, ID_BLK_PAGEUP,
|
|
ID_BLK_PAGEDOWN, ID_BLK_SORT, 0, ID_BLK_ABOUT, ID_BLK_REPLACE, IDOK,*/};
|
|
//m_ToolBar.InitToolBar(ButtonID, 21, IDR_TOOLBAR_TKW, this);
|
|
m_ToolBar.InitToolBar(ButtonID, 2, IDR_TOOLBAR_TKW, this);
|
|
m_ToolBar.SetStyle(ID_BLK_OPENLIB, TBSTYLE_DROPDOWN);
|
|
m_ToolBar.SetStyle(ID_BLK_REVERT, TBSTYLE_CHECKGROUP);
|
|
m_ToolBar.SetStyle(ID_BLK_MERGE, TBSTYLE_CHECKGROUP);
|
|
m_ToolBar.CheckButton(ID_BLK_REVERT, 1);
|
|
for (int i = 2; i < 21; i++)
|
|
m_ToolBar.DeleteButton(i);
|
|
}
|
|
else if(m_nOpenMode == 1)
|
|
{
|
|
if(m_bMultiSel)
|
|
{
|
|
int ButtonID[]={ ID_BLK_REVERT,ID_BLK_MERGE,0, ID_BLK_UPGRADE,
|
|
ID_BLK_NEWDWG, ID_BLK_REBUILD, 0, ID_BLK_DELKIND,
|
|
ID_BLK_DEL, 0, ID_BLK_LAYOUT, ID_BLK_PAGEUP,
|
|
ID_BLK_PAGEDOWN, ID_BLK_SORT, 0, ID_BLK_REPLACE, IDOK,};
|
|
m_ToolBar.InitToolBar(ButtonID, 17, IDR_TOOLBAR_TKW2, this);
|
|
for (int i = 2; i < 17; i++)
|
|
m_ToolBar.DeleteButton(i);
|
|
}
|
|
else
|
|
{
|
|
int ButtonID[]={ ID_BLK_REVERT, ID_BLK_MERGE, 0,
|
|
ID_BLK_DELKIND, ID_BLK_DEL, 0,
|
|
ID_BLK_LAYOUT, ID_BLK_PAGEUP, ID_BLK_PAGEDOWN,
|
|
ID_BLK_SORT, 0, IDOK, };
|
|
m_ToolBar.InitToolBar(ButtonID, 12, IDR_TOOLBAR_TKW1, this);
|
|
for (int i = 2; i < 12; i++)
|
|
m_ToolBar.DeleteButton(i);
|
|
}
|
|
//add by cwk on 060912
|
|
m_ToolBar.SetStyle(ID_BLK_REVERT, TBSTYLE_CHECKGROUP);
|
|
m_ToolBar.SetStyle(ID_BLK_MERGE, TBSTYLE_CHECKGROUP);
|
|
m_ToolBar.CheckButton(ID_BLK_REVERT, 1);
|
|
}
|
|
|
|
//modify by xlc on 070919
|
|
//m_ToolBar.SetStyle(ID_BLK_SORT, TBSTYLE_CHECK);
|
|
m_ToolBar.SetStyle(ID_BLK_SORT, TBSTYLE_DROPDOWN);
|
|
|
|
m_ToolBar.SetStyle(ID_BLK_LAYOUT, TBSTYLE_DROPDOWN);
|
|
|
|
}
|
|
// 当对话框大小改变时:
|
|
void CTKWorkspace::ResetSize(long nIncX, long nIncY)
|
|
{
|
|
CRect rectImage;
|
|
m_ImageBox.GetWindowRect(rectImage);
|
|
ScreenToClient(rectImage);
|
|
|
|
CRect rectDescription, rectScroll, rectList, rectXbar;
|
|
|
|
m_ctrlDescription.GetWindowRect(rectDescription);
|
|
ScreenToClient(rectDescription);
|
|
m_vsBar.GetWindowRect(rectScroll);
|
|
ScreenToClient(rectScroll);
|
|
m_listCtrl.GetWindowRect(rectList);
|
|
ScreenToClient(rectList);
|
|
|
|
CWnd *pWnd = GetDlgItem(IDC_XBAR);
|
|
ASSERT(pWnd);
|
|
pWnd->GetWindowRect(rectXbar);
|
|
ScreenToClient(rectXbar);
|
|
|
|
m_ImageBox.MoveWindow(rectImage.left, rectImage.top,
|
|
rectImage.Width() + nIncX, rectImage.Height() + nIncY);
|
|
m_ctrlDescription.MoveWindow(rectDescription.left, rectDescription.top + nIncY,
|
|
rectDescription.Width() + nIncX, rectDescription.Height());
|
|
m_vsBar.MoveWindow(rectScroll.left + nIncX, rectScroll.top,
|
|
rectScroll.Width(), rectScroll.Height() + nIncY);
|
|
m_listCtrl.MoveWindow(rectList.left, rectList.top,
|
|
rectList.Width(), rectList.Height() + nIncY);
|
|
|
|
pWnd->MoveWindow(rectXbar.left, rectXbar.top,
|
|
rectXbar.Width(), rectXbar.Height() + nIncY);
|
|
}
|
|
|
|
void CTKWorkspace::OnSize(UINT nType, int cx, int cy)
|
|
{
|
|
if(m_bInitSize && (!nType || nType==SIZE_MAXIMIZED))
|
|
{
|
|
CSize sizeOld = m_sizeDlg;
|
|
m_sizeDlg.cx = cx;
|
|
m_sizeDlg.cy = cy;
|
|
long nIncY = m_sizeDlg.cy - sizeOld.cy;
|
|
long nIncX = m_sizeDlg.cx - sizeOld.cx;
|
|
ResetSize(nIncX, nIncY);
|
|
m_ImageBox.Wash();// 刷新显示slide 之间的间隔
|
|
}
|
|
|
|
}
|
|
|
|
int CTKWorkspace::OnCreate(LPCREATESTRUCT lpCreateStruct)
|
|
{
|
|
if (CAcUiDialog::OnCreate(lpCreateStruct) == -1)
|
|
return -1;
|
|
CRect rect;
|
|
GetClientRect(rect);
|
|
m_nOldSizeX=rect.Width();
|
|
m_nOldSizeY=rect.Height();
|
|
return 0;
|
|
}
|
|
|
|
|
|
// 改变树、布局、初始 时调用
|
|
BOOL CTKWorkspace::InitVSBar()
|
|
{
|
|
int totalRec, pageSize, imageRowNum, imageColNum;
|
|
imageRowNum = m_nPageRow;
|
|
imageColNum = m_nPageColumn;
|
|
pageSize = imageRowNum * imageColNum;
|
|
|
|
totalRec = m_ImageBox.GetTotalRecords();
|
|
if(totalRec <= pageSize || totalRec == 0)
|
|
{
|
|
m_vsBar.ShowScrollBar(FALSE);
|
|
return FALSE;
|
|
}
|
|
else
|
|
m_vsBar.ShowScrollBar(TRUE);
|
|
|
|
SCROLLINFO scrollInfo;
|
|
scrollInfo.cbSize = sizeof(SCROLLINFO);
|
|
scrollInfo.fMask = SIF_ALL;
|
|
scrollInfo.nMin = 0;
|
|
scrollInfo.nMax = ((totalRec-1) / pageSize+1) * imageRowNum-1;
|
|
scrollInfo.nPage = imageRowNum;
|
|
scrollInfo.nPos = m_ImageBox.CurPage() * imageRowNum;
|
|
m_vsBar.SetScrollInfo(&scrollInfo, TRUE);
|
|
return TRUE;
|
|
}
|
|
|
|
void CTKWorkspace::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
|
|
{
|
|
if(pScrollBar != &m_vsBar)
|
|
{
|
|
CAcUiDialog::OnVScroll(nSBCode, nPos, pScrollBar);
|
|
return;
|
|
}
|
|
|
|
UINT nEndPos=pScrollBar->GetScrollPos();
|
|
switch(nSBCode)
|
|
{
|
|
case SB_THUMBPOSITION: //拖动滑块
|
|
m_ImageBox.GoPage(nPos/m_nPageRow);
|
|
nEndPos = nPos;
|
|
break;
|
|
case SB_LINEDOWN:
|
|
m_ImageBox.GoPage(m_ImageBox.CurPage() + 1);
|
|
nEndPos += m_nPageRow;
|
|
break;
|
|
case SB_PAGEDOWN:
|
|
m_ImageBox.GoPage(m_ImageBox.CurPage() + 1);
|
|
nEndPos += m_nPageRow;
|
|
break;
|
|
case SB_LINEUP:
|
|
m_ImageBox.GoPage(m_ImageBox.CurPage() - 1);
|
|
nEndPos -= m_nPageRow;
|
|
break;
|
|
case SB_PAGEUP:
|
|
m_ImageBox.GoPage(m_ImageBox.CurPage() - 1);
|
|
nEndPos -= m_nPageRow;
|
|
break;
|
|
}
|
|
pScrollBar->SetScrollPos(nEndPos);
|
|
ResetStateText();
|
|
CAcUiDialog::OnVScroll(nSBCode, nPos, pScrollBar);
|
|
}
|
|
|
|
void CTKWorkspace::HideDialog(BOOL Flag)
|
|
{
|
|
if (Flag)
|
|
{
|
|
GetParent()->EnableWindow(TRUE);
|
|
GetParent()->SetFocus();
|
|
GetParent()->SetActiveWindow();
|
|
ShowWindow(SW_HIDE);
|
|
}
|
|
else
|
|
{
|
|
GetParent()->EnableWindow(FALSE);
|
|
EnableWindow(TRUE);
|
|
SetActiveWindow();
|
|
ShowWindow(SW_SHOW);
|
|
}
|
|
}
|
|
|
|
|
|
int CTKWorkspace::Add3DImage2Dwb(const TCHAR* szTKName, const TCHAR* szDrawing, BOOL bIsRebuild)
|
|
{
|
|
CString csTKName, csDrawing;
|
|
csTKName = szTKName;
|
|
csDrawing = szDrawing;
|
|
|
|
PickSet ss(SS_FREE);
|
|
int rc=SelectEntities(_T("\n选择构成图块的图元:"), ss, RBList(8,_T("2D,3D"), NULL));
|
|
if(rc!=RTNORM && !bIsRebuild)
|
|
return RTERROR;
|
|
else if(bIsRebuild)
|
|
{
|
|
return RebuildJpg(csTKName);
|
|
}
|
|
PickSet ssMat(SS_FREE);
|
|
GetAShadePickSet(ssMat, ss);
|
|
|
|
PickSet ss3d(SS_FREE), ss2d(SS_FREE);
|
|
long len = ss.Length();
|
|
for(long i=0;i<len;i++)
|
|
{
|
|
Entity ent = ss[i];
|
|
TCHAR szLayer[256];
|
|
ent.GetData(8, szLayer);
|
|
if(_tcsicmp(szLayer, _T("2D")) == 0)
|
|
{
|
|
ent.SetData(0, _T("0"));
|
|
ent.Modify();
|
|
ss2d += ent;
|
|
}
|
|
if(_tcsicmp(szLayer, _T("3D")) == 0)
|
|
{
|
|
ent.SetData(0, _T("0"));
|
|
ent.Modify();
|
|
ss3d += ent;
|
|
}
|
|
}
|
|
|
|
XPoint basePt0;
|
|
resbuf rb;
|
|
ads_getvar(_T("INSBASE"), &rb);
|
|
basePt0[0] = rb.resval.rpoint[0];
|
|
basePt0[1] = rb.resval.rpoint[1];
|
|
basePt0[2] = rb.resval.rpoint[2];
|
|
|
|
XPoint basePt=Ucs2Wcs(basePt0);
|
|
adsout << _T("\n图块基点<") << basePt0 << _T(">:");
|
|
rc=ads_getpoint(XPoint(basePt0), _T(""), basePt0);
|
|
if(rc==RTNORM)
|
|
basePt = Ucs2Wcs(basePt0);
|
|
|
|
if(rc==RTNORM || rc==RTNONE)
|
|
{
|
|
PickSet ssAll(SS_FREE);
|
|
ssAll.Get(_T("X"));
|
|
ssAll -= ss;
|
|
|
|
//add by xlc on 080812 解决对局部隐藏对象的影响
|
|
PickSet ssHide(SS_FREE);
|
|
GetPickSetByGroup(_T("_TCH_HIDE_GROUP"), ssHide);
|
|
ssAll -= ssHide;
|
|
|
|
MakeVisible(ssAll, false);
|
|
MakeVisible(ss2d, false);
|
|
int cvport = 0;
|
|
xg_getvar(_T("CVPORT"), &cvport);
|
|
SHads_command(RTSTR,_T(".UCSICON"),RTSTR,_T("OFF"),RTNONE);
|
|
CRect rectVP = GetVPRect(cvport);
|
|
CBitmap bitmap;
|
|
GetRectBmpFromBmp(acedGetAcadDwgView(), rectVP, bitmap);
|
|
HBITMAP hBitmap = (HBITMAP) bitmap.GetSafeHandle();
|
|
TCHAR tempPrefix[256], bmpPrefix[256], jpgPrefix[256];
|
|
GetTempPath(255, tempPrefix);
|
|
if(tempPrefix[_tcslen(tempPrefix)-1]!=_T('\\'))
|
|
_tcscat(tempPrefix, _T("\\"));
|
|
_tcscat(tempPrefix, csDrawing);
|
|
_tcscpy(bmpPrefix, tempPrefix);
|
|
_tcscpy(jpgPrefix, tempPrefix);
|
|
_tcscat(bmpPrefix, _T(".bmp"));
|
|
_tcscat(jpgPrefix, _T(".jpg"));
|
|
SaveBitmapToFile(hBitmap, bmpPrefix);
|
|
SHads_command(RTSTR,_T(".UCSICON"),RTSTR,_T("ON"),RTNONE);
|
|
FILE *fpIn = _tfopen(bmpPrefix, _T("rb"));
|
|
if(!fpIn)
|
|
{
|
|
MakeVisible(ssAll, true);
|
|
MakeVisible(ss2d, true);
|
|
return RTERROR;
|
|
}
|
|
FILE *fpOut = _tfopen(jpgPrefix, _T("wb"));
|
|
if(!fpOut)
|
|
{
|
|
MakeVisible(ssAll, true);
|
|
MakeVisible(ss2d, true);
|
|
fclose(fpIn);
|
|
return RTERROR;
|
|
}
|
|
// int bOk = WriteJpeg(fpIn, fpOut);
|
|
int bOk = CTangentImage::WriteJpeg(bmpPrefix, jpgPrefix, CXIMAGE_FORMAT_BMP);
|
|
fclose(fpIn);
|
|
fclose(fpOut);
|
|
_tremove(bmpPrefix);
|
|
//以上是制作JPG文件,放到上面是因为Selectentity之后所有图元都变虚
|
|
MakeVisible(ss2d, true);
|
|
MakeVisible(ssAll, true);
|
|
|
|
XString xsFullDwg2d, xsFullDwg3d;
|
|
BOOL bHide = FALSE;
|
|
TCHAR dwgPrefix[256]=_T("");
|
|
TCHAR dwgPrefix2d[256]=_T("");
|
|
TCHAR dwgPrefix3d[256]=_T("");
|
|
GetTempPath(255, dwgPrefix);
|
|
if(dwgPrefix[_tcslen(dwgPrefix)-1]!=_T('\\'))
|
|
_tcscat(dwgPrefix, _T("\\"));
|
|
_tcscpy(dwgPrefix2d, dwgPrefix);
|
|
_tcscpy(dwgPrefix3d, dwgPrefix);
|
|
_tcscat(dwgPrefix2d, _T("SRTEMP2d\\"));
|
|
_tcscat(dwgPrefix3d, _T("SRTEMP3d\\"));
|
|
MakeDir(dwgPrefix2d);
|
|
MakeDir(dwgPrefix3d);
|
|
xsFullDwg2d << dwgPrefix2d << csDrawing << _T(".dwg");
|
|
xsFullDwg3d << dwgPrefix3d << csDrawing << _T(".dwg");
|
|
if(!ss)
|
|
{
|
|
return RTERROR;
|
|
}
|
|
SetLayerLocked(_T("ASHADE"), false); // ASHADE层解锁
|
|
ss3d += ssMat;
|
|
|
|
TWBlock(ss2d, xsFullDwg2d, XPoint(basePt.x, basePt.y)); //二维部分基点z坐标总为0
|
|
TWBlock(ss3d, xsFullDwg3d, basePt);
|
|
SetLayerLocked(_T("ASHADE"), true); // ASHADE层锁定
|
|
long len3d = ss3d.Length();
|
|
for(long m=0;m<len3d;m++)
|
|
{
|
|
Entity ent3d = ss3d[m];
|
|
ent3d.SetData(8, _T("3D"));
|
|
ent3d.Modify();
|
|
}
|
|
long len2d = ss2d.Length();
|
|
for(long n=0;n<len2d;n++)
|
|
{
|
|
Entity ent2d = ss2d[n];
|
|
ent2d.SetData(8, _T("2D"));
|
|
ent2d.Modify();
|
|
}
|
|
|
|
XString xsDwbFile2d(256), xsDwbFile3d(256), xsJpgLib(256);
|
|
xsDwbFile2d << GetPathNameByAllName(csTKName) << GetFileNameByAllName(csTKName) << _T("_2d.DWB");
|
|
xsDwbFile3d << GetPathNameByAllName(csTKName) << GetFileNameByAllName(csTKName) << _T("_3d.DWB");
|
|
xsJpgLib << GetPathNameByAllName(csTKName) << GetFileNameByAllName(csTKName) << _T(".JPB");
|
|
XDrawingLib dwbMan2d(xsDwbFile2d);
|
|
if(!dwbMan2d)
|
|
return RTERROR;
|
|
int ret = dwbMan2d.Append(xsFullDwg2d);
|
|
_tremove(xsFullDwg2d);
|
|
XDrawingLib dwbMan3d(xsDwbFile3d);
|
|
if(!dwbMan3d)
|
|
return RTERROR;
|
|
ret = dwbMan3d.Append(xsFullDwg3d);
|
|
_tremove(xsFullDwg3d);
|
|
XJpegLib JpbMan(xsJpgLib);
|
|
JpbMan.Append(jpgPrefix);
|
|
_tremove(jpgPrefix);
|
|
|
|
}
|
|
return RTNORM;
|
|
}
|
|
//add by cwk on 060922
|
|
int CTKWorkspace::Add3DImage2DwbForBlkRebuild(const TCHAR* szTKName,const TCHAR* szDrawing,
|
|
BOOL bIsRebuild)
|
|
{
|
|
CString csTKName, csDrawing;
|
|
csTKName = szTKName;
|
|
csDrawing = szDrawing;
|
|
|
|
PickSet ss(SS_FREE);
|
|
int rc=SelectEntities(_T("\n选择构成图块的图元:"), ss, RBList(8,_T("2D,3D"), NULL));
|
|
if(rc!=RTNORM && !bIsRebuild)
|
|
return RTERROR;
|
|
else if(bIsRebuild)
|
|
{
|
|
return RebuildJpg(csTKName);
|
|
}
|
|
PickSet ssMat(SS_FREE);
|
|
GetAShadePickSet(ssMat, ss);
|
|
|
|
PickSet ss3d(SS_FREE), ss2d(SS_FREE);
|
|
long len = ss.Length();
|
|
for(long i=0;i<len;i++)
|
|
{
|
|
Entity ent = ss[i];
|
|
TCHAR szLayer[256];
|
|
ent.GetData(8, szLayer);
|
|
if(_tcsicmp(szLayer, _T("2D")) == 0)
|
|
{
|
|
ent.SetData(0, _T("0"));
|
|
ent.Modify();
|
|
ss2d += ent;
|
|
}
|
|
if(_tcsicmp(szLayer, _T("3D")) == 0)
|
|
{
|
|
ent.SetData(0, _T("0"));
|
|
ent.Modify();
|
|
ss3d += ent;
|
|
}
|
|
}
|
|
|
|
XPoint basePt0;
|
|
resbuf rb;
|
|
ads_getvar(_T("INSBASE"), &rb);
|
|
basePt0[0] = rb.resval.rpoint[0];
|
|
basePt0[1] = rb.resval.rpoint[1];
|
|
basePt0[2] = rb.resval.rpoint[2];
|
|
|
|
XPoint basePt=Ucs2Wcs(basePt0);
|
|
adsout << _T("\n图块基点<") << basePt0 << _T(">:");
|
|
rc=ads_getpoint(XPoint(basePt0), _T(""), basePt0);
|
|
if(rc==RTNORM)
|
|
basePt = Ucs2Wcs(basePt0);
|
|
|
|
if(rc==RTNORM || rc==RTNONE)
|
|
{
|
|
XString xsDwbPath;
|
|
if(!m_ImageBox.m_bIsJpgShow)
|
|
xsDwbPath << GetPathNameByAllName(szTKName) << GetFileNameByAllName(szTKName) << _T(".DWB");
|
|
else
|
|
xsDwbPath << GetPathNameByAllName(szTKName) << GetFileNameByAllName(szTKName) << _T("_3d.DWB");
|
|
{
|
|
XDrawingLib dwb(xsDwbPath);
|
|
CString sSlb((const TCHAR*)xsDwbPath);
|
|
sSlb.Replace(_T(".DWB"),_T(".SLB"));
|
|
XSlideLib slb(sSlb);
|
|
if(!(!dwb)) dwb.Remove(szDrawing);
|
|
if(!(!slb)) slb.Remove(szDrawing);
|
|
}
|
|
PickSet ssAll(SS_FREE);
|
|
ssAll.Get(_T("X"));
|
|
ssAll -= ss;
|
|
|
|
//add by xlc on 080812 解决对局部隐藏对象的影响
|
|
PickSet ssHide(SS_FREE);
|
|
GetPickSetByGroup(_T("_TCH_HIDE_GROUP"), ssHide);
|
|
ssAll -= ssHide;
|
|
|
|
MakeVisible(ssAll, false);
|
|
MakeVisible(ss2d, false);
|
|
int cvport = 0;
|
|
xg_getvar(_T("CVPORT"), &cvport);
|
|
SHads_command(RTSTR,_T(".UCSICON"),RTSTR,_T("OFF"),RTNONE);
|
|
CRect rectVP = GetVPRect(cvport);
|
|
CBitmap bitmap;
|
|
GetRectBmpFromBmp(acedGetAcadDwgView(), rectVP, bitmap);
|
|
HBITMAP hBitmap = (HBITMAP) bitmap.GetSafeHandle();
|
|
TCHAR tempPrefix[256], bmpPrefix[256], jpgPrefix[256];
|
|
GetTempPath(255, tempPrefix);
|
|
if(tempPrefix[_tcslen(tempPrefix)-1]!=_T('\\'))
|
|
_tcscat(tempPrefix, _T("\\"));
|
|
_tcscat(tempPrefix, csDrawing);
|
|
_tcscpy(bmpPrefix, tempPrefix);
|
|
_tcscpy(jpgPrefix, tempPrefix);
|
|
_tcscat(bmpPrefix, _T(".bmp"));
|
|
_tcscat(jpgPrefix, _T(".jpg"));
|
|
SaveBitmapToFile(hBitmap, bmpPrefix);
|
|
SHads_command(RTSTR,_T(".UCSICON"),RTSTR,_T("ON"),RTNONE);
|
|
FILE *fpIn = _tfopen(bmpPrefix, _T("rb"));
|
|
if(!fpIn)
|
|
{
|
|
MakeVisible(ssAll, true);
|
|
MakeVisible(ss2d, true);
|
|
return RTERROR;
|
|
}
|
|
FILE *fpOut = _tfopen(jpgPrefix, _T("wb"));
|
|
if(!fpOut)
|
|
{
|
|
MakeVisible(ssAll, true);
|
|
MakeVisible(ss2d, true);
|
|
fclose(fpIn);
|
|
return RTERROR;
|
|
}
|
|
// int bOk = WriteJpeg(fpIn, fpOut);
|
|
int bOk = CTangentImage::WriteJpeg(bmpPrefix, jpgPrefix, 1);
|
|
fclose(fpIn);
|
|
fclose(fpOut);
|
|
_tremove(bmpPrefix);
|
|
//以上是制作JPG文件,放到上面是因为Selectentity之后所有图元都变虚
|
|
MakeVisible(ss2d, true);
|
|
MakeVisible(ssAll, true);
|
|
|
|
XString xsFullDwg2d, xsFullDwg3d;
|
|
BOOL bHide = FALSE;
|
|
TCHAR dwgPrefix[256]=_T("");
|
|
TCHAR dwgPrefix2d[256]=_T("");
|
|
TCHAR dwgPrefix3d[256]=_T("");
|
|
GetTempPath(255, dwgPrefix);
|
|
if(dwgPrefix[_tcslen(dwgPrefix)-1]!=_T('\\'))
|
|
_tcscat(dwgPrefix, _T("\\"));
|
|
_tcscpy(dwgPrefix2d, dwgPrefix);
|
|
_tcscpy(dwgPrefix3d, dwgPrefix);
|
|
_tcscat(dwgPrefix2d, _T("SRTEMP2d\\"));
|
|
_tcscat(dwgPrefix3d, _T("SRTEMP3d\\"));
|
|
MakeDir(dwgPrefix2d);
|
|
MakeDir(dwgPrefix3d);
|
|
xsFullDwg2d << dwgPrefix2d << csDrawing << _T(".dwg");
|
|
xsFullDwg3d << dwgPrefix3d << csDrawing << _T(".dwg");
|
|
if(!ss)
|
|
{
|
|
return RTERROR;
|
|
}
|
|
SetLayerLocked(_T("ASHADE"), false); // ASHADE层解锁
|
|
ss3d += ssMat;
|
|
|
|
TWBlock(ss2d, xsFullDwg2d, XPoint(basePt.x, basePt.y)); //二维部分基点z坐标总为0
|
|
TWBlock(ss3d, xsFullDwg3d, basePt);
|
|
SetLayerLocked(_T("ASHADE"), true); // ASHADE层锁定
|
|
long len3d = ss3d.Length();
|
|
for(long m=0;m<len3d;m++)
|
|
{
|
|
Entity ent3d = ss3d[m];
|
|
ent3d.SetData(8, _T("3D"));
|
|
ent3d.Modify();
|
|
}
|
|
long len2d = ss2d.Length();
|
|
for(long n=0;n<len2d;n++)
|
|
{
|
|
Entity ent2d = ss2d[n];
|
|
ent2d.SetData(8, _T("2D"));
|
|
ent2d.Modify();
|
|
}
|
|
|
|
XString xsDwbFile2d(256), xsDwbFile3d(256), xsJpgLib(256);
|
|
xsDwbFile2d << GetPathNameByAllName(csTKName) << GetFileNameByAllName(csTKName) << _T("_2d.DWB");
|
|
xsDwbFile3d << GetPathNameByAllName(csTKName) << GetFileNameByAllName(csTKName) << _T("_3d.DWB");
|
|
xsJpgLib << GetPathNameByAllName(csTKName) << GetFileNameByAllName(csTKName) << _T(".JPB");
|
|
XDrawingLib dwbMan2d(xsDwbFile2d);
|
|
if(!dwbMan2d)
|
|
return RTERROR;
|
|
int ret = dwbMan2d.Append(xsFullDwg2d);
|
|
_tremove(xsFullDwg2d);
|
|
XDrawingLib dwbMan3d(xsDwbFile3d);
|
|
if(!dwbMan3d)
|
|
return RTERROR;
|
|
ret = dwbMan3d.Append(xsFullDwg3d);
|
|
_tremove(xsFullDwg3d);
|
|
XJpegLib JpbMan(xsJpgLib);
|
|
JpbMan.Append(jpgPrefix);
|
|
_tremove(jpgPrefix);
|
|
|
|
}
|
|
return RTNORM;
|
|
}
|
|
int CTKWorkspace::AddImage2DwbForBlkRebuild(const TCHAR* szTKName,const TCHAR* szDrawing,BOOL bIsRebuild)
|
|
{
|
|
|
|
CString csTKName, csDrawing;
|
|
csTKName = szTKName;
|
|
csDrawing = szDrawing;
|
|
|
|
if(m_ImageBox.m_bIsJpgShow)
|
|
return Add3DImage2DwbForBlkRebuild(csTKName,csDrawing, bIsRebuild);
|
|
PickSet ss(SS_FREE);
|
|
int rc=SelectEntities(_T("\n选择构成图块的图元<只重制幻灯片>:"), ss, RBList(RTDXF0, _T("*"), NULL));
|
|
if(rc!=RTNORM && !bIsRebuild)
|
|
return RTERROR;
|
|
else if(rc!=RTNORM&&bIsRebuild)
|
|
{
|
|
return RebuildSld(csTKName);
|
|
}
|
|
|
|
int nRetCode=RTERROR;
|
|
XPoint center, basePt;
|
|
ads_real sx, sy, sz;
|
|
ss.GetExtend(center, &sx, &sy, &sz);
|
|
center.z -= sz/2.0; //基点在下方
|
|
adsout << _T("\n图块基点<") << center << _T(">:");
|
|
rc=ads_getpoint(Wcs2Ucs(center), _T(""), basePt);
|
|
if(rc==RTNONE)
|
|
{
|
|
basePt=Wcs2Ucs(center);
|
|
rc=RTNORM;
|
|
}
|
|
if(rc==RTNORM)
|
|
{
|
|
PickSet ssAll(SS_FREE);
|
|
ssAll.Get(_T("X"));
|
|
ssAll -= ss;
|
|
|
|
//add by xlc on 080812 解决对局部隐藏对象的影响
|
|
PickSet ssHide(SS_FREE);
|
|
GetPickSetByGroup(_T("_TCH_HIDE_GROUP"), ssHide);
|
|
ssAll -= ssHide;
|
|
|
|
MakeVisible(ssAll, false);
|
|
XString xsFullSld, xsFullDwg;
|
|
BOOL bHide = FALSE;
|
|
BOOL bDelete = TRUE;
|
|
TCHAR dwgPrefix[256]=_T("");
|
|
GetTempPath(255, dwgPrefix);
|
|
if(dwgPrefix[_tcslen(dwgPrefix)-1]!=_T('\\'))
|
|
_tcscat(dwgPrefix, _T("\\"));
|
|
_tcscat(dwgPrefix, _T("SRTEMP\\"));
|
|
MakeDir(dwgPrefix);
|
|
xsFullSld << dwgPrefix << csDrawing << _T(".sld");
|
|
xsFullDwg << dwgPrefix << csDrawing << _T(".dwg");
|
|
while(1)
|
|
{
|
|
const TCHAR *szPrompt=_T("\n制作幻灯片(请用zoom调整合适)或 [消隐(H)/不制作(N)/返回(X)]<制作>:");
|
|
XString sKeyword;
|
|
int nRet = 0;
|
|
INITGET_BEG(0, _T("H X N"));
|
|
nRet = ads_getkword(szPrompt, sKeyword);
|
|
INITGET_END();
|
|
if(nRet == RTNONE)
|
|
break;
|
|
if(sKeyword[0]==_T('H'))
|
|
{
|
|
bHide = TRUE;
|
|
}
|
|
else if(sKeyword[0]==_T('N'))
|
|
{
|
|
bDelete = FALSE;
|
|
break;
|
|
}
|
|
else
|
|
{
|
|
MakeVisible(ssAll, true);
|
|
return RTERROR;
|
|
}
|
|
}
|
|
if(bHide)
|
|
{
|
|
XPushVar<int> splframe(_T("SPLFRAME"), 0);
|
|
SHads_command(RTSTR, _T("HIDE"), RTNONE);
|
|
SHads_command(RTSTR, _T("MSLIDE"), RTSTR, (TCHAR *)xsFullSld, RTNONE);
|
|
SHads_command(RTSTR, _T("REGEN"), RTNONE);
|
|
}
|
|
else
|
|
{
|
|
SHads_command(RTSTR, _T("MSLIDE"), RTSTR, (TCHAR *)xsFullSld, RTNONE);
|
|
}
|
|
XString xsDwbPath;
|
|
if(!m_ImageBox.m_bIsJpgShow)
|
|
xsDwbPath << GetPathNameByAllName(szTKName) << GetFileNameByAllName(szTKName) << _T(".DWB");
|
|
else
|
|
xsDwbPath << GetPathNameByAllName(szTKName) << GetFileNameByAllName(szTKName) << _T("_3d.DWB");
|
|
{
|
|
XDrawingLib dwb(xsDwbPath);
|
|
if(!(!dwb)) dwb.Remove(szDrawing);
|
|
if (bDelete)
|
|
{
|
|
CString sSlb((const TCHAR*)xsDwbPath);
|
|
sSlb.Replace(_T(".DWB"),_T(".SLB"));
|
|
XSlideLib slb(sSlb);
|
|
if(!(!slb)) slb.Remove(szDrawing);
|
|
}
|
|
}
|
|
if (bDelete)
|
|
{
|
|
XString xsSlbFile(256);
|
|
xsSlbFile << GetPathNameByAllName(csTKName) << GetFileNameByAllName(csTKName) << _T(".SLB");
|
|
XSlideLib slbMan(xsSlbFile);
|
|
if(!slbMan)
|
|
{
|
|
MakeVisible(ssAll, true);
|
|
return RTERROR;
|
|
}
|
|
slbMan.Append(xsFullSld);
|
|
_tremove(xsFullSld);
|
|
}
|
|
if(!ss)
|
|
{
|
|
MakeVisible(ssAll, true);
|
|
return RTERROR;
|
|
}
|
|
|
|
if(arxWBlock(ss, xsFullDwg, Ucs2Wcs(basePt)))
|
|
{
|
|
XString xsDwbFile(256);
|
|
xsDwbFile << GetPathNameByAllName(csTKName) << GetFileNameByAllName(csTKName) << _T(".DWB");
|
|
XDrawingLib dwbMan(xsDwbFile);
|
|
if(!dwbMan){
|
|
}
|
|
else
|
|
{
|
|
dwbMan.Append(xsFullDwg);
|
|
nRetCode=RTNORM;
|
|
}
|
|
_tremove(xsFullDwg);
|
|
}
|
|
MakeVisible(ssAll, true);
|
|
}
|
|
return RTNORM;
|
|
}
|
|
|
|
int CTKWorkspace::AddImage2Dwb(const TCHAR* szTKName, const TCHAR* szDrawing, BOOL bIsRebuild)
|
|
{
|
|
CString csTKName, csDrawing;
|
|
csTKName = szTKName;
|
|
csDrawing = szDrawing;
|
|
|
|
if(m_ImageBox.m_bIsJpgShow)
|
|
return Add3DImage2Dwb(csTKName, csDrawing, bIsRebuild);
|
|
PickSet ss(SS_FREE);
|
|
int rc=SelectEntities(_T("\n选择构成图块的图元:"), ss, RBList(RTDXF0, _T("*"), NULL));
|
|
if(rc!=RTNORM && !bIsRebuild)
|
|
return RTERROR;
|
|
else if(rc!=RTNORM&&bIsRebuild)
|
|
{
|
|
return RebuildSld(csTKName);
|
|
}
|
|
|
|
int nRetCode=RTERROR;
|
|
XPoint center, basePt;
|
|
ads_real sx, sy, sz;
|
|
ss.GetExtend(center, &sx, &sy, &sz);
|
|
center.z -= sz/2.0; //基点在下方
|
|
adsout << _T("\n图块基点<") << center << _T(">:");
|
|
rc=ads_getpoint(Wcs2Ucs(center), _T(""), basePt);
|
|
if(rc==RTNONE)
|
|
{
|
|
basePt=Wcs2Ucs(center);
|
|
rc=RTNORM;
|
|
}
|
|
if(rc==RTNORM)
|
|
{
|
|
PickSet ssAll(SS_FREE);
|
|
ssAll.Get(_T("X"));
|
|
ssAll -= ss;
|
|
|
|
//add by xlc on 080812 解决对局部隐藏对象的影响
|
|
PickSet ssHide(SS_FREE);
|
|
GetPickSetByGroup(_T("_TCH_HIDE_GROUP"), ssHide);
|
|
ssAll -= ssHide;
|
|
|
|
MakeVisible(ssAll, false);
|
|
XString xsFullSld, xsFullDwg;
|
|
BOOL bHide = FALSE;
|
|
TCHAR dwgPrefix[256]=_T("");
|
|
GetTempPath(255, dwgPrefix);
|
|
if(dwgPrefix[_tcslen(dwgPrefix)-1]!=_T('\\'))
|
|
_tcscat(dwgPrefix, _T("\\"));
|
|
_tcscat(dwgPrefix, _T("SRTEMP\\"));
|
|
MakeDir(dwgPrefix);
|
|
xsFullSld << dwgPrefix << csDrawing << _T(".sld");
|
|
xsFullDwg << dwgPrefix << csDrawing << _T(".dwg");
|
|
while(1)
|
|
{
|
|
const TCHAR *szPrompt=_T("\n制作幻灯片(请用zoom调整合适)或 [消隐(H)/不制作返回(X)]<制作>:");
|
|
XString sKeyword;
|
|
int nRet = 0;
|
|
INITGET_BEG(0, _T("H X"));
|
|
nRet = ads_getkword(szPrompt, sKeyword);
|
|
INITGET_END();
|
|
if(nRet == RTNONE)
|
|
break;
|
|
if(sKeyword[0]==_T('H'))
|
|
{
|
|
bHide = TRUE;
|
|
}
|
|
else
|
|
{
|
|
MakeVisible(ssAll, true);
|
|
return RTERROR;
|
|
}
|
|
}
|
|
if(bHide)
|
|
{
|
|
XPushVar<int> splframe(_T("SPLFRAME"), 0);
|
|
SHads_command(RTSTR, _T("HIDE"), RTNONE);
|
|
SHads_command(RTSTR, _T("MSLIDE"), RTSTR, (TCHAR *)xsFullSld, RTNONE);
|
|
SHads_command(RTSTR, _T("REGEN"), RTNONE);
|
|
}
|
|
else
|
|
{
|
|
SHads_command(RTSTR, _T("MSLIDE"), RTSTR, (TCHAR *)xsFullSld, RTNONE);
|
|
}
|
|
|
|
XString xsSlbFile(256);
|
|
xsSlbFile << GetPathNameByAllName(csTKName) << GetFileNameByAllName(csTKName) << _T(".SLB");
|
|
XSlideLib slbMan(xsSlbFile);
|
|
if(!slbMan)
|
|
{
|
|
MakeVisible(ssAll, true);
|
|
return RTERROR;
|
|
}
|
|
slbMan.Append(xsFullSld);
|
|
_tremove(xsFullSld);
|
|
|
|
if(!ss)
|
|
{
|
|
MakeVisible(ssAll, true);
|
|
return RTERROR;
|
|
}
|
|
|
|
if(arxWBlock(ss, xsFullDwg, Ucs2Wcs(basePt)))
|
|
{
|
|
XString xsDwbFile(256);
|
|
xsDwbFile << GetPathNameByAllName(csTKName) << GetFileNameByAllName(csTKName) << _T(".DWB");
|
|
XDrawingLib dwbMan(xsDwbFile);
|
|
if(!dwbMan){
|
|
}
|
|
else
|
|
{
|
|
dwbMan.Append(xsFullDwg);
|
|
nRetCode=RTNORM;
|
|
}
|
|
_tremove(xsFullDwg);
|
|
}
|
|
MakeVisible(ssAll, true);
|
|
}
|
|
|
|
//add by xlc on 080812
|
|
else
|
|
return RTERROR;
|
|
|
|
return RTNORM;
|
|
}
|
|
// 布局
|
|
void CTKWorkspace::OnLayout(UINT nID)
|
|
{
|
|
switch (nID)
|
|
{
|
|
case ID_LAYOUT1X1:
|
|
m_ImageBox.SetPageSize(1,1);
|
|
m_nPageRow = 1;
|
|
m_nPageColumn = 1;
|
|
break;
|
|
case ID_LAYOUT2X1:
|
|
m_ImageBox.SetPageSize(2,1);
|
|
m_nPageRow = 2;
|
|
m_nPageColumn = 1;
|
|
break;
|
|
case ID_LAYOUT2X2:
|
|
m_ImageBox.SetPageSize(2,2);
|
|
m_nPageRow = 2;
|
|
m_nPageColumn = 2;
|
|
break;
|
|
case ID_LAYOUT3X2:
|
|
m_ImageBox.SetPageSize(3,2);
|
|
m_nPageRow = 3;
|
|
m_nPageColumn = 2;
|
|
break;
|
|
case ID_LAYOUT3X3:
|
|
m_ImageBox.SetPageSize(3,3);
|
|
m_nPageRow = 3;
|
|
m_nPageColumn = 3;
|
|
break;
|
|
case ID_LAYOUT4X3:
|
|
m_ImageBox.SetPageSize(4,3);
|
|
m_nPageRow = 4;
|
|
m_nPageColumn = 3;
|
|
break;
|
|
case ID_LAYOUT4X4:
|
|
m_ImageBox.SetPageSize(4,4);
|
|
m_nPageRow = 4;
|
|
m_nPageColumn = 4;
|
|
break;
|
|
case ID_LAYOUT5X4:
|
|
m_ImageBox.SetPageSize(5,4);
|
|
m_nPageRow = 5;
|
|
m_nPageColumn = 4;
|
|
break;
|
|
}
|
|
m_ImageBox.Wash();
|
|
m_ImageBox.SetupImage(TRUE);
|
|
InitVSBar();
|
|
}
|
|
//add by xlc on 070918
|
|
void CTKWorkspace::OnSort(UINT nID)
|
|
{
|
|
switch (nID)
|
|
{
|
|
case ID_MENU_SSORT:
|
|
{
|
|
m_ImageBox.m_bSort = !m_ImageBox.m_bSort;
|
|
if(m_ImageBox.m_bSort)
|
|
{
|
|
m_ImageBox.SetSort();
|
|
SetDlgItemText(IDC_S_DESCRIPTION, _T("按排序图块名次序显示"));
|
|
}
|
|
else
|
|
{
|
|
SetDlgItemText(IDC_S_DESCRIPTION, _T("按图块入库次序显示"));
|
|
ResetImage();
|
|
}
|
|
InitVSBar();
|
|
ResetListData();
|
|
}
|
|
break;
|
|
case ID_MENU_SSAVE:
|
|
if(MessageBox(_T("您确定要保存当前的排序吗?"),_T("保存排序"),MB_OKCANCEL|MB_ICONQUESTION) != IDOK)
|
|
return;
|
|
|
|
if(m_ImageBox.m_bSort)
|
|
{
|
|
ModifyDatabaseFile();
|
|
m_ImageBox.m_bSort = FALSE;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
void CTKWorkspace::OnContextMenu(CWnd* pWnd, CPoint point)
|
|
{
|
|
if(m_ImageBox.m_bRMouseDown)
|
|
{
|
|
CMenu menu;
|
|
menu.LoadMenu(IDR_MENU_IMAGELAYOUT);
|
|
if((m_nOpenMode == 0 || m_bMultiSel) && IsInRect(IDC_PIC_IMAGE, point))
|
|
{
|
|
CMenu *pSubMenu = menu.GetSubMenu(0);
|
|
if(pSubMenu)
|
|
pSubMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,
|
|
point.x, point.y, this, NULL);
|
|
}
|
|
m_ImageBox.m_bRMouseDown=FALSE;
|
|
}
|
|
}
|
|
|
|
BOOL CTKWorkspace::IsInRect(UINT CtrlID, CPoint point)
|
|
{
|
|
CRect rect;
|
|
CWnd *pWnd=GetDlgItem(CtrlID);
|
|
ASSERT(pWnd);
|
|
pWnd->GetWindowRect(rect);
|
|
if(point.x<rect.BottomRight().x && point.y<rect.BottomRight().y && point.x >rect.TopLeft().x && point.y >rect.TopLeft().y)
|
|
return TRUE;
|
|
return FALSE;
|
|
}
|
|
|
|
//存储状态
|
|
void CTKWorkspace::SaveStatus()
|
|
{
|
|
//modified by yujie 070511
|
|
//XString xsRoot, xsKey;
|
|
//xsKey = _T("BLKMAN");
|
|
XString xsRoot;
|
|
TCHAR xsKey[1024]=_T("BLKMAN");
|
|
_tcscat(xsRoot, GetRegLocation());
|
|
if(m_nOpenMode == 1)
|
|
{
|
|
_tcscat(xsRoot, _T("\\BLKMAN"));
|
|
TCHAR szDrive[_MAX_DRIVE]=_T(""), szDir[_MAX_DIR]=_T(""), szFile[_MAX_FNAME]=_T(""), szExt[_MAX_EXT]=_T("");
|
|
_tsplitpath(m_csCurTKWFile, szDrive, szDir, szFile, szExt);
|
|
_tcscpy(xsKey, szFile);
|
|
}
|
|
|
|
CRegProperty regProp(xsRoot, xsKey);
|
|
regProp.SetTopRootKey(HKEY_CURRENT_USER);
|
|
regProp.SetValue(_T("TKWName"), m_csCurTKWFile);
|
|
|
|
m_treeCtrl.GetNodeAllPath(m_treeCtrl.GetSelectedItem(), m_csLastTKName, m_csLastType);
|
|
regProp.SetValue(_T("CurTKName"), m_csLastTKName);
|
|
if(m_csLastType == _T(""))
|
|
regProp.SetValue(_T("CurType"), _T("*"));
|
|
else
|
|
regProp.SetValue(_T("CurType"), m_csLastType);
|
|
if(m_ImageBox.m_lstSelected.Length() == 1)
|
|
{
|
|
int idx = *m_ImageBox.m_lstSelected[0];
|
|
if(idx>=0 && idx<m_ImageBox.m_lstBlk.Length()) //add by yujie 070523
|
|
{
|
|
m_csCurRecord = m_ImageBox.m_lstBlk[idx]->csDrawing;
|
|
}
|
|
}
|
|
regProp.SetValue(_T("CurRecord"), m_csCurRecord);
|
|
regProp.SetValue(_T("PageRow"), m_nPageRow); // 行数
|
|
regProp.SetValue(_T("PageColumn"), m_nPageColumn); // 列数
|
|
regProp.SetValue(_T("IsMerge"), m_treeCtrl.m_bMerge); // 合并状态
|
|
|
|
XStringList lstTkwItem;
|
|
GetTchtkwAllItem(lstTkwItem);
|
|
|
|
int nLenArray = lstTkwItem.Length();
|
|
BOOL bFlag = FALSE;
|
|
for(int i=0;i<nLenArray;i++)
|
|
{
|
|
if(lstTkwItem[i] != _T("#"))
|
|
{
|
|
CString csTKWFullName;
|
|
GetTkwFileByMenu(lstTkwItem[i], csTKWFullName);
|
|
if(_tcsicmp(csTKWFullName, m_csCurTKWFile) == 0)
|
|
{
|
|
bFlag = TRUE;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if(!bFlag)
|
|
{
|
|
int nLen=m_lstBlbNames.Length();
|
|
for(int i=0; i<nLen; i++)
|
|
{
|
|
|
|
if(_tcsicmp((const TCHAR*)m_csCurTKWFile, (const TCHAR*)m_lstBlbNames[i]) == 0)
|
|
{
|
|
m_lstBlbNames.Remove(i);
|
|
nLen--;
|
|
break;
|
|
}
|
|
}
|
|
if(nLen>=g_nMaxRecentBlb) m_lstBlbNames.Remove(0);
|
|
m_lstBlbNames.Append(tstrnew(m_csCurTKWFile));
|
|
nLen=m_lstBlbNames.Length();
|
|
for(i=0; i<nLen; i++)
|
|
{
|
|
if(i<g_nMaxRecentBlb)
|
|
{
|
|
XString sKey(256), sValue(256);
|
|
sKey << _T("The recent TKW") << (i + 1);
|
|
sValue << m_lstBlbNames[i];
|
|
regProp.SetValue(sKey, sValue);
|
|
}
|
|
else break;
|
|
}
|
|
}
|
|
}
|
|
|
|
//读取状态
|
|
void CTKWorkspace::LoadStatus()
|
|
{
|
|
//modified by yujie 070511
|
|
//XString xsRoot, xsKey;
|
|
//xsKey = _T("BLKMAN");
|
|
XString xsRoot;
|
|
TCHAR xsKey[1024]=_T("BLKMAN");
|
|
_tcscat(xsRoot, GetRegLocation());
|
|
if(m_nOpenMode == 1)
|
|
{
|
|
_tcscat(xsRoot, _T("\\BLKMAN"));
|
|
TCHAR szDrive[_MAX_DRIVE]=_T(""), szDir[_MAX_DIR]=_T(""), szFile[_MAX_FNAME]=_T(""), szExt[_MAX_EXT]=_T("");
|
|
_tsplitpath(m_csCurTKWFile, szDrive, szDir, szFile, szExt);
|
|
|
|
_tcscpy(xsKey, szFile);
|
|
|
|
}
|
|
|
|
CRegProperty regProp(xsRoot, xsKey);
|
|
regProp.SetTopRootKey(HKEY_CURRENT_USER);
|
|
regProp.GetValue(_T("TKWName"), m_csCurTKWFile);
|
|
regProp.GetValue(_T("CurTKName"), m_csLastTKName);
|
|
regProp.GetValue(_T("CurType"), m_csLastType);
|
|
regProp.GetValue(_T("CurRecord"), m_csCurRecord);
|
|
regProp.GetValue(_T("PageRow"), m_nPageRow); // 行数
|
|
regProp.GetValue(_T("PageColumn"), m_nPageColumn); // 列数
|
|
regProp.GetValue(_T("IsMerge"), m_treeCtrl.m_bMerge); // 合并状态
|
|
|
|
for(int i=0; i<=g_nMaxRecentBlb; i++)
|
|
{
|
|
XString sKey(256);
|
|
CString csValue;
|
|
sKey << _T("The recent TKW") << (i + 1);
|
|
regProp.GetValue(sKey, csValue);
|
|
if(csValue.IsEmpty()) continue;
|
|
if(!FindFile(csValue)) //目录已经不存在
|
|
continue;
|
|
BOOL bAppend=TRUE;
|
|
for(int j=0; j<m_lstBlbNames.Length(); j++)
|
|
{
|
|
if(m_lstBlbNames[j]==csValue)
|
|
{
|
|
bAppend=FALSE;
|
|
break;
|
|
}
|
|
}
|
|
if(bAppend) m_lstBlbNames.Append(tstrnew(csValue));
|
|
}
|
|
|
|
}
|
|
|
|
void CTKWorkspace::OnItemchangedTkList(NMHDR* pNMHDR, LRESULT* pResult)
|
|
{
|
|
if(m_bLock)
|
|
{
|
|
return;
|
|
}
|
|
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
|
|
int nSel = pNMListView->iItem;
|
|
POSITION pos = m_listCtrl.GetFirstSelectedItemPosition();
|
|
|
|
m_ImageBox.m_lstSelected.Reset();
|
|
while (pos)
|
|
{
|
|
int nItem = m_listCtrl.GetNextSelectedItem(pos);
|
|
m_ImageBox.m_lstSelected.Append(new int(nItem));
|
|
}
|
|
m_ImageBox.SelectIndex(nSel);
|
|
|
|
m_vsBar.SetScrollPos(m_ImageBox.CurPage() * m_nPageRow);// 使滚动条跟着发生变化
|
|
ResetStateText();
|
|
|
|
*pResult = 0;
|
|
}
|
|
|
|
void CTKWorkspace::OnClickTkList(NMHDR* pNMHDR, LRESULT* pResult)
|
|
{
|
|
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
|
|
int nSel = pNMListView->iItem;
|
|
POSITION pos = m_listCtrl.GetFirstSelectedItemPosition();
|
|
if(nSel < 0 && !pos)
|
|
{ //取消选中
|
|
m_ImageBox.m_lstSelected.Reset();
|
|
m_ImageBox.ClearBkColor();
|
|
*pResult = 0;
|
|
ResetStateText();
|
|
return;
|
|
}
|
|
*pResult = 0;
|
|
}
|
|
|
|
//add by xlc on 070918
|
|
void CTKWorkspace::OnRclickList(NMHDR* pNMHDR, LRESULT* pResult)
|
|
{
|
|
if(!m_bDragging)
|
|
{
|
|
POINT ptClient;
|
|
::GetCursorPos((LPPOINT)&ptClient);
|
|
|
|
CMenu menu;
|
|
menu.LoadMenu(IDR_MENU_IMAGELAYOUT);
|
|
|
|
CMenu *pSubMenu = menu.GetSubMenu(0);
|
|
if(pSubMenu)
|
|
{
|
|
pSubMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,
|
|
ptClient.x, ptClient.y, this, NULL);
|
|
}
|
|
}
|
|
|
|
*pResult = 0;
|
|
}
|
|
|
|
void CTKWorkspace::OnLButtonDown(UINT nFlags, CPoint point)
|
|
{
|
|
if(point.x == -1 && point.y == -1 && !IsLock())
|
|
{ //鼠标拖拽
|
|
SetCapture();
|
|
m_treeCtrl.m_bCellIsDragging = TRUE;
|
|
m_treeCtrl.m_dragTarget = NULL;
|
|
}
|
|
CAcUiDialog::OnLButtonDown(nFlags, point);
|
|
}
|
|
|
|
void CTKWorkspace::OnMouseMove(UINT nFlags, CPoint point)
|
|
{
|
|
//add by xlc on 070828
|
|
if (m_bDragging)
|
|
{
|
|
CPoint pt(point); //当前鼠标位置
|
|
RECT lpRect;
|
|
m_listCtrl.GetItemRect(0,&lpRect,LVIR_BOUNDS);
|
|
|
|
int height = lpRect.bottom - lpRect.top;
|
|
int dist = point.y - lpRect.top;
|
|
int n = dist / height+1;
|
|
pt.y = lpRect.top + n * height;
|
|
pt.x = 0;
|
|
|
|
ClientToScreen(&pt);
|
|
m_pDragImage->DragMove(pt);
|
|
m_pDragImage->DragShowNolock(false);
|
|
|
|
pt.y = point.y;//lpRect.top + n * height;
|
|
pt.x = 20;
|
|
ClientToScreen(&pt);
|
|
|
|
CWnd* pDropWnd = WindowFromPoint (pt);
|
|
if(pDropWnd == NULL)
|
|
return;
|
|
|
|
if (pDropWnd != m_pDropWnd)
|
|
{
|
|
if (m_nDropIndex != -1)
|
|
{
|
|
TRACE("m_nDropIndex is -1\n");
|
|
CListCtrl* pList = (CListCtrl*)m_pDropWnd;
|
|
if(pList == NULL)
|
|
return;
|
|
pList->SetItemState (m_nDropIndex, 0, LVIS_DROPHILITED);
|
|
pList->RedrawItems (m_nDropIndex, m_nDropIndex);
|
|
pList->UpdateWindow ();
|
|
m_nDropIndex = -1;
|
|
}
|
|
else
|
|
{
|
|
TRACE("m_nDropIndex is not -1\n");
|
|
CListCtrl* pList = (CListCtrl*)m_pDropWnd;
|
|
if(pList == NULL)
|
|
return;
|
|
int i = 0;
|
|
int nCount = pList->GetItemCount();
|
|
for(i = 0; i < nCount; i++)
|
|
{
|
|
pList->SetItemState(i, 0, LVIS_DROPHILITED);
|
|
}
|
|
pList->RedrawItems(0, nCount);
|
|
pList->UpdateWindow();
|
|
}
|
|
}
|
|
|
|
m_pDropWnd = pDropWnd;
|
|
pDropWnd->ScreenToClient(&pt);
|
|
|
|
CRect rcList;
|
|
m_listCtrl.GetWindowRect(&rcList);
|
|
CPoint pntScreen(point);
|
|
ClientToScreen(&pntScreen);
|
|
if(rcList.PtInRect(pntScreen))
|
|
{
|
|
m_bLock = TRUE;
|
|
SetCursor(LoadCursor(NULL, IDC_ARROW));
|
|
UINT uFlags;
|
|
CListCtrl* pList = (CListCtrl*)pDropWnd;
|
|
if(pList == NULL)
|
|
return;
|
|
|
|
pList->SetItemState (m_nDropIndex, 0, LVIS_DROPHILITED);
|
|
pList->RedrawItems (m_nDropIndex, m_nDropIndex);
|
|
|
|
m_nDropIndex = ((CListCtrl*)pDropWnd)->HitTest(pt, &uFlags);
|
|
if(pList->RedrawItems(m_nDropIndex, m_nDropIndex))//;
|
|
pList->UpdateWindow();
|
|
m_bLock = FALSE;
|
|
m_pDragImage->DragShowNolock(true);
|
|
}
|
|
else
|
|
{
|
|
SetCursor(LoadCursor(NULL, IDC_NO));
|
|
}
|
|
}
|
|
else
|
|
|
|
{
|
|
if(m_treeCtrl.m_bCellIsDragging)
|
|
{
|
|
HICON hIcon;
|
|
CPoint pntScreen(point);
|
|
ClientToScreen(&pntScreen);
|
|
CRect rcTree;
|
|
m_treeCtrl.GetWindowRect(rcTree);
|
|
CWinApp* pApp = AfxGetApp();
|
|
{
|
|
CTemporaryResourceOverride vTemp;
|
|
if( rcTree.PtInRect( pntScreen ) == TRUE )
|
|
{ // 鼠标落在TREE中换光标
|
|
hIcon = pApp->LoadCursor(IDC_CUR_MULTMOVE);
|
|
SetCursor(hIcon);
|
|
}
|
|
else
|
|
{
|
|
HICON hIcon = ::LoadCursor( NULL,IDC_NO );
|
|
SetCursor(hIcon);
|
|
}
|
|
|
|
}
|
|
CPoint ptTree( point );
|
|
MapWindowPoints( &m_treeCtrl, &ptTree, 1);
|
|
UINT uHitTest = TVHT_ONITEM;
|
|
m_treeCtrl.m_dragTarget = m_treeCtrl.HitTest(ptTree, &uHitTest);
|
|
if(m_treeCtrl.m_dragTarget != NULL)
|
|
m_treeCtrl.SelectDropTarget(m_treeCtrl.m_dragTarget);
|
|
}
|
|
}
|
|
CAcUiDialog::OnMouseMove(nFlags, point);
|
|
}
|
|
|
|
|
|
void CTKWorkspace::OnLButtonUp(UINT nFlags, CPoint point)
|
|
{
|
|
//modify by xlc on 070828
|
|
if (m_bDragging)
|
|
{
|
|
ReleaseCapture ();
|
|
|
|
m_pDragImage->DragLeave (GetDesktopWindow ()); //结束拖拽
|
|
m_pDragImage->EndDrag ();
|
|
delete m_pDragImage;
|
|
|
|
CPoint pt (point); //当前鼠标坐标
|
|
ClientToScreen (&pt);
|
|
|
|
CWnd* pDropWnd = WindowFromPoint (pt);
|
|
if (pDropWnd->IsKindOf (RUNTIME_CLASS (CListCtrl)))
|
|
{
|
|
m_pDropList = (CListCtrl*)pDropWnd;
|
|
DropItemOnList(m_pDragList, m_pDropList);
|
|
}
|
|
|
|
m_bDragging = FALSE;
|
|
}
|
|
else
|
|
|
|
{
|
|
if(point.x == -1 && point.y == -1)
|
|
{
|
|
m_bLock = TRUE;
|
|
POSITION pos = m_listCtrl.GetFirstSelectedItemPosition();
|
|
while (pos)
|
|
{
|
|
int nItem = m_listCtrl.GetNextSelectedItem(pos);
|
|
TRACE("Item %d was selected!\n", nItem);
|
|
|
|
m_listCtrl.SetItemState(nItem, 0, LVIS_SELECTED);
|
|
}
|
|
int len = m_ImageBox.m_lstSelected.Length();
|
|
for(int i=0;i<len;i++)
|
|
{
|
|
int sel = *m_ImageBox.m_lstSelected[i];
|
|
m_listCtrl.SetItemState(sel, LVIS_SELECTED, LVIS_SELECTED);
|
|
}
|
|
m_listCtrl.EnsureVisible(m_ImageBox.m_nIndex, TRUE);
|
|
m_listCtrl.SetFocus();
|
|
ResetStateText();
|
|
m_bLock = FALSE;
|
|
}
|
|
if(m_treeCtrl.m_bCellIsDragging)
|
|
{
|
|
ReleaseCapture();
|
|
XStringList lstSelBlk;
|
|
for(int i=0;i<m_ImageBox.m_lstSelected.Length();i++)
|
|
{
|
|
int sel = *m_ImageBox.m_lstSelected[i];
|
|
lstSelBlk.Append(tstrnew(m_ImageBox.m_lstBlk[sel]->csDrawing));
|
|
}
|
|
m_treeCtrl.m_bCellIsDragging = FALSE;
|
|
m_treeCtrl.SelectDropTarget(NULL);
|
|
if(m_treeCtrl.DoDragBlk(lstSelBlk))
|
|
{
|
|
if(m_treeCtrl.m_bCopyAndDel)
|
|
{
|
|
m_treeCtrl.m_bCopyAndDel = FALSE;
|
|
m_ImageBox.m_lstSelected.Reset();
|
|
}
|
|
ResetImage(TRUE);
|
|
}
|
|
m_treeCtrl.m_dragTarget = NULL;
|
|
}
|
|
}
|
|
CAcUiDialog::OnLButtonUp(nFlags, point);
|
|
}
|
|
|
|
|
|
|
|
void CTKWorkspace::OnLButtonDblClk(UINT nFlags, CPoint point)
|
|
{
|
|
if(point.x == -1 && point.y == -1 && (!m_bLock))
|
|
{
|
|
if(GetCapture()==this)
|
|
{
|
|
ReleaseCapture();
|
|
m_treeCtrl.SelectDropTarget(NULL);
|
|
}
|
|
OnOK();
|
|
}
|
|
else
|
|
{
|
|
CAcUiDialog::OnLButtonDblClk(nFlags, point);
|
|
}
|
|
}
|
|
|
|
void CTKWorkspace::OnSelchangedTkTree(NMHDR* pNMHDR, LRESULT* pResult)
|
|
{
|
|
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
|
|
BOOL bFlag = TRUE;
|
|
m_ImageBox.m_bIsJpgShow = m_treeCtrl.m_bIsJpgShow;
|
|
if(!m_treeCtrl.m_bMerge)
|
|
{
|
|
CString csCurTKName, csCurType;
|
|
m_treeCtrl.GetNodeAllPath(m_treeCtrl.GetSelectedItem(), csCurTKName, csCurType);
|
|
m_treeCtrl.m_csCurKind = csCurType;
|
|
if(csCurTKName != _T("") && csCurType == _T(""))
|
|
{
|
|
bFlag = FALSE;
|
|
SetDlgItemText(IDC_S_DESCRIPTION, XString(_T("当前图库文件:%s"), (const TCHAR*)csCurTKName));
|
|
}
|
|
else if(csCurTKName == _T(""))
|
|
{
|
|
bFlag = FALSE;
|
|
SetDlgItemText(IDC_S_DESCRIPTION, XString(_T("当前图库组文件:%s"), (const TCHAR*)m_csCurTKWFile));
|
|
}
|
|
}
|
|
ResetImage();
|
|
if(bFlag)
|
|
ResetStateText();
|
|
*pResult = 0;
|
|
}
|
|
|
|
void CTKWorkspace::OnBeginlabeleditTkList(NMHDR* pNMHDR, LRESULT* pResult)
|
|
{
|
|
LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
|
|
m_bLock = TRUE;
|
|
*pResult = 0;
|
|
}
|
|
|
|
void CTKWorkspace::OnEndlabeleditTkList(NMHDR* pNMHDR, LRESULT* pResult)
|
|
{
|
|
LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
|
|
int sel = pDispInfo->item.iItem;
|
|
if((pDispInfo->item.pszText != NULL)&&(sel != -1))
|
|
{
|
|
CString csTKName = m_ImageBox.m_lstBlk[sel]->csTKFile;
|
|
CString sKind, sItem, sText; //类别,名称
|
|
CodeBase db;
|
|
XDbfTable *pTable = db.Open(csTKName);
|
|
if(!pTable)
|
|
{
|
|
MessageBox(XString(_T("%s文件只读或损坏"), (const TCHAR *)csTKName));
|
|
m_bLock = FALSE;
|
|
return;
|
|
}
|
|
sText = m_ImageBox.m_lstBlk[sel]->csDrawing;
|
|
for(pTable->MoveFirst(); !pTable->IsEOF(); pTable->MoveNext())
|
|
{
|
|
GET_FIELD(pTable, _T("kind"), sKind);
|
|
GET_FIELD(pTable, _T("drawing"), sItem);
|
|
if(sItem == sText)
|
|
{
|
|
SET_FIELD(pTable, _T("item"), pDispInfo->item.pszText);
|
|
m_ImageBox.m_lstBlk[sel]->csItem = pDispInfo->item.pszText;
|
|
//ResetListData();
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
m_bLock = FALSE;
|
|
*pResult = 1;
|
|
}
|
|
|
|
|
|
void CTKWorkspace::ResetImage(BOOL bReservePage)
|
|
{
|
|
/*
|
|
if(m_bDragging)
|
|
{
|
|
POSITION pos = m_listCtrl.GetFirstSelectedItemPosition();
|
|
m_ImageBox.m_lstSelected.Reset();
|
|
|
|
while (pos)
|
|
{
|
|
int nItem = m_listCtrl.GetNextSelectedItem(pos);
|
|
m_ImageBox.m_lstSelected.Append(new int(nItem));
|
|
}
|
|
}*/
|
|
|
|
|
|
int iPage = m_ImageBox.CurPage();
|
|
DList<int> lstSelected; //选中的项
|
|
for(int m=0;m<m_ImageBox.m_lstSelected.Length();m++)
|
|
{
|
|
int nItem = *m_ImageBox.m_lstSelected[m];
|
|
lstSelected.Append(new int(nItem/**m_ImageBox.m_lstSelected[m]*/));
|
|
}
|
|
|
|
CString csCurTKName, csCurType;
|
|
HTREEITEM htree = NULL;
|
|
htree = m_treeCtrl.GetSelectedItem();
|
|
if(htree)
|
|
{
|
|
if(m_treeCtrl.m_bMerge)
|
|
{
|
|
m_treeCtrl.GetNodeAllPath(htree, csCurType);
|
|
m_ImageBox.SetTKWInfo(m_csCurTKWFile, csCurType);
|
|
}
|
|
else
|
|
{
|
|
m_treeCtrl.GetNodeAllPath(htree, csCurTKName, csCurType);
|
|
m_ImageBox.SetTKInfo(csCurTKName, csCurType);
|
|
}
|
|
}
|
|
|
|
if(bReservePage)
|
|
{
|
|
for(int n=0;n<lstSelected.Length();n++)
|
|
{
|
|
m_ImageBox.m_lstSelected.Append(new int(*lstSelected[n]));
|
|
}
|
|
}
|
|
|
|
if((iPage+1) > m_ImageBox.TotalPages())
|
|
iPage--;
|
|
if(bReservePage && iPage != m_ImageBox.CurPage() && iPage > -1)
|
|
m_ImageBox.GoPage(iPage);
|
|
else
|
|
m_ImageBox.SetupImage(TRUE);
|
|
|
|
InitVSBar();
|
|
ResetListData();
|
|
}
|
|
|
|
void CTKWorkspace::ResetStateText()
|
|
{
|
|
CString csMsg, csRecord;
|
|
int len = m_ImageBox.m_lstSelected.Length();
|
|
if(len < 1)
|
|
csRecord = _T("无选中图块!");
|
|
for(int i=0;i<len;i++)
|
|
{
|
|
int sel = *m_ImageBox.m_lstSelected[i];
|
|
csRecord += m_ImageBox.m_lstBlk[sel]->csDrawing;
|
|
csRecord += _T(" ");
|
|
}
|
|
csMsg.Format(_T("当前选中记录号:%s 页号:%d/%d 总记录: %d"), (const TCHAR *)csRecord,
|
|
m_ImageBox.CurPage() + 1, m_ImageBox.TotalPages(), m_ImageBox.GetTotalRecords());
|
|
SetDlgItemText(IDC_S_DESCRIPTION, csMsg);
|
|
}
|
|
|
|
BOOL CTKWorkspace::IsLock()
|
|
{
|
|
if(m_bLock || m_treeCtrl.m_bLock || m_treeCtrl.m_bMerge)
|
|
return TRUE;
|
|
else
|
|
return FALSE;
|
|
}
|
|
|
|
//选最近库
|
|
BOOL CTKWorkspace::OnSelectRecentBlb(UINT nID)
|
|
{
|
|
if(m_bLock || m_treeCtrl.m_bLock)
|
|
return FALSE;
|
|
int nLen = m_lstBlbNames.Length();
|
|
int nIndex = nID - OpenMenuID;
|
|
if(nIndex >= nLen)
|
|
return FALSE;
|
|
ASSERT(nIndex < nLen && nIndex>=0);
|
|
XString szName = m_lstBlbNames[nIndex];
|
|
if(!FindFile(szName))
|
|
{
|
|
return FALSE;
|
|
}
|
|
m_csCurTKWFile = szName;
|
|
m_treeCtrl.SetDataSource(m_csCurTKWFile);
|
|
m_ImageBox.m_bIsJpgShow = m_treeCtrl.m_bIsJpgShow;
|
|
|
|
m_treeCtrl.SelectItem(m_treeCtrl.GetRootItem());
|
|
SetDlgItemText(IDC_S_DESCRIPTION, _T("打开tkw图库组文件"));
|
|
SaveStatus();
|
|
LoadStatus();
|
|
return TRUE;
|
|
}
|
|
|
|
//**********************************TOOLBAR 命令***********************************************
|
|
|
|
// 弹出布局菜单
|
|
void CTKWorkspace::OnToolbarDropDown(NMHDR * pnmtb0, LRESULT *plr)
|
|
{
|
|
NMTOOLBAR* pnmtb= (NMTOOLBAR *)pnmtb0;
|
|
CRect rc;
|
|
m_ToolBar.SendMessage(TB_GETRECT, pnmtb->iItem, (LPARAM)&rc);
|
|
m_ToolBar.ClientToScreen(&rc);
|
|
int i, nLenArray;
|
|
UINT MenuID;
|
|
XStringList lstTkwItem;
|
|
CTemporaryResourceOverride vTemp;//加载菜单
|
|
switch (pnmtb->iItem)
|
|
{
|
|
case ID_BLK_LAYOUT:
|
|
OnBlkLayout();
|
|
break;
|
|
case ID_BLK_OPENLIB:
|
|
if(m_pOpenMenu)
|
|
{
|
|
m_pOpenMenu->DestroyMenu();
|
|
m_pOpenMenu->CreatePopupMenu();
|
|
}
|
|
else
|
|
{
|
|
m_pOpenMenu = new CMenu;
|
|
m_pOpenMenu->CreatePopupMenu();
|
|
}
|
|
for(i=0; i< m_lstBlbNames.Length(); i++) // 将最近使用过的库加入菜单
|
|
m_pOpenMenu->AppendMenu(MF_STRING, OpenMenuID + i, m_lstBlbNames[i]);
|
|
m_pOpenMenu->AppendMenu(MF_SEPARATOR);
|
|
MenuID = OpenMenuID + m_lstBlbNames.Length();
|
|
GetTchtkwAllItem(lstTkwItem);
|
|
nLenArray = lstTkwItem.Length();
|
|
for(i=0;i<nLenArray;i++)
|
|
{
|
|
CString csTkwItem = (const TCHAR*)lstTkwItem[i];
|
|
if(csTkwItem == _T("#"))
|
|
m_pOpenMenu->AppendMenu(MF_SEPARATOR);
|
|
else
|
|
m_pOpenMenu->AppendMenu(MF_STRING, MenuID + i, csTkwItem);
|
|
}
|
|
m_pOpenMenu->TrackPopupMenu( TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_VERTICAL,
|
|
rc.left, rc.bottom, this, &rc);
|
|
break;
|
|
case ID_BLK_SORT:
|
|
OnBlkSort();
|
|
break;
|
|
default:
|
|
return;
|
|
}
|
|
}
|
|
|
|
//还原tk
|
|
void CTKWorkspace::OnBlkRevert()
|
|
{
|
|
m_treeCtrl.m_bMerge = FALSE;
|
|
|
|
//add by xlc on 080829
|
|
m_menu.CheckMenuItem(ID_BLK_MERGE,MF_UNCHECKED);
|
|
m_menu.CheckMenuItem(ID_BLK_REVERT,MF_CHECKED);
|
|
m_menu.EnableMenuItem(ID_TK_POPUP_INSERTTK,IsLock()?MF_GRAYED:MF_ENABLED);
|
|
m_menu.EnableMenuItem(ID_TK_POPUP_REMOVETK,IsLock()?MF_GRAYED:MF_ENABLED);
|
|
m_menu.EnableMenuItem(ID_TK_POPUP_RENAMEKIND,IsLock()?MF_GRAYED:MF_ENABLED);
|
|
|
|
m_treeCtrl.SetupTreeData();
|
|
HTREEITEM hRoot = m_treeCtrl.GetRootItem();
|
|
m_treeCtrl.Expand(hRoot, TVE_EXPAND);
|
|
ResetImage();
|
|
SetDlgItemText(IDC_S_DESCRIPTION, _T("还原TK显示"));
|
|
}
|
|
|
|
//合并tk
|
|
void CTKWorkspace::OnBlkMerge()
|
|
{
|
|
m_treeCtrl.m_bMerge = TRUE;
|
|
|
|
//add by xlc on 080829
|
|
m_menu.CheckMenuItem(ID_BLK_MERGE,MF_CHECKED);
|
|
m_menu.CheckMenuItem(ID_BLK_REVERT,MF_UNCHECKED);
|
|
m_menu.EnableMenuItem(ID_TK_POPUP_INSERTTK,IsLock()?MF_GRAYED:MF_ENABLED);
|
|
m_menu.EnableMenuItem(ID_TK_POPUP_REMOVETK,IsLock()?MF_GRAYED:MF_ENABLED);
|
|
m_menu.EnableMenuItem(ID_TK_POPUP_RENAMEKIND,IsLock()?MF_GRAYED:MF_ENABLED);
|
|
|
|
m_treeCtrl.SetupTreeData();
|
|
HTREEITEM hRoot = m_treeCtrl.GetRootItem();
|
|
m_treeCtrl.Expand(hRoot, TVE_EXPAND);
|
|
ResetImage();
|
|
SetDlgItemText(IDC_S_DESCRIPTION, _T("合并TK显示"));
|
|
}
|
|
|
|
//图块改名
|
|
void CTKWorkspace::OnBlkRename()
|
|
{
|
|
m_listCtrl.SetFocus();
|
|
if(m_ImageBox.m_lstSelected.Length() < 1)
|
|
{
|
|
AfxMessageBox(_T("请选择一图块!"));
|
|
return;
|
|
}
|
|
ASSERT(m_ImageBox.m_nIndex>=0);
|
|
|
|
//modify by xlc on 070917
|
|
// m_bEditLabel = TRUE;
|
|
// m_listCtrl.EditLabel(m_ImageBox.m_nIndex);
|
|
if(m_ImageBox.m_lstSelected.Length() == 1)
|
|
{
|
|
m_bEditLabel = TRUE;
|
|
m_listCtrl.EditLabel(m_ImageBox.m_nIndex);
|
|
}
|
|
else
|
|
{
|
|
CTemporaryResourceOverride res;
|
|
CRenameDlg dlg;
|
|
|
|
POSITION pos = m_listCtrl.GetFirstSelectedItemPosition();
|
|
int index = m_listCtrl.GetNextSelectedItem(pos);
|
|
CString name = m_ImageBox.m_lstBlk[index]->csItem;
|
|
dlg.m_strName = name;
|
|
|
|
if(dlg.DoModal() != IDOK)
|
|
return;
|
|
|
|
BOOL bCheck = dlg.m_bCheck; //是否有序号
|
|
name = dlg.m_strName; //名称
|
|
int nNum = dlg.m_nNum; //起始编号
|
|
|
|
int count = m_listCtrl.GetSelectedCount(); //修改项个数
|
|
CString csTKName = m_ImageBox.m_lstBlk[index]->csTKFile;
|
|
CString sKind, sDrawing, sText; //类别,名称
|
|
CodeBase db;
|
|
XDbfTable *pTable = db.Open(csTKName);
|
|
if(!pTable)
|
|
{
|
|
MessageBox(XString(_T("%s文件只读或损坏"), (const TCHAR *)csTKName));
|
|
return;
|
|
}
|
|
|
|
for(pTable->MoveFirst(); !pTable->IsEOF(); pTable->MoveNext())
|
|
{
|
|
if(count >= 1)
|
|
{
|
|
GET_FIELD(pTable, _T("drawing"), sDrawing);
|
|
|
|
int i=0;
|
|
pos = m_listCtrl.GetFirstSelectedItemPosition();
|
|
while(pos)
|
|
{
|
|
int sel = m_listCtrl.GetNextSelectedItem(pos);
|
|
sText = m_ImageBox.m_lstBlk[sel]->csDrawing;
|
|
|
|
if(sDrawing == sText)
|
|
{
|
|
CString strName = name;
|
|
if(bCheck)
|
|
{
|
|
strName.Format( _T("%s%d"),name,(nNum+i));
|
|
}
|
|
SET_FIELD(pTable, _T("item"), (const TCHAR *)strName);
|
|
m_ImageBox.m_lstBlk[sel]->csItem = strName;
|
|
m_listCtrl.SetItemText(sel,0,strName);
|
|
|
|
count --;
|
|
if(count == 0)
|
|
return;
|
|
break;
|
|
}
|
|
|
|
i++;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
//排序
|
|
void CTKWorkspace::OnBlkSort()
|
|
{
|
|
//modify by xlc on 070919
|
|
/* m_ImageBox.m_bSort = !m_ImageBox.m_bSort;
|
|
m_ImageBox.SetSort();
|
|
InitVSBar();
|
|
ResetListData();
|
|
if(m_ImageBox.m_bSort)
|
|
SetDlgItemText(IDC_S_DESCRIPTION, _T("按排序图块名次序显示"));
|
|
else
|
|
SetDlgItemText(IDC_S_DESCRIPTION, _T("按图块入库次序显示"));
|
|
*/
|
|
CWnd *pWnd = &m_ToolBar;
|
|
CMenu menu;
|
|
CMenu* pPopup;
|
|
|
|
CRect rc;
|
|
pWnd->SendMessage(TB_GETRECT, ID_BLK_SORT, (LPARAM)&rc);
|
|
pWnd->ClientToScreen(&rc);
|
|
{
|
|
CTemporaryResourceOverride vTemp;//加载菜单
|
|
menu.LoadMenu(IDR_MENU_SORT);
|
|
}
|
|
if(m_ImageBox.m_bSort)
|
|
{
|
|
menu.CheckMenuItem(ID_MENU_SSORT,MF_CHECKED);
|
|
}
|
|
else
|
|
{
|
|
menu.CheckMenuItem(ID_MENU_SSORT,MF_UNCHECKED);
|
|
}
|
|
pPopup = menu.GetSubMenu(0);
|
|
pPopup->TrackPopupMenu( TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_VERTICAL,
|
|
rc.left, rc.bottom, this, &rc);
|
|
}
|
|
|
|
//删除所有选中图块
|
|
void CTKWorkspace::OnBlkDel()
|
|
{
|
|
int len = m_ImageBox.m_lstSelected.Length();
|
|
if(len < 1)
|
|
{
|
|
AfxMessageBox(_T("请选择一图块!"));
|
|
return;
|
|
}
|
|
if(MessageBox(_T("您是否真的确定要删除此图块(无法恢复)?"),_T("警告"),MB_OKCANCEL|MB_ICONQUESTION) != IDOK)
|
|
return;
|
|
for(int i=0;i<len;i++)
|
|
{
|
|
int sel = *m_ImageBox.m_lstSelected[i];
|
|
TKStruct &cur = *(m_ImageBox.m_lstBlk[sel]);
|
|
/*
|
|
DbfAccess db(cur.csTKFile, FLAG_DELETE, 1, 0);
|
|
db.keyFieldName[0] = strdup("drawing");
|
|
db.keyinfo[0]=strdup(_AS(cur.csDrawing));
|
|
if(DBFFUN(db))
|
|
return;
|
|
*/
|
|
NewDbfTool::DeleteRecordByTKStruct(cur.csTKFile, _T("drawing"), cur.csDrawing);
|
|
XString xsDwb(256), xsDwb2d(256), xsSlb(256), xsJpb(256);
|
|
if(m_treeCtrl.m_bIsJpgShow)
|
|
{
|
|
xsDwb << GetPathNameByAllName(cur.csTKFile) << GetFileNameByAllName(cur.csTKFile) << _T("_3d.DWB");
|
|
xsDwb2d << GetPathNameByAllName(cur.csTKFile) << GetFileNameByAllName(cur.csTKFile) << _T("_2d.DWB");
|
|
XDrawingLib dwb2d(xsDwb2d);
|
|
if(!(!dwb2d))
|
|
dwb2d.Remove(cur.csDrawing);
|
|
}
|
|
else
|
|
xsDwb << GetPathNameByAllName(cur.csTKFile) << GetFileNameByAllName(cur.csTKFile) << _T(".DWB");
|
|
|
|
xsSlb << GetPathNameByAllName(cur.csTKFile) << GetFileNameByAllName(cur.csTKFile) << _T(".SLB");
|
|
xsJpb << GetPathNameByAllName(cur.csTKFile) << GetFileNameByAllName(cur.csTKFile) << _T(".JPB");
|
|
XDrawingLib dwb(xsDwb);
|
|
if(!(!dwb))
|
|
{
|
|
dwb.Remove(cur.csDrawing);
|
|
}
|
|
if(m_treeCtrl.m_bIsJpgShow)
|
|
{
|
|
XJpegLib jpb(xsJpb);
|
|
if(!(!jpb)) jpb.Remove(cur.csDrawing);
|
|
}
|
|
else
|
|
{
|
|
XSlideLib slb(xsSlb);
|
|
if(!(!slb)) slb.Remove(cur.csDrawing);
|
|
}
|
|
}
|
|
m_ImageBox.m_lstSelected.Reset();
|
|
ResetImage(TRUE);
|
|
if (m_ImageBox.TotalPages() <= 0)
|
|
return;
|
|
m_ImageBox.m_lstSelected.Append(new int(0));
|
|
m_ImageBox.SelectIndex(0);
|
|
len = m_ImageBox.m_lstSelected.Length();
|
|
for(i=0;i<len;i++)
|
|
{
|
|
int sel = *m_ImageBox.m_lstSelected[i];
|
|
m_listCtrl.SetItemState(sel, LVIS_SELECTED, LVIS_SELECTED);
|
|
}
|
|
SetDlgItemText(IDC_S_DESCRIPTION, _T("删除所有选中图块"));
|
|
}
|
|
|
|
|
|
//删除当前类别及图块
|
|
void CTKWorkspace::OnBlkDelkind()
|
|
{
|
|
if(IsLock()) return;
|
|
if(m_treeCtrl.DelCurKind())
|
|
{
|
|
ResetImage();
|
|
SetDlgItemText(IDC_S_DESCRIPTION, _T("删除选中类别下所有图块"));
|
|
}
|
|
}
|
|
|
|
// 弹出布局菜单
|
|
void CTKWorkspace::OnBlkLayout()
|
|
{
|
|
CWnd *pWnd = &m_ToolBar;
|
|
CMenu menu;
|
|
CMenu* pPopup, *pPopupLayout;
|
|
CMenu popupMenu;
|
|
CRect rc;
|
|
pWnd->SendMessage(TB_GETRECT, ID_BLK_LAYOUT, (LPARAM)&rc);
|
|
pWnd->ClientToScreen(&rc);
|
|
{
|
|
CTemporaryResourceOverride vTemp;//加载菜单
|
|
menu.LoadMenu(IDR_MENU_IMAGELAYOUT);
|
|
}
|
|
pPopup = menu.GetSubMenu(0);
|
|
pPopupLayout = pPopup->GetSubMenu(8);
|
|
pPopupLayout->TrackPopupMenu( TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_VERTICAL,
|
|
rc.left, rc.bottom, this, &rc);
|
|
}
|
|
|
|
// 新建tkw图库组文件
|
|
void CTKWorkspace::OnBlkNewlib()
|
|
{
|
|
if(m_bLock || m_treeCtrl.m_bLock) return;
|
|
if(g_nArchType==4)
|
|
{
|
|
AfxMessageBox(_T("学习版不支持,欢迎购买正版!"));
|
|
return;
|
|
}
|
|
|
|
CTemporaryResourceOverride vTemp;
|
|
CNewTKWDlg dlg(_T("新建"), _T("上华图库组文件 (*.TKW) |*.tkw||"));
|
|
if(dlg.DoModal()!=IDOK)
|
|
return;
|
|
TCHAR szShortPath[256]=_T("");
|
|
_tcscpy(szShortPath, dlg.GetPathName());
|
|
if(FindFile(szShortPath))
|
|
{
|
|
AfxMessageBox(_T("已存在此文件!请换一文件。"));
|
|
return;
|
|
}
|
|
|
|
m_csCurTKWFile = szShortPath;
|
|
CTkwFile tkw;
|
|
tkw.m_csVersion = _T("1.0");
|
|
tkw.m_bIsJpg = !dlg.m_iTKType;
|
|
tkw.m_csDescription = _T("");
|
|
tkw.WriteFile(m_csCurTKWFile);
|
|
|
|
m_ToolBar.CheckButton(ID_BLK_REVERT, 1);
|
|
m_treeCtrl.m_bMerge = FALSE;
|
|
m_treeCtrl.SetDataSource(m_csCurTKWFile);
|
|
m_ImageBox.m_bIsJpgShow = m_treeCtrl.m_bIsJpgShow;
|
|
m_treeCtrl.SelectItem(m_treeCtrl.GetRootItem());
|
|
SaveStatus();
|
|
LoadStatus();
|
|
|
|
//add by xlc on 090728 更新图库动态菜单
|
|
if(m_nOpenMode==0)
|
|
{
|
|
AddDynMenu(FALSE);
|
|
}
|
|
|
|
SetDlgItemText(IDC_S_DESCRIPTION, _T("新建tkw图库组文件"));
|
|
}
|
|
|
|
// 打开tkw图库组文件
|
|
void CTKWorkspace::OnBlkOpenlib()
|
|
{
|
|
if(m_bLock || m_treeCtrl.m_bLock) return;
|
|
|
|
CTemporaryResourceOverride vTemp;
|
|
CNewTKWDlg dlg(_T("打开"), _T("上华图库组文件 (*.TKW) |*.TKW|上华图库文件 (*.TK) |*.tk||"));
|
|
if(dlg.DoModal()!=IDOK)
|
|
return;
|
|
if(!FindFile(dlg.GetPathName()))
|
|
{
|
|
AfxMessageBox(_T("不存在此文件!请换一文件。"));
|
|
return;
|
|
}
|
|
CString csTKWname = dlg.GetPathName();
|
|
if(dlg.GetFileExt() == _T("tk") || dlg.GetFileExt() == _T("TK"))
|
|
{
|
|
csTKWname = dlg.GetPathName() + _T("w");
|
|
if(dlg.GetFileExt() == _T("TK"))
|
|
csTKWname = dlg.GetPathName() + _T("W");
|
|
if(!FindFile(csTKWname))
|
|
{
|
|
CTkwFile tkw;
|
|
tkw.m_csVersion = _T("1.0");
|
|
if(dlg.m_iTKType == 1)
|
|
tkw.m_bIsJpg = FALSE; // 普通图库
|
|
else
|
|
tkw.m_bIsJpg = TRUE; // 多视图图库
|
|
tkw.m_csDescription = _T("");
|
|
XStringList lstTK;
|
|
lstTK.Append(tstrnew(dlg.GetFileName()));
|
|
tkw.SetTKList(lstTK);
|
|
tkw.WriteFile(csTKWname);
|
|
}
|
|
}
|
|
m_ToolBar.CheckButton(ID_BLK_REVERT, 1);
|
|
m_treeCtrl.m_bMerge = FALSE;
|
|
m_csCurTKWFile = csTKWname;
|
|
m_treeCtrl.SetDataSource(csTKWname);
|
|
m_ImageBox.m_bIsJpgShow = m_treeCtrl.m_bIsJpgShow;
|
|
m_treeCtrl.SelectItem(m_treeCtrl.GetRootItem());
|
|
|
|
SetDlgItemText(IDC_S_DESCRIPTION, _T("打开tkw图库组文件"));
|
|
SaveStatus();
|
|
LoadStatus();
|
|
|
|
//add by xlc on 090728 更新图库动态菜单
|
|
if(m_nOpenMode==0)
|
|
{
|
|
AddDynMenu(FALSE);
|
|
}
|
|
}
|
|
|
|
void CTKWorkspace::OnBlkAbout()
|
|
{
|
|
return;
|
|
CTemporaryResourceOverride vTmp;
|
|
CTKAboutDlg dlg;
|
|
dlg.m_csDes = m_treeCtrl.m_csDescrption;
|
|
dlg.DoModal();
|
|
}
|
|
|
|
// 下一页
|
|
void CTKWorkspace::OnBlkPagedown()
|
|
{
|
|
m_ImageBox.GoPage(m_ImageBox.CurPage() + 1);
|
|
UINT nEndPos = m_vsBar.GetScrollPos();
|
|
nEndPos += m_nPageRow;
|
|
m_vsBar.SetScrollPos(nEndPos);
|
|
ResetStateText();
|
|
}
|
|
|
|
// 上一页
|
|
void CTKWorkspace::OnBlkPageup()
|
|
{
|
|
m_ImageBox.GoPage(m_ImageBox.CurPage() - 1);
|
|
UINT nEndPos = m_vsBar.GetScrollPos();
|
|
nEndPos -= m_nPageRow;
|
|
m_vsBar.SetScrollPos(nEndPos);
|
|
ResetStateText();
|
|
}
|
|
|
|
// 批量入库
|
|
void CTKWorkspace::OnBlkUpgrade()
|
|
{
|
|
if(g_nArchType==4)
|
|
{
|
|
AfxMessageBox(_T("学习版不支持,欢迎购买正版!"));
|
|
return;
|
|
}
|
|
if(m_ImageBox.m_bIsJpgShow)
|
|
return;
|
|
HTREEITEM htree = m_treeCtrl.GetSelectedItem();
|
|
CString csCurTKName, csCurType;
|
|
m_treeCtrl.GetNodeAllPath(htree, csCurTKName, csCurType);
|
|
if(csCurTKName == _T(""))
|
|
{
|
|
AfxMessageBox(_T("您还没有选择图库tk文件,无法入库!"));
|
|
return;
|
|
}
|
|
if(IsLock()) return;
|
|
SetDlgItemText(IDC_S_DESCRIPTION, _T("批量入库"));
|
|
|
|
CAyrDlg AyrDlg(this);
|
|
{
|
|
CTemporaryResourceOverride vTmp;
|
|
if(AyrDlg.DoModal() != IDOK)
|
|
return;
|
|
}
|
|
const TCHAR *pszFilter = _T("DWG Files (*.dwg)|*.dwg||");
|
|
CFileDialog dlg(TRUE, _T("DWG"), NULL, OFN_ALLOWMULTISELECT|OFN_HIDEREADONLY, pszFilter, this);
|
|
TCHAR strFileName[20000] = _T(""); //申请自己的16K缓冲区
|
|
int maxChar = 19999;
|
|
TCHAR szDlgTitle[] = _T("选择需入库的DWG文件");
|
|
|
|
dlg.m_ofn.lpstrFile = strFileName;
|
|
dlg.m_ofn.nMaxFile = maxChar;
|
|
dlg.m_ofn.lpstrTitle = szDlgTitle;
|
|
dlg.m_ofn.lpstrInitialDir = g_szDirName;
|
|
if(dlg.DoModal() !=IDOK )
|
|
return;
|
|
_tcscpy(g_szDirName, dlg.GetPathName());
|
|
|
|
HideDialog(TRUE);
|
|
CProgressWnd wndProgress(acedGetAcadFrame(), _T("Progress"), TRUE);
|
|
CRect rect;
|
|
wndProgress.GetWindowRect(&rect);
|
|
wndProgress.MoveWindow(0,0,rect.Width(),rect.Height());
|
|
POSITION pos = dlg.GetStartPosition();
|
|
int Num = 0;
|
|
while(pos!=NULL)
|
|
{
|
|
dlg.GetNextPathName(pos);
|
|
Num++;
|
|
}
|
|
pos = dlg.GetStartPosition();
|
|
wndProgress.SetRange(0, Num);
|
|
wndProgress.SetText(_T("正在入库,请稍候...\n按取消键中断此次操作!"));
|
|
PickSet ss(SS_FREE);
|
|
if(ss.Get(_T("X"),NULL,NULL,NULL)==RTNORM)
|
|
{
|
|
//add by xlc on 080812 解决对局部隐藏对象的影响
|
|
PickSet ssHide(SS_FREE);
|
|
GetPickSetByGroup(_T("_TCH_HIDE_GROUP"), ssHide);
|
|
ss -= ssHide;
|
|
|
|
MakeVisible(ss, false);
|
|
}
|
|
CodeBase db;
|
|
CString csIndex;
|
|
XDbfTable *pTable = db.Open(csCurTKName);
|
|
if(!pTable)
|
|
{
|
|
AfxMessageBox(_T("TK文件只读或损坏!"));
|
|
MakeVisible(ss, true);
|
|
return;
|
|
}
|
|
XString xsDwbPath(256), xsSlbPath(256);
|
|
XString sDrive1, sDir1(256), sFname1,sKind, sExt1, sSldName;
|
|
_tsplitpath(csCurTKName, sDrive1, sDir1, sFname1, sExt1); //分割!
|
|
xsDwbPath << sDrive1 << sDir1 << sFname1 << _T(".DWB");
|
|
xsSlbPath << sDrive1 << sDir1 << sFname1 << _T(".SLB");
|
|
|
|
while(pos!=NULL)
|
|
{
|
|
XFilePathName xfpn = (LPCTSTR)dlg.GetNextPathName(pos);
|
|
csIndex = xfpn.getFileName();
|
|
XString xsRet;
|
|
if(GetNextDrawing(csCurTKName, xsRet)!=RTNORM)
|
|
{
|
|
MakeVisible(ss, true);
|
|
return;
|
|
}
|
|
|
|
pTable->AppendBegin();
|
|
SET_FIELD(pTable, _T("kind"), (const TCHAR *)csCurType);
|
|
SET_FIELD(pTable, _T("item"), (const TCHAR *)csIndex);
|
|
SET_FIELD(pTable, _T("drawing"), (const TCHAR *)xsRet);
|
|
pTable->AppendEnd();
|
|
// Add DWB
|
|
XDrawingLib dwb(xsDwbPath);
|
|
dwb.Append(xfpn, xsRet);
|
|
|
|
CString csSldName = xfpn.getDriver()+xfpn.getDir()+xfpn.getFileName()+_T(".SLD");//源路径
|
|
if(!FindFile(csSldName))
|
|
{
|
|
XPushVar<int> osmode(_T("OSMODE"), 0);
|
|
XPushVar<int> attreq(_T("ATTREQ"), 0);
|
|
SHads_command(RTSTR, _T(".INSERT"), RTSTR, (const TCHAR *)xfpn, RTSTR, _T("0,0,0"),
|
|
RTREAL, 1.0, RTREAL, 1.0, RTREAL, 0.0, RTNONE);
|
|
Entity ent;
|
|
ent.GetLast();
|
|
SHads_command(RTSTR, _T(".ZOOM"),RTSTR, _T("extent"), RTNONE);
|
|
if(AyrDlg.m_bNeedHide)
|
|
SHads_command(RTSTR, _T("HIDE"), RTNONE);
|
|
XString xsTempSld=GetTempFileName(_T(".SLD"));
|
|
SHads_command(RTSTR, _T(".MSLIDE"), RTSTR, (const TCHAR *)xsTempSld, RTNONE);
|
|
XSlideLib slb(xsSlbPath);
|
|
slb.Append(xsTempSld, xsRet);
|
|
ent.Delete();
|
|
_tremove(xsTempSld);
|
|
}
|
|
else
|
|
{
|
|
XSlideLib slb(xsSlbPath);
|
|
slb.Append(csSldName, xsRet);
|
|
}
|
|
wndProgress.StepIt();
|
|
wndProgress.PeekAndPump();
|
|
if (wndProgress.Cancelled()) break;
|
|
if(ads_usrbrk() == 1) break; //用户中断
|
|
}
|
|
MakeVisible(ss, true);
|
|
HideDialog(FALSE);
|
|
ResetImage();
|
|
SetDlgItemText(IDC_S_DESCRIPTION, _T("批量入库完毕!"));
|
|
}
|
|
//add by cwk on 060912
|
|
//extern BOOL IsDigital(const TCHAR *pStr);
|
|
extern XString Int2Char8(unsigned i);
|
|
//最大支持999999
|
|
int GetNextDrawing(const TCHAR *tkName, TCHAR *dwg)
|
|
{
|
|
CodeBase db;
|
|
XDbfTable *pTable = db.Open(tkName);
|
|
if(!pTable)
|
|
{
|
|
AfxMessageBox(_T("TK文件只读或损坏!"));
|
|
return RTERROR;
|
|
}
|
|
Array<CString> recs;
|
|
CString str;
|
|
CString sTemp;
|
|
for (pTable->MoveFirst(0);!pTable->IsEOF();pTable->MoveNext(0))
|
|
{
|
|
GET_FIELD(pTable,_T("Drawing"),sTemp);
|
|
str = sTemp;
|
|
if (IsDigital(str)&&_tcslen(str)==8)
|
|
recs.AddTail(LPCTSTR(str));
|
|
}
|
|
if (recs.GetLength() >= 1)
|
|
{
|
|
CString maxStr = recs[0];
|
|
int i = 1;
|
|
while (i < recs.GetLength())
|
|
{
|
|
if (maxStr<recs[i])
|
|
maxStr = recs[i];
|
|
i++;
|
|
}
|
|
if(maxStr && IsDigital(maxStr))
|
|
{
|
|
int slen=(int)_tcslen(maxStr);
|
|
TCHAR a1=maxStr[slen-1], a2=maxStr[slen-2], a3=maxStr[slen-3],a4 = maxStr[slen-4],a5 = maxStr[slen-5],a6 = maxStr[slen-6];
|
|
if(a1>=_T('0') && a1<_T('9')) a1++;
|
|
else if(a1==_T('9') && a2>=_T('0') && a2<_T('9'))
|
|
{ a1=_T('0'); a2++; }
|
|
else if(a1==_T('9') && a2==_T('9') && a3>=_T('0') && a3<_T('9'))
|
|
{ a1=a2=_T('0'); a3++; }
|
|
else if(a1==_T('9') && a2==_T('9') && a3==_T('9') && a4>=_T('0') &&a4<_T('9'))
|
|
{ a1=a2=a3=_T('0'); a4++; }
|
|
else if(a1==_T('9') && a2==_T('9') && a3==_T('9') && a4==_T('9') && a5>=_T('0')&&a5<_T('9'))
|
|
{ a1=a2=a3=a4=_T('0'); a5++; }
|
|
else if(a1==_T('9') && a2==_T('9') && a3==_T('9') && a4==_T('9') && a5==_T('9')&&a6>=_T('0')&&a6<_T('9'))
|
|
{a1=a2=a3=a4=a5=_T('0'); a6++; }
|
|
maxStr.Delete(slen-6,6);
|
|
maxStr = maxStr + a6;
|
|
maxStr = maxStr + a5;
|
|
maxStr = maxStr + a4;
|
|
maxStr = maxStr + a3;
|
|
maxStr = maxStr + a2;
|
|
maxStr = maxStr + a1;
|
|
_tcscpy(dwg, maxStr);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
_tcscpy(dwg, _T("00000001"));
|
|
return RTNORM;
|
|
}
|
|
return RTNORM;
|
|
}
|
|
// 新图入库
|
|
void CTKWorkspace::OnBlkNewdwg()
|
|
{
|
|
if(g_nArchType==4)
|
|
{
|
|
AfxMessageBox(_T("学习版不支持,欢迎购买正版!"));
|
|
return;
|
|
}
|
|
|
|
if(IsLock()) return;
|
|
HTREEITEM htree = m_treeCtrl.GetSelectedItem();
|
|
CString csCurTKName, csCurType;
|
|
m_treeCtrl.GetNodeAllPath(htree, csCurTKName, csCurType);
|
|
if(csCurTKName == _T(""))
|
|
{
|
|
AfxMessageBox(_T("您还没有选择图库tk文件,无法入库!"));
|
|
return;
|
|
}
|
|
|
|
TCHAR xsRet[256];
|
|
|
|
if(GetNextDrawing(csCurTKName, xsRet)!=RTNORM)
|
|
return;
|
|
HideDialog(TRUE);
|
|
|
|
if(AddImage2Dwb(csCurTKName, CString((const TCHAR*)xsRet)) == RTNORM)
|
|
{
|
|
CodeBase db;
|
|
XDbfTable *pTable = db.Open(csCurTKName);
|
|
if(!pTable)
|
|
{
|
|
AfxMessageBox(_T("TK文件只读或损坏!"));
|
|
return;
|
|
}
|
|
|
|
pTable->AppendBegin();
|
|
SET_FIELD(pTable, _T("kind"), (const TCHAR*)csCurType);
|
|
|
|
// modify bt xlc on 080818 新入库的图块名为XX*YY格式
|
|
double width(0),high(0);
|
|
XString xsBlockName(256);
|
|
xsBlockName << GetPathNameByAllName(csCurTKName) << GetFileNameByAllName(csCurTKName) << _T("(")<<xsRet<<_T(")");
|
|
if(GetBlockSize(xsBlockName, width, high))
|
|
{
|
|
SET_FIELD(pTable, _T("Item"), XString(_T("%dX%d"),(int)width,(int)high));
|
|
}
|
|
else
|
|
|
|
{
|
|
SET_FIELD(pTable, _T("Item"), _T("新图块"));
|
|
}
|
|
SET_FIELD(pTable, _T("Drawing"), xsRet);
|
|
pTable->AppendEnd();
|
|
}
|
|
|
|
HideDialog(FALSE);
|
|
ResetImage();
|
|
int num = m_ImageBox.GetTotalRecords();
|
|
if(num>0)
|
|
{
|
|
m_ImageBox.m_lstSelected.Append(new int(num - 1));
|
|
m_ImageBox.SelectIndex(num);
|
|
}
|
|
|
|
int len = m_ImageBox.m_lstSelected.Length();
|
|
for(int i = 0;i<len;i++)
|
|
{
|
|
int sel = *m_ImageBox.m_lstSelected[i];
|
|
m_listCtrl.SetItemState(sel, LVIS_SELECTED, LVIS_SELECTED);
|
|
}
|
|
|
|
SetDlgItemText(IDC_S_DESCRIPTION, _T("新图入库完毕!"));
|
|
}
|
|
|
|
// add by xlc on 080818
|
|
// 获得块尺寸
|
|
BOOL CTKWorkspace::GetBlockSize(XString sBlockName, double &width, double &high)
|
|
{
|
|
if(sBlockName==_T(""))
|
|
return FALSE;
|
|
|
|
AcDbObjectId BlockId;
|
|
XString sBlock(256);
|
|
|
|
|
|
if (LoadDwbBlock(sBlockName, sBlock)!=RTNORM)
|
|
return FALSE;
|
|
|
|
BlockId = InitBlock(sBlock,NULL);
|
|
|
|
AcDbExtents ext;
|
|
AcDbBlockReference blockRef;
|
|
blockRef.setBlockTableRecord(BlockId);
|
|
blockRef.geomExtentsBestFit(ext);
|
|
|
|
AcGePoint3d maxPt, minPt;
|
|
maxPt = ext.maxPoint();
|
|
minPt = ext.minPoint();
|
|
width = maxPt.x - minPt.x;
|
|
high = maxPt.y - minPt.y;
|
|
return TRUE;
|
|
}
|
|
|
|
int CTKWorkspace::RebuildJpg(const TCHAR* szTKName)
|
|
{
|
|
CString csTKName = szTKName;
|
|
|
|
XString xsDrawing = m_ImageBox.m_lstBlk[*m_ImageBox.m_lstSelected[0]]->csDrawing;
|
|
|
|
const TCHAR *szPrompt=_T("\n制作三维照片(请用zoom调整合适)或 [不制作返回(X)]<制作>:");
|
|
XString sKeyword;
|
|
int nRet = 0;
|
|
INITGET_BEG(0, _T("X"));
|
|
nRet = ads_getkword(szPrompt, sKeyword);
|
|
INITGET_END();
|
|
if(nRet != RTNONE)
|
|
return RTERROR;
|
|
|
|
int cvport = 0;
|
|
xg_getvar(_T("CVPORT"), &cvport);
|
|
SHads_command(RTSTR,_T(".UCSICON"),RTSTR,_T("OFF"),RTNONE);
|
|
CRect rectVP = GetVPRect(cvport);
|
|
CBitmap bitmap;
|
|
GetRectBmpFromBmp(acedGetAcadDwgView(), rectVP, bitmap);
|
|
HBITMAP hBitmap = (HBITMAP) bitmap.GetSafeHandle();
|
|
TCHAR tempPrefix[256], bmpPrefix[256], jpgPrefix[256];
|
|
GetTempPath(255, tempPrefix);
|
|
if(tempPrefix[_tcslen(tempPrefix)-1]!=_T('\\'))
|
|
_tcscat(tempPrefix, _T("\\"));
|
|
_tcscat(tempPrefix, xsDrawing);
|
|
_tcscpy(bmpPrefix, tempPrefix);
|
|
_tcscpy(jpgPrefix, tempPrefix);
|
|
_tcscat(bmpPrefix, _T(".bmp"));
|
|
_tcscat(jpgPrefix, _T(".jpg"));
|
|
SaveBitmapToFile(hBitmap, bmpPrefix);
|
|
SHads_command(RTSTR,_T(".UCSICON"),RTSTR,_T("ON"),RTNONE);
|
|
FILE *fpIn = _tfopen(bmpPrefix, _T("rb"));
|
|
if(!fpIn)
|
|
{
|
|
return RTERROR;
|
|
}
|
|
FILE *fpOut = _tfopen(jpgPrefix, _T("wb"));
|
|
if(!fpOut)
|
|
{
|
|
fclose(fpIn);
|
|
return RTERROR;
|
|
}
|
|
// WriteJpeg(fpIn, fpOut);
|
|
CTangentImage::WriteJpeg(bmpPrefix, jpgPrefix, 1);
|
|
fclose(fpIn);
|
|
fclose(fpOut);
|
|
_tremove(bmpPrefix);
|
|
XString xsJpgLib(256);
|
|
xsJpgLib << GetPathNameByAllName(csTKName) << GetFileNameByAllName(csTKName) << _T(".JPB");
|
|
|
|
XJpegLib JpbMan(xsJpgLib);
|
|
JpbMan.Append(jpgPrefix);
|
|
_tremove(jpgPrefix);
|
|
|
|
return RTNONE;
|
|
}
|
|
|
|
int CTKWorkspace::RebuildSld(const TCHAR* szTKName)
|
|
{
|
|
CString csTKName = szTKName;
|
|
XString xsDrawing = m_ImageBox.m_lstBlk[*m_ImageBox.m_lstSelected[0]]->csDrawing;
|
|
|
|
XString xsFullSld, xsFullDwg;
|
|
BOOL bHide = FALSE;
|
|
TCHAR dwgPrefix[256]=_T("");
|
|
GetTempPath(255, dwgPrefix);
|
|
if(dwgPrefix[_tcslen(dwgPrefix)-1]!=_T('\\'))
|
|
_tcscat(dwgPrefix, _T("\\"));
|
|
_tcscat(dwgPrefix, _T("SRTEMP\\"));
|
|
MakeDir(dwgPrefix);
|
|
{
|
|
XString xsDwbPath;
|
|
TCHAR *szDrawing = xsDrawing;
|
|
|
|
xsFullSld << dwgPrefix << xsDrawing << _T(".sld");
|
|
xsFullDwg << dwgPrefix << xsDrawing << _T(".dwg");
|
|
|
|
while(1)
|
|
{
|
|
const TCHAR *szPrompt=_T("\n制作幻灯片(请用zoom调整合适)或 [消隐(H)]<制作>:");
|
|
XString sKeyword;
|
|
int nRet = 0;
|
|
INITGET_BEG(0, _T("H"));
|
|
nRet = ads_getkword(szPrompt, sKeyword);
|
|
INITGET_END();
|
|
if(nRet == RTNONE)
|
|
break;
|
|
if(sKeyword[0]==_T('H'))
|
|
{
|
|
bHide = TRUE;
|
|
}
|
|
else
|
|
return RTERROR;
|
|
}
|
|
if(!m_ImageBox.m_bIsJpgShow)
|
|
xsDwbPath << GetPathNameByAllName(szTKName) << GetFileNameByAllName(szTKName) << _T(".DWB");
|
|
else
|
|
xsDwbPath << GetPathNameByAllName(szTKName) << GetFileNameByAllName(szTKName) << _T("_3d.DWB");
|
|
{
|
|
CString sSlb((const TCHAR*)xsDwbPath);
|
|
sSlb.Replace(_T(".DWB"),_T(".SLB"));
|
|
XSlideLib slb(sSlb);
|
|
if(!(!slb)) slb.Remove(szDrawing);
|
|
}
|
|
if(bHide)
|
|
{
|
|
SHads_command(RTSTR, _T("HIDE"), RTNONE);
|
|
SHads_command(RTSTR, _T("MSLIDE"), RTSTR, (TCHAR *)xsFullSld, RTNONE);
|
|
SHads_command(RTSTR, _T("REGEN"), RTNONE);
|
|
}
|
|
else
|
|
{
|
|
SHads_command(RTSTR, _T("MSLIDE"), RTSTR, (TCHAR *)xsFullSld, RTNONE);
|
|
}
|
|
|
|
XString xsSlbFile(256);
|
|
xsSlbFile << GetPathNameByAllName(csTKName) << GetFileNameByAllName(csTKName) << _T(".SLB");
|
|
XSlideLib slbMan(xsSlbFile);
|
|
if(!slbMan) return RTERROR;
|
|
slbMan.Append(xsFullSld);
|
|
_tremove(xsFullSld);
|
|
}
|
|
return RTNONE;
|
|
}
|
|
|
|
void CTKWorkspace::OnBlkRebuild()
|
|
{
|
|
if(IsLock())
|
|
return;
|
|
if(m_ImageBox.m_lstSelected.Length() != 1)
|
|
{
|
|
MessageBox(_T("请选中某一图块,再进行重新制作!"));
|
|
return;
|
|
}
|
|
|
|
int num = *m_ImageBox.m_lstSelected[0];
|
|
//m_ImageBox.CurPage() * m_ImageBox.m;
|
|
CString csCurDrawing = m_ImageBox.m_lstBlk[*m_ImageBox.m_lstSelected[0]]->csDrawing;
|
|
|
|
HTREEITEM htree = m_treeCtrl.GetSelectedItem();
|
|
CString csCurTKName, csCurType;
|
|
m_treeCtrl.GetNodeAllPath(htree, csCurTKName, csCurType);
|
|
|
|
HideDialog(TRUE);
|
|
// 注意 : 此处有bug. 新图形进入图库后,并没有把dwg内文件内插入的块一并置换
|
|
AddImage2DwbForBlkRebuild(csCurTKName,csCurDrawing, TRUE);
|
|
HideDialog(FALSE);
|
|
ResetImage();
|
|
m_ImageBox.m_lstSelected.Append(new int(num));
|
|
m_ImageBox.SelectIndex(num);
|
|
int len = m_ImageBox.m_lstSelected.Length();
|
|
for(int i=0;i<len;i++)
|
|
{
|
|
int sel = *m_ImageBox.m_lstSelected[i];
|
|
m_listCtrl.SetItemState(sel, LVIS_SELECTED, LVIS_SELECTED);
|
|
}
|
|
SetDlgItemText(IDC_S_DESCRIPTION, _T("重制图块完毕!"));
|
|
}
|
|
|
|
/////////////////////////////////// TOOLBAR 命令结束 ///////////////////////////////
|
|
|
|
|
|
//******************************* 右键菜单命令 **********************************************
|
|
|
|
|
|
void CTKWorkspace::OnTkPopupInserttk() // 插入一TK
|
|
{
|
|
if(IsLock()) return;
|
|
|
|
CFileDialog dlg(TRUE,_T("*.tk"),_T(""),OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
|
|
_T("上华图库文件 (*.TK) |*.TK||"), this);
|
|
if(dlg.DoModal()!=IDOK)
|
|
return;
|
|
if(!FindFile(dlg.GetPathName()))
|
|
{
|
|
AfxMessageBox(_T("不存在此文件!请换一文件。"));
|
|
return;
|
|
}
|
|
XStringList lstFiles;
|
|
BOOL bShow;
|
|
CString csVersion, csDescription;
|
|
CTkwFile tkw(m_csCurTKWFile);
|
|
tkw.GetTKList(lstFiles);
|
|
bShow = tkw.m_bIsJpg;
|
|
csVersion = tkw.m_csVersion;
|
|
csDescription = tkw.m_csDescription;
|
|
BOOL bFlag = FALSE;
|
|
for(int i=0;i<lstFiles.Length();i++)
|
|
{
|
|
XString fullFile;
|
|
if(FindFile(lstFiles[i], fullFile))
|
|
{ // 检查该TK是否在TKW中
|
|
if(_tcscmp(fullFile, dlg.GetPathName()) == 0)
|
|
{
|
|
bFlag = TRUE;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if(!bFlag)
|
|
lstFiles.Append(tstrnew(dlg.GetPathName()));
|
|
else
|
|
{
|
|
AfxMessageBox(_T("图库组中已存在此TK文件!"));
|
|
return;
|
|
}
|
|
tkw.SetTKList(lstFiles);
|
|
tkw.WriteFile(m_csCurTKWFile);
|
|
m_treeCtrl.SetDataSource(m_csCurTKWFile); // 重新刷新
|
|
m_ImageBox.m_bIsJpgShow = m_treeCtrl.m_bIsJpgShow;
|
|
SetDlgItemText(IDC_S_DESCRIPTION, _T("插入一TK至当前图库组"));
|
|
}
|
|
|
|
void CTKWorkspace::OnTkPopupNewtk() // 新建一TK
|
|
{
|
|
if(IsLock()) return;
|
|
CFileDialog dlg(TRUE,_T("*.tk"),_T(""),OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
|
|
_T("上华图库文件 (*.TK) |*.TK||"), this);
|
|
XFilePathName XFilePath2(m_csCurTKWFile);
|
|
CString csPath = XFilePath2.getDriver() + XFilePath2.getDir();
|
|
TCHAR szDlgTitle[] = _T("输入需要新建的TK文件名");
|
|
int maxChar = 256;
|
|
dlg.m_ofn.nMaxFile = maxChar;
|
|
dlg.m_ofn.lpstrTitle = szDlgTitle;
|
|
dlg.m_ofn.lpstrInitialDir = csPath;
|
|
|
|
if(dlg.DoModal()!=IDOK)
|
|
return;
|
|
if(FindFile(dlg.GetPathName()))
|
|
{
|
|
AfxMessageBox(_T("已存在此文件!请换一文件。"));
|
|
return;
|
|
}
|
|
if(!CreateTKFile(dlg.GetPathName()))
|
|
return;
|
|
|
|
XStringList lstFiles;
|
|
BOOL bShow;
|
|
CString csVersion, csDescription;
|
|
|
|
CTkwFile tkw(m_csCurTKWFile);
|
|
tkw.GetTKList(lstFiles);
|
|
bShow = tkw.m_bIsJpg;
|
|
csVersion = tkw.m_csVersion;
|
|
csDescription = tkw.m_csDescription;
|
|
|
|
BOOL bFlag = FALSE;
|
|
for(int i=0;i<lstFiles.Length();i++)
|
|
{
|
|
XString fullFile;
|
|
if(FindFile(lstFiles[i], fullFile))
|
|
{ // 检查该TK是否在TKW中
|
|
if(_tcscmp(fullFile, dlg.GetPathName()) == 0)
|
|
{
|
|
bFlag = TRUE;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if(!bFlag)
|
|
lstFiles.Append(tstrnew(dlg.GetPathName()));
|
|
else
|
|
{
|
|
AfxMessageBox(_T("图库组中已存在此TK文件!"));
|
|
return;
|
|
}
|
|
|
|
tkw.SetTKList(lstFiles);
|
|
tkw.WriteFile(m_csCurTKWFile);
|
|
m_treeCtrl.SetDataSource(m_csCurTKWFile); // 重新刷新
|
|
m_ImageBox.m_bIsJpgShow = m_treeCtrl.m_bIsJpgShow;
|
|
SetDlgItemText(IDC_S_DESCRIPTION, _T("新建一TK至当前图库组"));
|
|
}
|
|
|
|
void CTKWorkspace::OnTkPopupTreetype() // 合并TKW
|
|
{
|
|
OnBlkMerge();
|
|
|
|
//add by xlc on 080829
|
|
m_ToolBar.CheckButton(ID_BLK_MERGE, 1);
|
|
}
|
|
|
|
void CTKWorkspace::OnTkPopupRemovetk() //从TKW组中移出TK
|
|
{
|
|
if(IsLock()) return;
|
|
HTREEITEM htree = NULL;
|
|
htree = m_treeCtrl.GetSelectedItem();
|
|
if(!htree)
|
|
return;
|
|
CString csCurTKName, csCurType, csVersion, csDescription;
|
|
m_treeCtrl.GetNodeAllPath(htree, csCurTKName, csCurType);
|
|
XStringList lstFiles;
|
|
BOOL bShow;
|
|
CTkwFile tkw(m_csCurTKWFile);
|
|
tkw.GetTKList(lstFiles);
|
|
bShow = tkw.m_bIsJpg;
|
|
csVersion = tkw.m_csVersion;
|
|
csDescription = tkw.m_csDescription;
|
|
for(int i=0;i<lstFiles.Length();i++)
|
|
{
|
|
XString fullFile;
|
|
if(FindFile(lstFiles[i], fullFile))
|
|
{ // 检查该TK是否在TKW中, 保证不管是全路径,还是文件名
|
|
if(_tcscmp(fullFile, csCurTKName) == 0)
|
|
{
|
|
lstFiles.Remove(i);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
tkw.SetTKList(lstFiles);
|
|
tkw.WriteFile(m_csCurTKWFile);
|
|
m_treeCtrl.SetDataSource(m_csCurTKWFile); // 重新刷新
|
|
m_ImageBox.m_bIsJpgShow = m_treeCtrl.m_bIsJpgShow;
|
|
SetDlgItemText(IDC_S_DESCRIPTION, _T("从当前图库组移出一TK"));
|
|
}
|
|
|
|
void CTKWorkspace::OnTkPopupRenamekind() //类别重命名
|
|
{
|
|
if(IsLock()) return;
|
|
HTREEITEM hTreeItem = NULL;
|
|
hTreeItem = m_treeCtrl.GetSelectedItem();
|
|
m_treeCtrl.SetFocus();
|
|
if(hTreeItem && hTreeItem != m_treeCtrl.GetRootItem());
|
|
{
|
|
m_bEditLabel = TRUE;
|
|
m_treeCtrl.EditLabel(hTreeItem);
|
|
}
|
|
}
|
|
|
|
void CTKWorkspace::OnTkPopupNew() //新建类别
|
|
{
|
|
if(IsLock()) return;
|
|
HTREEITEM hItem = m_treeCtrl.GetSelectedItem();
|
|
HTREEITEM hSubItem = NULL;
|
|
if(hItem == NULL)
|
|
return;
|
|
|
|
CString csCurTKName, csCurType;
|
|
m_treeCtrl.GetNodeAllPath(hItem, csCurTKName, csCurType);
|
|
CodeBase db;
|
|
XDbfTable *pTable = db.Open(csCurTKName);
|
|
if(!pTable)
|
|
{
|
|
AfxMessageBox(_T("TK文件只读或损坏!"));
|
|
return;
|
|
}
|
|
hSubItem = m_treeCtrl.InsertItem(_T("新类别"), 1, 2, hItem );
|
|
m_treeCtrl.SelectItem(hSubItem);
|
|
if(csCurType == _T(""))
|
|
csCurType = _T("新类别");
|
|
else
|
|
csCurType = csCurType + _T("\\新类别");
|
|
pTable->AppendBegin();
|
|
SET_FIELD(pTable, _T("kind"), (const TCHAR*)csCurType);
|
|
pTable->AppendEnd();
|
|
m_treeCtrl.SetFocus();
|
|
m_bEditLabel = TRUE;
|
|
m_treeCtrl.EditLabel(hSubItem);
|
|
SetDlgItemText(IDC_S_DESCRIPTION, _T("新建类别"));
|
|
}
|
|
|
|
void CTKWorkspace::OnTkPopupDel() //删除类别
|
|
{
|
|
OnBlkDelkind();
|
|
}
|
|
|
|
/////////////////////////////////// 右键菜单 命令结束 //////////////////////////////////////////////////
|
|
|
|
void CTKWorkspace::OnOK()
|
|
{
|
|
if(m_nOpenMode == 0 || m_bMultiSel)
|
|
{
|
|
SaveStatus();
|
|
if(m_ImageBox.m_lstSelected.Length() != 1)
|
|
{
|
|
CAcUiDialog::OnOK();
|
|
return;
|
|
}
|
|
int sel = *m_ImageBox.m_lstSelected[0];
|
|
TKStruct *cur = m_ImageBox.m_lstBlk[sel];
|
|
HideDialog(TRUE);
|
|
|
|
//add by xlc on 090505 06以下平台资源冲突
|
|
CTemporaryResourceOverride resOverride(acedGetAcadResourceInstance());
|
|
|
|
BOOL bRet = InsertBlock(cur->csTKFile, cur->csDrawing);
|
|
if(bRet)
|
|
{
|
|
HideDialog(FALSE);
|
|
return;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if(m_ImageBox.m_lstSelected.Length() == 1)
|
|
{
|
|
//modify by xlc on 080602
|
|
SaveStatus();
|
|
|
|
int sel = *m_ImageBox.m_lstSelected[0];
|
|
TKStruct &cur = *(m_ImageBox.m_lstBlk[sel]);
|
|
m_csLastTKName = cur.csTKFile;
|
|
TCHAR szDrive[_MAX_DRIVE]=_T(""), szDir[_MAX_DIR]=_T(""), szFile[_MAX_FNAME]=_T(""), szExt[_MAX_EXT]=_T("");
|
|
_tsplitpath(m_csLastTKName, szDrive, szDir, szFile, szExt);
|
|
m_csRet = CString(szFile) + _T("(") + cur.csDrawing+ _T(")");
|
|
}
|
|
}
|
|
CAcUiDialog::OnOK();
|
|
}
|
|
|
|
void CTKWorkspace::OnBlkReplace()
|
|
{
|
|
if(m_ImageBox.m_lstSelected.Length() != 1)
|
|
{
|
|
AfxMessageBox(_T("请选择某一构件!"));
|
|
return;
|
|
}
|
|
SaveStatus();
|
|
CAcUiDialog::OnOK();
|
|
|
|
int sel = *m_ImageBox.m_lstSelected[0];
|
|
TKStruct *cur = m_ImageBox.m_lstBlk[sel];
|
|
//modified by whl
|
|
if(m_iWorkType==0)
|
|
ReplaceBlk(cur->csTKFile, cur->csDrawing);
|
|
else
|
|
ReplaceBlk1(cur->csTKFile, cur->csDrawing);
|
|
}
|
|
|
|
AcDbObjectId GetBlkRecordIdByName(const TCHAR* szBlkName)
|
|
{
|
|
AcDbObjectId id = NULL;
|
|
AcDbBlockTableRecord *pRecord = NULL;
|
|
AcDbBlockTable* pBlockTable = NULL;
|
|
acdbCurDwg()->getBlockTable(pBlockTable, AcDb::kForRead);
|
|
if(!pBlockTable)
|
|
return id;
|
|
if(Acad::eOk != pBlockTable->getAt(szBlkName, pRecord, AcDb::kForRead))
|
|
{
|
|
pBlockTable->close();
|
|
return id;
|
|
}
|
|
pBlockTable->close();
|
|
if(!pRecord)
|
|
return id;
|
|
id = pRecord->objectId();
|
|
pRecord->close();
|
|
return id;
|
|
}
|
|
int DragInsertBlock(const TCHAR *szBlock, int nFlag, const AcGeScale3d &scales);
|
|
|
|
//TARCH_IMPEXP AcDbObjectId MakeBlockInsert(const TCHAR *pszBlock, XPoint ptInsert,
|
|
// double sx, double sy, double sz, double rot);
|
|
BOOL CTKWorkspace::InsertBlock(const TCHAR* szTKName, const TCHAR* szDrawing)
|
|
{
|
|
CString csTKName, csDrawing;
|
|
csTKName = szTKName;
|
|
csDrawing = szDrawing;
|
|
|
|
XString xsDwbPath, blkName(256), xsDwbPath2d, blkName2d(256);
|
|
AcDbObjectId id2d(NULL), id3d(NULL);
|
|
TCHAR drive[_MAX_DRIVE]=_T(""), dir[_MAX_DIR]=_T(""), file[_MAX_FNAME], ext[_MAX_EXT];
|
|
_tsplitpath(csTKName, drive, dir, file, ext);
|
|
if(m_treeCtrl.m_bIsJpgShow)
|
|
{
|
|
_stprintf(blkName, _T("$%s_3d$%s"), file, (const TCHAR *)csDrawing);
|
|
xsDwbPath << GetPathNameByAllName(csTKName) << GetFileNameByAllName(csTKName) << _T("_3d.DWB");
|
|
xsDwbPath2d << GetPathNameByAllName(csTKName) << GetFileNameByAllName(csTKName) << _T("_2d.DWB");
|
|
if(LoadDwbBlock(xsDwbPath2d, csDrawing, blkName2d)!=RTNORM)//如果不存在图块,直接返回
|
|
{
|
|
ads_printf(_T("\n内部错误:无法找到并提取图块%s!"), blkName2d);
|
|
return FALSE;
|
|
}
|
|
id2d = GetBlkRecordIdByName(blkName2d);
|
|
}
|
|
else
|
|
{
|
|
_stprintf(blkName, _T("$%s$%s"), file, (const TCHAR *)csDrawing);
|
|
xsDwbPath << GetPathNameByAllName(csTKName) << GetFileNameByAllName(csTKName) << _T(".DWB");
|
|
}
|
|
if(!XSymbolTable(_T("BLOCK"), blkName))
|
|
{
|
|
if(LoadDwbBlock(xsDwbPath, csDrawing, blkName)!=RTNORM)//如果不存在图块,直接返回
|
|
{
|
|
ads_printf(_T("\n内部错误:无法找到并提取图块%s!"),blkName);
|
|
return FALSE;
|
|
}
|
|
|
|
if(m_treeCtrl.m_bIsJpgShow)
|
|
{
|
|
id3d = GetBlkRecordIdByName(blkName);
|
|
// 把材质从图块移动到模型空间
|
|
#if ADS<17
|
|
MoveMaterial2MSpace(id3d);
|
|
#endif
|
|
OPENOBJ_BEGIN(id3d, AcDb::kForWrite, AcDbBlockTableRecord, pBlock);
|
|
if(pBlock)
|
|
{
|
|
AcDbHandle handle = id2d.handle();
|
|
TCHAR szHandle[17]=_T("");
|
|
handle.getIntoAsciiBuffer(szHandle);
|
|
resbuf *pXData = ads_buildlist(1001, TCHXD, 1005, szHandle, NULL);
|
|
if(!XSymbolTable(_T("APPID"), TCHXD))
|
|
ads_regapp(TCHXD);
|
|
pBlock->setXData(pXData);
|
|
ads_relrb(pXData);
|
|
}
|
|
OPENOBJ_END();
|
|
SHads_command(RTSTR, _T(".REDRAW"), RTNONE);
|
|
}
|
|
XDbBlockTableRec rec(blkName, AcDb::kForWrite);
|
|
if(!!rec)
|
|
{
|
|
XString sComments(1024); // tkw, tk, block
|
|
sComments << XPathParser(m_csCurTKWFile).m_sFileName << _T(",")
|
|
<< XPathParser(csTKName).m_sFileName << _T(",")<< (const TCHAR *)csDrawing;
|
|
rec.m_pBlockTableRec->setComments(sComments);
|
|
}
|
|
}
|
|
|
|
int nInsFlag=IBF_MINSERT|IBF_ROT90|IBF_MIRLR|IBF_MIRUD|IBF_ALIGN
|
|
|IBF_FRAME|IBF_ROTATE|IBF_BASEPT|IBF_RESEL;
|
|
int nRet;
|
|
|
|
//LH 2013-3-25 根据2014年加密需要水关键字8--14 暖6--15 电3--16
|
|
//if(!g_nRunMode && g_nProductId != 3 && g_nProductId != 8)
|
|
if(!g_nRunMode && g_nProductId != kTELEC && g_nProductId != kTWT)
|
|
{
|
|
nInsFlag |= IBF_TINSERT;
|
|
if(m_treeCtrl.m_bIsJpgShow)
|
|
nInsFlag |= IBF_MULTVIEW;
|
|
nRet=DragInsertBlock(blkName, nInsFlag, AcGeScale3d(1,1,1));
|
|
}
|
|
//LH 2013-3-25 根据2014年加密需要水关键字8--14 暖6--15 电3--16
|
|
//else if(g_nProductId==3 || g_nProductId==8)
|
|
else if(g_nProductId==kTELEC || g_nProductId==kTWT)
|
|
{ // 电气/给排水,modified by SR
|
|
double nBlkLength(1);
|
|
int nInsFlag2=IBF_MINSERT|IBF_ROT90|IBF_MIRLR|IBF_MIRUD|IBF_SCALE
|
|
|IBF_ROTATE|IBF_BASEPT|IBF_RESEL;
|
|
|
|
if(_tcsicmp(file, _T("equip")) == 0 || _tcsicmp(file, _T("equip_U")) == 0)
|
|
{
|
|
CRegProperty regProp(GetRegLocation(), _T("TElecConfig"));
|
|
regProp.SetTopRootKey(HKEY_CURRENT_USER);
|
|
regProp.GetValue(_T("EqBlkLength"), nBlkLength);
|
|
}
|
|
else if(_tcsicmp(file, _T("element")) == 0 || _tcsicmp(file, _T("element_U")) == 0)
|
|
nBlkLength = 1500;
|
|
|
|
nRet=DragInsertBlock1(blkName, nInsFlag2, AcGeScale3d(nBlkLength, nBlkLength, nBlkLength));
|
|
}
|
|
else
|
|
{ // 上华3
|
|
nRet=DragInsertBlock1(blkName, nInsFlag, AcGeScale3d(1,1,1));
|
|
}
|
|
return (nRet==IBF_RESEL)? TRUE : FALSE;
|
|
}
|
|
|
|
AcDbObjectId GetRepBlkId(const TCHAR* szTKName, const TCHAR* szDrawing, BOOL m_bIsJpgShow)
|
|
{
|
|
CString csTKName, csDrawing;
|
|
csTKName = szTKName;
|
|
csDrawing = szDrawing;
|
|
|
|
XString xsDwbPath, blkName(256), xsDwbPath2d, blkName2d(256);
|
|
AcDbObjectId id2d(NULL), id3d(NULL);
|
|
TCHAR drive[_MAX_DRIVE]=_T(""), dir[_MAX_DIR]=_T(""), file[_MAX_FNAME], ext[_MAX_EXT];
|
|
_tsplitpath(csTKName, drive, dir, file, ext);
|
|
if(m_bIsJpgShow)
|
|
{
|
|
_stprintf(blkName, _T("$%s_3d$%s"), file, (const TCHAR *)csDrawing);
|
|
xsDwbPath << GetPathNameByAllName(csTKName) << GetFileNameByAllName(csTKName) << _T("_3d.DWB");
|
|
xsDwbPath2d << GetPathNameByAllName(csTKName) << GetFileNameByAllName(csTKName) << _T("_2d.DWB");
|
|
if(LoadDwbBlock(xsDwbPath2d, csDrawing, blkName2d)!=RTNORM)//如果不存在图块,直接返回
|
|
{
|
|
ads_printf(_T("\n内部错误:无法找到并提取图块%s!"), blkName2d);
|
|
return FALSE;
|
|
}
|
|
id2d = GetBlkRecordIdByName(blkName2d);
|
|
}
|
|
else
|
|
{
|
|
_stprintf(blkName, _T("$%s$%s"), file, (const TCHAR *)csDrawing);
|
|
xsDwbPath << GetPathNameByAllName(csTKName) << GetFileNameByAllName(csTKName) << _T(".DWB");
|
|
}
|
|
if(!XSymbolTable(_T("BLOCK"), blkName))
|
|
{
|
|
if(LoadDwbBlock(xsDwbPath, csDrawing, blkName)!=RTNORM)//如果不存在图块,直接返回
|
|
{
|
|
ads_printf(_T("\n内部错误:无法找到并提取图块%s!"),blkName);
|
|
return FALSE;
|
|
}
|
|
if(m_bIsJpgShow)
|
|
{
|
|
id3d = GetBlkRecordIdByName(blkName);
|
|
//AcDbObjectIdArray idMaters;
|
|
// 把材质从图块移动到模型空间
|
|
#if ADS<17
|
|
MoveMaterial2MSpace(id3d);
|
|
#endif
|
|
OPENOBJ_BEGIN(id3d, AcDb::kForWrite, AcDbBlockTableRecord, pBlock);
|
|
if(pBlock){
|
|
AcDbHandle handle = id2d.handle();
|
|
TCHAR szHandle[17]=_T("");
|
|
handle.getIntoAsciiBuffer(szHandle);
|
|
resbuf *pXData = ads_buildlist(1001, TCHXD, 1005, szHandle, NULL);
|
|
if(!XSymbolTable(_T("APPID"), TCHXD))
|
|
ads_regapp(TCHXD);
|
|
pBlock->setXData(pXData);
|
|
ads_relrb(pXData);
|
|
}
|
|
OPENOBJ_END();
|
|
SHads_command(RTSTR, _T(".REDRAW"), RTNONE);
|
|
}
|
|
}
|
|
AcDbObjectId idBlock=GetBlockIdFromString(blkName);
|
|
return idBlock;
|
|
}
|
|
BOOL CTKWorkspace::ReplaceBlk(const TCHAR* szTKName, const TCHAR* szDrawing)
|
|
{
|
|
CString csTKName, csDrawing;
|
|
csTKName = szTKName;
|
|
csDrawing = szDrawing;
|
|
|
|
CBlkManReplaceOption dlg(m_csCurTKWFile,szTKName,m_csCurRecord,acedGetAcadFrame());
|
|
dlg.m_idBlock = GetRepBlkId(csTKName, csDrawing, m_treeCtrl.m_bIsJpgShow);
|
|
const TCHAR *szFormat= _T("%s(%s)");
|
|
if(m_treeCtrl.m_bIsJpgShow)
|
|
dlg.m_bUseJpg=TRUE;
|
|
dlg.m_sSldFile <<GetPathNameByAllName(csTKName)
|
|
<< XString(szFormat, (const TCHAR *)GetFileNameByAllName(csTKName), (const TCHAR *)csDrawing);
|
|
{
|
|
CTemporaryResourceOverride vTemp1;
|
|
dlg.Create(dlg.IDD,acedGetAcadFrame());
|
|
}
|
|
dlg.ShowWindow(SW_SHOW);
|
|
acedGetAcadFrame()->SetFocus();
|
|
|
|
RBList mask(RTDXF0, _T("INSERT,AEC_BLOCK_INSERT,ATS_MVINSERT"), NULL);
|
|
dlg.GetStatus();
|
|
int nControlFlag=dlg.GetControlFlag();
|
|
|
|
lab_SelectInsert:
|
|
if(nControlFlag & LO_ALLINSERT_R)
|
|
{//如果允许一次替换所有的
|
|
Entity ent;
|
|
int nRetCode=ent.FilterSelect(_T("\n选择图中将要被替换的图块: "), mask);
|
|
dlg.GetStatus();
|
|
nControlFlag=dlg.GetControlFlag();
|
|
if(!(nControlFlag & LO_ALLINSERT_R)) //替换方式发生变化
|
|
goto lab_SelectInsert;
|
|
if(nRetCode==RTNORM)
|
|
{
|
|
TCHAR szBlkname[256] = _T("");
|
|
VERIFY(ent.GetData(2,szBlkname)==RTNORM);
|
|
if(szBlkname[0]==_T('*'))
|
|
{
|
|
// 无名块, 不能通过块名过滤
|
|
if(DoReplaceBlock(nControlFlag, ent, dlg.m_idBlock)==FALSE)
|
|
{
|
|
adsout << _T("\n无法替换,请正确选择!");
|
|
}
|
|
goto lab_SelectInsert;
|
|
}
|
|
else
|
|
{
|
|
RBList rb=ads_buildlist(RTDXF0,_T("INSERT,AEC_BLOCK_INSERT,ATS_MVINSERT"),2,szBlkname,0);
|
|
PickSet ss(SS_FREE);
|
|
if(ss.Get(_T("X"),NULL,NULL,rb)==RTNORM)
|
|
{
|
|
for (long j =0; j < ss.Length(); j++)
|
|
{
|
|
Entity ent1=ss[j];
|
|
if(DoReplaceBlock(nControlFlag, ent1,dlg.m_idBlock)==FALSE)
|
|
adsout << _T("\n无法替换,请正确选择!");
|
|
}
|
|
goto lab_SelectInsert;
|
|
}
|
|
else
|
|
{
|
|
ads_printf(_T("\n内部错误!不能取得同类的图块."));
|
|
ASSERT(0);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
PickSet ss(SS_FREE);
|
|
adsout << _T("\n选择图中将要被替换的图块!");
|
|
int nRetCode=ss.Get(NULL, NULL, NULL, mask);
|
|
dlg.GetStatus();
|
|
nControlFlag=dlg.GetControlFlag();
|
|
if((nControlFlag & LO_ALLINSERT_R)) //替换方式发生变化
|
|
goto lab_SelectInsert;
|
|
|
|
if(nRetCode==RTNORM)
|
|
{
|
|
long lCount=ss.Length();
|
|
for(long j=0L; j<ss.Length(); j++)
|
|
{
|
|
Entity ent1=ss[j];
|
|
if(DoReplaceBlock(nControlFlag, ent1,dlg.m_idBlock)==FALSE)
|
|
adsout << _T("\n无法替换,请正确选择!");
|
|
}
|
|
goto lab_SelectInsert;
|
|
}
|
|
|
|
}
|
|
int dlgTemp=dlg.m_nUseOtherBlkToRepl;
|
|
dlg.DestroyWindow();
|
|
return dlgTemp;
|
|
}
|
|
//add by whl,控制点对齐替换
|
|
BOOL CTKWorkspace::ReplaceBlk1(const TCHAR* szTKName, const TCHAR* szDrawing)
|
|
{
|
|
CString csTKName, csDrawing;
|
|
csTKName = szTKName;
|
|
csDrawing = szDrawing;
|
|
|
|
AcDbObjectId idBlock = GetRepBlkId(csTKName, csDrawing, m_treeCtrl.m_bIsJpgShow);
|
|
|
|
RBList mask(RTDXF0, _T("INSERT,AEC_BLOCK_INSERT,ATS_MVINSERT"), NULL);
|
|
PickSet ss(SS_FREE);
|
|
adsout << _T("\n选择图中将要被替换的图块!");
|
|
int nRetCode=ss.Get(NULL, NULL, NULL, mask);
|
|
if(nRetCode==RTNORM)
|
|
{
|
|
long lCount=ss.Length();
|
|
for(long j=0L; j<ss.Length(); j++)
|
|
{
|
|
Entity ent1=ss[j];
|
|
if(DoReplaceBlock(LO_FIX_POINT, ent1,idBlock)==FALSE)
|
|
adsout << _T("\n无法替换,请正确选择!");
|
|
}
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
// add by xlc on 070828
|
|
HCURSOR CTKWorkspace::OnQueryDragIcon()
|
|
{
|
|
return (HCURSOR) m_hIcon;
|
|
}
|
|
|
|
// add by xlc on 070828
|
|
void CTKWorkspace::OnBegindragList(NMHDR* pNMHDR, LRESULT* pResult)
|
|
{
|
|
if(!m_ImageBox.m_bSort)
|
|
{
|
|
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
|
|
m_nDragIndex = pNMListView->iItem;
|
|
|
|
POINT pt;
|
|
int nOffset = 15;
|
|
if(m_listCtrl.GetSelectedCount() > 1)
|
|
pt.x = nOffset;
|
|
pt.y = nOffset;
|
|
|
|
TCHAR szLabel[256];
|
|
LVITEM lviT;
|
|
|
|
ZeroMemory(&lviT, sizeof (LVITEM));
|
|
lviT.mask = LVIF_TEXT;
|
|
lviT.pszText = szLabel;
|
|
lviT.cchTextMax = 255;
|
|
|
|
lvItem lvi;
|
|
lvi.plvi = &lviT;
|
|
lvi.plvi->mask = LVIF_TEXT;
|
|
lvi.plvi->pszText = szLabel;
|
|
lvi.plvi->cchTextMax = 255;
|
|
|
|
int nCount = m_listCtrl.GetSelectedCount();
|
|
CStringArray strArry; //选中项不同名的的字符串数组
|
|
POSITION pos = m_listCtrl.GetFirstSelectedItemPosition();
|
|
if (pos != NULL)
|
|
{
|
|
CString strItem;
|
|
while (pos)
|
|
{
|
|
int nItem = m_listCtrl.GetNextSelectedItem(pos);
|
|
lvi.plvi->iItem = nItem;
|
|
m_listCtrl.GetItem (lvi.plvi);
|
|
strItem=lvi.plvi->pszText;
|
|
|
|
BOOL bFind = FALSE;
|
|
for(int j=0;j<strArry.GetSize();j++)
|
|
{
|
|
if(_tcsicmp(strArry[j],strItem) == 0)
|
|
{
|
|
bFind = TRUE;
|
|
break;
|
|
}
|
|
}
|
|
if(!bFind)
|
|
{
|
|
strArry.Add(strItem);
|
|
}
|
|
}
|
|
}
|
|
|
|
//选中列表中与选中项名字相同的项
|
|
for(int i = 0; i < m_listCtrl.GetItemCount();i++)
|
|
{
|
|
if(m_listCtrl.GetItemState(i,LVIS_SELECTED))
|
|
continue;
|
|
|
|
CString strItem;
|
|
lvi.plvi->iItem = i;
|
|
m_listCtrl.GetItem (lvi.plvi);
|
|
strItem=lvi.plvi->pszText;
|
|
|
|
for(int j=0;j<strArry.GetSize();j++)
|
|
{
|
|
if(_tcsicmp(strArry[j],strItem) == 0)
|
|
{
|
|
m_listCtrl.SetItemState(i,LVIS_SELECTED,LVIS_SELECTED);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
RECT rect;
|
|
m_listCtrl.GetWindowRect(&rect);
|
|
|
|
m_pDragImage = new CImageList;
|
|
m_pDragImage->Create(IDB_BITMAP_BOX,rect.right-rect.left,1,ILC_COLOR32);
|
|
ASSERT(m_pDragImage);
|
|
|
|
m_pDragImage->BeginDrag(0, CPoint(0, nOffset));
|
|
m_pDragImage->DragEnter(GetDesktopWindow(), pNMListView->ptAction);
|
|
|
|
m_bDragging = TRUE;
|
|
m_nDropIndex = -1;
|
|
m_pDragList = &m_listCtrl;
|
|
m_pDropWnd = &m_listCtrl;
|
|
|
|
SetCapture ();
|
|
}
|
|
*pResult = 0;
|
|
}
|
|
|
|
// add by xlc on 070828
|
|
void CTKWorkspace::DropItemOnList(CListCtrl* pDragList, CListCtrl* pDropList)
|
|
{
|
|
if(pDragList == NULL|| pDropList==NULL)
|
|
return;
|
|
|
|
pDropList->SetItemState (m_nDropIndex, 0, LVIS_DROPHILITED);
|
|
|
|
TCHAR szLabel[256];
|
|
LVITEM lviT;
|
|
LVITEM* plvitem;
|
|
|
|
ZeroMemory(&lviT, sizeof (LVITEM));
|
|
lviT.iItem = m_nDragIndex;
|
|
lviT.mask = LVIF_TEXT;
|
|
lviT.pszText = szLabel;
|
|
lviT.cchTextMax = 255;
|
|
|
|
lvItem* pItem;
|
|
lvItem lvi;
|
|
lvi.plvi = &lviT;
|
|
lvi.plvi->iItem = m_nDragIndex;
|
|
lvi.plvi->mask = LVIF_TEXT;
|
|
lvi.plvi->pszText = szLabel;
|
|
lvi.plvi->cchTextMax = 255;
|
|
|
|
if(pDragList->GetSelectedCount() == 1)
|
|
{
|
|
if (m_nDropIndex !=m_nDragIndex)
|
|
{
|
|
pDragList->GetItem (lvi.plvi); //拖拽项
|
|
lvi.sCol2 = pDragList->GetItemText(lvi.plvi->iItem, 1);
|
|
|
|
if(pDragList == pDropList)
|
|
{
|
|
pDragList->DeleteItem (m_nDragIndex);
|
|
if(m_nDragIndex < m_nDropIndex)
|
|
m_nDropIndex--;
|
|
}
|
|
|
|
//插入项
|
|
lvi.plvi->iItem = (m_nDropIndex == -1) ? pDropList->GetItemCount () : m_nDropIndex;
|
|
pDropList->InsertItem (lvi.plvi);
|
|
|
|
pDropList->SetItemState (lvi.plvi->iItem, LVIS_SELECTED, LVIS_SELECTED);
|
|
}
|
|
}
|
|
else //多行
|
|
{
|
|
DualList<lvItem*> listItems;
|
|
POSITION pos = pDragList->GetFirstSelectedItemPosition();
|
|
|
|
while(pos)
|
|
{
|
|
plvitem = new LVITEM;
|
|
ZeroMemory(plvitem, sizeof(LVITEM));
|
|
pItem = new lvItem;
|
|
|
|
pItem->plvi = plvitem;
|
|
pItem->plvi->iItem = m_nDragIndex;
|
|
pItem->plvi->mask = LVIF_TEXT;
|
|
pItem->plvi->pszText = new TCHAR[256];
|
|
pItem->plvi->cchTextMax = 255;
|
|
|
|
m_nDragIndex = pDragList->GetNextSelectedItem(pos);
|
|
|
|
pItem->plvi->iItem = m_nDragIndex;
|
|
pDragList->GetItem(pItem->plvi);
|
|
|
|
listItems.AddTail(pItem);
|
|
}
|
|
|
|
if(pDragList == pDropList)
|
|
{
|
|
pos = pDragList->GetFirstSelectedItemPosition();
|
|
while(pos)
|
|
{
|
|
pos = pDragList->GetFirstSelectedItemPosition();
|
|
m_nDragIndex = pDragList->GetNextSelectedItem(pos);
|
|
|
|
pDragList->DeleteItem(m_nDragIndex);
|
|
if(m_nDragIndex < m_nDropIndex)
|
|
m_nDropIndex--;
|
|
}
|
|
}
|
|
|
|
for(int i = 0; i < listItems.GetLength();i++)
|
|
{
|
|
pItem = listItems.GetAt(i);
|
|
m_nDropIndex = (m_nDropIndex == -1) ? pDropList->GetItemCount() : m_nDropIndex;
|
|
pItem->plvi->iItem = m_nDropIndex;
|
|
pDropList->InsertItem(pItem->plvi);
|
|
pDropList->SetItemState(pItem->plvi->iItem, LVIS_SELECTED, LVIS_SELECTED);
|
|
|
|
m_nDropIndex++;
|
|
}
|
|
}
|
|
|
|
AdjustImage(); //调整图片位置
|
|
}
|
|
|
|
// add by xlc on 070828
|
|
void CTKWorkspace::AdjustImage()
|
|
{
|
|
//modify by xlc on 090413解决向后拖拽一行时
|
|
// if(m_nDropIndex == m_nDragIndex || m_nDragIndex == m_nDropIndex-1)
|
|
// return;
|
|
|
|
DList<TKStruct> lstOld;
|
|
for(int i = 0; i < m_ImageBox.m_lstBlk.Length(); i++)
|
|
{
|
|
lstOld.Append(new TKStruct(*m_ImageBox.m_lstBlk[i]));
|
|
}
|
|
|
|
TCHAR szLabel[256];
|
|
LVITEM lviT;
|
|
|
|
ZeroMemory(&lviT, sizeof (LVITEM)); //allocate and clear memory space for LV_ITEM
|
|
lviT.mask = LVIF_TEXT;
|
|
lviT.pszText = szLabel;
|
|
lviT.cchTextMax = 255;
|
|
|
|
lvItem lvi;
|
|
lvi.plvi = &lviT;
|
|
lvi.plvi->mask = LVIF_TEXT;
|
|
lvi.plvi->pszText = szLabel;
|
|
lvi.plvi->cchTextMax = 255;
|
|
|
|
for(i = 0; i < m_listCtrl. GetItemCount( ); i++)
|
|
{
|
|
CString strItem;
|
|
lvi.plvi->iItem = i;
|
|
m_listCtrl.GetItem (lvi.plvi);
|
|
strItem=lvi.plvi->pszText;
|
|
for(int j=0;j<lstOld.Length();j++)
|
|
{
|
|
CString str=lstOld[j]->csItem;
|
|
if(_tcsicmp(strItem,lstOld[j]->csItem) == 0)
|
|
{
|
|
m_ImageBox.m_lstBlk.Replace(new TKStruct(*lstOld[j]),i);
|
|
lstOld.Remove(j);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (ModifyDatabaseFile())
|
|
{
|
|
ResetImage(TRUE);
|
|
}
|
|
}
|
|
|
|
//add by xlc on 070919
|
|
BOOL CTKWorkspace::ModifyDatabaseFile()
|
|
{
|
|
//将改动写入数据库
|
|
CString sKind, sItem, sDrawing; //类别,名称,内部图名
|
|
CodeBase db;
|
|
db.read_only = 0;
|
|
|
|
//add by xlc on 080821
|
|
if(m_ImageBox.m_lstBlk.Length()<1)
|
|
return FALSE;
|
|
|
|
XDbfTable *pTable = db.Open(m_ImageBox.m_lstBlk[0]->csTKFile);
|
|
if(!pTable)
|
|
return FALSE;
|
|
|
|
int i=0;
|
|
for(pTable->MoveFirst(); !pTable->IsEOF(); pTable->MoveNext())
|
|
{
|
|
GET_FIELD(pTable, _T("kind"), sKind);
|
|
GET_FIELD(pTable, _T("item"), sItem);
|
|
GET_FIELD(pTable, _T("drawing"), sDrawing);
|
|
|
|
if(i<m_ImageBox.m_lstBlk.Length())
|
|
{
|
|
if(sItem.IsEmpty() || sDrawing.IsEmpty())
|
|
continue;
|
|
|
|
if(_tcsicmp(sKind,m_ImageBox.m_lstBlk[i]->csKind) == 0)
|
|
{
|
|
SET_FIELD(pTable, _T("item"), (const TCHAR *)m_ImageBox.m_lstBlk[i]->csItem);
|
|
SET_FIELD(pTable, _T("drawing"), (const TCHAR *)m_ImageBox.m_lstBlk[i]->csDrawing);
|
|
|
|
i++;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
db.read_only = 1;
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
//---------------------------------------------
|
|
//add by xlc on 080826
|
|
void CTKWorkspace::OpenFileByMenu(CString csCommand)
|
|
{
|
|
CString csTKWFullName;
|
|
GetTkwFileByMenu(csCommand, csTKWFullName);
|
|
if(!csTKWFullName.IsEmpty() && FindFile(csTKWFullName))
|
|
{
|
|
m_csCurTKWFile = csTKWFullName;
|
|
m_treeCtrl.SetDataSource(m_csCurTKWFile);
|
|
m_ImageBox.m_bIsJpgShow = m_treeCtrl.m_bIsJpgShow;
|
|
m_treeCtrl.SelectItem(m_treeCtrl.GetRootItem());
|
|
SetDlgItemText(IDC_S_DESCRIPTION, _T("打开tkw图库组文件"));
|
|
SaveStatus();
|
|
LoadStatus();
|
|
}
|
|
else if(!FindFile(csTKWFullName) && !csTKWFullName.IsEmpty())
|
|
MessageBox(_T("没有找到库文件!请确认安装是否完全。"));
|
|
}
|
|
|
|
void CTKWorkspace::OnSelect2DTKLib()
|
|
{
|
|
OpenFileByMenu(CString(_T("二维图库")));
|
|
}
|
|
|
|
void CTKWorkspace::OnSelectEuroLib()
|
|
{
|
|
OpenFileByMenu(CString(_T("欧式图库")));
|
|
}
|
|
void CTKWorkspace::OnSelectMViewLib()
|
|
{
|
|
OpenFileByMenu(CString(_T("多视图库")));
|
|
}
|
|
void CTKWorkspace::OnSelectEBalLib()
|
|
{
|
|
OpenFileByMenu(CString(_T("立面阳台库")));
|
|
}
|
|
void CTKWorkspace::OnSelectEWDLib()
|
|
{
|
|
OpenFileByMenu(CString(_T("立面门窗库")));
|
|
}
|
|
void CTKWorkspace::OnSelectPolyShapeLib()
|
|
{
|
|
OpenFileByMenu(CString(_T("路径曲面截面库")));
|
|
}
|
|
void CTKWorkspace::OnSelectLinePatLib()
|
|
{
|
|
OpenFileByMenu(CString(_T("线图案库")));
|
|
}
|
|
void CTKWorkspace::OnSelectTitleFrameLib()
|
|
{
|
|
OpenFileByMenu(CString(_T("图框库")));
|
|
}
|
|
void CTKWorkspace::OnSelectDorLib2D()
|
|
{
|
|
OpenFileByMenu(CString(_T("二维门库")));
|
|
}
|
|
void CTKWorkspace::OnSelectWinLib2D()
|
|
{
|
|
OpenFileByMenu(CString(_T("二维窗库")));
|
|
}
|
|
void CTKWorkspace::OnSelectWDLib3D()
|
|
{
|
|
OpenFileByMenu(CString(_T("三维门窗库")));
|
|
}
|
|
void CTKWorkspace::OnSelectRailLib()
|
|
{
|
|
OpenFileByMenu(CString(_T("栏杆库")));
|
|
}
|
|
void CTKWorkspace::OnUpdateRevert(CCmdUI* pCmdUI)
|
|
{
|
|
m_ToolBar.CheckButton(ID_BLK_REVERT, 1);
|
|
m_menu.CheckMenuItem(ID_BLK_MERGE,MF_UNCHECKED);
|
|
m_menu.CheckMenuItem(ID_BLK_REVERT,MF_CHECKED);
|
|
}
|
|
|
|
void CTKWorkspace::OnUpdateMerge(CCmdUI* pCmdUI)
|
|
{
|
|
m_ToolBar.CheckButton(ID_BLK_MERGE, 1);
|
|
m_menu.CheckMenuItem(ID_BLK_MERGE,MF_CHECKED);
|
|
m_menu.CheckMenuItem(ID_BLK_REVERT,MF_UNCHECKED);
|
|
}
|
|
|
|
void CTKWorkspace::OnUpdateSort(CCmdUI* pCmdUI)
|
|
{
|
|
if (m_ImageBox.m_bSort)
|
|
{
|
|
m_menu.CheckMenuItem(ID_MENU_SSORT,MF_UNCHECKED);
|
|
}
|
|
else
|
|
{
|
|
m_menu.CheckMenuItem(ID_MENU_SSORT,MF_CHECKED);
|
|
}
|
|
}
|
|
|
|
void CTKWorkspace::OnUpdateSave(CCmdUI* pCmdUI)
|
|
{
|
|
m_menu.CheckMenuItem(ID_MENU_SSORT,MF_UNCHECKED);
|
|
}
|
|
|
|
void CTKWorkspace::AddDynMenu(BOOL bCreate//[in]是否创建
|
|
)
|
|
{
|
|
if(bCreate)
|
|
{
|
|
m_cMenu.CreatePopupMenu();
|
|
GetMenu()->InsertMenu(1,MF_BYPOSITION | MF_POPUP,(UINT_PTR)m_cMenu.m_hMenu,_T("图库"));
|
|
}
|
|
else
|
|
{
|
|
m_cMenu.DestroyMenu();
|
|
m_cMenu.CreatePopupMenu();
|
|
GetMenu()->ModifyMenu(1,MF_BYPOSITION | MF_POPUP,(UINT_PTR)m_cMenu.m_hMenu,_T("图库"));
|
|
}
|
|
|
|
int i, nLenArray;
|
|
UINT MenuID;
|
|
XStringList lstTkwItem;
|
|
MenuID = OpenMenuID + m_lstBlbNames.Length();
|
|
GetTchtkwAllItem(lstTkwItem);
|
|
nLenArray = lstTkwItem.Length();
|
|
for(i=0;i<nLenArray;i++)
|
|
{
|
|
CString csTkwItem = (const TCHAR*)lstTkwItem[i];
|
|
if(csTkwItem == _T("#"))
|
|
m_cMenu.AppendMenu(MF_SEPARATOR);
|
|
else
|
|
m_cMenu.AppendMenu(MF_STRING, MenuID + i, csTkwItem);
|
|
}
|
|
|
|
//更新工具条菜单
|
|
if (m_pOpenMenu)
|
|
{
|
|
m_pOpenMenu->DestroyMenu();
|
|
m_pOpenMenu->CreatePopupMenu();
|
|
|
|
for(i=0; i< m_lstBlbNames.Length(); i++) // 将最近使用过的库加入菜单
|
|
m_pOpenMenu->AppendMenu(MF_STRING, OpenMenuID + i, m_lstBlbNames[i]);
|
|
m_pOpenMenu->AppendMenu(MF_SEPARATOR);
|
|
MenuID = OpenMenuID + m_lstBlbNames.Length();
|
|
|
|
for(i=0;i<nLenArray;i++)
|
|
{
|
|
CString csTkwItem = (const TCHAR*)lstTkwItem[i];
|
|
if(csTkwItem == _T("#"))
|
|
m_pOpenMenu->AppendMenu(MF_SEPARATOR);
|
|
else
|
|
m_pOpenMenu->AppendMenu(MF_STRING, MenuID + i, csTkwItem);
|
|
}
|
|
}
|
|
}
|
|
//---------------------------------------------
|
|
|
|
namespace
|
|
{
|
|
void getFilesInFolder(LPCTSTR sPath
|
|
, LPCTSTR filter
|
|
, std::vector<CString> &vs
|
|
, const bool &bOnlyName
|
|
, const bool &bRecursive)
|
|
{
|
|
if (!sPath) return;
|
|
|
|
CString filename(_T(""));
|
|
CFileFind finder;
|
|
BOOL isNotEmpty = finder.FindFile(CString(sPath) + _T("\\") + filter);
|
|
while (isNotEmpty)
|
|
{
|
|
isNotEmpty = finder.FindNextFile();
|
|
|
|
filename = bOnlyName ? finder.GetFileTitle() : finder.GetFilePath();
|
|
|
|
if (!finder.IsDirectory() && !finder.IsHidden())
|
|
{
|
|
vs.push_back(filename);
|
|
}
|
|
else
|
|
{
|
|
if (!finder.IsDots() && bRecursive)
|
|
{
|
|
getFilesInFolder(filename + _T("\\"), filter, vs, bOnlyName, bRecursive);
|
|
}
|
|
}
|
|
}
|
|
finder.Close();
|
|
}
|
|
|
|
CString getFileName(LPCTSTR psz)
|
|
{
|
|
CString path(psz);
|
|
int idx1 = path.ReverseFind(_T('.'));
|
|
int idx2 = path.ReverseFind(_T('\\'));
|
|
return path.Mid(idx2 + 1, idx1 - idx2 - 1);
|
|
}
|
|
|
|
// 删除文件(第二个参数bDelete表示是否删除至回收站,默认删除到回收站)
|
|
BOOL RecycleFileOrFolder(CString strPath, BOOL bDelete = TRUE)
|
|
{
|
|
strPath += '\0';
|
|
SHFILEOPSTRUCT shDelFile;
|
|
memset(&shDelFile, 0, sizeof(SHFILEOPSTRUCT));
|
|
shDelFile.fFlags |= FOF_SILENT; // 不显示进度
|
|
shDelFile.fFlags |= FOF_NOERRORUI; // 不报告错误信息
|
|
shDelFile.fFlags |= FOF_NOCONFIRMATION; // 直接删除,不进行确认
|
|
|
|
// 设置SHFILEOPSTRUCT的参数为删除做准备
|
|
shDelFile.wFunc = FO_DELETE; // 执行的操作
|
|
shDelFile.pFrom = strPath; // 操作的对象,也就是目录(注意:以“\0\0”结尾)
|
|
shDelFile.pTo = NULL; // 必须设置为NULL
|
|
if (bDelete) //根据传递的bDelete参数确定是否删除到回收站
|
|
{
|
|
shDelFile.fFlags &= ~FOF_ALLOWUNDO; //直接删除,不进入回收站
|
|
}
|
|
else
|
|
{
|
|
shDelFile.fFlags |= FOF_ALLOWUNDO; //删除到回收站
|
|
}
|
|
|
|
BOOL bres = SHFileOperation(&shDelFile); //删除
|
|
return !bres;
|
|
}
|
|
|
|
int LoadDwbBlock(LPCTSTR sDwbFile, LPCTSTR sDwgName, LPCTSTR sBlockName, AcDbDatabase *pDb)
|
|
{
|
|
//TCHAR drive[_MAX_DRIVE] = _T(""), dir[_MAX_DIR] = _T(""), file[_MAX_FNAME], ext[_MAX_EXT];
|
|
//_tsplitpath(sDwbFile, drive, dir, file, ext);
|
|
//_stprintf(sBlockName, _T("$%s$%s"), file, sDwgName);
|
|
if (!TAcDbBlockTableRecPtr(sBlockName, AcDb::kForRead, pDb))
|
|
{
|
|
;
|
|
}
|
|
else
|
|
{
|
|
return RTNORM;
|
|
}
|
|
|
|
TCString sDwbFileExt, sFullDwbFile;
|
|
sDwbFileExt << sDwbFile;
|
|
if (!tstrchr_new(sDwbFile, _T('.')))
|
|
{
|
|
sDwbFileExt << _T(".DWB");
|
|
}
|
|
|
|
if (ads_findfile(sDwbFileExt, sFullDwbFile) != RTNORM)
|
|
{
|
|
return RTERROR;
|
|
}
|
|
|
|
TGGiDrawingStorage dwb(sFullDwbFile, _ios::binary|_ios::in);
|
|
int nIndex = 0;
|
|
if (!dwb.IsExist(sDwgName, &nIndex))
|
|
{
|
|
return RTERROR;
|
|
}
|
|
|
|
TCString sTempFile(256);
|
|
sTempFile = TchExport::GetTempFileName(_T(".dwg"));
|
|
if (!dwb.Copy(nIndex, sTempFile))
|
|
{
|
|
return RTERROR;
|
|
}
|
|
|
|
int nRet = RTNORM;
|
|
AcDbDatabase db(false, true);
|
|
AcDbObjectId _id;
|
|
#if ADS >= 21
|
|
if (db.readDwgFile(sTempFile, AcDbDatabase::kForReadAndAllShare, false) == Acad::eOk &&
|
|
pDb->insert(_id, sBlockName, &db, false) == Acad::eOk)
|
|
#else
|
|
if (db.readDwgFile(sTempFile, _SH_DENYNO, false) == Acad::eOk &&
|
|
pDb->insert(_id, sBlockName, &db, false) == Acad::eOk)
|
|
#endif
|
|
{
|
|
nRet = RTNORM;
|
|
}
|
|
else
|
|
{
|
|
nRet = RTERROR;
|
|
}
|
|
_tremove(sTempFile);
|
|
return nRet;
|
|
}
|
|
|
|
struct STKind
|
|
{
|
|
STKind(LPCTSTR name): kindName(name) {}
|
|
STKind(): kindName(_T("")) {}
|
|
CString kindName;
|
|
std::vector<TKStruct> blks;
|
|
bool operator < (const STKind &k)
|
|
{
|
|
return kindName < k.kindName;
|
|
}
|
|
};
|
|
|
|
struct STTk
|
|
{
|
|
STTk(): tkName(_T("")) {}
|
|
STTk(LPCTSTR name): tkName(name) {}
|
|
CString tkName;
|
|
std::vector<STKind> kinds;
|
|
bool operator < (const STTk &k) const
|
|
{
|
|
return tkName < k.tkName;
|
|
}
|
|
};
|
|
}
|
|
|
|
extern void GetTKFilterList(const TCHAR *szTKName, XStringList &lstKindName);
|
|
|
|
int exportTK()
|
|
{
|
|
TCHAR psz[133] = {};
|
|
if (acedGetString(1, _T("输入tkw文件所在目录:"), psz) != RTNORM) return 0;
|
|
|
|
CString dwbPath(psz);
|
|
|
|
if (_taccess(dwbPath, 0x0) != 0x0) return 0;
|
|
|
|
std::vector<CString> tkws;
|
|
getFilesInFolder(dwbPath, _T("*.tkw"), tkws, false, false);
|
|
if (tkws.empty()) return 0;
|
|
|
|
std::vector<STTk> blks;
|
|
XStringList lstTkFiles, lstKindName;
|
|
XString tkFile;
|
|
CString sKind, sItem, sDrawing; //类别,名称,内部图名
|
|
for (size_t i = 0; i < tkws.size(); ++i)
|
|
{
|
|
CTkwFile tkw(tkws[i]);
|
|
tkw.GetTKList(lstTkFiles);
|
|
for (int j = 0; j < lstTkFiles.Length(); ++j)
|
|
{
|
|
LPCTSTR pszTk(lstTkFiles[j]);
|
|
lstKindName.Reset();
|
|
GetTKFilterList(pszTk, lstKindName);
|
|
|
|
blks.push_back(STTk(getFileName(pszTk)));
|
|
|
|
for (int k = 0; k < lstKindName.Length(); ++k)
|
|
{
|
|
LPCTSTR pszKind(lstKindName[k]);
|
|
if (CString(pszKind).IsEmpty())
|
|
blks.rbegin()->kinds.push_back(STKind(_T("_other_")));
|
|
else
|
|
blks.rbegin()->kinds.push_back(STKind(pszKind));
|
|
CodeBase db;
|
|
db.read_only = 1;
|
|
XDbfTable *pTable = db.Open(pszTk);
|
|
if (!pTable) continue;
|
|
for (pTable->MoveFirst(); !pTable->IsEOF(); pTable->MoveNext())
|
|
{
|
|
GET_FIELD(pTable, _T("kind"), sKind);
|
|
GET_FIELD(pTable, _T("item"), sItem);
|
|
GET_FIELD(pTable, _T("drawing"), sDrawing);
|
|
if (sKind == pszKind && sDrawing != _T(""))
|
|
{
|
|
blks.rbegin()->kinds.rbegin()->blks.push_back(TKStruct(pszTk, sKind, sItem, sDrawing));
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
::memset(psz, 0, sizeof(TCHAR) * 133);
|
|
if (acedGetString(1, _T("输入导出文件所在目录:"), psz) != RTNORM) return 0;
|
|
CString allPath(psz), subPath(_T(""));
|
|
|
|
|
|
::memset(psz, 0, sizeof(TCHAR) * 133);
|
|
if (acedGetString(1, _T("输入块明前缀:"), psz) != RTNORM) return 0;
|
|
CString sPrefix(psz);
|
|
|
|
if (_taccess(allPath, 0x00) != 0x00)
|
|
{
|
|
if (!::CreateDirectory(allPath, NULL)) return 0;
|
|
}
|
|
|
|
CString dwbFile(_T("")), blkName(_T(""));
|
|
for (size_t i = 0; i < blks.size(); ++i)
|
|
{// 一个tk一个目录
|
|
STTk &tk(blks[i]);
|
|
subPath = allPath + _T("\\") + tk.tkName;
|
|
|
|
if (_taccess(subPath, 0x00) == 0x00)
|
|
RecycleFileOrFolder(subPath);
|
|
if (!::CreateDirectory(subPath, NULL)) continue;
|
|
|
|
for (size_t j = 0; j < tk.kinds.size(); ++j) //
|
|
{// 一个kinds一个dwg
|
|
STKind &kind(tk.kinds[j]);
|
|
if (kind.blks.empty()) continue;
|
|
AcDbDatabase *pDb = new AcDbDatabase(true, true);
|
|
for (size_t k = 0; k < kind.blks.size(); ++k)
|
|
{// 一个 blk 一个块
|
|
TKStruct &blk(kind.blks[k]);
|
|
dwbFile = blk.csTKFile;
|
|
dwbFile = dwbFile.Left(dwbFile.ReverseFind(_T('.'))) + _T(".dwb");
|
|
if (_taccess(dwbFile, 0x00) != 0x00) continue;
|
|
blkName.Format(_T("%d%s%s"), k, sPrefix, blk.csItem);
|
|
LoadDwbBlock(dwbFile, blk.csDrawing, blkName, pDb);
|
|
}
|
|
MakeDir(subPath + _T("\\") + kind.kindName + _T(".dwg"));
|
|
pDb->saveAs(subPath + _T("\\") + kind.kindName + _T(".dwg"));
|
|
delete pDb;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
} |