141 lines
3.7 KiB
C++
141 lines
3.7 KiB
C++
#ifndef _TDBXDATAMAP_H__
|
|
#define _TDBXDATAMAP_H__
|
|
|
|
#if _MSC_VER > 1000
|
|
#pragma once
|
|
#endif
|
|
|
|
#include <map>
|
|
#include "dbfiler.h"
|
|
|
|
typedef struct TXData
|
|
{
|
|
int nVt; //VT_I4,VT_BSTR,VT_R8,VT_BYREF | VT_R8,VT_BYREF | VT_R8 + 1 pt
|
|
//VT_BYREF | VT_R8 + 2,VT_BYREF | VT_R8 + 3 vect
|
|
//VT_UI4 : id VT_BYREF | VT_R8 + 4 : matrix3d
|
|
LONG_PTR npszLen; //对应字符数据长度
|
|
|
|
union
|
|
{
|
|
LONG_PTR nVal; // 整型数据
|
|
double dVal[3]; // 浮点数据
|
|
TCHAR* pszVal; // 字符数据
|
|
};
|
|
}TXData;
|
|
|
|
class GEOAPI 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 TXData& XData);
|
|
|
|
BOOL GetAt(LPCTSTR pszKey,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<CString,TXData>::iterator It;
|
|
typedef std::map<CString,TXData>::const_iterator ItC;
|
|
|
|
It Begin();
|
|
ItC Begin() const;
|
|
|
|
BOOL GetNext(It& it,TXData& xData);
|
|
BOOL GetNext(ItC& it,TXData& xData) const;
|
|
|
|
It End();
|
|
ItC End() const;
|
|
|
|
// 增加 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<CString,TXData> m_xData;
|
|
};
|
|
#endif //X_TDBXDATAMAP_H__
|