// EquipmentEditDlg.cpp : implementation file // #include "stdafx.h" #include #include "EquipmentEditDlg.h" #include "SelectBlkDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif //*************************************************************************************************** // 编辑附件 //*************************************************************************************************** extern int EditSprinkler(AcDbObjectId id); extern int EditHydrant(AcDbObjectId id); extern int EditWaterBucket(AcDbObjectId id); int EditEquipment(AcDbObjectId id) { if(!id) return RTERROR; if(IsSprinkler(id)){ //如果是喷头 return EditSprinkler(id); } if(IsHydrant(id)){ return EditHydrant(id); } //cet 2010.10.26 add 编辑雨水斗 ads_name name; acdbGetAdsName(name, id); CString str = ReadXdata(name, _T("WaterBucket")); if (str == _T("1")) { return EditWaterBucket(id); } CString csSysBlk; double nElevation(0), nScale(1), nRotate(0), nPipeLen(0), nNg(0), nBigQ(0); BOOL bIsHidePipe(TRUE), bIsMirrorByX(FALSE), bIsMirrorByY(FALSE); OPENOBJ_BEGIN(id, AcDb::kForRead, TDbEquipment, pEquip); if(pEquip){ nScale = pEquip->GetScale(); nRotate = pEquip->GetAngle(); nElevation = pEquip->GetLocation().z; bIsHidePipe = pEquip->IsHidePipe(); nPipeLen = pEquip->GetPipeLength(); bIsMirrorByX = pEquip->IsMirrorByX(); bIsMirrorByY = pEquip->IsMirrorByY(); nBigQ = pEquip->GetSpare(); if(nBigQ < 0.0001) nBigQ = 0; nNg = pEquip->GetDang(); csSysBlk = pEquip->GetSysBlock(); } OPENOBJ_END(); CTemporaryResourceOverride vTemp; CEquipmentEditDlg dlg; dlg.m_bElevation = TRUE; dlg.m_bHidePipe = TRUE; dlg.m_bMirror = TRUE; dlg.m_bNg = TRUE; dlg.m_bPipeLen = TRUE; dlg.m_bRotate = TRUE; dlg.m_bScale = TRUE; dlg.m_bBigQ = TRUE; dlg.m_bIsHide = bIsHidePipe; dlg.m_bMirrorX = bIsMirrorByX; dlg.m_bMirrorY = bIsMirrorByY; dlg.m_nRotate = Radian2Angle(nRotate); dlg.m_nElevation = nElevation/1000; dlg.m_nPipeLen = nPipeLen; dlg.m_nScale = nScale; dlg.m_nNg = nNg; dlg.m_nQ = nBigQ; dlg.m_csSysBlk = csSysBlk; if(dlg.DoModal() != IDOK) return 1; OPENOBJ_BEGIN(id, AcDb::kForWrite, TDbEquipment, pEquip); if(pEquip){ XPoint ptTmp = pEquip->GetLocation(); XPoint ptTmp4 = pEquip->GetInsert(); if(dlg.m_bElevation){ ptTmp4.z = dlg.m_nElevation*1000; pEquip->SetInsert(ptTmp4); ptTmp.z = dlg.m_nElevation*1000; pEquip->SetLocation(ptTmp); } if(dlg.m_bHidePipe) pEquip->SetHidePipe(dlg.m_bIsHide); if(dlg.m_bNg) pEquip->SetDang(dlg.m_nNg); if(dlg.m_bBigQ) pEquip->SetSpare(dlg.m_nQ); if(dlg.m_bMirror){ pEquip->MirrorByX(dlg.m_bMirrorX); pEquip->MirrorByY(dlg.m_bMirrorY); } if(dlg.m_bPipeLen) pEquip->SetPipeLength(dlg.m_nPipeLen); if(dlg.m_bRotate) pEquip->SetAngle(dlg.m_nRotate / 180 * PI); if(dlg.m_bSysBlk) pEquip->SetSysBlock(dlg.m_csSysBlk); if(dlg.m_bScale){ pEquip->SetScale(dlg.m_nScale); pEquip->SetYScale(dlg.m_nScale); // if(ptTmp != ptTmp4){//如果插入点不是接线点,要调整插入点。 sr remove 2007-11-29 系统消火栓接线点,插入点不是同一点 // AcDbExtents extents; // pEquip->getGeomExtents(extents); // AcGePoint3d pMax = extents.maxPoint(); // AcGePoint3d pMin = extents.minPoint(); // XPoint ptCen; // ptCen[0] = (pMax[0] + pMin[0]) / 2; // ptCen[1] = (pMax[1] + pMin[1]) / 2; // ptCen[2] = 0; // AcGeMatrix3d mat; // mat.setToTranslation(AcGeVector3d(ptTmp[0] - ptCen[0], ptTmp[1] - ptCen[1], 0)); // ptTmp4.TransformBy(mat); // // pEquip->SetInsert(ptTmp4); // } } } OPENOBJ_END(); return 1; } //*************************************************************************************************** // 修改附件 //*************************************************************************************************** void EditEquipCmd() { RBList rbMask(RTDXF0, _T("ATS_EQUIPMENT"), 8, _T("*"), NULL); PickSet ss(SS_FREE); if(SelectEntities(_T("\n请选择要修改的给水附件或排水附件<退出>"), ss, rbMask) != RTNORM) return; long len = ss.Length(); if(len < 1) return; CString csSysBlk; double nElevation(0), nScale(1), nRotate(0), nPipeLen(0), nNg(0), nBigQ(0); BOOL bIsHidePipe(TRUE), bIsMirrorByX(FALSE), bIsMirrorByY(FALSE); Entity ent = ss[0L]; OPENOBJ_BEGIN(ent, AcDb::kForRead, TDbEquipment, pEquip); if(pEquip){ nScale = pEquip->GetScale(); nRotate = pEquip->GetAngle(); nElevation = pEquip->GetLocation().z; bIsHidePipe = pEquip->IsHidePipe(); nPipeLen = pEquip->GetPipeLength(); bIsMirrorByX = pEquip->IsMirrorByX(); bIsMirrorByY = pEquip->IsMirrorByY(); nNg = pEquip->GetDang(); nBigQ = pEquip->GetSpare(); if(nBigQ < 0.00001) nBigQ = 0; csSysBlk = pEquip->GetSysBlock(); } OPENOBJ_END(); CTemporaryResourceOverride vTemp; CEquipmentEditDlg dlg; dlg.m_bIsHide = bIsHidePipe; dlg.m_bMirrorX = bIsMirrorByX; dlg.m_bMirrorY = bIsMirrorByY; dlg.m_nRotate = Radian2Angle(nRotate); dlg.m_nElevation = nElevation/1000; dlg.m_nPipeLen = nPipeLen; dlg.m_nScale = nScale; dlg.m_nNg = nNg; dlg.m_nQ = nBigQ; dlg.m_csSysBlk = csSysBlk; if(dlg.DoModal() != IDOK) return; for(long i=0;iGetInsert(); ptTmp4.z = dlg.m_nElevation*1000; pEquip->SetInsert(ptTmp4); XPoint ptTmp = pEquip->GetLocation(); ptTmp.z = dlg.m_nElevation*1000; pEquip->SetLocation(ptTmp); } if(dlg.m_bHidePipe) pEquip->SetHidePipe(dlg.m_bIsHide); if(dlg.m_bNg) pEquip->SetDang(dlg.m_nNg); if(dlg.m_bBigQ) pEquip->SetSpare(dlg.m_nQ); if(dlg.m_bMirror){ pEquip->MirrorByX(dlg.m_bMirrorX); pEquip->MirrorByY(dlg.m_bMirrorY); } if(dlg.m_bPipeLen) pEquip->SetPipeLength(dlg.m_nPipeLen); if(dlg.m_bRotate) pEquip->SetAngle(dlg.m_nRotate / 180 * PI); if(dlg.m_bScale){ pEquip->SetScale(dlg.m_nScale); pEquip->SetYScale(dlg.m_nScale); } if(dlg.m_bSysBlk) pEquip->SetSysBlock(dlg.m_csSysBlk); } OPENOBJ_END(); } } ///////////////////////////////////////////////////////////////////////////// // CEquipmentEditDlg dialog CEquipmentEditDlg::CEquipmentEditDlg(CWnd* pParent /*=NULL*/) : CDialog(CEquipmentEditDlg::IDD, pParent), m_spinPipe(50) { //{{AFX_DATA_INIT(CEquipmentEditDlg) m_bElevation = FALSE; m_bHidePipe = FALSE; m_bIsHide = FALSE; m_bMirror = FALSE; m_bPipeLen = FALSE; m_bRotate = FALSE; m_bScale = FALSE; m_bMirrorX = FALSE; m_bMirrorY = FALSE; m_nElevation = 0.0; m_nPipeLen = 0.0; m_nRotate = 0.0; m_nScale = 0.0; m_bNg = FALSE; m_nNg = 0.0; m_bBigQ = FALSE; m_nQ = 0.0; m_bSysBlk = FALSE; //}}AFX_DATA_INIT } void CEquipmentEditDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CEquipmentEditDlg) DDX_Control(pDX, IDC_SPIN_PIPELEN, m_spinPipe); DDX_Check(pDX, IDC_CHECK_ELEVATION2, m_bElevation); DDX_Check(pDX, IDC_CHECK_HIDEPIPE, m_bHidePipe); DDX_Check(pDX, IDC_CHECK_ISHIDE, m_bIsHide); DDX_Check(pDX, IDC_CHECK_MIRROR, m_bMirror); DDX_Check(pDX, IDC_CHECK_PIPELEN2, m_bPipeLen); DDX_Check(pDX, IDC_CHECK_ROTATE, m_bRotate); DDX_Check(pDX, IDC_CHECK_SCALE, m_bScale); DDX_Check(pDX, IDC_CHECK_X, m_bMirrorX); DDX_Check(pDX, IDC_CHECK_Y, m_bMirrorY); DDX_Text(pDX, IDC_EDIT_ELEVATION, m_nElevation); DDX_Text(pDX, IDC_EDIT_PIPELEN, m_nPipeLen); DDX_Text(pDX, IDC_EDIT_ROTATE, m_nRotate); DDX_Text(pDX, IDC_EDIT_SCALE, m_nScale); DDX_Check(pDX, IDC_CHECK_NG, m_bNg); DDX_Text(pDX, IDC_EDIT_NG, m_nNg); DDX_Check(pDX, IDC_CHECK_BIGQ, m_bBigQ); DDX_Text(pDX, IDC_EDIT_Q, m_nQ); DDX_Check(pDX, IDC_CHECK_SYSBLK, m_bSysBlk); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CEquipmentEditDlg, CDialog) //{{AFX_MSG_MAP(CEquipmentEditDlg) ON_BN_CLICKED(IDC_CHECK_SCALE, OnCheckScale) ON_BN_CLICKED(IDC_CHECK_ROTATE, OnCheckRotate) ON_BN_CLICKED(IDC_CHECK_ELEVATION2, OnCheckElevation2) ON_BN_CLICKED(IDC_CHECK_PIPELEN2, OnCheckPipelen2) ON_BN_CLICKED(IDC_CHECK_HIDEPIPE, OnCheckHidepipe) ON_BN_CLICKED(IDC_CHECK_MIRROR, OnCheckMirror) ON_BN_CLICKED(IDC_CHECK_NG, OnCheckNg) ON_BN_CLICKED(IDC_CHECK_BIGQ, OnCheckBigq) ON_BN_CLICKED(IDC_PREVIEW, OnPreview) ON_WM_PAINT() //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CEquipmentEditDlg message handlers BOOL CEquipmentEditDlg::OnInitDialog() { CDialog::OnInitDialog(); m_spinPipe.SetRange(0, 10000); UpdateData(FALSE); SetEnable(); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CEquipmentEditDlg::OnCheckScale() { SetEnable(); } void CEquipmentEditDlg::OnCheckRotate() { SetEnable(); } void CEquipmentEditDlg::OnCheckElevation2() { SetEnable(); } void CEquipmentEditDlg::OnCheckPipelen2() { SetEnable(); } void CEquipmentEditDlg::OnCheckHidepipe() { SetEnable(); } void CEquipmentEditDlg::OnCheckMirror() { SetEnable(); } void CEquipmentEditDlg::OnCheckNg() { SetEnable(); } void CEquipmentEditDlg::OnCheckBigq() { SetEnable(); } void CEquipmentEditDlg::SetEnable() { UpdateData(TRUE); CWnd *pWnd1 = GetDlgItem(IDC_EDIT_SCALE); CWnd *pWnd2 = GetDlgItem(IDC_EDIT_ROTATE); CWnd *pWnd3 = GetDlgItem(IDC_EDIT_ELEVATION); CWnd *pWnd4 = GetDlgItem(IDC_EDIT_PIPELEN); CWnd *pWnd5 = GetDlgItem(IDC_SPIN_PIPELEN); CWnd *pWnd6 = GetDlgItem(IDC_CHECK_ISHIDE); CWnd *pWnd7 = GetDlgItem(IDC_CHECK_Y); CWnd *pWnd8 = GetDlgItem(IDC_CHECK_X); CWnd *pWnd9 = GetDlgItem(IDC_EDIT_NG); CWnd *pWnd10 = GetDlgItem(IDC_EDIT_Q); if(m_bBigQ) pWnd10->EnableWindow(TRUE); else pWnd10->EnableWindow(FALSE); if(m_bNg) pWnd9->EnableWindow(TRUE); else pWnd9->EnableWindow(FALSE); if(m_bElevation) pWnd3->EnableWindow(TRUE); else pWnd3->EnableWindow(FALSE); if(m_bHidePipe) pWnd6->EnableWindow(TRUE); else pWnd6->EnableWindow(FALSE); if(m_bScale) pWnd1->EnableWindow(TRUE); else pWnd1->EnableWindow(FALSE); if(m_bRotate) pWnd2->EnableWindow(TRUE); else pWnd2->EnableWindow(FALSE); if(m_bMirror){ pWnd7->EnableWindow(TRUE); pWnd8->EnableWindow(TRUE); } else{ pWnd7->EnableWindow(FALSE); pWnd8->EnableWindow(FALSE); } if(m_bPipeLen){ pWnd4->EnableWindow(TRUE); pWnd5->EnableWindow(TRUE); } else{ pWnd4->EnableWindow(FALSE); pWnd5->EnableWindow(FALSE); } } void CEquipmentEditDlg::OnPreview() { UpdateData(TRUE); if(!m_bSysBlk || m_csSysBlk == _T("")) return; XString xsTKName, xsRocord; SplitSlbName((const TCHAR*)m_csSysBlk, xsTKName, xsRocord); CString csSldName; csSldName.Format(_T("$TWTSYS$%s"), xsRocord); CString csType = GetTgBlkTypeInTk(csSldName); if(csType.Find(_T("\\")) < 0) return; CTemporaryResourceOverride vTemp; CSelectBlkDlg dlg; dlg.m_csTkName = _T("TWTSYS"); dlg.m_csType = csType; CWnd *pWnd = GetDlgItem(IDC_PREVIEW); CRect rect; dlg.m_staticSlide.m_csCurRecord = csSldName; pWnd->GetWindowRect(&rect); dlg.m_ptBase = rect.TopLeft(); if(dlg.DoModal() == IDOK){ CString csRet = dlg.m_staticSlide.m_csCurRecord; XString xsTKName, xsRocord, xsTmp; SplitSlbName(csRet, xsTKName, xsRocord); m_csSysBlk.Format(_T("TWTSYS(%s)"), xsRocord); OpenSlide(); } } void CEquipmentEditDlg::OpenSlide() { UpdateData(TRUE); CWnd *pImageBox1 = GetDlgItem(IDC_PREVIEW); DrawSlide((const TCHAR*)m_csSysBlk, pImageBox1); } void CEquipmentEditDlg::OnPaint() { CPaintDC dc(this); // device context for painting OpenSlide(); }