Compare commits
14
Commits
cb38f5071b
..
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fdfb6e5bbb | ||
|
|
1db5368592 | ||
|
|
4961b696ff | ||
|
|
199abb989c | ||
|
|
7f2f37f005 | ||
|
|
0467086e65 | ||
|
|
63ed4744fb | ||
|
|
9d9077a03e | ||
|
|
8628fcc7e0 | ||
|
|
b7b9827994 | ||
|
|
b96cb1bed2 | ||
|
|
d107cfd47f | ||
|
|
84f255ff22 | ||
|
|
a94ecf8d40 |
No files matched your search
+12
-1
@@ -1,5 +1,16 @@
|
|||||||
Arx/
|
Arx/
|
||||||
Zrx/
|
ZRX/
|
||||||
cmake_output/
|
cmake_output/
|
||||||
bin/
|
bin/
|
||||||
lib/
|
lib/
|
||||||
|
*.dwg
|
||||||
|
*.png
|
||||||
|
*.dwl
|
||||||
|
*.dwl2
|
||||||
|
*.pdf
|
||||||
|
*.pcf
|
||||||
|
*.bat
|
||||||
|
*.scr
|
||||||
|
*.py
|
||||||
|
*.tmp
|
||||||
|
*.aps
|
||||||
@@ -800,7 +800,7 @@ Acad::ErrorStatus AecDbCurveBase::subDeepClone( AcDbObject* pOwner,
|
|||||||
for (; it != end; )
|
for (; it != end; )
|
||||||
{
|
{
|
||||||
if (!pXDataMap->GetNext(it, sKey, cVal)) break;
|
if (!pXDataMap->GetNext(it, sKey, cVal)) break;
|
||||||
if (cVal.nVt == VT_UI4 || cVal.nVt == VT_UI8)//soft,hard
|
if (cVal.nVt == AecXData::kTypeSoftId || cVal.nVt == AecXData::kTypeHardId)//soft,hard
|
||||||
{
|
{
|
||||||
idSrc.setFromOldId(cVal.nVal);
|
idSrc.setFromOldId(cVal.nVal);
|
||||||
|
|
||||||
@@ -820,7 +820,7 @@ Acad::ErrorStatus AecDbCurveBase::subDeepClone( AcDbObject* pOwner,
|
|||||||
if (pXDataMapCloned != NULL)
|
if (pXDataMapCloned != NULL)
|
||||||
{
|
{
|
||||||
pXDataMapCloned->RemoveAt(sKey);
|
pXDataMapCloned->RemoveAt(sKey);
|
||||||
pXDataMapCloned->SetAt(sKey,idPair2.value(),cVal.nVt == VT_UI4 ? TRUE : FALSE);
|
pXDataMapCloned->SetAt(sKey,idPair2.value(),cVal.nVt == AecXData::kTypeSoftId ? TRUE : FALSE);
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -880,7 +880,7 @@ Acad::ErrorStatus AecDbCurveBase::subDeepClone( AcDbObject* pOwner,
|
|||||||
if (idCloned.isValid())
|
if (idCloned.isValid())
|
||||||
{
|
{
|
||||||
pXDataMapCloned->RemoveAt(sKey);
|
pXDataMapCloned->RemoveAt(sKey);
|
||||||
pXDataMapCloned->SetAt(sKey, idCloned, cVal.nVt == VT_UI4 ? TRUE : FALSE);
|
pXDataMapCloned->SetAt(sKey, idCloned, cVal.nVt == AecXData::kTypeSoftId ? TRUE : FALSE);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -888,7 +888,7 @@ Acad::ErrorStatus AecDbCurveBase::subDeepClone( AcDbObject* pOwner,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (sKey.Find(_T("$H")) != -1 && cVal.nVt == VT_BSTR)//可能的实体句柄
|
else if (sKey.Find(_T("$H")) != -1 && cVal.nVt == AecXData::kTypeString)//可能的实体句柄
|
||||||
{
|
{
|
||||||
arHandKeys.Add(sKey);
|
arHandKeys.Add(sKey);
|
||||||
}
|
}
|
||||||
@@ -1253,7 +1253,7 @@ Acad::ErrorStatus AecDbCurveBase::subWblockClone(AcRxObject* pOwner,
|
|||||||
for (; it != end;)
|
for (; it != end;)
|
||||||
{
|
{
|
||||||
if (!pXDataMap->GetNext(it, sKey, cVal)) break;
|
if (!pXDataMap->GetNext(it, sKey, cVal)) break;
|
||||||
if (cVal.nVt == VT_UI4 || cVal.nVt == VT_UI8)//soft,hard
|
if (cVal.nVt == AecXData::kTypeSoftId || cVal.nVt == AecXData::kTypeHardId)//soft,hard
|
||||||
{
|
{
|
||||||
idSrc.setFromOldId(cVal.nVal);
|
idSrc.setFromOldId(cVal.nVal);
|
||||||
|
|
||||||
@@ -1272,7 +1272,7 @@ Acad::ErrorStatus AecDbCurveBase::subWblockClone(AcRxObject* pOwner,
|
|||||||
{
|
{
|
||||||
if (pXDataMapCloned != NULL)
|
if (pXDataMapCloned != NULL)
|
||||||
{
|
{
|
||||||
pXDataMapCloned->SetAt(sKey,idPair2.value(),cVal.nVt == VT_UI4 ? TRUE : FALSE);
|
pXDataMapCloned->SetAt(sKey,idPair2.value(),cVal.nVt == AecXData::kTypeSoftId ? TRUE : FALSE);
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -1321,10 +1321,10 @@ Acad::ErrorStatus AecDbCurveBase::subWblockClone(AcRxObject* pOwner,
|
|||||||
if (pXDataMapCloned != NULL)
|
if (pXDataMapCloned != NULL)
|
||||||
{
|
{
|
||||||
pXDataMapCloned->RemoveAt(sKey);
|
pXDataMapCloned->RemoveAt(sKey);
|
||||||
pXDataMapCloned->SetAt(sKey,idCloned,cVal.nVt == VT_UI4 ? TRUE : FALSE);
|
pXDataMapCloned->SetAt(sKey,idCloned,cVal.nVt == AecXData::kTypeSoftId ? TRUE : FALSE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (sKey.Find(_T("$H")) != -1 && cVal.nVt == VT_BSTR)//可能的实体句柄
|
else if (sKey.Find(_T("$H")) != -1 && cVal.nVt == AecXData::kTypeString)//可能的实体句柄
|
||||||
{
|
{
|
||||||
arHandKeys.Add(sKey);
|
arHandKeys.Add(sKey);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -752,7 +752,7 @@ Acad::ErrorStatus AecDbEntityBase::subDeepClone( AcDbObject* pOwner,
|
|||||||
for (; it != end; )
|
for (; it != end; )
|
||||||
{
|
{
|
||||||
if (!pXDataMap->GetNext(it, sKey, cVal)) break;
|
if (!pXDataMap->GetNext(it, sKey, cVal)) break;
|
||||||
if (cVal.nVt == VT_UI4 || cVal.nVt == VT_UI8)//soft,hard
|
if (cVal.nVt == AecXData::kTypeSoftId || cVal.nVt == AecXData::kTypeHardId)//soft,hard
|
||||||
{
|
{
|
||||||
idSrc.setFromOldId(cVal.nVal);
|
idSrc.setFromOldId(cVal.nVal);
|
||||||
|
|
||||||
@@ -772,7 +772,7 @@ Acad::ErrorStatus AecDbEntityBase::subDeepClone( AcDbObject* pOwner,
|
|||||||
if (pXDataMapCloned != NULL)
|
if (pXDataMapCloned != NULL)
|
||||||
{
|
{
|
||||||
pXDataMapCloned->RemoveAt(sKey);
|
pXDataMapCloned->RemoveAt(sKey);
|
||||||
pXDataMapCloned->SetAt(sKey, idPair2.value(), cVal.nVt == VT_UI4 ? TRUE : FALSE);
|
pXDataMapCloned->SetAt(sKey, idPair2.value(), cVal.nVt == AecXData::kTypeSoftId ? TRUE : FALSE);
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -832,7 +832,7 @@ Acad::ErrorStatus AecDbEntityBase::subDeepClone( AcDbObject* pOwner,
|
|||||||
if (idCloned.isValid())
|
if (idCloned.isValid())
|
||||||
{
|
{
|
||||||
pXDataMapCloned->RemoveAt(sKey);
|
pXDataMapCloned->RemoveAt(sKey);
|
||||||
pXDataMapCloned->SetAt(sKey, idCloned, cVal.nVt == VT_UI4 ? TRUE : FALSE);
|
pXDataMapCloned->SetAt(sKey, idCloned, cVal.nVt == AecXData::kTypeSoftId ? TRUE : FALSE);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -840,7 +840,7 @@ Acad::ErrorStatus AecDbEntityBase::subDeepClone( AcDbObject* pOwner,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (sKey.Find(_T("$H")) != -1 && cVal.nVt == VT_BSTR)//可能的实体句柄
|
else if (sKey.Find(_T("$H")) != -1 && cVal.nVt == AecXData::kTypeString)//可能的实体句柄
|
||||||
{
|
{
|
||||||
arHandKeys.Add(sKey);
|
arHandKeys.Add(sKey);
|
||||||
}
|
}
|
||||||
@@ -1207,7 +1207,7 @@ Acad::ErrorStatus AecDbEntityBase::subWblockClone(AcRxObject* pOwner,
|
|||||||
for (; it != end;)
|
for (; it != end;)
|
||||||
{
|
{
|
||||||
if (!pXDataMap->GetNext(it, sKey, cVal)) break;
|
if (!pXDataMap->GetNext(it, sKey, cVal)) break;
|
||||||
if (cVal.nVt == VT_UI4 || cVal.nVt == VT_UI8)//soft,hard
|
if (cVal.nVt == AecXData::kTypeSoftId || cVal.nVt == AecXData::kTypeHardId)//soft,hard
|
||||||
{
|
{
|
||||||
idSrc.setFromOldId(cVal.nVal);
|
idSrc.setFromOldId(cVal.nVal);
|
||||||
|
|
||||||
@@ -1226,7 +1226,7 @@ Acad::ErrorStatus AecDbEntityBase::subWblockClone(AcRxObject* pOwner,
|
|||||||
{
|
{
|
||||||
if (pXDataMapCloned != NULL)
|
if (pXDataMapCloned != NULL)
|
||||||
{
|
{
|
||||||
pXDataMapCloned->SetAt(sKey, idPair2.value(), cVal.nVt == VT_UI4 ? TRUE : FALSE);
|
pXDataMapCloned->SetAt(sKey, idPair2.value(), cVal.nVt == AecXData::kTypeSoftId ? TRUE : FALSE);
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -1276,10 +1276,10 @@ Acad::ErrorStatus AecDbEntityBase::subWblockClone(AcRxObject* pOwner,
|
|||||||
if (pXDataMapCloned != NULL)
|
if (pXDataMapCloned != NULL)
|
||||||
{
|
{
|
||||||
pXDataMapCloned->RemoveAt(sKey);
|
pXDataMapCloned->RemoveAt(sKey);
|
||||||
pXDataMapCloned->SetAt(sKey, idCloned, cVal.nVt == VT_UI4 ? TRUE : FALSE);
|
pXDataMapCloned->SetAt(sKey, idCloned, cVal.nVt == AecXData::kTypeSoftId ? TRUE : FALSE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (sKey.Find(_T("$H")) != -1 && cVal.nVt == VT_BSTR)//可能的实体句柄
|
else if (sKey.Find(_T("$H")) != -1 && cVal.nVt == AecXData::kTypeString)//可能的实体句柄
|
||||||
{
|
{
|
||||||
arHandKeys.Add(sKey);
|
arHandKeys.Add(sKey);
|
||||||
}
|
}
|
||||||
|
|||||||
File diff suppressed because it is too large.
Load diff
@@ -1,6 +1,7 @@
|
|||||||
#include "stdafx.h"
|
#include "stdafx.h"
|
||||||
#include "CCKSXDlg.h"
|
#include "CCKSXDlg.h"
|
||||||
#include "AecDbObjXDataMap.h"
|
#include "AecDbObjXDataMap.h"
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
IMPLEMENT_DYNAMIC(CCKSXDlg, CDialog)
|
IMPLEMENT_DYNAMIC(CCKSXDlg, CDialog)
|
||||||
|
|
||||||
@@ -77,10 +78,19 @@ BOOL CCKSXDlg::OnInitDialog()
|
|||||||
|
|
||||||
void CCKSXDlg::ListXDataMap(AecDbObjXDataMap *pXDataMap)
|
void CCKSXDlg::ListXDataMap(AecDbObjXDataMap *pXDataMap)
|
||||||
{
|
{
|
||||||
if (pXDataMap != NULL)
|
if (pXDataMap == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
m_wndListXData.DeleteAllItems();
|
||||||
|
|
||||||
|
std::vector<CString> vecItems;
|
||||||
|
pXDataMap->List(vecItems);
|
||||||
|
|
||||||
|
// List() 每个元素输出两项:先 key(名称列),后 value(数据列)。
|
||||||
|
for (size_t i = 0; i + 1 < vecItems.size(); i += 2)
|
||||||
{
|
{
|
||||||
m_wndListXData.DeleteAllItems();
|
int nItem = m_wndListXData.InsertItem(m_wndListXData.GetItemCount(), vecItems[i]);
|
||||||
pXDataMap->List(&m_wndListXData, 0);
|
m_wndListXData.SetItemText(nItem, 1, vecItems[i + 1]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2668,11 +2668,11 @@ void CJSTZDlg::ShowToCompareList(LPCTSTR pszName,AecDbObjXDataMap& map1,AecDbObj
|
|||||||
nVt = xdata1.nVt;
|
nVt = xdata1.nVt;
|
||||||
switch (nVt)
|
switch (nVt)
|
||||||
{
|
{
|
||||||
case VT_I4: // 整型
|
case AecXData::kTypeInt: // 整型
|
||||||
sVal1.Format(_T("%d"),(int)xdata1.nVal);
|
sVal1.Format(_T("%d"),(int)xdata1.nVal);
|
||||||
sVal2.Format(_T("%d"),(int)xdata2.nVal);
|
sVal2.Format(_T("%d"),(int)xdata2.nVal);
|
||||||
break;
|
break;
|
||||||
case VT_UI4: //s id
|
case AecXData::kTypeSoftId: //s id
|
||||||
#ifndef _WIN64
|
#ifndef _WIN64
|
||||||
sVal1.Format(_T("%ld"),xdata1.nVal);
|
sVal1.Format(_T("%ld"),xdata1.nVal);
|
||||||
sVal2.Format(_T("%ld"),xdata2.nVal);
|
sVal2.Format(_T("%ld"),xdata2.nVal);
|
||||||
@@ -2681,7 +2681,7 @@ void CJSTZDlg::ShowToCompareList(LPCTSTR pszName,AecDbObjXDataMap& map1,AecDbObj
|
|||||||
sVal2.Format(_T("%d"),xdata2.nVal);
|
sVal2.Format(_T("%d"),xdata2.nVal);
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
case VT_UI8: //h id
|
case AecXData::kTypeHardId: //h id
|
||||||
#ifndef _WIN64
|
#ifndef _WIN64
|
||||||
sVal1.Format(_T("%ld"),xdata1.nVal);
|
sVal1.Format(_T("%ld"),xdata1.nVal);
|
||||||
sVal2.Format(_T("%ld"),xdata2.nVal);
|
sVal2.Format(_T("%ld"),xdata2.nVal);
|
||||||
@@ -2690,33 +2690,33 @@ void CJSTZDlg::ShowToCompareList(LPCTSTR pszName,AecDbObjXDataMap& map1,AecDbObj
|
|||||||
sVal2.Format(_T("%d"),xdata2.nVal);
|
sVal2.Format(_T("%d"),xdata2.nVal);
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
case VT_R8: // 浮点
|
case AecXData::kTypeDouble: // 浮点
|
||||||
sVal1.Format(_T("%.3f"),xdata1.dVal[0]);
|
sVal1.Format(_T("%.3f"),xdata1.dVal[0]);
|
||||||
sVal2.Format(_T("%.3f"),xdata2.dVal[0]);
|
sVal2.Format(_T("%.3f"),xdata2.dVal[0]);
|
||||||
break;
|
break;
|
||||||
case (VT_BYREF | VT_R8): // 点
|
case AecXData::kTypePoint: // 点
|
||||||
sVal1.Format(_T("%.3f,%.3f,%.3f"),xdata1.dVal[0],xdata1.dVal[1],xdata1.dVal[2]);
|
sVal1.Format(_T("%.3f,%.3f,%.3f"),xdata1.dVal[0],xdata1.dVal[1],xdata1.dVal[2]);
|
||||||
sVal2.Format(_T("%.3f,%.3f,%.3f"),xdata2.dVal[0],xdata2.dVal[1],xdata2.dVal[2]);
|
sVal2.Format(_T("%.3f,%.3f,%.3f"),xdata2.dVal[0],xdata2.dVal[1],xdata2.dVal[2]);
|
||||||
break;
|
break;
|
||||||
case (VT_BYREF | VT_R8 + 1): // cad变化点
|
case AecXData::kTypePointWorld: // cad变化点
|
||||||
sVal1.Format(_T("%.3f,%.3f,%.3f"),xdata1.dVal[0],xdata1.dVal[1],xdata1.dVal[2]);
|
sVal1.Format(_T("%.3f,%.3f,%.3f"),xdata1.dVal[0],xdata1.dVal[1],xdata1.dVal[2]);
|
||||||
sVal2.Format(_T("%.3f,%.3f,%.3f"),xdata2.dVal[0],xdata2.dVal[1],xdata2.dVal[2]);
|
sVal2.Format(_T("%.3f,%.3f,%.3f"),xdata2.dVal[0],xdata2.dVal[1],xdata2.dVal[2]);
|
||||||
break;
|
break;
|
||||||
case (VT_BYREF | VT_R8 + 2): // 向量
|
case AecXData::kTypeVector: // 向量
|
||||||
sVal1.Format(_T("%.3f,%.3f,%.3f"),xdata1.dVal[0],xdata1.dVal[1],xdata1.dVal[2]);
|
sVal1.Format(_T("%.3f,%.3f,%.3f"),xdata1.dVal[0],xdata1.dVal[1],xdata1.dVal[2]);
|
||||||
sVal2.Format(_T("%.3f,%.3f,%.3f"),xdata2.dVal[0],xdata2.dVal[1],xdata2.dVal[2]);
|
sVal2.Format(_T("%.3f,%.3f,%.3f"),xdata2.dVal[0],xdata2.dVal[1],xdata2.dVal[2]);
|
||||||
break;
|
break;
|
||||||
case (VT_BYREF | VT_R8 + 3): // 变化向量
|
case AecXData::kTypeVectorWorld: // 变化向量
|
||||||
sVal1.Format(_T("%.3f,%.3f,%.3f"),xdata1.dVal[0],xdata1.dVal[1],xdata1.dVal[2]);
|
sVal1.Format(_T("%.3f,%.3f,%.3f"),xdata1.dVal[0],xdata1.dVal[1],xdata1.dVal[2]);
|
||||||
sVal2.Format(_T("%.3f,%.3f,%.3f"),xdata2.dVal[0],xdata2.dVal[1],xdata2.dVal[2]);
|
sVal2.Format(_T("%.3f,%.3f,%.3f"),xdata2.dVal[0],xdata2.dVal[1],xdata2.dVal[2]);
|
||||||
break;
|
break;
|
||||||
case (VT_BYREF | VT_R8 + 4): // 矩阵
|
case AecXData::kTypeMatrix: // 矩阵
|
||||||
sVal1.Format(_T("%s"),xdata1.pszVal);
|
sVal1 = AecDbObjXDataMap::MatrixToString(xdata1);
|
||||||
sVal2.Format(_T("%s"),xdata2.pszVal);
|
sVal2 = AecDbObjXDataMap::MatrixToString(xdata2);
|
||||||
break;
|
break;
|
||||||
case (VT_BYREF | VT_R8 + 5): // binarydata
|
case AecXData::kTypeBinary: // binarydata
|
||||||
break;
|
break;
|
||||||
case VT_BSTR: // 字符串
|
case AecXData::kTypeString: // 字符串
|
||||||
sVal1.Format(_T("%s"),xdata1.pszVal);
|
sVal1.Format(_T("%s"),xdata1.pszVal);
|
||||||
sVal2.Format(_T("%s"),xdata2.pszVal);
|
sVal2.Format(_T("%s"),xdata2.pszVal);
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -261,7 +261,7 @@ namespace
|
|||||||
for (AecDbObjXDataMap::It it = pMap->Begin(); it != pMap->End(); ++it)
|
for (AecDbObjXDataMap::It it = pMap->Begin(); it != pMap->End(); ++it)
|
||||||
{
|
{
|
||||||
const AecXData &xd = it->second;
|
const AecXData &xd = it->second;
|
||||||
if (xd.nVt == VT_BSTR && xd.pszVal)
|
if (xd.nVt == AecXData::kTypeString && xd.pszVal)
|
||||||
{
|
{
|
||||||
CString s(xd.pszVal);
|
CString s(xd.pszVal);
|
||||||
s.Trim();
|
s.Trim();
|
||||||
|
|||||||
@@ -937,12 +937,12 @@ BOOL AecDbAssembleWell::CalValue(const CString &sExp,double& dRes) const
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
//替换
|
//替换
|
||||||
if (cVal.nVt == VT_I4)
|
if (cVal.nVt == AecXData::kTypeInt)
|
||||||
{
|
{
|
||||||
cal.SetVariableData(sKey, 1.0 * cVal.nVal);
|
cal.SetVariableData(sKey, 1.0 * cVal.nVal);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cVal.nVt == VT_R8)
|
if (cVal.nVt == AecXData::kTypeDouble)
|
||||||
{
|
{
|
||||||
cal.SetVariableData(sKey, cVal.dVal[0]);
|
cal.SetVariableData(sKey, cVal.dVal[0]);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1756,7 +1756,7 @@ Acad::ErrorStatus AecDbEwPipe::TransformHole(const AcGeMatrix3d& xform)
|
|||||||
for (; it != end;)
|
for (; it != end;)
|
||||||
{
|
{
|
||||||
if (!m_mapSpecXData.GetNext(it, sKey, cVal)) break;
|
if (!m_mapSpecXData.GetNext(it, sKey, cVal)) break;
|
||||||
if (sKey.Find(_T("$H")) != -1 && cVal.nVt == VT_BSTR)//可能的实体句柄
|
if (sKey.Find(_T("$H")) != -1 && cVal.nVt == AecXData::kTypeString)//可能的实体句柄
|
||||||
{
|
{
|
||||||
AcDbHandle handle(cVal.pszVal);
|
AcDbHandle handle(cVal.pszVal);
|
||||||
|
|
||||||
|
|||||||
@@ -1661,7 +1661,7 @@ void AecDbEwPipeBase::GetAssocHandleObjs(AcDbObjectIdArray& arIds)
|
|||||||
for (; it != end;)
|
for (; it != end;)
|
||||||
{
|
{
|
||||||
if (!m_mapSpecXData.GetNext(it, sKey,cVal)) break;
|
if (!m_mapSpecXData.GetNext(it, sKey,cVal)) break;
|
||||||
if ( sKey.Find(_T("$H")) != -1 && cVal.nVt == VT_BSTR )//可能的实体句柄
|
if ( sKey.Find(_T("$H")) != -1 && cVal.nVt == AecXData::kTypeString )//可能的实体句柄
|
||||||
{
|
{
|
||||||
AcDbHandle handle(cVal.pszVal);
|
AcDbHandle handle(cVal.pszVal);
|
||||||
|
|
||||||
@@ -1826,7 +1826,7 @@ Acad::ErrorStatus AecDbEwPipeBase::subTransformBy(const AcGeMatrix3d& xform)
|
|||||||
for (; it != end;)
|
for (; it != end;)
|
||||||
{
|
{
|
||||||
if (!m_mapSpecXData.GetNext(it, sKey, cVal)) break;
|
if (!m_mapSpecXData.GetNext(it, sKey, cVal)) break;
|
||||||
if (sKey.Find(_T("$H")) != -1 && cVal.nVt == VT_BSTR)//可能的实体句柄
|
if (sKey.Find(_T("$H")) != -1 && cVal.nVt == AecXData::kTypeString)//可能的实体句柄
|
||||||
{
|
{
|
||||||
AcDbHandle handle(cVal.pszVal);
|
AcDbHandle handle(cVal.pszVal);
|
||||||
|
|
||||||
|
|||||||
@@ -240,7 +240,7 @@ void HlrCutOption::ProcessHlrResult(const AcDbEntity *pE
|
|||||||
std::vector<CString> strs;
|
std::vector<CString> strs;
|
||||||
for (AecDbObjXDataMap::It it = testData.Begin(); it != testData.End(); ++it)
|
for (AecDbObjXDataMap::It it = testData.Begin(); it != testData.End(); ++it)
|
||||||
{
|
{
|
||||||
if (it->second.nVt == (VT_BYREF | VT_R8 + 5))
|
if (it->second.nVt == AecXData::kTypeBinary)
|
||||||
strs.push_back(it->first);
|
strs.push_back(it->first);
|
||||||
}
|
}
|
||||||
for (size_t i(0); i < strs.size(); ++i)
|
for (size_t i(0); i < strs.size(); ++i)
|
||||||
|
|||||||
@@ -875,12 +875,12 @@ BOOL AecDbPipeHanger::CLC(CString &sTxt)
|
|||||||
for (; it != end; )
|
for (; it != end; )
|
||||||
{
|
{
|
||||||
m_mapSpecXData.GetNext(it, sKey, xData);
|
m_mapSpecXData.GetNext(it, sKey, xData);
|
||||||
if (xData.nVt == VT_UI4 ||
|
if (xData.nVt == AecXData::kTypeSoftId ||
|
||||||
xData.nVt == VT_I4)
|
xData.nVt == AecXData::kTypeInt)
|
||||||
{
|
{
|
||||||
cal.SetVariableData(sKey, 1.0 * xData.nVal);
|
cal.SetVariableData(sKey, 1.0 * xData.nVal);
|
||||||
}
|
}
|
||||||
else if (xData.nVt == VT_R8)
|
else if (xData.nVt == AecXData::kTypeDouble)
|
||||||
{
|
{
|
||||||
cal.SetVariableData(sKey, xData.dVal[0]);
|
cal.SetVariableData(sKey, xData.dVal[0]);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2318,7 +2318,7 @@ void AecDbECableLine::RemoveHolePipe(AecDbECableTray* pWPipe)
|
|||||||
for (; it != end;)
|
for (; it != end;)
|
||||||
{
|
{
|
||||||
if (!pXDatMap->GetNext(it, sKey, cVal)) break;
|
if (!pXDatMap->GetNext(it, sKey, cVal)) break;
|
||||||
if (sKey.Find(_T("$H")) != -1 && cVal.nVt == VT_BSTR)//可能的实体句柄
|
if (sKey.Find(_T("$H")) != -1 && cVal.nVt == AecXData::kTypeString)//可能的实体句柄
|
||||||
{
|
{
|
||||||
AcDbHandle handle(cVal.pszVal);
|
AcDbHandle handle(cVal.pszVal);
|
||||||
|
|
||||||
|
|||||||
@@ -2888,7 +2888,7 @@ void AecDbDuctLine::RemoveHolePipe(AecDbHvacDuct* pWPipe)
|
|||||||
for (; it != end;)
|
for (; it != end;)
|
||||||
{
|
{
|
||||||
if (!pXDatMap->GetNext(it, sKey, cVal)) break;
|
if (!pXDatMap->GetNext(it, sKey, cVal)) break;
|
||||||
if (sKey.Find(_T("$H")) != -1 && cVal.nVt == VT_BSTR)//可能的实体句柄
|
if (sKey.Find(_T("$H")) != -1 && cVal.nVt == AecXData::kTypeString)//可能的实体句柄
|
||||||
{
|
{
|
||||||
AcDbHandle handle(cVal.pszVal);
|
AcDbHandle handle(cVal.pszVal);
|
||||||
|
|
||||||
|
|||||||
@@ -62,13 +62,13 @@ BOOL CDLGArribtEdit::OnInitDialog()
|
|||||||
{
|
{
|
||||||
iIndex = m_wndLstAttrib.InsertItem(0, sKey);
|
iIndex = m_wndLstAttrib.InsertItem(0, sKey);
|
||||||
|
|
||||||
if (cVal.nVt == VT_BSTR)
|
if (cVal.nVt == AecXData::kTypeString)
|
||||||
sKey.Format(_T("%s"), cVal.pszVal);
|
sKey.Format(_T("%s"), cVal.pszVal);
|
||||||
else if (cVal.nVt == VT_I4)
|
else if (cVal.nVt == AecXData::kTypeInt)
|
||||||
sKey.Format(_T("%d"), cVal.nVal);
|
sKey.Format(_T("%d"), cVal.nVal);
|
||||||
else if (cVal.nVt == VT_R8)
|
else if (cVal.nVt == AecXData::kTypeDouble)
|
||||||
sKey.Format(_T("%g"), cVal.dVal[0]);
|
sKey.Format(_T("%g"), cVal.dVal[0]);
|
||||||
else if (cVal.nVt == (VT_BYREF | VT_R8))
|
else if (cVal.nVt == AecXData::kTypePoint)
|
||||||
sKey.Format(_T("%g,%g,%g"), cVal.dVal[0], cVal.dVal[1], cVal.dVal[2]);
|
sKey.Format(_T("%g,%g,%g"), cVal.dVal[0], cVal.dVal[1], cVal.dVal[2]);
|
||||||
|
|
||||||
m_wndLstAttrib.SetItemText(iIndex, 1, sKey);
|
m_wndLstAttrib.SetItemText(iIndex, 1, sKey);
|
||||||
@@ -203,13 +203,13 @@ void CDLGArribtEdit::OnOK()
|
|||||||
sValue = m_wndLstAttrib.GetItemText(iPos, 1);
|
sValue = m_wndLstAttrib.GetItemText(iPos, 1);
|
||||||
iVt = m_wndLstAttrib.GetItemData(iPos);
|
iVt = m_wndLstAttrib.GetItemData(iPos);
|
||||||
|
|
||||||
if (iVt == VT_BSTR)
|
if (iVt == AecXData::kTypeString)
|
||||||
m_pmapXData->SetAt(sKey, sValue);
|
m_pmapXData->SetAt(sKey, sValue);
|
||||||
else if (iVt == VT_I4)
|
else if (iVt == AecXData::kTypeInt)
|
||||||
m_pmapXData->SetAt(sKey, (int)_ttol(sValue));
|
m_pmapXData->SetAt(sKey, (int)_ttol(sValue));
|
||||||
else if (iVt == VT_R8)
|
else if (iVt == AecXData::kTypeDouble)
|
||||||
m_pmapXData->SetAt(sKey, _tcstod(sValue, NULL));
|
m_pmapXData->SetAt(sKey, _tcstod(sValue, NULL));
|
||||||
else if (iVt == (VT_BYREF | VT_R8))
|
else if (iVt == AecXData::kTypePoint)
|
||||||
{
|
{
|
||||||
pt.x = pt.y = pt.z = 0.0;
|
pt.x = pt.y = pt.z = 0.0;
|
||||||
_stscanf(sValue, _T("%lf,%lf,%lf"), &(pt.x), &(pt.y), &(pt.z));
|
_stscanf(sValue, _T("%lf,%lf,%lf"), &(pt.x), &(pt.y), &(pt.z));
|
||||||
|
|||||||
@@ -4334,7 +4334,7 @@ void TDbPipeLine::RemoveHolePipe(AecDbEwPipe* pWPipe)
|
|||||||
for (; it != end;)
|
for (; it != end;)
|
||||||
{
|
{
|
||||||
if (!pXDatMap->GetNext(it, sKey, cVal)) break;
|
if (!pXDatMap->GetNext(it, sKey, cVal)) break;
|
||||||
if (sKey.Find(_T("$H")) != -1 && cVal.nVt == VT_BSTR)//可能的实体句柄
|
if (sKey.Find(_T("$H")) != -1 && cVal.nVt == AecXData::kTypeString)//可能的实体句柄
|
||||||
{
|
{
|
||||||
AcDbHandle handle(cVal.pszVal);
|
AcDbHandle handle(cVal.pszVal);
|
||||||
|
|
||||||
|
|||||||
@@ -312,15 +312,16 @@ void CFlangeDlg::SetAdoDb(CUIISQLiteServer *pDb)
|
|||||||
|
|
||||||
void CFlangeDlg::GetEndF1(CString &sEndF)
|
void CFlangeDlg::GetEndF1(CString &sEndF)
|
||||||
{
|
{
|
||||||
|
//端面型式在 m_arFlangeVals 的下标 5(0公称直径 1法兰外径 2法兰高度 3法兰厚度 4法兰颈 5端面1 6端面2)
|
||||||
sEndF = _T("FF");
|
sEndF = _T("FF");
|
||||||
if (m_arFlangeVals.GetSize() > 0)
|
if (m_arFlangeVals.GetSize() > 5 && !m_arFlangeVals.GetAt(5).IsEmpty())
|
||||||
sEndF = m_arFlangeVals.GetAt(0);
|
sEndF = m_arFlangeVals.GetAt(5);
|
||||||
}
|
}
|
||||||
void CFlangeDlg::GetEndF2(CString &sEndF)
|
void CFlangeDlg::GetEndF2(CString &sEndF)
|
||||||
{
|
{
|
||||||
sEndF = _T("FF");
|
sEndF = _T("FF");
|
||||||
if (m_arFlangeVals.GetSize() > 1)
|
if (m_arFlangeVals.GetSize() > 6 && !m_arFlangeVals.GetAt(6).IsEmpty())
|
||||||
sEndF = m_arFlangeVals.GetAt(1);
|
sEndF = m_arFlangeVals.GetAt(6);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -18033,6 +18033,103 @@ void DBL_AEC_DBEWFIT()
|
|||||||
AecDbEwFitting* pEw = AecDbEwFitting::cast(pEnt);
|
AecDbEwFitting* pEw = AecDbEwFitting::cast(pEnt);
|
||||||
if (pEw != NULL)
|
if (pEw != NULL)
|
||||||
{
|
{
|
||||||
|
//法兰:双击弹出法兰对话框,把选中的法兰/垫片数据应用到该法兰对象
|
||||||
|
if (pEw->GetFittingType() == eFlange)
|
||||||
|
{
|
||||||
|
CString dbPath = FilePath::GetSysDir();
|
||||||
|
dbPath += _T("\\Plumbing.db");
|
||||||
|
|
||||||
|
CUIISQLiteServer * pADOServer = new CUIISQLiteServer;
|
||||||
|
if (!pADOServer->InitADOServer(dbPath))
|
||||||
|
{
|
||||||
|
AfxMessageBox(_T("数据库驱动加载数据库Plumbing.db失败!"));
|
||||||
|
delete pADOServer;
|
||||||
|
pEnt->close();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//取当前法兰参数作为对话框初值
|
||||||
|
const AecDbObjXDataMap* pMap = pEw->GetSpecialtyData(AcDb::kForRead);
|
||||||
|
|
||||||
|
double dDN = 0.0;
|
||||||
|
pMap->GetAt(PIPE_DN, dDN);
|
||||||
|
|
||||||
|
double dPre = 1.0;
|
||||||
|
pMap->GetAt(PIPE_PRESSURE, dPre);
|
||||||
|
|
||||||
|
CString sODNo, sPro, sLevel;
|
||||||
|
pMap->GetAt(PIPE_ODSN, sODNo);
|
||||||
|
pMap->GetAt(DOC_PROJECT, sPro);
|
||||||
|
pMap->GetAt(PIPE_LEVEL, sLevel);
|
||||||
|
|
||||||
|
if (!sLevel.IsEmpty() && sPro.IsEmpty())
|
||||||
|
{
|
||||||
|
AecDbObjXDataMap xMap;
|
||||||
|
KTModelLayoutXData::ReadModelXData(KT_PIPEINIT, xMap);
|
||||||
|
xMap.GetAt(DOC_PROJECT, sPro);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
CAcModuleResourceOverride rcTmp;
|
||||||
|
CFlangeDlg flgDlg;
|
||||||
|
flgDlg.SetAdoDb(pADOServer);
|
||||||
|
flgDlg.SetDN((int)dDN);
|
||||||
|
flgDlg.SetPressure(dPre);
|
||||||
|
flgDlg.SetLevel(sODNo, sPro, sLevel);
|
||||||
|
|
||||||
|
if (IDOK == flgDlg.DoModal())
|
||||||
|
{
|
||||||
|
//提取旧的接口
|
||||||
|
pEw->GetInterface(arOldInfs);
|
||||||
|
|
||||||
|
CStringArray arValuesF, arValuesG;
|
||||||
|
flgDlg.GetFlangeValues(arValuesF);
|
||||||
|
flgDlg.GetGasketValues(arValuesG);
|
||||||
|
|
||||||
|
//列: 0公称直径 1法兰外径 2法兰高度 3法兰厚度 4法兰颈 5端面
|
||||||
|
if (arValuesF.GetSize() >= 5)
|
||||||
|
{
|
||||||
|
double dWD = _ttof(arValuesF.GetAt(1)); //法兰盘外径
|
||||||
|
double dWh = _ttof(arValuesF.GetAt(3)); //法兰盘厚度
|
||||||
|
double dThk = _ttof(arValuesF.GetAt(3)); //法兰总厚
|
||||||
|
double dN = _ttof(arValuesF.GetAt(4)); //法兰颈
|
||||||
|
|
||||||
|
CString sEndF = _T("FF");
|
||||||
|
if (arValuesF.GetSize() > 5) sEndF = arValuesF.GetAt(5);
|
||||||
|
|
||||||
|
pEw->upgradeOpen();
|
||||||
|
|
||||||
|
AecDbObjXDataMap* pXDataMapSrc = pEw->GetSpecialtyData(AcDb::kForWrite);
|
||||||
|
|
||||||
|
pXDataMapSrc->SetAt(PIPE_WD, dWD);
|
||||||
|
pXDataMapSrc->SetAt(PIPE_WTHICK, dWh);
|
||||||
|
pXDataMapSrc->SetAt(PIPE_THICK, dThk);
|
||||||
|
pXDataMapSrc->SetAt(PIPE_N, dN);
|
||||||
|
pXDataMapSrc->SetAt(PIPE_FLANGF, sEndF);
|
||||||
|
|
||||||
|
if (arValuesG.GetSize() > 4)
|
||||||
|
{
|
||||||
|
pXDataMapSrc->SetAt(PIPE_GASKETM, arValuesG.GetAt(1));
|
||||||
|
pXDataMapSrc->SetAt(PIPE_PRESSURE, _ttof(arValuesG.GetAt(2)));
|
||||||
|
pXDataMapSrc->RemoveAt(PIPE_GASKET);
|
||||||
|
pXDataMapSrc->SetAt(PIPE_GASKET, _ttof(arValuesG.GetAt(3)));
|
||||||
|
pXDataMapSrc->SetAt(PIPE_GASKETDSC, arValuesG.GetAt(4));
|
||||||
|
}
|
||||||
|
|
||||||
|
pEw->ReCreateDraw2d();
|
||||||
|
pEw->ReCreateDraw3d();
|
||||||
|
|
||||||
|
pEw->downgradeOpen();
|
||||||
|
|
||||||
|
pEw->GetInterface(arNewInfs);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
delete pADOServer;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
WPipe::PipeParam* pParam = NULL;
|
WPipe::PipeParam* pParam = NULL;
|
||||||
pParam = pEw->GetPipeParam();
|
pParam = pEw->GetPipeParam();
|
||||||
|
|
||||||
@@ -18094,6 +18191,7 @@ void DBL_AEC_DBEWFIT()
|
|||||||
pEw->GetInterface(arNewInfs);
|
pEw->GetInterface(arNewInfs);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
pEnt->close();
|
pEnt->close();
|
||||||
|
|
||||||
|
|||||||
@@ -4082,7 +4082,7 @@ void TDbPipeLine::RemoveHolePipe(AecDbEwPipe* pWPipe)
|
|||||||
for (; it != end;)
|
for (; it != end;)
|
||||||
{
|
{
|
||||||
if (!pXDatMap->GetNext(it, sKey, cVal)) break;
|
if (!pXDatMap->GetNext(it, sKey, cVal)) break;
|
||||||
if (sKey.Find(_T("$H")) != -1 && cVal.nVt == VT_BSTR)//可能的实体句柄
|
if (sKey.Find(_T("$H")) != -1 && cVal.nVt == AecXData::kTypeString)//可能的实体句柄
|
||||||
{
|
{
|
||||||
AcDbHandle handle(cVal.pszVal);
|
AcDbHandle handle(cVal.pszVal);
|
||||||
|
|
||||||
|
|||||||
@@ -752,7 +752,7 @@ void CGJFCDlg::CreateChildItem(AecDbObjXDataMap* pXData)
|
|||||||
for (; it != end; )
|
for (; it != end; )
|
||||||
{
|
{
|
||||||
if (!pXData->GetNext(it, sKey, cVal)) break;
|
if (!pXData->GetNext(it, sKey, cVal)) break;
|
||||||
if (cVal.nVt == VT_BSTR)
|
if (cVal.nVt == AecXData::kTypeString)
|
||||||
{
|
{
|
||||||
sHandle = cVal.pszVal;
|
sHandle = cVal.pszVal;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -393,7 +393,7 @@ void CGJFCNewDlg::OnBnClickedButton10()
|
|||||||
{
|
{
|
||||||
memset(&cVal,0,sizeof(AecXData));
|
memset(&cVal,0,sizeof(AecXData));
|
||||||
if (!xData.GetNext(it, sKey, cVal)) break;
|
if (!xData.GetNext(it, sKey, cVal)) break;
|
||||||
if (cVal.nVt == VT_BSTR)
|
if (cVal.nVt == AecXData::kTypeString)
|
||||||
{
|
{
|
||||||
sHandle = cVal.pszVal;
|
sHandle = cVal.pszVal;
|
||||||
}
|
}
|
||||||
@@ -456,7 +456,7 @@ void CGJFCNewDlg::OnBnClickedButton10()
|
|||||||
{
|
{
|
||||||
memset(&cVal,0,sizeof(AecXData));
|
memset(&cVal,0,sizeof(AecXData));
|
||||||
if (!xData.GetNext(it, sKey, cVal)) break;
|
if (!xData.GetNext(it, sKey, cVal)) break;
|
||||||
if (cVal.nVt == VT_BSTR)
|
if (cVal.nVt == AecXData::kTypeString)
|
||||||
{
|
{
|
||||||
sHandle = cVal.pszVal;
|
sHandle = cVal.pszVal;
|
||||||
}
|
}
|
||||||
@@ -984,7 +984,7 @@ void CGJFCNewDlg::CreateChildItem(AecDbObjXDataMap* pXData)
|
|||||||
if (!pXData->GetNext(it, sKey, cVal))
|
if (!pXData->GetNext(it, sKey, cVal))
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if (cVal.nVt == VT_BSTR)
|
if (cVal.nVt == AecXData::kTypeString)
|
||||||
{
|
{
|
||||||
sHandle = cVal.pszVal;
|
sHandle = cVal.pszVal;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
#include <map>
|
#include <map>
|
||||||
#include "dbfiler.h"
|
#include "dbfiler.h"
|
||||||
#include "shJson.h"
|
#include "shJson.h"
|
||||||
|
#include <wtypes.h> // VARENUM / VT_* ,供 AecXData::EType 使用
|
||||||
|
|
||||||
#ifdef AECRXBASE_EXPORT
|
#ifdef AECRXBASE_EXPORT
|
||||||
#define AECDLLIMPEXP __declspec(dllexport)
|
#define AECDLLIMPEXP __declspec(dllexport)
|
||||||
@@ -35,21 +36,29 @@
|
|||||||
typedef std::pair<CString, CString> SH_BIM_REC;
|
typedef std::pair<CString, CString> SH_BIM_REC;
|
||||||
typedef std::vector<SH_BIM_REC> SH_BIM_BLOCK;
|
typedef std::vector<SH_BIM_REC> SH_BIM_BLOCK;
|
||||||
|
|
||||||
typedef struct AecXData
|
// AecXData 会被其它模块(CoreLibrary / 各 Cmd)直接构造使用,必须随 AecRxBase 一起导出,
|
||||||
|
// 否则成员函数定义在 .cpp 里时其它模块会 LNK2019(unresolved external symbol)。
|
||||||
|
typedef struct AECDLLIMPEXP AecXData
|
||||||
{
|
{
|
||||||
/*
|
// 数据类型标签(nVt)。直接用 wtypes.h 的 VARENUM(VT_*) 组合来表达,直观且与
|
||||||
VT_I4 : int
|
// 原实现逐位一致;nVt 会写入 DWG/DXF/XData,改数值会破坏旧图兼容,务必保持不变。
|
||||||
VT_BSTR : psz
|
enum EType
|
||||||
VT_R8 : double
|
{
|
||||||
VT_BYREF | VT_R8
|
kTypeShort = VT_I2, // short
|
||||||
VT_BYREF | VT_R8 + 1 pt
|
kTypeInt = VT_I4, // int
|
||||||
VT_BYREF | VT_R8 + 2
|
kTypeDouble = VT_R8, // double
|
||||||
VT_BYREF | VT_R8 + 3 vect
|
kTypeString = VT_BSTR, // TCHAR* 字符串
|
||||||
VT_UI4 : id
|
kTypeSoftId = VT_UI4, // AcDbObjectId 软指针
|
||||||
VT_BYREF | VT_R8 + 4 : matrix3d
|
kTypeInt64 = VT_I8, // 历史遗留(仅读)
|
||||||
VT_BYREF | VT_R8 + 5 : binary data
|
kTypeHardId = VT_UI8, // AcDbObjectId 硬指针
|
||||||
|
kTypePoint = (VT_BYREF | VT_R8), // 点,不随实体变换
|
||||||
|
kTypePointWorld = (VT_BYREF | VT_R8) + 1, // 点,随实体变换
|
||||||
|
kTypeVector = (VT_BYREF | VT_R8) + 2, // 向量,不随实体变换
|
||||||
|
kTypeVectorWorld = (VT_BYREF | VT_R8) + 3, // 向量,随实体变换
|
||||||
|
kTypeMatrix = (VT_BYREF | VT_R8) + 4, // 矩阵(16个double,二进制块,128字节)
|
||||||
|
kTypeBinary = (VT_BYREF | VT_R8) + 5, // 二进制块
|
||||||
|
};
|
||||||
|
|
||||||
*/
|
|
||||||
int nVt;
|
int nVt;
|
||||||
LONG_PTR npszLen; //对应字符数据长度
|
LONG_PTR npszLen; //对应字符数据长度
|
||||||
|
|
||||||
@@ -61,23 +70,41 @@ typedef struct AecXData
|
|||||||
TCHAR* pszVal; // 字符数据
|
TCHAR* pszVal; // 字符数据
|
||||||
void* pData; // binary data
|
void* pData; // binary data
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// 1. 默认构造函数,替代原有代码中散落的 memset(&xdata, 0, sizeof(xdata));
|
||||||
|
// 实现见 AecDbObjXDataMap.cpp(随本 DLL 导出,其它模块可直接构造)。
|
||||||
|
AecXData();
|
||||||
|
|
||||||
|
// 2. 核心清理函数
|
||||||
|
void Free();
|
||||||
|
|
||||||
|
// 3. 深拷贝:先释放自身已持有的资源,再从 src 深拷贝。
|
||||||
|
// 字符串/矩阵/二进制会重新分配内存,不与 src 共享缓冲;
|
||||||
|
// 支持类型变化(nVt 不同也照常覆盖)。this == &src 时直接返回。
|
||||||
|
bool CopyFrom(const AecXData &src);
|
||||||
|
|
||||||
}AECXDATA;
|
}AECXDATA;
|
||||||
|
|
||||||
class AECDLLIMPEXP AecDbObjXDataMap
|
class AECDLLIMPEXP AecDbObjXDataMap
|
||||||
{
|
{
|
||||||
|
private:
|
||||||
|
static const int g_nVersion;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
AecDbObjXDataMap();
|
AecDbObjXDataMap();
|
||||||
AecDbObjXDataMap(const AecDbObjXDataMap& datamap);
|
AecDbObjXDataMap(const AecDbObjXDataMap& datamap);
|
||||||
virtual ~AecDbObjXDataMap();
|
virtual ~AecDbObjXDataMap();
|
||||||
|
|
||||||
|
// 把 kTypeMatrix 的 16 个 double 二进制块格式化为逗号分隔文本(供显示/比较使用)
|
||||||
|
static CString MatrixToString(const AecXData& xdata);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
BOOL SetAt(LPCTSTR pszKey,int nVal);
|
BOOL SetAt(LPCTSTR pszKey, const int &nVal);
|
||||||
BOOL SetAt(LPCTSTR pszKey, DWORD dw);
|
BOOL SetAt(LPCTSTR pszKey, const DWORD &dw);
|
||||||
|
|
||||||
BOOL SetAt(LPCTSTR pszKey, Adesk::Int16 nVal);
|
BOOL SetAt(LPCTSTR pszKey, const Adesk::Int16 &nVal);
|
||||||
|
|
||||||
BOOL SetAt(LPCTSTR pszKey,double dVal);
|
BOOL SetAt(LPCTSTR pszKey, const double &dVal);
|
||||||
|
|
||||||
BOOL SetAt(LPCTSTR pszKey,const AcGeDoubleArray& arVal);
|
BOOL SetAt(LPCTSTR pszKey,const AcGeDoubleArray& arVal);
|
||||||
BOOL SetAt(LPCTSTR pszKey,const AcGeVector3d& vt,BOOL bTransformBy = FALSE);
|
BOOL SetAt(LPCTSTR pszKey,const AcGeVector3d& vt,BOOL bTransformBy = FALSE);
|
||||||
@@ -95,6 +122,11 @@ public:
|
|||||||
BOOL SetAt(LPCTSTR pszKey,const AcGeMatrix3d& xform);
|
BOOL SetAt(LPCTSTR pszKey,const AcGeMatrix3d& xform);
|
||||||
|
|
||||||
BOOL SetAt(LPCTSTR pszKey,void* pData,int nSize);
|
BOOL SetAt(LPCTSTR pszKey,void* pData,int nSize);
|
||||||
|
|
||||||
|
BOOL SetAt(LPCTSTR pszKey, const AecDbObjXDataMap& xDataMap);
|
||||||
|
|
||||||
|
BOOL GetAt(LPCTSTR pszKey, AecDbObjXDataMap& xDataMap);
|
||||||
|
|
||||||
BOOL GetAt(LPCTSTR pszKey,void*& pData,int& nSize) const;
|
BOOL GetAt(LPCTSTR pszKey,void*& pData,int& nSize) const;
|
||||||
|
|
||||||
BOOL GetAt(LPCTSTR pszKey,int& nVal) const;
|
BOOL GetAt(LPCTSTR pszKey,int& nVal) const;
|
||||||
@@ -189,7 +221,8 @@ public:
|
|||||||
|
|
||||||
//prinf输出
|
//prinf输出
|
||||||
void List() const;
|
void List() const;
|
||||||
void List(CListCtrl *pList, int nImage) const;
|
// 输出到字符串数组:每个元素占两项(先 key,后 value),供界面按两列展示。
|
||||||
|
void List(std::vector<CString> &pList) const;
|
||||||
|
|
||||||
int ComparedTo(const AecDbObjXDataMap* pXDataMap) const;
|
int ComparedTo(const AecDbObjXDataMap* pXDataMap) const;
|
||||||
|
|
||||||
@@ -242,8 +275,13 @@ private:
|
|||||||
|
|
||||||
void SecondAsKey(CString& sTemp,AecXData& xData);
|
void SecondAsKey(CString& sTemp,AecXData& xData);
|
||||||
|
|
||||||
|
// 把 xdata 以 pszKey 存入(已存在则覆盖)。接管 xdata 的所有权(内部把源置空)。
|
||||||
|
void SetXData(LPCTSTR pszKey, AecXData &xdata);
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
mutable SHJson::WValue m_json;//临时,不序列化
|
mutable SHJson::WValue m_json;//临时,不序列化
|
||||||
std::map<CString,AecXData> m_xData;//序列化
|
std::map<CString,AecXData> m_xData;//序列化
|
||||||
|
|
||||||
};
|
};
|
||||||
#endif //_AecDbObjXDataMap_H__
|
#endif //_AecDbObjXDataMap_H__
|
||||||
Reference in new issue
Block a user