#include "stdafx.h" #include "KTCadTempOverrides.h" #include "KTCadUtility.h" #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif CKTTempLockDoc::CKTTempLockDoc() { m_pDoc = NULL; LockCurrentDocument(); } CKTTempLockDoc::CKTTempLockDoc(AcApDocument* pDoc) { m_pDoc = NULL; LockDocument(pDoc); } CKTTempLockDoc::~CKTTempLockDoc() { UnlockDocument(); } BOOL CKTTempLockDoc::LockDocument(AcApDocument* pDoc) { ASSERT(pDoc != NULL); UnlockDocument(); if (acDocManager->lockDocument(pDoc) == Acad::eOk) { m_pDoc = pDoc; return TRUE; } return FALSE; } BOOL CKTTempLockDoc::LockCurrentDocument() { return LockDocument(acDocManager->curDocument()); } BOOL CKTTempLockDoc::UnlockDocument() { if (m_pDoc != NULL) { acDocManager->unlockDocument(m_pDoc); m_pDoc = NULL; return TRUE; } return FALSE; } //////////////////////////////////////////////////////////////////////// // 默认构造函数 CKTTempSetSysVar::CKTTempSetSysVar() { } // 构造函数, 保存指定的系统变量 CKTTempSetSysVar::CKTTempSetSysVar(LPCTSTR pszVarName) { PushSystemVar(pszVarName); } // 构造函数, 保存指定的系统变量后, 设置新值 CKTTempSetSysVar::CKTTempSetSysVar(LPCTSTR pszVarName, short iVal) { SetSystemVar(pszVarName, iVal); } CKTTempSetSysVar::CKTTempSetSysVar(LPCTSTR pszVarName, int iVal) { SetSystemVar(pszVarName, iVal); } CKTTempSetSysVar::CKTTempSetSysVar(LPCTSTR pszVarName, long lVal) { SetSystemVar(pszVarName, lVal); } CKTTempSetSysVar::CKTTempSetSysVar(LPCTSTR pszVarName, double dVal) { SetSystemVar(pszVarName, dVal); } CKTTempSetSysVar::CKTTempSetSysVar(LPCTSTR pszVarName, LPCTSTR pszVal) { SetSystemVar(pszVarName, pszVal); } CKTTempSetSysVar::CKTTempSetSysVar(LPCTSTR pszVarName, ads_point ptVal) { SetSystemVar(pszVarName, ptVal); } // 析构函数, 恢复保存的系统变量 CKTTempSetSysVar::~CKTTempSetSysVar() { PopAllSystemVar(); } // 保存指定的系统变量 BOOL CKTTempSetSysVar::PushSystemVar(LPCTSTR pszVarName) { BOOL bRet = FALSE; struct resbuf rb; ZeroMemory(&rb, sizeof(struct resbuf)); if (acedGetVar(pszVarName, &rb) == RTNORM) { long lVal; double dVal; CString sVal; AcGePoint3d ptVal; switch (CKTCadUtility::ResBufType2DwgDataType(rb.restype)) { case AcDb::kDwgInt8: case AcDb::kDwgInt16: bRet = TRUE; if (!m_mapInt.Lookup(pszVarName, lVal)) m_mapInt.SetAt(pszVarName, rb.resval.rint); break; case AcDb::kDwgInt32: bRet = TRUE; if (!m_mapInt.Lookup(pszVarName, lVal)) m_mapInt.SetAt(pszVarName, rb.resval.rlong); break; case AcDb::kDwgReal: bRet = TRUE; if (!m_mapFloat.Lookup(pszVarName, dVal)) m_mapFloat.SetAt(pszVarName, rb.resval.rreal); break; case AcDb::kDwgText: bRet = TRUE; if (!m_mapText.Lookup(pszVarName, sVal)) m_mapText.SetAt(pszVarName, rb.resval.rstring); break; case AcDb::kDwg3Real: bRet = TRUE; if (!m_mapPoint.Lookup(pszVarName, ptVal)) m_mapPoint.SetAt(pszVarName, asPnt3d(rb.resval.rpoint)); break; default: break; } CKTCadUtility::FreeResBuf(&rb); } return bRet; } // 恢复指定的系统变量 BOOL CKTTempSetSysVar::PopSystemVar(LPCTSTR pszVarName) { long lVal; if (m_mapInt.Lookup(pszVarName, lVal)) { return CKTCadUtility::SetSystemVar(pszVarName, m_mapInt[pszVarName]); } double dVal; if (m_mapFloat.Lookup(pszVarName, dVal)) { return CKTCadUtility::SetSystemVar(pszVarName, m_mapFloat[pszVarName]); } CString sVal; if (m_mapText.Lookup(pszVarName, sVal)) { return CKTCadUtility::SetSystemVar(pszVarName, m_mapText[pszVarName]); } AcGePoint3d ptVal; if (m_mapPoint.Lookup(pszVarName, ptVal)) { return CKTCadUtility::SetSystemVar(pszVarName, asDblArray(m_mapPoint[pszVarName])); } return FALSE; } // 恢复所有的系统变量 BOOL CKTTempSetSysVar::PopAllSystemVar() { POSITION pos; CString sKey; long lVal; pos = m_mapInt.GetStartPosition(); while (pos != NULL) { m_mapInt.GetNextAssoc(pos, sKey, lVal); CKTCadUtility::SetSystemVar(sKey, lVal); } double dVal; pos = m_mapFloat.GetStartPosition(); while (pos != NULL) { m_mapFloat.GetNextAssoc(pos, sKey, dVal); CKTCadUtility::SetSystemVar(sKey, dVal); } CString sVal; pos = m_mapText.GetStartPosition(); while (pos != NULL) { m_mapText.GetNextAssoc(pos, sKey, sVal); CKTCadUtility::SetSystemVar(sKey, sVal); } AcGePoint3d ptVal; pos = m_mapPoint.GetStartPosition(); while (pos != NULL) { m_mapPoint.GetNextAssoc(pos, sKey, ptVal); CKTCadUtility::SetSystemVar(sKey, sVal); } return TRUE; } // 保存指定的系统变量后, 设置新值 BOOL CKTTempSetSysVar::SetSystemVar(LPCTSTR pszVarName, short iVal) { if (PushSystemVar(pszVarName)) { return CKTCadUtility::SetSystemVar(pszVarName, iVal); } return FALSE; } BOOL CKTTempSetSysVar::SetSystemVar(LPCTSTR pszVarName, int iVal) { if (PushSystemVar(pszVarName)) { return CKTCadUtility::SetSystemVar(pszVarName, iVal); } return FALSE; } BOOL CKTTempSetSysVar::SetSystemVar(LPCTSTR pszVarName, long lVal) { if (PushSystemVar(pszVarName)) { return CKTCadUtility::SetSystemVar(pszVarName, lVal); } return FALSE; } BOOL CKTTempSetSysVar::SetSystemVar(LPCTSTR pszVarName, double dVal) { if (PushSystemVar(pszVarName)) { return CKTCadUtility::SetSystemVar(pszVarName, dVal); } return FALSE; } BOOL CKTTempSetSysVar::SetSystemVar(LPCTSTR pszVarName, LPCTSTR pszVal) { if (PushSystemVar(pszVarName)) { return CKTCadUtility::SetSystemVar(pszVarName, pszVal); } return FALSE; } BOOL CKTTempSetSysVar::SetSystemVar(LPCTSTR pszVarName, ads_point ptVal) { if (PushSystemVar(pszVarName)) { return CKTCadUtility::SetSystemVar(pszVarName, ptVal); } return FALSE; } ////////////////////////////////////////////////////////////////////////// CKTTempCloseCursor::CKTTempCloseCursor() { m_pInputMgr = curDoc()->inputPointManager(); ASSERT(m_pInputMgr); m_pInputMgr->disableSystemCursorGraphics(); } CKTTempCloseCursor::~CKTTempCloseCursor() { m_pInputMgr->enableSystemCursorGraphics(); } ////////////////////////////////////////////////////////////////////////// CKTTempUndoGroup::CKTTempUndoGroup() { CKTCadUtility::GetSystemVar(_T("CMDECHO"), m_iCmdEcho); CKTCadUtility::SetSystemVar(_T("CMDECHO"), 0); SHacedCommand(RTSTR, _T("UNDO"), RTSTR, _T("BE"), RTNONE); } CKTTempUndoGroup::~CKTTempUndoGroup() { SHacedCommand(RTSTR, _T("UNDO"), RTSTR, _T("E"), RTNONE); CKTCadUtility::SetSystemVar(_T("CMDECHO"), m_iCmdEcho); } ////////////////////////////////////////////////////////////////////////// CKTTempSetTol::CKTTempSetTol(double dTol) : m_dTol(CKTCadUtility::m_KTTol), m_geTol(AcGeContext::gTol) { CKTCadUtility::m_KTTol = dTol; AcGeContext::gTol.setEqualPoint(dTol); AcGeContext::gTol.setEqualVector(dTol); } CKTTempSetTol::~CKTTempSetTol() { CKTCadUtility::m_KTTol = m_dTol; AcGeContext::gTol = m_geTol; } ////////////////////////////////////////////////////////////////////////// BOOL CKTTempZoom::m_bLockUpdate = FALSE; CKTTempZoom::CKTTempZoom(BOOL bLockUpdate) { if (bLockUpdate && !m_bLockUpdate) { acedGetAcadDwgView()->SetRedraw(FALSE); m_bLockUpdate = TRUE; m_bMyLock = TRUE; } else { m_bMyLock = FALSE; } CKTCadUtility::GetCurrentViewSize(m_ptMin, m_ptMax); ads_point pt1, pt2; CKTCadUtility::GetSystemVar(_T("EXTMIN"), pt1); CKTCadUtility::GetSystemVar(_T("EXTMAX"), pt2); m_bRestore = CKTCadUtility::ZoomInCurrentView(asPnt3d(pt1), asPnt3d(pt2)); } CKTTempZoom::CKTTempZoom(const AcGePoint3d& ptMin, const AcGePoint3d& ptMax, BOOL bLockUpdate) { if (bLockUpdate && !m_bLockUpdate) { acedGetAcadDwgView()->SetRedraw(FALSE); m_bLockUpdate = TRUE; m_bMyLock = TRUE; } else { m_bMyLock = FALSE; } CKTCadUtility::GetCurrentViewSize(m_ptMin, m_ptMax); m_bRestore = CKTCadUtility::ZoomInCurrentView(ptMin, ptMax); } CKTTempZoom::~CKTTempZoom() { if (m_bRestore) CKTCadUtility::Zoom(m_ptMin, m_ptMax); if (m_bMyLock) { acedGetAcadDwgView()->SetRedraw(TRUE); m_bLockUpdate = FALSE; } }