Files
envi-code/SourceCode/Code2026/tg_shs/shs_blklib/tuanmanage.cpp
T
2026-09-28 15:28:50 +08:00

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();
}