Files
gjm 164968b62e chore
把非utf8-bom编码的cpp/h文件改为 utf8 bom 编码, msvc识别utf8编码时,如果不是bom格式的,会使用当前cp_oem来解码.
2026-10-04 00:04:20 +08:00

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();
}