2328 lines
58 KiB
C++
2328 lines
58 KiB
C++
#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;
|
|
} |