#include "stdafx.h" #include "RZWDDlg.h" #include "AecDbRoof.h" #include "EarThwormDef.h" IMPLEMENT_DYNAMIC(CRZWDDlg, CDialog) CRZWDDlg::CRZWDDlg(CWnd* pParent /*=NULL*/) : CDialog(CRZWDDlg::IDD, pParent) , m_dLeftAng(30) , m_dRightAng(30) , m_dHeight(3000) , m_dRigeEl(3000) , m_sMaterial(_T("PVC防腐隔热瓦")) , m_sProvider(_T("现场定制")) , m_bHLocked(FALSE) , m_dSlabThick(200) { GET_CACHE(CRZWDDlg , %f % f % f % f % s % s %d %f , &m_dLeftAng , &m_dRightAng , &m_dHeight , &m_dRigeEl , &m_sMaterial , &m_sProvider , &m_bHLocked , &m_dSlabThick); } CRZWDDlg::~CRZWDDlg() { } void CRZWDDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Text(pDX, IDC_EDIT1, m_dLeftAng); DDX_Text(pDX, IDC_EDIT2, m_dRightAng); DDX_Text(pDX, IDC_EDIT3, m_dHeight); DDX_Text(pDX, IDC_EDIT12, m_dRigeEl); DDX_Text(pDX, IDC_EDIT13, m_sMaterial); DDX_Text(pDX, IDC_EDIT14, m_sProvider); DDX_Check(pDX, IDC_CHECK1, m_bHLocked); DDX_Control(pDX, IDC_EDIT1, m_wndLAng); DDX_Control(pDX, IDC_EDIT2, m_wndRAng); DDX_Control(pDX, IDC_EDIT3, m_wndH); DDX_Text(pDX, IDC_EDIT_ELEV2, m_dSlabThick); } BEGIN_MESSAGE_MAP(CRZWDDlg, CDialog) ON_BN_CLICKED(IDOK, &CRZWDDlg::OnBnClickedOk) ON_BN_CLICKED(IDC_CHECK1, &CRZWDDlg::OnBnClickedCheck1) END_MESSAGE_MAP() BOOL CRZWDDlg::OnInitDialog() { CDialog::OnInitDialog(); UpdateData(FALSE); m_wndH.EnableWindow(m_bHLocked); m_wndLAng.EnableWindow(!m_bHLocked); m_wndRAng.EnableWindow(!m_bHLocked); return TRUE; } void CRZWDDlg::OnBnClickedOk() { UpdateData(); if (m_dLeftAng > 89.999 || m_dRightAng > 89.9999) { AfxMessageBox(_T("坡度角范围为0~90度!")); } if (m_dRigeEl < 1E-6) { if (fabs(m_dRigeEl - 0.0) <=1E-6); else { AfxMessageBox(_T("标高不能小于0")); } } if (m_idFrm.isValid()) { UpdateDataObject(); } SET_CACHE(CRZWDDlg , %f % f % f % f % s % s % d % f , m_dLeftAng , m_dRightAng , m_dHeight , m_dRigeEl , m_sMaterial , m_sProvider , m_bHLocked , m_dSlabThick); OnOK(); } void CRZWDDlg::OnBnClickedCheck1() { UpdateData(); m_wndH.EnableWindow(m_bHLocked); m_wndLAng.EnableWindow(!m_bHLocked); m_wndRAng.EnableWindow(!m_bHLocked); } void CRZWDDlg::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_dRigeEl = pRoof->GetElevation(); m_dLeftAng = pRoof->GetAngleLeft() * 180.0 / PI; m_dRightAng = pRoof->GetAngleRight() * 180.0 / PI; m_bHLocked = pRoof->IsHeightLim(); m_dSlabThick = pRoof->GetSlabThick(); m_dHeight = pRoof->GetRoofHeight(); pRoof->GetSpecialtyData(AcDb::kForRead)->GetAt(KEY_MATERIAL,m_sMaterial); pRoof->GetSpecialtyData(AcDb::kForRead)->GetAt(KEY_FACTORY,m_sProvider); } pEnt->close(); } } void CRZWDDlg::UpdateDataObject() { 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->SetElevation(m_dRigeEl); pRoof->SetEqualAngle(Adesk::kFalse); double dLSlant = m_dLeftAng; double dRSlant = m_dRightAng; pRoof->SetAngle(dLSlant*PI / 180.0,dRSlant*PI / 180.0); pRoof->SetHeightLim(m_bHLocked); pRoof->SetSlabThick(m_dSlabThick); if (m_bHLocked) { pRoof->SetRoofHeight(m_dHeight); } } pEnt->close(); } }