Files
envi-code/SourceCode/Code2026/tg_shs/shs_TwtPump/DrawWaterTankDlg.cpp
T

594 lines
16 KiB
C++
Raw Normal View History

2026-09-28 15:28:50 +08:00
// DrawWaterTankDlg.cpp : implementation file
//
#include "stdafx.h"
#include "DrawWaterTankDlg.h"
#include "SelWaterTankDlg.h"
#include <dbrect.h>
#include <dbWaterTank.h>
#include <tapi.h>
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
//extern TARCH_IMPEXP int DragMovePickSet(PickSet &ss, const TCHAR *pszPrompt, const XPoint &ptBase, XPoint &ptFinal);
//extern GEOAPI int DragPickSet1(PickSet &ss, XPoint &ptBase);
/////////////////////////////////////////////////////////////////////////////
// CDrawWaterTankDlg dialog
void DrawDashLine(XPoint pt1, XPoint pt2, double nScale)
{
XLine line5(pt1, pt2, 1);
line5.Make();
Entity entLast;
entLast.GetLast();
AcDbObjectId eId;
AcDbEntity *pEnt = NULL;
acdbGetObjectId(eId, entLast);
acdbOpenObject(pEnt, eId, AcDb::kForWrite);
if(!pEnt)
return;
pEnt->setLinetype(_T("DASH"));
pEnt->setLinetypeScale(nScale);
pEnt->close();
}
//***************************************************************************************************
// 编辑水箱
//***************************************************************************************************
int EditWaterTank(AcDbObjectId id)
{
if(!id)
return RTERROR;
int iLength(0), iWidth(0), iHeight(0);
CTemporaryResourceOverride vTemp;
CDrawWaterTankDlg dlg;
OPENOBJ_BEGIN(id, AcDb::kForRead, TDbWaterTank, pEquip);
if(pEquip){
dlg.m_nHeight = pEquip->GetHeight();
dlg.m_nLength = pEquip->GetLength();
dlg.m_nWidth = pEquip->GetWidth();
dlg.m_bNeedHole = pEquip->IsNeedHole();
dlg.m_bNeedSleeper = pEquip->IsNeedSleeper();
dlg.m_iNum = pEquip->GetSleeperNum();
dlg.m_nHoleWidth = pEquip->GetHoleWidth();
dlg.m_nLowLine = pEquip->GetLowLine();
dlg.m_nHighLine = pEquip->GetHighLine();
dlg.m_iSleepPos = pEquip->GetSleeperPos();
dlg.m_iShape = pEquip->GetShape();
dlg.m_iType = pEquip->GetShowType();
dlg.m_dSleeperHeight = pEquip->GetSleeperWidth(); //枕木高
dlg.m_nInEle = pEquip->GetWaterInEle();
dlg.m_nOutEle = pEquip->GetRushEle();
dlg.m_nHoleType = pEquip->HoleIsRect();
dlg.m_dSleeperWidth = pEquip->GetSpare(); //枕木宽 modified by cet 2009.11.11
dlg.m_dSleeperLen = pEquip->GetSleeperLen(); // 枕木长 cet 2011.4.22 add
dlg.m_dTankElev = pEquip->GetElev();// zxl 2012.12.03 add
}
OPENOBJ_END();
if(dlg.DoModal() != IDOK)
return 1;
OPENOBJ_BEGIN(id, AcDb::kForWrite, TDbWaterTank, pEquip);
if(pEquip){
pEquip->SetHeight(dlg.m_nHeight);
pEquip->SetLength(dlg.m_nLength);
pEquip->SetWidth(dlg.m_nWidth);
pEquip->SetNeedHole(dlg.m_bNeedHole);
pEquip->SetNeedSleeper(dlg.m_bNeedSleeper);
pEquip->SetSleeperNum(dlg.m_iNum);
pEquip->SetHoleWidth(dlg.m_nHoleWidth);
pEquip->SetLowLine(dlg.m_nLowLine);
pEquip->SetHighLine(dlg.m_nHighLine);
pEquip->SetSleeperPos(dlg.m_iSleepPos);
pEquip->SetShape(dlg.m_iShape);
pEquip->SetShowType(dlg.m_iType);
pEquip->SetSleeperWidth(dlg.m_dSleeperHeight); //枕木高
pEquip->SetWaterInEle(dlg.m_nInEle);
pEquip->SetRushEle(dlg.m_nOutEle);
pEquip->SetHoleRect(dlg.m_nHoleType);
pEquip->SetSpare(dlg.m_dSleeperWidth); //枕木宽 modified by cet 2009.11.11
pEquip->SetSleeperLen(dlg.m_dSleeperLen); // 枕木长 cet 2011.4.22 add
pEquip->SetElev(dlg.m_dTankElev);// zxl 2012.12.03 add
//调整人孔位置
TDbRect rect1;
XPoint ptIns;
ptIns = pEquip->GetLocation();
double nLength = dlg.m_nLength * 1000;
double nWidth = dlg.m_nWidth * 1000;
double nHoleWidth = dlg.m_nHoleWidth * 1000;
rect1.SetSizeX(nLength);
rect1.SetSizeY(nWidth);
rect1.SetCenter(ptIns);
rect1.SetRotation(pEquip->GetRotation()); // cet 2011.9.15 add
if(dlg.m_iShape == 1)
{
XPoint ptHole;
XPoint ptHoleBefore = pEquip->GetHoleInsert();
double dMin = ptHoleBefore.Distance2d(rect1.GetUpLeft());
ptHole = rect1.GetUpLeft();
ptHole = Wcs2Ucs(ptHole); // cet 2011.9.15
ads_polar(ptHole, 0, nHoleWidth/2, ptHole);
ads_polar(ptHole, PI/2, -nHoleWidth/2, ptHole);
ptHole = Ucs2Wcs(ptHole); // cet 2011.9.15
if (ptHoleBefore.Distance2d(rect1.GetUpRight()) < dMin)
{
ptHole = rect1.GetUpRight();
ptHole = Wcs2Ucs(ptHole); // cet 2011.9.15
ads_polar(ptHole, 0, -nHoleWidth/2, ptHole);
ads_polar(ptHole, PI/2, -nHoleWidth/2, ptHole);
ptHole = Ucs2Wcs(ptHole); // cet 2011.9.15
dMin = ptHoleBefore.Distance2d(rect1.GetUpRight());
}
if (ptHoleBefore.Distance2d(rect1.GetLowLeft()) < dMin)
{
ptHole = rect1.GetLowLeft();
ptHole = Wcs2Ucs(ptHole); // cet 2011.9.15
ads_polar(ptHole, 0, nHoleWidth/2, ptHole);
ads_polar(ptHole, PI/2, nHoleWidth/2, ptHole);
ptHole = Ucs2Wcs(ptHole); // cet 2011.9.15
dMin = ptHoleBefore.Distance2d(rect1.GetLowLeft());
}
if (ptHoleBefore.Distance2d(rect1.GetLowRight()) < dMin)
{
ptHole = rect1.GetLowRight();
ptHole = Wcs2Ucs(ptHole); // cet 2011.9.15
ads_polar(ptHole, 0, -nHoleWidth/2, ptHole);
ads_polar(ptHole, PI/2, nHoleWidth/2, ptHole);
ptHole = Ucs2Wcs(ptHole); // cet 2011.9.15
dMin = ptHoleBefore.Distance2d(rect1.GetLowRight());
}
pEquip->SetHoleInsert(ptHole);
}
}
OPENOBJ_END();
return 1;
}
void DrawWaterTank()
{
CTemporaryResourceOverride over;
CDrawWaterTankDlg dlg;
if(dlg.DoModal() != IDOK)
return;
XPoint ptIns, ptHole;
if(ads_getpoint(NULL, _T("\n请点取水箱插入点<退出>:"), ptIns) != RTNORM)
return;
ptIns = Ucs2Wcs(ptIns);
InitLayer(LAY_TWT_WATERTANK);
//XPushVarStr clayer(_T("CLAYER"), LAY_TWT_WATERTANK); cet 2011.10.11 del 导致产生"CLAYER"图层
double nLength = dlg.m_nLength * 1000;
double nWidth = dlg.m_nWidth * 1000;
double nHoleWidth = dlg.m_nHoleWidth * 1000;
TDbRect rect1;
rect1.SetSizeX(nLength);
rect1.SetSizeY(nWidth);
rect1.SetCenter(ptIns);
rect1.SetRotation(Ucs2Wcs(0.0)); // cet 2011.9.15 add
ptHole = rect1.GetUpLeft();
ptHole = Wcs2Ucs(ptHole); // cet 2011.9.15 add
ads_polar(ptHole, 0, nHoleWidth/2, ptHole);
ads_polar(ptHole, PI/2, -nHoleWidth/2, ptHole);
ptHole = Ucs2Wcs(ptHole); // cet 2011.9.15 add
CString csDwb = g_csDwbPath + _T("TwtSys");
XString xsTmp;
if(LoadDwbBlock(csDwb, _T("00000415"), xsTmp) != RTNORM) //锅盖
return;
TDbWaterTank *pTank = new TDbWaterTank;
pTank->SetLocation(ptIns);
if(dlg.m_iShape != 1)
pTank->SetHoleInsert(ptIns);
else
pTank->SetHoleInsert(ptHole);
pTank->SetDashLayer(InitDashLayer(_T("TWT_DASH")));
pTank->SetHeight(dlg.m_nHeight);
pTank->SetWidth(dlg.m_nWidth);
pTank->SetLength(dlg.m_nLength);
pTank->SetNeedHole(dlg.m_bNeedHole);
pTank->SetNeedSleeper(dlg.m_bNeedSleeper);
pTank->SetSleeperPos(dlg.m_iSleepPos);
pTank->SetLowLine(dlg.m_nLowLine);
pTank->SetHighLine(dlg.m_nHighLine);
pTank->SetSleeperNum(dlg.m_iNum);
pTank->SetShowType(dlg.m_iType);
pTank->SetElev(dlg.m_dTankElev);// zxl 2012.12.03 add
pTank->SetBlock3d(GetBlockIdFromString(xsTmp));
pTank->SetShape(dlg.m_iShape);
pTank->SetSleeperWidth(dlg.m_dSleeperHeight); //枕木高
pTank->SetSpare(dlg.m_dSleeperWidth); //枕木宽 modified by cet 2009.11.11
pTank->SetSleeperLen(dlg.m_dSleeperLen); // 枕木长 cet 2011.4.22 addd
pTank->SetHoleWidth(dlg.m_nHoleWidth);
pTank->SetHoleRect(dlg.m_nHoleType);
pTank->SetRotation(Ucs2Wcs(0.0)); // cet 2011.8.29 add
pTank->setLayer(LAY_TWT_WATERTANK); // cet 2011.10.11 add
AcDbObjectId id = AddToCurrentSpace(pTank, Adesk::kTrue);
}
double CDrawWaterTankDlg::m_nHeight = 2;
double CDrawWaterTankDlg::m_nLength = 3;
double CDrawWaterTankDlg::m_nWidth = 2;
int CDrawWaterTankDlg::m_iType = 0;
int CDrawWaterTankDlg::m_iShape = 1; // cet 2011.9.14 add
double CDrawWaterTankDlg::m_dTankElev = 0.0;
CString CDrawWaterTankDlg::m_csCubage = _T("0.5");
CDrawWaterTankDlg::CDrawWaterTankDlg(CWnd* pParent /*=NULL*/)
: CDialog(CDrawWaterTankDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CDrawWaterTankDlg)
m_bNeedHole = TRUE;
m_bNeedSleeper = TRUE;
m_iNum = 3;
m_iSleepPos = 0;
m_nHighLine = 1.8;
m_nHoleWidth = 0.5;
m_nLowLine = 0;
m_nInEle = 0.0;
m_nOutEle = 0.0;
m_nHoleType = 0;
m_dSleeperHeight = 0.5;
m_dSleeperWidth = 0.2;
m_dSleeperLen = 0.0;
//}}AFX_DATA_INIT
}
void CDrawWaterTankDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CDrawWaterTankDlg)
DDX_Control(pDX, IDC_SPIN_NUM, m_spinNum);
DDX_Check(pDX, IDC_CHECK_NEED_HOLE, m_bNeedHole);
DDX_Check(pDX, IDC_CHECK_NEED_SLEEPER, m_bNeedSleeper);
DDX_Text(pDX, IDC_EDIT_NUM, m_iNum);
DDX_CBIndex(pDX, IDC_COMBO_POS2, m_iSleepPos);
DDX_Text(pDX, IDC_EDIT_HIGH_LINE, m_nHighLine);
DDX_Text(pDX, IDC_EDIT_HOLE_WIDTH, m_nHoleWidth);
DDX_Text(pDX, IDC_EDIT_LOW_LINE, m_nLowLine);
DDX_Text(pDX, IDC_EDIT_IN_ELE, m_nInEle);
DDX_Text(pDX, IDC_EDIT_OUT_ELE, m_nOutEle);
DDX_Radio(pDX, IDC_RADIORECTAN, m_nHoleType);
DDX_Text(pDX, IDC_EDIT_SLEEPER_HEIGHT, m_dSleeperHeight);
DDX_Text(pDX, IDC_EDIT_SLEEPER_WIDTH, m_dSleeperWidth);
DDX_Text(pDX, IDC_EDIT_SLEEPER_LEN, m_dSleeperLen);
DDX_Radio(pDX, IDC_RADIO_SHAPE1, m_iShape);
DDX_Radio(pDX, IDC_RADIO_TYPE1, m_iType);
DDX_Text(pDX, IDC_EDIT_CUBAGE, m_csCubage);
DDX_Text(pDX, IDC_EDIT_ELEV, m_dTankElev);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CDrawWaterTankDlg, CDialog)
//{{AFX_MSG_MAP(CDrawWaterTankDlg)
ON_BN_CLICKED(IDC_RADIO_SHAPE1, OnRadioShape1)
ON_BN_CLICKED(IDC_RADIO_SHAPE2, OnRadioShape2)
ON_BN_CLICKED(IDC_BUTTON_STANDARD, OnButtonStandard)
ON_BN_CLICKED(IDC_CHECK_NEED_HOLE, OnCheckNeedHole)
ON_BN_CLICKED(IDC_CHECK_NEED_SLEEPER, OnCheckNeedSleeper)
ON_BN_CLICKED(IDC_RADIO_SHAPE3, OnRadioShape3)
ON_EN_CHANGE(IDC_EDIT_LENGTH, OnChangeEditLength)
ON_EN_CHANGE(IDC_EDIT_WIDTH, OnChangeEditWidth)
ON_CBN_SELCHANGE(IDC_COMBO_POS2, OnSelchangeComboPos2)
ON_EN_CHANGE(IDC_EDIT_HEIGHT, OnChangeEditHeight)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDrawWaterTankDlg message handlers
BOOL CDrawWaterTankDlg::OnInitDialog()
{
CDialog::OnInitDialog();
m_spinNum.SetRange(1, 10);
ResetCheck();
CWnd *pWnd1 = GetDlgItem(IDC_CHECK_NEED_SLEEPER);
if(m_iShape == 0 || m_iShape == 2)
pWnd1->EnableWindow(FALSE);
else
pWnd1->EnableWindow(TRUE);
ResetEdit();
// cet 2011.6.7 add
UpdateTankData();
// cet 2011.4.22 add 枕木长未被赋值时
if (m_iSleepPos == 0 && fabs(m_dSleeperLen) < g_fZero)
{
OnChangeEditLength();
}
else if (m_iSleepPos == 1 && fabs(m_dSleeperLen) < g_fZero)
{
OnChangeEditWidth();
}
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
// 更新水箱数据 zxxl 2012.03.28 add
void CDrawWaterTankDlg::UpdateTankData()
{
CWnd *pWnd2 = GetDlgItem(IDC_EDIT_HEIGHT);
CWnd *pWnd3 = GetDlgItem(IDC_EDIT_LENGTH);
CWnd *pWnd4 = GetDlgItem(IDC_EDIT_WIDTH);
CString sTemp;
if (pWnd2 != NULL)
{
sTemp.Format(_T("%.3f"), m_nHeight);
sTemp.TrimRight(_T("0"));
sTemp.TrimRight(_T("."));
pWnd2->SetWindowText(sTemp);
}
if (pWnd3 != NULL)
{
sTemp.Format(_T("%.3f"), m_nLength);
sTemp.TrimRight(_T("0"));
sTemp.TrimRight(_T("."));
pWnd3->SetWindowText(sTemp);
}
if (pWnd4 != NULL)
{
sTemp.Format(_T("%.3f"), m_nWidth);
sTemp.TrimRight(_T("0"));
sTemp.TrimRight(_T("."));
pWnd4->SetWindowText(sTemp);
}
}
void CDrawWaterTankDlg::OnRadioShape1()
{
ResetEdit();
}
void CDrawWaterTankDlg::OnRadioShape2()
{
ResetEdit();
}
void CDrawWaterTankDlg::OnRadioShape3()
{
ResetEdit();
}
void CDrawWaterTankDlg::OnButtonStandard()
{
CTemporaryResourceOverride vTemp;
CSelWaterTankDlg dlg;
// zxl 2012.03.28 add 水箱类型联动
if (m_iShape == 0 || m_iShape == 2)
{
dlg.m_iShape = 0;
}
else
{
dlg.m_iShape = 1;
}
if(dlg.DoModal() != IDOK)
return;
m_csCubage = dlg.m_csCubage;
if (!((m_iShape == 0 || m_iShape == 2) && dlg.m_iShape == 0))
{
m_iShape = dlg.m_iShape;
}
if(m_iShape == 0 || m_iShape == 2){
m_nLength = (double)dlg.m_iRadius/1000;
m_nHeight = (double)dlg.m_iHeight/1000;
m_bNeedHole = FALSE;
}
else{
m_nLength = (double)dlg.m_iLength/1000;
m_nWidth = (double)dlg.m_iWidth/1000;
m_nHeight = (double)dlg.m_iHeight/1000;
}
UpdateData(FALSE);
// zxl 2012.03.28 add 显示水箱数据
UpdateTankData();
ResetEdit();
}
void CDrawWaterTankDlg::ResetEdit()
{
UpdateData(TRUE);
CWnd *pWnd1 = GetDlgItem(IDC_CHECK_NEED_SLEEPER);
CWnd *pWnd2 = GetDlgItem(IDC_STATIC_TEXT);
CWnd *pWnd3 = GetDlgItem(IDC_STATIC_TEXT2);
// CWnd *pWnd4 = GetDlgItem(IDC_STATIC_TEXT3);
// if(m_iShape == 2)
// pWnd4->SetWindowText("水箱长(m):");
// else
// pWnd4->SetWindowText("水箱高(m):");
if(m_iShape == 0 || m_iShape == 2){
pWnd1->EnableWindow(FALSE);
pWnd2->SetWindowText(_T("水箱直径:"));
pWnd3->SetWindowText(_T("支座高度:"));
if(m_nWidth > 1)
m_nWidth = 0.5;
m_bNeedSleeper = FALSE;
}
else{
pWnd1->EnableWindow(TRUE);
pWnd2->SetWindowText(_T("水箱长(m):"));
pWnd3->SetWindowText(_T("水箱宽(m):"));
if(m_nWidth < 1)
m_nWidth = 2;
m_bNeedSleeper = TRUE;
}
UpdateData(FALSE);
ResetCheck();
}
void CDrawWaterTankDlg::OnCheckNeedHole()
{
ResetCheck();
}
void CDrawWaterTankDlg::OnCheckNeedSleeper()
{
ResetCheck();
}
void CDrawWaterTankDlg::ResetCheck()
{
UpdateData(TRUE);
CWnd *pWnd1 = GetDlgItem(IDC_EDIT_HOLE_WIDTH);
// CWnd *pWnd2 = GetDlgItem(IDC_COMBO_POS);
CWnd *pWnd3 = GetDlgItem(IDC_EDIT_NUM);
CWnd *pWnd4 = GetDlgItem(IDC_SPIN_NUM);
CWnd *pWnd5 = GetDlgItem(IDC_COMBO_POS2);
CWnd *pWnd6 = GetDlgItem(IDC_EDIT_SLEEPER_HEIGHT);
CWnd *pWnd7 = GetDlgItem(IDC_EDIT_SLEEPER_WIDTH);
CWnd *pWnd8 = GetDlgItem(IDC_EDIT_SLEEPER_LEN); // cet 2011.4.22 add 枕木长
if(!m_bNeedHole){
pWnd1->EnableWindow(FALSE);
// pWnd2->EnableWindow(FALSE);
}
else{
pWnd1->EnableWindow(TRUE);
// pWnd2->EnableWindow(TRUE);
}
if(m_bNeedSleeper){
pWnd3->EnableWindow(TRUE);
pWnd4->EnableWindow(TRUE);
pWnd5->EnableWindow(TRUE);
pWnd6->EnableWindow(TRUE);
pWnd7->EnableWindow(TRUE);
pWnd8->EnableWindow(TRUE); // cet 2011.4.22 add
}
else{
pWnd3->EnableWindow(FALSE);
pWnd4->EnableWindow(FALSE);
pWnd5->EnableWindow(FALSE);
pWnd6->EnableWindow(FALSE);
pWnd7->EnableWindow(FALSE);
pWnd8->EnableWindow(FALSE); // cet 2011.4.22 add
}
}
//added by cet 2009.11.11
void CDrawWaterTankDlg::OnOK()
{
UpdateData();
// cet 2011.6.7 add
CWnd *pWnd2 = GetDlgItem(IDC_EDIT_HEIGHT);
CWnd *pWnd3 = GetDlgItem(IDC_EDIT_LENGTH);
CWnd *pWnd4 = GetDlgItem(IDC_EDIT_WIDTH);
CString sTemp;
if (pWnd2 != NULL)
{
pWnd2->GetWindowText(sTemp);
m_nHeight = _tstof(sTemp);
}
if (pWnd3 != NULL)
{
pWnd3->GetWindowText(sTemp);
m_nLength = _tstof(sTemp);
}
if (pWnd4 != NULL)
{
pWnd4->GetWindowText(sTemp);
m_nWidth = _tstof(sTemp);
}
if ((m_nWidth - (m_iNum - 1) * m_dSleeperWidth) < 0)
{
MessageBox(_T("枕木数宽度和应小于水箱宽度!"));
return;
}
CDialog::OnOK();
}
void CDrawWaterTankDlg::OnChangeEditLength()
{
UpdateData(TRUE);
// cet 2011.6.7 add
CWnd *pWnd = GetDlgItem(IDC_EDIT_LENGTH);
if (pWnd != NULL)
{
CString sTemp;
pWnd->GetWindowText(sTemp);
m_nLength = _tstof(sTemp);
}
if(m_iSleepPos == 0) // 枕木位置:水平
{
m_dSleeperLen = m_nLength + 0.1;
}
UpdateData(FALSE);
}
void CDrawWaterTankDlg::OnChangeEditWidth()
{
UpdateData(TRUE);
// cet 2011.6.7 add
CWnd *pWnd = GetDlgItem(IDC_EDIT_WIDTH);
if (pWnd != NULL)
{
CString sTemp;
pWnd->GetWindowText(sTemp);
m_nWidth = _tstof(sTemp);
}
if(m_iSleepPos == 1) // 枕木位置:垂直
{
m_dSleeperLen = m_nWidth + 0.1;
}
UpdateData(FALSE);
}
void CDrawWaterTankDlg::OnSelchangeComboPos2()
{
UpdateData(TRUE);
if (m_iSleepPos == 0)
{
m_dSleeperLen = m_nLength + 0.1;
}
else if (m_iSleepPos == 1)
{
m_dSleeperLen = m_nWidth + 0.1;
}
UpdateData(FALSE);
}
void CDrawWaterTankDlg::OnChangeEditHeight()
{
UpdateData(TRUE);
CWnd *pWnd = GetDlgItem(IDC_EDIT_HEIGHT);
if (pWnd != NULL)
{
CString sTemp;
pWnd->GetWindowText(sTemp);
m_nHeight = _tstof(sTemp);
}
UpdateData(FALSE);
}