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