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

532 lines
11 KiB
C++

#include "stdafx.h"
#include "MFCDbDwgFiler.h"
#include "comdef.h"
ACRX_CONS_DEFINE_MEMBERS(CMFCDbDwgFiler, AcDbDwgFiler, 0);
CMFCDbDwgFiler::CMFCDbDwgFiler()
{
m_pFile = NULL;
}
CMFCDbDwgFiler::CMFCDbDwgFiler(CFile* pFile)
{
m_pFile = pFile;
}
CMFCDbDwgFiler::~CMFCDbDwgFiler(void)
{
}
Acad::ErrorStatus CMFCDbDwgFiler::readInt8(Adesk::Int8 * pnVal)
{
if (m_pFile != NULL)
{
m_pFile->Read(pnVal,sizeof(Adesk::Int8));
return Acad::eOk;
}
return Acad::eInvalidInput;
}
Acad::ErrorStatus CMFCDbDwgFiler::writeInt8(Adesk::Int8 nVal)
{
if (m_pFile != NULL)
{
m_pFile->Write(&nVal,sizeof(Adesk::Int8));
return Acad::eOk;
}
return Acad::eInvalidInput;
}
#define READWRITESTR_LEN 512
#if ARX < 26 || defined(ZWCAD)
Acad::ErrorStatus CMFCDbDwgFiler::readString(ACHAR ** pszStr)
{
if (m_pFile != NULL)
{
char str[READWRITESTR_LEN];//强制设置为512个字符
memset(str,0,READWRITESTR_LEN);
// 先读一个 READWRITESTR_LEN 长度
m_pFile->Read(str,READWRITESTR_LEN);
if (strcmp(str, "312DD018-D5E1-4C47-9017-2AE9A88A931D") == 0)
{ // 说明是大字符串,再读
int len(0);
m_pFile->Read(&len, sizeof(int)); // 先读长度
if (len > 0) // 再读内容
{
ACHAR *p = new ACHAR[len + 1];
::memset(p, 0, (len + 1) * sizeof(ACHAR));
m_pFile->Read(p, len * sizeof(ACHAR));
*pszStr = p;
}
}
else
{
ACHAR* pT = new ACHAR[READWRITESTR_LEN];
AcString astr(str);
_tcscpy(pT, astr.kACharPtr());
*pszStr = pT;
}
return Acad::eOk;
}
return Acad::eInvalidInput;
}
#endif
Acad::ErrorStatus CMFCDbDwgFiler::writeString(const ACHAR * pszTxt)
{
if (m_pFile != NULL)
{
char str[READWRITESTR_LEN];//强制设置为512个字符
memset(str,0,READWRITESTR_LEN * sizeof(char));
//312DD018-D5E1-4C47-9017-2AE9A88A931D
int len = (int)_tcslen(pszTxt);
if (len * sizeof(ACHAR) > READWRITESTR_LEN) // 写入一个标志,代表写入的是一块大字符串
{
// 先写入标识
strcpy(str, "312DD018-D5E1-4C47-9017-2AE9A88A931D");
m_pFile->Write(str, READWRITESTR_LEN);
// 再写入字符串
m_pFile->Write(&len, sizeof(int)); // 先写入长度
m_pFile->Write(pszTxt, len * sizeof(ACHAR)); // 再写入内容
}
else
{
_bstr_t bstr(pszTxt);
strcpy(str, (const char*)bstr);
m_pFile->Write(str, READWRITESTR_LEN);
}
return Acad::eOk;
}
return Acad::eInvalidInput;
}
Acad::ErrorStatus CMFCDbDwgFiler::readString(AcString &)
{
return Acad::eInvalidInput;
}
Acad::ErrorStatus CMFCDbDwgFiler::writeString(const AcString &)
{
return Acad::eInvalidInput;
}
Acad::ErrorStatus CMFCDbDwgFiler::readBChunk(ads_binary * pbin)
{
if (m_pFile != NULL)
{
if (pbin != NULL)
{
short nLen = 0;
m_pFile->Read(&nLen,sizeof(short));
if (nLen > 0)
{
pbin->buf = new char[nLen];
m_pFile->Read(pbin->buf,nLen);
pbin->clen = nLen;
return Acad::eOk;
}
}
}
return Acad::eInvalidInput;
}
Acad::ErrorStatus CMFCDbDwgFiler::writeBChunk(const ads_binary& bin)
{
if (m_pFile != NULL)
{
m_pFile->Write(&bin.clen,sizeof(short));
if (bin.clen > 0)
m_pFile->Write(bin.buf,bin.clen);
return Acad::eOk;
}
return Acad::eInvalidInput;
}
Acad::ErrorStatus CMFCDbDwgFiler::readAcDbHandle(AcDbHandle* pVal)
{
if (m_pFile != NULL && pVal != NULL)
{
Adesk::UInt32 nLow = 0;
m_pFile->Read(&nLow,sizeof(Adesk::UInt32));
Adesk::UInt32 nHig = 0;
m_pFile->Read(&nHig,sizeof(Adesk::UInt32));
pVal->setLow(nLow);
pVal->setHigh(nHig);
return Acad::eOk;
}
return Acad::eInvalidInput;
}
Acad::ErrorStatus CMFCDbDwgFiler::writeAcDbHandle(const AcDbHandle& handle)
{
if (m_pFile != NULL )
{
Adesk::UInt32 nLow = handle.low();
m_pFile->Write(&nLow,sizeof(Adesk::UInt32));
Adesk::UInt32 nHig = handle.high();
m_pFile->Write(&nHig,sizeof(Adesk::UInt32));
return Acad::eOk;
}
return Acad::eInvalidInput;
}
#if ARX > 17
Acad::ErrorStatus CMFCDbDwgFiler::readInt64(Adesk::Int64* pVal)
{
if (m_pFile != NULL && pVal != NULL)
{
m_pFile->Read(pVal,sizeof(Adesk::Int64));
return Acad::eOk;
}
return Acad::eInvalidInput;
}
Acad::ErrorStatus CMFCDbDwgFiler::writeInt64(Adesk::Int64 nVal)
{
if (m_pFile != NULL )
{
m_pFile->Write(&nVal,sizeof(Adesk::Int64));
return Acad::eOk;
}
return Acad::eInvalidInput;
}
#endif
Acad::ErrorStatus CMFCDbDwgFiler::readInt32(Adesk::Int32* pVal)
{
if (m_pFile != NULL && pVal != NULL)
{
m_pFile->Read(pVal,sizeof(Adesk::Int32));
return Acad::eOk;
}
return Acad::eInvalidInput;
}
Acad::ErrorStatus CMFCDbDwgFiler::writeInt32(Adesk::Int32 nVal)
{
if (m_pFile != NULL )
{
m_pFile->Write(&nVal,sizeof(Adesk::Int32));
return Acad::eOk;
}
return Acad::eInvalidInput;
}
Acad::ErrorStatus CMFCDbDwgFiler::readInt16(Adesk::Int16* pVal)
{
if (m_pFile != NULL && pVal != NULL)
{
m_pFile->Read(pVal,sizeof(Adesk::Int16));
return Acad::eOk;
}
return Acad::eInvalidInput;
}
Acad::ErrorStatus CMFCDbDwgFiler::writeInt16(Adesk::Int16 nVal)
{
if (m_pFile != NULL )
{
m_pFile->Write(&nVal,sizeof(Adesk::Int16));
return Acad::eOk;
}
return Acad::eInvalidInput;
}
#if ARX > 17
Acad::ErrorStatus CMFCDbDwgFiler::readUInt64(Adesk::UInt64* pVal)
{
if (m_pFile != NULL && pVal != NULL)
{
m_pFile->Read(pVal,sizeof(Adesk::UInt64));
return Acad::eOk;
}
return Acad::eInvalidInput;
}
Acad::ErrorStatus CMFCDbDwgFiler::writeUInt64(Adesk::UInt64 nVal)
{
if (m_pFile != NULL )
{
m_pFile->Write(&nVal,sizeof(Adesk::UInt64));
return Acad::eOk;
}
return Acad::eInvalidInput;
}
#endif
Acad::ErrorStatus CMFCDbDwgFiler:: readUInt32(Adesk::UInt32* pVal)
{
if (m_pFile != NULL && pVal != NULL)
{
m_pFile->Read(pVal,sizeof(Adesk::UInt32));
return Acad::eOk;
}
return Acad::eInvalidInput;
}
Acad::ErrorStatus CMFCDbDwgFiler::writeUInt32(Adesk::UInt32 nVal)
{
if (m_pFile != NULL )
{
m_pFile->Write(&nVal,sizeof(Adesk::UInt32));
return Acad::eOk;
}
return Acad::eInvalidInput;
}
Acad::ErrorStatus CMFCDbDwgFiler::readUInt16(Adesk::UInt16* pVal)
{
if (m_pFile != NULL && pVal != NULL)
{
m_pFile->Read(pVal,sizeof(Adesk::UInt16));
return Acad::eOk;
}
return Acad::eInvalidInput;
}
Acad::ErrorStatus CMFCDbDwgFiler::writeUInt16(Adesk::UInt16 nVal)
{
if (m_pFile != NULL )
{
m_pFile->Write(&nVal,sizeof(Adesk::UInt16));
return Acad::eOk;
}
return Acad::eInvalidInput;
}
Acad::ErrorStatus CMFCDbDwgFiler::readUInt8(Adesk::UInt8* pVal)
{
if (m_pFile != NULL && pVal != NULL)
{
m_pFile->Read(pVal,sizeof(Adesk::UInt8));
return Acad::eOk;
}
return Acad::eInvalidInput;
}
Acad::ErrorStatus CMFCDbDwgFiler::writeUInt8(Adesk::UInt8 nVal)
{
if (m_pFile != NULL )
{
m_pFile->Write(&nVal,sizeof(Adesk::UInt8));
return Acad::eOk;
}
return Acad::eInvalidInput;
}
Acad::ErrorStatus CMFCDbDwgFiler::readBoolean(Adesk::Boolean* pVal)
{
if (m_pFile != NULL && pVal != NULL)
{
m_pFile->Read(pVal,sizeof(Adesk::Boolean));
return Acad::eOk;
}
return Acad::eInvalidInput;
}
Acad::ErrorStatus CMFCDbDwgFiler::writeBoolean(Adesk::Boolean nVal)
{
if (m_pFile != NULL )
{
m_pFile->Write(&nVal,sizeof(Adesk::Boolean));
return Acad::eOk;
}
return Acad::eInvalidInput;
}
Acad::ErrorStatus CMFCDbDwgFiler::readBool(bool* pVal)
{
if (m_pFile != NULL && pVal != NULL)
{
m_pFile->Read(pVal,sizeof(bool));
return Acad::eOk;
}
return Acad::eInvalidInput;
}
Acad::ErrorStatus CMFCDbDwgFiler::writeBool(bool nVal)
{
if (m_pFile != NULL )
{
m_pFile->Write(&nVal,sizeof(bool));
return Acad::eOk;
}
return Acad::eInvalidInput;
}
Acad::ErrorStatus CMFCDbDwgFiler::readDouble(double* pVal)
{
if (m_pFile != NULL && pVal != NULL)
{
m_pFile->Read(pVal,sizeof(double));
return Acad::eOk;
}
return Acad::eInvalidInput;
}
Acad::ErrorStatus CMFCDbDwgFiler::writeDouble(double nVal)
{
if (m_pFile != NULL )
{
m_pFile->Write(&nVal,sizeof(double));
return Acad::eOk;
}
return Acad::eInvalidInput;
}
Acad::ErrorStatus CMFCDbDwgFiler::readPoint2d(AcGePoint2d* pVal)
{
if (m_pFile != NULL && pVal != NULL)
{
m_pFile->Read(pVal,sizeof(AcGePoint2d));
return Acad::eOk;
}
return Acad::eInvalidInput;
}
Acad::ErrorStatus CMFCDbDwgFiler::writePoint2d(const AcGePoint2d& nVal)
{
if (m_pFile != NULL )
{
m_pFile->Write(&nVal,sizeof(AcGePoint2d));
return Acad::eOk;
}
return Acad::eInvalidInput;
}
Acad::ErrorStatus CMFCDbDwgFiler::readPoint3d(AcGePoint3d* pVal)
{
if (m_pFile != NULL && pVal != NULL)
{
m_pFile->Read(pVal,sizeof(AcGePoint3d));
return Acad::eOk;
}
return Acad::eInvalidInput;
}
Acad::ErrorStatus CMFCDbDwgFiler::writePoint3d(const AcGePoint3d& nVal)
{
if (m_pFile != NULL )
{
m_pFile->Write(&nVal,sizeof(AcGePoint3d));
return Acad::eOk;
}
return Acad::eInvalidInput;
}
Acad::ErrorStatus CMFCDbDwgFiler::readVector2d(AcGeVector2d* pVal)
{
if (m_pFile != NULL && pVal != NULL)
{
m_pFile->Read(pVal,sizeof(AcGeVector2d));
return Acad::eOk;
}
return Acad::eInvalidInput;
}
Acad::ErrorStatus CMFCDbDwgFiler::writeVector2d(const AcGeVector2d& nVal)
{
if (m_pFile != NULL )
{
m_pFile->Write(&nVal,sizeof(AcGeVector2d));
return Acad::eOk;
}
return Acad::eInvalidInput;
}
Acad::ErrorStatus CMFCDbDwgFiler::readVector3d(AcGeVector3d* pVal)
{
if (m_pFile != NULL && pVal != NULL)
{
m_pFile->Read(pVal,sizeof(AcGeVector3d));
return Acad::eOk;
}
return Acad::eInvalidInput;
}
Acad::ErrorStatus CMFCDbDwgFiler::writeVector3d(const AcGeVector3d& nVal)
{
if (m_pFile != NULL )
{
m_pFile->Write(&nVal,sizeof(AcGeVector3d));
return Acad::eOk;
}
return Acad::eInvalidInput;
}
Acad::ErrorStatus CMFCDbDwgFiler::readScale3d(AcGeScale3d* pVal)
{
if (m_pFile != NULL && pVal != NULL)
{
m_pFile->Read(pVal,sizeof(AcGeScale3d));
return Acad::eOk;
}
return Acad::eInvalidInput;
}
Acad::ErrorStatus CMFCDbDwgFiler::writeScale3d(const AcGeScale3d& nVal)
{
if (m_pFile != NULL )
{
m_pFile->Write(&nVal,sizeof(AcGeScale3d));
return Acad::eOk;
}
return Acad::eInvalidInput;
}
#if ARX > 17
Acad::ErrorStatus CMFCDbDwgFiler::readBytes(void * pVal, Adesk::UIntPtr nLen)
#else
Acad::ErrorStatus CMFCDbDwgFiler::readBytes(void *pVal, Adesk::UInt32 nLen)
#endif
{
if (m_pFile != NULL && pVal != NULL)
{
m_pFile->Read(pVal,(UINT)nLen);
return Acad::eOk;
}
return Acad::eInvalidInput;
}
#if ARX > 17
Acad::ErrorStatus CMFCDbDwgFiler::writeBytes(const void * pVal, Adesk::UIntPtr nLen)
#else
Acad::ErrorStatus CMFCDbDwgFiler::writeBytes(const void *pVal, Adesk::UInt32 nLen)
#endif
{
if (m_pFile != NULL && pVal != NULL)
{
m_pFile->Write(pVal,(UINT)nLen);
return Acad::eOk;
}
return Acad::eInvalidInput;
}
Acad::ErrorStatus CMFCDbDwgFiler::readAddress(void ** pAddr)
{
return Acad::eInvalidInput;
}
Acad::ErrorStatus CMFCDbDwgFiler::writeAddress(const void *)
{
return Acad::eInvalidInput;
}
#if ARX > 17
Acad::ErrorStatus CMFCDbDwgFiler::seek(Adesk::Int64 nOffset, int nMethod)
#else
Acad::ErrorStatus CMFCDbDwgFiler::seek(long nOffset, int nMethod)
#endif
{
return Acad::eInvalidInput;
}