#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); }