Files
envi-code/SourceCode/Code2026/ElecCmd/PSDLDlg.cpp
T
2026-09-28 15:28:50 +08:00

306 lines
7.1 KiB
C++

#include "stdafx.h"
#include "KTCadUtility.h"
#include "uihistory.h"
#include "filepath.h"
#include "AecDbHolder.h"
#include "PSDLDlg.h"
#include "XSXL_TJXLDlg.h"
#include "LayPosDlg.h"
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;
#define DB_PATH _T("\\Plumbing.db")
IMPLEMENT_DYNAMIC(CPSDLDlg, CDialog)
CPSDLDlg::CPSDLDlg(CWnd* pParent /*=NULL*/)
: CDialog(CPSDLDlg::IDD, pParent)
, m_dBomEl(0)
, m_nLines(1)
, m_dSpace(20)
{
m_ptFrPos.set(0,0,0);
m_vtL.set(0,0,0);
GET_CACHE(CPSDLDlg
, %f%d%f
, &m_dBomEl
, &m_nLines
, &m_dSpace );
m_data.m_nClr = kColorByLayer;
m_data.m_linetype = _T("Continuous");
m_data.m_sModel = _T("KVVR 控制软电缆");
m_data.m_dD = 30;
m_data.m_dDn = 12.0;
m_data.m_sFactory = _T("江苏思科电缆有限公司");
}
CPSDLDlg::~CPSDLDlg()
{
}
void CPSDLDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDIT1, m_dBomEl);
DDX_Text(pDX, IDC_EDIT3, m_nLines);
DDX_Text(pDX, IDC_EDIT4, m_dSpace);
DDX_Control(pDX, IDC_LIST1, m_wndList);
DDX_Control(pDX, IDC_COMBO1, m_wndLineTypeBox);
DDX_CBString(pDX, IDC_COMBO1, m_data.m_linetype);
}
BEGIN_MESSAGE_MAP(CPSDLDlg, CDialog)
ON_BN_CLICKED(IDC_BUTTON1, &CPSDLDlg::OnBnClickedButton1)
ON_BN_CLICKED(IDC_BUTTON4, &CPSDLDlg::OnBnClickedButton4)
ON_STN_CLICKED(IDC_STATIC_COLOR, &CPSDLDlg::OnStnClickedStaticColor)
ON_WM_CTLCOLOR()
ON_BN_CLICKED(IDOK, &CPSDLDlg::OnBnClickedOk)
ON_BN_CLICKED(IDC_BUTTON2, &CPSDLDlg::OnBnClickedButton2)
END_MESSAGE_MAP()
BOOL CPSDLDlg::OnInitDialog()
{
CDialog::OnInitDialog();
CString path = FilePath::GetSysDir() + DB_PATH;
if (!m_dbSQLite.InitADOServer(path))
{
AfxMessageBox(CString(_T("数据库初始化失败,请检查 sys")) + DB_PATH + _T("文件是否存在."));
return FALSE;
}
if (m_wndLineTypeBox.GetCount() > 0)
{
int nSel = m_wndLineTypeBox.FindString(0,m_data.m_linetype);
if (nSel == -1)
nSel = 0;
m_wndLineTypeBox.SetCurSel(nSel);
}
initList();
return TRUE;
}
void CPSDLDlg::initList()
{
m_wndList.SetExtendedStyle(LVS_EX_FULLROWSELECT);
m_wndList.InsertColumn(0, _T("型号"), LVCFMT_LEFT, 240);
m_wndList.InsertColumn(1, _T("外径(mm)"), LVCFMT_LEFT, 100);
m_wndList.InsertColumn(2, _T("弯曲半径与外径比值(mm)"), LVCFMT_LEFT, 100);
m_wndList.InsertColumn(3, _T("厂家"), LVCFMT_LEFT, 240);
refreshList();
}
void CPSDLDlg::refreshList()
{
m_wndList.DeleteAllItems();
CString sSQL, sText;
sSQL = _T("select [型号],[外径],[弯曲半径与外径比值],[厂家] from AecCable order by [型号]");
CUIIValueTable table;
m_dbSQLite.GetSelData(sSQL, table);
table.ShowToListCtrl(&m_wndList);
CString sModel, sFactory;
double dD = 0, dDn = 0;
for (int i = 0;i < m_wndList.GetItemCount();i++)
{
sModel = m_wndList.GetItemText(i, 0);
dD = _ttof(m_wndList.GetItemText(i, 1));
dDn = _ttof(m_wndList.GetItemText(i, 2));
sFactory = m_wndList.GetItemText(i, 3);
if (m_data.m_sModel.CompareNoCase(sModel) == 0 &&
fabs(m_data.m_dD - dD) < 1.e-2 &&
fabs(m_data.m_dDn - dDn) < 1.e-2)
{
m_wndList.SetItemState(i, LVIS_SELECTED, LVIS_SELECTED);
break;
}
}
}
void CPSDLDlg::OnBnClickedButton1()
{
//add
CString sModel(_T("")), sFactory(_T(""));
double dDn(.0), dRatio(.0);
int nItem = -1;
POSITION ps = m_wndList.GetFirstSelectedItemPosition();
if (ps != NULL)
nItem = m_wndList.GetNextSelectedItem(ps);
if (nItem != -1)
{
sModel = m_wndList.GetItemText(nItem, 0);
dDn = _ttof(m_wndList.GetItemText(nItem, 1));
dRatio = _ttof(m_wndList.GetItemText(nItem, 2));
sFactory = m_wndList.GetItemText(nItem, 3);
}
CXSXL_TJXLDlg dlg(sModel, sFactory, dDn, dRatio);
if (dlg.DoModal() != IDOK) return;
sModel = dlg.m_sModel;
sFactory = dlg.m_sFactory;
dDn = dlg.m_dDn;
dRatio = dlg.m_dRatio;
CString sql(_T(""));
sql.Format(_T("insert into [aeccable] values ('%s', '%d', '%d', '%s')")
, sModel, (int)(dDn+0.5), (int)(dRatio+0.5), sFactory);
m_dbSQLite.ExecuteSQL(sql);
refreshList();
}
void CPSDLDlg::OnBnClickedButton4()
{
//del
CString sModel(_T(""));
int nItem = -1;
POSITION ps = m_wndList.GetFirstSelectedItemPosition();
if (ps != NULL)
nItem = m_wndList.GetNextSelectedItem(ps);
if (nItem == -1)
{
AfxMessageBox(_T("请选择一行数据。"));
return;
}
sModel = m_wndList.GetItemText(nItem, 0);
CString sql(_T(""));
sql.Format(_T("delete from [aeccable] where [型号]='%s'"), sModel);
m_dbSQLite.ExecuteSQL(sql);
refreshList();
}
void CPSDLDlg::OnStnClickedStaticColor()
{
acedSetColorDialog(m_data.m_nClr, Adesk::kFalse, m_data.m_nClr);
Invalidate();
}
HBRUSH CPSDLDlg::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_nClr == kColorByLayer)
crColor = RGB(255, 255, 255);
else
crColor = acedGetRGB(m_data.m_nClr);
CRect rc;
pWnd->GetClientRect(rc);
pDC->FillSolidRect(rc, crColor);
}
}
return hbr;
}
void CPSDLDlg::OnBnClickedOk()
{
UpdateData();
m_data.m_dBomEl = m_dBomEl;
m_data.m_nCount = m_nLines;
m_data.m_dSpace = m_dSpace;
int nSel = m_wndLineTypeBox.GetCurSel();
if (nSel == -1)
{
AfxMessageBox(_T("请选择线缆线型!"));
return;
}
m_wndLineTypeBox.GetLBString(nSel, m_data.m_linetype);
int nItem = -1;
POSITION ps = m_wndList.GetFirstSelectedItemPosition();
if (ps != NULL)
nItem = m_wndList.GetNextSelectedItem(ps);
if (nItem != -1)
{
m_data.m_sModel = m_wndList.GetItemText(nItem, 0);
m_data.m_dD = _ttof(m_wndList.GetItemText(nItem, 1));
m_data.m_dDn = _ttof(m_wndList.GetItemText(nItem, 2));
m_data.m_sFactory = m_wndList.GetItemText(nItem, 3);
}
else
{
AfxMessageBox(_T("请选择一行数据。"));
return;
}
SET_CACHE(CPSDLDlg
, %f%d%f
, m_dBomEl
, m_nLines
, m_dSpace);
CDialog::OnOK();
OnOK();
}
void CPSDLDlg::OnBnClickedButton2()
{
UpdateData(TRUE);
acedGetAcadFrame()->EnableWindow(TRUE);
ShowWindow(SW_HIDE);
acedGetAcadFrame()->SetFocus();
ads_name ent;
struct resbuf* pRb = acutBuildList(RTDXF0, _T("AEC_DBHOLDER"), 0);
int nRes = CKTCadUtility::SelectEntity(_T("\n请选择支架:"), ent, pRb);
acutRelRb(pRb);
if (nRes == RTNORM)
{
AcDbObjectId id;
acdbGetObjectId(id,ent);
AcDbEntity* pEnt = NULL;
if ( Acad::eOk == acdbOpenAcDbEntity(pEnt,id,AcDb::kForRead))
{
AecDbHolder* pHolder = AecDbHolder::cast(pEnt);
if (pHolder != NULL)
{
XHolder holder;
pHolder->GetHolder(holder);
AcGePoint3d ptPos = pHolder->GetPosition(m_vtL);
CLayPosDlg layPosDlg;
layPosDlg.m_nLays = holder.N;
if ( IDOK == layPosDlg.DoModal() )
{
m_dBomEl = ptPos.z + (layPosDlg.m_nLayPos - 1) * (holder.V + holder.t);
m_ptFrPos.set(ptPos.x,ptPos.y,m_dBomEl);
}
}
pEnt->close();
}
}
ShowWindow(SW_SHOW);
SetFocus();
acedGetAcadFrame()->EnableWindow(FALSE);
EnableWindow(TRUE);
UpdateData(FALSE);
}