351 lines
7.9 KiB
C++
351 lines
7.9 KiB
C++
#include "stdafx.h"
|
|
#include "StdArx.h"
|
|
#include "SZSXDlg.h"
|
|
#include "AecDbEwEquipment.h"
|
|
#include "CoreTools.h"
|
|
|
|
DLLIMPEXP CString IDCreate();
|
|
|
|
IMPLEMENT_DYNAMIC(CSZSXDlg, CDialog)
|
|
|
|
CSZSXDlg::CSZSXDlg(CWnd* pParent /*=NULL*/)
|
|
: CDialog(CSZSXDlg::IDD, pParent)
|
|
, m_dBomEl(0)
|
|
, m_dBomThick(400.0)
|
|
, m_dH(0.0)
|
|
, m_dWallThick(0.0)
|
|
, m_bUsePickWalls(FALSE)
|
|
, m_nAlign(1)
|
|
, m_dHZ(0)
|
|
, m_dHZ2(0)
|
|
, m_sZFlag(_T(""))
|
|
, m_sNO(_T(""))
|
|
, m_bNOSetDefault(FALSE)
|
|
, m_bAddHatch(TRUE)
|
|
, m_sHatch(HATCH_DEFAULT)
|
|
{
|
|
m_sGradX = _T("0");
|
|
m_sGradY = _T("0");
|
|
m_sMaterial = _T("钢筋混凝土");
|
|
m_sPurpose = _T("过滤池");
|
|
m_bHasWalls = false;
|
|
|
|
GET_CACHE(CSZSXDlg
|
|
, %f%f%f%f%f%f%s%s%s%s%s%d%d%s
|
|
, &m_dBomEl
|
|
, &m_dBomThick
|
|
, &m_dH
|
|
, &m_dWallThick
|
|
, &m_dHZ
|
|
, &m_dHZ2
|
|
, &m_sGradX
|
|
, &m_sGradY
|
|
, &m_sMaterial
|
|
, &m_sPurpose
|
|
, &m_sZFlag
|
|
, &m_bUsePickWalls
|
|
, &m_nAlign
|
|
, &m_sHatch
|
|
);
|
|
m_nAlign = 1;
|
|
m_sNO = IDCreate();
|
|
}
|
|
|
|
CSZSXDlg::~CSZSXDlg()
|
|
{
|
|
}
|
|
|
|
void CSZSXDlg::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
DDX_Text(pDX, IDC_EDIT1, m_dBomEl);
|
|
DDX_Text(pDX, IDC_EDIT2, m_dBomThick);
|
|
DDX_Text(pDX, IDC_EDIT3, m_dH);
|
|
DDX_Text(pDX, IDC_EDIT12, m_dWallThick);
|
|
DDX_Text(pDX, IDC_EDIT4, m_dHZ);
|
|
DDX_Text(pDX, IDC_EDIT5, m_dHZ2);
|
|
DDX_Text(pDX, IDC_EDIT13, m_sGradX);
|
|
DDX_Text(pDX, IDC_EDIT14, m_sGradY);
|
|
DDX_Text(pDX, IDC_EDIT15, m_sMaterial);
|
|
DDX_Text(pDX, IDC_EDIT16, m_sPurpose);
|
|
DDX_Text(pDX, IDC_EDIT18, m_sZFlag);
|
|
DDX_Check(pDX, IDC_CHECK2, m_bUsePickWalls);
|
|
DDX_Radio(pDX, IDC_RADIO1, m_nAlign);
|
|
DDX_Text(pDX, IDC_EDIT6, m_sNO);
|
|
DDX_Check(pDX, IDC_CHECK5, m_bNOSetDefault);
|
|
DDX_Control(pDX, IDC_BTN_FILL, m_wndBtHatch);
|
|
DDX_Check(pDX, IDC_CHECK_HATCH, m_bAddHatch);
|
|
DDX_Text(pDX, IDC_BTN_FILL, m_sHatch);
|
|
}
|
|
|
|
BEGIN_MESSAGE_MAP(CSZSXDlg, CDialog)
|
|
ON_BN_CLICKED(IDOK, &CSZSXDlg::OnBnClickedOk)
|
|
ON_BN_CLICKED(IDC_BUTTON1, &CSZSXDlg::OnBnClickedButton1)
|
|
ON_BN_CLICKED(IDC_CHECK5, &CSZSXDlg::OnBnClickedCheck5)
|
|
ON_BN_CLICKED(IDC_BTN_FILL, &CSZSXDlg::OnBnClickedBtnFill)
|
|
ON_BN_CLICKED(IDC_CHECK_HATCH, &CSZSXDlg::OnBnClickedCheckHatch)
|
|
END_MESSAGE_MAP()
|
|
|
|
|
|
BOOL CSZSXDlg::OnInitDialog()
|
|
{
|
|
CDialog::OnInitDialog();
|
|
|
|
if (m_bHasWalls)
|
|
{
|
|
m_bUsePickWalls = TRUE;
|
|
m_nAlign = 0;
|
|
}
|
|
|
|
if (m_bNOSetDefault)
|
|
{
|
|
GetDlgItem(IDC_EDIT6)->EnableWindow(FALSE);
|
|
}
|
|
|
|
m_wndBtHatch.EnableWindow(m_bAddHatch);
|
|
UpdateData(FALSE);
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
void CSZSXDlg::OnBnClickedOk()
|
|
{
|
|
UpdateData(TRUE);
|
|
|
|
SET_CACHE(CSZSXDlg
|
|
, %f%f%f%f%f%f%s%s%s%s%s%d%d%s
|
|
, m_dBomEl
|
|
, m_dBomThick
|
|
, m_dH
|
|
, m_dWallThick
|
|
, m_dHZ
|
|
, m_dHZ2
|
|
, m_sGradX
|
|
, m_sGradY
|
|
, m_sMaterial
|
|
, m_sPurpose
|
|
, m_sZFlag
|
|
, m_bUsePickWalls
|
|
, m_nAlign
|
|
, m_sHatch
|
|
);
|
|
|
|
UpdateSlabData();
|
|
|
|
OnOK();
|
|
}
|
|
|
|
void CSZSXDlg::GetPoolData(PoolData& data) const
|
|
{
|
|
data.m_dBomEl = m_dBomEl;
|
|
//折算为外底部标高
|
|
data.m_dBomEl -= m_dBomThick;
|
|
|
|
data.m_dBomThick = m_dBomThick;
|
|
data.m_dWallH = m_dH;
|
|
data.m_dWallThick = m_dWallThick;
|
|
|
|
data.m_dHZ = m_dHZ;
|
|
data.m_dHZ2 = m_dHZ2;
|
|
|
|
_tcscpy(data.m_sGradX,(LPCTSTR)m_sGradX);
|
|
_tcscpy(data.m_sGradY,(LPCTSTR)m_sGradY);
|
|
|
|
_tcscpy(data.m_sMaterial,(LPCTSTR)m_sMaterial);
|
|
_tcscpy(data.m_sPurpose,(LPCTSTR)m_sPurpose);
|
|
_tcscpy(data.m_szZHFlag,(LPCTSTR)m_sZFlag);
|
|
_tcscpy(data.m_szNO,(LPCTSTR)m_sNO);
|
|
_tcscpy(data.m_sSectionHatch,(LPCTSTR)m_sHatch);
|
|
}
|
|
|
|
void CSZSXDlg::SetFromId(const AcDbObjectId& id)
|
|
{
|
|
m_idSlab = id;
|
|
|
|
AcDbEntity* pEnt = NULL;
|
|
if (Acad::eOk == acdbOpenAcDbEntity(pEnt,id,AcDb::kForRead))
|
|
{
|
|
AecDbXSlab* pSlab = AecDbXSlab::cast(pEnt);
|
|
if (pSlab != NULL)
|
|
{
|
|
pSlab->GetSpecialtyData()->GetAt(KEY_HZ,m_dHZ);
|
|
pSlab->GetSpecialtyData()->GetAt(KEY_HZ2,m_dHZ2);
|
|
pSlab->GetSpecialtyData()->GetAt(KEY_ZHFS,m_sZFlag);
|
|
pSlab->GetSpecialtyData()->GetAt(KEY_NO,m_sNO);
|
|
pSlab->GetSpecialtyData()->GetAt(KEY_MATERIAL,m_sMaterial);
|
|
pSlab->GetSpecialtyData()->GetAt(KEY_PURPOSE,m_sPurpose);
|
|
pSlab->GetSpecialtyData()->GetAt(KEY_BOMTHICK,m_dBomThick);
|
|
pSlab->GetSpecialtyData()->GetAt(KEY_SECTION_HATCH,m_sHatch);
|
|
pSlab->GetSpecialtyData()->GetAt(KEY_GRADX, m_sGradX);
|
|
pSlab->GetSpecialtyData()->GetAt(KEY_GRADY, m_sGradY);
|
|
|
|
if (m_sHatch == HATCH_NO_NEED)
|
|
m_bAddHatch = FALSE;
|
|
else
|
|
m_bAddHatch = TRUE;
|
|
|
|
pSlab->GetSpecialtyData()->GetAt(KEY_USEPICKWALLS,m_bUsePickWalls);
|
|
pSlab->GetSpecialtyData()->GetAt(KEY_HEIGHT,m_dH);
|
|
pSlab->GetSpecialtyData()->GetAt(KEY_THICK,m_dWallThick);
|
|
|
|
AcGePoint3d ptCenPos;
|
|
pSlab->GetSpecialtyData()->GetAt(KEY_ORGPT,ptCenPos);
|
|
|
|
m_dBomEl = ptCenPos.z;
|
|
m_dBomEl += m_dBomThick;
|
|
}
|
|
pEnt->close();
|
|
}
|
|
}
|
|
|
|
void CSZSXDlg::UpdateSlabData()
|
|
{
|
|
PoolData data;
|
|
GetPoolData(data);
|
|
|
|
AcDbEntity* pEnt = NULL;
|
|
if ( Acad::eOk == acdbOpenAcDbEntity(pEnt,m_idSlab,AcDb::kForWrite))
|
|
{
|
|
AecDbXSlab* pSlab = AecDbXSlab::cast(pEnt);
|
|
if (pSlab != NULL)
|
|
{
|
|
AcDbLine* pLn = AcDbLine::cast(pSlab->GetBaseCurve());
|
|
if (pLn != NULL)
|
|
{
|
|
AcGePoint3d ptSta = pLn->startPoint();
|
|
AcGePoint3d ptEnd = pLn->endPoint();
|
|
|
|
AcGeVector3d vtDir = ptEnd - ptSta;
|
|
if (vtDir.isParallelTo(AcGeVector3d::kZAxis))
|
|
{
|
|
ptSta.z = data.m_dBomEl;
|
|
ptEnd.z = ptSta.z + data.m_dBomThick;
|
|
|
|
pLn->setStartPoint(ptSta);
|
|
pLn->setEndPoint(ptEnd);
|
|
|
|
pSlab->SetBaseCurve(pLn);
|
|
delete pLn;
|
|
}
|
|
else//截面拉伸底板
|
|
{
|
|
AcGeLine3d lnSeg(ptSta,ptEnd);
|
|
if ( AcGePlane::kXYPlane.isParallelTo(lnSeg) )
|
|
{
|
|
ptSta.z = data.m_dBomEl;
|
|
ptEnd.z = data.m_dBomEl;
|
|
|
|
pLn->setStartPoint(ptSta);
|
|
pLn->setEndPoint(ptEnd);
|
|
|
|
pSlab->SetBaseCurve(pLn);
|
|
delete pLn;
|
|
}
|
|
}
|
|
}
|
|
|
|
AcGePoint3d ptCenPos;
|
|
pSlab->GetSpecialtyData()->GetAt(KEY_ORGPT,ptCenPos);
|
|
|
|
ptCenPos.z = data.m_dBomEl;
|
|
pSlab->GetSpecialtyData()->SetAt(KEY_ORGPT,ptCenPos,TRUE);
|
|
|
|
pSlab->GetSpecialtyData()->SetAt(KEY_SECTION_HATCH, data.m_sSectionHatch);
|
|
|
|
pSlab->GetSpecialtyData()->SetAt(KEY_BOMTHICK,data.m_dBomThick);
|
|
|
|
pSlab->GetSpecialtyData()->SetAt(KEY_USEPICKWALLS,m_bUsePickWalls);
|
|
pSlab->GetSpecialtyData()->SetAt(KEY_HEIGHT,data.m_dWallH);
|
|
pSlab->GetSpecialtyData()->SetAt(KEY_THICK,data.m_dWallThick);
|
|
|
|
pSlab->GetSpecialtyData()->SetAt(KEY_MATERIAL,data.m_sMaterial);
|
|
pSlab->GetSpecialtyData()->SetAt(KEY_PURPOSE,data.m_sPurpose);
|
|
|
|
// 下面这3个 KEY,无论将来用或不用,都不要删除,目前靠它来判断底板
|
|
pSlab->GetSpecialtyData()->SetAt(KEY_HZ,data.m_dHZ);
|
|
pSlab->GetSpecialtyData()->SetAt(KEY_HZ2,data.m_dHZ2);
|
|
pSlab->GetSpecialtyData()->SetAt(KEY_ZHFS,data.m_szZHFlag);
|
|
|
|
// 以后的底板都用此标记来判断
|
|
pSlab->SetAt(AecDbXSlab::KEY_DB_Flag, TRUE);
|
|
|
|
pSlab->GetSpecialtyData()->SetAt(KEY_NO,data.m_szNO);
|
|
pSlab->SetAt(KEY_GRADX, data.m_sGradX);
|
|
pSlab->SetAt(KEY_GRADY, data.m_sGradY);
|
|
|
|
int nShape = -1;
|
|
pSlab->GetSpecialtyData()->GetAt(KEY_SHAPE,nShape);
|
|
|
|
ESection eShape = (ESection)nShape;
|
|
if (eShape == eUserDef)
|
|
{
|
|
CString sPl;
|
|
pSlab->GetSpecialtyData()->GetAt(KEY_POINTS,sPl);
|
|
|
|
AcDbPolyline* pPl = CoreTools::StringToPolyline(sPl);
|
|
if (pPl != NULL)
|
|
{
|
|
pPl->setElevation(data.m_dBomEl);
|
|
CoreTools::PolylineToString(pPl,sPl);
|
|
delete pPl;
|
|
}
|
|
pSlab->GetSpecialtyData()->SetAt(KEY_POINTS,sPl);
|
|
}
|
|
}
|
|
pEnt->close();
|
|
}
|
|
}
|
|
|
|
void CSZSXDlg::OnBnClickedButton1()
|
|
{
|
|
|
|
}
|
|
|
|
void CSZSXDlg::OnBnClickedCheck5()
|
|
{
|
|
UpdateData();
|
|
|
|
if (m_bNOSetDefault)
|
|
{
|
|
GetDlgItem(IDC_EDIT6)->EnableWindow(FALSE);
|
|
}
|
|
else
|
|
{
|
|
GetDlgItem(IDC_EDIT6)->EnableWindow(TRUE);
|
|
}
|
|
}
|
|
|
|
|
|
extern bool __cdecl acedHatchPalletteDialog(wchar_t const* , bool , wchar_t *&);
|
|
void CSZSXDlg::OnBnClickedBtnFill()
|
|
{
|
|
UpdateData();
|
|
TCHAR *psz = new TCHAR[1024];
|
|
::memset(psz, 0, sizeof(TCHAR) * 1024);
|
|
|
|
CString sHatch(m_sMaterial);
|
|
if (!m_sHatch.IsEmpty())
|
|
sHatch = m_sHatch;
|
|
|
|
if (acedHatchPalletteDialog(sHatch, false, psz))
|
|
{
|
|
m_sHatch = psz;
|
|
m_wndBtHatch.SetWindowText(m_sHatch);
|
|
}
|
|
|
|
delete[] psz;
|
|
}
|
|
|
|
|
|
void CSZSXDlg::OnBnClickedCheckHatch()
|
|
{
|
|
UpdateData();
|
|
m_wndBtHatch.EnableWindow(m_bAddHatch);
|
|
if (!m_bAddHatch)
|
|
m_sHatch = HATCH_NO_NEED;
|
|
else
|
|
m_sHatch = HATCH_DEFAULT;
|
|
|
|
UpdateData(FALSE);
|
|
}
|