#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(); } } }