// 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=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<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<:"),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<= 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<= 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(); } 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(); } 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<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]<>file; file.Close(); ErasePat(_T("@%&$####")); if(!file.Open(sFileName,CFile::modeRead)) return ; pats.Reset(); pats< 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 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 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(); }