Files
envi-code/SourceCode/Code2026/PipelineSpecCmd/AecPipeSupport.cpp
T
2026-09-28 15:28:50 +08:00

2238 lines
56 KiB
C++

#include "StdAfx.h"
#include "aecPipeSupport.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)
{
//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;
//EL
//Ratio
dVal = 1.5;
pXDataMapSrc->GetAt(PIPE_RATIO,dVal);
pParamL->m_dRRatio = dVal;
pXDataMapSrc->GetAt(KEY_RadRatio, pParamL->m_nRadioOn);
pXDataMapSrc->GetAt(PIPE_ODSN, pParamL->szODSn);
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);
//??
dVal = 100;
pXDataMapSrc->GetAt(PIPE_TDN,dVal);
//??
dVal = 100.0;
pXDataMapSrc->GetAt(PIPE_TOD,dVal);
//??
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::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 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
{
sSNo = _T("A");
}
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("缺少项目名称=%s 等级名称=%s 的%s外径系列 DN%d 选型数据!\n请设置该项目和等级需要的%s选型数据!\n参见 KTSpeEdit\\等级生成器\\管件 设置"), pszProName, pszPreSpecName, pszFitName, (int)(dDn + 0.5), pszFitName);
//AfxMessageBox(sTip);
return FALSE;
}
return TRUE;
}
else
{
//没有项目 等级 设置,默认取A系列
//CString sSNo = _T("A");
}
}
return TRUE;
}
BOOL TDbPipeSupport::QueryFitSpecsNo(CUIISQLiteServer *pDb, double dDn1, double dDn2, CString& sSNo, WPipe::Trade& eTrade,LPCTSTR pszFitName,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
{
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("缺少项目名称=%s 等级名称=%s 的%s外径系列 DN%d : DN%d 选型数据!\n请设置该项目和等级需要的%s选型数据!\n参见 KTSpeEdit\\等级生成器\\管件 设置"), pszProName, pszPreSpecName, pszFitName,(int)(dDn1 + 0.5), (int)(dDn2 + 0.5), pszFitName);
//AfxMessageBox(sTip);
return FALSE;
}
return TRUE;
}
else
{
//没有项目 等级 设置,默认取A系列
//CString sSNo = _T("A");
}
}
return TRUE;
}
BOOL TDbPipeSupport::QueryElbowL(CUIISQLiteServer *pDb, double dDN, double &dL, double dRadio, int nCn, LPCTSTR pszLevel,AecDbObjXDataMap *pXData)
{
BOOL bOk = FALSE;
//附加替换的数据
double dAng = 0.0;
pXData->GetAt(PIPE_ELBOWANG, dAng); //角度-弧度
BOOL bRdioOn = FALSE;
pXData->GetAt(KEY_RadRatio, bRdioOn);
if (bRdioOn)
{
dRadio = 1.0;//最小
}
CString sSQL, sODNo = _T("B");
sSQL.Format(_T("select distinct [外径系列] from AecSpecFit where [类型]='弯头' and [等级名称]='%s'"), pszLevel);
pDb->GetSelData(sSQL, sODNo);
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);
}
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 = dDN * dRadio;
}
}
if (fabs(dAng - PI / 8.0) < 1.e-3)//22.5
{
if (TDbPipeSupport::Query225ElbowL(pDb, dDN, dL, dRadio, nCn, pszLevel, sODNo, pXData))
return TRUE;
}
else if (fabs(dAng - PI / 6.0) < 1.e-3)//30
{
if (TDbPipeSupport::Query30ElbowL(pDb, dDN, dL, dRadio, nCn, pszLevel, sODNo, pXData))
return TRUE;
}
else if (fabs(dAng - PI / 4.0) < 1.e-3)//45
{
if (TDbPipeSupport::Query45ElbowL(pDb, dDN, dL, dRadio, nCn, pszLevel, sODNo, pXData))
return TRUE;
}
else if (fabs(dAng - PI / 3.0) < 1.e-3)//60
{
if (TDbPipeSupport::Query60ElbowL(pDb, dDN, dL, dRadio, nCn, pszLevel, sODNo, pXData))
return 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::QueryRElbowL(CUIISQLiteServer *pDb, double dDNL, double dDNs, double &dL, double dRadio, int nCn, LPCTSTR pszLevel,AecDbObjXDataMap *pXData)
{
//附加替换的数据
double dAng = 0.0;
pXData->GetAt(PIPE_ELBOWANG, dAng); //角度-弧度
//继续按默认90度设置
BOOL bOk = FALSE;
CString sSQL, sODNo;
pXData->GetAt(PIPE_ODSN,sODNo);
if (pszLevel != NULL && _tcslen(pszLevel) > 0)//
{
sSQL.Format(_T("select distinct [外径系列] from AecSpecFit where [类型]='弯头' and [等级名称]='%s'"), pszLevel);
pDb->GetSelData(sSQL, sODNo);
}
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)));
if (sODNo.CompareNoCase(_T("S")) == 0 && nCn < 3 || nCn == 4)
{
//02s403焊接弯头结构长度为R0
dL = _ttof(arVals.GetAt(1));
}
}
}
bOk = TRUE;
}
return bOk;
}
BOOL TDbPipeSupport::QueryTeeData(CUIISQLiteServer* pDb,double dDn1,double dDn2,double& dL,double& dS,LPCTSTR pszProName,LPCTSTR pszPreSpecName)
{
double dUnit = MakeSureMMUnit(dDn1);
MakeSureMMUnit(dDn2);
CString sSQL, sSNo, sTip;
CStringArray arValues;
WPipe::Trade eTrade = WPipe::eCivial;
if (!QueryFitSpecsNo(pDb, dDn1, dDn2, sSNo, eTrade,_T("三通"), pszProName, pszPreSpecName))
{
return FALSE;
}
//A B 系列 Z系列位市政,无等级
//查询三通尺寸
sSQL.Format(_T("select [长度L],[长度S] 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() < 2 && eTrade == WPipe::eCivial) //再反查B
{
sSQL.Format(_T("select [长度L],[长度S] 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() < 2)
{
//不用提示,后续焊接或补强或半管处理
//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() >= 2) //有
{
dL = _ttof(arValues.GetAt(0)); //M 尺寸
dS = _ttof(arValues.GetAt(1)); //B 尺寸
dL /= dUnit;
dS /= dUnit;
return TRUE;
}
else
{
//不用提示,后续焊接或补强或半管处理
//sTip.Format(_T("缺少公称直径L=%d 公称直径S=%d 外径系列='%s' 的三通选型数据!\
//\n请完善三通的安装数据!\n参见KTSpeEdit\\安装数据\\三通数据!"),(int)(dDn1 + 0.5), (int)(dDn2 + 0.5), sSNo);
//AfxMessageBox(sTip);
return FALSE;
}
return FALSE;
}
BOOL TDbPipeSupport::QueryCrossData(CUIISQLiteServer* pDb,double dDN1,double dDN2,double& dL,double& dB, LPCTSTR pszProName, LPCTSTR pszPreSpecName)
{
double dUnit = MakeSureMMUnit(dDN1);
MakeSureMMUnit(dDN2);
CString sSQL, sSNo, sTip;
CStringArray arValues;
WPipe::Trade eTrade = WPipe::eCivial;
if (!QueryFitSpecsNo(pDb, dDN1, dDN2, sSNo, eTrade, _T("四通"), 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, pszProName, pszPreSpecName))
{
return TRUE;
}
sTip.Format(_T("\n数据库中缺少系列=%s公称直径=%dx%d类型的四通!"), sSNo, (int)(dDN1 + 0.5), (int)(dDN2 + 0.5));
AfxMessageBox(sTip);
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, pszProName, pszPreSpecName))
{
return TRUE;
}
sTip.Format(_T("\n数据库中缺少系列=%s公称直径=%dx%d类型的四通!"), sSNo, (int)(dDN1 + 0.5), (int)(dDN2 + 0.5));
AfxMessageBox(sTip);
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)
{
return CoreTools::QueryFlangData(pDb
, dDN
, dPre
, dWD
, dWh
, dThk
, dN
, pszProName
, pszPreSpecName);
}
BOOL TDbPipeSupport::QueryFlangData(CUIISQLiteServer *pDb, double dDn, double dPress, AecDbObjXDataMap * pXDataMap)
{
CString sSQL,sStd, sTyp;
sStd = _T("HG/T 20592-2009");
sTyp = _T("PL");
pXDataMap->GetAt(PIPE_FLANGP, sTyp);
pXDataMap->GetAt(PIPE_STDNO, sStd);
sSQL.Format(_T("select * from aecflangedata where \
[公称直径]=%d and [压力]>%.2f and [压力]<%.2f and [法兰类型]='%s' and [标准号]='%s' order by [法兰厚度]"),
(int)(dDn + 0.5), dPress - 0.01, dPress + 0.01, sTyp, sStd);
CStringArray arVals;
pDb->GetSelData(sSQL, arVals);
double dUnit = MakeSureMMUnit(dDn);
if (arVals.GetSize() < 8) return FALSE;
double dWD = _ttof(arVals[5]); // 法兰外经
double dWh = _ttof(arVals[7]); // 法兰厚度
double dThk = _ttof(arVals[6]);// 法兰高度
double dN = _ttof(arVals[8]); // 法兰颈
dWD /= dUnit;
dWh /= dUnit;
dThk /= dUnit;
dN /= dUnit;
pXDataMap->SetAt(PIPE_N, dN);
pXDataMap->SetAt(PIPE_WD, dWD); //发兰盘外径
pXDataMap->SetAt(PIPE_WTHICK, dWh); //大盘面厚度
pXDataMap->SetAt(PIPE_THICK, dWh);//总厚
return TRUE;
}
BOOL TDbPipeSupport::QueryFlangSpec(CUIISQLiteServer *pDb, double dDn, double dPress, LPCTSTR pszLevel, AecDbObjXDataMap *pXDataMap)
{
CString sSQL;
sSQL.Format(_T("select [标准号],[材质],[类型],[端面],[描述],[制造类型],[元件代码] from [AecSpecFlange] where [公称直径]=%d and [等级名称]='%s' and [压力]>=%.1f and [压力]<=%.1f"),
(int)(dDn + 0.5),pszLevel,dPress-0.01,dPress+0.01);
CUIIValueTable table;
pDb->GetSelData(sSQL, table);
if (table.GetTableLogicSize() > 0)
{
CStringArray arVals;
table.GetValueRecord(0, arVals);
pXDataMap->SetAt(PIPE_STDNO, arVals.GetAt(0));
pXDataMap->SetAt(PIPE_MATERIALFT, arVals.GetAt(1));
pXDataMap->SetAt(PIPE_FITTYPE, arVals.GetAt(2));
pXDataMap->SetAt(PIPE_FLANGF, arVals.GetAt(3));
pXDataMap->SetAt(PIPE_DESCR, arVals.GetAt(4));
pXDataMap->SetAt(KEY_PRODTP, arVals.GetAt(5));
pXDataMap->SetAt(KEY_ICODE, arVals.GetAt(6));
pXDataMap->SetAt(KEY_SCODE, _T("FLG"));
}
else
{
sSQL.Format(_T("select [标准号],[法兰类型],[端面] from [AecFlangeData] where [公称直径]=%d and [压力]>=%.1f and [压力]<=%.1f"),
(int)(dDn + 0.5), dPress - 0.01, dPress + 0.01);
table.RemoveAll();
pDb->GetSelData(sSQL, table);
if (table.GetTableLogicSize() > 0)
{
CStringArray arVals;
table.GetValueRecord(0, arVals);
pXDataMap->SetAt(PIPE_STDNO, arVals.GetAt(0));
pXDataMap->SetAt(PIPE_FITTYPE, arVals.GetAt(1));
pXDataMap->SetAt(PIPE_FLANGF, arVals.GetAt(2));
pXDataMap->SetAt(KEY_SCODE, _T("FLG"));
}
}
return TRUE;
}
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& sPro,CString& sLevel)
{
return FALSE;
}
BOOL TDbPipeSupport::QueryLateralData(CUIISQLiteServer* pDb,double dDn,double& dE,double& dM,double& dB,double& dInsL,double& dInfD,int nType,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("斜三通"), 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 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三通"), 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)
{
MakeSureMMUnit(dDn);
dL = dDn * 0.3;//经验值
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::QueryInfFDFL(CUIISQLiteServer* pDb,int nObjectKind,int nCntype,double dDN,double& dFD,double& dFL, LPCTSTR pszProName, LPCTSTR pszPreSpecName)
{
double dUnit = MakeSureMMUnit(dDN);
CString sTablename = _T(""),sFitName = _T(""), sSNo = _T("A");
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, 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"), sTablename, (int)(dDN + 0.5));
}
else if (nCntype == 2)//luo wen
{
sSQL.Format(_T("select [接口直径L],[螺纹长度L] from [%s] where [公称直径L]=%d"), sTablename, (int)(dDN + 0.5));
}
pDb->GetSelData(sSQL, arVals);
if (arVals.GetSize() == 0)
{
if (nCntype == 1) //cheng cha
{
sSQL.Format(_T("select [接口直径S],[承插长度S] from [%s] where [公称直径S]=%d"), sTablename, (int)(dDN + 0.5));
}
else if (nCntype == 2)//luo wen
{
sSQL.Format(_T("select [接口直径S],[螺纹长度S] from [%s] where [公称直径S]=%d"), sTablename, (int)(dDN + 0.5));
}
pDb->GetSelData(sSQL, arVals);
}
}
else
{
if (nCntype == 1) //cheng cha
{
sSQL.Format(_T("select [接口直径],[承插长度] from [%s] where [公称直径]=%d"), sTablename, (int)(dDN + 0.5));
}
else if (nCntype == 2)//luo wen
{
sSQL.Format(_T("select [接口直径],[螺纹长度] from [%s] where [公称直径]=%d"), sTablename, (int)(dDN + 0.5));
}
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::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::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(0)) / dUnit);
pXDataMap->SetAt(PIPE_INTERFACED, _ttof(arVals.GetAt(1)) / 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;
}
int TDbPipeSupport::QueryRPorHP(CUIISQLiteServer *pDb,LPCTSTR pszLevel,double dDn,double ddn)
{
//[AecSpecBranch] (
//[等级] CHAR(256),
//[主管] INTEGER,
//[支管] INTEGER,
//[结构] CHAR(17));
/*
0 RT REDUCING TEE
1 T EQUAL TEE
2 H HALF COUPLING
3 P BRANCH WELD
4 RP REINFORCING PAD
5 SO SOCKOLET
6 W WELDOLET
*/
static LPCTSTR ssBs[] = {_T("RT"),_T("T"),_T("H"),_T("P"),_T("RP"),_T("SO"),_T("W"),NULL};
int nLen = sizeof(ssBs) / sizeof(LPCTSTR)-1;
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 < nLen;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 < nLen; 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() >= 3)
{
pXDataMap->SetAt(PIPE_D, _ttof(arVals.GetAt(0)));
pXDataMap->SetAt(PIPE_THICK, _ttof(arVals.GetAt(1)));
pXDataMap->SetAt(PIPE_STDNO, arVals.GetAt(2));
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() >= 3)
{
pXDataMap->SetAt(PIPE_D, _ttof(arVals.GetAt(0)));
pXDataMap->SetAt(KEY_L, _ttof(arVals.GetAt(1)));
pXDataMap->SetAt(PIPE_STDNO, arVals.GetAt(2));
return TRUE;
}
return FALSE;
}
BOOL TDbPipeSupport::QuerySBFSpec(CUIISQLiteServer *pDb, const CString &sLevel, double dDn, AecDbObjXDataMap *pXDataMap)
{
CString sSQL;
sSQL.Format(_T("select * from [AecSpecFlange] where [公称直径]=%d and [等级名称]='%s' and [类别]='8字盲板'"),(int)(dDn + 0.5), sLevel);
CStringArray arVals;
pDb->GetSelData(sSQL, arVals);
/*
*0 [ID] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
1 [项目名称] varchar(255),
2 [等级名称] varchar(250),
3 [类别] varchar(250),
4 [类型] varchar(250),
5 [公称直径] INTEGER,
6 [材质] varchar(50),
7 [标准号] varchar(250),
8 [端面] varchar(50),
9 [压力] FLOAT,
10 [描述] varchar(255),
11 [制造类型] CHAR(50),
12 [元件代码] CHAR(50),
13 [短代码] CHAR(50));
*/
if (arVals.GetSize() < 14)
{
acutPrintf(_T("\n没有查询到8字盲板数据 %s"),sSQL);
return FALSE;
}
pXDataMap->SetAt(PIPE_FLANGP, arVals.GetAt(4));
pXDataMap->SetAt(PIPE_MATERIALFT, arVals.GetAt(6));
pXDataMap->SetAt(PIPE_STDNO, arVals.GetAt(7));
pXDataMap->SetAt(PIPE_FLANGF, arVals.GetAt(8));
pXDataMap->SetAt(PIPE_PRESSURE, arVals.GetAt(9));
pXDataMap->SetAt(PIPE_DESCR, arVals.GetAt(10));
pXDataMap->SetAt(KEY_PRODTP, arVals.GetAt(11));
pXDataMap->SetAt(KEY_ICODE, arVals.GetAt(12));
pXDataMap->SetAt(KEY_SCODE, arVals.GetAt(13));
return TRUE;
}
BOOL TDbPipeSupport::QuerySBFlange(CUIISQLiteServer *pDb, double dDn, double dPress, AecDbObjXDataMap *pXDataMap)
{
CString sSQL;
CString sStd = _T("HG/T 21547");
pXDataMap->GetAt(PIPE_STDNO, sStd);
CString sFF = _T("FF");
pXDataMap->GetAt(PIPE_FLANGF, sFF);
/*
0 [ID] INTEGER PRIMARY KEY AUTOINCREMENT,
1 [公称直径] INTEGER,
2 [压力] FLOAT,
3 [d] INTEGER,
4 [L] INTEGER,
5 [T1] INTEGER,
6 [T] FLOAT,
7 [B] INTEGER,
8 [Q] INTEGER,
9 [G] INTEGER,
10 [端面] CHAR(17),
11 [标准号] CHAR(50));
*/
sSQL.Format(_T("select * from [AecBFlangeData] where [公称直径]=%d and [压力]>%.1f and [压力]<%.1f "),
(int)(dDn+0.5),dPress-0.05,dPress+0.05);
CStringArray arVals;
pDb->GetSelData(sSQL, arVals);
if (arVals.GetSize() < 11)
{
acutPrintf(_T("\n没有查询到插板数据 %s"), sSQL);
return FALSE;
}
pXDataMap->SetAt(KEY_B, _ttof(arVals.GetAt(7)));
pXDataMap->SetAt(KEY_DD, _ttof(arVals.GetAt(3)));
pXDataMap->SetAt(KEY_L, _ttof(arVals.GetAt(4)));
pXDataMap->SetAt(KEY_T, _ttof(arVals.GetAt(6)));
pXDataMap->SetAt(PIPE_THICK, _ttof(arVals.GetAt(6)));//总厚度
pXDataMap->SetAt(KEY_T2, _ttof(arVals.GetAt(5)));
pXDataMap->SetAt(KEY_Q, _ttof(arVals.GetAt(8)));
pXDataMap->SetAt(KEY_G, _ttof(arVals.GetAt(9)));
pXDataMap->SetAt(KEY_ON, TRUE);//开关
pXDataMap->SetAt(PIPE_FLANGF, arVals.GetAt(10));
return TRUE;
}