Files
gjm 164968b62e chore
把非utf8-bom编码的cpp/h文件改为 utf8 bom 编码, msvc识别utf8编码时,如果不是bom格式的,会使用当前cp_oem来解码.
2026-10-04 00:04:20 +08:00

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 &param)
{
/*
* 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;
}
}