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

245 lines
5.8 KiB
C++

#include "stdafx.h"
#include "DrawDuckDlg.h"
#include "PipelineTools.h"
IMPLEMENT_DYNAMIC(DrawDuckDlg, CDialog)
DrawDuckDlg::DrawDuckDlg(CWnd* pParent /*=nullptr*/)
: CDialog(IDD_DRAW_DUCT, pParent)
, m_sMaterial(_T(""))
, m_sFittingMaterial(_T(""))
, m_sSysLay(_T(""))
, m_pDb(NULL)
{
::memset(&m_param, 0, sizeof(WPipe::PipeParam));
m_param.m_dRRatio = 1.;
m_param.m_dW = 200.;
m_param.m_dH = 100.;
m_param.m_dThick = 2.;
}
DrawDuckDlg::~DrawDuckDlg() { }
void DrawDuckDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDT_W, m_param.m_dW);
DDV_MinMaxDouble(pDX, m_param.m_dW, 0.1, 9999999.0);
DDX_Text(pDX, IDC_EDT_H, m_param.m_dH);
DDV_MinMaxDouble(pDX, m_param.m_dH, 0.1, 999999.0);
DDX_Text(pDX, IDC_EDT_T, m_param.m_dThick);
DDV_MinMaxDouble(pDX, m_param.m_dThick, 0.1, 999999.0);
DDX_Text(pDX, IDC_EDT_R, m_param.m_dRRatio);
DDV_MinMaxDouble(pDX, m_param.m_dRRatio, 1., 999999.0);
DDX_CBString(pDX, IDC_CMB_MATERIAL, m_sMaterial);
DDX_CBString(pDX, IDC_CMB_FITTING_MATERIAL, m_sFittingMaterial);
DDX_CBString(pDX, IDC_CMB_SYSLAY, m_sSysLay);
DDX_Control(pDX, IDC_CMB_SYSLAY, m_cmbSysLay);
DDX_Control(pDX, IDC_CMB_MATERIAL, m_cmbMaterial);
DDX_Control(pDX, IDC_CMB_FITTING_MATERIAL, m_cmbFittingMaterial);
}
BOOL DrawDuckDlg::OnInitDialog()
{
CDialog::OnInitDialog();
CStringArray arPipe, arFit, arSyses;
if (PipelineTools::getPipelineMaterial(m_pDb, arPipe, arFit))
{
m_cmbMaterial.ResetContent();
for (int i = 0; i < arPipe.GetSize(); i++)
m_cmbMaterial.AddString(arPipe.GetAt(i));
if (!arPipe.IsEmpty())
{
m_cmbMaterial.SetCurSel(0);
m_cmbMaterial.GetLBText(0, m_sMaterial);
}
m_cmbFittingMaterial.ResetContent();
for (int i = 0; i < arFit.GetSize(); i++)
m_cmbFittingMaterial.AddString(arFit.GetAt(i));
if (!arFit.IsEmpty())
{
m_cmbFittingMaterial.SetCurSel(0);
m_cmbFittingMaterial.GetLBText(0, m_sFittingMaterial);
}
}
if (PipelineTools::getLayerSys(m_pDb, arSyses))
{
m_cmbSysLay.ResetContent();
for (int i = 0; i < arSyses.GetSize(); i++)
m_cmbSysLay.AddString(arSyses.GetAt(i));
if (arSyses.GetSize() > 0)
{
m_cmbSysLay.SetCurSel(0);
m_cmbSysLay.GetLBText(0, m_sSysLay);
}
}
GET_CACHE(DrawDuckDlg, %f%f%s%f%f%s%s
, &m_param.m_dW, &m_param.m_dH, &m_sMaterial
, &m_param.m_dThick, &m_param.m_dRRatio, &m_sFittingMaterial
, &m_sSysLay);
UpdateData(FALSE);
return TRUE;
}
BEGIN_MESSAGE_MAP(DrawDuckDlg, CDialog)
ON_BN_CLICKED(IDC_BTN_PICK, &DrawDuckDlg::OnBnClickedBtnPick)
ON_BN_CLICKED(IDOK, &DrawDuckDlg::OnBnClickedOk)
ON_BN_CLICKED(IDC_BTN_ADDMETI, &DrawDuckDlg::OnBnClickedBtnAddmeti)
ON_BN_CLICKED(IDC_BTN_SYSSET, &DrawDuckDlg::OnBnClickedBtnSysset)
ON_BN_CLICKED(IDC_BTN_BIM, &DrawDuckDlg::OnBnClickedBtnBim)
END_MESSAGE_MAP()
void DrawDuckDlg::OnBnClickedBtnPick()
{
//切换界面的当前活动
acedGetAcadFrame()->EnableWindow(TRUE);
ShowWindow(SW_HIDE);
acedGetAcadFrame()->SetFocus();
CString strLay(_T(""));
WPipe::PipeParam param;
if (!PipelineTools::getPipelineParam(param, strLay))
{
AfxMessageBox(_T("提取失败。"));
return;
}
if (param.m_app != WPipe::eDuct)
{
AfxMessageBox(_T("请选择一段风管。"));
return;
}
::memset(&m_param, 0, sizeof(WPipe::PipeParam));
::memcpy(&m_param, &param, sizeof(WPipe::PipeParam));
if (!PipelineTools::getSysByLayer(m_pDb, strLay, m_sSysLay))
{
AfxMessageBox(_T("查询当前图层系统失败。"));
return;
}
CString sSysTmp;
for (int j = 0; j < m_cmbSysLay.GetCount(); j++)
{
m_cmbSysLay.GetLBText(j, sSysTmp);
if (m_sSysLay.CompareNoCase(sSysTmp))
{
m_cmbSysLay.SetCurSel(j);
break;
}
}
UpdateData(FALSE);
ShowWindow(SW_SHOW);
SetFocus();
acedGetAcadFrame()->EnableWindow(FALSE);
EnableWindow(TRUE);
}
void DrawDuckDlg::OnBnClickedOk()
{
UpdateData(TRUE);
SET_CACHE(DrawDuckDlg, %f%f%s%f%f%s%s
, m_param.m_dW, m_param.m_dH, m_sMaterial
, m_param.m_dThick, m_param.m_dRRatio, m_sFittingMaterial
, m_sSysLay);
//创建系统图层
int nCursel = m_cmbSysLay.GetCurSel();
if (nCursel == -1)
{
AfxMessageBox(_T("请选择绘制管线的系统!"));
return;
}
//确认创建图层
m_cmbSysLay.GetLBText(nCursel, m_sSysLay);
PipelineTools::createSysAllLayer(m_pDb, m_sSysLay);
PipelineTools::setCurrentLayerSys(m_sSysLay);
m_param.m_dD = m_param.m_dW;
m_param.m_dDN = m_param.m_dW;
m_param.m_dOD = m_param.m_dW + m_param.m_dThick;
m_param.m_eD = WPipe::eDN;
m_param.m_app = WPipe::eDuct;
if (_tcsclen((LPCTSTR)m_sMaterial) < 255)
_tcscpy(m_param.szMertial, (LPCTSTR)m_sMaterial);
if (_tcsclen((LPCTSTR)m_sFittingMaterial) < 255)
_tcscpy(m_param.szMertialFit, (LPCTSTR)m_sFittingMaterial);
CDialog::OnOK();
}
void DrawDuckDlg::OnBnClickedBtnAddmeti()
{
CStringArray arPipe, arFit;
if (!PipelineTools::setPipelineMaterial(m_pDb, arPipe, arFit))
{
return;
}
m_cmbMaterial.ResetContent();
for (int i = 0; i < arPipe.GetSize(); i++)
{
m_cmbMaterial.InsertString(i, arPipe.GetAt(i));
if (m_sMaterial.CompareNoCase(arPipe.GetAt(i)) == 0)
m_cmbMaterial.SetCurSel(i);
}
m_cmbFittingMaterial.ResetContent();
for (int i = 0; i < arFit.GetSize(); i++)
{
m_cmbFittingMaterial.InsertString(i, arFit.GetAt(i));
if (m_sFittingMaterial.CompareNoCase(arFit.GetAt(i)) == 0)
m_cmbFittingMaterial.SetCurSel(i);
}
}
void DrawDuckDlg::OnBnClickedBtnSysset()
{
CStringArray arSyses;
if (!PipelineTools::setLayerSys(m_pDb, arSyses))
{
return;
}
m_cmbSysLay.ResetContent();
for (int i = 0; i < arSyses.GetSize(); i++)
{
m_cmbSysLay.AddString(arSyses.GetAt(i));
}
if (arSyses.GetSize() > 0)
{
m_cmbSysLay.SetCurSel(0);
m_cmbSysLay.GetLBText(0, m_sSysLay);
}
}
void DrawDuckDlg::OnBnClickedBtnBim()
{
// TODO: Add your control notification handler code here
}
void DrawDuckDlg::SetDbServer(CUIISQLiteServer * pDb)
{
m_pDb = pDb;
}