532 lines
11 KiB
C++
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;
|
|
}
|