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

997 lines
26 KiB
C++

#include "StdAfx.h"
#include "StdArx.h"
#include "PipelineTools.h"
#include "KTInitDlg.h"
#include "KTDimScriptDlg.h"
#include "KTElSetupDlg.h"
#include "earthwormdef.h"
#include "KTCadUtility.h"
#include "AecPipeLine.h"
#include "verifynumberstring.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
KTInitDlg::KTInitDlg(CWnd* pParent /*=NULL*/)
: CDialog(KTInitDlg::IDD, pParent)
, m_nBrkStyle(0)
, m_dMPipeW(.0)
, m_dSPipeW(.0)
, m_sInsRDN(_T(""))
, m_dValveScale(.0)
, m_dEquScale(.0)
, m_dLinearScale(.0)
, m_dNodeScale(.0)
, m_dConSign(.0)
, m_dBigArrow(.0)
, m_dMidArrow(.0)
, m_dSmallArrow(.0)
, m_bEquDim(0)
, m_bValveDim(0)
, m_sScale(_T(""))
, m_dPlotWidth(.0)
, m_dWeldDotDia(.0)
, m_sPipeMinDia(_T(""))
, m_sPipeMaxDia(_T(""))
, m_sPerElbowDia(_T(""))
, m_dBreakSpace(.0)
, m_dTextWFact(.0)
, m_dTextHeight(.0)
, m_sScriptUp(_T(""))
, m_sScriptDown(_T(""))
, m_dDPlotWidth(.0)
, m_dEqpTxtHeight(.0)
, m_dEqpTxtWFact(.0)
, m_dStrTxtHeight(.0)
, m_dStrTxtWFact(.0)
, m_nTrade(0)
, m_sEl(_T(""))
, m_sTopEl(_T(""))
, m_sCenEl(_T(""))
, m_sBomEl(_T(""))
, m_pPipeInitData(NULL)
, m_bDN(0)
, m_dMaxDiaDrawScale(1.2)
, m_bMaxDiaScale(FALSE)
{
UIHistory::readCache(FILE_NAME_INI
, _T("KTInitDlg")
, _T("%s%f%f%s%s%s%f%f%f%s%s%f%f%f%f%f%d%s%f%f%f%f%f%f%f%f%f%f%d%d%d%f%d")
, &m_sScale // %s
, &m_dPlotWidth // %f
, &m_dWeldDotDia // %f
, &m_sPipeMinDia // %s
, &m_sPipeMaxDia // %s
, &m_sPerElbowDia // %s
, &m_dBreakSpace // %f
, &m_dTextWFact // %f
, &m_dTextHeight // %f
, &m_sScriptUp // %s
, &m_sScriptDown // %s
, &m_dDPlotWidth // %f
, &m_dEqpTxtHeight // %f
, &m_dEqpTxtWFact // %f
, &m_dStrTxtHeight // %f
, &m_dStrTxtWFact // %f
, &m_nTrade // %d
, &m_sInsRDN // %s
, &m_dMPipeW // %f
, &m_dSPipeW // %f
, &m_dValveScale // %f
, &m_dEquScale // %f
, &m_dNodeScale // %f
, &m_dConSign // %f
, &m_dLinearScale // %f
, &m_dBigArrow // %f
, &m_dMidArrow // %f
, &m_dSmallArrow // %f
, &m_bEquDim // %d
, &m_bValveDim // %d
, &m_nBrkStyle // %d
, &m_dMaxDiaDrawScale//%f
, &m_bMaxDiaScale //%d
);
}
void KTInitDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(KTInitDlg)
DDX_Control(pDX, IDC_COMBOPROJECTS, m_wndProjectCombo);
DDX_Control(pDX, IDC_STATIC_BMP_TOPEL, m_wndBmpTopEl);
DDX_Control(pDX, IDC_STATIC_BMP_EL, m_wndBmpEl);
DDX_Control(pDX, IDC_STATIC_BMP_CENEL, m_wndBmpCenEl);
DDX_Control(pDX, IDC_STATIC_BMP_BOMEL, m_wndBmpBomEl);
DDX_Control(pDX, IDC_STATIC_EL, m_wndEl);
DDX_Control(pDX, IDC_STATIC_EL_BOM, m_wndElBom);
DDX_Control(pDX, IDC_STATIC_EL_CEN, m_wndElCen);
DDX_Control(pDX, IDC_STATIC_EL_TOP, m_wndElTop);
DDX_Control(pDX, IDC_STATIC_EL_TYPE, m_wndElType);
DDX_CBString(pDX, IDC_COMBOSCALE, m_sScale);
DDX_Text(pDX, IDC_EDITPLOTWIDTH, m_dPlotWidth);
DDX_Text(pDX, IDC_EDITWELDDOTDIA, m_dWeldDotDia);
DDX_CBString(pDX, IDC_COMBOPIPEMINDIA, m_sPipeMinDia);
DDX_CBString(pDX, IDC_COMBOPIPEMAXDIA, m_sPipeMaxDia);
DDX_CBString(pDX, IDC_COMBOELBOWDIA, m_sPerElbowDia);
DDX_Text(pDX, IDC_EDITBREAKSPACE, m_dBreakSpace);
DDX_Text(pDX, IDC_EDITTEXTWFACT, m_dTextWFact);
DDX_Text(pDX, IDC_EDITTEXTHEIGHT, m_dTextHeight);
DDX_Text(pDX, IDC_EDITDIMUP, m_sScriptUp);
DDX_Text(pDX, IDC_EDITDIMBOTTOM, m_sScriptDown);
DDX_Text(pDX, IDC_EDITDLINEWIDTH, m_dDPlotWidth);
DDX_Text(pDX, IDC_EDITEQPTXTHEIGHT, m_dEqpTxtHeight);
DDX_Text(pDX, IDC_EDITEQPTXTWFACT, m_dEqpTxtWFact);
DDX_Text(pDX, IDC_EDITSTRTXTHEIGHT, m_dStrTxtHeight);
DDX_Text(pDX, IDC_EDITSTRTXTWFACT, m_dStrTxtWFact);
DDX_CBIndex(pDX, IDC_COMBOTRADE, m_nTrade);
// pid
DDX_CBString(pDX, IDC_COMBOINSRDN, m_sInsRDN);
DDX_Text(pDX, IDC_MPIPE1W, m_dMPipeW);
DDX_Text(pDX, IDC_SPIPE1W, m_dSPipeW);
DDX_Text(pDX, IDC_VALVESCALE, m_dValveScale);
DDX_Text(pDX, IDC_EQUSCALE, m_dEquScale);
DDX_Text(pDX, IDC_NODESCALE, m_dNodeScale);
DDX_Text(pDX, IDC_CONSIGN, m_dConSign);
DDX_Text(pDX, IDC_LINEARSCALE, m_dLinearScale);
DDX_Text(pDX, IDC_EDITBIGARROW, m_dBigArrow);
DDX_Text(pDX, IDC_EDITMIDARROW, m_dMidArrow);
DDX_Text(pDX, IDC_EDITSMALLARROW, m_dSmallArrow);
DDX_Check(pDX, IDC_CHECKEQUDIM, m_bEquDim);
DDX_Check(pDX, IDC_CHECKVALVEDIM, m_bValveDim);
DDX_Radio(pDX, IDC_RADIOBRK0, m_nBrkStyle);
DDX_Text(pDX, IDC_EDITPLOTWIDTH2, m_dMaxDiaDrawScale);
DDX_Check(pDX, IDC_CHECKDN, m_bDN);
DDX_Check(pDX, IDC_CHECKD, m_bD);
DDX_Check(pDX, IDC_CHECKO, m_bO);
DDX_Check(pDX, IDC_CHECK1, m_bMaxDiaScale);
}
BEGIN_MESSAGE_MAP(KTInitDlg, CDialog)
//{{AFX_MSG_MAP(KTInitDlg)
ON_BN_CLICKED(IDC_BUTTONUPSET, OnButtonupset)
ON_BN_CLICKED(IDC_BUTTONDOWNSET, OnButtondownset)
ON_BN_CLICKED(IDC_BTELSETUP, OnBtelsetup)
ON_BN_CLICKED(IDC_CHECKO, OnBnClickedChecko)
ON_BN_CLICKED(IDC_BUTTON2, OnBnClickedUpdatePipe)
ON_CBN_SELCHANGE(IDC_COMBOTRADE, OnCbnSelchangeComboTrade)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
void KTInitDlg::SetPipeInitData(AecDbObjXDataMap* pXData)
{
m_pPipeInitData = pXData;
}
BOOL KTInitDlg::OnInitDialog()
{
CDialog::OnInitDialog();
m_bmpEl.LoadBitmap(IDB_BITMAPEL);
m_bmpTopEl.LoadBitmap(IDB_BITMAPTOPEL);
m_bmpCenEl.LoadBitmap(IDB_BITMAPCENEL);
m_bmpBomEl.LoadBitmap(IDB_BITMAPBOTEL);
InitFromMap();
if (m_pPipeInitData != NULL)
{
CString sScriptUp, sScriptDown;
PipeDetail2Script(m_sScriptUp, sScriptUp);
m_pPipeInitData->SetAt(DOC_SCRIPTT, sScriptUp);//上标脚本
PipeDetail2Script(m_sScriptDown, sScriptDown);
m_pPipeInitData->SetAt(DOC_SCRIPTB, sScriptDown);//下标脚本
}
InitProject();
UpdateData(FALSE);
return TRUE;
}
void KTInitDlg::OnOK()
{
UpdateData(TRUE);
UIHistory::writeCache(FILE_NAME_INI
, _T("KTInitDlg")
, _T("%s%f%f%s%s%s%f%f%f%s%s%f%f%f%f%f%d%s%f%f%f%f%f%f%f%f%f%f%d%d%d%f%d")
, m_sScale // %s
, m_dPlotWidth // %f
, m_dWeldDotDia // %f
, m_sPipeMinDia // %s
, m_sPipeMaxDia // %s
, m_sPerElbowDia // %s
, m_dBreakSpace // %f
, m_dTextWFact // %f
, m_dTextHeight // %f
, m_sScriptUp // %s
, m_sScriptDown // %s
, m_dDPlotWidth // %f
, m_dEqpTxtHeight // %f
, m_dEqpTxtWFact // %f
, m_dStrTxtHeight // %f
, m_dStrTxtWFact // %f
, m_nTrade // %d
, m_sInsRDN // %s
, m_dMPipeW // %f
, m_dSPipeW // %f
, m_dValveScale // %f
, m_dEquScale // %f
, m_dNodeScale // %f
, m_dConSign // %f
, m_dLinearScale // %f
, m_dBigArrow // %f
, m_dMidArrow // %f
, m_dSmallArrow // %f
, m_bEquDim // %d
, m_bValveDim // %d
, m_nBrkStyle // %d
, m_dMaxDiaDrawScale//%f
, m_bMaxDiaScale //%d
);
if (!DownLoad2Map())
{
return;
}
CDialog::OnOK();
}
void KTInitDlg::OnCbnSelchangeComboTrade()
{
UpdateData();
if (m_nTrade == 4)
{
int nSel = m_wndProjectCombo.FindString(0, _T("市政"));
if (nSel != -1)
{
m_wndProjectCombo.SetCurSel(nSel);
}
}
else
{
int nSel = m_wndProjectCombo.FindString(0, _T("工业"));
if (nSel != -1)
{
m_wndProjectCombo.SetCurSel(nSel);
}
}
}
void KTInitDlg::OnButtonupset()
{
CString sText,sText2;
m_pPipeInitData->GetAt(DOC_SCRIPTT,sText); //上标脚本
PipeScript2Detail(sText,sText2);
KTDimScriptDlg scrDlg;
scrDlg.SetPipeDimScript(sText);
if (IDOK == scrDlg.DoModal())
{
//{..}{..}{..}
scrDlg.GetPipeDimScript(m_sScriptUp);
sText2 = _T("");
PipeDetail2Script(m_sScriptUp,sText2);
m_pPipeInitData->SetAt(DOC_SCRIPTT,sText2);
m_sScriptUp.Replace(_T("{"),_T(""));
m_sScriptUp.Replace(_T("}"),_T(""));
UpdateData(FALSE);
}
}
void KTInitDlg::OnBnClickedUpdatePipe()
{
UpdateData();
EndDialog(IDOK);
//选择管线和管件
struct resbuf* pRb = acutBuildList(RTDXF0,_T("AEC_EWPIPE,AEC_DBEWFIT"),0);
int nRes = 0;
ads_name ss,ent;
if ( RTNORM != ( nRes = CKTCadUtility::SelectEntities(_T("\n请选择更改的管线管件实体:"), ss,pRb ) ) )
{
acutRelRb(pRb);
return;
}
acutRelRb(pRb);
Adesk::Int32 nLen = 0;
acedSSLength(ss,&nLen);
TDbPipeLine pipeLn(NULL);
AcDbObjectId id;
AcDbEntity* pEnt = NULL;
for (int i = 0;i < nLen;i++)
{
acedSSName(ss,i,ent);
acdbGetObjectId(id,ent);
if ( Acad::eOk == acdbOpenAcDbEntity(pEnt,id,AcDb::kForWrite))
{
AecDbEwPipe* pPipe = AecDbEwPipe::cast(pEnt);
if (pPipe != NULL)
{
pipeLn.FillInInitXDataMap(pPipe->GetSpecialtyData());
pPipe->ReCreateDraw2d();
pPipe->ReCreateDraw3d();
}
AecDbEwFitting* pFit = AecDbEwFitting::cast(pEnt);
if (pFit != NULL)
{
pipeLn.FillInInitXDataMap(pFit->GetSpecialtyData());
pFit->ReCreateDraw2d();
pFit->ReCreateDraw3d();
}
pEnt->close();
}
}
acedSSFree(ss);
acedPostCommand(_T("regen "));
}
void KTInitDlg::OnButtondownset()
{
CString sText,sText2;
m_pPipeInitData->GetAt(DOC_SCRIPTB,sText); //下标脚本
PipeScript2Detail(sText,sText2);
KTDimScriptDlg scrDlg;
scrDlg.SetPipeDimScript(sText);
if (IDOK == scrDlg.DoModal())
{
scrDlg.GetPipeDimScript(m_sScriptDown);
sText2 = _T("");
PipeDetail2Script(m_sScriptDown,sText2);
m_pPipeInitData->SetAt(DOC_SCRIPTB,sText2);
m_sScriptDown.Replace(_T("{"),_T(""));
m_sScriptDown.Replace(_T("}"),_T(""));
UpdateData(FALSE);
}
}
void KTInitDlg::InitFromMap()
{
if (m_pPipeInitData == NULL) return;
double dVal = 0.0;
int nVal = 0;
m_pPipeInitData->GetAt(DOC_TRADE,m_nTrade); //行业
m_pPipeInitData->GetAt(DOC_SCALE,m_sScale); //出图比例
m_pPipeInitData->GetAt(DOC_PLOTWIDTH,m_dPlotWidth); //最小打印线宽
m_pPipeInitData->GetAt(DOC_DPLOTWIDTH,m_dDPlotWidth);
m_pPipeInitData->GetAt(DOC_WELDDIA,m_dWeldDotDia); //焊点直径
m_pPipeInitData->GetAt(DOC_PIPEMINDIA,dVal); //最小管道直径
m_sPipeMinDia.Format(_T("%g"),dVal);
m_pPipeInitData->GetAt(DOC_PIPEMAXDIA,dVal); //最大管线直径
m_sPipeMaxDia.Format(_T("%g"),dVal);
m_pPipeInitData->GetAt(DOC_PIPEMAXDIASCALE,m_dMaxDiaDrawScale);//最大管线直径
m_pPipeInitData->GetAt(DOC_PIPEMAXDIASYES,m_bMaxDiaScale);//是否最大管线直径
//PID
m_pPipeInitData->GetAt(DOC_PERELBOWDIA,dVal); //垂直弯头直径
m_sPerElbowDia.Format(_T("%g"),dVal);
m_pPipeInitData->GetAt(DOC_BREAKSPACE,m_dBreakSpace); //交叉断线间距
m_pPipeInitData->GetAt(DOC_UNIT,nVal); //单位
CheckRadioButton(IDC_RADIOMETRIC,IDC_RADIOINCH,nVal + IDC_RADIOMETRIC);
m_pPipeInitData->GetAt(DOC_DIMTERM,nVal); //标注端符
CheckRadioButton(IDC_RADIONONE,IDC_RADIOARROW,nVal + IDC_RADIONONE);
m_pPipeInitData->GetAt(DOC_DIMTXTH,m_dTextHeight); //标注文字高度
m_pPipeInitData->GetAt(DOC_DIMTXTF,m_dTextWFact); //标注文字宽度系数
m_pPipeInitData->GetAt(DOC_DPLOTWIDTH,m_dPlotWidth); //双线打印线宽
m_pPipeInitData->GetAt(DOC_EQPTXTH,m_dEqpTxtHeight); //设备标注文字高度
m_pPipeInitData->GetAt(DOC_EQPTXTF,m_dEqpTxtWFact); //设备标注文字宽度系数
m_pPipeInitData->GetAt(DOC_STRTXTH,m_dStrTxtHeight); //结构标注文字高度
m_pPipeInitData->GetAt(DOC_STRTXTF,m_dStrTxtWFact); //结构标注文字宽度系数
// PID
m_pPipeInitData->GetAt(DOC_PIDMPIPE1W, m_dMPipeW); //主管道线宽
m_pPipeInitData->GetAt(DOC_PIDSPIPE1W, m_dSPipeW); //次管道线宽
m_pPipeInitData->GetAt(DOC_PIDINSRDN, nVal); //仪表泡直径
m_sInsRDN.Format(_T("%d"), nVal);
m_pPipeInitData->GetAt(DOC_VALVESCALE, m_dValveScale); //阀门比例
m_pPipeInitData->GetAt(DOC_EQUSCALE, m_dEquScale); //设备比例
m_pPipeInitData->GetAt(DOC_LINEARSCALE, m_dLinearScale);//线性比例
m_pPipeInitData->GetAt(DOC_NODESCALE, m_dNodeScale); //管嘴比例
m_pPipeInitData->GetAt(DOC_CONSIGN, m_dConSign); //续接符号
m_pPipeInitData->GetAt(DOC_PIDBARROW, m_dBigArrow); //大箭头
m_pPipeInitData->GetAt(DOC_PIDMARROW, m_dMidArrow); //中箭头
m_pPipeInitData->GetAt(DOC_PIDSARROW, m_dSmallArrow); //小箭头
m_pPipeInitData->GetAt(DOC_PIDEWITHDIM, m_bEquDim); //设备插入标注
m_pPipeInitData->GetAt(DOC_PIDVWITHDIM, m_bValveDim); //阀门插入标注
m_pPipeInitData->GetAt(DOC_PIDBRKSTYLE, m_nBrkStyle); //管线打断样式
/*enum PipeDim
{
kDN = 0,// 公称直径
kMedium = 1,// 介质
kPipeNo = 2,// 管号
kPipeGrade = 3,// 管道等级
kDxt = 4,// 外径x 壁厚
kEl = 5,// 标高
kType = 6,// 类型
kHeatIns = 7,// 保温伴热
kElbowRat = 8,// 弯头比率
kStandard = 9,// 标准
kMaterial = 10,//材质
kZone = 11,
kSystem = 12, // 系统
};*/
CString sText,sText2;//{0}{-}{1}{-}{2}{-}{3} -> {公称直径}{-}{介质}{-}{管道等级}
m_pPipeInitData->GetAt(DOC_SCRIPTT,sText); //上标脚本
sText.Replace(_T("{{"),_T("{"));
sText.Replace(_T("}}"),_T("}"));
PipeScript2Detail(sText,sText2);
m_sScriptUp = sText2;
m_pPipeInitData->GetAt(DOC_SCRIPTB,sText); //下标脚本
sText.Replace(_T("{{"), _T("{"));
sText.Replace(_T("}}"), _T("}"));
PipeScript2Detail(sText,sText2);
m_sScriptDown = sText2;
m_pPipeInitData->GetAt(DOC_ELTYPE,nVal); //标高设置
if (nVal >= 0 && nVal <= 2)
{
sText = g_pszElTypeTxt;
sText += g_pszElType[nVal];
m_wndElType.SetWindowText(sText);
switch(nVal)
{
case 0: //符号标高
{
m_wndEl.ShowWindow(SW_HIDE);
m_wndBmpEl.SetBitmap(m_bmpEl);
m_wndElBom.ShowWindow(SW_HIDE);
m_wndBmpBomEl.SetBitmap(m_bmpBomEl);
m_wndElCen.ShowWindow(SW_HIDE);
m_wndBmpCenEl.SetBitmap(m_bmpCenEl);
m_wndElTop.ShowWindow(SW_HIDE);
m_wndBmpTopEl.SetBitmap(m_bmpTopEl);
break;
}
case 1: //简写标高
{
m_sEl = PIPE_EL;
m_wndEl.SetWindowText(m_sEl);
m_wndBmpEl.ShowWindow(SW_HIDE);
m_sTopEl = PIPE_TOP_EL;
m_wndElTop.SetWindowText(m_sTopEl);
m_wndBmpTopEl.ShowWindow(SW_HIDE);
m_sCenEl = PIPE_CEN_EL;
m_wndElCen.SetWindowText(m_sCenEl);
m_wndBmpCenEl.ShowWindow(SW_HIDE);
m_sBomEl = PIPE_BOM_EL;
m_wndElBom.SetWindowText(m_sBomEl);
m_wndBmpBomEl.ShowWindow(SW_HIDE);
break;
}
case 2: //自定义标高
{
m_pPipeInitData->GetAt(DOC_ELDESCR,sText);
ElDescr2EveryOne(sText);
m_wndEl.SetWindowText(m_sEl);
m_wndBmpEl.ShowWindow(SW_HIDE);
m_wndElTop.SetWindowText(m_sTopEl);
m_wndBmpTopEl.ShowWindow(SW_HIDE);
m_wndElCen.SetWindowText(m_sCenEl);
m_wndBmpCenEl.ShowWindow(SW_HIDE);
m_wndElBom.SetWindowText(m_sBomEl);
m_wndBmpBomEl.ShowWindow(SW_HIDE);
break;
}
default:
break;
}
}
UpdateData(FALSE);
}
void KTInitDlg::InitProject()
{
CString dbPath = FilePath::GetSysDir();
dbPath += _T("\\Plumbing.db");
CUIISQLiteServer sqlDb;
if (!sqlDb.InitADOServer(dbPath))
{
AfxMessageBox(_T("数据库驱动加载数据库Plumbing.db失败!"));
return;
}
CString sSQL;
sSQL = _T("select [项目名称] from AecProjectname order by ID");
CStringArray arValues;
sqlDb.GetSelData(sSQL,arValues);
for (int i = 0;i < arValues.GetSize();i++)
{
m_wndProjectCombo.InsertString(i,arValues.GetAt(i));
}
CString sProject;
m_pPipeInitData->GetAt(DOC_PROJECT,sProject); //标注文字高度
if (m_nTrade == WPipe::eCivial)
{
sProject = _T("市政");//市政
}
m_pPipeInitData->GetAt(DOC_DNPRE,m_bDN);
m_pPipeInitData->GetAt(DOC_DPRE,m_bD);
m_pPipeInitData->GetAt(DOC_ADPRE,m_bO);
int nSel = m_wndProjectCombo.FindString(0,sProject);
if (nSel != -1)
{
m_wndProjectCombo.SetCurSel(nSel);
}
else
{
if (arValues.GetSize() > 0) m_wndProjectCombo.SetCurSel(0);
}
}
void KTInitDlg::ElDescr2EveryOne(CString& sText)
{
//--|--|--
int nLen = sText.GetLength();
if (nLen == 0) return;
int nIndex = sText.Find(KT_SEPARATOR_CHAR,0);
m_sEl = sText.Mid(0,nIndex);
sText.SetAt(nIndex,KT_SUBTRACT_CHAR); //'-'
int nIndex1 = nIndex;
nIndex = sText.Find(KT_SEPARATOR_CHAR,0); //'|'
if (nIndex != -1)
{
m_sTopEl = sText.Mid(nIndex1 + 1,nIndex - nIndex1 - 1);
sText.SetAt(nIndex,KT_SUBTRACT_CHAR);
}
nIndex1 = nIndex;
nIndex = sText.Find(KT_SEPARATOR_CHAR,0);
if (nIndex != -1)
{
m_sCenEl = sText.Mid(nIndex1 + 1,nIndex - nIndex1 - 1);
sText.SetAt(nIndex,KT_SUBTRACT_CHAR);
}
nIndex1 = nIndex + 1;
if (nIndex1 != -1)
{
m_sBomEl = sText.Mid(nIndex1);
sText.SetAt(nIndex,KT_SUBTRACT_CHAR);
}
}
BOOL KTInitDlg::DownLoad2Map()
{
UpdateData();
if (m_pPipeInitData == NULL) return FALSE;
//1.验证比例是否合法
int nIndex = m_sScale.Find(KT_COLON_CHAR,0); //':'
if (nIndex != -1 && nIndex < m_sScale.GetLength())
{
/* 2025.07.28 gjm
由于要求允许设置缩小比例,所以要支持 “1:0.1” 这种形式。
而大部分代码里,直接取“:”号后面的数值做比例系数。
故,在这里强制检查“:”号前面的数字是否为“1”。
而“:”号后面只要确定是正数字即可。
*/
int nLeft = _ttoi(m_sScale.Mid(0,nIndex));
if (nLeft != 1)
{
AfxMessageBox(_T("“出图比例”中,“:”号前数字必须为“1”。"));
return FALSE;
}
if (!VNST(m_sScale.Mid(nIndex + 1)))
{
AfxMessageBox(_T("“出图比例”中,“:”号后必须为数字。"));
return FALSE;
}
double dRight = _ttof(m_sScale.Mid(nIndex + 1));
if (dRight <= 0)
{
AfxMessageBox(_T("“出图比例”中,“:”号后数字必须大于“0”。"));
return FALSE;
}
//if (nLeft * nRight == __max(nLeft,nRight) )
//{
//}
//else
//{
// AfxMessageBox(IDS_SCALEINVALIDATE);
// return FALSE;
//}
}
else
{
AfxMessageBox(IDS_SCALEINVALIDATE);
return FALSE;
}
int nProj = m_wndProjectCombo.GetCurSel();
if (nProj == -1)
{
AfxMessageBox(_T("请选择项目!"));
return FALSE;
}
CString sProject;
m_wndProjectCombo.GetLBText(nProj,sProject);
m_pPipeInitData->SetAt(DOC_TRADE,m_nTrade); //行业
m_pPipeInitData->SetAt(DOC_PROJECT,sProject); //项目
m_pPipeInitData->SetAt(DOC_SCALE,m_sScale); //出图比例
m_pPipeInitData->SetAt(DOC_DNPRE,m_bDN);
m_pPipeInitData->SetAt(DOC_DPRE,m_bD);
m_pPipeInitData->SetAt(DOC_ADPRE,m_bO);
m_pPipeInitData->SetAt(DOC_PLOTWIDTH,m_dPlotWidth); //最小打印线宽
m_pPipeInitData->SetAt(DOC_DPLOTWIDTH,m_dDPlotWidth); //双线打印线宽
if (m_dWeldDotDia < -1.e-10)//可以为0
{
AfxMessageBox(IDS_WELDDIAINVALIDATE);
return FALSE;
}
m_pPipeInitData->SetAt(DOC_WELDDIA,m_dWeldDotDia); //焊点直径
double dVal = _ttof(m_sPipeMinDia);
if (dVal < 1.e-6)
{
AfxMessageBox(IDS_PIPEMINDIAINVALIDATE);
return FALSE;
}
m_pPipeInitData->SetAt(DOC_PIPEMINDIA,dVal); //最小管道直径
dVal = _ttof(m_sPipeMaxDia);
if (dVal < 1.e-6)
{
AfxMessageBox(IDS_PIPEMAXDIAINVALIDATE);
return FALSE;
}
m_pPipeInitData->SetAt(DOC_PIPEMAXDIA,dVal); //最大管线直径
m_pPipeInitData->SetAt(DOC_PIPEMAXDIASCALE,m_dMaxDiaDrawScale); //最大管线直径
m_pPipeInitData->SetAt(DOC_PIPEMAXDIASYES,m_bMaxDiaScale);//是否最大管线直径
dVal = _ttof(m_sPerElbowDia);
if (dVal < 1.e-6)
{
AfxMessageBox(IDS_PERELBOWDIAINVALIDATE);
return FALSE;
}
m_pPipeInitData->SetAt(DOC_PERELBOWDIA,dVal); //垂直弯头直径
if (m_dBreakSpace < 1.e-6)
{
AfxMessageBox(IDS_BREAKSPACEINVALIDATE);
return FALSE;
}
m_pPipeInitData->SetAt(DOC_BREAKSPACE,m_dBreakSpace); //交叉断线间距
m_pPipeInitData->SetAt(DOC_DIMTXTH,m_dTextHeight); //标注文字高度
m_pPipeInitData->SetAt(DOC_DIMTXTF,m_dTextWFact); //标注文字宽度系数
m_pPipeInitData->SetAt(DOC_EQPTXTH,m_dEqpTxtHeight); //设备标注文字高度
m_pPipeInitData->SetAt(DOC_EQPTXTF,m_dEqpTxtWFact); //设备标注文字宽度系数
m_pPipeInitData->SetAt(DOC_STRTXTH,m_dStrTxtHeight); //设备标注文字高度
m_pPipeInitData->SetAt(DOC_STRTXTF,m_dStrTxtWFact); //设备标注文字宽度系数
m_pPipeInitData->SetAt(DOC_UNIT, 0);//全部公制
int nVal = GetCheckedRadioButton(IDC_RADIONONE,IDC_RADIOARROW);
m_pPipeInitData->SetAt(DOC_DIMTERM,(nVal - IDC_RADIONONE));
CString sText;
m_wndElType.GetWindowText(sText);
nVal = 0;
if (sText.Find(g_pszElType[0],0) != -1)
{
nVal = 0;
}
if (sText.Find(g_pszElType[1],0) != -1)
{
nVal = 1;
}
if (sText.Find(g_pszElType[2],0) != -1)
{
nVal = 2;
}
m_pPipeInitData->SetAt(DOC_ELTYPE,nVal);
sText = _T("0");
if (nVal == 0)
{
m_pPipeInitData->SetAt(DOC_ELDESCR,sText);
}
if (nVal == 2 || nVal == 1)
{
if (nVal == 1)
{
m_sEl = PIPE_EL; //_T("EL")
m_sTopEl = PIPE_TOP_EL; //_T("TOP.EL")
m_sCenEl = PIPE_CEN_EL; //_T("CEN.EL")
m_sBomEl = PIPE_BOM_EL; //_T("BOM.EL")
}
sText = m_sEl + KT_SEPARATOR_STR + m_sTopEl + KT_SEPARATOR_STR + m_sCenEl + KT_SEPARATOR_STR + m_sBomEl;
m_pPipeInitData->SetAt(DOC_ELDESCR,sText);
}
// pid
m_pPipeInitData->SetAt(DOC_PIDMPIPE1W, m_dMPipeW); //主管道线宽
m_pPipeInitData->SetAt(DOC_PIDSPIPE1W, m_dSPipeW); //次管道线宽
nVal = _ttoi(m_sInsRDN);
m_pPipeInitData->SetAt(DOC_PIDINSRDN, nVal); //仪表泡直径
m_pPipeInitData->SetAt(DOC_VALVESCALE, m_dValveScale); //阀门比例
m_pPipeInitData->SetAt(DOC_EQUSCALE, m_dEquScale); //设备比例
m_pPipeInitData->SetAt(DOC_LINEARSCALE, m_dLinearScale);//线性比例
m_pPipeInitData->SetAt(DOC_NODESCALE, m_dNodeScale); //管嘴比例
m_pPipeInitData->SetAt(DOC_CONSIGN, m_dConSign); //续接符号
m_pPipeInitData->SetAt(DOC_PIDBARROW, m_dBigArrow); //大箭头
m_pPipeInitData->SetAt(DOC_PIDMARROW, m_dMidArrow); //中箭头
m_pPipeInitData->SetAt(DOC_PIDSARROW, m_dSmallArrow); //小箭头
m_pPipeInitData->SetAt(DOC_PIDEWITHDIM, m_bEquDim); //设备插入标注
m_pPipeInitData->SetAt(DOC_PIDVWITHDIM, m_bValveDim); //阀门插入标注
m_pPipeInitData->SetAt(DOC_PIDBRKSTYLE, m_nBrkStyle); //管线打断样式
return TRUE;
}
//{公称直径}{-}{介质}{-}{管道等级} -> {0}{-}{1}{-}{2}{-}{3}
int KTInitDlg::PipeDetail2Script(CString& sText,CString& sText2)
{
int nIndex = 0;
CString sIndex,sTemp = sText;
while(TRUE)
{
if (g_pszPipeDim[nIndex] == NULL)
break;
if (sTemp.Find(g_pszPipeDim[nIndex]) != -1)
{
sIndex.Format(_T("{%d}"),nIndex);
sTemp.Replace(g_pszPipeDim[nIndex],sIndex);
sTemp.Replace(_T("{{"), _T("{"));
sTemp.Replace(_T("}}"), _T("}"));
}
nIndex += 1;
}
// 最后处理一下分隔符
int idx1(0), idx2(0);
while (true)
{
idx1 = sTemp.Find(_T('}'), idx2);
idx2 = sTemp.Find(_T('{'), idx1);
if (idx1 == -1 || idx2 == -1) break;
CString s = sTemp.Mid(idx1 + 1, idx2 - idx1 - 1);
sTemp.Replace(s, CString(_T('{')) + s + _T('}'));
}
sText2 = sTemp;
return TRUE;
}
//{0}{-}{1}{-}{2}{-}{3} -> {公称直径}{-}{介质}{-}{管道等级}
int KTInitDlg::PipeScript2Detail(CString& sText,CString& sText2)
{
CString sTemp,sItem,sNewTxt = _T(""),sNewTxt2 = _T("");
int nIndex1 = -1,nIndex2 = -1;
while(TRUE)
{
if (sText.GetLength() == 0) break;
nIndex1 = sText.Find(KT_OPEN_BRACE_CHAR,0); //'{'
nIndex2 = sText.Find(KT_CLOSE_BRACE_CHAR,0); //'}'
if (nIndex1 != -1 && nIndex2 != -1)
{
sTemp = sText.Mid(nIndex1 + 1,nIndex2 - nIndex1 - 1);
int nIndex = _ttoi(sTemp);
if (nIndex > 0)
{
if (nIndex <= WPipe::kSystem)
{
sNewTxt += KT_OPEN_BRACE_STR; //"{"
sNewTxt += g_pszPipeDim[nIndex];
sNewTxt += KT_CLOSE_BRACE_STR; //"}"
sNewTxt2 += g_pszPipeDim[nIndex];
}
else
{
sNewTxt += sText.Mid(nIndex1,nIndex2 - nIndex1 + 1);
sNewTxt2 += sText.Mid(nIndex1 + 1,nIndex2 - nIndex1 - 1);
}
}
else if (nIndex == 0)
{
if (sTemp.CompareNoCase(_T("0")) == 0)
{
sNewTxt += KT_OPEN_BRACE_STR; //"{"
sNewTxt += g_pszPipeDim[0];
sNewTxt += KT_CLOSE_BRACE_STR; //"}"
sNewTxt2 += g_pszPipeDim[nIndex];
}
else
{
sNewTxt += sText.Mid(nIndex1,nIndex2 - nIndex1 + 1);
sNewTxt2 += sText.Mid(nIndex1 + 1,nIndex2 - nIndex1 - 1);
}
}
if (nIndex2 + 1 < sText.GetLength())
{
sTemp = sText.Mid(nIndex2 + 1);
sText = sTemp;
}
else
{
break;
}
}
}
sText2 = sNewTxt2;
sText = sNewTxt;
return sText.GetLength();
}
void KTInitDlg::OnBtelsetup()
{
int nVal = 0;
m_pPipeInitData->GetAt(DOC_ELTYPE,nVal);
KTElSetupDlg wndElDlg;
wndElDlg.m_nElGroup = nVal;
wndElDlg.m_sEl = m_sEl;
wndElDlg.m_sTopEl = m_sTopEl;
wndElDlg.m_sCenEl = m_sCenEl;
wndElDlg.m_sBomEl = m_sBomEl;
int nRes = wndElDlg.DoModal();
if (nRes == IDOK)
{
m_pPipeInitData->SetAt(DOC_ELTYPE,wndElDlg.m_nElGroup);
nVal = wndElDlg.m_nElGroup;
if (nVal >= 0 && nVal <= 2)
{
CString sText;
sText = g_pszElTypeTxt;
sText += g_pszElType[nVal];
m_wndElType.SetWindowText(sText);
switch(nVal)
{
case 0: //符号标高
{
m_wndEl.ShowWindow(SW_HIDE);
m_wndBmpEl.ShowWindow(SW_SHOW);
m_wndBmpEl.SetBitmap(m_bmpEl);
m_wndElBom.ShowWindow(SW_HIDE);
m_wndBmpBomEl.ShowWindow(SW_SHOW);
m_wndBmpBomEl.SetBitmap(m_bmpBomEl);
m_wndElCen.ShowWindow(SW_HIDE);
m_wndBmpCenEl.ShowWindow(SW_SHOW);
m_wndBmpCenEl.SetBitmap(m_bmpCenEl);
m_wndElTop.ShowWindow(SW_HIDE);
m_wndBmpTopEl.ShowWindow(SW_SHOW);
m_wndBmpTopEl.SetBitmap(m_bmpTopEl);
break;
}
case 1: //简写标高
{
m_sEl = PIPE_EL;
m_wndEl.SetWindowText(m_sEl);
m_wndEl.ShowWindow(SW_SHOW);
m_wndBmpEl.ShowWindow(SW_HIDE);
m_sTopEl = PIPE_TOP_EL;
m_wndElTop.SetWindowText(m_sTopEl);
m_wndElTop.ShowWindow(SW_SHOW);
m_wndBmpTopEl.ShowWindow(SW_HIDE);
m_sCenEl = PIPE_CEN_EL;
m_wndElCen.SetWindowText(m_sCenEl);
m_wndElCen.ShowWindow(SW_SHOW);
m_wndBmpCenEl.ShowWindow(SW_HIDE);
m_sBomEl = PIPE_BOM_EL;
m_wndElBom.SetWindowText(m_sBomEl);
m_wndElBom.ShowWindow(SW_SHOW);
m_wndBmpBomEl.ShowWindow(SW_HIDE);
break;
}
case 2: //自定义标高
{
m_sEl = wndElDlg.m_sEl;
m_sTopEl = wndElDlg.m_sTopEl;
m_sCenEl = wndElDlg.m_sCenEl;
m_sBomEl = wndElDlg.m_sBomEl;
m_wndEl.SetWindowText(m_sEl);
m_wndEl.ShowWindow(SW_SHOW);
m_wndBmpEl.ShowWindow(SW_HIDE);
m_wndElTop.SetWindowText(m_sTopEl);
m_wndElTop.ShowWindow(SW_SHOW);
m_wndBmpTopEl.ShowWindow(SW_HIDE);
m_wndElCen.SetWindowText(m_sCenEl);
m_wndElCen.ShowWindow(SW_SHOW);
m_wndBmpCenEl.ShowWindow(SW_HIDE);
m_wndElBom.SetWindowText(m_sBomEl);
m_wndElBom.ShowWindow(SW_SHOW);
m_wndBmpBomEl.ShowWindow(SW_HIDE);
break;
}
default:
break;
}
}
}
}
void KTInitDlg::OnBnClickedChecko()
{
UpdateData();
GetDlgItem(IDC_CHECKD)->EnableWindow(!m_bO);
GetDlgItem(IDC_CHECKDN)->EnableWindow(!m_bO);
}