#include "stdafx.h" #include "CLJCKDlg.h" #include "AecDb3dRoadAxisLine.h" #include "CCableRouting.h" IMPLEMENT_DYNAMIC(CLJCKDlg, CDialog) CLJCKDlg::CLJCKDlg(CWnd *pParent /*=NULL*/) : CDialog(CLJCKDlg::IDD, pParent) { m_nPos = 0; m_bIsVisible = true; m_pPathSel = NULL; m_nCur = 1; m_nCount = 0; m_dLen = 0; m_nIDEvent = 0; } CLJCKDlg::~CLJCKDlg() { } void CLJCKDlg::DoDataExchange(CDataExchange *pDX) { CDialog::DoDataExchange(pDX); DDX_Text(pDX, IDC_EDIT1, m_nCur); DDX_Text(pDX, IDC_EDIT2, m_nCount); DDX_Text(pDX, IDC_EDIT3, m_dLen); } BEGIN_MESSAGE_MAP(CLJCKDlg, CDialog) ON_BN_CLICKED(IDOK, &CLJCKDlg::OnBnClickedOk) ON_BN_CLICKED(IDCANCEL, &CLJCKDlg::OnBnClickedCancel) ON_WM_TIMER() ON_WM_DESTROY() ON_BN_CLICKED(IDC_BUTTON1, &CLJCKDlg::OnBnClickedButton1) END_MESSAGE_MAP() void CLJCKDlg::SetarAllPath(AcArray &ar3dRdAxLinesAll) { m_ar3dRdAxLinesAll.append(ar3dRdAxLinesAll); m_nPos = 0; m_nCount = m_ar3dRdAxLinesAll.length(); m_nCur = 1; } void CLJCKDlg::SetFrAndTo(LPCTSTR pszFrEqu, LPCTSTR pszToEqu) { _tcscpy(m_szFrEqu, pszFrEqu); _tcscpy(m_szToEqu, pszToEqu); } BOOL CLJCKDlg::OnInitDialog() { CDialog::OnInitDialog(); m_nIDEvent = SetTimer(1, 300, NULL); m_nCur = m_nPos + 1; if (m_nPos > -1 && m_nPos < m_ar3dRdAxLinesAll.length()) { CableRoutePath *pPath = m_ar3dRdAxLinesAll.at(m_nPos); if (pPath != NULL) { m_dLen = ((int)(pPath->length() * 100)) / 100.0; } } UpdateData(FALSE); return TRUE; } void CLJCKDlg::OnBnClickedOk() { //上次,隐藏当前 ShowPath(false); m_nPos -= 1; if (m_nPos < 0) m_nPos = 0; m_nCur = m_nPos + 1; if (m_nPos > -1 && m_nPos < m_ar3dRdAxLinesAll.length()) { CableRoutePath *pPath = m_ar3dRdAxLinesAll.at(m_nPos); if (pPath != NULL) { m_dLen = ((int)(pPath->length() * 100)) / 100.0; } } UpdateData(FALSE); } void CLJCKDlg::OnBnClickedCancel() { //下次,隐藏当前 ShowPath(false); m_nPos += 1; if (m_nPos >= m_ar3dRdAxLinesAll.length()) m_nPos = m_ar3dRdAxLinesAll.length() - 1; m_nCur = m_nPos + 1; if (m_nPos > -1 && m_nPos < m_ar3dRdAxLinesAll.length()) { CableRoutePath *pPath = m_ar3dRdAxLinesAll.at(m_nPos); if (pPath != NULL) { m_dLen = ((int)(pPath->length() * 100)) / 100.0; } } UpdateData(FALSE); } void CLJCKDlg::OnTimer(UINT_PTR nIDEvent) { ShowPath(m_bIsVisible); m_bIsVisible = !m_bIsVisible; CDialog::OnTimer(nIDEvent); } void CLJCKDlg::ShowPath(bool bIsShow) { if (m_nPos > -1 && m_nPos < m_ar3dRdAxLinesAll.length()) { AcDbEntity *pEnt = NULL; CableRoutePath *pPath = m_ar3dRdAxLinesAll.at(m_nPos); if (pPath != NULL) { AcAxDocLock lock; AcDbObjectId id = pPath->GetRoadAxLineId(); if (!id.isValid()) { pPath->Add2ModelSpace(m_szFrEqu, m_szToEqu); id = pPath->GetRoadAxLineId(); if (Acad::eOk == acdbOpenAcDbEntity(pEnt, id, AcDb::kForWrite)) { pEnt->setVisibility(AcDb::kVisible); pEnt->close(); } } else { if (Acad::eOk == acdbOpenAcDbEntity(pEnt, id, AcDb::kForWrite)) { pEnt->setVisibility(bIsShow ? AcDb::kVisible : AcDb::kInvisible); pEnt->close(); } } acedUpdateDisplay(); actrTransactionManager->flushGraphics(); } } } void CLJCKDlg::OnDestroy() { KillTimer(m_nIDEvent); CDialog::OnDestroy(); //清除所有的AecDb3dRoadAxisLine AcAxDocLock lock; for (int i = 0;i < m_ar3dRdAxLinesAll.length();i++) { CableRoutePath *pPath = m_ar3dRdAxLinesAll.at(i); if (pPath != NULL) { pPath->EraseRoadAxLine(); } } } void CLJCKDlg::OnBnClickedButton1() { if (m_nPos > -1 && m_nPos < m_ar3dRdAxLinesAll.length()) { m_pPathSel = m_ar3dRdAxLinesAll.at(m_nPos); m_ar3dRdAxLinesAll.removeAt(m_nPos); } EndDialog(IDOK); }