245 lines
5.8 KiB
C++
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, ¶m, 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;
|
|
}
|