1309 lines
34 KiB
C++
1309 lines
34 KiB
C++
#include "StdAfx.h"
|
|
#include "stdarx.h"
|
|
#include "resource.h"
|
|
#include "MyListView.h"
|
|
#include"blockdrag.h"
|
|
#include"dbsymtb.h "
|
|
#include"dropTarget.h"
|
|
#include "AddBlockDlg.h"
|
|
#include "dockDialog.h"
|
|
#include "ChildFrame.h"
|
|
#include "RnameBlkDlg.h"
|
|
#include "dbents.h "
|
|
#include "dbidmap.h"
|
|
#include "geassign.h"
|
|
#include "DockPane.h"
|
|
#include"inserttypedlg.h"
|
|
|
|
extern CDockPane *g_pDockPane;
|
|
extern CString g_sDwgPathName;
|
|
CString g_strInsertDwgPath;
|
|
CString g_strInsertBlockName;
|
|
AcDbObjectId g_BlockId;
|
|
double g_dBlockScale;
|
|
double g_dAngle;
|
|
CString g_sLayerName;
|
|
|
|
BOOL acedStartOverrideDropTarget(COleDropTarget *pTarget);
|
|
BOOL acedEndOverrideDropTarget(COleDropTarget *pTarget);
|
|
BOOL acedAddDropTarget(COleDropTarget *pTarget);
|
|
BOOL acedRemoveDropTarget(COleDropTarget *pTarget);
|
|
IMPLEMENT_DYNCREATE(CMyListView, CListView)
|
|
|
|
CMyListView::CMyListView()
|
|
{
|
|
|
|
CString sBmpPath = FilePath::GetRootDir() + _T("\\BMP\\SHHY.bmp");
|
|
HBITMAP hBit = (HBITMAP)LoadImage(NULL, sBmpPath,
|
|
IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR | LR_LOADFROMFILE);
|
|
|
|
if (hBit != NULL)
|
|
m_bitmap.Attach(hBit);
|
|
|
|
|
|
m_bDown = FALSE;
|
|
m_bMove = FALSE;
|
|
m_sRcdName = _T("");
|
|
m_nMenuType = 0;
|
|
m_bColor = FALSE;
|
|
m_nSelected = -1;
|
|
m_nRcolor = 237;
|
|
m_nGcolor = 26;
|
|
m_nBcolor = 59;
|
|
m_bTracking = FALSE;
|
|
m_dBlockScale = 1;
|
|
m_Listdrag = NULL;
|
|
}
|
|
|
|
CMyListView::~CMyListView()
|
|
{
|
|
m_Bitmap.DeleteObject();
|
|
}
|
|
|
|
BEGIN_MESSAGE_MAP(CMyListView, CListView)
|
|
//{{AFX_MSG_MAP(CMyListView)
|
|
ON_WM_ERASEBKGND()
|
|
|
|
|
|
ON_COMMAND(ID_INSERT, OnInSertBlock)
|
|
ON_COMMAND(ID_ACADINSERT, OnAcadInSertBlock)
|
|
ON_NOTIFY_REFLECT(LVN_BEGINDRAG, OnBegindrag)
|
|
ON_WM_DROPFILES()
|
|
ON_WM_LBUTTONDBLCLK()
|
|
ON_WM_MOUSEMOVE()
|
|
ON_COMMAND(IDC_DELETEBLOCK, OnDeleteblock)
|
|
ON_COMMAND(ID_ADDBLOCKMENU, OnAddblockmenu)
|
|
ON_COMMAND(ID_BLOCKCOMMAND, OnBlockcommand)
|
|
ON_WM_NCMOUSEMOVE()
|
|
ON_COMMAND(ID_PREVIEW, OnPreview)
|
|
ON_COMMAND(ID_MENUITEMFIRST, OnMenuitemfirst)
|
|
ON_COMMAND(ID_MENUITEMFOUR, OnMenuitemfour)
|
|
ON_COMMAND(ID_MENUITEMSECOND, OnMenuitemsecond)
|
|
ON_COMMAND(ID_MENUITEMTREE, OnMenuitemtree)
|
|
|
|
|
|
ON_UPDATE_COMMAND_UI(ID_MENUITEMFIRST, OnUpdateMenuitemfirst)
|
|
ON_UPDATE_COMMAND_UI(ID_MENUITEMSECOND, OnUpdateMenuitemsecond)
|
|
ON_UPDATE_COMMAND_UI(ID_MENUITEMTREE, OnUpdateMenuitemtree)
|
|
ON_UPDATE_COMMAND_UI(ID_MENUITEMFOUR, OnUpdateMenuitemfour)
|
|
|
|
|
|
|
|
ON_UPDATE_COMMAND_UI(ID_BIGICON, OnUpdateMenuitemfirst)
|
|
ON_UPDATE_COMMAND_UI(ID_SMALLICON, OnUpdateMenuitemsecond)
|
|
ON_UPDATE_COMMAND_UI(ID_LISTICON, OnUpdateMenuitemtree)
|
|
ON_UPDATE_COMMAND_UI(ID_REPORTICON, OnUpdateMenuitemfour)
|
|
|
|
|
|
ON_COMMAND(ID_BIGICON, OnMenuitemfirst)
|
|
ON_COMMAND(ID_SMALLICON, OnMenuitemsecond)
|
|
|
|
ON_COMMAND(ID_LISTICON, OnMenuitemtree)
|
|
ON_COMMAND(ID_REPORTICON, OnMenuitemfour)
|
|
|
|
|
|
|
|
ON_WM_VSCROLL()
|
|
ON_COMMAND(IDM_RENAMEBLOCK, OnRenameblock)
|
|
ON_COMMAND(ID_SELECTALL, OnSelectAll)
|
|
ON_COMMAND(IDM_STEAD, OnInstead)
|
|
|
|
ON_COMMAND(ID_BLOCFILE, OnBlocfile)
|
|
ON_COMMAND(ID_BLOCKBYCURDB, OnBlockbycurdb)
|
|
ON_COMMAND(ID_IMPORTCUR, OnImportCur)
|
|
|
|
ON_COMMAND(ID_UPDATETB, OnUpdatetb)
|
|
ON_WM_RBUTTONDOWN()
|
|
ON_WM_CONTEXTMENU()
|
|
ON_MESSAGE(WM_MOUSELEAVE, OnMouseLeave)
|
|
ON_NOTIFY_REFLECT(NM_CLICK, OnClick)
|
|
|
|
ON_WM_INITMENUPOPUP()
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
void CMyListView::OnDraw(CDC *pDC)
|
|
{
|
|
CDocument *pDoc = GetDocument();
|
|
}
|
|
|
|
#ifdef _DEBUG
|
|
void CMyListView::AssertValid() const
|
|
{
|
|
CListView::AssertValid();
|
|
}
|
|
|
|
void CMyListView::Dump(CDumpContext &dc) const
|
|
{
|
|
CListView::Dump(dc);
|
|
}
|
|
#endif
|
|
|
|
BOOL CMyListView::OnEraseBkgnd(CDC *pDC)
|
|
{
|
|
return CListView::OnEraseBkgnd(pDC);
|
|
CRect rect;
|
|
GetClientRect(&rect);
|
|
CBrush brush(RGB(255, 255, 255));
|
|
CBrush *pOldBrush = pDC->SelectObject(&brush);
|
|
pDC->PatBlt(rect.left, rect.top, rect.Width(), rect.Height(), PATCOPY);
|
|
pDC->SelectObject(pOldBrush);
|
|
brush.DeleteObject();
|
|
return TRUE;
|
|
CDC dcimage;
|
|
if (!dcimage.CreateCompatibleDC(pDC))
|
|
return TRUE;
|
|
BITMAP bm;
|
|
m_bitmap.GetBitmap(&bm);
|
|
CBitmap *pOldBitmap = dcimage.SelectObject(&m_bitmap);
|
|
pDC->BitBlt(0, 0, bm.bmWidth, bm.bmHeight, &dcimage, 0, 0, SRCCOPY);
|
|
dcimage.SelectObject(pOldBitmap);
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL CMyListView::PreCreateWindow(CREATESTRUCT &cs)
|
|
{
|
|
if (!CListView::PreCreateWindow(cs))
|
|
return FALSE;
|
|
|
|
cs.dwExStyle |= WS_EX_CLIENTEDGE;
|
|
cs.style &= ~WS_BORDER;
|
|
|
|
|
|
cs.style |= LVS_SHOWSELALWAYS|LVS_AUTOARRANGE;//LVS_SHOWSELALWAYS
|
|
return TRUE;
|
|
}
|
|
|
|
void CMyListView::OnInitialUpdate()
|
|
{
|
|
CListView::OnInitialUpdate();
|
|
}
|
|
|
|
void CMyListView::InSertBlock()
|
|
{
|
|
if (acedGetAcadDwgView()!=NULL)
|
|
acedGetAcadDwgView()->SetFocus(); //设置CAD焦点
|
|
AcDbObjectId BlockId;
|
|
CDockDialog *pDlg1 = (CDockDialog *)GetParent()->GetParent()->GetParent()->GetParent()->GetParent();
|
|
g_strInsertDwgPath = pDlg1->m_sDwgPath;
|
|
g_strInsertBlockName = m_sRcdName;
|
|
|
|
// pDlg1->getPreviewCtrl().ViewBlock(pDlg1->m_sDwgPath,m_sRcdName);
|
|
BaseFuncs::ClearAcadCmdLine();
|
|
|
|
// BlockId=pDlg1->getPreviewCtrl().m_RcdId;
|
|
double dAngle = 0;
|
|
g_BlockId = BlockId;
|
|
g_dBlockScale = 1;
|
|
g_dAngle = dAngle;
|
|
//acedGetAcadFrame()->ShowControlBar(g_pDockPane,FALSE,FALSE);
|
|
Showtkcsdlg(TRUE);
|
|
BaseFuncs::CAD_SendStringToExecute(_T("tk_draw"), TRUE);
|
|
|
|
// SetBlockScale(pDlg1->m_sDwgPath,m_sRcdName,m_dBlockScale);
|
|
}
|
|
|
|
void CMyListView::OnInSertBlock() //自己的方式插块
|
|
{
|
|
InSertBlock();
|
|
}
|
|
|
|
void CMyListView::OnAcadInSertBlock() //CAD方式插块
|
|
{
|
|
CDockDialog *pDlg1 = (CDockDialog *)GetParent()->GetParent()->GetParent()->GetParent()->GetParent();
|
|
AcDbObjectId BlockId;
|
|
acDocManagerPtr()->lockDocument(curDoc());
|
|
BaseFuncs::InSertBlockFromDwgToCurDb(pDlg1->m_sDwgPath, m_sRcdName, BlockId);
|
|
acDocManagerPtr()->unlockDocument(curDoc());
|
|
// acedGetAcadDwgView()->SetFocus(); // 获得CAD焦点
|
|
CString sCommand = _T("-insert ")+m_sRcdName+_T(" ");
|
|
BaseFuncs::CAD_SendStringToExecute(sCommand, TRUE);
|
|
|
|
}
|
|
|
|
void GetRecordContents(AcDbObjectId RcdId, char *scontent)
|
|
{
|
|
}
|
|
|
|
void CMyListView::OnPreview() //设置图块预览
|
|
{
|
|
}
|
|
|
|
void CMyListView::OnBegindrag(NMHDR *pNMHDR, LRESULT *pResult)
|
|
{
|
|
CString sCurParentText;
|
|
CString sCurSltText;
|
|
if (acedGetAcadDwgView()==NULL)
|
|
return;
|
|
CString sRcdName;
|
|
NM_LISTVIEW *pNMListView = (NM_LISTVIEW *)pNMHDR;
|
|
// TODO: Add your control notification handler code here
|
|
m_nSelected = pNMListView->iItem;
|
|
int nIndexClr = 256;
|
|
|
|
if (m_nSelected>=0)
|
|
{
|
|
|
|
CDockDialog *pDlg1 = (CDockDialog *)GetParent()->GetParent()->GetParent()->GetParent()->GetParent();
|
|
int nType = 0;
|
|
sRcdName = GetListCtrl().GetItemText(m_nSelected, 0);
|
|
sCurParentText = pDlg1->getTreeCtrl().m_sCurParentText;
|
|
sCurSltText = pDlg1->getTreeCtrl().m_sCurSltText;
|
|
if (_tcscmp(sCurParentText, _T("填充库"))==0)
|
|
{
|
|
if (_tcscmp(sCurSltText, _T("真彩填充"))==0)
|
|
{
|
|
m_bColor = TRUE;
|
|
CString sTreePath;
|
|
BaseFuncs::GetPathName(sTreePath);
|
|
sTreePath += _T("\\tk\\Customer\\图库中心\\填充库\\颜色索引.txt");
|
|
BaseFuncs::GetColorIndex(sTreePath, sRcdName, m_nRcolor, m_nGcolor, m_nBcolor);
|
|
AcCmColor color;
|
|
color.setRGB(m_nRcolor, m_nGcolor, m_nBcolor);
|
|
nIndexClr = color.colorIndex();
|
|
nType = 1;
|
|
}
|
|
else
|
|
{
|
|
nType = 2;
|
|
}
|
|
}
|
|
CString sCommand;
|
|
if (BaseFuncs::GetBlockCommand(pDlg1->m_sDwgPath, sRcdName, sCommand))
|
|
{
|
|
sCommand.TrimLeft();
|
|
sCommand.TrimRight();
|
|
BaseFuncs::CAD_SendStringToExecute(sCommand, TRUE);
|
|
*pResult = 0;
|
|
return;
|
|
}
|
|
|
|
double dScale = 1;
|
|
AcDbObjectId BlockId;//=pDlg1->pBlockView->mPreviewCtrl.m_RcdId;
|
|
if (nType==0)
|
|
{
|
|
// GetBlockScale(pDlg1->m_sDwgPath,sRcdName,dScale);
|
|
BaseFuncs::InSertBlockFromDwgToCurDb(pDlg1->m_sDwgPath, sRcdName, BlockId);
|
|
}
|
|
|
|
TCHAR cValue[256];
|
|
CString sDefautStr;
|
|
CString strPathName;
|
|
BaseFuncs::GetPathName(strPathName);
|
|
strPathName += _T("\\tk\\Customer\\图库中心");
|
|
CString strSubPath = pDlg1->m_sDwgPath;
|
|
|
|
CString subPath(strSubPath), pathName(strPathName);
|
|
subPath.MakeUpper();
|
|
pathName.MakeUpper();
|
|
|
|
if (subPath.Find(pathName, 0)>=0)
|
|
subPath = subPath.Right(subPath.GetLength()-pathName.GetLength());
|
|
GetPrivateProfileString(subPath, sRcdName, sDefautStr, cValue, 256, pathName+_T("\\dwglib.ini"));
|
|
CStringArray strArr;
|
|
BaseFuncs::JxString(cValue, _T(","), strArr);
|
|
BOOL bAutoScale = FALSE;
|
|
BOOL bAutoExplode = FALSE;
|
|
BOOL bMM = FALSE;
|
|
if (strArr.GetSize()==3)
|
|
{
|
|
bMM = _ttoi(strArr[0]);
|
|
bAutoScale = _ttoi(strArr[1]);
|
|
bAutoExplode = _ttoi(strArr[2]);
|
|
}
|
|
|
|
if (!bMM) //图块的原始单位是米
|
|
{
|
|
if (BaseFuncs::IsMMUnitForDwg()) //毫米
|
|
dScale = 1000.0;
|
|
}
|
|
else
|
|
{
|
|
if (!BaseFuncs::IsMMUnitForDwg())//米
|
|
dScale = 0.001;
|
|
}
|
|
if (bAutoScale)
|
|
{
|
|
if (!BaseFuncs::IsMMUnitForDwg())//米
|
|
{
|
|
dScale = dScale;
|
|
}
|
|
else
|
|
{
|
|
dScale = dScale/1000.0;
|
|
}
|
|
}
|
|
|
|
|
|
COleDataSource *pSource = new COleDataSource;//generateDataSource(objType, CRect(CPoint(0,0), CSize(m_sliderVal, m_sliderVal )));
|
|
CMyOverrideDropTarget myDT(nType, BlockId, nIndexClr, m_sRcdName, dScale, bAutoExplode);
|
|
COleDropSource myDS;
|
|
if (!acedStartOverrideDropTarget(&myDT))
|
|
TRACE("Error in overriding Custom drop target!\n");
|
|
|
|
//DROPEFFECT dwEffect = pSource->DoDragDrop( DROPEFFECT_MOVE , NULL, &myDS);
|
|
DROPEFFECT dwEffect = pSource->DoDragDrop(DROPEFFECT_NONE |DROPEFFECT_MOVE | DROPEFFECT_COPY, NULL, &myDS);
|
|
|
|
if (!acedEndOverrideDropTarget(&myDT))
|
|
TRACE("Error in end1 0 0 1 1ing override drop target\n");
|
|
|
|
delete pSource;
|
|
|
|
/// m_bMove=TRUE;
|
|
// m_bDown=FALSE;
|
|
}
|
|
*pResult = 0;
|
|
}
|
|
|
|
void CMyListView::OnDropFiles(HDROP hDropInfo)
|
|
{
|
|
// TODO: Add your message handler code here and/or call default
|
|
|
|
CListView::OnDropFiles(hDropInfo);
|
|
}
|
|
|
|
void CMyListView::OnLButtonDblClk(UINT nFlags, CPoint point)
|
|
{
|
|
// TODO: Add your message handler code here and/or call default
|
|
|
|
// CListView::OnLButtonDblClk(nFlags,point);
|
|
if (acedGetAcadDwgView()==NULL)
|
|
{
|
|
// CListView::OnLButtonDblClk(nFlags,point);
|
|
return;
|
|
}
|
|
CString sCurParentText;
|
|
CString sCurSltText;
|
|
m_bDown = FALSE;
|
|
AcDbObjectId BlockId;
|
|
CString sRcdName;
|
|
AcDbBlockTableRecord *pRcd = NULL;
|
|
CDockDialog *pDlg1 = (CDockDialog *)GetParent()->GetParent()->GetParent()->GetParent()->GetParent();
|
|
sCurParentText = pDlg1->getTreeCtrl().m_sCurParentText;
|
|
sCurSltText = pDlg1->getTreeCtrl().m_sCurSltText;
|
|
int nSelected = GetListCtrl().HitTest(point, &nFlags);
|
|
if (nSelected<0)
|
|
{
|
|
CListView::OnLButtonDblClk(nFlags, point);
|
|
return;
|
|
}
|
|
|
|
BaseFuncs::ClearAcadCmdLine();
|
|
acedGetAcadDwgView()->SetFocus();
|
|
|
|
// acedGetAcadFrame()->ShowControlBar(g_pDockPane,FALSE,TRUE);
|
|
sRcdName = GetListCtrl().GetItemText(nSelected, 0);
|
|
|
|
///modify by hrp
|
|
CString sCommand;
|
|
g_sLayerName = sCurParentText;
|
|
//if(!GetBlockCommand(pDlg1->m_sDwgPath,sRcdName,sCommand))
|
|
{
|
|
g_strInsertDwgPath = pDlg1->m_sDwgPath;
|
|
g_strInsertBlockName = sRcdName;
|
|
m_dBlockScale = 1;
|
|
double dAngle = 0;
|
|
g_BlockId = BlockId;
|
|
g_dBlockScale = m_dBlockScale;
|
|
g_dAngle = dAngle;
|
|
Showtkcsdlg(TRUE);
|
|
BaseFuncs::CAD_SendStringToExecute(_T("tk_draw"), TRUE);
|
|
|
|
}
|
|
/*else
|
|
{
|
|
sCommand.TrimLeft();
|
|
sCommand.TrimRight();
|
|
CAD_SendStringToExecute(sCommand,TRUE);
|
|
}*/
|
|
CListView::OnLButtonDblClk(nFlags, point);
|
|
|
|
}
|
|
|
|
void CMyListView::OnMouseMove(UINT nFlags, CPoint point)
|
|
{
|
|
// TODO: Add your message handler code here and/or call default
|
|
|
|
|
|
if (!m_bTracking)
|
|
{
|
|
TRACKMOUSEEVENT tme;
|
|
tme.cbSize = sizeof(tme);
|
|
tme.hwndTrack = m_hWnd;
|
|
tme.dwFlags = TME_LEAVE | TME_HOVER;
|
|
tme.dwHoverTime = 1;
|
|
m_bTracking = _TrackMouseEvent(&tme);
|
|
}
|
|
CListView::OnMouseMove(nFlags, point);
|
|
}
|
|
|
|
LRESULT CMyListView::OnMouseLeave(WPARAM wParam, LPARAM lParam)
|
|
{
|
|
m_bTracking = FALSE;
|
|
if (acedGetAcadDwgView()!=NULL)
|
|
acedGetAcadDwgView()->SetFocus();
|
|
return 0;
|
|
}
|
|
|
|
BOOL CMyListView::DestroyWindow()
|
|
{
|
|
return CListView::DestroyWindow();
|
|
}
|
|
|
|
void CMyListView::DeleteBlockArryBtwDwg(CStringArray &sBlockArr)
|
|
{
|
|
// 清除所有的图形
|
|
CDockDialog *pDlg1 = (CDockDialog *)GetParent()->GetParent()->GetParent()->GetParent()->GetParent();
|
|
int nLength = GetListCtrl().GetItemCount()-(int)sBlockArr.GetSize();
|
|
// GetListCtrl().DeleteAllItems();
|
|
// m_ListImageDesc.DeleteImageList();
|
|
Acad::ErrorStatus es;
|
|
// m_ListImageDesc.Create(32, 32, ILC_MASK, nLength, 0);
|
|
acDocManagerPtr()->lockDocument(curDoc());
|
|
AcDbDatabase *pDb = new AcDbDatabase(Adesk::kFalse);
|
|
|
|
#if ARX < 19
|
|
pDb->readDwgFile(pDlg1->m_sDwgPath, SH_DENYNO);
|
|
#else
|
|
pDb->readDwgFile(pDlg1->m_sDwgPath, AcDbDatabase::kForReadAndAllShare);
|
|
#endif
|
|
|
|
CStringArray strNameArray;
|
|
AcDbBlockTableRecord *pDescTblRcd = NULL;
|
|
AcDbBlockTableIterator *pBlkItr = NULL;
|
|
AcDbBlockTable *pDesdTbl;
|
|
if ((es = pDb->getBlockTable(pDesdTbl, AcDb::kForRead))!=Acad::eOk)
|
|
{
|
|
delete pDb;
|
|
acDocManagerPtr()->unlockDocument(curDoc());
|
|
return;
|
|
}
|
|
int nLen = 0;
|
|
for (nLen = 0; nLen<sBlockArr.GetSize(); nLen++)
|
|
{
|
|
if (pDesdTbl->getAt(sBlockArr.GetAt(nLen), pDescTblRcd, AcDb::kForWrite)==Acad::eOk)
|
|
{
|
|
Acad::ErrorStatus es = pDescTblRcd->erase();
|
|
pDescTblRcd->close();
|
|
pDescTblRcd = NULL;
|
|
}
|
|
}
|
|
pDesdTbl->newIterator(pBlkItr);
|
|
pDesdTbl->close();
|
|
pDesdTbl = NULL;
|
|
acDocManagerPtr()->unlockDocument(curDoc());
|
|
for (int nLen = 0; nLen<GetListCtrl().GetItemCount(); nLen++)
|
|
{
|
|
int nIndex = -1;
|
|
CString strBlockName;
|
|
GetListCtrl().GetItemText(nLen, 0, strBlockName.GetBufferSetLength(256), 256);
|
|
strBlockName.ReleaseBuffer();
|
|
if (BaseFuncs::FindStringInArr(sBlockArr, strBlockName, nIndex))
|
|
{
|
|
GetListCtrl().DeleteItem(nLen);
|
|
nLen--;
|
|
}
|
|
}
|
|
AcDb::AcDbDwgVersion dwgVer = pDb->originalFileVersion();
|
|
es = pDb->saveAs(pDlg1->m_sDwgPath, false, dwgVer);
|
|
|
|
delete pDb;
|
|
|
|
}
|
|
|
|
void CMyListView::DeleteBlock()
|
|
{
|
|
BaseFuncs::ClearAcadCmdLine();
|
|
if (AfxMessageBox(_T("确定要删除该块吗"), MB_OK|MB_OKCANCEL)==IDCANCEL)
|
|
return;
|
|
CDockDialog *pDlg1 = (CDockDialog *)GetParent()->GetParent()->GetParent()->GetParent()->GetParent();
|
|
CString sBlockName;
|
|
POSITION pos = GetListCtrl().GetFirstSelectedItemPosition();
|
|
if (pos == NULL)
|
|
TRACE0(_T("No items were selected!\n"));
|
|
else
|
|
{
|
|
CStringArray sBlockArr;
|
|
while (pos)
|
|
{
|
|
int nItem = GetListCtrl().GetNextSelectedItem(pos);
|
|
sBlockName = GetListCtrl().GetItemText(nItem, 0);
|
|
sBlockArr.Add(sBlockName);
|
|
}
|
|
pDlg1->getPreviewCtrl().ReleaseDb();//modify by hrp 2010 9-30
|
|
DeleteBlockArryBtwDwg(sBlockArr);
|
|
|
|
}
|
|
}
|
|
void CMyListView::OnDeleteblock()
|
|
{
|
|
DeleteBlock();
|
|
|
|
}
|
|
void CMyListView::OnAddblockmenu()
|
|
{
|
|
// TODO: Add your command handler code here
|
|
AcDbObjectId BlfId;
|
|
acedInitGet(0, _T("D"));
|
|
CDockDialog *pDlg1 = (CDockDialog *)GetParent()->GetParent()->GetParent()->GetParent()->GetParent();
|
|
CString sOrgDwg;
|
|
CString sDescDwg;
|
|
sDescDwg = pDlg1->m_sDwgPath;
|
|
|
|
CFileFind filefind;
|
|
if (!filefind.FindFile(sDescDwg))
|
|
{
|
|
AfxMessageBox(_T("未指定当前Dwg文件"));
|
|
filefind.Close();
|
|
return;
|
|
}
|
|
filefind.Close();
|
|
// TODO: Add your command handler code here
|
|
|
|
CFileDialog fileDia(TRUE, NULL, _T(""), OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, _T("dwg文件(*dwg)|*.dwg|"));
|
|
if (fileDia.DoModal()!=IDOK)
|
|
return;
|
|
sOrgDwg = fileDia.GetPathName();
|
|
CAddBlockDlg AddDlg;
|
|
AddDlg.SetOrgPath(sOrgDwg);
|
|
AddDlg.SetDescPath(sDescDwg);
|
|
if (AddDlg.DoModal()!=IDOK)
|
|
return;
|
|
//return ;
|
|
GetListCtrl().DeleteAllItems();
|
|
pDlg1->getPreviewCtrl().ReleaseDb();
|
|
pDlg1->AddItemToListCtrl(sDescDwg);
|
|
GetListCtrl().RedrawWindow();
|
|
BaseFuncs::ClearAcadCmdLine();
|
|
}
|
|
CString g_sDescDwg;
|
|
AcDbObjectIdArray g_BlockIds;
|
|
void CMyListView::OnImportCur()
|
|
{
|
|
AcDbObjectId BlfId;
|
|
acedInitGet(0, _T("D"));
|
|
CDockDialog *pDlg1 = (CDockDialog *)GetParent()->GetParent()->GetParent()->GetParent()->GetParent();
|
|
CString sOrgDwg;
|
|
CString sDescDwg;
|
|
sDescDwg = pDlg1->m_sDwgPath;
|
|
|
|
CFileFind filefind;
|
|
if (!filefind.FindFile(sDescDwg))
|
|
{
|
|
AfxMessageBox(_T("未指定当前Dwg文件"));
|
|
return;
|
|
}
|
|
// TODO: Add your command handler code here
|
|
|
|
/* CAddBlockDlg AddDlg;
|
|
AddDlg.SetOrgPath(sOrgDwg);
|
|
AddDlg.m_bAddCur=TRUE;
|
|
AddDlg.SetDescPath(sDescDwg);
|
|
if(AddDlg.DoModal()!=IDOK)
|
|
return;*/
|
|
AcDbObjectIdArray BlfIds;
|
|
TCHAR selPrompt[] = _T("\n选择图中块对象:");
|
|
TCHAR selError[] = _T("选择错误,请重新选择!");
|
|
TCHAR *prompt[2];
|
|
prompt[0] = selPrompt;
|
|
prompt[1] = selError;
|
|
ads_name ssName;
|
|
acedGetAcadDwgView()->SetFocus();
|
|
//acedGetAcadFrame()->ShowControlBar(g_pDockPane, FALSE, FALSE);
|
|
resbuf *pRb = acutBuildList(RTDXF0, _T("INSERT"), 0);
|
|
if (acedSSGet(_T(":$"), prompt, NULL, pRb, ssName) != RTNORM)
|
|
{
|
|
// acedGetAcadFrame()->ShowControlBar(g_pDockPane, TRUE, FALSE);
|
|
acutRelRb(pRb);
|
|
return;
|
|
}
|
|
BaseFuncs::SSToIds(ssName, BlfIds);
|
|
acedSSFree(ssName);
|
|
acutRelRb(pRb);
|
|
AcDbObjectIdArray BlockIds;
|
|
CStringArray strArr;
|
|
BaseFuncs::dist_blkrcd_getbyRef(BlfIds, BlockIds, strArr);
|
|
|
|
// acedGetAcadFrame()->ShowControlBar(g_pDockPane, TRUE, FALSE);
|
|
if (BlockIds.logicalLength()<1)return;
|
|
pDlg1->getPreviewCtrl().ReleaseDb();
|
|
/* if(curDoc()!=NULL)
|
|
acDocManager->sendStringToExecute(curDoc(),_T("blockIcon *\r\n"));
|
|
::SendMessage(acedGetAcadTextCmdLine()->m_hWnd, WM_CHAR, VK_RETURN, 0);*/
|
|
g_sDescDwg = sDescDwg;
|
|
g_BlockIds.setLogicalLength(0);
|
|
g_BlockIds.append(BlockIds);
|
|
|
|
BaseFuncs::CAD_SendStringToExecute(_T("tk_shup"), TRUE);
|
|
|
|
}
|
|
|
|
void CMyListView::OnBlockcommand()
|
|
{
|
|
SetBlockCommand();
|
|
}
|
|
void CMyListView::SetBlockCommand()
|
|
{
|
|
CAcModuleResourceOverride myResources;
|
|
CDockDialog *pDlg1 = (CDockDialog *)GetParent()->GetParent()->GetParent()->GetParent()->GetParent();
|
|
CString strSubPath = pDlg1->m_strSubPath;
|
|
CInsertTypeDlg dlg;
|
|
CString strPathName;
|
|
BaseFuncs::GetPathName(strPathName);
|
|
strPathName = strPathName+_T("\\tk\\Customer\\图库中心\\dwglib.ini");
|
|
if (dlg.DoModal()==IDOK)
|
|
{
|
|
CListCtrl &mListCtrl = GetListCtrl();
|
|
POSITION pos = mListCtrl.GetFirstSelectedItemPosition();
|
|
while (pos!=0)
|
|
{
|
|
CString strFormat;
|
|
CString strRcdName;
|
|
int nSelect = mListCtrl.GetNextSelectedItem(pos);
|
|
strRcdName = mListCtrl.GetItemText(nSelect, 0);
|
|
strFormat.Format(_T("%d,%d,%d"), dlg.m_nUnit, dlg.m_bAutoScale, dlg.m_bAutoExplode);
|
|
WritePrivateProfileString(strSubPath, strRcdName, strFormat, strPathName);
|
|
}
|
|
|
|
|
|
}
|
|
}
|
|
|
|
void CMyListView::OnUpdateMenuitemfirst(CCmdUI *pCmdUI)
|
|
{
|
|
DWORD dwStyle = GetStyle() & LVS_TYPEMASK;
|
|
pCmdUI->SetCheck(dwStyle==LVS_ICON);
|
|
}
|
|
|
|
void CMyListView::OnUpdateMenuitemsecond(CCmdUI *pCmdUI)
|
|
{
|
|
DWORD dwStyle = GetStyle() & LVS_TYPEMASK;
|
|
pCmdUI->SetCheck(dwStyle==LVS_SMALLICON);
|
|
}
|
|
|
|
void CMyListView::OnUpdateMenuitemtree(CCmdUI *pCmdUI)
|
|
{
|
|
DWORD dwStyle = GetStyle() & LVS_TYPEMASK;
|
|
pCmdUI->SetCheck(dwStyle==LVS_LIST);
|
|
}
|
|
|
|
void CMyListView::OnUpdateMenuitemfour(CCmdUI *pCmdUI)
|
|
{
|
|
DWORD dwStyle = GetStyle() & LVS_TYPEMASK;
|
|
pCmdUI->SetCheck(dwStyle==LVS_REPORT);
|
|
}
|
|
|
|
void CMyListView::OnMenuitemfirst()
|
|
{
|
|
ModifyStyle(LVS_TYPEMASK, LVS_ICON);
|
|
}
|
|
|
|
void CMyListView::OnMenuitemfour()
|
|
{
|
|
// TODO: Add your command handler code here
|
|
ModifyStyle(LVS_TYPEMASK, LVS_REPORT);
|
|
}
|
|
|
|
void CMyListView::OnMenuitemsecond()
|
|
{
|
|
// TODO: Add your command handler code here
|
|
ModifyStyle(LVS_TYPEMASK, LVS_SMALLICON);
|
|
}
|
|
|
|
void CMyListView::OnMenuitemtree()
|
|
{
|
|
// TODO: Add your command handler code here
|
|
ModifyStyle(LVS_TYPEMASK, LVS_LIST);
|
|
}
|
|
|
|
void CMyListView::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar *pScrollBar)
|
|
{
|
|
// 确保在移动滚动条时更新
|
|
//Invalidate();
|
|
CListView::OnVScroll(nSBCode, nPos, pScrollBar);
|
|
}
|
|
|
|
void CMyListView::OnInstead()
|
|
{
|
|
BlockInstead();
|
|
}
|
|
|
|
void CMyListView::BlockInstead()
|
|
{
|
|
//if (acedGetAcadDwgView()!=NULL)
|
|
// acedGetAcadDwgView()->SetFocus(); //设置CAD焦点
|
|
//BaseFuncs::ClearAcadCmdLine();
|
|
|
|
//AcDbObjectId BlockId;
|
|
//CDockDialog *pDlg1 = (CDockDialog *)GetParent()->GetParent()->GetParent()->GetParent()->GetParent();
|
|
//g_SysSet.m_strThDwgName = pDlg1->m_sDwgPath;
|
|
//g_SysSet.m_strThtkName = m_sRcdName;
|
|
//BaseFuncs::CAD_SendStringToExecute(_T("t91_tkth1"));
|
|
}
|
|
|
|
void CMyListView::OnSelectAll()
|
|
{
|
|
SelectAll();
|
|
}
|
|
|
|
void CMyListView::SelectAll()
|
|
{
|
|
CListCtrl &mListCtrl = GetListCtrl();
|
|
for (int nLen = 0; nLen<mListCtrl.GetItemCount(); nLen++)
|
|
{
|
|
mListCtrl.SetItemState(nLen, LVNI_FOCUSED | LVNI_SELECTED, LVNI_FOCUSED | LVNI_SELECTED);
|
|
}
|
|
}
|
|
|
|
void CMyListView::OnRenameblock()
|
|
{
|
|
POSITION pos = GetListCtrl().GetFirstSelectedItemPosition();
|
|
if (pos == NULL)
|
|
TRACE0(_T("No items were selected!\n"));
|
|
int nItem = GetListCtrl().GetNextSelectedItem(pos);
|
|
|
|
// TODO: Add your command handler code here
|
|
CDockDialog *pDlg1 = (CDockDialog *)GetParent()->GetParent()->GetParent()->GetParent()->GetParent();
|
|
CString sDescDwg;
|
|
sDescDwg = pDlg1->m_sDwgPath;
|
|
CFileFind filefind;
|
|
if (!filefind.FindFile(sDescDwg))
|
|
{
|
|
AfxMessageBox(_T("未指定当前Dwg文件"));
|
|
filefind.Close();
|
|
return;
|
|
}
|
|
filefind.Close();
|
|
CStringArray strRcdNames;
|
|
getAllListItem(strRcdNames);
|
|
|
|
CRnameBlkDlg dlg;
|
|
dlg.m_strRcdNames.Append(strRcdNames);
|
|
dlg.m_sOldBlkName = m_sRcdName;
|
|
if (dlg.DoModal()!=IDOK)
|
|
return;
|
|
CString sNewBlkName = dlg.m_sNewBlockName;
|
|
sNewBlkName.TrimLeft();
|
|
sNewBlkName.TrimRight();
|
|
if (m_sRcdName==sNewBlkName)
|
|
return;
|
|
pDlg1->getPreviewCtrl().ReleaseDb();
|
|
if (BaseFuncs::RenameBlock(sDescDwg, m_sRcdName, sNewBlkName))
|
|
GetListCtrl().SetItemText(m_nSelected, 0, sNewBlkName);
|
|
pDlg1->getPreviewCtrl().ViewBlock(sDescDwg, sNewBlkName);
|
|
}
|
|
|
|
void dist_blk_insert(const CStringArray &sOrgPathArr, CString sDescPath)
|
|
{
|
|
if (sOrgPathArr.GetSize()<1)
|
|
return;
|
|
Acad::ErrorStatus es;
|
|
acDocManagerPtr()->lockDocument(curDoc());
|
|
AcDbObjectId BlockId;
|
|
AcDbDatabase *pDb = new AcDbDatabase(Adesk::kFalse);
|
|
#if ARX < 19
|
|
es = pDb->readDwgFile(sDescPath, SH_DENYNO);
|
|
#else
|
|
es = pDb->readDwgFile(sDescPath, AcDbDatabase::kForReadAndAllShare);
|
|
#endif
|
|
acDocManagerPtr()->unlockDocument(curDoc());
|
|
if (es!=Acad::eOk)
|
|
{
|
|
AfxMessageBox(_T("无法打开,该DWG已破坏或为高版本DWG"));
|
|
delete pDb;
|
|
return;
|
|
}
|
|
acDocManagerPtr()->lockDocument(curDoc());
|
|
for (int nLen = 0; nLen<sOrgPathArr.GetSize(); nLen++)
|
|
{
|
|
Acad::ErrorStatus es;
|
|
CString sPathName = sOrgPathArr.GetAt(nLen);
|
|
CString sBlocName = sPathName;
|
|
int nFind = -1;
|
|
nFind = sBlocName.ReverseFind(_T('\\'));
|
|
if (nFind<0)
|
|
continue;
|
|
sBlocName = sBlocName.Right(sBlocName.GetLength()-nFind-1);
|
|
sBlocName.TrimRight(_T(".dwg"));
|
|
sBlocName.TrimRight(_T(".DWG"));
|
|
|
|
AcDbDatabase *pOrgDb = new AcDbDatabase(Adesk::kFalse);
|
|
#if ARX < 19
|
|
es = pOrgDb->readDwgFile(sPathName, SH_DENYNO);
|
|
#else
|
|
es = pOrgDb->readDwgFile(sPathName, AcDbDatabase::kForReadAndAllShare);
|
|
#endif
|
|
if (es!=Acad::eOk)
|
|
continue;
|
|
es = pDb->insert(BlockId, sBlocName, pOrgDb);
|
|
delete pOrgDb;
|
|
|
|
}
|
|
acDocManagerPtr()->unlockDocument(curDoc());
|
|
AcDb::AcDbDwgVersion dwgVer = pDb->originalFileVersion();
|
|
es = pDb->saveAs(sDescPath, false, dwgVer);
|
|
if (es != Acad::eOk)
|
|
acutPrintf(_T("\n保存失败。"));
|
|
delete pDb;
|
|
}
|
|
|
|
void CMyListView::getAllListItem(CStringArray &strRcdNames)
|
|
{
|
|
int nCount = GetListCtrl().GetItemCount();
|
|
for (int nLen = 0; nLen<nCount; nLen++)
|
|
{
|
|
strRcdNames.Add(GetListCtrl().GetItemText(nLen, 0));
|
|
}
|
|
}
|
|
|
|
void CMyListView::OnBlocfile()
|
|
{
|
|
// TODO: Add your command handler code here
|
|
CString str1 = _T("DWG文件(*DWG)|*.DWG|");
|
|
TCHAR sBuffer[6000];
|
|
sBuffer[0] = 0;
|
|
|
|
CFileDialog fileDia(TRUE, NULL, NULL, OFN_ALLOWMULTISELECT, str1);
|
|
|
|
fileDia.m_ofn.lpstrFile = sBuffer;
|
|
fileDia.m_ofn.nMaxFile = 6000;
|
|
|
|
|
|
CString sPathName;
|
|
CString sFileName;
|
|
CStringArray strPathArr;
|
|
if (fileDia.DoModal()!=IDOK)
|
|
return;
|
|
{
|
|
POSITION pos = fileDia.GetStartPosition();
|
|
while (pos!=0)
|
|
{
|
|
sPathName = fileDia.GetNextPathName(pos);
|
|
sFileName = fileDia.GetFileName();
|
|
strPathArr.Add(sPathName);
|
|
// if(m_ListBoxDwgAll.FindString(0,sPathName)<0)
|
|
// m_ListBoxDwgAll.AddString(sPathName);
|
|
}
|
|
}
|
|
|
|
CDockDialog *pDlg1 = (CDockDialog *)GetParent()->GetParent()->GetParent()->GetParent()->GetParent();
|
|
CString sDescDwg;
|
|
sDescDwg = pDlg1->m_sDwgPath;
|
|
pDlg1->getPreviewCtrl().ReleaseDb();
|
|
dist_blk_insert(strPathArr, sDescDwg);
|
|
GetListCtrl().DeleteAllItems();
|
|
pDlg1->AddItemToListCtrl(sDescDwg);
|
|
}
|
|
|
|
Acad::ErrorStatus DeepCloneObject(AcDbObject*& pObjDest, // 返回目标对象
|
|
AcDbObject* pObjSrc, // 被拷贝对象
|
|
AcDbObjectId idOwner) // 目标对象的属主
|
|
{
|
|
ASSERT(pObjDest == NULL && pObjSrc != NULL);
|
|
|
|
AcDbObjectId id = pObjSrc->objectId();
|
|
if (!id.isValid())
|
|
return Acad::eNotInDatabase;
|
|
|
|
AcDbDatabase* pDb = pObjSrc->database();
|
|
ASSERT(pDb != NULL);
|
|
|
|
BOOL bWrite = pObjSrc->isWriteEnabled();
|
|
if (bWrite)
|
|
pObjSrc->downgradeOpen();
|
|
|
|
if (!idOwner.isValid())
|
|
idOwner = pObjSrc->ownerId();
|
|
|
|
AcDbIdMapping idMap;
|
|
AcDbObjectIdArray arid;
|
|
arid.append(id);
|
|
Acad::ErrorStatus es = pDb->deepCloneObjects(arid, idOwner, idMap, false);
|
|
|
|
if (bWrite)
|
|
pObjSrc->upgradeOpen();
|
|
|
|
if (es != Acad::eOk)
|
|
return es;
|
|
|
|
AcDbIdPair pair;
|
|
pair.setKey(id);
|
|
idMap.compute(pair);
|
|
ASSERT(pair.value().isValid());
|
|
|
|
return acdbOpenObject(pObjDest, pair.value(), AcDb::kForWrite);
|
|
}
|
|
|
|
AcDbObjectId CreateBlockTableRecord(AcDbObjectIdArray& arid,
|
|
const AcGePoint3d& ptOrigin,
|
|
LPCTSTR pszBlk,
|
|
AcDbDatabase* pDb,
|
|
BOOL bDeleteSrc)
|
|
{
|
|
AcDbObjectId id;
|
|
|
|
if (pDb == NULL)
|
|
{
|
|
pDb = acdbHostApplicationServices()->workingDatabase();
|
|
}
|
|
ASSERT(pDb != NULL);
|
|
|
|
AcDbBlockTable* pBT = NULL;
|
|
pDb->getBlockTable(pBT, AcDb::kForWrite);
|
|
if (pBT == NULL)
|
|
return id;
|
|
|
|
BOOL bAnonymous = (pszBlk == NULL || _tcslen(pszBlk) <= 0);
|
|
if (!bAnonymous && pBT->has(pszBlk))
|
|
{
|
|
pBT->close();
|
|
return id;
|
|
}
|
|
|
|
AcDbBlockTableRecord* pBTR = new AcDbBlockTableRecord;
|
|
|
|
pBT->add(id, pBTR);
|
|
if (!id.isValid())
|
|
{
|
|
delete pBTR;
|
|
pBT->close();
|
|
return id;
|
|
}
|
|
pBT->close();
|
|
|
|
if (bAnonymous)
|
|
pBTR->setName(_T("*U"));
|
|
else
|
|
pBTR->setName(pszBlk);
|
|
pBTR->setOrigin(ptOrigin);
|
|
pBTR->close();
|
|
|
|
AcDbEntity* pEnt;
|
|
AcDbEntity* pCpyEnt;
|
|
int iLen = arid.length();
|
|
for (int i = iLen - 1; i >= 0; i--)
|
|
{
|
|
ASSERT(arid[i].isValid());
|
|
if (acdbOpenObject(pEnt, arid[i], AcDb::kForRead) != Acad::eOk)
|
|
continue;
|
|
ASSERT(pEnt != NULL && pEnt->isKindOf(AcDbEntity::desc()));
|
|
|
|
pCpyEnt = NULL;
|
|
DeepCloneObject((AcDbObject*&)pCpyEnt, pEnt, id);
|
|
pCpyEnt->close();
|
|
|
|
if (bDeleteSrc && pEnt->upgradeOpen() == Acad::eOk)
|
|
pEnt->erase();
|
|
pEnt->close();
|
|
|
|
arid.removeAt(i);
|
|
}
|
|
|
|
return id;
|
|
}
|
|
|
|
void CMyListView::OnBlockbycurdb()
|
|
{
|
|
// TODO: Add your command handler code here
|
|
CDockDialog *pDlg1 = (CDockDialog *)GetParent()->GetParent()->GetParent()->GetParent()->GetParent();
|
|
CString sDescDwg;
|
|
sDescDwg = pDlg1->m_sDwgPath;
|
|
AcDbBlockTable *pBlockTable;
|
|
ads_name ssName;
|
|
AcGePoint3d ptBlk;
|
|
AcDbObjectId RcdId;
|
|
AcDbObjectIdArray Ids;
|
|
AcDbIdMapping idmap;
|
|
Acad::ErrorStatus es;
|
|
|
|
// acedGetAcadFrame()->ShowControlBar(g_pDockPane, FALSE, FALSE);
|
|
acedSSGet(NULL, NULL, NULL, NULL, ssName);
|
|
BaseFuncs::dist_ss_ToIds(ssName, Ids);
|
|
acedSSFree(ssName);
|
|
if (Ids.logicalLength() < 1)
|
|
{
|
|
// acedGetAcadFrame()->ShowControlBar(g_pDockPane, TRUE, FALSE);
|
|
BaseFuncs::ClearAcadCmdLine();
|
|
return;
|
|
}
|
|
TCHAR kw[256];
|
|
CString sBlockName = kw;
|
|
while (1)
|
|
{
|
|
if (acedGetString(0, _T("\n图块名称:"), kw) != RTNORM)
|
|
{
|
|
// acedGetAcadFrame()->ShowControlBar(g_pDockPane, TRUE, FALSE);
|
|
BaseFuncs::ClearAcadCmdLine();
|
|
return;
|
|
}
|
|
sBlockName = kw;
|
|
sBlockName.TrimLeft();
|
|
sBlockName.TrimRight();
|
|
if (sBlockName == _T(""))
|
|
{
|
|
acutPrintf(_T("\n块名不能为空"));
|
|
continue;
|
|
}
|
|
break;
|
|
}
|
|
AcGePoint3d ptMax, ptMin;
|
|
BaseFuncs::dist_ent_getminmaxpt(Ids, ptMin, ptMax);
|
|
ptBlk = ptMin + (ptMax - ptMin) / 2.0;
|
|
if (acedGetPoint(asDblArray(ptBlk), _T("\n指定插入点:"), asDblArray(ptBlk)) == RTCAN)
|
|
{
|
|
// acedGetAcadFrame()->ShowControlBar(g_pDockPane, TRUE, FALSE);
|
|
BaseFuncs::ClearAcadCmdLine();
|
|
return;
|
|
}
|
|
acDocManagerPtr()->lockDocument(curDoc());
|
|
|
|
CString strFormat;
|
|
AcDbDatabase *pDb = new AcDbDatabase(Adesk::kTrue, Adesk::kTrue);
|
|
#if ARX < 19
|
|
es = pDb->readDwgFile(sDescDwg, SH_DENYNO);
|
|
#else
|
|
es = pDb->readDwgFile(sDescDwg, AcDbDatabase::kForReadAndAllShare);
|
|
#endif
|
|
AcDbBlockTableRecord *pRcd = new AcDbBlockTableRecord;
|
|
pRcd->setOrigin(ptBlk);
|
|
pRcd->setName(sBlockName);
|
|
|
|
es = pDb->getBlockTable(pBlockTable, AcDb::kForWrite);
|
|
|
|
if (!pBlockTable)
|
|
{
|
|
DELETE_PTR(pDb);
|
|
DELETE_PTR(pRcd);
|
|
return;
|
|
}
|
|
|
|
es = pBlockTable->add(RcdId, pRcd);
|
|
pBlockTable->close();
|
|
pRcd->close();
|
|
es = acdbHostApplicationServices()->workingDatabase()->wblockCloneObjects(Ids, RcdId, idmap, AcDb::kDrcReplace);
|
|
|
|
pDlg1->getPreviewCtrl().ReleaseDb();
|
|
|
|
AcDb::AcDbDwgVersion dwgVer = pDb->originalFileVersion();
|
|
es = pDb->saveAs(sDescDwg, false, dwgVer);
|
|
|
|
if (es!=Acad::eOk) acutPrintf(_T("\n保存失败"));
|
|
|
|
delete pDb;
|
|
acDocManagerPtr()->unlockDocument(curDoc());
|
|
GetListCtrl().DeleteAllItems();
|
|
pDlg1->AddItemToListCtrl(sDescDwg);
|
|
// acedGetAcadFrame()->ShowControlBar(g_pDockPane, TRUE, FALSE);
|
|
BaseFuncs::ClearAcadCmdLine();
|
|
pDlg1->getPreviewCtrl().ViewBlock(sDescDwg, sBlockName);
|
|
}
|
|
|
|
void CMyListView::OnUpdatetb()
|
|
{
|
|
// TODO: Add your command handler code here
|
|
CDockDialog *pDlg1 = (CDockDialog *)GetParent()->GetParent()->GetParent()->GetParent()->GetParent();
|
|
|
|
g_sDwgPathName = pDlg1->m_sDwgPath;
|
|
|
|
pDlg1->getPreviewCtrl().ReleaseDb();
|
|
|
|
CString sFormat;
|
|
sFormat.Format(_T("save %s\r\n"), g_sDwgPathName);
|
|
// pDlg1->getPreviewCtrl().erasePreview();//modify by hrp 2010 4-10
|
|
acedGetAcadFrame()->ShowControlBar(g_pDockPane, FALSE, FALSE);
|
|
if (acedGetAcadDwgView()!=NULL)
|
|
acedGetAcadDwgView()->SetFocus();
|
|
BaseFuncs::CAD_SendStringToExecute(_T("tk_open"), TRUE);
|
|
|
|
// GetListCtrl().DeleteAllItems();
|
|
// pDlg1->AddItemToListCtrl(sDescDwg);
|
|
// CAD_SendStringToExecute("blockIcon *\r\n",TRUE);
|
|
// acedCommand(RTSTR,"blockIcon",RTSTR,"*",RTSTR,"",0);
|
|
//acutPrintf("\ndkdkdkdk");
|
|
}
|
|
|
|
void CMyListView::OnRButtonDown(UINT nFlags, CPoint point)
|
|
{
|
|
// TODO: Add your message handler code here and/or call default
|
|
UINT uFlags;
|
|
if (acedGetAcadDwgView()!=NULL)
|
|
;
|
|
// acedGetAcadDwgView()->SetFocus(); //很奇怪一定要先让CAD视图获得焦点
|
|
else
|
|
return;
|
|
CString sRcdName;
|
|
CDockDialog *pDlg1 = (CDockDialog *)GetParent()->GetParent()->GetParent()->GetParent()->GetParent();
|
|
int nSelected = GetListCtrl().HitTest(point, &uFlags);
|
|
if (nSelected<0)
|
|
m_nMenuType = 0;
|
|
m_nSelected = nSelected;
|
|
|
|
// GetListCtrl().SetItemState(m_nSelected, LVNI_FOCUSED | LVNI_SELECTED, LVNI_FOCUSED | LVNI_SELECTED);
|
|
sRcdName = GetListCtrl().GetItemText(nSelected, 0);//m_sRcdName=
|
|
if (nSelected>=0)
|
|
{
|
|
|
|
m_nMenuType = 1;
|
|
GetListCtrl().SetSelectionMark(nSelected);
|
|
GetListCtrl().SetCheck(nSelected);
|
|
|
|
if (sRcdName!=m_sRcdName)
|
|
{
|
|
m_sRcdName = sRcdName;
|
|
BeginWaitCursor();
|
|
pDlg1->getPreviewCtrl().ViewBlock(pDlg1->m_sDwgPath, sRcdName);
|
|
EndWaitCursor();
|
|
}
|
|
CString sContent = pDlg1->getPreviewCtrl().m_sContent;
|
|
pDlg1->getExPlainBar().m_staticCtrl.SetWindowText(sContent);
|
|
CListView::OnRButtonDown(nFlags, point);
|
|
|
|
}
|
|
ClientToScreen(&point);
|
|
CString sParentText = pDlg1->getTreeCtrl().m_sCurParentText;
|
|
if (sParentText==_T("填充库")&&m_nMenuType==1)
|
|
return;
|
|
CMenu menu;
|
|
if (m_nMenuType==0)
|
|
{
|
|
CMenu *pSub;
|
|
menu.LoadMenu(IDR_MENU1);
|
|
pSub = menu.GetSubMenu(0);
|
|
if (GetListCtrl().GetSelectedCount()<1)
|
|
{
|
|
pSub->RemoveMenu(ID_BLOCKCOMMAND, MF_REMOVE|MF_BYCOMMAND);
|
|
}
|
|
}
|
|
else
|
|
menu.LoadMenu(IDR_MENU2);
|
|
|
|
|
|
|
|
m_nMenuType = 0;
|
|
menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON, point.x, point.y, this);
|
|
|
|
|
|
|
|
// if(nSelected>=0)
|
|
// CListView::OnRButtonDown(nFlags, point);
|
|
}
|
|
|
|
void CMyListView::OnClick(NMHDR *pNMHDR, LRESULT *pResult)
|
|
{
|
|
if (acDocManagerPtr()->documentCount()<1)
|
|
{
|
|
*pResult = 0;
|
|
return;
|
|
}
|
|
// TODO: Add your control notification handler code here
|
|
CString sCurParentText;
|
|
CString sCurSltText;
|
|
CString sRcdName;
|
|
AcDbObjectId BlockId;
|
|
AcDbBlockTableRecord *pRcd = NULL;
|
|
CDockDialog *pDlg1 = (CDockDialog *)GetParent()->GetParent()->GetParent()->GetParent()->GetParent();
|
|
sCurParentText = pDlg1->getTreeCtrl().m_sCurParentText;
|
|
sCurSltText = pDlg1->getTreeCtrl().m_sCurSltText;
|
|
// pDlg1->getPreviewCtrl().setBkGroundColor();
|
|
NM_LISTVIEW *pNMListView = (NM_LISTVIEW *)pNMHDR;
|
|
// TODO: Add your control notification handler code here
|
|
int nSelected = pNMListView->iItem;
|
|
|
|
// int nSelected = GetListCtrl().HitTest(point, &uFlags);
|
|
|
|
if (nSelected<0)
|
|
{
|
|
m_nMenuType = 0;
|
|
// CListView::OnLButtonDown(nFlags, point);
|
|
return;
|
|
}
|
|
m_nSelected = nSelected;
|
|
|
|
sRcdName = GetListCtrl().GetItemText(nSelected, 0);
|
|
|
|
if (nSelected>=0)
|
|
{
|
|
if (_tcscmp(sCurParentText, _T("填充库"))==0&&wcscmp(sCurSltText, _T("真彩填充"))==0)
|
|
{
|
|
// CListView::OnLButtonDown(nFlags, point);
|
|
return;
|
|
}
|
|
m_dBlockScale = 1;
|
|
// GetBlockScale(pDlg1->m_sDwgPath,sRcdName,m_dBlockScale);
|
|
m_nMenuType = 1;
|
|
if (sRcdName!=m_sRcdName)
|
|
{
|
|
BeginWaitCursor();
|
|
pDlg1->getPreviewCtrl().ViewBlock(pDlg1->m_sDwgPath, sRcdName);
|
|
EndWaitCursor();
|
|
m_sRcdName = sRcdName;
|
|
}
|
|
CString sContent = pDlg1->getPreviewCtrl().m_sContent;
|
|
pDlg1->getExPlainBar().m_staticCtrl.SetWindowText(sContent);
|
|
|
|
}
|
|
// *pResult = 0;
|
|
}
|
|
|
|
#define IsCTRLpressed() ( (GetKeyState(VK_CONTROL) & (1 << (sizeof(SHORT)*8-1))) != 0 )
|
|
|
|
BOOL CMyListView::PreTranslateMessage(MSG *pMsg)
|
|
{
|
|
if (pMsg->message==WM_KEYDOWN)
|
|
{
|
|
UINT nChar = (TCHAR)pMsg->wParam&0xff;
|
|
if (IsCTRLpressed()&&nChar == 'A')
|
|
{
|
|
OnSelectAll();
|
|
return TRUE;
|
|
}
|
|
}
|
|
return CListView::PreTranslateMessage(pMsg);
|
|
}
|
|
|
|
// 更新下拉菜单
|
|
void CMyListView::OnInitMenuPopup(CMenu *pPopupMenu, UINT nIndex, BOOL bSysMenu)
|
|
{
|
|
|
|
if (!bSysMenu)
|
|
{
|
|
ASSERT(pPopupMenu != NULL);
|
|
|
|
// check the enabled state of various menu items
|
|
CCmdUI state;
|
|
state.m_pMenu = pPopupMenu;
|
|
ASSERT(state.m_pOther == NULL);
|
|
|
|
state.m_nIndexMax = pPopupMenu->GetMenuItemCount();
|
|
for (state.m_nIndex = 0; state.m_nIndex < state.m_nIndexMax;
|
|
state.m_nIndex++)
|
|
{
|
|
state.m_nID = pPopupMenu->GetMenuItemID(state.m_nIndex);
|
|
if (state.m_nID == 0)
|
|
continue; // menu separator or invalid cmd - ignore it
|
|
|
|
ASSERT(state.m_pOther == NULL);
|
|
ASSERT(state.m_pMenu != NULL);
|
|
if (state.m_nID == (UINT)-1)
|
|
{
|
|
// possibly a popup menu, route to first item of that popup
|
|
state.m_pSubMenu = pPopupMenu->GetSubMenu(state.m_nIndex);
|
|
if (state.m_pSubMenu == NULL ||
|
|
(state.m_nID = state.m_pSubMenu->GetMenuItemID(0)) == 0 ||
|
|
state.m_nID == (UINT)-1)
|
|
{
|
|
continue; // first item of popup can't be routed to
|
|
}
|
|
state.DoUpdate(this, FALSE); // popups are never auto disabled
|
|
}
|
|
else
|
|
{
|
|
// normal menu item
|
|
// Auto enable/disable if command is _not_ a system command
|
|
state.m_pSubMenu = NULL;
|
|
state.DoUpdate(this, state.m_nID < 0xF000);
|
|
}
|
|
}
|
|
}
|
|
}
|