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

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__