164 lines
3.5 KiB
C++
164 lines
3.5 KiB
C++
#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();
|
|
}
|
|
} |