#include "stdafx.h" #include "IsoSysDlg.h" #include "PipelineTools.h" #include "AecDbEwPipeBase.h" #include "AecDbHvacDuct.h" #include "AecDbEwFitting.h" #include "AecDbHvacFitting.h" #include "KTCadUtility.h" #include "CoreTools.h" #include "verifynumberstring.h" IMPLEMENT_DYNAMIC(CIsoSysDlg, CDialog) CIsoSysDlg::CIsoSysDlg(CWnd* pParent /*=NULL*/) : CDialog(CIsoSysDlg::IDD, pParent) , m_bCheckAllSys(FALSE) , m_nAngle(FALSE) , m_b2DFlag(TRUE) , m_bEqu(TRUE) , m_bPipeDim(TRUE) , m_bPipeDim2(FALSE) , m_bFitDim(TRUE) , m_dPipeW(0.15) , m_dDotWD(0.15) , m_sCurrSys(_T("")) , m_bElbowLine(TRUE) , m_bWeldDot(FALSE) , m_bDNDim(FALSE) , m_bDimIndex(FALSE) , m_nView(FALSE) , m_bDimTxtNotISO(TRUE) , m_bDimPipeEl(TRUE) , m_dRefEl(0.0) , m_b45NoIso(TRUE) , m_bODxtDim(TRUE) , m_bVlvISOV(FALSE) , m_bFitFGHide(0) , m_bElStyle(0) , m_dWFact(0.75) , m_dGastGap(2) { m_pDb = NULL; m_bLockSys = FALSE; m_bStandISO = FALSE; m_dTxtH = 2.0; m_sScale = _T("1:100"); m_bOnePipeLine = FALSE; m_bPipeHanger = FALSE; GET_CACHE(CIsoSysDlg, %d%d%d%d%d%d%d%f%f%s%d%d%f%d%d%d%d%f%d%d%d%d%d%f%s%f%d%d%f, &m_bCheckAllSys, &m_nAngle, &m_b2DFlag, &m_bEqu,&m_bPipeDim,&m_bPipeDim2,&m_bFitDim,&m_dPipeW,&m_dDotWD,&m_sCurrSys, &m_bElbowLine,&m_bWeldDot,&m_bDNDim,&m_bDimIndex,&m_nView,&m_bDimTxtNotISO, &m_bDimPipeEl,&m_dRefEl,&m_b45NoIso,&m_bODxtDim,&m_bVlvISOV,&m_bFitFGHide,&m_bElStyle, &m_dTxtH, &m_sScale,&m_dWFact,&m_bOnePipeLine,&m_bPipeHanger,&m_dGastGap); if (m_b45NoIso) m_nAngle = 2; } CIsoSysDlg::~CIsoSysDlg() { SET_CACHE(CIsoSysDlg, %d%d%d%d%d%d%d%f%f%s%d%d%f%d%d%d%d%f%d%d%d%d%d%f%s%f%d%d%f, m_bCheckAllSys, m_nAngle, m_b2DFlag, m_bEqu, m_bPipeDim, m_bPipeDim2, m_bFitDim, m_dPipeW, m_dDotWD, m_sCurrSys, m_bElbowLine, m_bWeldDot, m_bDNDim, m_bDimIndex, m_nView, m_bDimTxtNotISO, m_bDimPipeEl, m_dRefEl, m_b45NoIso, m_bODxtDim, m_bVlvISOV, m_bFitFGHide, m_bElStyle, m_dTxtH, m_sScale, m_dWFact, m_bOnePipeLine, m_bPipeHanger,m_dGastGap); } void CIsoSysDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Control(pDX, IDC_COMBOSYSLAY, m_wndComboSys); DDX_Check(pDX, IDC_CHECKALLSYS, m_bCheckAllSys); DDX_Check(pDX, IDC_CHECK1,m_bWeldDot); DDX_Radio(pDX, IDC_RADIO30, m_nAngle); DDX_Check(pDX, IDC_CHECK2DFLG, m_b2DFlag); DDX_Check(pDX, IDC_CHEEQU, m_bEqu); DDX_Check(pDX, IDC_CHECKPIPEDIM, m_bPipeDim); DDX_Check(pDX, IDC_CHECKPIPEDIM2, m_bPipeDim2); DDX_Check(pDX, IDC_CHECKFITDIM, m_bFitDim); DDX_Check(pDX, IDC_CHECKFITDIM2,m_bElbowLine); DDX_Check(pDX, IDC_CHECK2,m_bDNDim); DDX_Check(pDX, IDC_CHECK3,m_bDimTxtNotISO); DDX_Check(pDX, IDC_CHECK4, m_bDimPipeEl); DDX_Check(pDX, IDC_CHECK5, m_bODxtDim); DDX_Check(pDX, IDC_CHECKSUM, m_bDimIndex); DDX_Check(pDX, IDC_CHECKVLVV, m_bVlvISOV); DDX_Check(pDX, IDC_CHEFITFHIDE, m_bFitFGHide); DDX_Text(pDX, IDC_EDIT1, m_dRefEl); DDX_Text(pDX, IDC_EDIT2, m_dTxtH); DDX_Text(pDX, IDC_EDIT3, m_dGastGap); DDX_Text(pDX, IDC_EDITPIPEW, m_dPipeW); DDX_Text(pDX, IDC_EDITDOWD, m_dDotWD); DDX_CBString(pDX, IDC_COMBOSYSLAY, m_sCurrSys); DDX_Radio(pDX, IDC_RADIO1, m_nView); DDX_Radio(pDX, IDC_RADIO5, m_bElStyle); DDX_Control(pDX, IDC_RADIO5, m_wndBTEL1); DDX_Control(pDX, IDC_RADIO6, m_wndBTEL2); DDX_CBString(pDX, IDC_COMBOSCALE, m_sScale); DDX_Text(pDX, IDC_EDITTEXTWFACT, m_dWFact); DDX_Check(pDX, IDC_CHECK6, m_bOnePipeLine); DDX_Check(pDX, IDC_CHECK7, m_bPipeHanger); } BEGIN_MESSAGE_MAP(CIsoSysDlg, CDialog) ON_BN_CLICKED(IDOK, &CIsoSysDlg::OnBnClickedOk) ON_BN_CLICKED(IDC_BUTTON1,&CIsoSysDlg::OnBnClickedButton1) ON_BN_CLICKED(IDC_CHECK2, &CIsoSysDlg::OnBnClickedCheck2) ON_BN_CLICKED(IDC_CHECK5, &CIsoSysDlg::OnBnClickedCheck5) ON_BN_CLICKED(IDC_BUTTON2, &CIsoSysDlg::OnBnClickedButton2) ON_BN_CLICKED(IDC_CHECKPIPEDIM2, &CIsoSysDlg::OnBnClickedCheckPDim2) ON_BN_CLICKED(IDC_CHECKPIPEDIM, &CIsoSysDlg::OnBnClickedCheckPDim) END_MESSAGE_MAP() void CIsoSysDlg::SetDbServer(CUIISQLiteServer* pDb) { m_pDb = pDb; } void CIsoSysDlg::GetISOContext(AecEqui::ISOContex& isoConx) { /* typedef struct ISOContex { TCHAR szSystem[65]; //系统 BOOL bAllSys; BOOL bEqu; //设备参与iso double dAngle; //iso x角度 short nVal2D; //阀门二维符号 short nPipeDim; //管线标注 short nPipeDim2; //管线在线标注 short nFitDim; //管件标注 double dPlotPipeW; //管线打印线宽 double dPlotDotD; //焊点打印直径 }ISOCONTEX; */ _tcscpy(isoConx.szSystem,m_sCurrSys); isoConx.idSys = m_idCurSys; isoConx.bAllSys = m_bCheckAllSys; isoConx.bEqu = m_bEqu; isoConx.dAngle = m_nAngle ? PI / 4.0 : PI / 6.0; isoConx.nVal2D = m_b2DFlag; isoConx.nPipeDim = m_bPipeDim; isoConx.nPipeDim2 = m_bPipeDim2; isoConx.nFitDim = m_bFitDim; isoConx.dPlotPipeW = m_dPipeW; isoConx.dPlotDotD = m_dDotWD; isoConx.nType = m_nView; isoConx.bElbowLine = m_bElbowLine; isoConx.bWeldDot = m_bWeldDot; isoConx.nDimIndex = m_bDimIndex; isoConx.bDNDim = m_bDNDim; isoConx.bDimTxtIso = !m_bDimTxtNotISO; isoConx.dRefEl = m_dRefEl; isoConx.bDimPipeEl = m_bDimPipeEl; isoConx.b45NoIso = m_b45NoIso; isoConx.bVlvISOV = m_bVlvISOV; } BOOL CIsoSysDlg::OnInitDialog() { CDialog::OnInitDialog(); //显示当前图层系统 CString sSQL,sStd(CoreTools::getCurrentPipeSysTblName()); //sSQL = _T("select tablename from wpipecfg where currstd=1"); //m_pDb->GetSelData(sSQL,sStd); sSQL.Format(_T("select distinct system from %s"),sStd); CStringArray arSyses; m_pDb->GetSelData(sSQL,arSyses); for (int i = 0;i < arSyses.GetSize();i++) { m_wndComboSys.AddString(arSyses.GetAt(i)); } m_wndComboSys.AddString(_T("新风")); m_wndComboSys.AddString(_T("除尘")); m_wndComboSys.AddString(_T("回风")); m_wndComboSys.AddString(_T("加压送风")); m_wndComboSys.AddString(_T("排风")); m_wndComboSys.AddString(_T("送风")); m_wndComboSys.AddString(_T("排烟")); m_wndComboSys.AddString(_T("通风")); if (m_bLockSys) { int nCur = m_wndComboSys.FindString(0,m_sCurrSys); if (nCur != -1) { m_wndComboSys.SetCurSel(nCur); } m_wndComboSys.EnableWindow(FALSE); GetDlgItem(IDC_CHECKALLSYS)->EnableWindow(FALSE); } else { if (arSyses.GetSize() > 0) { m_wndComboSys.SetCurSel(0); m_wndComboSys.GetLBText(0,m_sCurrSys); } } if (m_bStandISO) { GetDlgItem(IDC_STATIC_ANG)->EnableWindow(FALSE); GetDlgItem(IDC_STATIC_ANG)->ShowWindow(SW_HIDE); GetDlgItem(IDC_RADIO30)->EnableWindow(FALSE); GetDlgItem(IDC_RADIO30)->ShowWindow(SW_HIDE); GetDlgItem(IDC_RADIO45)->EnableWindow(FALSE); GetDlgItem(IDC_RADIO45)->ShowWindow(SW_HIDE); } m_bmpEl1.LoadBitmap(IDB_BMPEL1); m_wndBTEL1.SetBitmap(m_bmpEl1); m_bmpEl2.LoadBitmap(IDB_BMPEL2); m_wndBTEL2.SetBitmap(m_bmpEl2); UpdateData(FALSE); return TRUE; } void CIsoSysDlg::OnBnClickedButton1() { UpdateData(); //切换界面的当前活动 acedGetAcadFrame()->EnableWindow(TRUE); ShowWindow(SW_HIDE); acedGetAcadFrame()->SetFocus(); CString sSys; ads_name ent; struct resbuf* pRb = acutBuildList(RTDXF0, _T("AEC_EWPIPE,AEC_DBDUCT,AEC_DBEWFIT,AEC_DBHVACFIT"), 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)) { AecDbEwPipeBase* pPipe = AecDbEwPipeBase::cast(pEnt); if (pPipe != NULL) { pPipe->GetSpecialtyData(AcDb::kForRead)->GetAt(PIPE_SYS,sSys); } AecDbEwFitting* pEwFit = AecDbEwFitting::cast(pEnt); if (pEwFit != NULL) { pEwFit->GetSpecialtyData(AcDb::kForRead)->GetAt(PIPE_SYS,sSys); } AecDbHvacDuct* pDuct = AecDbHvacDuct::cast(pEnt); if (pDuct != NULL) { pDuct->GetSpecialtyData(AcDb::kForRead)->GetAt(PIPE_SYS,sSys); } AecDbHvacFitting* pHFit = AecDbHvacFitting::cast(pEnt); if (pHFit != NULL) { pHFit->GetSpecialtyData(AcDb::kForRead)->GetAt(PIPE_SYS,sSys); } pEnt->close(); } m_idPipeHit = id; } if (m_wndComboSys.FindString(0,sSys) == -1) { nRes = m_wndComboSys.AddString(sSys); m_wndComboSys.SetCurSel(nRes); } m_sCurrSys = sSys; UpdateData(FALSE); ShowWindow(SW_SHOW); SetFocus(); acedGetAcadFrame()->EnableWindow(FALSE); EnableWindow(TRUE); } extern void PL_CSSZ(); void CIsoSysDlg::OnBnClickedButton2() { PL_CSSZ(); } void CIsoSysDlg::OnBnClickedCheck2() { UpdateData(); if (m_bDNDim) { m_bODxtDim = FALSE; } UpdateData(FALSE); } void CIsoSysDlg::OnBnClickedCheck5() { UpdateData(); if (m_bODxtDim) { m_bDNDim = FALSE; } UpdateData(FALSE); } void CIsoSysDlg::OnBnClickedCheckPDim2() { UpdateData(); m_bDimPipeEl = m_bPipeDim2; //if (m_bPipeDim2) //{ // m_bDNDim = FALSE; //} UpdateData(FALSE); } void CIsoSysDlg::OnBnClickedCheckPDim() { UpdateData(); //if (m_bPipeDim) //{ // m_bDNDim = FALSE; //} UpdateData(FALSE); } void CIsoSysDlg::OnBnClickedOk() { UpdateData(); if (m_dDotWD < -1.e-10 || m_dPipeW < -1.e-10) { AfxMessageBox(_T("打印线宽和焊点直径必须大于0!")); return; } m_idCurSys = PipelineTools::getSysLayer(m_pDb,m_sCurrSys); if (m_dTxtH < 0.2) { AfxMessageBox(_T("请检查标注字高是否合适!")); return; } if (m_dWFact < 0.1) { AfxMessageBox(_T("请检查文字宽度系数是否合适!")); return; } m_b45NoIso = FALSE; if (m_nAngle == 2) { m_b45NoIso = TRUE; } //1.验证比例是否合法 int nIndex = m_sScale.Find(KT_COLON_CHAR, 0); //':' if (nIndex != -1 && nIndex < m_sScale.GetLength()) { int nLeft = _ttoi(m_sScale.Mid(0, nIndex)); if (nLeft != 1) { AfxMessageBox(_T("“出图比例”中,“:”号前数字必须为“1”。")); return; } if (!VNST(m_sScale.Mid(nIndex + 1))) { AfxMessageBox(_T("“出图比例”中,“:”号后必须为数字。")); return; } double dRight = _ttof(m_sScale.Mid(nIndex + 1)); if (dRight <= 0) { AfxMessageBox(_T("“出图比例”中,“:”号后数字必须大于“0”。")); return; } } OnOK(); } double CIsoSysDlg::GetPrntScale() const { double dScale = 100.0; int nIndex = m_sScale.Find(':', 0); if (nIndex != -1) { dScale = _ttof(m_sScale.Mid(nIndex + 1)) / _ttof(m_sScale.Mid(0, nIndex)); } return dScale; }