#include "stdafx.h" #include "AecDbObjXDataMap.h" #include "uihistory.h" #include "AecDbCurveBase.h" #include "ECableParamDlg.h" #include "CXTLBDlg.h" #include "CTCCZDlg.h" #ifndef _ttof #define _ttof(pszVal) _tcstod((pszVal), NULL) #endif IMPLEMENT_DYNAMIC(CECableParamDlg, CDialog) CECableParamDlg::CECableParamDlg(CWnd* pParent /*=NULL*/) : CDialog(CECableParamDlg::IDD, pParent) , m_sW(_T("150")) , m_sH(_T("80")) , m_dt(1.0) , m_bCover(TRUE) , m_bSprt(FALSE) , m_dRatio(0.75) , m_nAlign(1)//中 , m_dEl(0) , m_sKind(_T("槽式")) , m_sNo(_T("QJ-1001")) , m_sMat(_T("镀锌钢板")) , m_sFactory(_T("扬州九一电器有限公司")) , m_sSys(_T("强电")) , m_bCenDraw(FALSE) , m_sRem(_T("热镀锌")) , m_dFullPer(75) , m_nSysSplit(0) , m_sSys2(_T("")) , m_dLeftW(0) , m_dFullPer2(75) , m_dUsed1(0) , m_dUsed2(0) { m_bEnableAlign = TRUE; m_bEleReadOnly = FALSE; m_bLoadLast = FALSE; m_bLock = false; GET_CACHE(CECableParamDlg , %s%s%f%d%d%d%d%f%f%f%s%s%s%s%s%s , &m_sW , &m_sH , &m_dt , &m_bCover , &m_bSprt , &m_bCenDraw , &m_nAlign , &m_dRatio , &m_dEl , &m_dFullPer , &m_sKind , &m_sSys , &m_sNo , &m_sMat , &m_sFactory , &m_sRem ); CString sSyss = m_sSys; int nPos = sSyss.Find(_T('|'), 0); if (nPos != -1) { m_sSys = sSyss.Mid(0, nPos); if (nPos < sSyss.GetLength() - 1) m_sSys2 = sSyss.Mid(nPos + 1); } else { m_sSys = sSyss; } m_id.setNull(); } CECableParamDlg::~CECableParamDlg() { } void CECableParamDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_CBString(pDX, IDC_COMBO2, m_sW); DDX_CBString(pDX, IDC_COMBO4, m_sH); DDX_CBString(pDX, IDC_COMBO5, m_sSys); DDX_Text(pDX, IDC_EDIT6, m_dt); DDX_Check(pDX, IDC_CHECK1, m_bCover); DDX_Check(pDX, IDC_CHECK2, m_bSprt); DDX_Text(pDX, IDC_EDIT5, m_dRatio); DDX_CBIndex(pDX, IDC_COMBO1, m_nAlign); DDX_Text(pDX, IDC_EDIT7, m_dEl); DDX_CBString(pDX, IDC_COMBO3, m_sKind); DDX_Text(pDX, IDC_EDIT8, m_sNo); DDX_Text(pDX, IDC_EDIT3, m_sMat); DDX_Text(pDX, IDC_EDIT4, m_sFactory); DDX_Check(pDX, IDC_CHECK3, m_bCenDraw); DDX_Text(pDX, IDC_EDIT9, m_sRem); DDX_Text(pDX, IDC_EDIT10, m_dFullPer); DDX_Control(pDX, IDC_COMBO1, m_wndAlignCombo); DDX_Control(pDX, IDC_EDIT7, m_wndEditEl); DDX_Radio(pDX, IDC_RADIO1, m_nSysSplit); DDX_CBString(pDX, IDC_COMBO10, m_sSys2); DDX_Text(pDX, IDC_EDIT12, m_dLeftW); DDX_Text(pDX, IDC_EDIT11, m_dFullPer2); DDX_Control(pDX, IDC_COMBO2, m_wndComboW); DDX_Control(pDX, IDC_COMBO4, m_wndComboH); DDX_Text(pDX, IDC_EDIT1, m_dUsed1); DDX_Text(pDX, IDC_EDIT2, m_dUsed2); DDX_Control(pDX, IDC_STATIC_US1, m_wndSUs1); DDX_Control(pDX, IDC_STATIC_US2, m_wndSUs2); DDX_Control(pDX, IDC_BUTTON3, m_wndReset1); DDX_Control(pDX, IDC_BUTTON5, m_wndReset2); DDX_Control(pDX, IDC_EDIT1, m_wndEditUsed1); DDX_Control(pDX, IDC_EDIT2, m_wndEditUsed2); } BEGIN_MESSAGE_MAP(CECableParamDlg, CDialog) ON_BN_CLICKED(IDOK, &CECableParamDlg::OnBnClickedOk) ON_BN_CLICKED(IDC_CHECK2, &CECableParamDlg::OnBnClickedCheck2) ON_BN_CLICKED(IDC_BUTTON1, &CECableParamDlg::OnBnClickedButton1) ON_BN_CLICKED(IDC_BUTTON3, &CECableParamDlg::OnBnClickedButton3) ON_BN_CLICKED(IDC_BUTTON5, &CECableParamDlg::OnBnClickedButton5) END_MESSAGE_MAP() BOOL CECableParamDlg::OnInitDialog() { CDialog::OnInitDialog(); m_wndAlignCombo.EnableWindow(m_bEnableAlign); m_wndEditEl.SetReadOnly(m_bEleReadOnly); if (m_bLock)//锁定标高 { GetDlgItem(IDC_EDIT7)->EnableWindow(FALSE); } UpdateData(FALSE); OnBnClickedCheck2(); m_wndComboW.SetWindowText(m_sW); m_wndComboH.SetWindowText(m_sH); m_wndSUs1.ShowWindow(m_id.isNull() ? SW_HIDE : SW_SHOW); m_wndSUs2.ShowWindow(m_id.isNull() ? SW_HIDE : SW_SHOW); m_wndReset1.ShowWindow(m_id.isNull() ? SW_HIDE : SW_SHOW); m_wndReset2.ShowWindow(m_id.isNull() ? SW_HIDE : SW_SHOW); m_wndEditUsed1.ShowWindow(m_id.isNull() ? SW_HIDE : SW_SHOW); m_wndEditUsed2.ShowWindow(m_id.isNull() ? SW_HIDE : SW_SHOW); return TRUE; } void CECableParamDlg::EnableLoadLast(BOOL bLoadLast) { m_bLoadLast = bLoadLast; } void CECableParamDlg::SetEleReadOnly(BOOL bEleReadOnly,double dEl) { m_bEleReadOnly = bEleReadOnly;m_dEl = dEl; } void CECableParamDlg::SetShowParam(const AecHvac::DuctParam& param) { double dSize[9]; memcpy(dSize,param.dSize,sizeof(double)*9); struct resbuf rb; acedGetVar(_T("INSUNITS"), &rb); if (rb.resval.rint == AcDb::kUnitsMeters) { dSize[0] *= 1000; dSize[1] *= 1000; dSize[2] *= 1000; } m_sW.Format(_T("%d"),(int)(dSize[0] + 0.5) ); m_sH.Format(_T("%d"),(int)(dSize[1] + 0.5) ); m_dLeftW = param.dSize[4]; m_dt = dSize[2]; m_nAlign = param.m_nAlign; m_dEl = param.m_dEl; if (!m_bLock) { m_dEl -= 0.5 * param.dSize[1];//调整到底部 } m_dRatio = param.m_dRatio; m_bCover = param.m_bCover; m_bSprt = param.m_bSpart; m_nSysSplit = param.m_nSysSplit; m_bCenDraw = param.m_bCenDraw; m_dFullPer = param.m_dFullPer; m_dFullPer2 = param.m_dFullPer2; m_dUsed1 = param.m_dFillUsed; m_dUsed2 = param.m_dFillUsed2; m_sNo = param.szNo; m_sMat = param.szMat; m_sFactory = param.szFat; m_sKind = param.szType; m_sSys2 = _T(""); CString sSyss = param.szSys; sSyss.TrimRight(); int nPos = sSyss.Find(_T('|'), 0); if (nPos != -1) { m_sSys = sSyss.Mid(0, nPos); if (nPos < sSyss.GetLength()-1) m_sSys2 = sSyss.Mid(nPos + 1); } else { m_sSys = param.szSys; } m_sRem = param.szRem; } void CECableParamDlg::GetPipeParam(AecHvac::DuctParam* pParam) { /* typedef struct DuctParam { ESection eType; //截面类型 double dSize[9];//尺寸 宽度,高度,厚度 int m_nAlign;//对其方式 double m_dEl; //标高 double m_dRatio;//曲率半径 int m_bCover; //盖板 桥架用 int m_bSpart; //隔板 桥架用 TCHAR szNo[33]; //编号 TCHAR szMat[33];//材质 TCHAR szFat[33];//厂家 TCHAR szType[33]//类型 TCHAR szExt[33];//其他 }DUCTPARAM; */ if (pParam != NULL) { memset(pParam,0,sizeof(AecHvac::DuctParam)); pParam->eType = eRect; pParam->m_app = WPipe::eBridge; pParam->dSize[0] = _ttof(m_sW); pParam->dSize[1] = _ttof(m_sH); pParam->dSize[2] = m_dt; pParam->dSize[4] = m_dLeftW; struct resbuf rb; acedGetVar(_T("INSUNITS"), &rb); if (rb.resval.rint == AcDb::kUnitsMeters) { pParam->dSize[0] *= 0.001; pParam->dSize[1] *= 0.001; pParam->dSize[2] *= 0.001; } pParam->m_nAlign = m_nAlign; pParam->m_dEl = m_dEl; if (!m_bLock)//如果不锁定调整到底部 { pParam->m_dEl += 0.5 * pParam->dSize[1];//调整到中心 } pParam->m_dRatio = m_dRatio; pParam->m_bCover = m_bCover; pParam->m_bSpart = m_bSprt; pParam->m_nSysSplit = m_nSysSplit; pParam->m_bCenDraw = m_bCenDraw; pParam->m_dFullPer = m_dFullPer; pParam->m_dFullPer2 = m_dFullPer2; _tcscpy(pParam->szNo,m_sNo); _tcscpy(pParam->szMat,m_sMat); _tcscpy(pParam->szFat,m_sFactory); _tcscpy(pParam->szType,m_sKind); CString sSyss; sSyss.Format(_T("%s|%s"), m_sSys,m_sSys2); _tcscpy(pParam->szSys, sSyss); _tcscpy(pParam->szRem,m_sRem); } } void CECableParamDlg::OnBnClickedOk() { UpdateData(); SET_CACHE(CECableParamDlg , %s%s%f%d%d%d%d%f%f%f%s%s%s%s%s%s , m_sW , m_sH , m_dt , m_bCover , m_bSprt , m_bCenDraw , m_nAlign , m_dRatio , m_dEl , m_dFullPer , m_sKind , m_sSys , m_sNo , m_sMat , m_sFactory , m_sRem); m_sSys2.TrimRight(); m_sSys.TrimRight(); if (m_sSys.IsEmpty()) { AfxMessageBox(_T("没有指定桥架分层系统用途!")); return; } if (m_bSprt) { if ( (m_dLeftW - _ttoi(m_sW) ) > 1.e-3 || m_dLeftW < 0) { AfxMessageBox(_T("桥架分层,左侧宽度不合理!")); return; } } if (m_bSprt)//分层 { if (m_sSys2.IsEmpty() || m_sSys.IsEmpty()) { AfxMessageBox(_T("桥架有隔板,但没有指定桥架分层系统用途!")); return; } if (m_sSys2.CompareNoCase(m_sSys) == 0) { AfxMessageBox(_T("桥架有隔板,但桥架分层系统用途相同!")); return; } } OnOK(); } void CECableParamDlg::OnBnClickedCheck2() { UpdateData(); GetDlgItem(IDC_STATIC_U)->SetWindowText(m_bSprt ? _T("左侧系统用途:") : _T("系统用途:")); GetDlgItem(IDC_EDIT11)->EnableWindow(m_bSprt); GetDlgItem(IDC_COMBO10)->EnableWindow(m_bSprt); GetDlgItem(IDC_STATIC_U2)->EnableWindow(m_bSprt); } void CECableParamDlg::OnBnClickedButton1() { UpdateData(); CString sTmp = m_sW; m_sW = m_sH; m_sH = sTmp; UpdateData(FALSE); } void CECableParamDlg::OnBnClickedButton3() { //弹出重置的填充率 CTCCZDlg dlg; dlg.m_dFullPer = m_dFullPer; dlg.m_dFillUsed = m_dUsed1; if (IDOK == dlg.DoModal()) { AcDbEntity *pEnt = NULL; if (Acad::eOk == acdbOpenAcDbEntity(pEnt, m_id, AcDb::kForWrite)) { AecDbCurveBase *pCurBase = AecDbCurveBase::cast(pEnt); if (pCurBase != NULL) { pCurBase->GetSpecialtyData(AcDb::kForWrite)->SetAt(KEY_FILLUSED, dlg.m_dFillUsed); } pEnt->close(); } } } void CECableParamDlg::OnBnClickedButton5() { if (m_bSprt) { //弹出重置的填充率 CTCCZDlg dlg; dlg.m_dFullPer = m_dFullPer2; dlg.m_dFillUsed = m_dUsed2; if (IDOK == dlg.DoModal()) { AcDbEntity *pEnt = NULL; if (Acad::eOk == acdbOpenAcDbEntity(pEnt, m_id, AcDb::kForRead)) { AecDbCurveBase *pCurBase = AecDbCurveBase::cast(pEnt); if (pCurBase != NULL) { pCurBase->GetSpecialtyData(AcDb::kForWrite)->SetAt(KEY_FILLUSED2, dlg.m_dFillUsed); } pEnt->close(); } } } }