502 lines
12 KiB
C++
502 lines
12 KiB
C++
#include "stdafx.h"
|
|
#include "FZGWDlg.h"
|
|
#include "UITools.h"
|
|
#include "caddpipedbdlg.h"
|
|
|
|
#ifndef Plumbing_DB
|
|
#define Plumbing_DB _T("\\Plumbing.db")
|
|
#endif
|
|
|
|
namespace
|
|
{
|
|
int getMaxIDFromDB(LPCTSTR pszField, LPCTSTR pszTbl, CUIISQLiteServer *pDb)
|
|
{
|
|
if (!pszField || !pszTbl || !pDb) return -1;
|
|
CString ss(_T("")), v(_T(""));
|
|
ss.Format(_T("select max(%s) from %s"), pszField, pszTbl);
|
|
|
|
if (!pDb->GetSelData(ss, v)) return -1;
|
|
|
|
return _ttoi(v) + 1;
|
|
}
|
|
}
|
|
|
|
static const Adesk::UInt16 kColorByBlock = 0;
|
|
static const Adesk::UInt16 kRed = 1;
|
|
static const Adesk::UInt16 kYellow = 2;
|
|
static const Adesk::UInt16 kGreen = 3;
|
|
static const Adesk::UInt16 kCyan = 4;
|
|
static const Adesk::UInt16 kBlue = 5;
|
|
static const Adesk::UInt16 kMagenta = 6;
|
|
static const Adesk::UInt16 kWhite = 7;
|
|
static const Adesk::UInt16 kColorByLayer = 256;
|
|
|
|
static int g_nPipeNum = 0;
|
|
|
|
IMPLEMENT_DYNAMIC(CFZGWDlg, CDialog)
|
|
|
|
CFZGWDlg::CFZGWDlg(CWnd* pParent /*=NULL*/)
|
|
: CDialog(CFZGWDlg::IDD, pParent)
|
|
, m_bRemove(false)
|
|
, m_linetypeID(AcDbObjectId::kNull)
|
|
|
|
{
|
|
g_nPipeNum++;
|
|
m_data.m_nNo = g_nPipeNum;
|
|
UIDataCache::Read(_T("%d%d%d%d%d%d%s%i%i%i%i")
|
|
, _T("CFZGWDlg")
|
|
, &m_data.m_dD
|
|
, &m_data.m_dX
|
|
, &m_data.m_dW
|
|
, &m_data.m_dH
|
|
, &m_data.m_dL
|
|
, &m_data.m_dh
|
|
, &m_data.m_sSpec
|
|
, &m_data.m_nPos
|
|
, &m_data.m_nKind
|
|
, &m_data.m_nRows
|
|
, &m_data.m_id3DEqu);
|
|
}
|
|
|
|
CFZGWDlg::~CFZGWDlg()
|
|
{
|
|
}
|
|
|
|
void CFZGWDlg::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
DDX_Text(pDX, IDC_EDIT6, m_data.m_sSpec);
|
|
DDX_Text(pDX, IDC_EDIT1, m_data.m_dD);
|
|
DDX_Text(pDX, IDC_EDIT5, m_data.m_dX);
|
|
DDX_Text(pDX, IDC_EDIT2, m_data.m_dW);
|
|
DDX_Text(pDX, IDC_EDIT3, m_data.m_dH);
|
|
DDX_Text(pDX, IDC_EDIT4, m_data.m_dL);
|
|
DDX_Radio(pDX, IDC_RADIO2, m_data.m_nPos);
|
|
|
|
DDX_Control(pDX, IDC_LIST1, m_wndPipeList);
|
|
DDX_Control(pDX, IDC_LIST2, m_wndListBoxMaters);
|
|
DDX_Control(pDX, IDC_LIST3, m_wndSysListBox);
|
|
DDX_Control(pDX, IDC_COMBO_LTYPE, m_wndLineTypeBox);
|
|
DDX_LBString(pDX, IDC_LIST2, m_data.m_sMertial);
|
|
DDX_Text(pDX, IDC_EDIT7, m_data.m_nNo);
|
|
DDX_Radio(pDX, IDC_RADIO1, m_data.m_nKind);
|
|
DDX_Text(pDX, IDC_EDIT8, m_data.m_nRows);
|
|
DDX_Text(pDX, IDC_EDIT9, m_data.m_dh);
|
|
DDX_Control(pDX, IDC_EDIT8, m_wndRowEdit);
|
|
DDX_Control(pDX, IDC_EDIT9, m_wndhEdit);
|
|
}
|
|
|
|
BEGIN_MESSAGE_MAP(CFZGWDlg, CDialog)
|
|
ON_BN_CLICKED(IDOK, &CFZGWDlg::OnBnClickedOk)
|
|
ON_BN_CLICKED(IDOK2, &CFZGWDlg::OnBnClickedOk2)
|
|
ON_STN_CLICKED(IDC_STATIC_COLOR, &CFZGWDlg::OnStnClickedStaticColor)
|
|
ON_WM_CTLCOLOR()
|
|
ON_BN_CLICKED(IDC_RADIO1, &CFZGWDlg::OnBnClickedRadio1)
|
|
ON_BN_CLICKED(IDC_RADIO4, &CFZGWDlg::OnBnClickedRadio4)
|
|
ON_BN_CLICKED(IDC_BUTTON_SEL, &CFZGWDlg::OnBnClickedButtonSel)
|
|
ON_BN_CLICKED(IDC_BUTTON1, &CFZGWDlg::OnBnClickedButton1)
|
|
ON_BN_CLICKED(IDC_BUTTON4, &CFZGWDlg::OnBnClickedButton4)
|
|
ON_BN_CLICKED(IDC_BUTTON6, &CFZGWDlg::OnBnClickedButton6)
|
|
ON_BN_CLICKED(IDC_BUTTON8, &CFZGWDlg::OnBnClickedButton8)
|
|
ON_BN_CLICKED(IDC_BUTTON9, &CFZGWDlg::OnBnClickedButton9)
|
|
ON_BN_CLICKED(IDC_BUTTON10, &CFZGWDlg::OnBnClickedButton10)
|
|
END_MESSAGE_MAP()
|
|
|
|
BOOL CFZGWDlg::OnInitDialog()
|
|
{
|
|
CDialog::OnInitDialog();
|
|
|
|
UpdateData(FALSE);
|
|
|
|
#ifndef NDEBUG
|
|
EquTools::subClassGsViewAndShow(&m_wndGs, this, IDC_STATIC_3D, m_data.m_id3DEqu);
|
|
#else
|
|
CWnd *pWnd = GetDlgItem(IDC_STATIC_GRP);
|
|
if (pWnd) pWnd->ShowWindow(SW_HIDE);
|
|
pWnd = GetDlgItem(IDC_BUTTON_SEL);
|
|
if (pWnd) pWnd->ShowWindow(SW_HIDE);
|
|
pWnd = GetDlgItem(IDC_STATIC_3D);
|
|
if (pWnd) pWnd->ShowWindow(SW_HIDE);
|
|
#endif // DEBUG
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
m_wndPipeList.SetExtendedStyle(LVS_EX_FULLROWSELECT);
|
|
m_wndPipeList.InsertColumn(0, _T("公称直径(mm)"), LVCFMT_LEFT, 60);
|
|
m_wndPipeList.InsertColumn(1, _T("外径(mm)"), LVCFMT_LEFT, 60);
|
|
m_wndPipeList.InsertColumn(2, _T("壁厚(mm)"), LVCFMT_LEFT, 60);
|
|
m_wndPipeList.InsertColumn(3, _T("重量(m/kg)"), LVCFMT_LEFT, 60);
|
|
CString path = FilePath::GetSysDir() + Plumbing_DB;
|
|
if (!m_dbSQLite.InitADOServer(path))
|
|
{
|
|
AfxMessageBox(CString(_T("数据库初始化失败,请检查 sys")) + Plumbing_DB + _T("文件是否存在."));
|
|
return FALSE;
|
|
}
|
|
InitPipeList();
|
|
if (m_wndLineTypeBox.GetCount())
|
|
m_wndLineTypeBox.SetCurSel(0);
|
|
|
|
if (m_data.m_nKind == 0)
|
|
{
|
|
m_wndRowEdit.EnableWindow(FALSE);
|
|
m_wndhEdit.EnableWindow(FALSE);
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
void CFZGWDlg::OnBnClickedOk()
|
|
{
|
|
UpdateData();
|
|
|
|
if (m_data.m_dD < 0.2)
|
|
{
|
|
AfxMessageBox(_T("靠侧距离过小!"));
|
|
return;
|
|
}
|
|
|
|
if (m_data.m_dW < 0.2 || m_data.m_dH < 0.2 || m_data.m_dL < 0.2)
|
|
{
|
|
AfxMessageBox(_T("预留官位尺寸较小!"));
|
|
return;
|
|
}
|
|
|
|
if (m_data.m_nKind > 0)
|
|
{
|
|
double dHH = m_data.m_nRows * m_data.m_dh;
|
|
if (dHH - m_data.m_dH > 1.e-6)
|
|
{
|
|
AfxMessageBox(_T("角钢支架层数和间距总高大于支架高!清重新调整参数!"));
|
|
return;
|
|
}
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
int nItem = -1;
|
|
POSITION ps = m_wndPipeList.GetFirstSelectedItemPosition();
|
|
if (ps != NULL)
|
|
{
|
|
nItem = m_wndPipeList.GetNextSelectedItem(ps);
|
|
}
|
|
if (nItem == -1)
|
|
{
|
|
AfxMessageBox(_T("请选择管道规格!"));
|
|
return;
|
|
}
|
|
m_data.m_dDn = AS_MUNIT(_ttof(m_wndPipeList.GetItemText(nItem, 0)));
|
|
m_data.m_dPD = AS_MUNIT(_ttof(m_wndPipeList.GetItemText(nItem, 1)));
|
|
m_data.m_dt = AS_MUNIT(_ttof(m_wndPipeList.GetItemText(nItem, 2)));
|
|
m_data.m_dWeight = _ttof(m_wndPipeList.GetItemText(nItem, 3));
|
|
|
|
int nSel = m_wndListBoxMaters.GetCurSel();
|
|
if (nSel == -1)
|
|
{
|
|
AfxMessageBox(_T("请选择管道材质!"));
|
|
return;
|
|
}
|
|
m_wndListBoxMaters.GetText(nSel, m_data.m_sMertial);
|
|
|
|
int nSys = m_wndSysListBox.GetCurSel();
|
|
if (nSys == -1)
|
|
{
|
|
AfxMessageBox(_T("请选择管道用途系统!"));
|
|
return;
|
|
}
|
|
m_wndSysListBox.GetText(nSys, m_data.m_sCurrSys);
|
|
|
|
m_linetypeID = m_wndLineTypeBox.getOIDCurSel();
|
|
int idx = m_wndLineTypeBox.GetCurSel();
|
|
if (idx != -1)
|
|
m_wndLineTypeBox.GetLBText(idx, m_data.m_linetypeString);
|
|
//////////////////////////////////////////////////////////////////////////
|
|
UIDataCache::Write(_T("%d%d%d%d%d%d%s%i%i%i%i")
|
|
, _T("CFZGWDlg")
|
|
, &m_data.m_dD
|
|
, &m_data.m_dX
|
|
, &m_data.m_dW
|
|
, &m_data.m_dH
|
|
, &m_data.m_dL
|
|
, &m_data.m_dh
|
|
, &m_data.m_sSpec
|
|
, &m_data.m_nPos
|
|
, &m_data.m_nKind
|
|
, &m_data.m_nRows
|
|
, &m_data.m_id3DEqu);
|
|
OnOK();
|
|
}
|
|
|
|
CString CFZGWDlg::GetScript(CString& sScript,int nRoomIndex,CString& sOffsets)
|
|
{
|
|
sScript = m_data.toString(nRoomIndex, sOffsets);
|
|
return TypeConvert::i2s(m_data.m_nNo);
|
|
}
|
|
|
|
void CFZGWDlg::OnBnClickedOk2()
|
|
{
|
|
m_bRemove = true;
|
|
OnOK();
|
|
}
|
|
|
|
void CFZGWDlg::InitPipeList()
|
|
{
|
|
InitPipeRule();
|
|
InitPipeMaterial();
|
|
InitPipeSystem();
|
|
}
|
|
|
|
void CFZGWDlg::InitPipeRule()
|
|
{
|
|
m_wndPipeList.DeleteAllItems();
|
|
|
|
CString sSQL, sText;
|
|
sSQL = _T("select [公称直径],[外径],[壁厚],[重量] from AecOD order by [公称直径]");
|
|
|
|
CUIIValueTable table;
|
|
m_dbSQLite.GetSelData(sSQL, table);
|
|
table.ShowToListCtrl(&m_wndPipeList);
|
|
|
|
double dT = 0.0;
|
|
CString sDnold;
|
|
sDnold.Format(_T("%d"), (int)m_data.m_dDn);
|
|
|
|
bool bFind = false;
|
|
int nFindPos = 0;
|
|
|
|
for (int i = 0; i < m_wndPipeList.GetItemCount(); i++)
|
|
{
|
|
sText = m_wndPipeList.GetItemText(i, 0);
|
|
dT = _ttof(m_wndPipeList.GetItemText(i, 2));
|
|
if (sText.CompareNoCase(sDnold) == 0 && fabs(m_data.m_dt - dT) < 1.e-2)
|
|
{
|
|
m_wndPipeList.SetItemState(i, LVIS_SELECTED, LVIS_SELECTED);
|
|
m_wndPipeList.EnsureVisible(i, TRUE);
|
|
bFind = true;
|
|
nFindPos = i;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (!bFind)
|
|
{
|
|
if (m_wndPipeList.GetItemCount() > 0)
|
|
m_wndPipeList.SetItemState(nFindPos, LVIS_SELECTED, LVIS_SELECTED);
|
|
}
|
|
}
|
|
|
|
void CFZGWDlg::InitPipeMaterial()
|
|
{
|
|
m_wndListBoxMaters.ResetContent();
|
|
|
|
CStringArray arVals;
|
|
CString sSQL = _T("select [材质] from AecMaterial where [类型]='管道'");
|
|
m_dbSQLite.GetSelData(sSQL, arVals);
|
|
int nCursel = 0;
|
|
|
|
for (int i = 0; i < arVals.GetSize(); i++)
|
|
{
|
|
m_wndListBoxMaters.AddString(arVals.GetAt(i));
|
|
if (m_data.m_sMertial.CompareNoCase(arVals.GetAt(i)) == 0)
|
|
{
|
|
nCursel = i;
|
|
}
|
|
}
|
|
m_wndListBoxMaters.SetCurSel(nCursel);
|
|
}
|
|
|
|
void CFZGWDlg::InitPipeSystem()
|
|
{
|
|
m_wndSysListBox.ResetContent();
|
|
CString sStd, sTemp;
|
|
CString sSQL = _T("select tablename from wpipecfg where currstd=1");
|
|
m_dbSQLite.GetSelData(sSQL, sStd);
|
|
|
|
sSQL.Format(_T("select distinct system from %s"), sStd);
|
|
CStringArray arSyses;
|
|
m_dbSQLite.GetSelData(sSQL, arSyses);
|
|
|
|
int nCursel = 0;
|
|
for (int i = 0; i < arSyses.GetSize(); i++)
|
|
{
|
|
sTemp = arSyses.GetAt(i);
|
|
m_wndSysListBox.AddString(sTemp);
|
|
|
|
if (m_data.m_sCurrSys.CompareNoCase(sTemp) == 0)
|
|
{
|
|
nCursel = i;
|
|
}
|
|
}
|
|
m_wndSysListBox.SetCurSel(nCursel);
|
|
}
|
|
|
|
HBRUSH CFZGWDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
|
|
{
|
|
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
|
|
if (nCtlColor == CTLCOLOR_STATIC)
|
|
{
|
|
if (pWnd != NULL && pWnd->GetDlgCtrlID() == IDC_STATIC_COLOR)
|
|
{
|
|
COLORREF crColor = RGB(255, 255, 255);
|
|
if (m_data.m_nPipeColor == kColorByLayer)
|
|
{
|
|
crColor = RGB(255, 255, 255);
|
|
}
|
|
else
|
|
{
|
|
crColor = acedGetRGB(m_data.m_nPipeColor);
|
|
}
|
|
|
|
CRect rc;
|
|
pWnd->GetClientRect(rc);
|
|
pDC->FillSolidRect(rc, crColor);
|
|
}
|
|
}
|
|
return hbr;
|
|
}
|
|
|
|
void CFZGWDlg::OnStnClickedStaticColor()
|
|
{
|
|
acedSetColorDialog(m_data.m_nPipeColor, Adesk::kFalse, m_data.m_nPipeColor);
|
|
Invalidate();
|
|
}
|
|
|
|
void CFZGWDlg::OnBnClickedRadio1()//凸台
|
|
{
|
|
UpdateData();
|
|
m_data.m_dL = 500.0;
|
|
if (m_data.m_nKind == 0)
|
|
{
|
|
m_wndRowEdit.EnableWindow(FALSE);
|
|
m_wndhEdit.EnableWindow(FALSE);
|
|
}
|
|
UpdateData(FALSE);
|
|
}
|
|
|
|
void CFZGWDlg::OnBnClickedRadio4()
|
|
{
|
|
UpdateData();
|
|
m_data.m_dL = 100.0;
|
|
if (m_data.m_nKind == 1)
|
|
{
|
|
m_wndRowEdit.EnableWindow(TRUE);
|
|
m_wndhEdit.EnableWindow(TRUE);
|
|
}
|
|
UpdateData(FALSE);
|
|
}
|
|
|
|
|
|
void CFZGWDlg::OnBnClickedButtonSel()
|
|
{
|
|
EquTools::selectEquAndShow(&m_wndGs, m_data.m_id3DEqu);
|
|
}
|
|
|
|
|
|
void CFZGWDlg::OnBnClickedButton1() // 规格+
|
|
{
|
|
CAddPipeDbDlg dlg(CAddPipeDbDlg::eRule);
|
|
if (dlg.DoModal() != IDOK) return;
|
|
|
|
int id = getMaxIDFromDB(_T("ID"), _T("AecOD"), &m_dbSQLite);
|
|
if (id == -1) return;
|
|
|
|
CString sSQL(_T("")), sText(_T("insert into AecOD ([ID],[公称直径],[外径],[壁厚],[重量]) values ('%d','%d','%d','%d','%d')"));
|
|
sSQL.Format(sText, id, dlg.m_n1, dlg.m_n2, dlg.m_n3, dlg.m_n4);
|
|
|
|
if (m_dbSQLite.ExecuteSQL(sSQL))
|
|
InitPipeRule();
|
|
}
|
|
|
|
|
|
void CFZGWDlg::OnBnClickedButton4() // 规格-
|
|
{
|
|
int nItem = -1;
|
|
POSITION ps = m_wndPipeList.GetFirstSelectedItemPosition();
|
|
if (ps != NULL)
|
|
{
|
|
nItem = m_wndPipeList.GetNextSelectedItem(ps);
|
|
}
|
|
if (nItem == -1)
|
|
{
|
|
AfxMessageBox(_T("请选择管道规格!"));
|
|
return;
|
|
}
|
|
CString s1(m_wndPipeList.GetItemText(nItem, 0))
|
|
, s2(m_wndPipeList.GetItemText(nItem, 1))
|
|
, s3(m_wndPipeList.GetItemText(nItem, 2))
|
|
, s4(m_wndPipeList.GetItemText(nItem, 3));
|
|
|
|
CString sSql;
|
|
sSql.Format(_T("delete from AecOD where [公称直径]='%s' and [外径]='%s' and [壁厚]='%s' and [重量]='%s'")
|
|
, s1, s2, s3, s4);
|
|
|
|
if (m_dbSQLite.ExecuteSQL(sSql))
|
|
InitPipeRule();
|
|
}
|
|
|
|
|
|
void CFZGWDlg::OnBnClickedButton6() // 材质+
|
|
{
|
|
CAddPipeDbDlg dlg(CAddPipeDbDlg::eMaterial);
|
|
if (dlg.DoModal() != IDOK) return;
|
|
|
|
int id = getMaxIDFromDB(_T("ID"), _T("AecMaterial"), &m_dbSQLite);
|
|
if (id == -1) return;
|
|
|
|
CString sSQL(_T("")), sText(_T("insert into AecMaterial ([ID],[类型],[材质]) values ('%d','管道','%s')"));
|
|
sSQL.Format(sText, id, dlg.m_s1);
|
|
|
|
if (m_dbSQLite.ExecuteSQL(sSQL))
|
|
InitPipeMaterial();
|
|
}
|
|
|
|
|
|
void CFZGWDlg::OnBnClickedButton8() // 材质-
|
|
{
|
|
int nSel = m_wndListBoxMaters.GetCurSel();
|
|
if (nSel == -1)
|
|
{
|
|
AfxMessageBox(_T("请选择管道材质!"));
|
|
return;
|
|
}
|
|
CString str(_T(""));
|
|
m_wndListBoxMaters.GetText(nSel, str);
|
|
|
|
CString sSql;
|
|
sSql.Format(_T("delete from AecMaterial where [类型]='管道' and [材质]='%s'"), str);
|
|
|
|
if (m_dbSQLite.ExecuteSQL(sSql))
|
|
InitPipeMaterial();
|
|
}
|
|
|
|
|
|
void CFZGWDlg::OnBnClickedButton9() // 系统+
|
|
{
|
|
CAddPipeDbDlg dlg(CAddPipeDbDlg::eSystem);
|
|
if (dlg.DoModal() != IDOK) return;
|
|
|
|
int id = getMaxIDFromDB(_T("LAYKEY"), _T("WConfig_CN"), &m_dbSQLite);
|
|
if (id == -1) return;
|
|
|
|
CString sSQL(_T("")), sText(_T("insert into WConfig_CN ([LAYKEY],[SYSTEM]) values ('%d','%s')"));
|
|
sSQL.Format(sText, id, dlg.m_s1);
|
|
|
|
if (m_dbSQLite.ExecuteSQL(sSQL))
|
|
InitPipeSystem();
|
|
}
|
|
|
|
|
|
void CFZGWDlg::OnBnClickedButton10() // 系统-
|
|
{
|
|
int nSys = m_wndSysListBox.GetCurSel();
|
|
if (nSys == -1)
|
|
{
|
|
AfxMessageBox(_T("请选择管道用途系统!"));
|
|
return;
|
|
}
|
|
CString str(_T(""));
|
|
m_wndSysListBox.GetText(nSys, str);
|
|
|
|
CString sSql;
|
|
sSql.Format(_T("delete from WConfig_CN where [SYSTEM]='%s'"), str);
|
|
|
|
if (m_dbSQLite.ExecuteSQL(sSql))
|
|
InitPipeSystem();
|
|
}
|