141 lines
2.8 KiB
C++
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();
|
|
}
|
|
}
|
|
} |