412 lines
8.6 KiB
C++
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);
|
|
}
|
|
}
|
|
}
|
|
}
|