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

412 lines
8.6 KiB
C++

#include "stdafx.h"
#include "StdArx.h"
#include "FZZJDlg.h"
#include "KTCadUtility.h"
#include "CDLXTDlg.h"
IMPLEMENT_DYNAMIC(CFZZJDlg, CDialog)
CFZZJDlg::CFZZJDlg(CWnd* pParent /*=NULL*/)
: CDialog(CFZZJDlg::IDD, pParent)
, m_dBomEl(0)
, m_nN(3)
, m_dV(500.0)
, m_dL(800.0)
, m_dW(30.0)
, m_dt(3.0)
, m_sPurpose(_T(""))
, m_dX(1000.0)
, m_bLeft(FALSE)
, m_bRight(FALSE)
{
m_sMaterial = _T("普通碳钢");
m_vtPipe.set(0,0,0);
m_sVtPipe = _T("0,0,0");
m_idTrench.setNull();
GET_CACHE(CFZZJDlg
, %f%f%f%f%f%f%s%s%s%d
, &m_dBomEl
, &m_dV
, &m_dL
, &m_dW
, &m_dt
, &m_dX
, &m_sMaterial
, &m_sPurpose
, &m_sVtPipe
, &m_nN);
}
CFZZJDlg::~CFZZJDlg()
{
}
void CFZZJDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDIT12, m_dBomEl);
DDX_Text(pDX, IDC_EDIT1, m_dV);
DDX_Text(pDX, IDC_EDIT38, m_dL);
DDX_Text(pDX, IDC_EDIT10, m_dW);
DDX_Text(pDX, IDC_EDIT36, m_dt);
DDX_Text(pDX, IDC_EDIT2, m_dX);
DDX_Text(pDX, IDC_EDIT34, m_sMaterial);
DDX_Text(pDX, IDC_EDIT35, m_sPurpose);
DDX_Text(pDX, IDC_EDIT13, m_sVtPipe);
DDX_Text(pDX, IDC_EDIT3, m_nN);
DDX_Check(pDX, IDC_CHECK1, m_bLeft);
DDX_Check(pDX, IDC_CHECK2, m_bRight);
DDX_Control(pDX, IDC_LIST1, m_wndSysList);
}
BEGIN_MESSAGE_MAP(CFZZJDlg, CDialog)
ON_BN_CLICKED(IDOK, &CFZZJDlg::OnBnClickedOk)
ON_BN_CLICKED(IDC_BUTTON1, &CFZZJDlg::OnBnClickedButton1)
ON_BN_CLICKED(IDC_BUTTON4, &CFZZJDlg::OnBnClickedButton4)
ON_BN_CLICKED(IDC_BUTTON5, &CFZZJDlg::OnBnClickedButton5)
ON_BN_CLICKED(IDC_BUTTON6, &CFZZJDlg::OnBnClickedButton6)
END_MESSAGE_MAP()
BOOL CFZZJDlg::OnInitDialog()
{
CDialog::OnInitDialog();
UpdateData(FALSE);
CWnd *pWnd = GetDlgItem(IDC_CHECK1);
if (pWnd != NULL)
{
pWnd->ShowWindow(SW_HIDE);
}
pWnd = GetDlgItem(IDC_CHECK2);
if (pWnd != NULL)
{
pWnd->ShowWindow(SW_HIDE);
}
m_wndSysList.SetExtendedStyle(LVS_EX_FULLROWSELECT);
m_wndSysList.InsertColumn(0, _T("行序号"), LVCFMT_LEFT, 100, 100);
m_wndSysList.InsertColumn(1, _T("行系统"), LVCFMT_LEFT, 180, 100);
CString sSys, sNo;
for (int i = 0;i < m_arAllSys.GetSize();i++)
{
sSys = m_arAllSys.GetAt(i);
sNo.Format(_T("%d"), i + 1);
int nItem = m_wndSysList.InsertItem(m_wndSysList.GetItemCount(), sNo);
m_wndSysList.SetItemText(nItem, 0, sNo);
m_wndSysList.SetItemText(nItem, 1, sSys);
}
return TRUE;
}
void CFZZJDlg::OnBnClickedOk()
{
UpdateData();
if (m_nN < 1)
{
AfxMessageBox(_T("支架行数至少一行!"));
return;
}
if (m_dL < 10.0 || m_dV < 10.0 || m_dW < 1.e-1 ||
m_dt < 1.e-1 || m_dX < 1.e-1)
{
AfxMessageBox(_T("支架参数太小!"));
return;
}
SET_CACHE(CFZZJDlg
, %f%f%f%f%f%f%s%s%s%d
, m_dBomEl
, m_dV
, m_dL
, m_dW
, m_dt
, m_dX
, m_sMaterial
, m_sPurpose
, m_sVtPipe
, m_nN);
m_arAllSys.RemoveAll();
CString sSys;
for (int i = 0; i < m_wndSysList.GetItemCount(); i++)
{
sSys = m_wndSysList.GetItemText(i, 1);
m_arAllSys.Add(sSys);
}
if (m_idTrench.isValid())
{
XHolder holder;
memset(&holder, 0, sizeof(XHolder));
GetHolder(holder);
CString sKey;
//
AcDbEntity *pEnt = NULL;
if (Acad::eOk == acdbOpenAcDbEntity(pEnt, m_idTrench, AcDb::kForWrite))
{
AecDbECableTray *pCbTray = AecDbECableTray::cast(pEnt);
if (pCbTray != NULL)
{
if (m_bLeft)
{
pCbTray->SetXHolder(kLeft, holder);
sKey.Format(_T("%s_L"), KEY_SYSCNT);
pCbTray->GetSpecialtyData(kForWrite)->SetAt(sKey, (int)m_arAllSys.GetSize());
for (int ii = 0; ii < m_arAllSys.GetSize(); ii++)
{
sSys.Format(_T("%s%d_L"), KEY_SYS, ii);
pCbTray->GetSpecialtyData()->SetAt(sSys, m_arAllSys.GetAt(ii));
}
}
if (m_bRight)
{
pCbTray->SetXHolder(kRight, holder);
sKey.Format(_T("%s_R"), KEY_SYSCNT);
pCbTray->GetSpecialtyData(kForWrite)->SetAt(sKey, (int)m_arAllSys.GetSize());
for (int ii = 0; ii < m_arAllSys.GetSize(); ii++)
{
sSys.Format(_T("%s%d_R"), KEY_SYS, ii);
pCbTray->GetSpecialtyData()->SetAt(sSys, m_arAllSys.GetAt(ii));
}
}
}
pEnt->close();
}
}
OnOK();
}
void CFZZJDlg::GetAllSys(CStringArray &arSys)
{
arSys.Append(m_arAllSys);
}
void CFZZJDlg::GetHolder(XHolder& holder) const
{
holder.N = m_nN;
holder.V = m_dV;
holder.L = m_dL;
holder.W = m_dW;
holder.t = m_dt;
_tcscpy(holder.szMat,m_sMaterial);
_tcscpy(holder.szUsage,m_sPurpose);
}
void CFZZJDlg::SetFromID(AcDbObjectId& id)
{
AcDbEntity* pEnt = NULL;
if (Acad::eOk == acdbOpenAcDbEntity(pEnt,id,AcDb::kForRead))
{
AecDbHolder* pHolder = AecDbHolder::cast(pEnt);
if (pHolder != NULL)
{
XHolder holder;
pHolder->GetHolder(holder);
AcGeVector3d vtL;
AcGePoint3d pt = pHolder->GetPosition(vtL);
m_nN = holder.N;
m_dV = holder.V;
m_dL = holder.L;
m_dW = holder.W;
m_dt = holder.t;
m_sMaterial = holder.szMat;
m_sPurpose = holder.szUsage;
m_dBomEl = pt.z;
CString sKey, sSys;
int nSize = 0;
pHolder->GetSpecialtyData(AcDb::kForRead)->GetAt(KEY_SYSCNT, nSize);
m_arAllSys.RemoveAll();
for (int ii = 0; ii < nSize; ii++)
{
sKey.Format(_T("%s%d"), KEY_SYS, ii);
pHolder->GetSpecialtyData(AcDb::kForRead)->GetAt(sKey,sSys);
m_arAllSys.Add(sSys);
}
}
pEnt->close();
}
}
void CFZZJDlg::OnBnClickedButton1()
{
m_idTrench.setNull();
UpdateData(TRUE);
acedGetAcadFrame()->EnableWindow(TRUE);
ShowWindow(SW_HIDE);
acedGetAcadFrame()->SetFocus();
ads_name ent;
struct resbuf* pRb = acutBuildList(RTDXF0, _T("AEC_EWPIPE,AEC_DBDUCT,AEC_EWCABLE,AEC_DBCABTRY"), 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))
{
AecDbECableTray *pCbTray = AecDbECableTray::cast(pEnt);
if (pCbTray != NULL)
{
int nApp = 0;
pCbTray->GetSpecialtyData(AcDb::kForRead)->GetAt(KEY_APP,nApp);
if ((WPipe::EApp)nApp == WPipe::eTrench)
{
pEnt->close();
m_idTrench = id;
}
else
{
pEnt->close();
AfxMessageBox(_T("选择的是桥架,不是电缆沟!请选择电缆沟!"));
}
ShowWindow(SW_SHOW);
SetFocus();
acedGetAcadFrame()->EnableWindow(FALSE);
EnableWindow(TRUE);
UpdateData(FALSE);
CWnd *pWnd = GetDlgItem(IDC_CHECK1);
if (pWnd != NULL)
{
pWnd->ShowWindow(m_idTrench.isNull() ? SW_HIDE : SW_SHOW);
}
pWnd = GetDlgItem(IDC_CHECK2);
if (pWnd != NULL)
{
pWnd->ShowWindow(m_idTrench.isNull() ? SW_HIDE : SW_SHOW);
}
return;
}
/*AecDbSlab* pSlab = AecDbSlab::cast(pEnt);
if (pSlab != NULL)
{
m_dBomEl = pSlab->GetElBom();
m_dBomEl += pSlab->GetThick();
}
else*/
{
AecDbEwPipeBase* pPipe = AecDbEwPipeBase::cast(pEnt);
if (pPipe != NULL)
{
m_vtPipe = pPipe->GetTailDir();
m_vtPipe.normalize();
m_sVtPipe.Format(_T("%g,%g,%g"),m_vtPipe.x,m_vtPipe.y,m_vtPipe.z);
AcGePoint3d ptSta;
pPipe->getStartPoint(ptSta);
m_dBomEl = ptSta.z;
double dOD = 0.0;
if ( pPipe->GetSpecialtyData(AcDb::kForRead)->GetAt(PIPE_OD,dOD) )
{
m_dBomEl -= 0.5 * dOD;
m_dV = dOD * 1.5;
}
else
{
AcDbRegion* pReg = pPipe->GetSection();
if (pReg != NULL)
{
AcDbExtents ext;
pReg->getGeomExtents(ext);
m_dBomEl -= 0.5 * (ext.maxPoint().y - ext.minPoint().y);
}
}
}
}
pEnt->close();
}
}
ShowWindow(SW_SHOW);
SetFocus();
acedGetAcadFrame()->EnableWindow(FALSE);
EnableWindow(TRUE);
UpdateData(FALSE);
}
void CFZZJDlg::OnBnClickedButton4()
{
CDLXTDlg dlg;
if (IDOK == dlg.DoModal())
{
//排序
CString sNo;
for (int i = 0;i < m_wndSysList.GetItemCount();i++)
{
sNo.Format(_T("%d"), i + 1);
m_wndSysList.SetItemText(i, 0, sNo);
}
sNo.Format(_T("%d"), m_wndSysList.GetItemCount()+1);
int nItem = m_wndSysList.InsertItem(m_wndSysList.GetItemCount(), sNo);
m_wndSysList.SetItemText(nItem, 1, dlg.m_sSys);
}
}
void CFZZJDlg::OnBnClickedButton5()
{
POSITION ps = m_wndSysList.GetFirstSelectedItemPosition();
if (ps != NULL)
{
int nItem = m_wndSysList.GetNextSelectedItem(ps);
if (nItem != -1)
{
m_wndSysList.DeleteItem(nItem);
//排序
CString sNo;
for (int i = 0; i < m_wndSysList.GetItemCount(); i++)
{
sNo.Format(_T("%d"), i + 1);
m_wndSysList.SetItemText(i, 0, sNo);
}
}
}
}
void CFZZJDlg::OnBnClickedButton6()
{
POSITION ps = m_wndSysList.GetFirstSelectedItemPosition();
if (ps != NULL)
{
int nItem = m_wndSysList.GetNextSelectedItem(ps);
if (nItem != -1)
{
CDLXTDlg dlg;
dlg.m_sSys = m_wndSysList.GetItemText(nItem, 1);
if (IDOK == dlg.DoModal())
{
m_wndSysList.SetItemText(nItem, 1, dlg.m_sSys);
}
}
}
}