Files
envi-code/SourceCode/Code2026/tg_shs/shs_kerncmd/Elevator.cpp
T
2026-09-28 15:28:50 +08:00

439 lines
10 KiB
C++

// Elevator.cpp : implementation file
//
#include "stdafx.h"
#include "resource.h"
#include "Elevator.h"
#ifdef _DEBUG
//#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
// extern GEOAPI int XGetCorner(const XPoint &ptCorn1, const TCHAR *pszMsg, XPoint &ptCorn2);
// 电梯数据的结构体
struct TElevatorData
{
const TCHAR *szCarring;
double dRoomWidth;
double dRoomDeep;
double dWellWidth;
double dWellDeep;
double dDoorWidth;
};
// 客梯数据
struct TElevatorData passenger[5] = {
{_T("630"), 1100.0, 1400.0, 1800.0, 2100.0, 800.0},
{_T("800"), 1350.0, 1400.0, 1900.0, 2300.0, 800.0},
{_T("1000"), 1600.0, 1400.0, 2400.0, 2300.0, 1100.0},
{_T("1250"), 1950.0, 1400.0, 2600.0, 2300.0, 1100.0},
{_T("1600"), 1950.0, 1750.0, 2600.0, 2600.0, 1100.0}
};
// 住宅梯数据
struct TElevatorData house[3] = {
{_T("400"), 1100.0, 950.0, 1800.0, 1600.0, 800.0},
{_T("630"), 1100.0, 1400.0, 1800.0, 2100.0, 800.0},
{_T("1000"), 1100.0, 2100.0, 1800.0, 2600.0, 800.0}
};
// 医梯数据
struct TElevatorData medicine[3] = {
{_T("1600"), 1400.0, 2400.0, 2400.0, 3000.0, 1300.0},
{_T("2000"), 1500.0, 2700.0, 2400.0, 3300.0, 1300.0},
{_T("2500"), 1800.0, 2700.0, 2700.0, 3300.0, 1400.0}
};
// 货梯数据
struct TElevatorData goods[5] = {
{_T("630"), 1100.0, 1400.0, 2100.0, 1900.0, 1100.0},
{_T("1000"), 1300.0, 1750.0, 2400.0, 2300.0, 1300.0},
{_T("1600"), 1500.0, 2250.0, 2700.0, 2800.0, 1500.0},
{_T("2000"), 1500.0, 2750.0, 2700.0, 3200.0, 1500.0},
{_T("3000"), 2200.0, 2940.0, 3150.0, 3400.0, 1800.0}
};
/////////////////////////////////////////////////////////////////////////////
// CElevatorDlg dialog
int CElevatorDlg::m_iForm = 0;
int CElevatorDlg::m_iType = 0;
int CElevatorDlg::m_iCarrying = 0;
// Add by Zyu on 100401
BOOL CElevatorDlg::m_bUseDefault = false;
// sg add 100426,保留按井道决定轿厢尺寸时,输入的门宽
double CElevatorDlg::m_dDefaultDoorWidth = 1100;
IMPLEMENT_DYNAMIC(CElevatorDlg, CModelessDialog)
CElevatorDlg::CElevatorDlg(CWnd* pParent /*=NULL*/)
: CModelessDialog(CElevatorDlg::IDD, pParent)
{
m_dDoorWidth = 0.0;
m_dRoomDeep = 0.0;
m_dRoomWidth = 0.0;
}
CElevatorDlg::~CElevatorDlg()
{
}
// Add by Zyu on 100401
// 查询是否使用"按井道决定轿厢尺寸"一项设置
// Begin
BOOL CElevatorDlg::IsUseDefault()
{
if (::IsWindow(this->GetSafeHwnd()))
{
CDataExchange dataExc(this, true);
DDX_Check(&dataExc, IDC_CHK_DEFAULT, m_bUseDefault);
}
return m_bUseDefault;
}
// End
void CElevatorDlg::DoDataExchange(CDataExchange* pDX)
{
CModelessDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CElevatorDlg)
DDX_Control(pDX, IDC_COMBO_TYPE, m_cmbType);
DDX_Control(pDX, IDC_COMBO_FORM, m_cmbForm);
DDX_Control(pDX, IDC_COMBO_CARRYING, m_cmbCarrying);
DDX_Text(pDX, IDC_EDIT_DOOR_WIDTH, m_dDoorWidth);
DDX_Text(pDX, IDC_EDIT_ROOM_DEEP, m_dRoomDeep);
DDX_Text(pDX, IDC_EDIT_ROOM_WIDTH, m_dRoomWidth);
DDX_CBIndex(pDX, IDC_COMBO_FORM, m_iForm);
DDX_CBIndex(pDX, IDC_COMBO_TYPE, m_iType);
DDX_CBIndex(pDX, IDC_COMBO_CARRYING, m_iCarrying);
// Add by Zyu on 100401
DDX_Check(pDX, IDC_CHK_DEFAULT, m_bUseDefault);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CElevatorDlg, CModelessDialog)
//{{AFX_MSG_MAP(CElevatorDlg)
ON_WM_PAINT()
ON_CBN_SELCHANGE(IDC_COMBO_CARRYING, OnSelchangeComboCarrying)
ON_CBN_SELCHANGE(IDC_COMBO_TYPE, OnSelchangeComboType)
ON_BN_CLICKED(IDC_CHK_DEFAULT, OnBnClickedChkDefault)
ON_EN_KILLFOCUS(IDC_EDIT_DOOR_WIDTH, OnKillFocusDoorWidth)
ON_CBN_SELCHANGE(IDC_COMBO_FORM, OnCbnSelchangeComboForm)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CElevatorDlg message handlers
void CElevatorDlg::OnOK()
{
UpdateData();
if (CheckData() == RTERROR)
{
return ;
}
CModelessDialog::OnOK();
}
BOOL CElevatorDlg::OnInitDialog()
{
CModelessDialog::OnInitDialog();
// Set Tip
// Set Default elevator type
UpdateData(FALSE);
// Initialize the door form combox data
SetDoorForm(); // 此函数应在UpdateData(TRUE)前运行,Zyu add on 101207
// Change sample picture
// Initialize the carrying combox data
SetCarrying();
// Set the default elevator data
SetData();
// Add by Zyu on 100401
SetControls(!m_bUseDefault);
SetPicture();
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
// Add by Zyu on 100401
// Begin
// 点击复选框后,调整对话框
void CElevatorDlg::OnBnClickedChkDefault()
{
CDataExchange dataExt(this, true);
DDX_Check(&dataExt, IDC_CHK_DEFAULT, m_bUseDefault);
SetControls(!m_bUseDefault);
SetPicture();
}
// End
void CElevatorDlg::OnSelchangeComboCarrying()
{
UpdateData(TRUE);
// Initialize the door form combox data
SetDoorForm();
// Set the default elevator data
SetData();
}
void CElevatorDlg::OnSelchangeComboType()
{
UpdateData(TRUE);
m_iCarrying = 0; // zjt add 160906
// Change sample picture
SetPicture();
// Initialize the carrying combox data
SetCarrying();
// Initialize the door form combox data
SetDoorForm();
// Set the default elevator data
SetData();
}
void CElevatorDlg::SetPicture()
{
XString sFilePath(256);
// Add by Zyu on 100401
// Begin
//if (m_iType < 2)
// sFilePath << _T("TArch(lift01)"); //FindFile(_T("lift01.sld"), sFilePath);
//else
// sFilePath << _T("TArch(lift02)"); //FindFile(_T("lift02.sld"), sFilePath);
// 如果选择"按井道决定轿厢尺寸",设置相应的幻灯片
if (((CButton*)GetDlgItem(IDC_CHK_DEFAULT))->GetCheck())
{
// Zyu modify on 101207,调用相应的幻灯片
//sFilePath << _T("TArch(lift03)");
// 调用中分样式幻灯片
if (m_iForm == 0)
{
sFilePath << _T("TArch(lift03)");
}
// 调用旁开样式幻灯片
else
{
sFilePath << _T("TArch(lift04)");
}
}
else if (m_iType < 2)
{
sFilePath << _T("TArch(lift01)"); //FindFile(_T("lift01.sld"), sFilePath);
}
else
{
sFilePath << _T("TArch(lift02)"); //FindFile(_T("lift02.sld"), sFilePath);
}
// End
//if (!sFilePath)
// return;
CWnd* pBmpWnd = GetDlgItem(IDC_BITMAP);
ASSERT(pBmpWnd);
CDC *pDC = pBmpWnd->GetDC();
CRect rect;
pBmpWnd->GetClientRect(rect);
m_imgPreview.InitDC(pDC, rect, GetAcadBackColor());
m_imgPreview.PaintSlide(sFilePath);
m_imgPreview.SetDC(NULL);
pBmpWnd->ReleaseDC(pDC);
}
void CElevatorDlg::OnPaint()
{
CPaintDC dc(this);
CRect rcClip, rcImage;
dc.GetClipBox(&rcClip);
CWnd *pImageBox = GetDlgItem(IDC_BITMAP);
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);
}
}
int CElevatorDlg::CheckData()
{
return RTNORM;
}
void CElevatorDlg::SetData()
{
// Get room standard value
switch(m_iType)
{
case 0:
m_dDoorWidth = passenger[m_iCarrying].dDoorWidth;
m_dRoomDeep = passenger[m_iCarrying].dRoomDeep;
m_dRoomWidth = passenger[m_iCarrying].dRoomWidth;
break;
case 1:
m_dDoorWidth = house[m_iCarrying].dDoorWidth;
m_dRoomDeep = house[m_iCarrying].dRoomDeep;
m_dRoomWidth = house[m_iCarrying].dRoomWidth;
break;
case 2:
m_dDoorWidth = medicine[m_iCarrying].dDoorWidth;
m_dRoomDeep = medicine[m_iCarrying].dRoomDeep;
m_dRoomWidth = medicine[m_iCarrying].dRoomWidth;
break;
case 3:
m_dDoorWidth = goods[m_iCarrying].dDoorWidth;
m_dRoomDeep = goods[m_iCarrying].dRoomDeep;
m_dRoomWidth = goods[m_iCarrying].dRoomWidth;
}
UpdateData(FALSE);
}
void CElevatorDlg::SetCarrying()
{
// zjt add 160906 记录上一次选择的选项
int iCarry = m_iCarrying;
UpdateData();
m_iCarrying = iCarry;
m_cmbCarrying.ResetContent();
switch(m_iType)
{
case 0:
m_cmbCarrying.AddString(CString(passenger[0].szCarring));
m_cmbCarrying.AddString(CString(passenger[1].szCarring));
m_cmbCarrying.AddString(CString(passenger[2].szCarring));
m_cmbCarrying.AddString(CString(passenger[3].szCarring));
m_cmbCarrying.AddString(CString(passenger[4].szCarring));
break;
case 1:
m_cmbCarrying.AddString(CString(house[0].szCarring));
m_cmbCarrying.AddString(CString(house[1].szCarring));
m_cmbCarrying.AddString(CString(house[2].szCarring));
break;
case 2:
m_cmbCarrying.AddString(CString(medicine[0].szCarring));
m_cmbCarrying.AddString(CString(medicine[1].szCarring));
m_cmbCarrying.AddString(CString(medicine[2].szCarring));
break;
case 3:
for (long i=0; i<ELEMENTS(goods); i++)
{
m_cmbCarrying.AddString(CString(goods[i].szCarring));
//m_cmbCarrying.AddString(CString(goods[1].szCarring));
//m_cmbCarrying.AddString(CString(goods[2].szCarring));
//m_cmbCarrying.AddString(CString(goods[3].szCarring));
//m_cmbCarrying.AddString(CString(goods[5].szCarring));
}
}
if(m_iCarrying < 0)
{
m_iCarrying = 0;
}
UpdateData(FALSE);
}
void CElevatorDlg::SetDoorForm()
{
// Zyu modify on 101207,先更新,后重置控件
//m_cmbForm.ResetContent();
//int iForm = m_iForm; // 保证索引值不被改变
//UpdateData();
//m_iForm = iForm;
// zjt delete 160906
m_cmbForm.ResetContent();
if (m_iType==0 && !m_bUseDefault)
{
m_cmbForm.AddString(CString(_T("中分")));
// Zyu add on 101207,只有中分样式时,默认选中
m_iForm = 0;
}
else
{
m_cmbForm.AddString(CString(_T("中分")));
m_cmbForm.AddString(CString(_T("旁开")));
}
// Zyu modify on 101207,此处不强制选择中分样式
//m_iForm = 0;
if (m_iForm < 0)
{
m_iForm = 0;
}
UpdateData(FALSE);
}
// Add by Zyu on 100401
// Begin
// 设置对话框里的相关控件是否可用
void CElevatorDlg::SetControls(BOOL bEnable)
{
GetDlgItem(IDC_COMBO_TYPE)->EnableWindow(bEnable);
GetDlgItem(IDC_COMBO_CARRYING)->EnableWindow(bEnable);
GetDlgItem(IDC_EDIT_ROOM_WIDTH)->EnableWindow(bEnable);
GetDlgItem(IDC_EDIT_ROOM_DEEP)->EnableWindow(bEnable);
SetDoorForm();
// sg add 100426,保留按井道决定轿厢尺寸时,输入的门宽
if (!bEnable)
{
m_dDoorWidth = m_dDefaultDoorWidth;
}
else
{
switch(m_iType)
{
case 0:
m_dDoorWidth = passenger[m_iCarrying].dDoorWidth;
break;
case 1:
m_dDoorWidth = house[m_iCarrying].dDoorWidth;
break;
case 2:
m_dDoorWidth = medicine[m_iCarrying].dDoorWidth;
break;
case 3:
m_dDoorWidth = goods[m_iCarrying].dDoorWidth;
}
}
UpdateData(FALSE);
}
// End
// sg add 100426,保留按井道决定轿厢尺寸时,输入的门宽
void CElevatorDlg::OnKillFocusDoorWidth()
{
UpdateData(TRUE);
if (m_bUseDefault)
{
m_dDefaultDoorWidth = m_dDoorWidth;
}
}
// Zyu add on 101207,按井道决定轿厢尺寸时,调整门形式幻灯片
void CElevatorDlg::OnCbnSelchangeComboForm()
{
UpdateData(TRUE);
SetPicture();
}