Files
envi-code/SourceCode/Code2026/Pool3dCmd/RYPDDlg.cpp
T
2026-09-28 15:28:50 +08:00

141 lines
2.8 KiB
C++

#include "stdafx.h"
#include "RYPDDlg.h"
#include "AecDbRoof.h"
#include "EarThwormDef.h"
IMPLEMENT_DYNAMIC(CRYPDDlg, CDialog)
CRYPDDlg::CRYPDDlg(CWnd* pParent /*=NULL*/)
: CDialog(CRYPDDlg::IDD, pParent)
, m_dAng(30)
, m_dRoofDist(600)
, m_dBomEl(3000)
, m_sMaterial(_T("PVC防腐隔热瓦"))
, m_sProvider(_T("现场定制"))
, m_dSlabThick(200)
{
GET_CACHE(CRYPDDlg
, %f % f % f % s % s %f
, &m_dAng
, &m_dRoofDist
, &m_dBomEl
, &m_sMaterial
, &m_sProvider
, &m_dSlabThick);
}
CRYPDDlg::~CRYPDDlg()
{
}
void CRYPDDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDIT1, m_dAng);
DDX_Text(pDX, IDC_EDIT2, m_dRoofDist);
DDX_Text(pDX, IDC_EDIT3, m_dBomEl);
DDX_Text(pDX, IDC_EDIT4, m_sMaterial);
DDX_Text(pDX, IDC_EDIT5, m_sProvider);
DDX_Text(pDX, IDC_EDIT_ELEV2, m_dSlabThick);
}
BEGIN_MESSAGE_MAP(CRYPDDlg, CDialog)
ON_BN_CLICKED(IDOK, &CRYPDDlg::OnBnClickedOk)
END_MESSAGE_MAP()
void CRYPDDlg::OnBnClickedOk()
{
UpdateData();
if (m_dAng > 89.999 || m_dAng < 1.e-3)
{
AfxMessageBox(_T("坡度范围为1~90度!"));
return;
}
if (m_idFrm.isValid())
{
UpdateDataObject();
}
SET_CACHE(CRYPDDlg
, %f % f % f % s % s % f
, m_dAng
, m_dRoofDist
, m_dBomEl
, m_sMaterial
, m_sProvider
, m_dSlabThick);
OnOK();
}
BOOL CRYPDDlg::OnInitDialog()
{
CDialog::OnInitDialog();
if (!m_bmp1.LoadBitmap (IDB_BITMAP22))
{
AfxMessageBox(_T("Can't load bitmap: %x\n"), IDB_BITMAP22);
ASSERT (FALSE);
return FALSE;
}
UpdateData(FALSE);
return TRUE;
}
void CRYPDDlg::SetFromId(AcDbObjectId& id)
{
m_idFrm = id;
AcDbEntity* pEnt = NULL;
if ( Acad::eOk == acdbOpenAcDbEntity(pEnt,id,AcDb::kForRead))
{
AecDbXRoof* pRoof = AecDbXRoof::cast(pEnt);
if (pRoof != NULL)
{
m_dAng = pRoof->GetSlopeAngle(0) * 180.0 / PI;
m_dRoofDist = pRoof->GetEavesLen();
m_dBomEl = pRoof->GetElevation();
m_dBomEl += m_dRoofDist * tan(m_dAng * PI / 180);
m_dSlabThick = pRoof->GetSlabThick();
pRoof->GetSpecialtyData(AcDb::kForRead)->GetAt(KEY_MATERIAL,m_sMaterial);
pRoof->GetSpecialtyData(AcDb::kForRead)->GetAt(KEY_FACTORY,m_sProvider);
}
pEnt->close();
}
}
void CRYPDDlg::UpdateDataObject()
{
if (m_idFrm.isValid())
{
AcDbEntity* pEnt = NULL;
if ( Acad::eOk == acdbOpenAcDbEntity(pEnt,m_idFrm,AcDb::kForWrite))
{
AecDbXRoof* pRoof = AecDbXRoof::cast(pEnt);
if (pRoof != NULL)
{
pRoof->GetSpecialtyData()->SetAt(KEY_MATERIAL,m_sMaterial);
pRoof->GetSpecialtyData()->SetAt(KEY_FACTORY,m_sProvider);
pRoof->SetSlabThick(m_dSlabThick);
double dSlant=m_dAng;
double dElevMove = m_dBomEl - m_dRoofDist * tan(dSlant * PI / 180);
AcDbPolyline* pPl = NULL;
pRoof->GetPolyPath(pPl);
if (pPl != NULL)
{
pRoof->InitEqualSlope(pPl,dElevMove,dSlant * PI/180.0);
delete pPl;
}
pRoof->SetEavesLen(m_dRoofDist);
}
pEnt->close();
}
}
}