383 lines
7.9 KiB
C++
383 lines
7.9 KiB
C++
#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;
|
|
}
|
|
}
|