#include "stdafx.h" #include "AcDbObjectPtr.h" #include "globalFunc.h" #include "DbWell.h" #include "Dbpipe.h" #include "TBlockEdJig.h" #include "InsHydrantDlg.h" #include "layerdef.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif extern AcDbObjectId InitLayer(const TCHAR *szLayer, BOOL bApplyChange = TRUE); //*************************************************************************************************** // 室外消火栓 //*************************************************************************************************** void InsOutHydrant() { CString csDwb = g_csDwbPath + _T("TwtSys"); XString xsTmp, xsTmp2; if (GlobalFunc::LoadDwbBlock(csDwb, _T("00000385"), xsTmp) != RTNORM) return; if (GlobalFunc::LoadDwbBlock(csDwb, _T("00000483"), xsTmp2) != RTNORM) return; g_Option::instance().g_csInsBlkName = (const TCHAR*)xsTmp; CInsHydrantDlg dlg(acedGetAcadFrame()); { CTemporaryResourceOverride vTemp; dlg.Create(IDD_HYDRANT, acedGetAcadFrame()); } dlg.ShowWindow(SW_SHOW); acedGetAcadDwgView()->SetFocus(); XPoint ptIns; InitLayer(LAY_EQUIP_HYDRANT); xg_getvar(_T("VIEWCTR"), ptIns); ptIns = GlobalFunc::Ucs2Wcs(ptIns); BOOL bRotate(FALSE), bMirror(FALSE); int nOsMode = 0; double nScale = 1; // if(g_bEquipByScale) // nScale = 1; nOsMode |= OS_INT | OS_NEA | OS_MID; XPushVar vOsMode(_T("OSMODE"), nOsMode); while (1) { dlg.UpdateData(TRUE); if (dlg.m_iType == 0) g_Option::instance().g_csInsBlkName = (const TCHAR*)xsTmp; else g_Option::instance().g_csInsBlkName = (const TCHAR*)xsTmp2; TBlockEdJig jig(g_Option::instance().g_csInsBlkName, ptIns, 1); jig.m_nSacle = nScale * (GlobalFunc::DocGetPScale() / 100); jig.m_nSacleY = nScale * (GlobalFunc::DocGetPScale() / 100); jig.m_bReversal = bMirror; CString csPrompt, csRotate; if (bRotate) csRotate = _T("不旋转"); else csRotate = _T("旋转"); csPrompt.Format(_T("\n请点取消火栓插入点{放大[E]/缩小[D]/左右翻转[F]/%s[R]}<完成>:"), csRotate); jig.SetPrompt(csPrompt); jig.SetKeyword(_T("E D F R W")); int nKeyIndex = 0; int ret = jig.DoIt(&nKeyIndex); if (ret == RTKWORD) { if (nKeyIndex == 0) nScale += 0.5; else if (nKeyIndex == 1 && nScale > 0.5) nScale -= 0.5; else if (nKeyIndex == 2) bMirror = !bMirror; else if (nKeyIndex == 3) bRotate = !bRotate; continue; } else if (ret != RTNORM) break; ptIns = jig.GetPickPoint(); double nElevation(0); int iPipeIdx(0); Entity entWire = GlobalFunc::GetPipeByPt(ptIns, nElevation, iPipeIdx); if (!!entWire) { XPoint ptPipe = GlobalFunc::Wcs2Ucs(ptIns); XPoint ptPipe2; while (1) { if (ads_getpoint(ptPipe, _T("\n请点取管线下一点<直接布置>:"), ptPipe2) != RTNORM) { ptIns = GlobalFunc::Ucs2Wcs(ptPipe); break; } OPENOBJ_BEGIN(entWire, AcDb::kForRead, CDbPipe, pPipe); if (pPipe) { CDbPipe *pNewPipe = (CDbPipe *)pPipe->clone(); dlg.UpdateData(TRUE); if (dlg.m_nDimNewPipe == 1 && pPipe->IsDrawLabel()) { pNewPipe->EnableDrawLabel(FALSE); } pNewPipe->SetStartPoint(GlobalFunc::Ucs2Wcs(ptPipe)); pNewPipe->SetEndPoint(GlobalFunc::Ucs2Wcs(ptPipe2)); GlobalFunc::AddToCurrentSpace(pNewPipe, Adesk::kTrue); } OPENOBJ_END(); ptPipe = ptPipe2; //TPipePerDocData *pData = GetCurPipeDocData(); //pData->ApplyUpdates(); } if (!ptPipe2) { XPoint ptS, ptE; TPipeSys::SysType sysType; OPENOBJ_BEGIN(entWire, AcDb::kForRead, CDbPipe, pPipe); if (pPipe) { sysType = pPipe->GetSysType(); ptS = pPipe->StartPoint(); ptE = pPipe->EndPoint(); } OPENOBJ_END(); // XVector3D vectBase(ptE.x - ptS.x, ptE.y - ptS.y, 0); // TDbPipeValve *pValve = new TDbPipeValve; // pValve->SetBlock2d(\(g_Option::instance().g_csInsBlkName)); // pValve->SetLocation(ptIns); // pValve->SetScale(nScale); // pValve->SetYScale(nScale); // pValve->setLayer(LAY_EQUIP_HYDRANT); // pValve->setColor(AcCmColor()); //随层 // pValve->SetDirection(vectBase); // pValve->SetQuadrant(1); // pValve->SetSysType(sysType); // GlobalFunc::AddToCurrentSpace(pValve, Adesk::kTrue); double dAng = ads_angle(ptS, ptE); CDbEquipment *pEquip = new CDbEquipment; pEquip->SetBlock2d(GlobalFunc::GetBlkIdByName(g_Option::instance().g_csInsBlkName)); pEquip->SetHidePipe(TRUE); pEquip->SetAngle(dAng); pEquip->SetScale(nScale); pEquip->MirrorByY(bMirror); pEquip->setLayer(LAY_EQUIP_HYDRANT); pEquip->setColor(AcCmColor()); //随层 pEquip->SetLocation(ptIns); AcDbObjectId id = GlobalFunc::AddToCurrentSpace(pEquip, Adesk::kTrue); continue; } } CDbEquipment *pEquip = new CDbEquipment; pEquip->SetBlock2d(GlobalFunc::GetBlkIdByName(g_Option::instance().g_csInsBlkName)); pEquip->SetHidePipe(TRUE); pEquip->SetScale(nScale); pEquip->MirrorByY(bMirror); pEquip->setLayer(LAY_EQUIP_HYDRANT); pEquip->setColor(AcCmColor()); //随层 pEquip->SetLocation(ptIns); AcDbObjectId id = GlobalFunc::AddToCurrentSpace(pEquip, Adesk::kTrue); if (bRotate) { Entity entLast; entLast.GetLast(); double nRotate(0); entLast.Rotate(ptIns, &nRotate); } } dlg.DestroyWindow(); } int CInsHydrantDlg::m_iType = 0; int CInsHydrantDlg::m_nDimNewPipe = 0; ///////////////////////////////////////////////////////////////////////////// // CInsHydrantDlg dialog IMPLEMENT_DYNAMIC(CInsHydrantDlg, CModelessDialog) CInsHydrantDlg::CInsHydrantDlg(CWnd* pParent /*=NULL*/) : CModelessDialog(CInsHydrantDlg::IDD, pParent) { //{{AFX_DATA_INIT(CInsHydrantDlg) //}}AFX_DATA_INIT } void CInsHydrantDlg::DoDataExchange(CDataExchange* pDX) { CModelessDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CInsHydrantDlg) DDX_Radio(pDX, IDC_RADIO_TYPE1, m_iType); //}}AFX_DATA_MAP DDX_Radio(pDX, IDC_RADIO_DIM, m_nDimNewPipe); } BEGIN_MESSAGE_MAP(CInsHydrantDlg, CModelessDialog) //{{AFX_MSG_MAP(CInsHydrantDlg) ON_WM_CLOSE() ON_WM_PAINT() ON_BN_CLICKED(IDC_RADIO_TYPE1, OnRadioType1) ON_BN_CLICKED(IDC_RADIO_TYPE2, OnRadioType2) //}}AFX_MSG_MAP ON_BN_CLICKED(IDC_RADIO_DIM, &CInsHydrantDlg::OnBnClickedRadioDim) ON_BN_CLICKED(IDC_RADIO_NODIM, &CInsHydrantDlg::OnBnClickedRadioNodim) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CInsHydrantDlg message handlers BOOL CInsHydrantDlg::OnInitDialog() { CModelessDialog::OnInitDialog(); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CInsHydrantDlg::OnClose() { CModelessDialog::OnClose(); acedPostCommand(_T("\33\33")); } void CInsHydrantDlg::OnPaint() { CPaintDC dc(this); // device context for painting OpenSlide(); } void CInsHydrantDlg::OpenSlide() { UpdateData(); CWnd *pWnd = GetDlgItem(IDC_PREVIEW1); CString csTmp; if (m_iType == 0) csTmp.Format(_T("TWTSYS(00000385)")); else csTmp.Format(_T("TWTSYS(00000483)")); GlobalFunc::DrawSlide(csTmp, pWnd); } void CInsHydrantDlg::OnRadioType1() { OpenSlide(); GlobalFunc::PostCommand(_T("W "), false); } void CInsHydrantDlg::OnRadioType2() { OpenSlide(); GlobalFunc::PostCommand(_T("W "), false); } void CInsHydrantDlg::OnBnClickedRadioDim() { acedGetAcadDwgView()->SetFocus(); } void CInsHydrantDlg::OnBnClickedRadioNodim() { acedGetAcadDwgView()->SetFocus(); }