Files
envi-code/SourceCode/Code2026/tg_shs/shs_siteplan/MultPlaceTreeDlg.cpp
T

281 lines
6.0 KiB
C++
Raw Normal View History

2026-10-04 00:04:20 +08:00
#include "stdafx.h"
2026-09-28 15:28:50 +08:00
#include "MultPlaceTreeDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
2026-10-04 00:04:20 +08:00
// 初始化对话框中的全局变量
2026-09-28 15:28:50 +08:00
BOOL CMultPlaceTreeDlg::m_bSameDis = FALSE;
BOOL CMultPlaceTreeDlg::m_bSameRad = FALSE;
int CMultPlaceTreeDlg::m_iTreeType = 0;
double CMultPlaceTreeDlg::m_dRadMin = 800.0;
double CMultPlaceTreeDlg::m_dRadMax = 1500.0;
double CMultPlaceTreeDlg::m_dDisMin = 1000.0;
double CMultPlaceTreeDlg::m_dDisMax = 2000.0;
CMultPlaceTreeDlg::CMultPlaceTreeDlg(CWnd* pParent /*=NULL*/)
: CModelessDialog(CMultPlaceTreeDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CMultPlaceTreeDlg)
//}}AFX_DATA_INIT
m_csRadMin = GetFormatData(m_dRadMin);
m_csRadMax = GetFormatData(m_dRadMax);
m_csDisMin = GetFormatData(m_dDisMin);
m_csDisMax = GetFormatData(m_dDisMax);
}
2026-10-04 00:04:20 +08:00
// 根据需求修改编辑框中的数据格式
2026-09-28 15:28:50 +08:00
CString CMultPlaceTreeDlg::GetFormatData(double dData)
{
CString csTemp;
if (DocGetMeterUnitDraw())
{
csTemp.Format(_T("%.1f"), _AS_SYS_UNIT(dData));
}
else
{
csTemp.Format(_T("%.0f"), _AS_SYS_UNIT(dData));
}
return csTemp;
}
CMultPlaceTreeDlg::~CMultPlaceTreeDlg()
{
m_dRadMin = _AS_MM(_tstof(m_csRadMin));
m_dRadMax = _AS_MM(_tstof(m_csRadMax));
m_dDisMin = _AS_MM(_tstof(m_csDisMin));
m_dDisMax = _AS_MM(_tstof(m_csDisMax));
}
void CMultPlaceTreeDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CMultPlaceTreeDlg)
DDX_Text(pDX, IDC_EDIT_RADMIN, m_csRadMin);
DDX_Text(pDX, IDC_EDIT_RADMAX, m_csRadMax);
DDX_Text(pDX, IDC_EDIT_DISMIN, m_csDisMin);
DDX_Text(pDX, IDC_EDIT_DISMAX, m_csDisMax);
DDX_Check(pDX, IDC_CHK_SAMEDIS,m_bSameDis);
DDX_Check(pDX, IDC_CHK_SAMERAD,m_bSameRad);
DDX_Radio(pDX, IDC_RAD_TREEONE, m_iTreeType);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CMultPlaceTreeDlg, CModelessDialog)
//{{AFX_MSG_MAP(CMultPlaceTreeDlg)
ON_BN_CLICKED(IDC_CHK_SAMEDIS, OnChkSamedis)
ON_BN_CLICKED(IDC_CHK_SAMERAD, OnChkSamerad)
ON_WM_PAINT()
ON_BN_CLICKED(IDC_RAD_TREEONE, OnRadioTree)
ON_BN_CLICKED(IDC_RAD_TREETWO, OnRadioTree)
ON_BN_CLICKED(IDC_RAD_TREETHREE, OnRadioTree)
ON_BN_CLICKED(IDC_RAD_TREEFOUR, OnRadioTree)
ON_EN_KILLFOCUS(IDC_EDIT_RADMIN, OnKillfocusRadMin)
ON_EN_KILLFOCUS(IDC_EDIT_RADMAX, OnKillfocusRadMax)
ON_EN_KILLFOCUS(IDC_EDIT_DISMIN, OnKillfocusDisMin)
ON_EN_KILLFOCUS(IDC_EDIT_DISMAX, OnKillfocusDisMax)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
BOOL CMultPlaceTreeDlg::OnInitDialog()
{
CDialog::OnInitDialog();
UpdateData(TRUE);
2026-10-04 00:04:20 +08:00
// 设置幻灯片
2026-09-28 15:28:50 +08:00
SetPicture();
2026-10-04 00:04:20 +08:00
// 获取当前的绘图单位 bIsMetre=true:M;bIsMetre=false:mm
2026-09-28 15:28:50 +08:00
BOOL bIsMetre = DocGetMeterUnitDraw();
if (bIsMetre)
{
2026-10-04 00:04:20 +08:00
this->SetWindowText(_T("成片布树(单位:M)")); // 对话框标题设置
2026-09-28 15:28:50 +08:00
}
else
{
2026-10-04 00:04:20 +08:00
this->SetWindowText(_T("成片布树(单位:mm)"));
2026-09-28 15:28:50 +08:00
}
2026-10-04 00:04:20 +08:00
// 固定半径被选
2026-09-28 15:28:50 +08:00
GetDlgItem(IDC_EDIT_DISMAX)->EnableWindow(!m_bSameDis);
2026-10-04 00:04:20 +08:00
// 固定间距被选
2026-09-28 15:28:50 +08:00
GetDlgItem(IDC_EDIT_RADMAX)->EnableWindow(!m_bSameRad);
return TRUE;
}
2026-10-04 00:04:20 +08:00
// 固定间距的实现
2026-09-28 15:28:50 +08:00
void CMultPlaceTreeDlg::OnChkSamedis()
{
UpdateData();
GetDlgItem(IDC_EDIT_DISMAX)->EnableWindow(!m_bSameDis);
}
2026-10-04 00:04:20 +08:00
// 固定半径的实现
2026-09-28 15:28:50 +08:00
void CMultPlaceTreeDlg::OnChkSamerad()
{
UpdateData();
GetDlgItem(IDC_EDIT_RADMAX)->EnableWindow(!m_bSameRad);
}
2026-10-04 00:04:20 +08:00
// 树形切换
2026-09-28 15:28:50 +08:00
void CMultPlaceTreeDlg::OnRadioTree()
{
UpdateData();
2026-10-04 00:04:20 +08:00
SetPicture(); // 设置幻灯片
2026-09-28 15:28:50 +08:00
}
2026-10-04 00:04:20 +08:00
// 设置幻灯片显示
2026-09-28 15:28:50 +08:00
void CMultPlaceTreeDlg::SetPicture()
{
XString sFilePath(256);
2026-10-04 00:04:20 +08:00
if (m_iTreeType == 0) // 树形1
2026-09-28 15:28:50 +08:00
{
sFilePath << _T("TArch(multplacetree01)");
}
2026-10-04 00:04:20 +08:00
else if (m_iTreeType == 1) // 树形2
2026-09-28 15:28:50 +08:00
{
sFilePath << _T("TArch(multplacetree02)");
}
2026-10-04 00:04:20 +08:00
else if(m_iTreeType == 2) // 树形3
2026-09-28 15:28:50 +08:00
{
sFilePath << _T("TArch(multplacetree03)");
}
2026-10-04 00:04:20 +08:00
else if(m_iTreeType == 3) // 树形4
2026-09-28 15:28:50 +08:00
{
sFilePath << _T("TArch(multplacetree04)");
}
2026-10-04 00:04:20 +08:00
// 获得图片控件
2026-09-28 15:28:50 +08:00
CWnd* pWndBmp = GetDlgItem(IDC_STATIC_PREVIEW);
ASSERT(pWndBmp);
2026-10-04 00:04:20 +08:00
// 获得图片区域
2026-09-28 15:28:50 +08:00
CDC *pDC = pWndBmp->GetDC();
CRect rect;
pWndBmp->GetClientRect(rect);
m_imgPreview.InitDC(pDC, rect, GetAcadBackColor());
m_imgPreview.PaintSlide(sFilePath);
m_imgPreview.SetDC(NULL);
pWndBmp->ReleaseDC(pDC);
}
2026-10-04 00:04:20 +08:00
// 窗口重绘消息
2026-09-28 15:28:50 +08:00
void CMultPlaceTreeDlg::OnPaint()
{
CPaintDC dc(this);
CRect rcClip, rcImage;
dc.GetClipBox(&rcClip);
CWnd *pImageBox = GetDlgItem(IDC_STATIC_PREVIEW);
if (pImageBox)
{
pImageBox->GetWindowRect(&rcImage);
ScreenToClient(&rcImage);
if (!rcImage.IntersectRect(&rcImage, &rcClip))
return;
CDC *pDC = pImageBox->GetDC();
m_imgPreview.SetDC(pDC);
m_imgPreview.Redraw();
m_imgPreview.SetDC(NULL);
pImageBox->ReleaseDC(pDC);
}
}
2026-10-04 00:04:20 +08:00
// 修改树形半径
2026-09-28 15:28:50 +08:00
void CMultPlaceTreeDlg::OnKillfocusRadMin()
{
UpdateData();
if (IsDigital(m_csRadMin) || m_csRadMin.Find(_T("."), 0)>0)
{
m_dRadMin = _AS_MM(GetRadMin());
}
else
{
2026-10-04 00:04:20 +08:00
MessageBox(_T("请输入数字!"));
2026-09-28 15:28:50 +08:00
}
m_csRadMin = GetFormatData(m_dRadMin);
UpdateData(FALSE);
}
void CMultPlaceTreeDlg::OnKillfocusRadMax()
{
UpdateData();
if (IsDigital(m_csRadMax) || m_csRadMax.Find(_T("."), 0)>0)
{
m_dRadMax = _AS_MM(GetRadMax());
}
else
{
2026-10-04 00:04:20 +08:00
MessageBox(_T("请输入数字!"));
2026-09-28 15:28:50 +08:00
}
m_csRadMax = GetFormatData(m_dRadMax);
UpdateData(FALSE);
}
2026-10-04 00:04:20 +08:00
// 修改树间距
2026-09-28 15:28:50 +08:00
void CMultPlaceTreeDlg::OnKillfocusDisMin()
{
UpdateData();
if (IsDigital(m_csDisMin) || m_csDisMin.Find(_T("."), 0)>0)
{
m_dDisMin = _AS_MM(GetDisMin());
}
else
{
2026-10-04 00:04:20 +08:00
MessageBox(_T("请输入数字!"));
2026-09-28 15:28:50 +08:00
}
m_csDisMin = GetFormatData(m_dDisMin);
UpdateData(FALSE);
}
void CMultPlaceTreeDlg::OnKillfocusDisMax()
{
UpdateData();
if (IsDigital(m_csDisMax) || m_csDisMax.Find(_T("."), 0)>0)
{
m_dDisMax = _AS_MM(GetDisMax());
}
else
{
2026-10-04 00:04:20 +08:00
MessageBox(_T("请输入数字!"));
2026-09-28 15:28:50 +08:00
}
m_csDisMax = GetFormatData(m_dDisMax);
UpdateData(FALSE);
}
double CMultPlaceTreeDlg::GetDisMax() const
{
return _tstof(m_csDisMax);
}
double CMultPlaceTreeDlg::GetDisMin() const
{
return _tstof(m_csDisMin);
}
double CMultPlaceTreeDlg::GetRadMax() const
{
return _tstof(m_csRadMax);
}
double CMultPlaceTreeDlg::GetRadMin() const
{
return _tstof(m_csRadMin);
}