Files
envi-code/SourceCode/Code2026/PipelineCmd/IsoSysDlg.cpp
T
gjm 164968b62e chore
把非utf8-bom编码的cpp/h文件改为 utf8 bom 编码, msvc识别utf8编码时,如果不是bom格式的,会使用当前cp_oem来解码.
2026-10-04 00:04:20 +08:00

410 lines
10 KiB
C++

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