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