458 lines
8.7 KiB
C++
458 lines
8.7 KiB
C++
#include "stdafx.h"
|
|
#include "StdArx.h"
|
|
#include "uihistory.h"
|
|
#include "HDLGDlg.h"
|
|
#include "CLGZJDlg.h"
|
|
|
|
extern AcDbRegion* CreatePolygonRegionOnly(AcGePoint3d* pPoints,int nSize);
|
|
|
|
IMPLEMENT_DYNAMIC(CHDLGDlg, CDialog)
|
|
|
|
CHDLGDlg::CHDLGDlg(CWnd* pParent /*=NULL*/)
|
|
: CDialog(CHDLGDlg::IDD, pParent)
|
|
, m_dW(1000)
|
|
, m_dH(900)
|
|
, m_dt(240)
|
|
, m_db(100)
|
|
, m_dd(1680)
|
|
, m_dh2(100)
|
|
, m_bHasCover(TRUE)
|
|
, m_dk(140)
|
|
, m_sGKind(_T("甲型电缆沟"))
|
|
, m_nAlign(1)//中
|
|
, m_dTopEl(0)
|
|
, m_dRatio(1.5)
|
|
{
|
|
GET_CACHE(CHDLGDlg
|
|
, %s%d%f%f%f%f%f%f%f%f
|
|
, &m_sGKind
|
|
, &m_bHasCover
|
|
, &m_dW
|
|
, &m_dH
|
|
, &m_dt
|
|
, &m_db
|
|
, &m_dd
|
|
, &m_dh2
|
|
, &m_dk
|
|
, &m_dTopEl );
|
|
|
|
m_bEnableAlign = TRUE;
|
|
m_bEleReadOnly = FALSE;
|
|
m_bLoadLast = FALSE;
|
|
m_bLock = false;
|
|
m_bHasHolder = FALSE;
|
|
|
|
::memset(&m_lHolder, 0, sizeof(XHolder));
|
|
::memset(&m_rHolder, 0, sizeof(XHolder));
|
|
}
|
|
|
|
CHDLGDlg::~CHDLGDlg()
|
|
{
|
|
}
|
|
|
|
void CHDLGDlg::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
DDX_Text(pDX, IDC_EDIT1, m_dW);
|
|
DDX_Text(pDX, IDC_EDIT2, m_dH);
|
|
DDX_Text(pDX, IDC_EDIT3, m_dt);
|
|
DDX_Text(pDX, IDC_EDIT4, m_db);
|
|
DDX_Text(pDX, IDC_EDIT5, m_dd);
|
|
DDX_Text(pDX, IDC_EDIT6, m_dh2);
|
|
DDX_Check(pDX, IDC_CHECK1, m_bHasCover);
|
|
DDX_Text(pDX, IDC_EDIT8, m_dk);
|
|
DDX_CBString(pDX, IDC_COMBO1, m_sGKind);
|
|
DDX_Text(pDX, IDC_EDIT7, m_dTopEl);
|
|
DDX_CBIndex(pDX, IDC_COMBO6, m_nAlign);
|
|
DDX_Control(pDX, IDC_EDIT7, m_wndEditEl);
|
|
}
|
|
|
|
BEGIN_MESSAGE_MAP(CHDLGDlg, CDialog)
|
|
ON_BN_CLICKED(IDOK, &CHDLGDlg::OnBnClickedOk)
|
|
ON_CBN_SELCHANGE(IDC_COMBO1, &CHDLGDlg::OnCbnSelchangeCombo1)
|
|
ON_BN_CLICKED(IDC_BUTTON1, &CHDLGDlg::OnBnClickedButton1)
|
|
ON_BN_CLICKED(IDC_BUTTON2, &CHDLGDlg::OnBnClickedButton2)
|
|
END_MESSAGE_MAP()
|
|
|
|
BOOL CHDLGDlg::OnInitDialog()
|
|
{
|
|
CDialog::OnInitDialog();
|
|
|
|
m_wndEditEl.SetReadOnly(m_bEleReadOnly);
|
|
|
|
if (m_bLock)//锁定标高
|
|
{
|
|
GetDlgItem(IDC_EDIT7)->EnableWindow(FALSE);
|
|
}
|
|
|
|
UpdateData(FALSE);
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
void CHDLGDlg::OnBnClickedOk()
|
|
{
|
|
UpdateData();
|
|
|
|
if ( (m_dW + 2.0 * m_dt - m_dd) > 1.e-3)
|
|
{
|
|
AfxMessageBox(_T("尺寸 d 太小,必须大于 w+2t !"));
|
|
return;
|
|
}
|
|
|
|
if (m_dh2 < 1.e-3)
|
|
{
|
|
AfxMessageBox(_T("尺寸 h2 太小,必须大于 0 !"));
|
|
return;
|
|
}
|
|
|
|
if (m_dk < 1.e-3 && m_bHasCover)
|
|
{
|
|
AfxMessageBox(_T("尺寸 k 太小,必须大于 0 !"));
|
|
return;
|
|
}
|
|
|
|
if (m_dt < 1.e-3)
|
|
{
|
|
AfxMessageBox(_T("尺寸 t 太小,必须大于 0 !"));
|
|
return;
|
|
}
|
|
|
|
if (m_db < 1.e-3)
|
|
{
|
|
AfxMessageBox(_T("尺寸 b 太小,必须大于 0 !"));
|
|
return;
|
|
}
|
|
|
|
if (m_dH < 1.e-3)
|
|
{
|
|
AfxMessageBox(_T("尺寸 H 太小,必须大于 0 !"));
|
|
return;
|
|
}
|
|
|
|
if (m_dW < 1.e-3)
|
|
{
|
|
AfxMessageBox(_T("尺寸 W 太小,必须大于 0 !"));
|
|
return;
|
|
}
|
|
|
|
SET_CACHE(CHDLGDlg
|
|
, %s%d%f%f%f%f%f%f%f%f
|
|
, m_sGKind
|
|
, m_bHasCover
|
|
, m_dW
|
|
, m_dH
|
|
, m_dt
|
|
, m_db
|
|
, m_dd
|
|
, m_dh2
|
|
, m_dk
|
|
, m_dTopEl);
|
|
|
|
OnOK();
|
|
}
|
|
|
|
bool FormatRect(AcGePoint3d* pptGe,double dw,double dt)
|
|
{
|
|
pptGe[0].set(0,0,0);
|
|
pptGe[0].x -= dw;
|
|
pptGe[0].y += 0.5 * dt;
|
|
|
|
pptGe[1] = pptGe[0];
|
|
pptGe[1].x += dw;
|
|
|
|
pptGe[2] = pptGe[1];
|
|
pptGe[2].y -= dt;
|
|
|
|
pptGe[3] = pptGe[0];
|
|
pptGe[3].y -= dt;
|
|
|
|
pptGe[4] = pptGe[0];
|
|
|
|
return true;
|
|
}
|
|
|
|
bool CHDLGDlg::GetDLGData(DlgData& data,AcArray<RegionAndEl>& arRegEl)
|
|
{
|
|
data.m_dW = m_dW;
|
|
data.m_dH = m_dH;
|
|
data.m_dt = m_dt;
|
|
data.m_db = m_db;
|
|
data.m_dd = m_dd;
|
|
data.m_dh2 = m_dh2;
|
|
data.m_bHasCover = m_bHasCover;
|
|
data.m_dk = m_dk;
|
|
data.m_dRatio = 1.5;
|
|
_tcscpy(data.m_sGKind,(LPCTSTR)m_sGKind);
|
|
data.m_dTopEl = m_dTopEl;
|
|
data.m_nAlign = m_nAlign;
|
|
AcDbRegion* pRegion = NULL;
|
|
|
|
//原始位置为原点
|
|
//底板
|
|
AcDbVoidPtrArray arLnPtrs;
|
|
RegionAndEl rel;
|
|
rel.pReg = NULL;
|
|
_tcscpy(rel.m_szMat,_T("混凝土"));
|
|
|
|
AcGePoint3d ptGe[5];
|
|
|
|
FormatRect(ptGe,m_dd,m_db);
|
|
|
|
pRegion = CreatePolygonRegionOnly(ptGe,5);
|
|
if (pRegion == NULL)
|
|
{
|
|
return false;
|
|
}
|
|
rel.m_dZ = m_dTopEl;
|
|
rel.m_dZ -= m_dk;
|
|
rel.m_dZ -= m_dH;
|
|
rel.m_dZ -= 0.5 * m_db;
|
|
rel.pReg = pRegion;
|
|
rel.nType = 1;//板
|
|
rel.m_dX = 0.0;//偏移
|
|
rel.dSize[0] = m_dd;
|
|
rel.dSize[1] = m_db;
|
|
rel.dSize[2] = 0.0;
|
|
arRegEl.append(rel);
|
|
|
|
//侧面墙体
|
|
FormatRect(ptGe,m_dt,(m_dH - m_dh2));
|
|
pRegion = CreatePolygonRegionOnly(ptGe,5);
|
|
if (pRegion == NULL)
|
|
{
|
|
return false;
|
|
}
|
|
_tcscpy(rel.m_szMat,_T("砌砖墙体"));
|
|
rel.m_dZ = m_dTopEl;
|
|
rel.m_dZ -= m_dk;
|
|
rel.m_dZ -= m_dh2;
|
|
rel.m_dZ -= 0.5 * ( m_dH - m_dh2);
|
|
rel.m_dX = 0.0;
|
|
rel.m_dX -= 0.5 * m_dW;
|
|
rel.m_dX -= 0.5 * m_dt;
|
|
rel.pReg = pRegion;
|
|
rel.nType = 2;//墙
|
|
|
|
rel.dSize[0] = m_dt;
|
|
rel.dSize[1] = (m_dH - m_dh2);
|
|
rel.dSize[2] = 0.0;
|
|
|
|
arRegEl.append(rel);
|
|
|
|
//侧面墙体2
|
|
rel.m_dX += (m_dW + m_dt);
|
|
arRegEl.append(rel);
|
|
|
|
//压顶
|
|
FormatRect(ptGe,m_dt,m_dh2);
|
|
pRegion = CreatePolygonRegionOnly(ptGe,5);
|
|
if (pRegion == NULL)
|
|
{
|
|
return false;
|
|
}
|
|
_tcscpy(rel.m_szMat,_T("混凝土"));
|
|
rel.m_dZ = m_dTopEl;
|
|
rel.m_dZ -= m_dk;
|
|
rel.m_dZ -= 0.5 * m_dh2;
|
|
rel.pReg = pRegion;
|
|
rel.nType = 2;
|
|
rel.m_dX = 0.0;
|
|
rel.m_dX -= 0.5 * m_dW;
|
|
rel.m_dX -= 0.5 * m_dt;
|
|
|
|
rel.dSize[0] = m_dt;
|
|
rel.dSize[1] = m_dh2;
|
|
rel.dSize[2] = 0.0;
|
|
|
|
arRegEl.append(rel);
|
|
|
|
rel.m_dX += (m_dW + m_dt);
|
|
arRegEl.append(rel);
|
|
|
|
//盖板
|
|
if (m_bHasCover)
|
|
{
|
|
FormatRect(ptGe,m_dW + 2.0 * m_dt,m_dk);
|
|
pRegion = CreatePolygonRegionOnly(ptGe,5);
|
|
if (pRegion == NULL)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
_tcscpy(rel.m_szMat,_T("钢筋混凝土盖板"));
|
|
rel.m_dZ = m_dTopEl;
|
|
rel.m_dZ -= 0.5 * m_dk;
|
|
rel.m_dX = 0.0;
|
|
rel.nType = 1;// 板
|
|
rel.pReg = pRegion;
|
|
|
|
rel.dSize[0] = m_dW + 2.0 * m_dt;
|
|
rel.dSize[1] = m_dk;
|
|
rel.dSize[2] = 0.0;
|
|
|
|
arRegEl.append(rel);
|
|
}
|
|
return true;
|
|
}
|
|
|
|
bool CHDLGDlg::GetDLGData(DlgData &data)
|
|
{
|
|
data.m_dW = m_dW;
|
|
data.m_dH = m_dH;
|
|
data.m_dt = m_dt;
|
|
data.m_db = m_db;
|
|
data.m_dd = m_dd;
|
|
data.m_dh2 = m_dh2;
|
|
data.m_bHasCover = m_bHasCover;
|
|
data.m_dk = m_dk;
|
|
_tcscpy(data.m_sGKind, (LPCTSTR)m_sGKind);
|
|
data.m_dTopEl = m_dTopEl;
|
|
data.m_nAlign = m_nAlign;
|
|
data.m_dRatio = m_dRatio;
|
|
return true;
|
|
}
|
|
|
|
BOOL CHDLGDlg::GetXHolder(XHolder &lHolder, XHolder &rHolder)
|
|
{
|
|
memcpy(&lHolder, &m_lHolder, sizeof(XHolder));
|
|
memcpy(&rHolder, &m_rHolder, sizeof(XHolder));
|
|
|
|
return m_bHasHolder;
|
|
}
|
|
|
|
void CHDLGDlg::SetXHolder(XHolder &lHolder, XHolder &rHolder)
|
|
{
|
|
memcpy(&m_lHolder, &lHolder, sizeof(XHolder));
|
|
memcpy(&m_rHolder, &rHolder, sizeof(XHolder));
|
|
}
|
|
|
|
void CHDLGDlg::SetEleReadOnly(BOOL bEleReadOnly, double dTopEl)
|
|
{
|
|
m_bEleReadOnly = bEleReadOnly; m_dTopEl = dTopEl;
|
|
}
|
|
|
|
void CHDLGDlg::EnableLoadLast(BOOL bLoadLast)
|
|
{
|
|
m_bLoadLast = bLoadLast;
|
|
}
|
|
|
|
void CHDLGDlg::GetPipeParam(AecHvac::DuctParam *pParam)
|
|
{
|
|
if (pParam != NULL)
|
|
{
|
|
memset(pParam, 0, sizeof(AecHvac::DuctParam));
|
|
pParam->eType = eRect;
|
|
|
|
pParam->m_app = WPipe::eTrench;
|
|
pParam->dSize[0] = m_dW;// +2.0 * m_dt;按照内径
|
|
pParam->dSize[1] = m_dH + m_db + m_dk;//w
|
|
pParam->dSize[2] = m_dt;
|
|
|
|
struct resbuf rb;
|
|
acedGetVar(_T("INSUNITS"), &rb);
|
|
if (rb.resval.rint == AcDb::kUnitsMeters)
|
|
{
|
|
pParam->dSize[0] *= 0.001;
|
|
pParam->dSize[1] *= 0.001;
|
|
pParam->dSize[2] *= 0.001;
|
|
}
|
|
|
|
pParam->m_nAlign = m_nAlign;
|
|
pParam->m_dEl = m_dTopEl - pParam->dSize[1];//BOMEL
|
|
//调整到中心
|
|
pParam->m_dEl += 0.5 * pParam->dSize[1];
|
|
|
|
pParam->m_dRatio = 1.0;
|
|
pParam->m_bCover = TRUE;
|
|
pParam->m_bSpart = FALSE;
|
|
pParam->m_bCenDraw = FALSE;
|
|
pParam->m_dFullPer = 0.75;
|
|
_tcscpy(pParam->szMat, _T("--"));
|
|
_tcscpy(pParam->szFat, _T("现场"));
|
|
_tcscpy(pParam->szType, m_sGKind);
|
|
_tcscpy(pParam->szSys, _T("电缆沟"));
|
|
_tcscpy(pParam->szRem, _T("--"));
|
|
|
|
//附属电缆沟数据
|
|
pParam->dSize[4] = m_dW;
|
|
pParam->dSize[5] = m_dH;
|
|
pParam->dSize[6] = m_dt;
|
|
pParam->dSize[7] = m_db;
|
|
pParam->dSize[8] = m_dd;
|
|
pParam->dSize[9] = m_dh2;
|
|
pParam->dSize[10] = m_dk;
|
|
|
|
if (rb.resval.rint == AcDb::kUnitsMeters)
|
|
{
|
|
for(int n = 4;n < 11;n++)
|
|
{
|
|
pParam->dSize[n] *= 0.001;
|
|
}
|
|
}
|
|
pParam->dSize[11] = m_dTopEl;
|
|
}
|
|
}
|
|
|
|
void CHDLGDlg::SetShowParam(const AecHvac::DuctParam ¶m)
|
|
{
|
|
/*
|
|
* pParam->dSize[0] = m_dW;// +2.0 * m_dt;按照内径
|
|
pParam->dSize[1] = m_dH + m_db + m_dk;//w
|
|
pParam->dSize[2] = m_dt;
|
|
*/
|
|
m_dW = param.dSize[4];
|
|
m_dH = param.dSize[5];
|
|
m_dt = param.dSize[6];
|
|
m_db = param.dSize[7];
|
|
m_dd = param.dSize[8];
|
|
m_dh2 = param.dSize[9];
|
|
m_dk = param.dSize[10];
|
|
|
|
struct resbuf rb;
|
|
acedGetVar(_T("INSUNITS"), &rb);
|
|
if (rb.resval.rint == AcDb::kUnitsMeters)
|
|
{
|
|
m_dW *= 1000.0;
|
|
m_dH *= 1000.0;
|
|
m_dt *= 1000.0;
|
|
m_db *= 1000.0;
|
|
m_dd *= 1000.0;
|
|
m_dh2 *= 1000.0;
|
|
m_dk *= 1000.0;
|
|
}
|
|
|
|
m_sGKind = param.szType;
|
|
m_dTopEl = param.dSize[11];
|
|
m_nAlign = param.m_nAlign;
|
|
m_dRatio = param.m_dRatio;
|
|
m_bHasCover = param.m_bCover;
|
|
}
|
|
|
|
void CHDLGDlg::OnCbnSelchangeCombo1()
|
|
{
|
|
}
|
|
|
|
void CHDLGDlg::OnBnClickedButton1()
|
|
{
|
|
CLGZJDlg dlg;
|
|
dlg.SetXHolder(m_lHolder);
|
|
if (IDOK == dlg.DoModal())
|
|
{
|
|
dlg.GetXHolder(m_lHolder);
|
|
m_bHasHolder = TRUE;
|
|
}
|
|
}
|
|
|
|
void CHDLGDlg::OnBnClickedButton2()
|
|
{
|
|
CLGZJDlg dlg;
|
|
dlg.SetXHolder(m_rHolder);
|
|
if (IDOK == dlg.DoModal())
|
|
{
|
|
//
|
|
dlg.GetXHolder(m_rHolder);
|
|
m_bHasHolder = TRUE;
|
|
}
|
|
}
|