#include "StdAfx.h" #include "aecPipeSupport.h" #include "DZSTDlg.h" #include "DZTTDlg.h" #include "FlangeDlg.h" #include "EarThwormDef.h" #include "KTModelLayoutXData.h" #include "coretools.h" TDbPipeSupport::TDbPipeSupport(void) { } TDbPipeSupport::~TDbPipeSupport(void) { } double TDbPipeSupport::MakeSureMMUnit(double& dDn) { return CoreTools::MakeSureMMUnit(dDn); } BOOL TDbPipeSupport::XData2PipeParam(WPipe::PipeParam* pParamL,const AecDbObjXDataMap* pXDataMapSrc) { double dDn = pParamL->m_dDN; //D double dVal = 100.0; pXDataMapSrc->GetAt(PIPE_D,dVal); pParamL->m_dD = dVal; //eD int nDir = 0; pXDataMapSrc->GetAt(PIPE_DRAWDIR,nDir); pParamL->m_eD = (WPipe::EDia)(nDir); //DN dVal = 100.0; pXDataMapSrc->GetAt(PIPE_DN,dVal); pParamL->m_dDN = dVal; //OD dVal = 100.0; pXDataMapSrc->GetAt(PIPE_OD,dVal); pParamL->m_dOD = dVal; //Thick dVal = 100.0; pXDataMapSrc->GetAt(PIPE_THICK,dVal); pParamL->m_dThick = dVal; //补充风管壁厚 dVal = 0.0; if ( pXDataMapSrc->GetAt(DUCT_THICK, dVal) ) pParamL->m_dThick = dVal; if (pParamL->m_eD == WPipe::eDN) pParamL->m_dD = pParamL->m_dDN; else if (pParamL->m_eD == WPipe::eOD) pParamL->m_dD = pParamL->m_dOD; else if (pParamL->m_eD == WPipe::eID) pParamL->m_dD = pParamL->m_dOD - 2.0 * pParamL->m_dThick; //EL //Ratio dVal = 1.5; pXDataMapSrc->GetAt(PIPE_RATIO,dVal); pParamL->m_dRRatio = dVal; pXDataMapSrc->GetAt(KEY_RadRatio, pParamL->m_nRadioOn); if (!pXDataMapSrc->GetAt(PIPE_ODSN, pParamL->szODSn)) { //兼容旧版本 pXDataMapSrc->GetAt(PIPE_OD_SN, pParamL->szODSn); pParamL->szODSn[16] = _T('\0'); } pXDataMapSrc->GetAt(PIPE_SHTNO, pParamL->szShtNo); pXDataMapSrc->GetAt(PIPE_GASKET, pParamL->m_szGastInf); //dW dVal = 0.0; pXDataMapSrc->GetAt(DUCT_W, dVal); pParamL->m_dW = dVal; //dH dVal = 0.0; pXDataMapSrc->GetAt(DUCT_H, dVal); pParamL->m_dH = dVal; //app nDir = 0; pXDataMapSrc->GetAt(PIPE_EAPP, nDir); pParamL->m_app = (WPipe::EApp)nDir; //nConnectType nDir = 0; pXDataMapSrc->GetAt(PIPE_CONNECT,nDir); pParamL->m_nConnectType = nDir; //dInterfaceL dVal = 0.0; pXDataMapSrc->GetAt(PIPE_INTERFACEL,dVal); pParamL->m_dInterfaceL = dVal; //dInterfaceD dVal = 0.0; pXDataMapSrc->GetAt(PIPE_INTERFACED,dVal); pParamL->m_dInterfaceD = dVal; //dInterfaceD2 dVal = 0.0; pXDataMapSrc->GetAt(PIPE_INTERFACED2,dVal); pParamL->m_dInterfaceD2 = dVal; //dInterfaceL2 dVal = 0.0; pXDataMapSrc->GetAt(PIPE_INTERFACEL2,dVal); pParamL->m_dInterfaceL2 = dVal; //dInsThk dVal = 1.0; pXDataMapSrc->GetAt(PIPE_INSTHICK,dVal); pParamL->m_dInsThk = dVal; //dInterfaceL3 dVal = 0.0; pXDataMapSrc->GetAt(PIPE_INTERFACEL3,dVal); pParamL->m_dInterfaceL3 = dVal; //m_eRed //m_vtECCen //m_vtDir //m_eElBase //szPipeno CString sVal; pXDataMapSrc->GetAt(PIPE_NO,sVal); _tcscpy(pParamL->szPipeno,sVal); //szMertial sVal = _T(""); pXDataMapSrc->GetAt(PIPE_MATERIAL,sVal); _tcscpy(pParamL->szMertial,sVal); //szMertialFit sVal = _T(""); pXDataMapSrc->GetAt(PIPE_MATERIALFT,sVal); _tcscpy(pParamL->szMertialFit,sVal); //szZoneNo sVal = _T(""); pXDataMapSrc->GetAt(PIPE_ZONE,sVal); _tcscpy(pParamL->szZoneNo,sVal); //szInsMtr sVal = _T(""); pXDataMapSrc->GetAt(DOC_INSMATER,sVal); _tcscpy(pParamL->szInsMtr,sVal); //szDescr sVal = _T(""); pXDataMapSrc->GetAt(PIPE_DESCR,sVal); _tcscpy(pParamL->szDescr,sVal); //szSys sVal = _T(""); pXDataMapSrc->GetAt(PIPE_SYS,sVal); _tcscpy(pParamL->szSys,sVal); //m_nGroupID //? //LEVEL sVal = _T(""); pXDataMapSrc->GetAt(PIPE_LEVEL,sVal); _tcscpy(pParamL->szLevel,sVal); dVal = 1.0; pXDataMapSrc->GetAt(PID_PIPE_DPRESS,dVal); pParamL->m_dPress = dVal; //szZone sVal = _T(""); pXDataMapSrc->GetAt(PIPE_ZONE,sVal); _tcscpy(pParamL->szZone,sVal); //szMedia sVal = _T(""); pXDataMapSrc->GetAt(PIPE_MEDIA,sVal); _tcscpy(pParamL->szMedia,sVal); //szNo sVal = _T(""); pXDataMapSrc->GetAt(PIPE_NO,sVal); _tcscpy(pParamL->szNo,sVal); //Spec sVal = _T(""); pXDataMapSrc->GetAt(PIPE_SPEC,sVal); _tcscpy(pParamL->szSpec,sVal); //LineNo sVal = _T(""); pXDataMapSrc->GetAt(PIPE_LINENO,sVal); _tcscpy(pParamL->szLineNo,sVal); //szInsTag sVal = _T(""); pXDataMapSrc->GetAt(PIPE_INSTAG,sVal); _tcscpy(pParamL->szInsTag,sVal); //szInsDim sVal = _T(""); pXDataMapSrc->GetAt(DOC_INSDIM,sVal); _tcscpy(pParamL->szInsDim,sVal); //szInsMateral sVal = _T(""); pXDataMapSrc->GetAt(DOC_INSMATER,sVal); _tcscpy(pParamL->szInsMateral,sVal); //szInsSpec sVal = _T(""); pXDataMapSrc->GetAt(DOC_INSSPEC,sVal); _tcscpy(pParamL->szInsSpec,sVal); //DOC_TRAMTOINF sVal = _T(""); pXDataMapSrc->GetAt(DOC_TRAMTOINF,sVal); _tcscpy(pParamL->szTraMtoInfo,sVal); //szTraDescr sVal = _T(""); pXDataMapSrc->GetAt(DOC_TRADESCR,sVal); _tcscpy(pParamL->szTraDescr,sVal); //szFitType sVal = _T(""); pXDataMapSrc->GetAt(PIPE_FITTYPE,sVal); _tcscpy(pParamL->szFitType,sVal); //szMtoInfo sVal = _T(""); pXDataMapSrc->GetAt(PIPE_MTOALL,sVal); _tcscpy(pParamL->szMtoInfo,sVal); //以下是全局设置信息,Param中没有对应 nDir = 0; pXDataMapSrc->GetAt(KEY_2DSTYLE,nDir); //?? nDir = 0; pXDataMapSrc->GetAt(PIPE_COLOR,nDir); pParamL->m_nPipeColor = nDir; nDir = 0; pXDataMapSrc->GetAt(KEY_SINGLE,nDir); //?? double dTDn = 100.0; pXDataMapSrc->GetAt(PIPE_TDN, dTDn); //?? double dTOd = 100.0; pXDataMapSrc->GetAt(PIPE_TOD, dTOd); //?? //根据变径取舍 if (dDn > 1.0 && fabs(dDn - dTDn) < 1.e-1) { pParamL->m_dDN = dTDn; pParamL->m_dOD = dTOd; } nDir = 0; pXDataMapSrc->GetAt(PIPE_ELBOWFLG,nDir); //?? nDir = 0; pXDataMapSrc->GetAt(PIPE_BWELDDOT,nDir); //?? dVal = 1.0; pXDataMapSrc->GetAt(DOC_PLOTWIDTH,dVal); //?? dVal = 1.0; pXDataMapSrc->GetAt(DOC_DPLOTWIDTH,dVal); //?? dVal = 1.0; pXDataMapSrc->GetAt(DOC_WELDDIA,dVal); //?? dVal = 1.0; pXDataMapSrc->GetAt(PIPE_PIDD,dVal); //?? return TRUE; } BOOL TDbPipeSupport::QueryElbowL(CUIISQLiteServer *pDb, double dDN, double &dL, double dRadio,int nCn,LPCTSTR pszLevel,LPCTSTR pszODNo, AecDbObjXDataMap *pXData) { //附加替换的数据 double dAng = 0.0; pXData->GetAt(PIPE_ELBOWANG, dAng); //角度-弧度 //继续按默认90度设置 BOOL bOk = FALSE; CString sSQL,sODNo = pszODNo; if (pszLevel != NULL && _tcslen(pszLevel) > 0)// { sSQL.Format(_T("select distinct [外径系列] from AecSpecFit where [类型]='弯头' and [等级名称]='%s'"), pszLevel); pDb->GetSelData(sSQL, sODNo); if (sODNo.IsEmpty()) sODNo = pszODNo; } BOOL bRdioOn = FALSE; pXData->GetAt(KEY_RadRatio, bRdioOn); if (bRdioOn) { dRadio = 1.0;//最小 } static CStringList lstField; if (lstField.IsEmpty()) { pDb->GetTableStru(_T("AecElbowData"), lstField); } if (lstField.Find(_T("r")) != NULL || lstField.Find(_T("R")) != NULL)//兼容旧版 { sSQL.Format(_T("select [结构长度],R,F,H from [AecElbowData] where [公称直径]=%d and [弯头曲率]>=%.2f and [外径系列]='%s' order by [弯头曲率]"), (int)(dDN + 0.5),dRadio - 0.01 , sODNo); } else { sSQL.Format(_T("select [结构长度] from [AecElbowData] where [公称直径]=%d and [弯头曲率]>=%.2f and [外径系列]='%s' order by [弯头曲率]"), (int)(dDN + 0.5), dRadio - 0.01, sODNo); } CStringArray arVals; pDb->GetSelData(sSQL, arVals); if (arVals.GetSize() >= 3) { dL = _ttof(arVals.GetAt(0)); if (arVals.GetSize() >= 4) { if (_ttof(arVals.GetAt(1)) > 1.e-6) { pXData->SetAt(_T("R"), _ttof(arVals.GetAt(1)) ); pXData->SetAt(_T("F"), _ttof(arVals.GetAt(2)) ); pXData->SetAt(_T("H"), _ttof(arVals.GetAt(3)) ); } } bOk = TRUE; } else//没有按最近曲率查, 原因法兰管曲率不能太小,防止法兰碰,比如衬塑管 { if (lstField.Find(_T("r")) != NULL || lstField.Find(_T("R")) != NULL)//兼容旧版 { sSQL.Format(_T("select [结构长度],R,F,H from [AecElbowData] where [公称直径]=%d and [弯头曲率]>=%.2f and [外径系列]='%s' order by [弯头曲率]"), (int)(dDN + 0.5), dRadio, sODNo); } else { sSQL.Format(_T("select [结构长度] from [AecElbowData] where [公称直径]=%d and [弯头曲率]>=%.2f and [外径系列]='%s' order by [弯头曲率]"), (int)(dDN + 0.5), dRadio, sODNo); } CStringArray arVals; pDb->GetSelData(sSQL, arVals); if (arVals.GetSize() > 0) { dL = _ttof(arVals.GetAt(0)); if (arVals.GetSize() >= 4) { if (_ttof(arVals.GetAt(1)) > 1.e-6) { pXData->SetAt(_T("R"), _ttof(arVals.GetAt(1))); pXData->SetAt(_T("F"), _ttof(arVals.GetAt(2))); pXData->SetAt(_T("H"), _ttof(arVals.GetAt(3))); } } bOk = TRUE; } else { //acutPrintf(_T("\n没有查到%s系列公称直径=%d曲率=%.1f的弯头结构长度数据,采用B系列数据代替!"), sODNo,(int)(dDN+0.5),dRadio); //没有一律 按B 系列再查 if (lstField.Find(_T("r")) != NULL || lstField.Find(_T("R")) != NULL)//兼容旧版 { sSQL.Format(_T("select [结构长度],R,F,H from [AecElbowData] where [公称直径]=%d and [弯头曲率]>=%.2f and [外径系列]='B' order by [弯头曲率]"), (int)(dDN + 0.5), dRadio - 0.01 ); } else { sSQL.Format(_T("select [结构长度] from [AecElbowData] where [公称直径]=%d and [弯头曲率]>=%.2f and [外径系列]='B' order by [弯头曲率]"), (int)(dDN + 0.5), dRadio - 0.01); } pDb->GetSelData(sSQL, arVals); if (arVals.GetSize() > 0) { dL = _ttof(arVals.GetAt(0)); if (arVals.GetSize() >= 4) { if (_ttof(arVals.GetAt(1)) > 1.e-6) { pXData->SetAt(_T("R"), _ttof(arVals.GetAt(1))); pXData->SetAt(_T("F"), _ttof(arVals.GetAt(2))); pXData->SetAt(_T("H"), _ttof(arVals.GetAt(3))); } } bOk = TRUE; } else { dL = dRadio * dDN; bOk = TRUE; } } } if (fabs(dAng - PI / 8.0) < 1.e-3)//22.5 { if (TDbPipeSupport::Query225ElbowL(pDb, dDN, dL, dRadio, nCn, pszLevel, pszODNo, pXData)) return TRUE; } else if (fabs(dAng - PI / 6.0) < 1.e-3)//30 { if (TDbPipeSupport::Query30ElbowL(pDb, dDN, dL, dRadio, nCn, pszLevel, pszODNo, pXData)) return TRUE; } else if (fabs(dAng - PI / 4.0) < 1.e-3)//45 { if (TDbPipeSupport::Query45ElbowL(pDb, dDN, dL, dRadio, nCn, pszLevel, pszODNo, pXData)) return TRUE; } else if (fabs(dAng - PI / 3.0) < 1.e-3)//60 { if (TDbPipeSupport::Query60ElbowL(pDb, dDN, dL, dRadio, nCn, pszLevel, pszODNo, pXData)) return TRUE; } return bOk; } BOOL TDbPipeSupport::QueryRElbowL(CUIISQLiteServer *pDb, double dDNL, double dDNs,double &dL, double dRadio, int nCn, LPCTSTR pszLevel, LPCTSTR pszODNo, AecDbObjXDataMap *pXData) { //附加替换的数据 double dAng = 0.0; pXData->GetAt(PIPE_ELBOWANG, dAng); //角度-弧度 //继续按默认90度设置 BOOL bOk = FALSE; CString sSQL, sODNo = pszODNo; if (pszLevel != NULL && _tcslen(pszLevel) > 0)// { sSQL.Format(_T("select distinct [外径系列] from AecSpecFit where [类型]='弯头' and [等级名称]='%s'"), pszLevel); pDb->GetSelData(sSQL, sODNo); if (sODNo.IsEmpty()) sODNo = pszODNo; } BOOL bRdioOn = FALSE; pXData->GetAt(KEY_RadRatio, bRdioOn); if (bRdioOn) { dRadio = 1.0;//最小 } static CStringList lstField; if (lstField.IsEmpty()) { pDb->GetTableStru(_T("AecRElbowData"), lstField); } if (lstField.Find(_T("r")) != NULL || lstField.Find(_T("R")) != NULL)//兼容旧版 { sSQL.Format(_T("select [长度],R,F,H from [AecRElbowData] where [公称直径L]=%d and [公称直径S]=%d and [外径系列]='%s'"), (int)(dDNL+0.5),(int)(dDNs+0.5), sODNo); } else { sSQL.Format(_T("select [长度] from [AecRElbowData] where [公称直径L]=%d and [公称直径S]=%d and [外径系列]='%s'"), (int)(dDNL + 0.5), (int)(dDNs + 0.5), sODNo); } CStringArray arVals; pDb->GetSelData(sSQL, arVals); if (arVals.GetSize() >= 3) { dL = _ttof(arVals.GetAt(0)); if (arVals.GetSize() >= 4) { if (_ttof(arVals.GetAt(1)) > 1.e-6) { pXData->SetAt(_T("R"), _ttof(arVals.GetAt(1))); pXData->SetAt(_T("F"), _ttof(arVals.GetAt(2))); pXData->SetAt(_T("H"), _ttof(arVals.GetAt(3))); } } bOk = TRUE; } return bOk; } BOOL TDbPipeSupport::Query45ElbowL(CUIISQLiteServer *pDb, double dDN, double &dL, double dRadio, int nCn, LPCTSTR pszLevel, LPCTSTR pszDNo, AecDbObjXDataMap *pXData) { static CStringList lstField; if (lstField.IsEmpty()) { pDb->GetTableStru(_T("Aec45ElbowData"), lstField); } CString sSQL; if (lstField.Find(_T("r")) != NULL || lstField.Find(_T("R")) != NULL)//兼容旧版 { sSQL.Format(_T("select [结构长度],R,F,H from [Aec45ElbowData] where [公称直径]=%d and [弯头曲率]>=%.2f and [外径系列]='%s' order by [弯头曲率]"), (int)(dDN + 0.5), dRadio - 0.01, pszDNo); } else { sSQL.Format(_T("select [结构长度] from [Aec45ElbowData] where [公称直径]=%d and [弯头曲率]>=%.2f and [外径系列]='%s' order by [弯头曲率]"), (int)(dDN + 0.5), dRadio - 0.01, pszDNo); } CStringArray arVals; pDb->GetSelData(sSQL, arVals); if (arVals.GetSize() > 0 ) { dL = _ttof(arVals.GetAt(0)); if (arVals.GetSize() >= 4) { if (_ttof(arVals.GetAt(1)) > 1.e-6) { pXData->SetAt(_T("R"), _ttof(arVals.GetAt(1))); pXData->SetAt(_T("F"), _ttof(arVals.GetAt(2))); pXData->SetAt(_T("H"), _ttof(arVals.GetAt(3))); } } return TRUE; } return FALSE; } BOOL TDbPipeSupport::Query225ElbowL(CUIISQLiteServer *pDb, double dDN, double &dL, double dRadio, int nCn, LPCTSTR pszLevel, LPCTSTR pszDNo, AecDbObjXDataMap *pXData) { CString sSQL; sSQL.Format(_T("select [结构长度],R,F,H from [Aec22_5ElbowData] where [公称直径]=%d and [弯头曲率]>=%.2f and [外径系列]='%s' order by [弯头曲率]"), (int)(dDN + 0.5), dRadio - 0.01, pszDNo); CStringArray arVals; pDb->GetSelData(sSQL, arVals); if (arVals.GetSize() >= 4) { dL = _ttof(arVals.GetAt(0)); if (_ttof(arVals.GetAt(1)) > 1.e-6) { pXData->SetAt(_T("R"), _ttof(arVals.GetAt(1))); pXData->SetAt(_T("F"), _ttof(arVals.GetAt(2))); pXData->SetAt(_T("H"), _ttof(arVals.GetAt(3))); } return TRUE; } return FALSE; } BOOL TDbPipeSupport::Query30ElbowL(CUIISQLiteServer *pDb, double dDN, double &dL, double dRadio, int nCn, LPCTSTR pszLevel, LPCTSTR pszDNo, AecDbObjXDataMap *pXData) { CString sSQL; sSQL.Format(_T("select [结构长度],R,F,H from [Aec30ElbowData] where [公称直径]=%d and [弯头曲率]>=%.2f and [外径系列]='%s' order by [弯头曲率]"), (int)(dDN + 0.5), dRadio - 0.01, pszDNo); CStringArray arVals; pDb->GetSelData(sSQL, arVals); if (arVals.GetSize() >= 4) { dL = _ttof(arVals.GetAt(0)); if (_ttof(arVals.GetAt(1)) > 1.e-6) { pXData->SetAt(_T("R"), _ttof(arVals.GetAt(1))); pXData->SetAt(_T("F"), _ttof(arVals.GetAt(2))); pXData->SetAt(_T("H"), _ttof(arVals.GetAt(3))); } return TRUE; } return FALSE; } BOOL TDbPipeSupport::Query60ElbowL(CUIISQLiteServer *pDb, double dDN, double &dL, double dRadio, int nCn, LPCTSTR pszLevel, LPCTSTR pszDNo, AecDbObjXDataMap *pXData) { CString sSQL; sSQL.Format(_T("select [结构长度],R,F,H from [Aec60ElbowData] where [公称直径]=%d and [弯头曲率]>=%.2f and [外径系列]='%s' order by [弯头曲率]"), (int)(dDN + 0.5), dRadio - 0.01, pszDNo); CStringArray arVals; pDb->GetSelData(sSQL, arVals); if (arVals.GetSize() >= 4) { dL = _ttof(arVals.GetAt(0)); if (_ttof(arVals.GetAt(1)) > 1.e-6) { pXData->SetAt(_T("R"), _ttof(arVals.GetAt(1))); pXData->SetAt(_T("F"), _ttof(arVals.GetAt(2))); pXData->SetAt(_T("H"), _ttof(arVals.GetAt(3))); } return TRUE; } return FALSE; } BOOL TDbPipeSupport::QueryFitSpecInf(CUIISQLiteServer *pDb, double dDn, WPipe::FITSPEC& fitSpec,WPipe::Trade &eTrade, LPCTSTR pszFitName, LPCTSTR pszProName, LPCTSTR pszPreSpecName) { if (eTrade == WPipe::eCivial)//市政 不考虑等级 Z系列 暂 A return FALSE; /* TCHAR szODSN[7]; //外径系列 TCHAR szShtNo[33]; //表号 TCHAR szStdNo[33]; //标准号 TCHAR szMat[33]; //材质 TCHAR szDesc[128]; //描述 */ memset(&fitSpec, 0, sizeof(WPipe::FITSPEC)); CString sSQL, sTip; BOOL bFind = FALSE; if (pszProName != NULL && pszPreSpecName != NULL) { CStringArray arVals; if (_tcscmp(pszFitName, _T("法兰")) == 0) { sSQL.Format(_T("select distinct [制造类型],[标准号],[材质],[描述] from AecSpecFlange where [项目名称]='%s' and [类别]='%s' and [等级名称]='%s' and [公称直径]=%d"), pszProName, pszFitName, pszPreSpecName, (int)(dDn + 0.5)); if (pDb->GetSelData(sSQL, arVals)) { if (arVals.GetSize() >= 4) { _tcscpy(fitSpec.szODSN, _T("A")); _tcscpy(fitSpec.szShtNo, arVals.GetAt(0)); _tcscpy(fitSpec.szStdNo, arVals.GetAt(1)); _tcscpy(fitSpec.szMat, arVals.GetAt(2)); _tcscpy(fitSpec.szDesc, arVals.GetAt(3)); bFind = TRUE; } } } else { sSQL.Format(_T("select distinct [外径系列],[表号],[标准号],[材质],[描述] from AecSpecFit where [项目名称]='%s' and [类型]='%s' and [等级名称]='%s' and [公称直径]=%d"), pszProName, pszFitName, pszPreSpecName, (int)(dDn + 0.5)); if (pDb->GetSelData(sSQL, arVals)) { if (arVals.GetSize() >= 5) { _tcscpy(fitSpec.szODSN, arVals.GetAt(0)); _tcscpy(fitSpec.szShtNo, arVals.GetAt(1)); _tcscpy(fitSpec.szStdNo, arVals.GetAt(2)); _tcscpy(fitSpec.szMat, arVals.GetAt(3)); _tcscpy(fitSpec.szDesc, arVals.GetAt(4)); bFind = TRUE; } } } if (!bFind) { sTip.Format(_T("缺少项目名称=%s 等级名称=%s DN=%d 等级数据!\n请设置该项目和等级需要的%s等级数据!\n参见 KTSpeEdit\\等级生成器\\管件 设置"), pszProName, pszPreSpecName,(int)(dDn + 0.5), pszFitName); AfxMessageBox(sTip); return FALSE; } } else { //没有项目 等级 设置,默认取A系列 //CString sSNo = _T("A"); } return bFind; } BOOL TDbPipeSupport::QueryPipeSpecInf(CUIISQLiteServer *pDb, double dDn, WPipe::PIPESPEC &pipeSpec, WPipe::Trade &eTrade, LPCTSTR pszProName, LPCTSTR pszPreSpecName) { if (eTrade == WPipe::eCivial)//市政 不考虑等级 Z系列 暂 A return FALSE; /* * TCHAR szODSN[7]; //外径系列 TCHAR szShtNo[33]; //表号 TCHAR szStdNo[33]; //标准号 TCHAR szMat[33]; //材质 TCHAR szDesc[128]; //描述 */ memset(&pipeSpec, 0, sizeof(WPipe::FITSPEC)); CString sSQL, sTip; BOOL bFind = FALSE; if (pszProName != NULL && pszPreSpecName != NULL) { CStringArray arVals; sSQL.Format(_T("select distinct [外径系列],[表号],[标准号],[材质],[描述] from AecSpecPipe where [项目名称]='%s' and [类别]='管道' and [等级名称]='%s' and [公称直径]=%d"), pszProName, pszPreSpecName, (int)(dDn + 0.5)); if (pDb->GetSelData(sSQL, arVals)) { if (arVals.GetSize() >= 5) { _tcscpy(pipeSpec.szODSN, arVals.GetAt(0)); _tcscpy(pipeSpec.szShtNo, arVals.GetAt(1)); _tcscpy(pipeSpec.szStdNo, arVals.GetAt(2)); _tcscpy(pipeSpec.szMat, arVals.GetAt(3)); _tcscpy(pipeSpec.szDesc, arVals.GetAt(4)); bFind = TRUE; } } if (!bFind) { sTip.Format(_T("缺少项目名称=%s 等级名称=%s DN=%d 等级数据!\n请设置该项目和等级需要的%s等级数据!\n参见 KTSpeEdit\\等级生成器\\管道 设置"), pszProName, pszPreSpecName, (int)(dDn + 0.5)); AfxMessageBox(sTip); return FALSE; } } else { //没有项目 等级 设置,默认取A系列 //CString sSNo = _T("A"); } return bFind; } BOOL TDbPipeSupport::QueryFitSpecsNo(CUIISQLiteServer *pDb, double dDn, CString &sSNo, WPipe::Trade &eTrade, LPCTSTR pszFitName, LPCTSTR pszDNo, LPCTSTR pszProName, LPCTSTR pszPreSpecName) { CString sSQL, sTip; //行业 全局 AecDbObjXDataMap xInitMap; KTModelLayoutXData::ReadModelXData(KT_PIPEINIT, xInitMap); int nTrade = 4; xInitMap.GetAt(DOC_PIDTRADE, nTrade); //应用行业,石油 sSNo = _T("A"); eTrade = (WPipe::Trade)nTrade; if (eTrade == WPipe::eCivial)//市政 不考虑等级 Z系列 暂 A { if (pszDNo == NULL) sSNo = _T("A"); else sSNo = pszDNo; } else { bool bFind = false; if (pszProName != NULL && pszPreSpecName != NULL) { CString sSNo1 = _T(""), sSQL1; sSQL1.Format(_T("select distinct [外径系列] from AecSpecFit where [项目名称]='%s' and [类型]='%s' and [等级名称]='%s' and [公称直径]=%d"), pszProName, pszFitName, pszPreSpecName, (int)(dDn + 0.5)); if (pDb->GetSelData(sSQL1, sSNo1) ) { sSNo = sSQL1; bFind = true; } if (!bFind) { sTip.Format(_T("\n缺少项目名称=%s 等级名称=%s 的%s外径系列 DN%d 选型数据!\n请设置该项目和等级需要的%s选型数据!\n参见 KTSpeEdit\\等级生成器\\管件 设置"), pszProName, pszPreSpecName, pszFitName, (int)(dDn + 0.5), pszFitName); acutPrintf(sTip); if (pszDNo != NULL) sSNo = pszDNo; return FALSE; } return TRUE; } else { if (pszDNo != NULL) sSNo = pszDNo; //没有项目 等级 设置,默认取A系列 //CString sSNo = _T("A"); } } return TRUE; } BOOL TDbPipeSupport::QueryFitSpecsNo(CUIISQLiteServer *pDb, double dDn1, double dDn2, CString& sSNo, WPipe::Trade& eTrade,LPCTSTR pszFitName, LPCTSTR pszDNo,LPCTSTR pszProName, LPCTSTR pszPreSpecName) { CString sSQL,sTip; //行业 全局 AecDbObjXDataMap xInitMap; KTModelLayoutXData::ReadModelXData(KT_PIPEINIT, xInitMap); int nTrade = 4; xInitMap.GetAt(DOC_PIDTRADE, nTrade); //应用行业,石油 sSNo = _T("A"); eTrade = (WPipe::Trade)nTrade; if (eTrade == WPipe::eCivial)//市政 不考虑等级 Z系列 暂 A { if (pszDNo != NULL) sSNo = pszDNo; else sSNo = _T("A"); } else { bool bFind = false; if (pszProName != NULL && pszPreSpecName != NULL) { CString sSNo1 = _T(""), sSNo2 = _T(""), sSQL1, sSQL2; sSQL1.Format(_T("select distinct [外径系列] from AecSpecFit where [项目名称]='%s' and [类型]='%s' and [等级名称]='%s' and [公称直径]=%d"), pszProName, pszFitName, pszPreSpecName, (int)(dDn1 + 0.5)); sSQL2.Format(_T("select distinct [外径系列] from AecSpecFit where [项目名称]='%s' and [类型]='%s' and [等级名称]='%s' and [公称直径]=%d"), pszProName, pszFitName, pszPreSpecName, (int)(dDn2 + 0.5)); if (pDb->GetSelData(sSQL1, sSNo1) && pDb->GetSelData(sSQL2, sSNo2)) { if (sSNo1.CompareNoCase(sSNo2) == 0) { sSNo = sSNo1; bFind = true; } else { sSNo = sSNo1; bFind = true; //... } } if (!bFind) { sTip.Format(_T("\n缺少项目名称=%s 等级名称=%s 的%s外径系列 DN%d : DN%d 选型数据!\n请设置该项目和等级需要的%s选型数据!\n参见 KTSpeEdit\\等级生成器\\管件 设置"), pszProName, pszPreSpecName, pszFitName,(int)(dDn1 + 0.5), (int)(dDn2 + 0.5), pszFitName); acutPrintf(sTip); if (pszDNo != NULL) sSNo = pszDNo; return FALSE; } return TRUE; } else { if (pszDNo != NULL) sSNo = pszDNo; //没有项目 等级 设置,默认取A系列 //CString sSNo = _T("A"); } } return TRUE; } BOOL TDbPipeSupport::QueryFitSpecsNo(CUIISQLiteServer* pDb, LPCTSTR pszLevel, double dDn, CString &sODn) { CString sSQL; sSQL.Format(_T("select distinct [外径系列] from [AecSpecFit] where [公称直径]=%d and [类别]='管件' and [等级名称]='%s'"),(int)(dDn+0.5),pszLevel); sODn = _T("A"); pDb->GetSelData(sSQL, sODn); return TRUE; } BOOL TDbPipeSupport::QueryTeeData(CUIISQLiteServer* pDb,double dDn1,double dDn2,double& dL,double& dS, LPCTSTR pszDNo/* = _T("A")*/, LPCTSTR pszProName, LPCTSTR pszPreSpecName) { double dUnit = MakeSureMMUnit(dDn1); MakeSureMMUnit(dDn2); CString sSQL, sSNo = _T("A"), sTip; CStringArray arValues; WPipe::Trade eTrade = WPipe::eCivial; if (!QueryFitSpecsNo(pDb, dDn1, dDn2, sSNo, eTrade,_T("三通"), pszDNo,pszProName, pszPreSpecName)) { //默认 if (pszDNo != NULL) sSNo = pszDNo; } //A B 系列 Z系列位市政,无等级 //查询三通尺寸 sSQL.Format(_T("select [长度L],[长度S],f1,f2 from AecTeeData where [公称直径L] = %d and") _T(" [公称直径S] = %d and [外径系列] = '%s'"),(int)(dDn1+0.5),(int)(dDn2+0.5), sSNo); pDb->GetSelData(sSQL,arValues); if (arValues.GetSize() < 4 && eTrade == WPipe::eCivial) //再反查B { sSQL.Format(_T("select [长度L],[长度S],f1,f2 from AecTeeData where [公称直径L] = %d and") _T(" [公称直径S] = %d and [外径系列] = 'B'"),(int)(dDn1+0.5),(int)(dDn2+0.5)); pDb->GetSelData(sSQL,arValues); } if (arValues.GetSize() < 4) { if (fabs(dDn1 - dDn2) < 1.e-1) { sSQL.Format(_T("select [长度L],[长度S],f1,f2 from AecTeeData where [公称直径L] = %d and [外径系列] = '%s'"), (int)(dDn1 + 0.5), sSNo); pDb->GetSelData(sSQL, arValues); if (arValues.GetSize() < 4) { sTip.Format(_T("缺少公称直径L=%d 公称直径S=%d 外径系列='%s' 的三通选型数据!\ \n请完善三通的安装数据!\n参见KTSpeEdit\\安装数据\\三通数据!"), (int)(dDn1 + 0.5), (int)(dDn2 + 0.5), sSNo); AfxMessageBox(sTip); return FALSE; } } } //对方是主尺寸,自己是支尺寸 if (arValues.GetSize() >= 4) //有 { dL = _ttof(arValues.GetAt(0)); //M 尺寸 dS = _ttof(arValues.GetAt(1)); //B 尺寸 dL += _ttof(arValues.GetAt(2)); dS += _ttof(arValues.GetAt(3)); dL /= dUnit; dS /= dUnit; return TRUE; } else { //自行添加 只适合 市政 Z系列 CAcModuleResourceOverride myResources; CDZTTDlg dlg; dlg.m_nDN = (int)(dDn1+0.5); dlg.m_nDN2 = (int)(dDn2+0.5); if (IDOK == dlg.DoModal() ) { if (!dlg.m_bWeldTo) { sSQL.Format(_T("insert into AecTeeData ([长度L],[长度S],[公称直径L],[公称直径S],[外径系列]) values (%d,%d,%d,%d,'Z')"), dlg.m_nL,dlg.m_nS,(int)(dDn1+0.5),(int)(dDn2+0.5)); pDb->ExecuteSQL(sSQL); dL = dlg.m_nL; dS = dlg.m_nS; dL /= dUnit; dS /= dUnit; return TRUE; } //焊接搭接 dS = -1000.0;// 特殊标志 return FALSE; } } return FALSE; } BOOL TDbPipeSupport::QueryCrossData(CUIISQLiteServer* pDb,double dDN1,double dDN2,double& dL,double& dB, LPCTSTR pszDNo, LPCTSTR pszProName, LPCTSTR pszPreSpecName) { double dUnit = MakeSureMMUnit(dDN1); MakeSureMMUnit(dDN2); CString sSQL, sSNo = pszDNo, sTip; CStringArray arValues; WPipe::Trade eTrade = WPipe::eCivial; if (!QueryFitSpecsNo(pDb, dDN1, dDN2, sSNo, eTrade, _T("四通"), pszDNo, pszProName, pszPreSpecName)) { return FALSE; } //param1. if ( ((int)(dDN1+0.5)) == ((int)(dDN2+0.5)) ) { sSQL.Format(_T("select [结构长度L],[结构长度S],f1,f2 from AecCross where [公称直径] = %d and [外径系列] = '%s'"),(int)(dDN1+0.5), sSNo); pDb->GetSelData(sSQL,arValues); if (arValues.GetSize() < 4) { //从三通中取 if (QueryTeeData(pDb, dDN1, dDN2, dL, dB, pszDNo, pszProName, pszPreSpecName)) { return TRUE; } sTip.Format(_T("\n数据库中缺少系列=%s公称直径=%dx%d类型的四通!"), sSNo, (int)(dDN1 + 0.5), (int)(dDN2 + 0.5)); AfxMessageBox(sTip); //如果是市政 //弹出界面,用户添加定制 CAcModuleResourceOverride myResources; CDZSTDlg dlg; dlg.m_nDN = (int)(dDN1 + 0.5); dlg.m_nDN2 = (int)(dDN1 + 0.5); if (IDOK == dlg.DoModal()) { dL = dlg.m_nL; dB = dlg.m_nS; sSQL.Format(_T("insert into AecCross ([结构长度L],[结构长度S],[公称直径],[外径系列]) values (%d,%d,%d,'%s')"), (int)(dL + 0.5), (int)(dB + 0.5), (int)(dDN1 + 0.5), sSNo); pDb->ExecuteSQL(sSQL); dL /= dUnit; dB /= dUnit; return TRUE; } else { return FALSE; } } else { dL = _ttof(arValues.GetAt(0)); dB = _ttof(arValues.GetAt(1)); dL += _ttof(arValues.GetAt(2)); dB += _ttof(arValues.GetAt(3)); dL /= dUnit; dB /= dUnit; return TRUE; } } else { sSQL.Format(_T("select [结构长度L],[结构长度S] from AecCrossR \ where [公称直径L] = %d and [公称直径S] = %d and [外径系列] = '%s'"),(int)(dDN1+0.5),(int)(dDN2+0.5),sSNo); pDb->GetSelData(sSQL,arValues); if (arValues.GetSize() < 2) { arValues.RemoveAll(); sSQL.Format(_T("select [结构长度L],[结构长度S] from AecCrossR \ where [公称直径L] = %d and [公称直径S] = %d and [外径系列] = '%s'"),(int)(dDN2+0.5),(int)(dDN1+0.5),sSNo); pDb->GetSelData(sSQL,arValues); if (arValues.GetSize() < 2) { //从三通中取 if (QueryTeeData(pDb, dDN1, dDN2, dL, dB, pszDNo, pszProName, pszPreSpecName) ) { return TRUE; } else { //弹出界面,用户添加定制 //弹出界面,用户添加定制 CAcModuleResourceOverride myResources; CDZSTDlg dlg; dlg.m_nDN = (int)(dDN1 + 0.5); dlg.m_nDN2 = (int)(dDN2 + 0.5); if (IDOK == dlg.DoModal()) { dL = dlg.m_nL; dB = dlg.m_nS; sSQL.Format(_T("insert into AecCrossR ([结构长度L],[结构长度S],[公称直径L],[公称直径S],[外径系列]) values (%d,%d,%d,%d,'%s')"), (int)(dL + 0.5), (int)(dB + 0.5), (int)(dDN1 + 0.5), (int)(dDN2 + 0.5), sSNo); pDb->ExecuteSQL(sSQL); dL /= dUnit; dB /= dUnit; return TRUE; } else { return FALSE; } } } else { dB = _ttof(arValues.GetAt(0)); dL = _ttof(arValues.GetAt(1)); dL /= dUnit; dB /= dUnit; return TRUE; } } else { dL = _ttof(arValues.GetAt(0)); dB = _ttof(arValues.GetAt(1)); dL /= dUnit; dB /= dUnit; return TRUE; } } return FALSE; } BOOL TDbPipeSupport::QueryFlangSpecs(CUIISQLiteServer *pDb , double dDN , WPipe::Trade &eTrade , CString &sStd , CString &sTyp , LPCTSTR pszProName , LPCTSTR pszPreSpecName) { return CoreTools::QueryFlangSpecs(pDb , dDN , eTrade , sStd , sTyp , pszPreSpecName , pszPreSpecName); } BOOL TDbPipeSupport::QueryFlangData(CUIISQLiteServer* pDb , double dDN , double dPre , double& dWD , double& dWh , double& dThk , double& dN , LPCTSTR pszProName , LPCTSTR pszPreSpecName , LPCTSTR pszDNo ) { return CoreTools::QueryFlangData(pDb , dDN , dPre , dWD , dWh , dThk , dN , pszProName , pszPreSpecName , pszDNo); } BOOL TDbPipeSupport::QueryGasketSpec(CUIISQLiteServer* pDb, WPipe::Trade& eTrade,double dDN, double dPre, LPCTSTR pszProName, LPCTSTR pszPreSpecName) { CString sSQL, sTip; //行业 全局 AecDbObjXDataMap xInitMap; KTModelLayoutXData::ReadModelXData(KT_PIPEINIT, xInitMap); int nTrade = 4; xInitMap.GetAt(DOC_PIDTRADE, nTrade); //应用行业,石油 eTrade = (WPipe::Trade)nTrade; if (eTrade == WPipe::eCivial)//市政 不考虑等级 Z系列 暂 A { return TRUE; } if (pszProName != NULL && pszPreSpecName != NULL) { sSQL.Format(_T("select * from AecSpecGasket where [项目名称]='%s' and [等级名称]='%s' and [公称直径]=%d and [压力]>%.2f and [压力]<%.2f"), pszProName,pszPreSpecName,(int)(dDN+0.5),dPre-0.1,dPre+0.1); if (!pDb->IsSelEmpty(sSQL)) { return TRUE; } else { sTip.Format(_T("缺少项目名称=%s 等级名称=%s 公称直径=%d 压力=%.1f 的垫片等级选型设置!"),pszProName,pszPreSpecName, (int)(dDN + 0.5),dPre); AfxMessageBox(sTip); } } else { //AfxMessageBox(_T("查询垫片缺少项目名称,等级名称!")); } return FALSE; } BOOL TDbPipeSupport::QueryGasketData(CUIISQLiteServer* pDb,double dDN,double dPre,CStringArray& arGasketG, LPCTSTR pszProName, LPCTSTR pszPreSpecName) { double dUnit = MakeSureMMUnit(dDN); WPipe::Trade eTrade = WPipe::eCivial; if (!QueryGasketSpec(pDb, eTrade,dDN,dPre,pszProName,pszPreSpecName)) { return FALSE; } CString sSQL, sTemp; if (eTrade == WPipe::eCivial) //从垫片数据库中查 { sSQL.Format(_T("select [公称直径],[材质],[压力],[垫片厚度],[描述],[类别],[类型],[标准号] from AecSpecGasket \ where [公称直径]=%d and [压力]>%g and [压力]<%g"), (int)(dDN + 0.5), dPre - 0.1, dPre + 0.1); CUIIValueTable table; pDb->GetSelData(sSQL, table); CStringArray arValues; if (table.GetTableLogicSize() > 0) { arGasketG.RemoveAll(); table.GetValueRecord(0, arGasketG); CString sText; if (arGasketG.GetSize() >= 5) { sText.Format(_T("%.1f"), dDN); arGasketG.SetAt(0, sText); sText = arGasketG.GetAt(3); double dVal = dUnit * _ttof(sText); sText.Format(_T("%.1f"), dVal); arGasketG.SetAt(3, sText); } return TRUE; } else { sSQL.Format(_T("select [公称直径],[材质],[压力],[垫片厚度],[描述],[类别],[类型],[标准号] from AecSpecGasket \ where [公称直径]=%d"), (int)(dDN + 0.5)); pDb->GetSelData(sSQL, table); if (table.GetTableLogicSize() > 0) { arGasketG.RemoveAll(); table.GetValueRecord(0, arGasketG); CString sText; if (arGasketG.GetSize() >= 5) { sText.Format(_T("%.1f"), dDN); arGasketG.SetAt(0, sText); sText = arGasketG.GetAt(3); double dVal = dUnit * _ttof(sText); sText.Format(_T("%.1f"), dVal); arGasketG.SetAt(3, sText); } return TRUE; } else { acutPrintf(_T("\n没有查到公称直径:%d 压力%g 的垫片参数!"), (int)dDN, dPre); } } } else { if (pszProName != NULL && pszPreSpecName != NULL) { sSQL.Format(_T("select [公称直径],[材质],[压力],[垫片厚度],[描述],[类别],[类型],[标准号] from AecSpecGasket where [项目名称]='%s' and [等级名称]='%s' and [公称直径]=%d and [压力]>%.2f and [压力]<%.2f"), pszProName, pszPreSpecName, (int)(dDN + 0.5), dPre - 0.1, dPre + 0.1); CUIIValueTable table; pDb->GetSelData(sSQL, table); CStringArray arValues; if (table.GetTableLogicSize() > 0) { arGasketG.RemoveAll(); table.GetValueRecord(0, arGasketG); CString sText; if (arGasketG.GetSize() >= 5) { sText.Format(_T("%.1f"), dDN); arGasketG.SetAt(0, sText); sText = arGasketG.GetAt(3); double dVal = dUnit * _ttof(sText); sText.Format(_T("%.1f"), dVal); arGasketG.SetAt(3, sText); } return TRUE; } } } return FALSE; } BOOL TDbPipeSupport::IsPointHitWPipe(ads_point ptRes,AcDbObjectId& id) { ads_point pt[4]; ads_point_set(ptRes,pt[0]); pt[0][X] += 10.0; pt[0][Y] += 10.0;//?? pt[1][X] = pt[0][X] - 20.0; pt[1][Y] = pt[0][Y]; pt[2][X] = pt[1][X]; pt[2][Y] = pt[1][Y] - 20.0; pt[3][X] = pt[0][X]; pt[3][Y] = pt[2][Y]; TCHAR szBuf[64]; memset(szBuf,0,sizeof(szBuf)); _tcscpy(szBuf, _T("AEC_EWPIPE")); struct resbuf rb; rb.restype = 0; rb.resval.rstring = szBuf; rb.rbnext = NULL; struct resbuf* pointlist = NULL; pointlist = acutBuildList(RTPOINT, pt[0], RTPOINT, pt[1], RTPOINT, pt[2], RTPOINT, pt[3], 0); ads_name ss; acedSSGet(_T("CP"),pointlist,NULL,&rb,ss); acutRelRb(pointlist); Adesk::Int32 lLen = 0; acedSSLength(ss,&lLen); if (lLen > 0) { ads_name ent; acedSSName(ss,0,ent); acdbGetObjectId(id,ent); acedSSFree(ss); return TRUE; } acedSSFree(ss); return FALSE; } BOOL TDbPipeSupport::InsertFlangeAndGasketData(CUIISQLiteServer *pDb, const int &Dn,CString& sODNo,CString& sPro,CString& sLevel) { CAcModuleResourceOverride myResources; CFlangeDlg flgDlg; flgDlg.SetAdoDb(pDb); flgDlg.SetDN(Dn); flgDlg.SetPressure(1.6); flgDlg.SetLevel(sODNo,sPro, sLevel); if (flgDlg.DoModal() == IDOK) { double d(.0); CStringArray ar; BOOL bRel = QueryFlangData(pDb, Dn, 1.6, d, d, d, d,sPro,sLevel); if (!bRel) return bRel; return QueryGasketData(pDb, Dn, 1.6, ar,sPro,sLevel); } return FALSE; } BOOL TDbPipeSupport::QueryLateralData(CUIISQLiteServer* pDb,double dDn,double& dE,double& dM,double& dB,double& dInsL,double& dInfD,int nType,LPCTSTR pszODSn,LPCTSTR pszProName,LPCTSTR pszPreSpecName) { double dUnit = MakeSureMMUnit(dDn); CString sSQL, sSNo = pszODSn, sTip; CStringArray arValues; WPipe::Trade eTrade = WPipe::eCivial; if (!QueryFitSpecsNo(pDb, dDn, dDn, sSNo, eTrade, _T("斜三通"), _T("A"),pszProName, pszPreSpecName)) { return FALSE; } if (eTrade == WPipe::eCivial)//市政 { if (nType == 0) { sSQL.Format(_T("select [结构长度E],[结构长度M],[结构长度B] from aeclateral where [公称直径]=%d "),(int)(dDn+0.5)); } else if (nType == 1) { sSQL.Format(_T("select [结构长度E],[结构长度M],[结构长度B],[承插长度],[接口直径] from aeclaterals where [公称直径]=%d"),(int)(dDn+0.5)); } else if(nType == 2) { sSQL.Format(_T("select [结构长度E],[结构长度M],[结构长度B],[螺纹长度],[接口直径] from aeclateralt where [公称直径]=%d"),(int)(dDn+0.5)); } } else { if (nType == 0) { sSQL.Format(_T("select [结构长度E],[结构长度M],[结构长度B] from aeclateral where [公称直径]=%d and 外径系列='%s'"), (int)(dDn + 0.5),sSNo); } else if (nType == 1) { sSQL.Format(_T("select [结构长度E],[结构长度M],[结构长度B],[承插长度],[接口直径] from aeclaterals where [公称直径]=%d and 外径系列='%s'"), (int)(dDn + 0.5), sSNo); } else if (nType == 2) { sSQL.Format(_T("select [结构长度E],[结构长度M],[结构长度B],[螺纹长度],[接口直径] from aeclateralt where [公称直径]=%d and 外径系列='%s'"), (int)(dDn + 0.5), sSNo); } } CStringArray arVals; pDb->GetSelData(sSQL,arVals); if (arVals.GetSize() >= 3) { dE = _ttof(arVals.GetAt(0)); dM = _ttof(arVals.GetAt(1)); dB = _ttof(arVals.GetAt(2)); if (arVals.GetSize() >= 5) { dInsL = _ttof(arVals.GetAt(3)); dInfD = _ttof(arVals.GetAt(4)); } dE /= dUnit; dM /= dUnit; dB /= dUnit; dInsL /= dUnit; dInfD /= dUnit; return TRUE; } return FALSE; } BOOL TDbPipeSupport::QueryWYeData(CUIISQLiteServer* pDb,double dDn,double& dM,double& dB,double& dInsL,double& dInfD,int nType,LPCTSTR pszODSn,LPCTSTR pszProName,LPCTSTR pszPreSpecName) { double dUnit = MakeSureMMUnit(dDn); CString sSQL, sSNo = _T("A"), sTip; CStringArray arValues; WPipe::Trade eTrade = WPipe::eCivial; if (!QueryFitSpecsNo(pDb, dDn, dDn, sSNo, eTrade, _T("Y三通"), _T("A"),pszProName, pszPreSpecName)) { return FALSE; } if (eTrade == WPipe::eCivial) { if (nType == 0) { sSQL.Format(_T("select [结构长度M],[结构长度B] from AecWye where [公称直径]=%d"),(int)(dDn+0.5)); } else if (nType == 1) { sSQL.Format(_T("select [结构长度M],[结构长度B],[承插长度],[接口直径] from AecWyes where [公称直径]=%d"),(int)(dDn + 0.5)); } else if(nType == 2) { sSQL.Format(_T("select [结构长度M],[结构长度B],[螺纹长度],[接口直径] from AecWyet where [公称直径]=%d"),(int)(dDn + 0.5)); } } else { if (nType == 0) { sSQL.Format(_T("select [结构长度M],[结构长度B] from AecWye where [公称直径]=%d and 外径系列='%s'"), (int)(dDn + 0.5),sSNo); } else if (nType == 1) { sSQL.Format(_T("select [结构长度M],[结构长度B],[承插长度],[接口直径] from AecWyes where [公称直径]=%d and 外径系列='%s'"), (int)(dDn + 0.5), sSNo); } else if (nType == 2) { sSQL.Format(_T("select [结构长度M],[结构长度B],[螺纹长度],[接口直径] from AecWyet where [公称直径]=%d and 外径系列='%s'"), (int)(dDn + 0.5), sSNo); } } CStringArray arVals; pDb->GetSelData(sSQL,arVals); if (arVals.GetSize() >= 2) { dM = _ttof(arVals.GetAt(0)); dB = _ttof(arVals.GetAt(1)); if (arVals.GetSize() >= 4) { dInsL = _ttof(arVals.GetAt(2)); dInfD = _ttof(arVals.GetAt(3)); } dM /= dUnit; dB /= dUnit; dInsL /= dUnit; dInfD /= dUnit; return TRUE; } return FALSE; } BOOL TDbPipeSupport::QueryCapData(CUIISQLiteServer* pDb,double dDn,double& dL,LPCTSTR pszSDN ) { MakeSureMMUnit(dDn); dL = dDn * 0.3;//经验值 CString sSQL; sSQL.Format(_T("select [结构长度] from [AecCapData] where [公称直径]=%d and [外径系列] ='%s'"), (int)(dDn+0.5),pszSDN); CStringArray arVals; pDb->GetSelData(sSQL, arVals); if (arVals.GetSize() > 0) { dL = _ttof(arVals.GetAt(0)); } return TRUE; } BOOL TDbPipeSupport::QueryReduceData(CUIISQLiteServer* pDb, int nCntype, double dDn, double dTDN, double& dL, AecDbObjXDataMap *pXData, LPCTSTR pszSDN /*= _T("A")*/ ) { CString sSQL,sTbl; CStringArray arVals; if (nCntype == 0) { sTbl = _T("AecReduceData"); if (IsPlasticsMat(pszSDN)) sTbl = _T("AecReduceSData"); } else if (nCntype == 1) { sTbl = _T("AecReduceSData"); } else if (nCntype == 2) { sTbl = _T("AecReduceTData"); } else { sTbl = _T("AecReduceData"); } //如果是偏心 AcGeVector3d vtOff(0,0,0); pXData->GetAt(KEY_OFFSET,vtOff); if (!vtOff.isZeroLength()) { if (_tcscmp(pszSDN, _T("S") ) == 0) { sTbl = _T("AecEccReduceData"); } } bool bLS = false; if (nCntype == 3 || nCntype == 5) bLS = true; if (sTbl.CompareNoCase(_T("AecReduceData")) == 0 || sTbl.CompareNoCase(_T("AecEccReduceData")) == 0) { sSQL.Format(_T("select [长度],[H],[H2],[H1] from %s where [外径系列] = '%s' and [公称直径L]=%d and [公称直径S]=%d and [长度] > 0"), sTbl, pszSDN,__max((int)(dDn+0.5), (int)(dTDN+0.5)),__min((int)(dDn + 0.5), (int)(dTDN + 0.5))); pDb->GetSelData(sSQL, arVals); if (arVals.IsEmpty()) { bLS = false; sSQL.Format(_T("select [长度],[H],[H1],[H2] from %s where [公称直径L]=%d and [公称直径S]=%d and [长度] > 0"), sTbl, (int)(dTDN + 0.5), (int)(dDn + 0.5)); pDb->GetSelData(sSQL, arVals); } } else { sSQL.Format(_T("select [长度] from %s where [外径系列] = '%s' and [公称直径L]=%d and [公称直径S]=%d and [长度] > 0"), sTbl, pszSDN, __max((int)(dDn + 0.5), (int)(dTDN + 0.5)), __min((int)(dDn + 0.5), (int)(dTDN + 0.5))); pDb->GetSelData(sSQL, arVals); if (arVals.IsEmpty()) { bLS = false; sSQL.Format(_T("select [长度] from %s where [公称直径L]=%d and [公称直径S]=%d and [长度] > 0"), sTbl, (int)(dTDN + 0.5), (int)(dDn + 0.5)); pDb->GetSelData(sSQL, arVals); } } if (!arVals.IsEmpty()) { dL = _ttof(arVals.GetAt(0)); if (arVals.GetSize() >= 4) { if (bLS) { pXData->SetAt(_T("H"), _ttof(arVals.GetAt(1))); pXData->SetAt(_T("H2"), _ttof(arVals.GetAt(2))); pXData->SetAt(_T("H1"), _ttof(arVals.GetAt(3))); dL += 2.0 * _ttof(arVals.GetAt(1)); dL += _ttof(arVals.GetAt(2)); dL += _ttof(arVals.GetAt(3)); } else { pXData->SetAt(_T("H"), _ttof(arVals.GetAt(1))); pXData->SetAt(_T("H1"), _ttof(arVals.GetAt(2))); pXData->SetAt(_T("H2"), _ttof(arVals.GetAt(3))); //焊接不需要 //dL += 2.0 * _ttof(arVals.GetAt(1)); //dL += _ttof(arVals.GetAt(2)); //dL += _ttof(arVals.GetAt(3)); } } return TRUE; } return FALSE; } BOOL TDbPipeSupport::QueryFlxJoinData(CUIISQLiteServer *pDb, double dDN, double dPre, AecDbObjXDataMap* pXDataMap) { CString sSQL; sSQL.Format(_T("select [尺寸A],[尺寸B],[尺寸C],[型号],[标准号] from AecFlxJoin where [公称直径]=%d and [压力]>%.3f and [压力]<%.3f"), (int)(dDN + 0.5), dPre - 0.01, dPre + 0.01); CStringArray arVals; pDb->GetSelData(sSQL, arVals); if (arVals.GetSize() >= 5) { pXDataMap->SetAt(KEY_A, _ttof(arVals.GetAt(0))); pXDataMap->SetAt(KEY_B, _ttof(arVals.GetAt(1))); pXDataMap->SetAt(KEY_C, _ttof(arVals.GetAt(2))); pXDataMap->SetAt(KEY_TYPE, arVals.GetAt(3)); pXDataMap->SetAt(PIPE_STDNO, arVals.GetAt(4)); pXDataMap->SetAt(PIPE_DN, dDN); return TRUE; } return FALSE; } bool TDbPipeSupport::IsPlasticsMat(LPCTSTR pszODNO) { const CString sPlastic = _T("UPVC CPVC PVC-C PP-H (PE) HDPE"); CStringArray arNos; CoreTools::SplitStrintToArray(sPlastic, arNos, _T(' ')); for (int i = 0; i < arNos.GetSize(); i++) { if (arNos.GetAt(i).CompareNoCase(pszODNO) == 0) { return true; } } return false; } BOOL TDbPipeSupport::QueryInfFDFL(CUIISQLiteServer* pDb,int nObjectKind,int nCntype,double dDN,double& dFD,double& dFL, LPCTSTR pszODNo,LPCTSTR pszProName, LPCTSTR pszPreSpecName) { double dUnit = MakeSureMMUnit(dDN); CString sTablename = _T(""),sFitName = _T(""), sSNo = pszODNo; EFittingType eKind = (EFittingType)nObjectKind; switch(eKind) { case eElbow: { if (nCntype == 1) { sTablename = _T("AecElbowSData"); sFitName = _T("承插弯头"); } else if(nCntype == 2) { sTablename = _T("AecElbowTData"); sFitName = _T("螺纹弯头"); } break; } case eReduce: { if (nCntype == 1) { sTablename = _T("AecReduceSData"); sFitName = _T("承插变径"); } else if(nCntype == 2) { sTablename = _T("AecReduceTData"); sFitName = _T("螺纹变径"); } break; } case eCross: { if (nCntype == 1) { sTablename = _T("AecCrossS"); sFitName = _T("承插四通"); } else if(nCntype == 2) { sTablename = _T("AecCrossT"); sFitName = _T("螺纹四通"); } break; } case eTee: { if (nCntype == 1) { sTablename = _T("AecTeeSData"); sFitName = _T("承插三通"); } else if(nCntype == 2) { sTablename = _T("AecTeeTData"); sFitName = _T("螺纹三通"); } break; } case eLateral: { if (nCntype == 1) { sTablename = _T("AecLateralS"); sFitName = _T("承插斜三通"); } else if(nCntype == 2) { sTablename = _T("AecLateralT"); sFitName = _T("螺纹斜三通"); } break; } case eWye: { if (nCntype == 1) { sTablename = _T("AecWyes"); sFitName = _T("承插Y三通"); } else if(nCntype == 2) { sTablename = _T("AecWyeT"); sFitName = _T("螺纹Y三通"); } break; } default: break; } if (!sTablename.IsEmpty()) { //等级系列 查询系列 WPipe::Trade eTrade = WPipe::eCivial; if (!QueryFitSpecsNo(pDb, dDN, dDN, sSNo, eTrade, sFitName, _T("A"),pszProName, pszPreSpecName)) { return FALSE; } CString sSQL; CStringArray arVals; if (eTrade == WPipe::eCivial) { if (eKind == eReduce) { if (nCntype == 1) //cheng cha { sSQL.Format(_T("select [接口直径L],[承插长度L] from [%s] where [公称直径L]=%d and [外径系列]='%s'"), sTablename, (int)(dDN + 0.5),pszODNo); } else if (nCntype == 2)//luo wen { sSQL.Format(_T("select [接口直径L],[螺纹长度L] from [%s] where [公称直径L]=%d and [外径系列]='%s'" ), sTablename, (int)(dDN + 0.5),pszODNo); } pDb->GetSelData(sSQL, arVals); if (arVals.GetSize() == 0) { if (nCntype == 1) //cheng cha { sSQL.Format(_T("select [接口直径S],[承插长度S] from [%s] where [公称直径S]=%d and [外径系列]='%s'"), sTablename, (int)(dDN + 0.5),pszODNo); } else if (nCntype == 2)//luo wen { sSQL.Format(_T("select [接口直径S],[螺纹长度S] from [%s] where [公称直径S]=%d and [外径系列]='%s'"), sTablename, (int)(dDN + 0.5),pszODNo); } pDb->GetSelData(sSQL, arVals); } } else { if (nCntype == 1) //cheng cha { sSQL.Format(_T("select [接口直径],[承插长度] from [%s] where [公称直径]=%d and [外径系列]='%s'"), sTablename, (int)(dDN + 0.5), pszODNo); } else if (nCntype == 2)//luo wen { sSQL.Format(_T("select [接口直径],[螺纹长度] from [%s] where [公称直径]=%d and [外径系列]='%s'"), sTablename, (int)(dDN + 0.5), pszODNo); } pDb->GetSelData(sSQL, arVals); } } else { if (eKind == eReduce) { if (nCntype == 1) //cheng cha { sSQL.Format(_T("select [接口直径L],[承插长度L] from [%s] where [公称直径L]=%d and [外径系列]='%s'"), sTablename, (int)(dDN + 0.5),sSNo); } else if (nCntype == 2)//luo wen { sSQL.Format(_T("select [接口直径L],[螺纹长度L] from [%s] where [公称直径L]=%d and [外径系列]='%s'"), sTablename, (int)(dDN + 0.5), sSNo); } pDb->GetSelData(sSQL, arVals); if (arVals.GetSize() == 0) { if (nCntype == 1) //cheng cha { sSQL.Format(_T("select [接口直径S],[承插长度S] from [%s] where [公称直径S]=%d and [外径系列]='%s'"), sTablename, (int)(dDN + 0.5), sSNo); } else if (nCntype == 2)//luo wen { sSQL.Format(_T("select [接口直径S],[螺纹长度S] from [%s] where [公称直径S]=%d and [外径系列]='%s'"), sTablename, (int)(dDN + 0.5), sSNo); } pDb->GetSelData(sSQL, arVals); } } else { if (nCntype == 1) //cheng cha { sSQL.Format(_T("select [接口直径],[承插长度] from [%s] where [公称直径]=%d and [外径系列]='%s'"), sTablename, (int)(dDN + 0.5), sSNo); } else if (nCntype == 2)//luo wen { sSQL.Format(_T("select [接口直径],[螺纹长度] from [%s] where [公称直径]=%d and [外径系列]='%s'"), sTablename, (int)(dDN + 0.5), sSNo); } pDb->GetSelData(sSQL, arVals); } } if (arVals.GetSize() >= 2) { dFD = _ttof(arVals.GetAt(0)); dFL = _ttof(arVals.GetAt(1)); dFD /= dUnit; dFL /= dUnit; return TRUE; } else { acutPrintf(_T("\n没有查到管件结构参数!")); acutPrintf(_T("\n%s"),sSQL); } } else { if (nCntype == 3 || nCntype == 5)//法兰管 { //水池暂时取压力小于2 double dThk = 0.0,dN = 0.0; dDN /= dUnit; return QueryFlangData(pDb,dDN,1.0,dFD,dFL,dThk,dN); } } return FALSE; } //设置法兰垫片 BOOL TDbPipeSupport::SetGasketData(CUIISQLiteServer *pDb, int iInf,double dDn, double dPre, LPCTSTR pszProj, LPCTSTR pszLevel, AecDbObjXDataMap *pXDataMap) { BOOL bSet = FALSE; CStringArray arGasket; if (QueryGasketData(pDb, dDn, dPre, arGasket, pszProj, pszLevel)) { //公称直径],[材质],[压力],[垫片厚度],[描述] CString sGasketInf,sKey; for (int i = 0;i < arGasket.GetSize();i++) { sGasketInf += arGasket.GetAt(i); sGasketInf += _T("#"); } sGasketInf.TrimRight(_T('#')); sKey.Format(_T("%s%d"), PIPE_GASKETINF,iInf); pXDataMap->SetAt(sKey, sGasketInf); bSet = TRUE; } arGasket.RemoveAll(); return bSet; } BOOL TDbPipeSupport::QueryFBoltData(CUIISQLiteServer *pDb, double dDn, double dPre, LPCTSTR pszProj, LPCTSTR pszLevel, CStringArray &arBoltData) { CString sSQL; //类型 材质 标准号 描述 sSQL.Format(_T("select [类型],[材质],[标准号],[描述] from AecSpecBolt where [项目名称]='%s' and [等级名称]='%s' and [类别]='螺栓' and [公称直径]=%d and [压力]>%.2f and [压力]<%.2f"), pszProj,pszLevel,(int)(dDn+0.5),dPre-0.1,dPre + 0.1); CUIIValueTable table; pDb->GetSelData(sSQL, table); if (table.GetTableLogicSize() > 0) { table.GetValueRecord(0, arBoltData); return TRUE; } //类型 材质 标准号 描述 sSQL.Format(_T("select [类型],[材质],[标准号],[描述] from AecSpecBolt where [项目名称]='%s' and [等级名称]='%s' and [类别]='螺母' and [公称直径]=%d and [压力]>%.2f and [压力]<%.2f"), pszProj, pszLevel, (int)(dDn + 0.5), dPre - 0.1, dPre + 0.1); CUIIValueTable table2; pDb->GetSelData(sSQL, table2); if (table2.GetTableLogicSize() > 0) { table2.GetValueRecord(0, arBoltData); return TRUE; } return FALSE; } BOOL TDbPipeSupport::QueryBoltData(CUIISQLiteServer *pDb, double dDn, double dPre, CStringArray &arBoltData) { CString sSQL; //螺栓规格 螺栓长度 螺栓数量 sSQL.Format(_T("select [螺栓规格],[螺栓长度],[螺栓数量] from AecBoltData where [公称直径]=%d and [压力]>%.2f and [压力]<%.2f"), (int)(dDn+0.5),dPre - 0.1,dPre + 0.1); return pDb->GetSelData(sSQL, arBoltData); } //设置法兰螺栓 BOOL TDbPipeSupport::SetBoltData(CUIISQLiteServer *pDb, int iInf,double dDn, double dPre, LPCTSTR pszProj, LPCTSTR pszLevel, AecDbObjXDataMap *pXDataMap) { //螺栓信息 BOOL bSet = FALSE; CStringArray arBoltData; //[类型],[材质],[标准号],[描述] if (QueryFBoltData(pDb, dDn, dPre, pszProj, pszLevel, arBoltData)) { //螺栓规格 螺栓长度 数量 if (QueryBoltData(pDb,dDn,dPre,arBoltData)) { CString sKey, sBoltData; for (int i = 0;i < arBoltData.GetSize();i++) { sBoltData += arBoltData.GetAt(i); sBoltData += _T("#"); } sBoltData.TrimRight(_T("#")); sKey.Format(_T("%s%d"), PIPE_BOLTINF, iInf); pXDataMap->SetAt(sKey, sBoltData); bSet = TRUE; } } return FALSE; } BOOL TDbPipeSupport::QueryPVCReducerData(CUIISQLiteServer* pDb, double dDN, double dEDN, AecDbObjXDataMap* pXDataMap,LPCTSTR pszSDNo) { double dUnit = MakeSureMMUnit(dDN); int nConnectType = 0;//焊接0 承插1 螺纹2 法兰管3 pXDataMap->GetAt(PIPE_CONNECT, nConnectType); CString sSQL; if (nConnectType <= 1) { sSQL.Format(_T("select [长度],[承插长度L],[承插长度S],[接口直径L],[接口直径S] from [AecReduceSData] where [公称直径L]=%d and [公称直径S]=%d and [外径系列]='%s'"), (int)(dDN + 0.5),(int)(dEDN + 0.5), pszSDNo); } else if (nConnectType == 2) { sSQL.Format(_T("select [长度],[螺纹长度L],[螺纹长度S],[接口直径L],[接口直径S] from [AecReduceTData] where [公称直径L]=%d and [公称直径S]=%d and [外径系列]='%s'"), (int)(dDN + 0.5), (int)(dEDN + 0.5), pszSDNo); } CStringArray arVals; pDb->GetSelData(sSQL, arVals); if (arVals.GetSize() >= 4) { pXDataMap->SetAt(KEY_Length,_ttof(arVals.GetAt(0)) / dUnit); pXDataMap->SetAt(PIPE_INTERFACEL, _ttof(arVals.GetAt(1)) / dUnit); pXDataMap->SetAt(PIPE_INTERFACEL2, _ttof(arVals.GetAt(2)) / dUnit); pXDataMap->SetAt(PIPE_INTERFACED, _ttof(arVals.GetAt(3)) / dUnit); pXDataMap->SetAt(PIPE_INTERFACED2, _ttof(arVals.GetAt(4)) / dUnit); return TRUE; } return FALSE; } BOOL TDbPipeSupport::QueryPVCElbow(CUIISQLiteServer* pDb, double dDN, AecDbObjXDataMap* pXDataMap,LPCTSTR pszSDNo) { double dUnit = MakeSureMMUnit(dDN); int nConnectType = 0;//焊接0 承插1 螺纹2 法兰管3 pXDataMap->GetAt(PIPE_CONNECT, nConnectType); CString sSQL; if (nConnectType <= 1) { sSQL.Format(_T("select [结构长度],[承插长度],[接口直径] from [AecElbowSData] where [公称直径]=%d and [外径系列]='%s'"), (int)(dDN + 0.5),pszSDNo); } else if (nConnectType == 2) { sSQL.Format(_T("select [结构长度],[螺纹长度],[接口直径] from [AecElbowTData] where [公称直径]=%d and [外径系列]='%s'"), (int)(dDN + 0.5), pszSDNo); } CStringArray arVals; pDb->GetSelData(sSQL, arVals); if (arVals.GetSize() >= 3) { pXDataMap->SetAt(KEY_L, _ttof(arVals.GetAt(0) ) / dUnit); pXDataMap->SetAt(PIPE_INTERFACEL, _ttof(arVals.GetAt(1)) / dUnit); pXDataMap->SetAt(PIPE_INTERFACED, _ttof(arVals.GetAt(2)) / dUnit); return TRUE; } return FALSE; } BOOL TDbPipeSupport::QueryPVCTeeData(CUIISQLiteServer* pDb, double dDn1, double dDn2, AecDbObjXDataMap* pXDataMap,LPCTSTR pszSDNo) { double dUnit = MakeSureMMUnit(dDn1); double dMaxD = __max(dDn1, dDn2); double dMinD = __min(dDn1, dDn2); int nConnectType = 0;//焊接0 承插1 螺纹2 法兰管3 pXDataMap->GetAt(PIPE_CONNECT, nConnectType); CString sSQL; if (nConnectType <= 1) { sSQL.Format(_T("select [承插长度],[接口直径] from [AecTeeSData] where [公称直径]=%d and [外径系列]='%s'"), (int)(dMaxD + 0.5), pszSDNo); } else if (nConnectType == 2) { sSQL.Format(_T("select [螺纹长度],[接口直径] from [AecTeeTData] where [公称直径]=%d and [外径系列]='%s'"), (int)(dMaxD + 0.5), pszSDNo); } CStringArray arVals; pDb->GetSelData(sSQL, arVals); if (arVals.GetSize() >= 2) { pXDataMap->SetAt(PIPE_INTERFACEL, _ttof(arVals.GetAt(0)) / dUnit); pXDataMap->SetAt(PIPE_INTERFACED, _ttof(arVals.GetAt(1)) / dUnit); } if (nConnectType <= 1) { sSQL.Format(_T("select [承插长度],[接口直径] from [AecTeeSData] where [公称直径]=%d and [外径系列]='%s'"), (int)(dMinD + 0.5), pszSDNo); } else if (nConnectType == 2) { sSQL.Format(_T("select [螺纹长度],[接口直径] from [AecTeeTData] where [公称直径]=%d and [外径系列]='%s'"), (int)(dMinD + 0.5), pszSDNo); } arVals.RemoveAll(); pDb->GetSelData(sSQL, arVals); if (arVals.GetSize() >= 2) { pXDataMap->SetAt(PIPE_INTERFACEL2, _ttof(arVals.GetAt(0)) / dUnit); pXDataMap->SetAt(PIPE_INTERFACED2, _ttof(arVals.GetAt(1)) / dUnit); } return FALSE; } BOOL TDbPipeSupport::QueryPVCCrossData(CUIISQLiteServer* pDb, double dDn1, double dDn2, AecDbObjXDataMap* pXDataMap, LPCTSTR pszSDNo) { double dUnit = MakeSureMMUnit(dDn1); double dMaxD = __max(dDn1, dDn2); double dMinD = __min(dDn1, dDn2); int nConnectType = 0;//焊接0 承插1 螺纹2 法兰管3 pXDataMap->GetAt(PIPE_CONNECT, nConnectType); CString sSQL; if (nConnectType <= 1) { sSQL.Format(_T("select [结构长度],[承插长度],[接口直径] from [AecCrossS] where [公称直径]=%d and [外径系列]='%s'"), (int)(dMaxD + 0.5), pszSDNo); } else if (nConnectType == 2) { sSQL.Format(_T("select [结构长度],[螺纹长度],[接口直径] from [AecCrossT] where [公称直径]=%d and [外径系列]='%s'"), (int)(dMaxD + 0.5), pszSDNo); } CStringArray arVals; pDb->GetSelData(sSQL, arVals); if (arVals.GetSize() >= 2) { pXDataMap->SetAt(PIPE_INTERFACEL, _ttof(arVals.GetAt(1)) / dUnit); pXDataMap->SetAt(PIPE_INTERFACED, _ttof(arVals.GetAt(2)) / dUnit); } if (nConnectType <= 1) { sSQL.Format(_T("select [承插长度],[接口直径] from [AecCrossS] where [公称直径]=%d and [外径系列]='%s'"), (int)(dMinD + 0.5), pszSDNo); } else if (nConnectType == 2) { sSQL.Format(_T("select [螺纹长度],[接口直径] from [AecCrossT] where [公称直径]=%d and [外径系列]='%s'"), (int)(dMinD + 0.5), pszSDNo); } arVals.RemoveAll(); pDb->GetSelData(sSQL, arVals); if (arVals.GetSize() >= 2) { pXDataMap->SetAt(PIPE_INTERFACEL2, _ttof(arVals.GetAt(0)) / dUnit); pXDataMap->SetAt(PIPE_INTERFACED2, _ttof(arVals.GetAt(1)) / dUnit); } return FALSE; } BOOL TDbPipeSupport::QueryPVCSpecFit(CUIISQLiteServer* pDb, double dDN, LPCTSTR pszSDNo,EFittingType eType, AecDbObjXDataMap* pXDFit) { double dUnit = MakeSureMMUnit(dDN); CString sSQL; CStringArray arVals; switch (eType) { case eThrough: { sSQL.Format(_T("select [结构长度],D from [AecThrough] where [公称直径]=%d and [外径系列] ='%s'"), (int)(dDN + 0.5), pszSDNo); pDb->GetSelData(sSQL, arVals); if (arVals.GetSize() >= 2) { pXDFit->SetAt(KEY_L, _ttof(arVals.GetAt(0))/ dUnit); pXDFit->SetAt(KEY_WD, _ttof(arVals.GetAt(1)) / dUnit); } break; } case eUJoin: { sSQL.Format(_T("select [结构长度],D from [AecUJoin] where [公称直径]=%d and [外径系列] ='%s'"), (int)(dDN + 0.5), pszSDNo); pDb->GetSelData(sSQL, arVals); if (arVals.GetSize() >= 2) { pXDFit->SetAt(KEY_L, _ttof(arVals.GetAt(0)) / dUnit); pXDFit->SetAt(KEY_WD, _ttof(arVals.GetAt(1)) / dUnit); } break; } case eRJoin: { sSQL.Format(_T("select [结构长度],D from [AecRJoin] where [公称直径]=%d and [外径系列] ='%s'"), (int)(dDN + 0.5), pszSDNo); pDb->GetSelData(sSQL, arVals); if (arVals.GetSize() >= 2) { pXDFit->SetAt(KEY_L, _ttof(arVals.GetAt(0)) / dUnit); pXDFit->SetAt(KEY_WD, _ttof(arVals.GetAt(1)) / dUnit); } break; } case eOJoin: { sSQL.Format(_T("select [结构长度],[螺纹长度],[螺纹外径],[螺母S] from [AecOJoin] where [公称直径]=%d and [外径系列] ='%s'"), (int)(dDN + 0.5), pszSDNo); pDb->GetSelData(sSQL, arVals); if (arVals.GetSize() >= 4) { pXDFit->SetAt(KEY_L, _ttof(arVals.GetAt(0)) / dUnit); pXDFit->SetAt(KEY_D1, _ttof(arVals.GetAt(2)) / dUnit); pXDFit->SetAt(KEY_WD, _ttof(arVals.GetAt(3)) / dUnit); pXDFit->SetAt(PIPE_INTERFACEL, _ttof(arVals.GetAt(1)) / dUnit); pXDFit->SetAt(PIPE_INTERFACED, dDN / dUnit); } break; } case eIJoin: { sSQL.Format(_T("select [结构长度],[螺纹长度],[螺纹外径],[螺母S] from [AecIJoin] where [公称直径]=%d and [外径系列] ='%s'"), (int)(dDN + 0.5), pszSDNo); pDb->GetSelData(sSQL, arVals); if (arVals.GetSize() >= 4) { pXDFit->SetAt(KEY_L, _ttof(arVals.GetAt(0)) / dUnit); pXDFit->SetAt(PIPE_INTERFACEL, _ttof(arVals.GetAt(1)) / dUnit); pXDFit->SetAt(PIPE_INTERFACED, dDN / dUnit); pXDFit->SetAt(KEY_D1, _ttof(arVals.GetAt(2)) / dUnit); pXDFit->SetAt(KEY_WD, _ttof(arVals.GetAt(3)) / dUnit); } break; } default: break; } return !arVals.IsEmpty(); } int TDbPipeSupport::QueryRPorHP(CUIISQLiteServer *pDb, LPCTSTR pszLevel, double dDn, double ddn) { //[AecSpecBranch] ( //[等级] CHAR(256), //[主管] INTEGER, //[支管] INTEGER, //[结构] CHAR(17)); /* RT REDUCING TEE T EQUAL TEE H HALF COUPLING P BRANCH WELD RP REINFORCING PAD */ static LPCTSTR ssBs[] = { _T("RT"),_T("T"),_T("H"),_T("P"),_T("RP"),NULL }; CString sSQL, sB; sSQL.Format(_T("select [结构] from AecSpecBranch where [等级]='%s' and [主管]=%d and [支管]=%d"), pszLevel, (int)(dDn + 0.5), (int)(ddn + 0.5)); CStringArray arVals; pDb->GetSelData(sSQL, arVals); if (arVals.GetSize() >= 1) { sB = arVals.GetAt(0); for (int i = 0; i < 5; i++) { if (sB.CompareNoCase(ssBs[i]) == 0) { return i; } } } else//无等级查询 { sSQL.Format(_T("select [结构] from AecSpecBranch where [主管]=%d and [支管]=%d"), (int)(dDn + 0.5), (int)(ddn + 0.5)); pDb->GetSelData(sSQL, arVals); if (arVals.GetSize() >= 1) { sB = arVals.GetAt(0); for (int i = 0; i < 5; i++) { if (sB.CompareNoCase(ssBs[i]) == 0) { return i; } } } } return 0; } BOOL TDbPipeSupport::QueryRP(CUIISQLiteServer *pDb, double dDn, AecDbObjXDataMap *pXDataMap) { CString sSQL; sSQL.Format(_T("select [外径D2],[壁厚] from [AecRp] where [接管公称直径]=%d"), (int)(dDn + 0.5)); CStringArray arVals; pDb->GetSelData(sSQL, arVals); if (arVals.GetSize() >= 2) { pXDataMap->SetAt(PIPE_D, _ttof(arVals.GetAt(0))); pXDataMap->SetAt(PIPE_THICK, _ttof(arVals.GetAt(1))); return TRUE; } return FALSE; } BOOL TDbPipeSupport::QueryHP(CUIISQLiteServer *pDb, double dDn, AecDbObjXDataMap *pXDataMap) { CString sSQL; sSQL.Format(_T("select [外径],[长度] from [AecHp] where [接管公称直径]=%d"), (int)(dDn + 0.5)); CStringArray arVals; pDb->GetSelData(sSQL, arVals); if (arVals.GetSize() >= 2) { pXDataMap->SetAt(PIPE_D, _ttof(arVals.GetAt(0))); pXDataMap->SetAt(KEY_L, _ttof(arVals.GetAt(1))); return TRUE; } return FALSE; }