Files
envi-code/SourceCode/Code2026/CoreLibrary/KTCadTempOverrides.cpp
T
gjm 164968b62e chore
把非utf8-bom编码的cpp/h文件改为 utf8 bom 编码, msvc识别utf8编码时,如果不是bom格式的,会使用当前cp_oem来解码.
2026-10-04 00:04:20 +08:00

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