Files
envi-code/SourceCode/Code2026/EarthWormCmd/ZMYCDlg.cpp
T
2026-09-28 15:28:50 +08:00

384 lines
10 KiB
C++

#include "stdafx.h"
#include "ZMYCDlg.h"
#include "KKSJDlg.h"
#include "AecDbEarthWorm.h"
IMPLEMENT_DYNAMIC(CZMYCDlg, CBaseDialog)
CZMYCDlg::CZMYCDlg(CWnd* pParent /*=NULL*/)
: CBaseDialog(CZMYCDlg::IDD, _T("ZMYC"), IDC_STATIC_FRM, pParent)
, m_dA(1000.0f)
, m_dB(1000.0f)
, m_dC(500.0f)
, m_dF(9000.0f)
, m_dG(3000.0f)
, m_dH(400.0f)
{
}
CZMYCDlg::~CZMYCDlg()
{
}
void CZMYCDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDITH, m_dA);
DDX_Text(pDX, IDC_EDITH2, m_dB);
DDX_Text(pDX, IDC_EDITH3, m_dC);
DDX_Text(pDX, IDC_EDITH5, m_dF);
DDX_Text(pDX, IDC_EDITH7, m_dG);
DDX_Text(pDX, IDC_EDITH9, m_dH);
DDX_Control(pDX, IDC_LIST1, m_wndListCtrl);
}
BEGIN_MESSAGE_MAP(CZMYCDlg, CBaseDialog)
ON_BN_CLICKED(IDC_BTADD, &CZMYCDlg::OnBnClickedBtadd)
ON_BN_CLICKED(IDC_BTREMOVE, &CZMYCDlg::OnBnClickedBtremove)
ON_BN_CLICKED(IDOK, &CZMYCDlg::OnBnClickedOk)
END_MESSAGE_MAP()
BOOL CZMYCDlg::OnInitDialog()
{
CBaseDialog::OnInitDialog();
CString sScr;
GetCrossSectionScr(sScr);
AecDbEarthWorm worm;
worm.SetCrossSectionScr(sScr);
int nCount = worm.GetRoomCount();
for (int i = 0;i < nCount;i++)
{
AcArray<HoleRec>* pHoleRoom = new AcArray<HoleRec>;
m_arHolesOFRoom.append(pHoleRoom);
}
m_dA = AS_M2MM(m_data.fNodeDef[0]);
m_dB = AS_M2MM(m_data.fNodeDef[1]);
m_dC = AS_M2MM(m_data.fNodeDef[2]);
m_dF = AS_M2MM(m_data.fNodeDef[3]);
m_dG = AS_M2MM(m_data.fNodeDef[4]);
m_dH = AS_M2MM(m_data.fNodeDef[5]);
UpdateData(FALSE);
ShowEarthWorm();
InitLstCtrl();
/*
EWFnctNode fncNode;
memset(&fncNode, 0, sizeof(EWFnctNode));
fncNode.dDistFromPre = AS_MUNIT(5000.0);//5米位置
fncNode.eFnType = kBDOutLetHouse;
_tcscpy(fncNode.szNodeSpec, _T("直埋引出"));
fncNode.nRoomIndex = 999;//全部
fncNode.fNodeDef[0] = AS_MUNITF(1000.0f);//
fncNode.fNodeDef[1] = AS_MUNITF(1000.0f);//
fncNode.fNodeDef[2] = AS_MUNITF(500.0f);//
fncNode.fNodeDef[3] = AS_MUNITF(9000.0f);//
fncNode.fNodeDef[4] = AS_MUNITF(3000.0f);//
fncNode.fNodeDef[5] = AS_MUNITF(400.0f);//
//开口
fncNode.fNodeDef[9] = 0.0f;//0舱
fncNode.fNodeDef[10] = AS_MUNITF(1000.0f);//离内顶距离
fncNode.fNodeDef[11] = AS_MUNITF(1200.0f);//左侧距离
fncNode.fNodeDef[12] = AS_MUNITF(300.0f);//孔直径
fncNode.fNodeDef[13] = AS_MUNITF(300.0f);//孔间距
fncNode.fNodeDef[14] = 3.0f;//3个
fncNode.fNodeDef[15] = -1.0f//结束
//...
//开口
fncNode.fNodeDef[16] = 1.0f;//1舱
fncNode.fNodeDef[17] = AS_MUNITF(1000.0f);//离内顶距离
fncNode.fNodeDef[18] = AS_MUNITF(1200.0f);//左侧距离
fncNode.fNodeDef[19] = AS_MUNITF(300.0f);//孔直径
fncNode.fNodeDef[20] = AS_MUNITF(300.0f);//孔间距
fncNode.fNodeDef[21] = 3.0f;//3个
fncNode.fNodeDef[n] = -1.0f//结束
//开口
fncNode.fNodeDef[23] = 2.0f;//2舱
fncNode.fNodeDef[24] = AS_MUNITF(1000.0f);//离内顶距离
fncNode.fNodeDef[25] = AS_MUNITF(1200.0f);//左侧距离
fncNode.fNodeDef[26] = AS_MUNITF(300.0f);//孔直径
fncNode.fNodeDef[27] = AS_MUNITF(300.0f);//孔间距
fncNode.fNodeDef[28] = 3.0f;//3个
fncNode.fNodeDef[n] = -1.0f//结束
*/
return TRUE;
}
extern void SplitStrintToArray(LPCTSTR pszDescr,CStringArray& arInfo,TCHAR tcSpace);
void CZMYCDlg::InitLstCtrl()
{
m_wndListCtrl.SetExtendedStyle(LVS_EX_FULLROWSELECT);
m_wndListCtrl.InsertColumn(0, _T("离屋顶距离(毫米)"), LVCFMT_LEFT, 100);
m_wndListCtrl.InsertColumn(1, _T("距左侧距离(毫米)"), LVCFMT_LEFT, 100);
m_wndListCtrl.InsertColumn(2, _T("孔直径(毫米)"), LVCFMT_LEFT, 90);
m_wndListCtrl.InsertColumn(3, _T("孔间距(毫米)"), LVCFMT_LEFT, 90);
m_wndListCtrl.InsertColumn(4, _T("数量(个)"), LVCFMT_LEFT, 50);
m_wndListCtrl.InsertColumn(5, _T("用途"), LVCFMT_LEFT, 80);
SelectRoom(0);
int nRooms = m_arHolesOFRoom.length();
int nFrom = 9,nRoom = 0,nItem = 0;
HoleRec rc;
CString sPurpose,sText;
CStringArray arPurposes;
SplitStrintToArray(m_data.szNodeDefSpec,arPurposes,_T(';'));
while(nFrom < 63)
{
nRoom = (int)( m_data.fNodeDef[nFrom + 0] );
if (nRoom > -1 && nRoom < nRooms)
{
rc.m_dVal[0] = AS_M2MM(m_data.fNodeDef[nFrom + 1]);//离内顶距离
rc.m_dVal[1] = AS_M2MM(m_data.fNodeDef[nFrom + 2]);//左侧距离
rc.m_dVal[2] = AS_M2MM(m_data.fNodeDef[nFrom + 3]);//孔直径
rc.m_dVal[3] = AS_M2MM(m_data.fNodeDef[nFrom + 4]);//孔间距
rc.m_dVal[4] = m_data.fNodeDef[nFrom + 5];//数量
//m_data.fNodeDef[nFrom + 6] = -1.0f//结束
if (rc.m_dVal[2] < 0.001f || rc.m_dVal[4] < 0.001f)
{
break;
}
AcArray<HoleRec>* pHoldRecs = m_arHolesOFRoom.at(nRoom);
if (arPurposes.GetSize() > 0)
{
sPurpose = arPurposes.GetAt(0);
arPurposes.RemoveAt(0);
_tcscpy(rc.szSpec,sPurpose);
}
pHoldRecs->append(rc);
if (nRoom == 0)
{
nItem = m_wndListCtrl.GetItemCount();
sText.Format(_T("%.f"),rc.m_dVal[0]);
m_wndListCtrl.InsertItem(nItem,sText);
sText.Format(_T("%.f"),rc.m_dVal[1]);
m_wndListCtrl.SetItemText(nItem,1,sText);
sText.Format(_T("%.f"),rc.m_dVal[2]);
m_wndListCtrl.SetItemText(nItem,2,sText);
sText.Format(_T("%.f"),rc.m_dVal[3]);
m_wndListCtrl.SetItemText(nItem,3,sText);
sText.Format(_T("%.f"),rc.m_dVal[4]);
m_wndListCtrl.SetItemText(nItem,4,sText);
m_wndListCtrl.SetItemText(nItem,5,rc.szSpec);
}
}
nFrom += 7;
}
}
void CZMYCDlg::OnViewLButtonDownMsg()
{
m_wndListCtrl.DeleteAllItems();
int nItem = 0;
CString sText;
AcArray<HoleRec>* pHoldRecs = m_arHolesOFRoom.at(GetIdxOfRoom());
for (int i = 0;i < pHoldRecs->length();i++)
{
HoleRec& rc = pHoldRecs->at(i);
nItem = m_wndListCtrl.GetItemCount();
sText.Format(_T("%.f"),rc.m_dVal[0]);
m_wndListCtrl.InsertItem(nItem,sText);
sText.Format(_T("%.f"),rc.m_dVal[1]);
m_wndListCtrl.SetItemText(nItem,1,sText);
sText.Format(_T("%.f"),rc.m_dVal[2]);
m_wndListCtrl.SetItemText(nItem,2,sText);
sText.Format(_T("%.f"),rc.m_dVal[3]);
m_wndListCtrl.SetItemText(nItem,3,sText);
sText.Format(_T("%.f"),rc.m_dVal[4]);
m_wndListCtrl.SetItemText(nItem,4,sText);
m_wndListCtrl.SetItemText(nItem,5,rc.szSpec);
}
}
void CZMYCDlg::SetDefaultFnctNode(EWFnctNode &fncNode)
{
memset(&fncNode, 0, sizeof(EWFnctNode));
fncNode.dDistFromPre = AS_MUNIT(5000.0);//5米位置
fncNode.eFnType = kBDOutLetHouse;
_tcscpy(fncNode.szNodeSpec, _T("直埋引出"));
_tcscpy(fncNode.szNodeDefSpec, _T("水管引出;电缆引出;燃气管引出"));
fncNode.nRoomIndex = 999;//全部
fncNode.dDistFromPre = AS_MUNIT(5000.0);//5米位置
fncNode.eFnType = kBDOutLetHouse;
_tcscpy(fncNode.szNodeSpec, _T("直埋引出"));
_tcscpy(fncNode.szNodeDefSpec, _T("水管引出;电缆引出;燃气管引出"));
fncNode.nRoomIndex = 999;//全部
fncNode.fNodeDef[0] = AS_MUNITF(1000.0f);//a
fncNode.fNodeDef[1] = AS_MUNITF(1000.0f);//b
fncNode.fNodeDef[2] = AS_MUNITF(500.0f);//c
fncNode.fNodeDef[3] = AS_MUNITF(9000.0f);//f
fncNode.fNodeDef[4] = AS_MUNITF(3000.0f);//g
fncNode.fNodeDef[5] = AS_MUNITF(400.0f);//h
//开口
fncNode.fNodeDef[9] = 0.0f;//0舱
fncNode.fNodeDef[10] = AS_MUNITF(1000.0f);//离内顶距离
fncNode.fNodeDef[11] = AS_MUNITF(400.0f);//左侧距离
fncNode.fNodeDef[12] = AS_MUNITF(500.0f);//孔直径
fncNode.fNodeDef[13] = AS_MUNITF(600.0f);//孔间距
fncNode.fNodeDef[14] = 3.0f;//3个
fncNode.fNodeDef[15] = -1.0f;//结束
//开口
fncNode.fNodeDef[16] = 1.0f;//1舱
fncNode.fNodeDef[17] = AS_MUNITF(1000.0f);//离内顶距离
fncNode.fNodeDef[18] = AS_MUNITF(500.0f);//左侧距离
fncNode.fNodeDef[19] = AS_MUNITF(150.0f);//孔直径
fncNode.fNodeDef[20] = AS_MUNITF(200.0f);//孔间距
fncNode.fNodeDef[21] = 4.0f;//4个
fncNode.fNodeDef[22] = -1.0f;//结束
//开口
fncNode.fNodeDef[23] = 2.0f;//2舱
fncNode.fNodeDef[24] = AS_MUNITF(1000.0f);//离内顶距离
fncNode.fNodeDef[25] = AS_MUNITF(200.0f);//左侧距离
fncNode.fNodeDef[26] = AS_MUNITF(800.0f);//孔直径
fncNode.fNodeDef[27] = AS_MUNITF(900.0f);//孔间距
fncNode.fNodeDef[28] = 2.0f;//3个
fncNode.fNodeDef[29] = -1.0f;//结束
}
void CZMYCDlg::OnBnClickedBtadd()
{
CKKSJDlg dlg;
int nRes = dlg.DoModal();
if (IDOK == nRes)
{
HoleRec rc;
rc.m_dVal[0] = dlg.m_fNeiDing_Dis;
rc.m_dVal[1] = dlg.m_fChe_Dis;
rc.m_dVal[2] = dlg.m_fD;
rc.m_dVal[3] = dlg.m_fSpacing;
rc.m_dVal[4] = dlg.m_fCount;
_tcscpy(rc.szSpec,dlg.m_sPurpose);
AcArray<HoleRec>* pHoldRecs = m_arHolesOFRoom.at(GetIdxOfRoom());
pHoldRecs->append(rc);
CString sText;
int nItem = m_wndListCtrl.GetItemCount();
sText.Format(_T("%.f"),dlg.m_fNeiDing_Dis);
m_wndListCtrl.InsertItem(nItem,sText);
sText.Format(_T("%.f"),dlg.m_fChe_Dis);
m_wndListCtrl.SetItemText(nItem,1,sText);
sText.Format(_T("%.f"),dlg.m_fD);
m_wndListCtrl.SetItemText(nItem,2,sText);
sText.Format(_T("%.f"),dlg.m_fSpacing);
m_wndListCtrl.SetItemText(nItem,3,sText);
sText.Format(_T("%.f"),dlg.m_fCount);
m_wndListCtrl.SetItemText(nItem,4,sText);
m_wndListCtrl.SetItemText(nItem,5,dlg.m_sPurpose);
}
}
void CZMYCDlg::OnBnClickedBtremove()
{
POSITION ps = m_wndListCtrl.GetFirstSelectedItemPosition();
int nItem = m_wndListCtrl.GetNextSelectedItem(ps);
if (nItem != -1)
{
AcArray<HoleRec>* pHoldRecs = m_arHolesOFRoom.at(GetIdxOfRoom());
pHoldRecs->removeAt(nItem);
m_wndListCtrl.DeleteItem(nItem);
}
}
void CZMYCDlg::OnBnClickedOk()
{
UpdateData(TRUE);
if (m_dA < 1.0f || m_dB < 1.0f || m_dC < 1.0f)
{
AfxMessageBox(_T("开口尺寸数据不正确!请检查开口数据!"));
return;
}
if (m_dF < 500.0f || m_dG < 500.0f || m_dH < 10.0f)
{
AfxMessageBox(_T("引出室房子数据不正确!请检查引出室房子!"));
return;
}
m_data.fNodeDef[0] = AS_MUNITF(m_dA);//a
m_data.fNodeDef[1] = AS_MUNITF(m_dB);//b
m_data.fNodeDef[2] = AS_MUNITF(m_dC);//c
m_data.fNodeDef[3] = AS_MUNITF(m_dF);//f
m_data.fNodeDef[4] = AS_MUNITF(m_dG);//g
m_data.fNodeDef[5] = AS_MUNITF(m_dH);//h
CString sPuporses;
int nHoles = 0,nFrom = 9;
for (int i = 0;i < m_arHolesOFRoom.length();i++)
{
AcArray<HoleRec>* pHoldRecs = m_arHolesOFRoom.at(i);
nHoles += pHoldRecs->length();
for (int j = 0;j < pHoldRecs->length();j++)
{
HoleRec& rc = pHoldRecs->at(j);
//to m_data
m_data.fNodeDef[nFrom + 0] = 1.0f * i;
m_data.fNodeDef[nFrom + 1] = AS_MUNITF(rc.m_dVal[0]);//
m_data.fNodeDef[nFrom + 2] = AS_MUNITF(rc.m_dVal[1]);
m_data.fNodeDef[nFrom + 3] = AS_MUNITF(rc.m_dVal[2]);
m_data.fNodeDef[nFrom + 4] = AS_MUNITF(rc.m_dVal[3]);
m_data.fNodeDef[nFrom + 5] = rc.m_dVal[4];
m_data.fNodeDef[nFrom + 6] = -1.0f;
sPuporses += rc.szSpec;
sPuporses += _T(";");
nFrom += 7;
}
}
if (nHoles == 0)
{
AfxMessageBox(_T("没有开口尺寸!请添加开口记录!"));
return;
}
CBaseDialog::OnOK();
}