582 lines
15 KiB
C++
582 lines
15 KiB
C++
#include "stdafx.h"
|
|
#include "StdArx.h"
|
|
#include "SZMXDlg.h"
|
|
#include "AecDbX3dPart.h"
|
|
|
|
#ifndef IMG_ROOT
|
|
#define IMG_ROOT 7
|
|
#endif
|
|
|
|
#define IMG_ITEM 1
|
|
#define IMG_ITEMSEL 2
|
|
|
|
#define IMG_SUBITEM 0
|
|
#define IMG_SUBITEMSEL 0
|
|
|
|
#ifndef WM_INPLACEKILLFOCUS
|
|
#define WM_INPLACEKILLFOCUS (WM_USER+0x1234)
|
|
#endif
|
|
|
|
CString FormatToString(double dVal)
|
|
{
|
|
CString sTemp;
|
|
sTemp.Format(_T("%g"),dVal);
|
|
return sTemp;
|
|
}
|
|
|
|
CString FormatToString(int nVal)
|
|
{
|
|
CString sTemp;
|
|
sTemp.Format(_T("%d"),nVal);
|
|
return sTemp;
|
|
}
|
|
|
|
IMPLEMENT_DYNAMIC(CSZMXDlg, CDialog)
|
|
|
|
CSZMXDlg::CSZMXDlg(CWnd* pParent /*=NULL*/)
|
|
: CDialog(CSZMXDlg::IDD, pParent)
|
|
{
|
|
m_hCurItem = NULL;
|
|
m_bModify = FALSE;
|
|
m_vtZ.set(0,0,0);
|
|
memset(&m_wallDataSide,0,sizeof(WallData));
|
|
}
|
|
|
|
CSZMXDlg::~CSZMXDlg()
|
|
{
|
|
}
|
|
|
|
void CSZMXDlg::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
DDX_Control(pDX, IDC_TREE1, m_wndModelTree);
|
|
DDX_Control(pDX, IDC_LIST1, m_wndProbList);
|
|
}
|
|
|
|
BEGIN_MESSAGE_MAP(CSZMXDlg, CDialog)
|
|
ON_BN_CLICKED(IDOK, &CSZMXDlg::OnBnClickedOk)
|
|
ON_NOTIFY(NM_CLICK, IDC_TREE1, &CSZMXDlg::OnNMClickTree1)
|
|
ON_MESSAGE(WM_INPLACEKILLFOCUS,&CSZMXDlg::OnEditKillFocus)
|
|
END_MESSAGE_MAP()
|
|
|
|
|
|
BOOL CSZMXDlg::OnInitDialog()
|
|
{
|
|
CDialog::OnInitDialog();
|
|
|
|
CBitmap bmp;
|
|
if (!bmp.LoadBitmap (IDB_BITMAPPRIV))
|
|
{
|
|
AfxMessageBox(_T ("Can't load bitmap: %x\n"), IDB_BITMAPPRIV);
|
|
ASSERT (FALSE);
|
|
return FALSE;
|
|
}
|
|
|
|
BITMAP bmpObj;
|
|
bmp.GetBitmap (&bmpObj);
|
|
|
|
UINT nFlags = ILC_COLOR24 | ILC_MASK;
|
|
|
|
m_Imagelist.Create (16, bmpObj.bmHeight, nFlags, 0, 0);
|
|
m_Imagelist.Add (&bmp, RGB (255, 0, 0));
|
|
m_wndModelTree.SetImageList(&m_Imagelist,TVSIL_NORMAL);
|
|
|
|
m_wndProbList.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT | LVS_EX_SINGLEROW);
|
|
m_wndProbList.InsertColumn(0,_T("名称"),LVCFMT_LEFT,160,160);
|
|
m_wndProbList.InsertColumn(1,_T("属性"),LVCFMT_LEFT,160,160);
|
|
m_wndProbList.InsertColumn(2,_T("备份"),LVCFMT_LEFT,0,0);
|
|
m_wndProbList.InsertColumn(3,_T("类型"),LVCFMT_LEFT,0,0);
|
|
m_wndProbList.InsertColumn(4,_T("KEY"),LVCFMT_LEFT,0,0);
|
|
m_wndProbList.InsertColumn(5,_T("单位"),LVCFMT_LEFT,160,160);
|
|
|
|
m_wndProbList.SetColumnItemData(1,NULL,ET_Edit);
|
|
|
|
UpdateData(FALSE);
|
|
|
|
ShowPoolBasinParts();
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
void CSZMXDlg::OnBnClickedOk()
|
|
{
|
|
if (m_bModify) //重建
|
|
{
|
|
AcAxDocLock lock;
|
|
Acad::ErrorStatus es;
|
|
AcDbEntity* pEnt = NULL;
|
|
|
|
if ( Acad::eOk == (es = acdbOpenAcDbEntity(pEnt,m_idPoolBasin,AcDb::kForWrite)))
|
|
{
|
|
AecDbXSlab* pBasin = AecDbXSlab::cast(pEnt);
|
|
if (pBasin != NULL)
|
|
{
|
|
PoolData data;
|
|
pBasin->GetBasinSlabData(data);
|
|
|
|
AcGePoint3d ptOrg = pBasin->GetBasinOrg();//底板中心
|
|
|
|
ESection eShap = pBasin->GetBasinShape();
|
|
switch(eShap)
|
|
{
|
|
case eRect:
|
|
{
|
|
RecreateRectBasin(pBasin);
|
|
break;
|
|
}
|
|
case eCircle:
|
|
{
|
|
RecreateCircleBasin(pBasin);
|
|
break;
|
|
}
|
|
case eEllispe:
|
|
{
|
|
RecreateEllispeBasin(pBasin);
|
|
break;
|
|
}
|
|
case eUserDef:
|
|
{
|
|
//...
|
|
break;
|
|
}
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
pEnt->close();
|
|
}
|
|
}
|
|
OnOK();
|
|
}
|
|
|
|
void CSZMXDlg::RecreateRectBasin(AecDbXSlab* pBasin)
|
|
{
|
|
PoolData data;
|
|
pBasin->GetBasinSlabData(data);
|
|
|
|
double dEl = data.m_dBomEl;//原真实标高
|
|
double dNewEl = m_vtZ.z + dEl;//现在真实标高
|
|
double dWallH = data.m_dWallH;
|
|
|
|
//标高的变化转为墙高
|
|
//判断是否有堰墙
|
|
if (data.m_dWallH < 1.e-3)//外墙围池,本身无墙
|
|
{
|
|
//如果标高下降,产生的墙高
|
|
if (dNewEl - dEl < 1.e-3)
|
|
{
|
|
dWallH = dEl - dNewEl;
|
|
data.m_dWallThick = m_wallDataSide.dThick;
|
|
dWallH -= data.m_dBomThick;
|
|
}
|
|
else//标高上升,不产生新墙
|
|
{
|
|
dWallH = data.m_dWallH + dEl - dNewEl;
|
|
dWallH -= data.m_dBomThick;
|
|
}
|
|
|
|
if (dWallH < 1.e-3)
|
|
dWallH = 0.0;
|
|
|
|
//变成内部有墙
|
|
data.m_dData[0] += 2 * m_wallDataSide.dThick;
|
|
data.m_dData[1] += 2 * m_wallDataSide.dThick;
|
|
|
|
AcGePoint3d ptCenPos = pBasin->GetBasinOrg();
|
|
ptCenPos.z = dNewEl;
|
|
pBasin->SetRectBasin(data.m_dData[0],data.m_dData[1],data.m_dBomThick,dWallH,data.m_dWallThick,ptCenPos);
|
|
}
|
|
else//有内部堰墙
|
|
{
|
|
//新的堰墙高度
|
|
dWallH += (dEl - dNewEl);
|
|
if (dWallH < 1.e-3)
|
|
dWallH = 0.0;
|
|
|
|
//变成内部有墙
|
|
data.m_dData[0] += 2.0 * data.m_dWallThick;
|
|
data.m_dData[1] += 2.0 * data.m_dWallThick;
|
|
|
|
AcGePoint3d ptCenPos = pBasin->GetBasinOrg();
|
|
ptCenPos.z = dNewEl;
|
|
|
|
pBasin->SetRectBasin(data.m_dData[0],data.m_dData[1],data.m_dBomThick,dWallH,data.m_dWallThick,ptCenPos);
|
|
}
|
|
}
|
|
|
|
void CSZMXDlg::RecreateCircleBasin(AecDbXSlab* pBasin)
|
|
{
|
|
|
|
}
|
|
|
|
void CSZMXDlg::RecreateEllispeBasin(AecDbXSlab* pBasin)
|
|
{
|
|
|
|
}
|
|
|
|
void CSZMXDlg::SetPoolData(const AcDbObjectId& id)
|
|
{
|
|
m_idPoolBasin = id;
|
|
}
|
|
|
|
void CSZMXDlg::SetWallData(const WallData& wData)
|
|
{
|
|
memcpy(&m_wallDataSide,&wData,sizeof(WallData));
|
|
}
|
|
|
|
void CSZMXDlg::ShowPoolBasinParts()
|
|
{
|
|
m_wndModelTree.DeleteAllItems();
|
|
m_mapItemToID.RemoveAll();
|
|
|
|
HTREEITEM hRoot = m_wndModelTree.InsertItem(_T("水池模型"),IMG_ROOT,IMG_ROOT);
|
|
|
|
AcAxDocLock lock;
|
|
Acad::ErrorStatus es;
|
|
AcDbEntity* pEnt = NULL;
|
|
HTREEITEM hItem = NULL;
|
|
|
|
if ( Acad::eOk == (es = acdbOpenAcDbEntity(pEnt,m_idPoolBasin,AcDb::kForRead)))
|
|
{
|
|
AecDbXSlab* pBasin = AecDbXSlab::cast(pEnt);
|
|
if (pBasin != NULL)
|
|
{
|
|
CString sTemp;
|
|
PoolData data;
|
|
pBasin->GetBasinSlabData(data);
|
|
|
|
int nItem = m_wndProbList.InsertItem(m_wndProbList.GetItemCount(),_T("内底标高"));
|
|
m_wndProbList.SetItemText(nItem,1,FormatToString(data.m_dBomEl + m_vtZ.z));
|
|
m_wndProbList.SetItemText(nItem,2,FormatToString(data.m_dBomEl));
|
|
m_wndProbList.SetItemText(nItem,3,_T("double"));
|
|
m_wndProbList.SetItemText(nItem,4,_T(" "));
|
|
m_wndProbList.SetItemText(nItem,5,_T("毫米"));
|
|
|
|
nItem = m_wndProbList.InsertItem(m_wndProbList.GetItemCount(),_T("底部壁厚"));
|
|
m_wndProbList.SetItemText(nItem,1,FormatToString(data.m_dBomThick));
|
|
m_wndProbList.SetItemText(nItem,2,FormatToString(data.m_dBomThick));
|
|
m_wndProbList.SetItemText(nItem,3,_T("double"));
|
|
m_wndProbList.SetItemText(nItem,4,KEY_THICK);
|
|
m_wndProbList.SetItemText(nItem,5,_T("毫米"));
|
|
|
|
nItem = m_wndProbList.InsertItem(m_wndProbList.GetItemCount(),_T("材质"));
|
|
pBasin->GetSpecialtyData(AcDb::kForRead)->GetAt(KEY_MATERIAL,sTemp);
|
|
m_wndProbList.SetItemText(nItem,1,sTemp);
|
|
m_wndProbList.SetItemText(nItem,2,sTemp);
|
|
m_wndProbList.SetItemText(nItem,3,_T("string"));
|
|
m_wndProbList.SetItemText(nItem,4,KEY_MATERIAL);
|
|
|
|
ESection eShap = pBasin->GetBasinShape();
|
|
switch(eShap)
|
|
{
|
|
case eRect:
|
|
{
|
|
nItem = m_wndProbList.InsertItem(m_wndProbList.GetItemCount(),_T("池内长度"));
|
|
m_wndProbList.SetItemText(nItem,1,FormatToString(data.m_dData[0]));
|
|
m_wndProbList.SetItemText(nItem,2,FormatToString(data.m_dData[0]));
|
|
m_wndProbList.SetItemText(nItem,3,_T("double"));
|
|
m_wndProbList.SetItemText(nItem,4,KEY_Length);
|
|
m_wndProbList.SetItemText(nItem,5,_T("毫米"));
|
|
|
|
nItem = m_wndProbList.InsertItem(m_wndProbList.GetItemCount(),_T("池内宽度"));
|
|
m_wndProbList.SetItemText(nItem,1,FormatToString(data.m_dData[1]));
|
|
m_wndProbList.SetItemText(nItem,2,FormatToString(data.m_dData[1]));
|
|
m_wndProbList.SetItemText(nItem,3,_T("double"));
|
|
m_wndProbList.SetItemText(nItem,4,KEY_Width);
|
|
m_wndProbList.SetItemText(nItem,5,_T("毫米"));
|
|
|
|
nItem = m_wndProbList.InsertItem(m_wndProbList.GetItemCount(),_T("是否平底"));
|
|
sTemp = data.m_nHorBom ? _T("是") : _T("否");
|
|
m_wndProbList.SetItemText(nItem,1,sTemp);
|
|
m_wndProbList.SetItemText(nItem,2,sTemp);
|
|
m_wndProbList.SetItemText(nItem,3,_T("bool"));
|
|
m_wndProbList.SetItemText(nItem,4,KEY_HORBOM);
|
|
|
|
break;
|
|
}
|
|
case eCircle:
|
|
{
|
|
nItem = m_wndProbList.InsertItem(m_wndProbList.GetItemCount(),_T("半径"));
|
|
m_wndProbList.SetItemText(nItem,1,FormatToString(data.m_dData[2]));
|
|
m_wndProbList.SetItemText(nItem,2,FormatToString(data.m_dData[2]));
|
|
m_wndProbList.SetItemText(nItem,3,_T("double"));
|
|
m_wndProbList.SetItemText(nItem,4,KEY_RAD);
|
|
m_wndProbList.SetItemText(nItem,5,_T("毫米"));
|
|
|
|
nItem = m_wndProbList.InsertItem(m_wndProbList.GetItemCount(),_T("是否平底"));
|
|
sTemp = data.m_nHorBom ? _T("是") : _T("否");
|
|
m_wndProbList.SetItemText(nItem,1,sTemp);
|
|
m_wndProbList.SetItemText(nItem,2,sTemp);
|
|
m_wndProbList.SetItemText(nItem,3,_T("bool"));
|
|
m_wndProbList.SetItemText(nItem,4,KEY_HORBOM);
|
|
|
|
break;
|
|
}
|
|
case eEllispe:
|
|
{
|
|
nItem = m_wndProbList.InsertItem(m_wndProbList.GetItemCount(),_T("主半径"));
|
|
m_wndProbList.SetItemText(nItem,1,FormatToString(data.m_dData[2]));
|
|
m_wndProbList.SetItemText(nItem,2,FormatToString(data.m_dData[2]));
|
|
m_wndProbList.SetItemText(nItem,3,_T("double"));
|
|
m_wndProbList.SetItemText(nItem,4,KEY_RAD);
|
|
m_wndProbList.SetItemText(nItem,5,_T("毫米"));
|
|
|
|
nItem = m_wndProbList.InsertItem(m_wndProbList.GetItemCount(),_T("半径曲率"));
|
|
m_wndProbList.SetItemText(nItem,1,FormatToString(data.m_dData[3]));
|
|
m_wndProbList.SetItemText(nItem,2,FormatToString(data.m_dData[3]));
|
|
m_wndProbList.SetItemText(nItem,3,_T("double"));
|
|
m_wndProbList.SetItemText(nItem,4,KEY_RRATIO);
|
|
m_wndProbList.SetItemText(nItem,5,_T("毫米"));
|
|
|
|
nItem = m_wndProbList.InsertItem(m_wndProbList.GetItemCount(),_T("是否平底"));
|
|
sTemp = data.m_nHorBom ? _T("是") : _T("否");
|
|
m_wndProbList.SetItemText(nItem,1,sTemp);
|
|
m_wndProbList.SetItemText(nItem,2,sTemp);
|
|
m_wndProbList.SetItemText(nItem,3,_T("bool"));
|
|
m_wndProbList.SetItemText(nItem,4,KEY_HORBOM);
|
|
|
|
break;
|
|
}
|
|
case eUserDef:
|
|
{
|
|
break;
|
|
}
|
|
default:
|
|
break;
|
|
}
|
|
|
|
CString sID,sName,sItem;
|
|
AecDbX3dPart* pPart = NULL;
|
|
int nCount = pBasin->GetX3dPartCount();
|
|
|
|
for (int i = 0;i < nCount;i++)
|
|
{
|
|
pPart = pBasin->GetX3dPart(i);
|
|
|
|
pPart->GetName(sName);
|
|
sID = pPart->GetGUID();
|
|
|
|
hItem = m_wndModelTree.InsertItem(sName,IMG_SUBITEM,IMG_SUBITEM,hRoot);
|
|
if (hItem != NULL)
|
|
{
|
|
sItem.Format(_T("%p"),hItem);
|
|
m_mapItemToID.SetAt(sItem,sID);
|
|
}
|
|
}
|
|
m_wndModelTree.SelectItem(hRoot);
|
|
m_wndModelTree.Expand(hRoot,TVE_EXPAND);
|
|
}
|
|
pEnt->close();
|
|
}
|
|
}
|
|
|
|
void CSZMXDlg::OnNMClickTree1(NMHDR *pNMHDR, LRESULT *pResult)
|
|
{
|
|
CPoint point,ptcursor;
|
|
::GetCursorPos(&point);
|
|
ptcursor = point;
|
|
m_wndModelTree.ScreenToClient(&point);
|
|
|
|
UINT uFlags;
|
|
|
|
HTREEITEM hItem = m_wndModelTree.HitTest(point, &uFlags), hP(NULL);
|
|
if (hItem != NULL && hItem != m_hCurItem)
|
|
{
|
|
m_hCurItem = hItem;
|
|
ShowPartInfo(hItem);
|
|
}
|
|
*pResult = 0;
|
|
}
|
|
|
|
void CSZMXDlg::ShowPartInfo(HTREEITEM hItem)
|
|
{
|
|
CString sItem;
|
|
sItem.Format(_T("%p"),hItem);
|
|
|
|
CString sID,sName,sTemp;
|
|
if ( m_mapItemToID.Lookup(sItem,sID))
|
|
{
|
|
m_wndProbList.DeleteAllItems();
|
|
|
|
double dVal = 0.0;
|
|
int nItem = -1;
|
|
AecDbX3dPart* pPart = NULL;
|
|
AcDbEntity* pEnt = NULL;
|
|
|
|
Acad::ErrorStatus es;
|
|
AcAxDocLock lock;
|
|
if ( Acad::eOk == (es = acdbOpenAcDbEntity(pEnt,m_idPoolBasin,AcDb::kForRead)))
|
|
{
|
|
AecDbXSlab* pBasin = AecDbXSlab::cast(pEnt);
|
|
if (pBasin != NULL)
|
|
{
|
|
pPart = pBasin->GetX3dPart(sID);
|
|
if (pPart != NULL)
|
|
{
|
|
pPart->GetName(sName);
|
|
|
|
if (sName.CompareNoCase(_T("墙体")) == 0)
|
|
{
|
|
nItem = m_wndProbList.InsertItem(m_wndProbList.GetItemCount(),_T("墙厚"));
|
|
pPart->GetSpecialtyData()->GetAt(KEY_THICK,dVal);
|
|
m_wndProbList.SetItemText(nItem,1,FormatToString(dVal));
|
|
m_wndProbList.SetItemText(nItem,2,FormatToString(dVal));
|
|
m_wndProbList.SetItemText(nItem,3,_T("double"));
|
|
m_wndProbList.SetItemText(nItem,4,KEY_THICK);
|
|
m_wndProbList.SetItemText(nItem,5,_T("毫米"));
|
|
|
|
nItem = m_wndProbList.InsertItem(m_wndProbList.GetItemCount(),_T("墙高"));
|
|
pPart->GetSpecialtyData()->GetAt(KEY_HEIGHT,dVal);
|
|
m_wndProbList.SetItemText(nItem,1,FormatToString(dVal));
|
|
m_wndProbList.SetItemText(nItem,2,FormatToString(dVal));
|
|
m_wndProbList.SetItemText(nItem,3,_T("double"));
|
|
m_wndProbList.SetItemText(nItem,4,KEY_HEIGHT);
|
|
m_wndProbList.SetItemText(nItem,5,_T("毫米"));
|
|
|
|
nItem = m_wndProbList.InsertItem(m_wndProbList.GetItemCount(),_T("材质"));
|
|
pPart->GetSpecialtyData()->GetAt(KEY_MATERIAL,sTemp);
|
|
m_wndProbList.SetItemText(nItem,1,sTemp);
|
|
m_wndProbList.SetItemText(nItem,2,sTemp);
|
|
m_wndProbList.SetItemText(nItem,3,_T("string"));
|
|
m_wndProbList.SetItemText(nItem,4,KEY_MATERIAL);
|
|
}
|
|
}
|
|
}
|
|
pEnt->close();
|
|
}
|
|
}
|
|
}
|
|
|
|
LRESULT CSZMXDlg::OnEditKillFocus(WPARAM wp,LPARAM lp)
|
|
{
|
|
int nCtrlID = (int)wp;
|
|
if (nCtrlID == m_wndProbList.GetDlgCtrlID())
|
|
{
|
|
LV_DISPINFO* pDisp = (LV_DISPINFO*)lp;
|
|
|
|
CString sVal = pDisp->item.pszText;
|
|
int nItem = pDisp->item.iItem;
|
|
int nSubItem = pDisp->item.iSubItem;
|
|
|
|
HTREEITEM hItem = m_wndModelTree.GetSelectedItem();
|
|
if (hItem != NULL)
|
|
{
|
|
CString sItem;
|
|
sItem.Format(_T("%p"),hItem);
|
|
CString sID,sName,sTemp,sBakVal,sType,sKey;
|
|
|
|
if ( m_mapItemToID.Lookup(sItem,sID))
|
|
{
|
|
double dVal = 0.0;
|
|
AecDbX3dPart* pPart = NULL;
|
|
AcDbEntity* pEnt = NULL;
|
|
|
|
Acad::ErrorStatus es;
|
|
AcAxDocLock lock;
|
|
if ( Acad::eOk == (es = acdbOpenAcDbEntity(pEnt,m_idPoolBasin,AcDb::kForWrite)))
|
|
{
|
|
AecDbXSlab* pBasin = AecDbXSlab::cast(pEnt);
|
|
if (pBasin != NULL)
|
|
{
|
|
PoolData data;
|
|
pBasin->GetBasinSlabData(data);
|
|
ESection eShap = pBasin->GetBasinShape();
|
|
|
|
pPart = pBasin->GetX3dPart(sID);
|
|
if (pPart != NULL)
|
|
{
|
|
pPart->GetName(sName);
|
|
|
|
sTemp = m_wndProbList.GetItemText(nItem,0);//NAME
|
|
sBakVal = m_wndProbList.GetItemText(nItem,2);//BACK
|
|
|
|
if (sVal.CompareNoCase(sBakVal) != 0)//变更
|
|
{
|
|
m_bModify = TRUE;
|
|
|
|
sType = m_wndProbList.GetItemText(nItem,3);
|
|
sKey = m_wndProbList.GetItemText(nItem,4);
|
|
sKey.TrimRight();
|
|
|
|
if (sKey.IsEmpty() && sName.CompareNoCase(_T("池底板")) == 0)//是标高
|
|
{
|
|
m_vtZ.z += ( _ttof(sVal) - _ttof(sBakVal) );
|
|
}
|
|
|
|
if (sType.CompareNoCase(_T("double")) == 0)
|
|
{
|
|
if (!sKey.IsEmpty())
|
|
{
|
|
pPart->GetSpecialtyData()->SetAt(sKey,_ttof(sVal));
|
|
}
|
|
}
|
|
else if (sType.CompareNoCase(_T("string")) == 0)
|
|
{
|
|
if (!sKey.IsEmpty())
|
|
{
|
|
pPart->GetSpecialtyData()->SetAt(sKey,sVal);
|
|
}
|
|
}
|
|
/*else if (sType.CompareNoCase(_T("bool")) == 0)
|
|
{
|
|
}*/
|
|
}
|
|
}
|
|
}
|
|
pEnt->close();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if ( sName.CompareNoCase(_T("池底板")) == 0 )
|
|
{
|
|
double dVal = 0.0;
|
|
AcDbEntity* pEnt = NULL;
|
|
|
|
Acad::ErrorStatus es;
|
|
AcAxDocLock lock;
|
|
|
|
if ( Acad::eOk == (es = acdbOpenAcDbEntity(pEnt,m_idPoolBasin,AcDb::kForWrite)))
|
|
{
|
|
AecDbXSlab* pBasin = AecDbXSlab::cast(pEnt);
|
|
if (pBasin != NULL)
|
|
{
|
|
sTemp = m_wndProbList.GetItemText(nItem,0);//NAME
|
|
sBakVal = m_wndProbList.GetItemText(nItem,2);//BACK
|
|
|
|
sType = m_wndProbList.GetItemText(nItem,3);
|
|
sKey = m_wndProbList.GetItemText(nItem,4);
|
|
sKey.TrimRight();
|
|
|
|
if (sKey.IsEmpty() )//是标高
|
|
{
|
|
m_vtZ.z += ( _ttof(sVal) - _ttof(sBakVal) );
|
|
m_bModify = TRUE;
|
|
}
|
|
|
|
if (sType.CompareNoCase(_T("double")) == 0)
|
|
{
|
|
if (!sKey.IsEmpty())
|
|
{
|
|
pBasin->GetSpecialtyData(AcDb::kForWrite)->SetAt(sKey,_ttof(sVal));
|
|
m_bModify = TRUE;
|
|
}
|
|
}
|
|
else if (sType.CompareNoCase(_T("string")) == 0)
|
|
{
|
|
if (!sKey.IsEmpty())
|
|
{
|
|
pBasin->GetSpecialtyData(AcDb::kForWrite)->SetAt(sKey,sVal);
|
|
m_bModify = TRUE;
|
|
}
|
|
}
|
|
}
|
|
pEnt->close();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return 0L;
|
|
}
|