2264 lines
52 KiB
C++
2264 lines
52 KiB
C++
// TuanManage.cpp : implementation file
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
|
|
#include "TuanManage.h"
|
|
#include "ads.h"
|
|
#include "ModifyPatDlg.h"
|
|
#include "IdOkDlg.h"
|
|
#include "IdOk2.h"
|
|
#include "resource.h"
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CPatternManage dialog
|
|
CString g_sName;
|
|
int g_nRow;
|
|
int g_nCol;
|
|
|
|
int TAW()
|
|
{
|
|
CTemporaryResourceOverride vTmp;
|
|
CPatternManage dlg(acedGetAcadFrame());
|
|
dlg.DoModal();
|
|
return RTNORM;
|
|
}
|
|
|
|
CPatternManage::CPatternManage(CWnd* pParent /*=NULL*/)
|
|
: CAcUiDialog(CPatternManage::IDD, pParent)
|
|
{
|
|
//{{AFX_DATA_INIT(CPatternManage)
|
|
m_sStateTip = _T("");
|
|
m_sStateTip2 = _T("");
|
|
//}}AFX_DATA_INIT
|
|
m_bSave = FALSE;
|
|
m_bInitMode = FALSE;
|
|
m_bResize = FALSE;
|
|
}
|
|
CPatternManage::CPatternManage(CString str, CWnd* pParent /* = NULL */)
|
|
: CAcUiDialog(CPatternManage::IDD, pParent)
|
|
{
|
|
m_sTempName = str;
|
|
m_bSave = FALSE;
|
|
m_bInitMode = TRUE;
|
|
m_bResize = FALSE;
|
|
}
|
|
|
|
void CPatternManage::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CAcUiDialog::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(CPatternManage)
|
|
DDX_Control(pDX, IDC_STATIC_TIP2, m_cTip2);
|
|
DDX_Control(pDX, IDC_STATIC_TIP, m_cTip);
|
|
DDX_Control(pDX, IDC_SCROLLBAR, m_cScrollBar);
|
|
DDX_Control(pDX, IDC_LIST_PATNAME, m_cPatName);
|
|
DDX_Text(pDX, IDC_STATIC_TIP, m_sStateTip);
|
|
DDX_Text(pDX, IDC_STATIC_TIP2, m_sStateTip2);
|
|
DDX_Control(pDX, IDC_TUAN_STATIC, m_cSlidePicture);
|
|
//}}AFX_DATA_MAP
|
|
}
|
|
|
|
BEGIN_MESSAGE_MAP(CPatternManage, CAcUiDialog)
|
|
//{{AFX_MSG_MAP(CPatternManage)
|
|
ON_WM_VSCROLL()
|
|
ON_COMMAND(IDR_PAT_NEW, OnNewPat1)
|
|
ON_COMMAND(IDR_PAT_NEW2,OnNewPat2)
|
|
ON_COMMAND(IDR_PAT_DEL,OnDelPat)
|
|
ON_COMMAND(IDR_PAT_REDO,OnReBuildPat)
|
|
ON_COMMAND(IDR_PAT_LAYOUT, OnBlkLayout)
|
|
ON_COMMAND(IDR_PAT_MODIFY,OnModifyPat)
|
|
ON_COMMAND(IDR_OK,OnOkExitSave)
|
|
ON_NOTIFY(TBN_DROPDOWN, IDR_TOOLBAR_PAT, OnToolbarDropDown)
|
|
ON_NOTIFY(TBN_DROPDOWN, IDR_TOOLBAR_PAT2, OnToolbarDropDown)
|
|
ON_LBN_SELCHANGE(IDC_LIST_PATNAME, OnSelchangeListPatname)
|
|
ON_LBN_DBLCLK(IDC_LIST_PATNAME, OnDblclkListPatname)
|
|
ON_WM_SIZE()
|
|
ON_WM_CREATE()
|
|
ON_WM_MOUSEWHEEL()
|
|
//}}AFX_MSG_MAP
|
|
ON_COMMAND_RANGE(ID_LAYOUT1X1, ID_LAYOUT5X4, OnLayout)
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CPatternManage message handlers
|
|
void CPatternManage::OnToolbarDropDown(NMHDR * pnmtb0, LRESULT *plr)
|
|
{
|
|
NMTOOLBAR* pnmtb= (NMTOOLBAR *)pnmtb0;
|
|
CRect rc;
|
|
m_PatToolBar.SendMessage(TB_GETRECT, pnmtb->iItem, (LPARAM)&rc);
|
|
m_PatToolBar.ClientToScreen(&rc);
|
|
switch (pnmtb->iItem)
|
|
{
|
|
case IDR_PAT_LAYOUT:
|
|
OnBlkLayout();
|
|
break;
|
|
default:
|
|
return;
|
|
}
|
|
}
|
|
void CPatternManage::ExitAndSave(CString str)
|
|
{
|
|
g_sName = str;
|
|
g_nRow = m_cSlidePicture.m_nRow;
|
|
g_nCol = m_cSlidePicture.m_nCol;
|
|
SaveState();
|
|
m_bSave = TRUE;
|
|
OnOK();
|
|
}
|
|
void CPatternManage::ReadFile()
|
|
{
|
|
CString sTemp;
|
|
m_arrName.Clear();
|
|
m_cPatName.ResetContent();
|
|
for(long i=0;i<pats.Length();i++)
|
|
{
|
|
if(pats[i].IsPat())
|
|
{
|
|
sTemp = pats[i].Name();
|
|
|
|
//modified by whl on 070411
|
|
if (sTemp.Find(_T("Tangent"))>=0)
|
|
{
|
|
XString sName;
|
|
CT_strnth(sTemp,1,sName);
|
|
CString str((const TCHAR*)sName);
|
|
str=str.Right(str.GetLength()-1);
|
|
if(str.GetLength()>0)
|
|
{
|
|
m_cPatName.AddString(str);
|
|
m_arrName.AddTail(str);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
BOOL CPatternManage::IsCurPage(CString str)
|
|
{
|
|
int i = 0;
|
|
for (i = 0;i < m_cSlidePicture.PageSize();i++)
|
|
{
|
|
CString s = m_ctrlPreviews[i]->m_sName;
|
|
if (_tcsicmp(LPCTSTR(str),m_ctrlPreviews[i]->m_sName) == 0)
|
|
{
|
|
return TRUE;
|
|
}
|
|
}
|
|
if (i >= m_cSlidePicture.PageSize())
|
|
{
|
|
return FALSE;
|
|
}
|
|
return FALSE;
|
|
}
|
|
void CPatternManage::CreateDataBase()
|
|
{
|
|
AcDbBlockTable *pBlockTab = NULL;
|
|
if (dbPreview.getSymbolTable(pBlockTab, AcDb::kForWrite) != Acad::eOk)
|
|
return;
|
|
AcDbBlockTableRecord *pMspace = new AcDbBlockTableRecord;
|
|
if(pMspace!= NULL)
|
|
{
|
|
pMspace->setName(_T("@%&$#"));
|
|
pBlockTab->add(pMspace);
|
|
pMspace->close();
|
|
pBlockTab->close();
|
|
}
|
|
}
|
|
void CPatternManage::ReBuildDataBase(int nFlag,const TCHAR *p)
|
|
{
|
|
AcDbBlockTable *pBlockTab = NULL;
|
|
if(dbPreview.getSymbolTable(pBlockTab, AcDb::kForWrite) != Acad::eOk)
|
|
return;
|
|
AcDbBlockTableRecord *pMspace = NULL;
|
|
if (nFlag == 0)//新建
|
|
{
|
|
pMspace = new AcDbBlockTableRecord;
|
|
pMspace->setName(p);
|
|
pBlockTab->add(pMspace);
|
|
XPoly2D polyRect(1);
|
|
polyRect.AppendNode(XPoint(0,0));
|
|
polyRect.AppendNode(XPoint(0,1));
|
|
polyRect.AppendNode(XPoint(1,1));
|
|
polyRect.AppendNode(XPoint(1,0));
|
|
|
|
AcDbHatch *pHatch = NewHatchFromPoly2D(polyRect,p,0.1);
|
|
if(pHatch != NULL)
|
|
{
|
|
if(pMspace->appendAcDbEntity(pHatch) == Acad::eOk)
|
|
pHatch->close();
|
|
else
|
|
{
|
|
delete pHatch;
|
|
pHatch = NULL;
|
|
}
|
|
}
|
|
}
|
|
else if (nFlag == 1)//重建
|
|
{
|
|
if (pBlockTab->has(p))
|
|
{
|
|
if(pBlockTab->getAt(p,pMspace,AcDb::kForWrite) != Acad::eOk)
|
|
{
|
|
pBlockTab->close();
|
|
return;
|
|
}
|
|
pMspace->erase();
|
|
}
|
|
pMspace = new AcDbBlockTableRecord;
|
|
pMspace->setName(p);
|
|
pBlockTab->add(pMspace);
|
|
XPoly2D polyRect(1);
|
|
polyRect.AppendNode(XPoint(0,0));
|
|
polyRect.AppendNode(XPoint(0,1));
|
|
polyRect.AppendNode(XPoint(1,1));
|
|
polyRect.AppendNode(XPoint(1,0));
|
|
AcDbHatch *pHatch = NewHatchFromPoly2D(polyRect,p,0.1);
|
|
if(pHatch != NULL)
|
|
{
|
|
m_sCurSelect = p;
|
|
pHatch->setColorIndex(1);
|
|
if(pMspace->appendAcDbEntity(pHatch) == Acad::eOk)
|
|
pHatch->close();
|
|
else
|
|
{
|
|
delete pHatch;
|
|
pHatch = NULL;
|
|
}
|
|
}
|
|
}
|
|
else if (nFlag == 2)//删除
|
|
{
|
|
if(pBlockTab->getAt(p,pMspace,AcDb::kForWrite) != Acad::eOk)
|
|
{
|
|
pBlockTab->close();
|
|
return;
|
|
}
|
|
pMspace->erase();
|
|
pMspace->close();
|
|
pBlockTab->close();
|
|
return;
|
|
}
|
|
pMspace->close();
|
|
pBlockTab->close();
|
|
return;
|
|
}
|
|
|
|
void CPatternManage::SaveState()
|
|
{
|
|
CString sRoot, sKey;
|
|
TCHAR cTemp[256];
|
|
sKey = _T("PATMAN");
|
|
_tcscpy(cTemp, GetRegLocation());
|
|
sRoot = cTemp;
|
|
CRegProperty regProp(sRoot, sKey);
|
|
regProp.SetTopRootKey(HKEY_CURRENT_USER);
|
|
regProp.SetValue(_T("PatName"), g_sName);
|
|
regProp.SetValue(_T("RowLegth"),g_nRow);
|
|
regProp.SetValue(_T("ColLegth"),g_nCol);
|
|
}
|
|
void CPatternManage::SetScrollBarRange()
|
|
{
|
|
int i = m_arrName.GetLength() - m_cSlidePicture.PageSize();
|
|
if ( i % m_cSlidePicture.m_nCol != 0)
|
|
{
|
|
m_cScrollBar.SetScrollRange(0,i / m_cSlidePicture.m_nCol + 1);
|
|
}
|
|
else
|
|
{
|
|
m_cScrollBar.SetScrollRange(0,i / m_cSlidePicture.m_nCol);
|
|
}
|
|
}
|
|
void CPatternManage::UpdateState()
|
|
{
|
|
m_sStateTip.Empty();
|
|
m_sStateTip2.Empty();
|
|
TCHAR cTem[256],cTemp[256];
|
|
CString str;
|
|
if(m_cPatName.GetCurSel() >= 0)
|
|
{
|
|
m_cPatName.GetText(m_cPatName.GetCurSel(),str);
|
|
_itot(m_cPatName.GetCurSel() + 1,cTemp,10);
|
|
m_sStateTip = m_sStateTip + _T("名称:") + LPCTSTR(str);
|
|
_itot(m_arrName.GetLength(),cTem,10);
|
|
m_sStateTip2 = m_sStateTip2 + _T("总数: ") + cTemp + _T('/') + cTem;
|
|
}
|
|
UpdateData(FALSE);
|
|
}
|
|
void CPatternManage::SetupPicture()
|
|
{
|
|
int i;
|
|
AcDbBlockTable *pBlockTab = NULL;
|
|
if (dbPreview.getSymbolTable(pBlockTab, AcDb::kForWrite) !=Acad::eOk)
|
|
{
|
|
return;
|
|
}
|
|
for (i = 0; i < m_cSlidePicture.PageSize();i++)
|
|
{
|
|
CString sTemp;
|
|
if (i < m_arrName.GetLength())
|
|
{
|
|
sTemp = m_arrName[i];
|
|
}
|
|
AcDbBlockTableRecord *pMspace = NULL;
|
|
if (i < m_arrName.GetLength())
|
|
{
|
|
m_ctrlPreviews[i]->m_sName = sTemp;
|
|
if (pBlockTab->has(LPCTSTR(sTemp)))
|
|
{
|
|
if(pBlockTab->getAt(LPCTSTR(sTemp),pMspace,AcDb::kForRead) != Acad::eOk)
|
|
{
|
|
pBlockTab->close();
|
|
return;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
pMspace = new AcDbBlockTableRecord;
|
|
pMspace->setName(LPCTSTR(sTemp));
|
|
pBlockTab->add(pMspace);
|
|
XPoly2D polyRect(1);
|
|
polyRect.AppendNode(XPoint(0,0));
|
|
polyRect.AppendNode(XPoint(0,1));
|
|
polyRect.AppendNode(XPoint(1,1));
|
|
polyRect.AppendNode(XPoint(1,0));
|
|
AcDbHatch *pHatch = NewHatchFromPoly2D(polyRect,LPCTSTR(sTemp),0.1);
|
|
if(pHatch != NULL)
|
|
{
|
|
if(pMspace->appendAcDbEntity(pHatch) == Acad::eOk)
|
|
pHatch->close();
|
|
else
|
|
{
|
|
delete pHatch;
|
|
pHatch = NULL;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
m_ctrlPreviews[i]->m_sName = _T("");
|
|
if(pBlockTab->getAt(_T("@%&$#"),pMspace,AcDb::kForRead) != Acad::eOk)
|
|
{
|
|
pBlockTab->close();
|
|
return;
|
|
}
|
|
}
|
|
m_ctrlPreviews[i]->clearAll();
|
|
m_ctrlPreviews[i]->init(true);
|
|
m_ctrlPreviews[i]->view()->setView(AcGePoint3d(0.5,0.5,1000),AcGePoint3d(0.5,0.5,0),
|
|
AcGeVector3d(0.0, 1.0, 0.0), 1,1);
|
|
m_ctrlPreviews[i]->view()->add(pMspace,m_ctrlPreviews[i]->model());
|
|
m_ctrlPreviews[i]->Invalidate();
|
|
pMspace->close();
|
|
}
|
|
pBlockTab->close();
|
|
SetScrollBarRange();
|
|
m_cScrollBar.SetScrollPos(0);
|
|
}
|
|
|
|
void CPatternManage::Select(CString str)
|
|
{
|
|
int nCurpos = m_cScrollBar.GetScrollPos();
|
|
CString sName;
|
|
RemoveCol();
|
|
AcDbBlockTable *pBlockTab = NULL;
|
|
if (dbPreview.getSymbolTable(pBlockTab, AcDb::kForWrite) != Acad::eOk)
|
|
return;
|
|
int m,n;
|
|
int j = m_cSlidePicture.m_nCol * nCurpos;
|
|
for (m = 0; m < m_cSlidePicture.PageSize();m++,j++)
|
|
{
|
|
CString sTemp;
|
|
if (j < m_arrName.GetLength())
|
|
{
|
|
sTemp = m_arrName[j];
|
|
}
|
|
AcDbBlockTableRecord *pMspace = NULL;
|
|
if (sTemp == str || m_sPreSelect == sTemp)
|
|
{
|
|
m_ctrlPreviews[m]->m_sName = sTemp;
|
|
AcDbEntity *pEnt = NULL;
|
|
AcDbHatch *pHatch = NULL;
|
|
if (pBlockTab->has(LPCTSTR(sTemp)))
|
|
{
|
|
if(pBlockTab->getAt(LPCTSTR(sTemp),pMspace,AcDb::kForWrite) != Acad::eOk)
|
|
{
|
|
pBlockTab->close();
|
|
return;
|
|
}
|
|
AcDbBlockTableRecordIterator *pIte = NULL;
|
|
pMspace->newIterator(pIte);
|
|
pIte->start();
|
|
pIte->getEntity(pEnt,AcDb::kForWrite);
|
|
if(pEnt != NULL)
|
|
{
|
|
if (m_sPreSelect == sTemp)
|
|
{
|
|
m_sPreSelect = sTemp;
|
|
pEnt->setColorIndex(0);
|
|
}
|
|
if (sTemp == str)
|
|
{
|
|
m_sCurSelect = sTemp;
|
|
sName = sTemp;
|
|
n = j;
|
|
pEnt->setColorIndex(1);
|
|
}
|
|
pEnt->close();
|
|
}
|
|
delete pIte;
|
|
}
|
|
else
|
|
{
|
|
pMspace = new AcDbBlockTableRecord;
|
|
pMspace->setName(LPCTSTR(sTemp));
|
|
pBlockTab->add(pMspace);
|
|
XPoly2D polyRect(1);
|
|
polyRect.AppendNode(XPoint(0,0));
|
|
polyRect.AppendNode(XPoint(0,1));
|
|
polyRect.AppendNode(XPoint(1,1));
|
|
polyRect.AppendNode(XPoint(1,0));
|
|
pHatch = NewHatchFromPoly2D(polyRect,LPCTSTR(sTemp),0.1);
|
|
if(pHatch != NULL)
|
|
{
|
|
if (m_sPreSelect == sTemp)
|
|
{
|
|
m_sPreSelect = sTemp;
|
|
pHatch->setColorIndex(0);
|
|
}
|
|
if (sTemp == str)
|
|
{
|
|
m_sCurSelect = sTemp;
|
|
sName = sTemp;
|
|
n = j;
|
|
pHatch->setColorIndex(1);
|
|
}
|
|
if(pMspace->appendAcDbEntity(pHatch) == Acad::eOk)
|
|
pHatch->close();
|
|
else
|
|
{
|
|
delete pHatch;
|
|
pHatch = NULL;
|
|
}
|
|
}
|
|
}
|
|
m_ctrlPreviews[m]->clearAll();
|
|
m_ctrlPreviews[m]->init(true);
|
|
m_ctrlPreviews[m]->view()->setView(AcGePoint3d(0.5,0.5,1000),
|
|
AcGePoint3d(0.5,0.5,0),AcGeVector3d(0.0, 1.0, 0.0), 1,1);
|
|
m_ctrlPreviews[m]->view()->add(pMspace,m_ctrlPreviews[m]->model());
|
|
m_ctrlPreviews[m]->Invalidate();
|
|
pMspace->close();
|
|
}
|
|
}
|
|
pBlockTab->close();
|
|
m_cPatName.SetCurSel(m_cPatName.FindStringExact(-1,LPCTSTR(str)));
|
|
TCHAR cTemp[256];
|
|
m_cPatName.GetText(m_cPatName.GetCurSel() + 1,cTemp);
|
|
m_sNext = cTemp;
|
|
UpdateState();
|
|
}
|
|
void CPatternManage::Select2(CString str)
|
|
{
|
|
int nCurpos = m_cScrollBar.GetScrollPos();
|
|
CString sName;
|
|
RemoveCol();
|
|
AcDbBlockTable *pBlockTab = NULL;
|
|
if (dbPreview.getSymbolTable(pBlockTab, AcDb::kForWrite) != Acad::eOk)
|
|
return;
|
|
int m,n;
|
|
int j = m_cSlidePicture.m_nCol * nCurpos;
|
|
for (m = 0; m < m_cSlidePicture.PageSize();m++,j++)
|
|
{
|
|
CString sTemp;
|
|
if (j < m_arrName.GetLength())
|
|
{
|
|
sTemp = m_arrName[j];
|
|
}
|
|
AcDbBlockTableRecord *pMspace = NULL;
|
|
if (sTemp == str || m_sPreSelect == sTemp)
|
|
{
|
|
m_ctrlPreviews[m]->m_sName = sTemp;
|
|
AcDbEntity *pEnt = NULL;
|
|
AcDbHatch *pHatch = NULL;
|
|
if (pBlockTab->has(LPCTSTR(sTemp)))
|
|
{
|
|
if(pBlockTab->getAt(LPCTSTR(sTemp),pMspace,AcDb::kForWrite) != Acad::eOk)
|
|
{
|
|
pBlockTab->close();
|
|
return;
|
|
}
|
|
AcDbBlockTableRecordIterator *pIte = NULL;
|
|
pMspace->newIterator(pIte);
|
|
pIte->start();
|
|
pIte->getEntity(pEnt,AcDb::kForWrite);
|
|
if(pEnt != NULL)
|
|
{
|
|
if (m_sPreSelect == sTemp)
|
|
{
|
|
m_sPreSelect = sTemp;
|
|
pEnt->setColorIndex(0);
|
|
}
|
|
if (sTemp == str)
|
|
{
|
|
m_sCurSelect = sTemp;
|
|
sName = sTemp;
|
|
n = j;
|
|
pEnt->setColorIndex(1);
|
|
}
|
|
pEnt->close();
|
|
}
|
|
delete pIte;
|
|
}
|
|
else
|
|
{
|
|
pMspace = new AcDbBlockTableRecord;
|
|
pMspace->setName(LPCTSTR(sTemp));
|
|
pBlockTab->add(pMspace);
|
|
XPoly2D polyRect(1);
|
|
polyRect.AppendNode(XPoint(0,0));
|
|
polyRect.AppendNode(XPoint(0,1));
|
|
polyRect.AppendNode(XPoint(1,1));
|
|
polyRect.AppendNode(XPoint(1,0));
|
|
pHatch = NewHatchFromPoly2D(polyRect,LPCTSTR(sTemp),0.1);
|
|
if(pHatch != NULL)
|
|
{
|
|
if (m_sPreSelect == sTemp)
|
|
{
|
|
m_sPreSelect = sTemp;
|
|
pHatch->setColorIndex(0);
|
|
}
|
|
if (sTemp == str)
|
|
{
|
|
m_sCurSelect = sTemp;
|
|
sName = sTemp;
|
|
n = j;
|
|
pHatch->setColorIndex(1);
|
|
}
|
|
if(pMspace->appendAcDbEntity(pHatch) == Acad::eOk)
|
|
pHatch->close();
|
|
else
|
|
{
|
|
delete pHatch;
|
|
pHatch = NULL;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (j < m_arrName.GetLength())
|
|
{
|
|
m_ctrlPreviews[m]->m_sName = sTemp;
|
|
if (pBlockTab->has(LPCTSTR(sTemp)))
|
|
{
|
|
if(pBlockTab->getAt(sTemp,pMspace,AcDb::kForRead) != Acad::eOk)
|
|
{
|
|
pBlockTab->close();
|
|
return ;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
pMspace = new AcDbBlockTableRecord;
|
|
pMspace->setName(LPCTSTR(sTemp));
|
|
pBlockTab->add(pMspace);
|
|
XPoly2D polyRect(1);
|
|
polyRect.AppendNode(XPoint(0,0));
|
|
polyRect.AppendNode(XPoint(0,1));
|
|
polyRect.AppendNode(XPoint(1,1));
|
|
polyRect.AppendNode(XPoint(1,0));
|
|
AcDbHatch *pHatch = NewHatchFromPoly2D(polyRect,LPCTSTR(sTemp),0.1);
|
|
if(pHatch != NULL)
|
|
{
|
|
if(pMspace->appendAcDbEntity(pHatch) == Acad::eOk)
|
|
pHatch->close();
|
|
else
|
|
{
|
|
delete pHatch;
|
|
pHatch = NULL;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
m_ctrlPreviews[m]->m_sName = _T("");
|
|
if(pBlockTab->getAt(_T("@%&$#"),pMspace,AcDb::kForRead) != Acad::eOk)
|
|
{
|
|
pBlockTab->close();
|
|
return ;
|
|
}
|
|
}
|
|
}
|
|
m_ctrlPreviews[m]->clearAll();
|
|
m_ctrlPreviews[m]->init(true);
|
|
m_ctrlPreviews[m]->view()->setView(AcGePoint3d(0.5,0.5,1000),
|
|
AcGePoint3d(0.5,0.5,0),AcGeVector3d(0.0, 1.0, 0.0), 1,1);
|
|
m_ctrlPreviews[m]->view()->add(pMspace,m_ctrlPreviews[m]->model());
|
|
m_ctrlPreviews[m]->Invalidate();
|
|
pMspace->close();
|
|
}
|
|
pBlockTab->close();
|
|
m_cPatName.SetCurSel(m_cPatName.FindStringExact(-1,LPCTSTR(str)));
|
|
TCHAR cTemp[256];
|
|
m_cPatName.GetText(m_cPatName.GetCurSel() + 1,cTemp);
|
|
m_sNext = cTemp;
|
|
UpdateState();
|
|
}
|
|
void CPatternManage::InitToolBar(BOOL bInitToolBar)
|
|
{
|
|
if (!m_bInitMode)
|
|
{
|
|
UINT id[]= {IDR_PAT_NEW,IDR_PAT_NEW2,IDR_PAT_REDO,IDR_PAT_DEL,0,
|
|
IDR_PAT_MODIFY,IDR_PAT_LAYOUT,0,IDR_OK};
|
|
m_PatToolBar.InitToolBar(id,9,IDR_TOOLBAR_PAT,this);
|
|
}
|
|
else
|
|
{
|
|
UINT id[]= {IDR_PAT_DEL,IDR_PAT_MODIFY,IDR_PAT_LAYOUT,0,IDR_OK};
|
|
m_PatToolBar.InitToolBar(id,5,IDR_TOOLBAR_PAT2,this);
|
|
}
|
|
m_PatToolBar.SetStyle(IDR_PAT_LAYOUT, TBSTYLE_DROPDOWN);
|
|
}
|
|
BOOL CPatternManage::OnInitDialog()
|
|
{
|
|
CAcUiDialog::OnInitDialog();
|
|
|
|
//add by whl
|
|
if(m_bInitMode)
|
|
SetWindowText(_T("图案选择"));
|
|
|
|
//add by xlc on 080828
|
|
if (!m_bInitMode)
|
|
{
|
|
m_menu.LoadMenu(IDR_MENU_PATMAN);
|
|
}
|
|
else
|
|
{
|
|
m_menu.LoadMenu(IDR_MENU_PATMAN2);
|
|
}
|
|
SetMenu(&m_menu);
|
|
|
|
InitToolBar(m_bInitMode);
|
|
CRect rectDlg;
|
|
GetClientRect(rectDlg);
|
|
m_sizeDlg.cx = rectDlg.Width();
|
|
m_sizeDlg.cy = rectDlg.Height();
|
|
long nIncY = m_sizeDlg.cy - m_sizeOldY;
|
|
long nIncX = m_sizeDlg.cx - m_sizeOldX;
|
|
m_bResize = TRUE;
|
|
ResetSize(nIncX, nIncY);
|
|
|
|
if(!FindFile(_T("acad.pat"), sFileName))
|
|
{
|
|
return FALSE;
|
|
}
|
|
CStdioFile file;
|
|
if(!file.Open(sFileName,CFile::modeRead))
|
|
return FALSE;
|
|
pats<<file;
|
|
file.Close();
|
|
if(pats.Length()<1)
|
|
return FALSE;
|
|
ReadFile();
|
|
CString sRoot, sKey;
|
|
TCHAR cTemp[256];
|
|
sKey = _T("PATMAN");
|
|
_tcscpy(cTemp, GetRegLocation());
|
|
sRoot = cTemp;
|
|
CRegProperty regProp(sRoot, sKey);
|
|
regProp.SetTopRootKey(HKEY_CURRENT_USER);
|
|
if (!m_bInitMode)
|
|
{
|
|
regProp.GetValue(_T("PatName"), g_sName);
|
|
}
|
|
else
|
|
{
|
|
g_sName = m_sTempName;
|
|
}
|
|
regProp.GetValue(_T("RowLegth"),g_nRow);
|
|
regProp.GetValue(_T("ColLegth"),g_nCol);
|
|
CreateDataBase();
|
|
m_cSlidePicture.m_Dlg = this;
|
|
|
|
//add by whl
|
|
CString sTitleText;
|
|
GetWindowText(sTitleText);
|
|
SetWindowText(sTitleText+_T("(加载数据中,请稍候...)"));
|
|
ShowWindow(SW_SHOW);
|
|
RedrawWindow();
|
|
|
|
if (!g_sName.IsEmpty() && g_nRow != 0 && g_nCol != 0)
|
|
{
|
|
m_cSlidePicture.m_nRow = g_nRow;
|
|
m_cSlidePicture.m_nCol = g_nCol;
|
|
SetScrollBarRange();
|
|
m_sCurSelect = g_sName;
|
|
InitWindows();
|
|
m_cPatName.SetCurSel(m_cPatName.FindString(0,LPCTSTR(g_sName)));
|
|
TCHAR cTemp[256];
|
|
m_cPatName.GetText(m_cPatName.GetCurSel() + 1,cTemp);
|
|
m_sNext = cTemp;
|
|
Find(LPCTSTR(g_sName));
|
|
}
|
|
else
|
|
{
|
|
if(g_nRow != 0 && g_nCol != 0)
|
|
{
|
|
m_cSlidePicture.m_nRow = g_nRow;
|
|
m_cSlidePicture.m_nCol = g_nCol;
|
|
}
|
|
InitWindows();
|
|
SetupPicture();
|
|
}
|
|
m_bXiepai = FALSE;
|
|
m_xSplitter.m_Dlg = this;
|
|
m_xSplitter.BindWithControl(this, IDC_STATIC_X);
|
|
m_xSplitter.AttachAsLeftPane(IDC_LIST_PATNAME);
|
|
m_xSplitter.AttachAsRightPane(IDC_TUAN_STATIC);
|
|
m_bInitWindowMode = FALSE;
|
|
m_xSplitter.RecalcLayout();
|
|
m_xSplitter.SetMinWidth(20, 320);
|
|
|
|
//add by whl
|
|
SetWindowText(sTitleText);
|
|
return TRUE; // return TRUE unless you set the focus to a control
|
|
// EXCEPTION: OCX Property Pages should return FALSE
|
|
}
|
|
BOOL CPatternManage::RemoveCol()
|
|
{
|
|
AcDbBlockTable *pBlockTab = NULL;
|
|
if (dbPreview.getSymbolTable(pBlockTab, AcDb::kForRead) != Acad::eOk)
|
|
{
|
|
return FALSE;
|
|
}
|
|
AcDbBlockTableRecord *pMspace = NULL;
|
|
AcDbBlockTableIterator *pBlkIte = NULL;
|
|
pBlockTab->newIterator(pBlkIte);
|
|
for (pBlkIte->start();!pBlkIte->done();pBlkIte->step())
|
|
{
|
|
pBlkIte->getRecord(pMspace,AcDb::kForRead);
|
|
TCHAR *str;
|
|
pMspace->getName(str);
|
|
if (_tcsicmp(str,LPCTSTR(m_sCurSelect)) == 0)
|
|
{
|
|
AcDbEntity *pEnt = NULL;
|
|
AcDbHatch *pHatch = NULL;
|
|
AcDbBlockTableRecordIterator *pIte = NULL;
|
|
pMspace->newIterator(pIte);
|
|
for (pIte->start();!pIte->done();pIte->step())
|
|
{
|
|
pIte->getEntity(pEnt,AcDb::kForWrite);
|
|
}
|
|
m_sPreSelect = str;
|
|
if(pEnt != NULL)
|
|
{
|
|
pEnt->setColorIndex(0);
|
|
pEnt->close();
|
|
}
|
|
pMspace->close();
|
|
break;
|
|
}
|
|
pMspace->close();
|
|
}
|
|
delete pBlkIte;
|
|
pBlockTab->close();
|
|
return TRUE;
|
|
}
|
|
BOOL CPatternManage::Find(const TCHAR* sPatName)
|
|
{
|
|
int i,j;
|
|
if (!RemoveCol())
|
|
{
|
|
return FALSE;
|
|
}
|
|
AcDbBlockTable *pBlockTab = NULL;
|
|
if (dbPreview.getSymbolTable(pBlockTab, AcDb::kForWrite)!=Acad::eOk)
|
|
{
|
|
return FALSE;
|
|
}
|
|
for (i = 0; i < m_arrName.GetLength();i++)
|
|
{
|
|
AcDbBlockTableRecord *pMspace = NULL;
|
|
if ( _tcsicmp( sPatName,LPCTSTR(m_arrName[i]) ) == 0)
|
|
{
|
|
int nMin,nMax,nCurpos;
|
|
m_cScrollBar.GetScrollRange(&nMin,&nMax);
|
|
if (i + 1 - m_cSlidePicture.PageSize() >= 0)
|
|
{
|
|
if ((i + 1 - m_cSlidePicture.PageSize()) % m_cSlidePicture.m_nCol == 0)
|
|
{
|
|
nCurpos = (i + 1 - m_cSlidePicture.PageSize()) / m_cSlidePicture.m_nCol;
|
|
}
|
|
else
|
|
{
|
|
nCurpos = (i + 1 - m_cSlidePicture.PageSize()) / m_cSlidePicture.m_nCol + 1;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
nCurpos = 0;
|
|
}
|
|
m_cScrollBar.SetScrollPos(nCurpos);
|
|
UpdateState();
|
|
int m = 0;
|
|
j = m_cSlidePicture.m_nCol * nCurpos;
|
|
for (m = 0; m < m_cSlidePicture.PageSize();m++,j++)
|
|
{
|
|
CString sTemp;
|
|
if (j < m_arrName.GetLength())
|
|
{
|
|
sTemp = m_arrName[j];
|
|
}
|
|
if (sTemp == m_arrName[i] || sTemp == m_sPreSelect)
|
|
{
|
|
m_ctrlPreviews[m]->m_sName = sTemp;
|
|
AcDbHatch *pHatch = NULL;
|
|
AcDbEntity *pEnt = NULL;
|
|
if (pBlockTab->has(LPCTSTR(sTemp)))
|
|
{
|
|
if(pBlockTab->getAt(LPCTSTR(sTemp),pMspace,AcDb::kForWrite) != Acad::eOk)
|
|
{
|
|
pBlockTab->close();
|
|
return FALSE;
|
|
}
|
|
AcDbBlockTableRecordIterator *pIte = NULL;
|
|
pMspace->newIterator(pIte);
|
|
for (pIte->start();!pIte->done();pIte->step())
|
|
{
|
|
pIte->getEntity(pEnt,AcDb::kForWrite);
|
|
}
|
|
if(pEnt != NULL)
|
|
{
|
|
if (sTemp == m_sPreSelect)
|
|
{
|
|
pEnt->setColorIndex(0);
|
|
}
|
|
if (sTemp == m_arrName[i])
|
|
{
|
|
m_sCurSelect = sTemp;
|
|
pEnt->setColorIndex(1);
|
|
}
|
|
pEnt->close();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
pMspace = new AcDbBlockTableRecord;
|
|
pMspace->setName(LPCTSTR(sTemp));
|
|
pBlockTab->add(pMspace);
|
|
XPoly2D polyRect(1);
|
|
polyRect.AppendNode(XPoint(0,0));
|
|
polyRect.AppendNode(XPoint(0,1));
|
|
polyRect.AppendNode(XPoint(1,1));
|
|
polyRect.AppendNode(XPoint(1,0));
|
|
pHatch = NewHatchFromPoly2D(polyRect,LPCTSTR(sTemp),0.1);
|
|
if(pHatch != NULL)
|
|
{
|
|
if (sTemp == m_sPreSelect)
|
|
{
|
|
pHatch->setColorIndex(0);
|
|
}
|
|
if (sTemp == m_arrName[i])
|
|
{
|
|
m_sCurSelect = sTemp;
|
|
pHatch->setColorIndex(1);
|
|
}
|
|
if(pMspace->appendAcDbEntity(pHatch) == Acad::eOk)
|
|
pHatch->close();
|
|
else
|
|
{
|
|
delete pHatch;
|
|
pHatch = NULL;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (j < m_arrName.GetLength())
|
|
{
|
|
m_ctrlPreviews[m]->m_sName = sTemp;
|
|
if (pBlockTab->has(LPCTSTR(sTemp)))
|
|
{
|
|
if(pBlockTab->getAt(sTemp,pMspace,AcDb::kForRead) != Acad::eOk)
|
|
{
|
|
pBlockTab->close();
|
|
return FALSE;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
pMspace = new AcDbBlockTableRecord;
|
|
pMspace->setName(LPCTSTR(sTemp));
|
|
pBlockTab->add(pMspace);
|
|
XPoly2D polyRect(1);
|
|
polyRect.AppendNode(XPoint(0,0));
|
|
polyRect.AppendNode(XPoint(0,1));
|
|
polyRect.AppendNode(XPoint(1,1));
|
|
polyRect.AppendNode(XPoint(1,0));
|
|
AcDbHatch *pHatch = NewHatchFromPoly2D(polyRect,LPCTSTR(sTemp),0.1);
|
|
if(pHatch != NULL)
|
|
{
|
|
if(pMspace->appendAcDbEntity(pHatch) == Acad::eOk)
|
|
pHatch->close();
|
|
else
|
|
{
|
|
delete pHatch;
|
|
pHatch = NULL;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
m_ctrlPreviews[m]->m_sName = _T("");
|
|
if(pBlockTab->getAt(_T("@%&$#"),pMspace,AcDb::kForRead) != Acad::eOk)
|
|
{
|
|
pBlockTab->close();
|
|
return FALSE;
|
|
}
|
|
}
|
|
}
|
|
m_ctrlPreviews[m]->clearAll();
|
|
m_ctrlPreviews[m]->init(true);
|
|
m_ctrlPreviews[m]->view()->setView(AcGePoint3d(0.5,0.5,1000),AcGePoint3d(0.5,0.5,0),
|
|
AcGeVector3d(0.0, 1.0, 0.0), 1,1);
|
|
m_ctrlPreviews[m]->view()->add(pMspace,m_ctrlPreviews[m]->model());
|
|
m_ctrlPreviews[m]->Invalidate();
|
|
pMspace->close();
|
|
}
|
|
break;
|
|
}
|
|
if (i == m_arrName.GetLength() - 1)
|
|
{
|
|
SetupPicture();
|
|
}
|
|
}
|
|
pBlockTab->close();
|
|
Update();
|
|
UpdateState();
|
|
return TRUE;
|
|
}
|
|
BOOL CPatternManage::MakeNewPat(const TCHAR *sPatName,int type)
|
|
//新建直排图案,sPatName代表图案名,typ=1代表直排,type=0代表斜排
|
|
{
|
|
if(_tcscmp(sPatName,_T(""))==0)
|
|
return FALSE;
|
|
|
|
PickSet ss(SS_FREE);
|
|
if(SelectEntities(_T("\n请选择要造图案的图元 <退出>:"),ss,RBList(RTDXF0,_T("LINE,ARC,CIRCLE,POINT"),NULL))!=RTNORM)
|
|
return FALSE;
|
|
XPoint pt0;
|
|
if(acedGetPoint(NULL,_T("\n图案基点 <退出>:"),pt0)!=RTNORM)
|
|
return FALSE;
|
|
|
|
double x0=200;
|
|
if(GetDist(_T("\n横向重复间距"),x0)==RTCAN)
|
|
return FALSE;
|
|
if(x0<0.001)
|
|
return FALSE;
|
|
|
|
int code=type==0?RTNIL:RTT;
|
|
RBList rbCmd=ads_buildlist(RTSTR, _T("c:MakePat"), RTSTR, sPatName,RTPICKS,(TLong_ptr *)ss,RT3DPOINT,&pt0,RTREAL,x0,code,NULL);
|
|
resbuf *rbRes=NULL;
|
|
if(ads_invoke(rbCmd, &rbRes)==RTNORM)
|
|
{
|
|
if(rbRes!=NULL)
|
|
ads_relrb(rbRes);
|
|
|
|
extern BOOL TARCH_EXP ChPatternScale(const TCHAR *szFile, const TCHAR *szPattern, double nScale);
|
|
XString sFile1, sFile2;
|
|
if(FindFile(_T("acad.pat"), sFile1))
|
|
{
|
|
CString sTemp(sPatName);
|
|
ChPatternScale(sFile1, sTemp.Left(sTemp.GetLength()-_tcslen(_T(", Tangent"))), x0/DocGetPScale());
|
|
XPathParser paser(sFile1);
|
|
sFile2 << paser.m_sDir << paser.m_sDir << _T("acadiso.pat");
|
|
CopyFile(sFile1, sFile2, FALSE);
|
|
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
void CPatternManage::OnNewPat1()
|
|
{
|
|
BeginEditorCommand();
|
|
TCHAR sName[256];
|
|
if(acedGetString(NULL,_T("\n请输入新的图案名字(直排)<退出>:"),sName)==RTNORM)
|
|
{
|
|
CString sTemp;
|
|
sTemp = sTemp + sName + _T(", Tangent");
|
|
if(MakeNewPat(LPCTSTR(sTemp),1))
|
|
{
|
|
if(!FindFile(_T("acad.pat"), sFileName))
|
|
{
|
|
return ;
|
|
}
|
|
CStdioFile file;
|
|
if(!file.Open(sFileName,CFile::modeRead))
|
|
return ;
|
|
int n = pats.Length();
|
|
pats.Reset();
|
|
pats<<file;
|
|
file.Close();
|
|
if(pats.Length()<1)
|
|
return ;
|
|
ReadFile();
|
|
|
|
m_cPatName.SetCurSel(m_cPatName.FindStringExact(-1,LPCTSTR(sName)));
|
|
SetScrollBarRange();
|
|
TCHAR cTemp[256]=_T("");
|
|
if(m_cPatName.GetCurSel()+1<m_cPatName.GetCount())
|
|
m_cPatName.GetText(m_cPatName.GetCurSel() + 1,cTemp);
|
|
m_sNext = cTemp;
|
|
ReBuildDataBase(0,sName);
|
|
Find(sName);
|
|
UpdateState();
|
|
CompleteEditorCommand();
|
|
}
|
|
else
|
|
CompleteEditorCommand();
|
|
}
|
|
else
|
|
CompleteEditorCommand();
|
|
}
|
|
void CPatternManage::OnNewPat2()
|
|
{
|
|
BeginEditorCommand();
|
|
TCHAR sName[256];
|
|
if(acedGetString(NULL,_T("\n请输入新的图案名字(斜排)<退出>:"),sName)==RTNORM)
|
|
{
|
|
CString sTemp;
|
|
sTemp = sTemp + sName + _T(", Tangent");
|
|
if(MakeNewPat(LPCTSTR(sTemp),0))
|
|
{
|
|
if(!FindFile(_T("acad.pat"), sFileName))
|
|
{
|
|
return ;
|
|
}
|
|
CStdioFile file;
|
|
if(!file.Open(sFileName,CFile::modeRead))
|
|
return ;
|
|
int n = pats.Length();
|
|
pats.Reset();
|
|
pats<<file;
|
|
file.Close();
|
|
if(pats.Length()<1)
|
|
return ;
|
|
ReadFile();
|
|
|
|
m_cPatName.SetCurSel(m_cPatName.FindStringExact(-1,LPCTSTR(sName)));
|
|
SetScrollBarRange();
|
|
TCHAR cTemp[256]=_T("");
|
|
if(m_cPatName.GetCurSel()+1<m_cPatName.GetCount())
|
|
m_cPatName.GetText(m_cPatName.GetCurSel() + 1,cTemp);
|
|
m_sNext = cTemp;
|
|
ReBuildDataBase(0,sName);
|
|
Find(sName);
|
|
UpdateState();
|
|
CompleteEditorCommand();
|
|
}
|
|
else
|
|
CompleteEditorCommand();
|
|
}
|
|
else
|
|
CompleteEditorCommand();
|
|
}
|
|
|
|
void CPatternManage::OnDelPat()
|
|
{
|
|
CString sTemp;
|
|
if(m_cPatName.GetCurSel() >= 0)
|
|
m_cPatName.GetText(m_cPatName.GetCurSel(),sTemp);
|
|
if ( !sTemp.IsEmpty())
|
|
{
|
|
CString str = _T("确实要删除(") + sTemp + _T(")图案");
|
|
CIdOkDlg dlg;
|
|
dlg.m_sTipText = str;
|
|
if (m_ctrlPreviews.Length() ==1)
|
|
{
|
|
int n = m_arrName.Find(m_ctrlPreviews[0]->m_sName);
|
|
if (n != -1)
|
|
{
|
|
if(n==0)
|
|
m_sForOnlyOneDel = m_arrName.GetAt(1);
|
|
else
|
|
m_sForOnlyOneDel = m_arrName.GetAt(n-1);
|
|
}
|
|
}
|
|
if (dlg.DoModal() == IDOK)
|
|
{
|
|
ErasePat(sTemp);
|
|
if(!FindFile(_T("acad.pat"), sFileName))
|
|
{
|
|
return ;
|
|
}
|
|
CStdioFile file;
|
|
if(!file.Open(sFileName,CFile::modeRead))
|
|
return ;
|
|
pats.Reset();
|
|
pats<<file;
|
|
file.Close();
|
|
if(pats.Length()<1)
|
|
return ;
|
|
ReadFile();
|
|
SetScrollBarRange();
|
|
ReBuildDataBase(2,LPCTSTR(sTemp));
|
|
if(IsCurPage(sTemp))
|
|
DelRefresh(sTemp);
|
|
else
|
|
{
|
|
if(m_sNext.IsEmpty())
|
|
{
|
|
TCHAR cTemp[256];
|
|
m_cPatName.GetText(m_arrName.GetLength() - 1 ,cTemp);
|
|
m_sNext = cTemp;
|
|
}
|
|
Find(LPCTSTR(m_sNext));
|
|
m_cPatName.SetCurSel(m_cPatName.FindStringExact(-1,LPCTSTR(m_sNext)));
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
AfxMessageBox(_T("你没有选择要删除的图案"));
|
|
}
|
|
}
|
|
void CPatternManage::OnDelPat2(CString str)
|
|
{
|
|
CString sTemp;
|
|
int n = m_cPatName.FindString(0,LPCTSTR(str));
|
|
sTemp = str;
|
|
if ( !sTemp.IsEmpty())
|
|
{
|
|
CString str = _T("确实要删除(") + sTemp + _T(")图案?");
|
|
CIdOkDlg dlg;
|
|
dlg.m_sTipText = str;
|
|
if (dlg.DoModal() == IDOK)
|
|
{
|
|
ErasePat(sTemp);
|
|
if(!FindFile(_T("acad.pat"), sFileName))
|
|
{
|
|
return ;
|
|
}
|
|
CStdioFile file;
|
|
if(!file.Open(sFileName,CFile::modeRead))
|
|
return ;
|
|
pats.Reset();
|
|
pats<<file;
|
|
file.Close();
|
|
if(pats.Length()<1)
|
|
return ;
|
|
ReadFile();
|
|
SetScrollBarRange();
|
|
ReBuildDataBase(2,LPCTSTR(sTemp));
|
|
DelRefresh(sTemp);
|
|
}
|
|
}
|
|
}
|
|
void CPatternManage::ErasePat(const TCHAR *sPatName)//删除图案,sPatName代表图案名
|
|
{
|
|
RBList rbCmd=ads_buildlist(RTSTR, _T("c:ErasePat"), RTSTR, sPatName,NULL);
|
|
resbuf *rbRes = NULL;
|
|
if(ads_invoke(rbCmd, &rbRes)==RTNORM)
|
|
{
|
|
if(rbRes!=NULL)
|
|
ads_relrb(rbRes);
|
|
}
|
|
}
|
|
void CPatternManage::OnReBuildPat()
|
|
{
|
|
CString sTemp;
|
|
if( m_cPatName.GetCurSel() >= 0 )
|
|
m_cPatName.GetText(m_cPatName.GetCurSel(),sTemp);
|
|
if ( !sTemp.IsEmpty())
|
|
{
|
|
CString str = _T("确实要重建(") + sTemp + _T(")图案?");
|
|
CIdOk2Dlg dlg;
|
|
dlg.m_sTipString = str;
|
|
dlg.m_pTemp = this;
|
|
if (dlg.DoModal() == IDOK)
|
|
{
|
|
XiePai(1,sTemp);
|
|
}
|
|
else if (m_bXiepai)
|
|
{
|
|
XiePai(0,sTemp);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
AfxMessageBox(_T("你没有选择要重建的图案名称!"));
|
|
}
|
|
}
|
|
void CPatternManage::OnReBuildPat2(CString str)
|
|
{
|
|
CString sTip = _T("确实要重建(") + str + _T(")图案?");
|
|
CIdOk2Dlg dlg;
|
|
dlg.m_sTipString = sTip;
|
|
dlg.m_pTemp = this;
|
|
dlg.m_sName = str;
|
|
if (dlg.DoModal() == IDOK)
|
|
{
|
|
XiePai(1,str);
|
|
}
|
|
else if (m_bXiepai)
|
|
{
|
|
XiePai(0,str);
|
|
}
|
|
}
|
|
BOOL CPatternManage::RemakePat(int type)//重建图案,参数含义同MakeNewPat
|
|
{
|
|
CString str;
|
|
str = _T("@%&$####, Tangent");
|
|
if (MakeNewPat(LPCTSTR(str),type))
|
|
{
|
|
return TRUE;
|
|
}
|
|
else
|
|
{
|
|
return FALSE;
|
|
}
|
|
}
|
|
|
|
void CPatternManage::OnModifyPat()
|
|
{
|
|
CTemporaryResourceOverride vTmp;
|
|
//modify by xlc on 090724 改变对话框显示顺序
|
|
//CModifyPatDlg dlg(acedGetAcadFrame());
|
|
CModifyPatDlg dlg;
|
|
|
|
if(m_cPatName.GetCurSel() >= 0)
|
|
{
|
|
m_cPatName.GetText(m_cPatName.GetCurSel(),dlg.m_sPatName);
|
|
}
|
|
if (dlg.m_sPatName.IsEmpty())
|
|
{
|
|
AfxMessageBox(_T("你没有选择图案名称,请选择图案名称."));
|
|
return;
|
|
}
|
|
if (dlg.DoModal() == IDOK)
|
|
{
|
|
CStdioFile file;
|
|
if(!FindFile(_T("bak.pat"), sFileName))
|
|
{
|
|
return ;
|
|
}
|
|
if(!file.Open(sFileName,CFile::modeRead))
|
|
return ;
|
|
file.Close();
|
|
CFile::Remove(sFileName);
|
|
|
|
if(!FindFile(_T("acad.pat"), sFileName))
|
|
{
|
|
return ;
|
|
}
|
|
if(!file.Open(sFileName,CFile::modeRead))
|
|
return;
|
|
pats.Reset();
|
|
pats<<file;
|
|
file.Close();
|
|
ReBuildDataBase(1,LPCTSTR(dlg.m_sPatName));
|
|
}
|
|
else
|
|
{
|
|
CStdioFile file;
|
|
if(!FindFile(_T("bak.pat"), sFileName))
|
|
{
|
|
return ;
|
|
}
|
|
if(!file.Open(LPCTSTR(sFileName),CFile::modeRead))
|
|
return ;
|
|
pats.Reset();
|
|
pats<<file;
|
|
file.Close();
|
|
CFile::Remove(sFileName);
|
|
if(!FindFile(_T("acad.pat"), sFileName))
|
|
{
|
|
return ;
|
|
}
|
|
if(file.Open(sFileName,CFile::modeCreate|CFile::modeWrite))
|
|
{
|
|
pats>>file;
|
|
file.Close();
|
|
}
|
|
return;
|
|
}
|
|
if (IsCurPage(dlg.m_sPatName))
|
|
{
|
|
Select(dlg.m_sPatName);
|
|
}
|
|
else
|
|
{
|
|
Find(LPCTSTR(dlg.m_sPatName));
|
|
}
|
|
}
|
|
void CPatternManage::OnModifyPat2(CString str)
|
|
{
|
|
CTemporaryResourceOverride vTmp;
|
|
CModifyPatDlg dlg(acedGetAcadFrame());
|
|
dlg.m_sPatName = str;
|
|
if (dlg.DoModal() == IDOK)
|
|
{
|
|
CStdioFile file;
|
|
if(!FindFile(_T("bak.pat"), sFileName))
|
|
{
|
|
return ;
|
|
}
|
|
if(!file.Open(sFileName,CFile::modeRead))
|
|
return ;
|
|
file.Close();
|
|
CFile::Remove(sFileName);
|
|
if(!FindFile(_T("acad.pat"), sFileName))
|
|
{
|
|
return ;
|
|
}
|
|
if(!file.Open(sFileName,CFile::modeRead))
|
|
return;
|
|
pats.Reset();
|
|
pats<<file;
|
|
file.Close();
|
|
ReBuildDataBase(1,LPCTSTR(str));
|
|
}
|
|
else
|
|
{
|
|
CStdioFile file;
|
|
if(!FindFile(_T("bak.pat"), sFileName))
|
|
{
|
|
return ;
|
|
}
|
|
if(!file.Open(LPCTSTR(sFileName),CFile::modeReadWrite))
|
|
return ;
|
|
pats.Reset();
|
|
pats<<file;
|
|
file.Close();
|
|
CFile::Remove(sFileName);
|
|
if(!FindFile(_T("acad.pat"), sFileName))
|
|
{
|
|
return ;
|
|
}
|
|
if(file.Open(sFileName,CFile::modeCreate|CFile::modeWrite))
|
|
{
|
|
pats>>file;
|
|
file.Close();
|
|
}
|
|
return;
|
|
}
|
|
if (IsCurPage(dlg.m_sPatName))
|
|
{
|
|
Select(dlg.m_sPatName);
|
|
}
|
|
else
|
|
{
|
|
Find(LPCTSTR(dlg.m_sPatName));
|
|
}
|
|
}
|
|
void CPatternManage::OnBlkLayout()
|
|
{
|
|
CWnd *pWnd = &m_PatToolBar;
|
|
CMenu menu;
|
|
CMenu* pPopup, *pPopupLayout;
|
|
CMenu popupMenu;
|
|
CRect rc;
|
|
pWnd->SendMessage(TB_GETRECT, IDR_PAT_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);
|
|
}
|
|
void CPatternManage::InitWindows()
|
|
{
|
|
m_cSlidePicture.DividePicture(m_RectArray);
|
|
m_ctrlPreviews.Reset();
|
|
for (int i = 0; i < m_cSlidePicture.PageSize();i++)
|
|
{
|
|
m_ctrlPreviews.Append(new CGsPreviewCtrl2);
|
|
ScreenToClient(m_RectArray[i]);
|
|
m_ctrlPreviews[i]->Create(0,WS_CHILD|WS_VISIBLE,
|
|
m_RectArray[i],this);
|
|
m_ctrlPreviews[i]->m_PatDlg = this;
|
|
}
|
|
}
|
|
void CPatternManage::OnLayout(UINT nID)
|
|
{
|
|
switch (nID)
|
|
{
|
|
case ID_LAYOUT1X1:
|
|
m_cSlidePicture.m_nRow = 1;
|
|
m_cSlidePicture.m_nCol = 1;
|
|
break;
|
|
case ID_LAYOUT2X1:
|
|
m_cSlidePicture.m_nRow = 2;
|
|
m_cSlidePicture.m_nCol = 1;
|
|
break;
|
|
case ID_LAYOUT2X2:
|
|
m_cSlidePicture.m_nRow = 2;
|
|
m_cSlidePicture.m_nCol = 2;
|
|
break;
|
|
case ID_LAYOUT3X2:
|
|
m_cSlidePicture.m_nRow = 3;
|
|
m_cSlidePicture.m_nCol = 2;
|
|
break;
|
|
case ID_LAYOUT3X3:
|
|
m_cSlidePicture.m_nRow = 3;
|
|
m_cSlidePicture.m_nCol = 3;
|
|
break;
|
|
case ID_LAYOUT4X3:
|
|
m_cSlidePicture.m_nRow = 4;
|
|
m_cSlidePicture.m_nCol = 3;
|
|
break;
|
|
case ID_LAYOUT4X4:
|
|
m_cSlidePicture.m_nRow = 4;
|
|
m_cSlidePicture.m_nCol = 4;
|
|
break;
|
|
case ID_LAYOUT5X4:
|
|
m_cSlidePicture.m_nRow = 5;
|
|
m_cSlidePicture.m_nCol = 4;
|
|
break;
|
|
}
|
|
SetScrollBarRange();
|
|
InitWindows();
|
|
Find(LPCTSTR(m_sCurSelect));
|
|
}
|
|
void CPatternManage::OnOkExitSave()
|
|
{
|
|
OnOK();
|
|
}
|
|
void CPatternManage::OnSelchangeListPatname()
|
|
{
|
|
int i = m_cPatName.GetCurSel();
|
|
CString sTemp;
|
|
if(i >= 0)
|
|
m_cPatName.GetText(i,sTemp);
|
|
if (!sTemp.IsEmpty())
|
|
{
|
|
if (IsCurPage(sTemp))
|
|
{
|
|
Select(sTemp);
|
|
}
|
|
else
|
|
{
|
|
Find(LPCTSTR(sTemp));
|
|
}
|
|
}
|
|
}
|
|
|
|
BOOL CPatternManage::DestroyWindow()
|
|
{
|
|
if (m_ctrlPreviews.Length() > 0)
|
|
{
|
|
if(pats.Length() > 0L)
|
|
{
|
|
for (int i = 0; i < m_cSlidePicture.PageSize();i++)
|
|
{
|
|
m_ctrlPreviews[i]->clearAll();
|
|
}
|
|
if (!m_bSave)
|
|
{
|
|
CString str;
|
|
if(m_cPatName.GetCurSel() >= 0)
|
|
{
|
|
m_cPatName.GetText(m_cPatName.GetCurSel(),str);
|
|
g_sName = str;
|
|
}
|
|
g_nRow = m_cSlidePicture.m_nRow;
|
|
g_nCol = m_cSlidePicture.m_nCol;
|
|
SaveState();
|
|
}
|
|
}
|
|
}
|
|
return CAcUiDialog::DestroyWindow();
|
|
}
|
|
void CPatternManage::XiePai(int nPai,CString str)
|
|
{
|
|
BeginEditorCommand();
|
|
CString sTemp,sName;
|
|
if (str.IsEmpty())
|
|
{
|
|
if(m_cPatName.GetCurSel() >= 0)
|
|
m_cPatName.GetText(m_cPatName.GetCurSel(),sTemp);
|
|
}
|
|
else
|
|
{
|
|
sTemp = str;
|
|
}
|
|
if (RemakePat(nPai))
|
|
{
|
|
if(!FindFile(_T("acad.pat"), sFileName))
|
|
{
|
|
return ;
|
|
}
|
|
CStdioFile file;
|
|
if(!file.Open(sFileName,CFile::modeReadWrite))
|
|
return ;
|
|
int n = pats.Length();
|
|
pats.Reset();
|
|
pats<<file;
|
|
file.Close();
|
|
if(pats.Length() < 1)
|
|
return;
|
|
if (n == pats.Length())
|
|
{
|
|
m_cPatName.SetCurSel(m_cPatName.FindStringExact(-1,LPCTSTR(sTemp)));
|
|
TCHAR cTemp[256];
|
|
m_cPatName.GetText(m_cPatName.GetCurSel() + 1,cTemp);
|
|
m_sNext = cTemp;
|
|
CompleteEditorCommand();
|
|
return;
|
|
}
|
|
n = m_cPatName.FindStringExact(-1,LPCTSTR(sTemp));
|
|
int a1,a2;
|
|
for(long i=0;i<pats.Length();i++)
|
|
{
|
|
if(pats[i].IsPat())
|
|
{
|
|
CString sTempName = pats[i].Name();
|
|
CString str,str0;
|
|
int j = 1;
|
|
while (sTempName[j] != ',')
|
|
{
|
|
str = str + sTempName[j++];
|
|
}
|
|
if (str == sTemp)
|
|
{
|
|
a2 = i;
|
|
continue;
|
|
}
|
|
if (_tcsicmp(LPCTSTR(str),_T("@%&$####")) == 0)
|
|
{
|
|
a1 = i;
|
|
continue;
|
|
}
|
|
}
|
|
}
|
|
pats[a2].lines.Clear();
|
|
for (pats[a1].lines.MoveToFirst();!pats[a1].lines.IsOut();pats[a1].lines.MoveToNext())
|
|
{
|
|
CString str;
|
|
for (pats[a1].lines.GetCurData()->data.MoveTo(0);
|
|
!pats[a1].lines.GetCurData()->data.IsOut();
|
|
pats[a1].lines.GetCurData()->data.MoveToNext(), str = str + _T(','))
|
|
{
|
|
str = str + pats[a1].lines.GetCurData()->data.GetCurData();
|
|
}
|
|
pats[a2]<<str;
|
|
}
|
|
CFile::Remove(sFileName);
|
|
if(!file.Open(sFileName,CFile::modeCreate|CFile::modeWrite))
|
|
return ;
|
|
pats[a2].Scale(1.0);//这是,勉为其难的做法,hehe
|
|
pats>>file;
|
|
file.Close();
|
|
ErasePat(_T("@%&$####"));
|
|
if(!file.Open(sFileName,CFile::modeRead))
|
|
return ;
|
|
pats.Reset();
|
|
pats<<file;
|
|
file.Close();
|
|
ReBuildDataBase(1,LPCTSTR(sTemp));
|
|
CString str;
|
|
m_cPatName.SetCurSel(n);
|
|
TCHAR cTemp[256];
|
|
m_cPatName.GetText(m_cPatName.GetCurSel() + 1,cTemp);
|
|
m_sNext = cTemp;
|
|
ReFresh(FALSE,sTemp);
|
|
CompleteEditorCommand();
|
|
}
|
|
else
|
|
{
|
|
CompleteEditorCommand();
|
|
}
|
|
}
|
|
|
|
void CPatternManage::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
|
|
{
|
|
if(pScrollBar != &m_cScrollBar)
|
|
{
|
|
CAcUiDialog::OnVScroll(nSBCode, nPos, pScrollBar);
|
|
return;
|
|
}
|
|
int nMin,nMax;
|
|
int nCurpos;
|
|
m_cScrollBar.GetScrollRange(&nMin,&nMax);
|
|
nCurpos = m_cScrollBar.GetScrollPos();
|
|
switch(nSBCode)
|
|
{
|
|
case SB_LINEUP:
|
|
nCurpos--;break;
|
|
case SB_PAGEUP:
|
|
nCurpos -= m_cSlidePicture.m_nRow;break;
|
|
case SB_LINEDOWN:
|
|
nCurpos++;break;
|
|
case SB_PAGEDOWN:
|
|
nCurpos += m_cSlidePicture.m_nRow;break;
|
|
case SB_THUMBTRACK:
|
|
nCurpos = nPos; break;
|
|
case SB_THUMBPOSITION:
|
|
nCurpos = nPos;break;
|
|
}
|
|
if (nCurpos > nMax)
|
|
{
|
|
nCurpos = nMax;
|
|
}
|
|
if (nCurpos < nMin)
|
|
{
|
|
nCurpos = nMin;
|
|
}
|
|
m_cScrollBar.SetScrollPos(nCurpos);
|
|
int i = 0;
|
|
int j = m_cSlidePicture.m_nCol * nCurpos;
|
|
AcDbBlockTable *pBlockTab = NULL;
|
|
if(dbPreview.getSymbolTable(pBlockTab, AcDb::kForWrite) != Acad::eOk)
|
|
{
|
|
return;
|
|
}
|
|
for (i = 0; i < m_cSlidePicture.PageSize();i++)
|
|
{
|
|
m_ctrlPreviews[i]->clearAll();
|
|
}
|
|
for (i = 0; i < m_cSlidePicture.PageSize();i++,j++)
|
|
{
|
|
CString sTemp;
|
|
if (j < m_arrName.GetLength())
|
|
{
|
|
sTemp = m_arrName[j];
|
|
}
|
|
AcDbBlockTableRecord *pMspace = NULL;
|
|
if (j < m_arrName.GetLength())
|
|
{
|
|
m_ctrlPreviews[i]->m_sName = sTemp;
|
|
if (pBlockTab->has(LPCTSTR(sTemp)))
|
|
{
|
|
if(pBlockTab->getAt(LPCTSTR(sTemp),pMspace,AcDb::kForRead) != Acad::eOk)
|
|
{
|
|
pMspace->close();
|
|
return;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
pMspace = new AcDbBlockTableRecord;
|
|
pMspace->setName(LPCTSTR(sTemp));
|
|
pBlockTab->add(pMspace);
|
|
XPoly2D polyRect(1);
|
|
polyRect.AppendNode(XPoint(0,0));
|
|
polyRect.AppendNode(XPoint(0,1));
|
|
polyRect.AppendNode(XPoint(1,1));
|
|
polyRect.AppendNode(XPoint(1,0));
|
|
AcDbHatch *pHatch = NewHatchFromPoly2D(polyRect,LPCTSTR(sTemp),0.1);
|
|
if(pHatch != NULL)
|
|
{
|
|
if(pMspace->appendAcDbEntity(pHatch) == Acad::eOk)
|
|
pHatch->close();
|
|
else
|
|
{
|
|
delete pHatch;
|
|
pHatch = NULL;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
m_ctrlPreviews[i]->m_sName = _T("");
|
|
if(pBlockTab->getAt(_T("@%&$#"),pMspace,AcDb::kForRead) != Acad::eOk)
|
|
{
|
|
pMspace->close();
|
|
return;
|
|
}
|
|
}
|
|
m_ctrlPreviews[i]->init(true);
|
|
m_ctrlPreviews[i]->view()->setView(AcGePoint3d(0.5,0.5,1000),AcGePoint3d(0.5,0.5,0),
|
|
AcGeVector3d(0.0, 1.0, 0.0), 1,1);
|
|
m_ctrlPreviews[i]->view()->erase(pMspace);
|
|
m_ctrlPreviews[i]->view()->add(pMspace,m_ctrlPreviews[i]->model());
|
|
m_ctrlPreviews[i]->Invalidate();
|
|
pMspace->close();
|
|
}
|
|
pBlockTab->close();
|
|
CAcUiDialog::OnVScroll(nSBCode, nPos, pScrollBar);
|
|
}
|
|
|
|
void CPatternManage::OnDblclkListPatname()
|
|
{
|
|
CString str;
|
|
m_cPatName.GetText(m_cPatName.GetCurSel(),str);
|
|
g_nCol = m_cSlidePicture.m_nCol;
|
|
g_nRow = m_cSlidePicture.m_nRow;
|
|
g_sName = str;
|
|
SaveState();
|
|
m_bSave = TRUE;
|
|
OnOK();
|
|
}
|
|
void CPatternManage::ReFresh(BOOL b,CString str)
|
|
{
|
|
Array<CString> arr;
|
|
int i = 0;
|
|
while (i < m_ctrlPreviews.Length())
|
|
{
|
|
arr.AddTail(m_ctrlPreviews[i]->m_sName);
|
|
i++;
|
|
}
|
|
AcDbBlockTable *pBlockTab = NULL;
|
|
if(dbPreview.getSymbolTable(pBlockTab, AcDb::kForWrite) != Acad::eOk)
|
|
return;
|
|
if (b)
|
|
{
|
|
m_cSlidePicture.DividePicture(m_RectArray);
|
|
m_ctrlPreviews.Reset();
|
|
}
|
|
for (i = 0; i < arr.GetLength();i++)
|
|
{
|
|
AcDbBlockTableRecord *pMspace = NULL;
|
|
if (b)
|
|
{
|
|
m_ctrlPreviews.Append(new CGsPreviewCtrl2);
|
|
ScreenToClient(m_RectArray[i]);
|
|
m_ctrlPreviews[i]->Create(0,WS_CHILD|WS_VISIBLE,m_RectArray[i],this);
|
|
m_ctrlPreviews[i]->m_PatDlg = this;
|
|
}
|
|
m_ctrlPreviews[i]->m_sName = arr[i];
|
|
if(pBlockTab->has(LPCTSTR(arr[i])))
|
|
{
|
|
if(pBlockTab->getAt(LPCTSTR(arr[i]),pMspace,AcDb::kForRead) != Acad::eOk)
|
|
{
|
|
pMspace->close();
|
|
return;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
pMspace = new AcDbBlockTableRecord;
|
|
pMspace->setName(LPCTSTR(arr[i]));
|
|
pBlockTab->add(pMspace);
|
|
m_ctrlPreviews[i]->m_sName = arr[i];
|
|
XPoly2D polyRect(1);
|
|
polyRect.AppendNode(XPoint(0,0));
|
|
polyRect.AppendNode(XPoint(0,1));
|
|
polyRect.AppendNode(XPoint(1,1));
|
|
polyRect.AppendNode(XPoint(1,0));
|
|
AcDbHatch *pHatch = NewHatchFromPoly2D(polyRect,LPCTSTR(arr[i]),0.1);
|
|
if(pHatch != NULL)
|
|
{
|
|
if(pMspace->appendAcDbEntity(pHatch) == Acad::eOk)
|
|
pHatch->close();
|
|
else
|
|
{
|
|
delete pHatch;
|
|
pHatch = NULL;
|
|
}
|
|
}
|
|
}
|
|
m_ctrlPreviews[i]->clearAll();
|
|
m_ctrlPreviews[i]->init(true);
|
|
m_ctrlPreviews[i]->view()->setView(AcGePoint3d(0.5,0.5,1000),
|
|
AcGePoint3d(0.5,0.5,0),AcGeVector3d(0.0, 1.0, 0.0), 1,1);
|
|
m_ctrlPreviews[i]->view()->add(pMspace,m_ctrlPreviews[i]->model());
|
|
m_ctrlPreviews[i]->Invalidate();
|
|
pMspace->close();
|
|
}
|
|
pBlockTab->close();
|
|
}
|
|
void CPatternManage::Update()
|
|
{
|
|
int nCurpos;
|
|
nCurpos = m_cScrollBar.GetScrollPos();
|
|
int i = 0;
|
|
int j = m_cSlidePicture.m_nCol * nCurpos;
|
|
AcDbBlockTable *pBlockTab = NULL;
|
|
VERIFY(dbPreview.getSymbolTable(pBlockTab, AcDb::kForWrite)==Acad::eOk);
|
|
for (i = 0; i < m_cSlidePicture.PageSize();i++,j++)
|
|
{
|
|
CString sTemp;
|
|
if (j < m_arrName.GetLength())
|
|
{
|
|
sTemp = m_arrName[j];
|
|
}
|
|
m_ctrlPreviews[i]->clearAll();
|
|
AcDbBlockTableRecord *pMspace = NULL;
|
|
if (j < m_arrName.GetLength())
|
|
{
|
|
m_ctrlPreviews[i]->m_sName = sTemp;
|
|
if(pBlockTab->has(sTemp))
|
|
{
|
|
if(pBlockTab->getAt(sTemp,pMspace,AcDb::kForRead) != Acad::eOk)
|
|
{
|
|
pBlockTab->close();
|
|
return;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
pMspace = new AcDbBlockTableRecord;
|
|
pMspace->setName(LPCTSTR(sTemp));
|
|
pBlockTab->add(pMspace);
|
|
XPoly2D polyRect(1);
|
|
polyRect.AppendNode(XPoint(0,0));
|
|
polyRect.AppendNode(XPoint(0,1));
|
|
polyRect.AppendNode(XPoint(1,1));
|
|
polyRect.AppendNode(XPoint(1,0));
|
|
AcDbHatch *pHatch = NewHatchFromPoly2D(polyRect,LPCTSTR(sTemp),0.1);
|
|
if(pHatch != NULL)
|
|
{
|
|
if(pMspace->appendAcDbEntity(pHatch) == Acad::eOk)
|
|
pHatch->close();
|
|
else
|
|
{
|
|
delete pHatch;
|
|
pHatch = NULL;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
m_ctrlPreviews[i]->m_sName = _T("");
|
|
if(pBlockTab->getAt(_T("@%&$#"),pMspace,AcDb::kForRead) != Acad::eOk)
|
|
{
|
|
pBlockTab->close();
|
|
return;
|
|
}
|
|
}
|
|
m_ctrlPreviews[i]->init(true);
|
|
m_ctrlPreviews[i]->view()->setView(AcGePoint3d(0.5,0.5,1000),AcGePoint3d(0.5,0.5,0),
|
|
AcGeVector3d(0.0, 1.0, 0.0), 1,1);
|
|
m_ctrlPreviews[i]->view()->erase(pMspace);
|
|
m_ctrlPreviews[i]->view()->add(pMspace,m_ctrlPreviews[i]->model());
|
|
m_ctrlPreviews[i]->Invalidate();
|
|
pMspace->close();
|
|
}
|
|
pBlockTab->close();
|
|
}
|
|
void CPatternManage::DelRefresh(CString str)
|
|
{
|
|
Array<CString> arr;
|
|
int i = 0,nFlag;
|
|
if (!m_arrName.IsEmpty())
|
|
{
|
|
if(m_ctrlPreviews.Length() > 1)
|
|
{
|
|
while (i < m_ctrlPreviews.Length())
|
|
{
|
|
if (!m_ctrlPreviews[i]->m_sName.IsEmpty())
|
|
{
|
|
if (m_ctrlPreviews[i]->m_sName != str)
|
|
{
|
|
arr.AddTail(m_ctrlPreviews[i]->m_sName);
|
|
}
|
|
else
|
|
{
|
|
nFlag = i;
|
|
}
|
|
i++;
|
|
}
|
|
else
|
|
break;
|
|
}
|
|
if (nFlag != i - 1)
|
|
{
|
|
int j = m_arrName.Find(m_ctrlPreviews[i-1]->m_sName);
|
|
if (j != -1 && j + 1 < m_arrName.GetLength())
|
|
{
|
|
arr.AddTail(m_arrName[j + 1]);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
int j = m_arrName.Find(m_ctrlPreviews[i-2]->m_sName);
|
|
if (j != -1 && j + 1 < m_arrName.GetLength())
|
|
{
|
|
arr.AddTail(m_arrName[j + 1]);
|
|
}
|
|
}
|
|
}
|
|
else if(m_ctrlPreviews.Length() == 1 && !m_sForOnlyOneDel.IsEmpty())///add by cwk on 070312
|
|
{
|
|
AcDbBlockTable *pBlockTab = NULL;
|
|
if (dbPreview.getSymbolTable(pBlockTab, AcDb::kForWrite) != Acad::eOk)
|
|
return ;
|
|
AcDbBlockTableRecord *pMspace = NULL;
|
|
AcDbHatch *pHatch = NULL;
|
|
AcDbEntity *pEnt = NULL;
|
|
if(pBlockTab->has(LPCTSTR(m_sForOnlyOneDel)))
|
|
{
|
|
if(pBlockTab->getAt(LPCTSTR(m_sForOnlyOneDel),pMspace,AcDb::kForWrite) != Acad::eOk)
|
|
{
|
|
pBlockTab->close();
|
|
return;
|
|
}
|
|
AcDbBlockTableRecordIterator *pIte = NULL;
|
|
pMspace->newIterator(pIte);
|
|
for (pIte->start();!pIte->done();pIte->step())
|
|
{
|
|
pIte->getEntity(pEnt,AcDb::kForWrite);
|
|
}
|
|
if(pEnt != NULL)
|
|
{
|
|
m_sCurSelect = m_sForOnlyOneDel;
|
|
pEnt->setColorIndex(1);
|
|
m_cPatName.SetCurSel(m_cPatName.FindStringExact(-1,LPCTSTR(m_sForOnlyOneDel)));
|
|
TCHAR cTemp[256];
|
|
m_cPatName.GetText(m_cPatName.GetCurSel() + 1,cTemp);
|
|
m_sNext = cTemp;
|
|
pEnt->close();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
pMspace = new AcDbBlockTableRecord;
|
|
pMspace->setName(LPCTSTR(m_sForOnlyOneDel));
|
|
pBlockTab->add(pMspace);
|
|
XPoly2D polyRect(1);
|
|
polyRect.AppendNode(XPoint(0,0));
|
|
polyRect.AppendNode(XPoint(0,1));
|
|
polyRect.AppendNode(XPoint(1,1));
|
|
polyRect.AppendNode(XPoint(1,0));
|
|
pHatch = NewHatchFromPoly2D(polyRect,LPCTSTR(m_sForOnlyOneDel),0.1);
|
|
if(pHatch != NULL)
|
|
{
|
|
m_sCurSelect = m_sForOnlyOneDel;
|
|
pHatch->setColorIndex(1);
|
|
m_cPatName.SetCurSel(m_cPatName.FindStringExact(-1,LPCTSTR(m_sForOnlyOneDel)));
|
|
TCHAR cTemp[256];
|
|
m_cPatName.GetText(m_cPatName.GetCurSel() + 1,cTemp);
|
|
m_sNext = cTemp;
|
|
if(pMspace->appendAcDbEntity(pHatch) == Acad::eOk)
|
|
pHatch->close();
|
|
else
|
|
{
|
|
delete pHatch;
|
|
pHatch = NULL;
|
|
}
|
|
}
|
|
}
|
|
m_ctrlPreviews[0]->clearAll();
|
|
m_ctrlPreviews[0]->init(true);
|
|
m_ctrlPreviews[0]->view()->setView(AcGePoint3d(0.5,0.5,1000),
|
|
AcGePoint3d(0.5,0.5,0),AcGeVector3d(0.0, 1.0, 0.0), 1,1);
|
|
m_ctrlPreviews[0]->view()->add(pMspace,m_ctrlPreviews[0]->model());
|
|
m_ctrlPreviews[0]->Invalidate();
|
|
m_ctrlPreviews[0]->m_sName = m_sForOnlyOneDel;
|
|
pMspace->close();
|
|
pBlockTab->close();
|
|
//Update();
|
|
UpdateState();
|
|
return;
|
|
}
|
|
else
|
|
return;
|
|
if (nFlag >= arr.GetLength())
|
|
{
|
|
nFlag = arr.GetLength() - 1;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
while (i < m_ctrlPreviews.Length())
|
|
{
|
|
arr.AddTail(_T(""));
|
|
i++;
|
|
}
|
|
}
|
|
if (arr.GetLength() != m_cSlidePicture.PageSize())
|
|
{
|
|
i = arr.GetLength();
|
|
while (i < m_ctrlPreviews.Length())
|
|
{
|
|
arr.AddTail(_T(""));
|
|
i++;
|
|
}
|
|
}
|
|
AcDbBlockTable *pBlockTab = NULL;
|
|
if (dbPreview.getSymbolTable(pBlockTab, AcDb::kForWrite) != Acad::eOk)
|
|
return ;
|
|
for (i = 0; i < arr.GetLength();i++)
|
|
{
|
|
AcDbBlockTableRecord *pMspace = NULL;
|
|
if (i == nFlag || arr[i] == m_sPreSelect)
|
|
{
|
|
AcDbHatch *pHatch = NULL;
|
|
AcDbEntity *pEnt = NULL;
|
|
if(pBlockTab->has(LPCTSTR(arr[i])))
|
|
{
|
|
if(pBlockTab->getAt(LPCTSTR(arr[i]),pMspace,AcDb::kForWrite) != Acad::eOk)
|
|
{
|
|
pBlockTab->close();
|
|
return;
|
|
}
|
|
AcDbBlockTableRecordIterator *pIte = NULL;
|
|
pMspace->newIterator(pIte);
|
|
for (pIte->start();!pIte->done();pIte->step())
|
|
{
|
|
pIte->getEntity(pEnt,AcDb::kForWrite);
|
|
}
|
|
if(pEnt != NULL)
|
|
{
|
|
if (i == nFlag)
|
|
{
|
|
m_sCurSelect = arr[i];
|
|
pEnt->setColorIndex(1);
|
|
m_cPatName.SetCurSel(m_cPatName.FindStringExact(-1,LPCTSTR(arr[i])));
|
|
TCHAR cTemp[256];
|
|
m_cPatName.GetText(m_cPatName.GetCurSel() + 1,cTemp);
|
|
m_sNext = cTemp;
|
|
}
|
|
else
|
|
{
|
|
m_sPreSelect = arr[i];
|
|
pEnt->setColorIndex(0);
|
|
}
|
|
pEnt->close();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
pMspace = new AcDbBlockTableRecord;
|
|
pMspace->setName(LPCTSTR(arr[i]));
|
|
pBlockTab->add(pMspace);
|
|
XPoly2D polyRect(1);
|
|
polyRect.AppendNode(XPoint(0,0));
|
|
polyRect.AppendNode(XPoint(0,1));
|
|
polyRect.AppendNode(XPoint(1,1));
|
|
polyRect.AppendNode(XPoint(1,0));
|
|
pHatch = NewHatchFromPoly2D(polyRect,LPCTSTR(arr[i]),0.1);
|
|
if(pHatch != NULL)
|
|
{
|
|
if (i == nFlag)
|
|
{
|
|
m_sCurSelect = arr[i];
|
|
pHatch->setColorIndex(1);
|
|
m_cPatName.SetCurSel(m_cPatName.FindStringExact(-1,LPCTSTR(arr[i])));
|
|
TCHAR cTemp[256];
|
|
m_cPatName.GetText(m_cPatName.GetCurSel() + 1,cTemp);
|
|
m_sNext = cTemp;
|
|
}
|
|
else
|
|
{
|
|
m_sPreSelect = arr[i];
|
|
pHatch->setColorIndex(0);
|
|
}
|
|
if(pMspace->appendAcDbEntity(pHatch) == Acad::eOk)
|
|
pHatch->close();
|
|
else
|
|
{
|
|
delete pHatch;
|
|
pHatch = NULL;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if(!arr[i].IsEmpty())
|
|
{
|
|
if(pBlockTab->has(LPCTSTR(arr[i])))
|
|
{
|
|
if(pBlockTab->getAt(LPCTSTR(arr[i]),pMspace,AcDb::kForWrite) != Acad::eOk)
|
|
{
|
|
pBlockTab->close();
|
|
return;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
pMspace = new AcDbBlockTableRecord;
|
|
pMspace->setName(LPCTSTR(arr[i]));
|
|
pBlockTab->add(pMspace);
|
|
XPoly2D polyRect(1);
|
|
polyRect.AppendNode(XPoint(0,0));
|
|
polyRect.AppendNode(XPoint(0,1));
|
|
polyRect.AppendNode(XPoint(1,1));
|
|
polyRect.AppendNode(XPoint(1,0));
|
|
AcDbHatch *pHatch = NewHatchFromPoly2D(polyRect,LPCTSTR(arr[i]),0.1);
|
|
if(pHatch != NULL)
|
|
{
|
|
if(pMspace->appendAcDbEntity(pHatch) == Acad::eOk)
|
|
pHatch->close();
|
|
else
|
|
{
|
|
delete pHatch;
|
|
pHatch = NULL;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
m_ctrlPreviews[i]->m_sName = _T("");
|
|
if(pBlockTab->getAt(_T("@%&$#"),pMspace,AcDb::kForRead) != Acad::eOk)
|
|
{
|
|
pBlockTab->close();
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
m_ctrlPreviews[i]->clearAll();
|
|
m_ctrlPreviews[i]->init(true);
|
|
m_ctrlPreviews[i]->view()->setView(AcGePoint3d(0.5,0.5,1000),
|
|
AcGePoint3d(0.5,0.5,0),AcGeVector3d(0.0, 1.0, 0.0), 1,1);
|
|
m_ctrlPreviews[i]->view()->add(pMspace,m_ctrlPreviews[i]->model());
|
|
m_ctrlPreviews[i]->Invalidate();
|
|
pMspace->close();
|
|
}
|
|
pBlockTab->close();
|
|
Update();
|
|
UpdateState();
|
|
}
|
|
void CPatternManage::OnSize(UINT nType, int cx, int cy)
|
|
{
|
|
if(m_bResize && (!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);
|
|
ReFresh(TRUE);
|
|
}
|
|
}
|
|
void CPatternManage::ResetSize(long nIncX, long nIncY)
|
|
{
|
|
CRect rectListBox,rectPre,rectScrollBar,rectTip,rectTip2,rectSX;
|
|
m_cPatName.GetWindowRect(rectListBox);
|
|
ScreenToClient(rectListBox);
|
|
m_cSlidePicture.GetWindowRect(rectPre);
|
|
ScreenToClient(rectPre);
|
|
m_cScrollBar.GetWindowRect(rectScrollBar);
|
|
ScreenToClient(rectScrollBar);
|
|
m_cTip.GetWindowRect(rectTip);
|
|
ScreenToClient(rectTip);
|
|
m_cTip2.GetWindowRect(rectTip2);
|
|
ScreenToClient(rectTip2);
|
|
GetDlgItem(IDC_STATIC_X)->GetWindowRect(rectSX);
|
|
ScreenToClient(rectSX);
|
|
|
|
m_cPatName.MoveWindow(rectListBox.left,rectListBox.top,
|
|
rectListBox.Width(),rectListBox.Height() + nIncY);
|
|
m_cSlidePicture.MoveWindow(rectPre.left,rectPre.top,
|
|
rectPre.Width() + nIncX,rectPre.Height() + nIncY);
|
|
m_cScrollBar.MoveWindow(rectScrollBar.left + nIncX,rectScrollBar.top,
|
|
rectScrollBar.Width(),rectScrollBar.Height() + nIncY);
|
|
GetDlgItem(IDC_STATIC_X)->MoveWindow(rectSX.left,rectSX.top,rectSX.Width(),rectSX.Height() + nIncY);
|
|
m_cTip.MoveWindow(rectTip.left,rectTip.top + nIncY,rectTip.Width(),rectTip.Height());
|
|
m_cTip2.MoveWindow(rectTip2.left,rectTip2.top + nIncY,rectTip2.Width() + nIncX,
|
|
rectTip2.Height());
|
|
}
|
|
|
|
int CPatternManage::OnCreate(LPCREATESTRUCT lpCreateStruct)
|
|
{
|
|
if (CAcUiDialog::OnCreate(lpCreateStruct) == -1)
|
|
return -1;
|
|
CRect rect;
|
|
GetClientRect(rect);
|
|
m_sizeOldX = rect.Width();
|
|
m_sizeOldY = rect.Height();
|
|
return 0;
|
|
}
|
|
|
|
void CPatternManage::MouseWheel(short n)
|
|
{
|
|
int nMin,nMax;
|
|
int nCurpos;
|
|
m_cScrollBar.GetScrollRange(&nMin,&nMax);
|
|
nCurpos = m_cScrollBar.GetScrollPos();
|
|
if (n > 0)
|
|
{
|
|
nCurpos = nCurpos - 1;
|
|
}
|
|
else
|
|
{
|
|
nCurpos = nCurpos + 1;
|
|
}
|
|
if (nCurpos > nMax)
|
|
{
|
|
nCurpos = nMax;
|
|
}
|
|
if (nCurpos < nMin)
|
|
{
|
|
nCurpos = nMin;
|
|
}
|
|
m_cScrollBar.SetScrollPos(nCurpos);
|
|
int i = 0;
|
|
int j = m_cSlidePicture.m_nCol * nCurpos;
|
|
AcDbBlockTable *pBlockTab = NULL;
|
|
if (dbPreview.getSymbolTable(pBlockTab, AcDb::kForWrite) != Acad::eOk)
|
|
{
|
|
return;
|
|
}
|
|
for (i = 0; i < m_cSlidePicture.PageSize();i++,j++)
|
|
{
|
|
CString sTemp;
|
|
if (j < m_arrName.GetLength())
|
|
{
|
|
sTemp = m_arrName[j];
|
|
}
|
|
AcDbBlockTableRecord *pMspace = NULL;
|
|
if (j < m_arrName.GetLength())
|
|
{
|
|
m_ctrlPreviews[i]->m_sName = sTemp;
|
|
if(pBlockTab->has(LPCTSTR(sTemp)))
|
|
{
|
|
if(pBlockTab->getAt(LPCTSTR(sTemp),pMspace,AcDb::kForRead) != Acad::eOk)
|
|
{
|
|
pBlockTab->close();
|
|
return;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
pMspace = new AcDbBlockTableRecord;
|
|
pMspace->setName(LPCTSTR(sTemp));
|
|
pBlockTab->add(pMspace);
|
|
XPoly2D polyRect(1);
|
|
polyRect.AppendNode(XPoint(0,0));
|
|
polyRect.AppendNode(XPoint(0,1));
|
|
polyRect.AppendNode(XPoint(1,1));
|
|
polyRect.AppendNode(XPoint(1,0));
|
|
AcDbHatch *pHatch = NewHatchFromPoly2D(polyRect,LPCTSTR(sTemp),0.1);
|
|
if(pHatch != NULL)
|
|
{
|
|
if(pMspace->appendAcDbEntity(pHatch) == Acad::eOk)
|
|
pHatch->close();
|
|
else
|
|
{
|
|
delete pHatch;
|
|
pHatch = NULL;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
m_ctrlPreviews[i]->m_sName = _T("");
|
|
if(pBlockTab->getAt(_T("@%&$#"),pMspace,AcDb::kForRead) != Acad::eOk)
|
|
{
|
|
pBlockTab->close();
|
|
return;
|
|
}
|
|
}
|
|
m_ctrlPreviews[i]->clearAll();
|
|
m_ctrlPreviews[i]->init(true);
|
|
m_ctrlPreviews[i]->view()->setView(AcGePoint3d(0.5,0.5,1000),AcGePoint3d(0.5,0.5,0),
|
|
AcGeVector3d(0.0, 1.0, 0.0), 1,1);
|
|
m_ctrlPreviews[i]->view()->add(pMspace,m_ctrlPreviews[i]->model());
|
|
m_ctrlPreviews[i]->Invalidate();
|
|
pMspace->close();
|
|
}
|
|
pBlockTab->close();
|
|
}
|