#ifndef _TDBXDATAMAP_H__ #define _TDBXDATAMAP_H__ #if _MSC_VER > 1000 #pragma once #endif #ifdef _TCHPIPEBASE_ #define DLLIMPEXP __declspec(dllexport) #else #ifdef _TCHPIPEBASE_COM_ #define DLLIMPEXP #else #define DLLIMPEXP __declspec(dllimport) #endif #endif #ifndef TCHPIPEBASE_DBXSERVICE #define TCHPIPEBASE_DBXSERVICE "TCHPIPEBASE_DBXSERVICE" #endif #include #include "dbfiler.h" #include "TDb.h" class DLLIMPEXP TDbXDataMap { public: TDbXDataMap(); TDbXDataMap(const TDbXDataMap& datamap); virtual ~TDbXDataMap(); public: BOOL SetAt(LPCTSTR pszKey,int nVal); BOOL SetAt(LPCTSTR pszKey,double dVal); BOOL SetAt(LPCTSTR pszKey,const AcGeDoubleArray& arVal); BOOL SetAt(LPCTSTR pszKey,const AcGeVector3d& vt,BOOL bTransformBy = FALSE); BOOL SetAt(LPCTSTR pszKey,const AcGePoint3d& ptGe,BOOL bTransformBy = FALSE); BOOL SetAt(LPCTSTR pszKey,const AcGePoint3dArray& arPt,BOOL bTransformBy = FALSE); BOOL SetAt(LPCTSTR pszKey,LPCTSTR pszValue); BOOL SetAt(LPCTSTR pszKey,const AcDbObjectId& id,BOOL bIsSoft = TRUE); BOOL SetAt(LPCTSTR pszKey,const AcGeMatrix3d& xform); BOOL GetAt(LPCTSTR pszKey,int& nVal) const; BOOL GetAt(LPCTSTR pszKey,double& dVal) const; BOOL GetAt(LPCTSTR pszKey,AcGeDoubleArray& arVal) const; BOOL GetAt(LPCTSTR pszKey,AcGeVector3d& vt) const; BOOL GetAt(LPCTSTR pszKey,AcGePoint3d& ptGe) const; BOOL GetAt(LPCTSTR pszKey,AcGePoint3dArray& arPt) const; BOOL GetAt(LPCTSTR pszKey,AcGeMatrix3d& xform) const; BOOL GetAt(LPCTSTR pszKey,CString &sValue) const; BOOL GetAt(LPCTSTR pszKey,AcDbObjectId& id) const; BOOL SetAt(LPCTSTR pszKey,int iIndex,LPCTSTR pszValue); BOOL GetAt(LPCTSTR pszKey,int iIndex,CString &sValue); BOOL SetAt(LPCTSTR pszKey,int iIndex,const TDbXDataMap& xDataMap); BOOL GetAt(LPCTSTR pszKey,int iIndex,TDbXDataMap& xDataMap); BOOL SetAt(LPCTSTR pszKey,const TDb::TXData& XData); BOOL GetAt(LPCTSTR pszKey,TDb::TXData& XData); BOOL HasKey(LPCTSTR pszKey,int& nVt); void Empty(); BOOL RemoveAt(LPCTSTR pszKey); BOOL RemoveAt(LPCTSTR pszKey,int nIndex); //支持扩展数据的4个方法 bXRecord = fase 操作扩展数据 bXRecord = true 操作扩展词典 BOOL Write(AcDbObject* pEnt,LPCTSTR pszApp,BOOL bXRecord = FALSE); BOOL Write(const AcDbObjectId& id,LPCTSTR pszApp,BOOL bXRecord = FALSE); BOOL Read(AcDbObject* pEnt,LPCTSTR pszApp,BOOL bXRecord = FALSE); BOOL Read(const AcDbObjectId& id,LPCTSTR pszApp,BOOL bXRecord = FALSE); TDbXDataMap& operator = (const TDbXDataMap& srcMap); BOOL CopyFrom(const TDbXDataMap* pSrc); virtual Acad::ErrorStatus dxfOutFields(AcDbDxfFiler* pFiler) const; virtual Acad::ErrorStatus dxfInFields(AcDbDxfFiler* pFiler); virtual Acad::ErrorStatus dwgOutFields(AcDbDwgFiler* pFiler) const; virtual Acad::ErrorStatus dwgInFields(AcDbDwgFiler* pFiler); typedef std::map::iterator It; It Begin(); BOOL GetNext(It& it,TDb::TXData& xData); It End(); // 增加 clone 的 xdatamap 的关系复制维护lfy 2011-12-6 void BeginCloneXlation(TDbXDataMap* pMapClone,AcDbIdMapping& idMap) const; public: BOOL XDMap2Resbuf(LPCTSTR pszApp,struct resbuf*& pRb,BOOL bXRecord = FALSE); BOOL Resbuf2XDMap(struct resbuf* pRb,BOOL bXRecord = FALSE,AcDbDatabase* pDb = NULL); private: BOOL ParseToRecords(CString& sText,CStringArray& arRecords); BOOL ExtractRecord(CString& sRecord,CString& sKey,CString& sType,CString& sInfo); BOOL StringToAcGePoint3d(CString& sText,AcGePoint3d& ptGe); BOOL StringToAcGeVector3d(CString& sText,AcGeVector3d& ptGe); private: std::map m_xData; }; #endif //X_TDBXDATAMAP_H__