#include "stdafx.h" #include "StdArx.h" #include "SZSXDlg.h" #include "AecDbEwEquipment.h" #include "CoreTools.h" DLLIMPEXP CString IDCreate(); IMPLEMENT_DYNAMIC(CSZSXDlg, CDialog) CSZSXDlg::CSZSXDlg(CWnd* pParent /*=NULL*/) : CDialog(CSZSXDlg::IDD, pParent) , m_dBomEl(0) , m_dBomThick(400.0) , m_dH(0.0) , m_dWallThick(0.0) , m_bUsePickWalls(FALSE) , m_nAlign(1) , m_dHZ(0) , m_dHZ2(0) , m_sZFlag(_T("")) , m_sNO(_T("")) , m_bNOSetDefault(FALSE) , m_bAddHatch(TRUE) , m_sHatch(HATCH_DEFAULT) { m_sGradX = _T("0"); m_sGradY = _T("0"); m_sMaterial = _T("钢筋混凝土"); m_sPurpose = _T("过滤池"); m_bHasWalls = false; GET_CACHE(CSZSXDlg , %f%f%f%f%f%f%s%s%s%s%s%d%d%s , &m_dBomEl , &m_dBomThick , &m_dH , &m_dWallThick , &m_dHZ , &m_dHZ2 , &m_sGradX , &m_sGradY , &m_sMaterial , &m_sPurpose , &m_sZFlag , &m_bUsePickWalls , &m_nAlign , &m_sHatch ); m_nAlign = 1; m_sNO = IDCreate(); } CSZSXDlg::~CSZSXDlg() { } void CSZSXDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Text(pDX, IDC_EDIT1, m_dBomEl); DDX_Text(pDX, IDC_EDIT2, m_dBomThick); DDX_Text(pDX, IDC_EDIT3, m_dH); DDX_Text(pDX, IDC_EDIT12, m_dWallThick); DDX_Text(pDX, IDC_EDIT4, m_dHZ); DDX_Text(pDX, IDC_EDIT5, m_dHZ2); DDX_Text(pDX, IDC_EDIT13, m_sGradX); DDX_Text(pDX, IDC_EDIT14, m_sGradY); DDX_Text(pDX, IDC_EDIT15, m_sMaterial); DDX_Text(pDX, IDC_EDIT16, m_sPurpose); DDX_Text(pDX, IDC_EDIT18, m_sZFlag); DDX_Check(pDX, IDC_CHECK2, m_bUsePickWalls); DDX_Radio(pDX, IDC_RADIO1, m_nAlign); DDX_Text(pDX, IDC_EDIT6, m_sNO); DDX_Check(pDX, IDC_CHECK5, m_bNOSetDefault); DDX_Control(pDX, IDC_BTN_FILL, m_wndBtHatch); DDX_Check(pDX, IDC_CHECK_HATCH, m_bAddHatch); DDX_Text(pDX, IDC_BTN_FILL, m_sHatch); } BEGIN_MESSAGE_MAP(CSZSXDlg, CDialog) ON_BN_CLICKED(IDOK, &CSZSXDlg::OnBnClickedOk) ON_BN_CLICKED(IDC_BUTTON1, &CSZSXDlg::OnBnClickedButton1) ON_BN_CLICKED(IDC_CHECK5, &CSZSXDlg::OnBnClickedCheck5) ON_BN_CLICKED(IDC_BTN_FILL, &CSZSXDlg::OnBnClickedBtnFill) ON_BN_CLICKED(IDC_CHECK_HATCH, &CSZSXDlg::OnBnClickedCheckHatch) END_MESSAGE_MAP() BOOL CSZSXDlg::OnInitDialog() { CDialog::OnInitDialog(); if (m_bHasWalls) { m_bUsePickWalls = TRUE; m_nAlign = 0; } if (m_bNOSetDefault) { GetDlgItem(IDC_EDIT6)->EnableWindow(FALSE); } m_wndBtHatch.EnableWindow(m_bAddHatch); UpdateData(FALSE); return TRUE; } void CSZSXDlg::OnBnClickedOk() { UpdateData(TRUE); SET_CACHE(CSZSXDlg , %f%f%f%f%f%f%s%s%s%s%s%d%d%s , m_dBomEl , m_dBomThick , m_dH , m_dWallThick , m_dHZ , m_dHZ2 , m_sGradX , m_sGradY , m_sMaterial , m_sPurpose , m_sZFlag , m_bUsePickWalls , m_nAlign , m_sHatch ); UpdateSlabData(); OnOK(); } void CSZSXDlg::GetPoolData(PoolData& data) const { data.m_dBomEl = m_dBomEl; //折算为外底部标高 data.m_dBomEl -= m_dBomThick; data.m_dBomThick = m_dBomThick; data.m_dWallH = m_dH; data.m_dWallThick = m_dWallThick; data.m_dHZ = m_dHZ; data.m_dHZ2 = m_dHZ2; _tcscpy(data.m_sGradX,(LPCTSTR)m_sGradX); _tcscpy(data.m_sGradY,(LPCTSTR)m_sGradY); _tcscpy(data.m_sMaterial,(LPCTSTR)m_sMaterial); _tcscpy(data.m_sPurpose,(LPCTSTR)m_sPurpose); _tcscpy(data.m_szZHFlag,(LPCTSTR)m_sZFlag); _tcscpy(data.m_szNO,(LPCTSTR)m_sNO); _tcscpy(data.m_sSectionHatch,(LPCTSTR)m_sHatch); } void CSZSXDlg::SetFromId(const AcDbObjectId& id) { m_idSlab = id; AcDbEntity* pEnt = NULL; if (Acad::eOk == acdbOpenAcDbEntity(pEnt,id,AcDb::kForRead)) { AecDbXSlab* pSlab = AecDbXSlab::cast(pEnt); if (pSlab != NULL) { pSlab->GetSpecialtyData()->GetAt(KEY_HZ,m_dHZ); pSlab->GetSpecialtyData()->GetAt(KEY_HZ2,m_dHZ2); pSlab->GetSpecialtyData()->GetAt(KEY_ZHFS,m_sZFlag); pSlab->GetSpecialtyData()->GetAt(KEY_NO,m_sNO); pSlab->GetSpecialtyData()->GetAt(KEY_MATERIAL,m_sMaterial); pSlab->GetSpecialtyData()->GetAt(KEY_PURPOSE,m_sPurpose); pSlab->GetSpecialtyData()->GetAt(KEY_BOMTHICK,m_dBomThick); pSlab->GetSpecialtyData()->GetAt(KEY_SECTION_HATCH,m_sHatch); pSlab->GetSpecialtyData()->GetAt(KEY_GRADX, m_sGradX); pSlab->GetSpecialtyData()->GetAt(KEY_GRADY, m_sGradY); if (m_sHatch == HATCH_NO_NEED) m_bAddHatch = FALSE; else m_bAddHatch = TRUE; pSlab->GetSpecialtyData()->GetAt(KEY_USEPICKWALLS,m_bUsePickWalls); pSlab->GetSpecialtyData()->GetAt(KEY_HEIGHT,m_dH); pSlab->GetSpecialtyData()->GetAt(KEY_THICK,m_dWallThick); AcGePoint3d ptCenPos; pSlab->GetSpecialtyData()->GetAt(KEY_ORGPT,ptCenPos); m_dBomEl = ptCenPos.z; m_dBomEl += m_dBomThick; } pEnt->close(); } } void CSZSXDlg::UpdateSlabData() { PoolData data; GetPoolData(data); AcDbEntity* pEnt = NULL; if ( Acad::eOk == acdbOpenAcDbEntity(pEnt,m_idSlab,AcDb::kForWrite)) { AecDbXSlab* pSlab = AecDbXSlab::cast(pEnt); if (pSlab != NULL) { AcDbLine* pLn = AcDbLine::cast(pSlab->GetBaseCurve()); if (pLn != NULL) { AcGePoint3d ptSta = pLn->startPoint(); AcGePoint3d ptEnd = pLn->endPoint(); AcGeVector3d vtDir = ptEnd - ptSta; if (vtDir.isParallelTo(AcGeVector3d::kZAxis)) { ptSta.z = data.m_dBomEl; ptEnd.z = ptSta.z + data.m_dBomThick; pLn->setStartPoint(ptSta); pLn->setEndPoint(ptEnd); pSlab->SetBaseCurve(pLn); delete pLn; } else//截面拉伸底板 { AcGeLine3d lnSeg(ptSta,ptEnd); if ( AcGePlane::kXYPlane.isParallelTo(lnSeg) ) { ptSta.z = data.m_dBomEl; ptEnd.z = data.m_dBomEl; pLn->setStartPoint(ptSta); pLn->setEndPoint(ptEnd); pSlab->SetBaseCurve(pLn); delete pLn; } } } AcGePoint3d ptCenPos; pSlab->GetSpecialtyData()->GetAt(KEY_ORGPT,ptCenPos); ptCenPos.z = data.m_dBomEl; pSlab->GetSpecialtyData()->SetAt(KEY_ORGPT,ptCenPos,TRUE); pSlab->GetSpecialtyData()->SetAt(KEY_SECTION_HATCH, data.m_sSectionHatch); pSlab->GetSpecialtyData()->SetAt(KEY_BOMTHICK,data.m_dBomThick); pSlab->GetSpecialtyData()->SetAt(KEY_USEPICKWALLS,m_bUsePickWalls); pSlab->GetSpecialtyData()->SetAt(KEY_HEIGHT,data.m_dWallH); pSlab->GetSpecialtyData()->SetAt(KEY_THICK,data.m_dWallThick); pSlab->GetSpecialtyData()->SetAt(KEY_MATERIAL,data.m_sMaterial); pSlab->GetSpecialtyData()->SetAt(KEY_PURPOSE,data.m_sPurpose); // 下面这3个 KEY,无论将来用或不用,都不要删除,目前靠它来判断底板 pSlab->GetSpecialtyData()->SetAt(KEY_HZ,data.m_dHZ); pSlab->GetSpecialtyData()->SetAt(KEY_HZ2,data.m_dHZ2); pSlab->GetSpecialtyData()->SetAt(KEY_ZHFS,data.m_szZHFlag); // 以后的底板都用此标记来判断 pSlab->SetAt(AecDbXSlab::KEY_DB_Flag, TRUE); pSlab->GetSpecialtyData()->SetAt(KEY_NO,data.m_szNO); pSlab->SetAt(KEY_GRADX, data.m_sGradX); pSlab->SetAt(KEY_GRADY, data.m_sGradY); int nShape = -1; pSlab->GetSpecialtyData()->GetAt(KEY_SHAPE,nShape); ESection eShape = (ESection)nShape; if (eShape == eUserDef) { CString sPl; pSlab->GetSpecialtyData()->GetAt(KEY_POINTS,sPl); AcDbPolyline* pPl = CoreTools::StringToPolyline(sPl); if (pPl != NULL) { pPl->setElevation(data.m_dBomEl); CoreTools::PolylineToString(pPl,sPl); delete pPl; } pSlab->GetSpecialtyData()->SetAt(KEY_POINTS,sPl); } } pEnt->close(); } } void CSZSXDlg::OnBnClickedButton1() { } void CSZSXDlg::OnBnClickedCheck5() { UpdateData(); if (m_bNOSetDefault) { GetDlgItem(IDC_EDIT6)->EnableWindow(FALSE); } else { GetDlgItem(IDC_EDIT6)->EnableWindow(TRUE); } } extern bool __cdecl acedHatchPalletteDialog(wchar_t const* , bool , wchar_t *&); void CSZSXDlg::OnBnClickedBtnFill() { UpdateData(); TCHAR *psz = new TCHAR[1024]; ::memset(psz, 0, sizeof(TCHAR) * 1024); CString sHatch(m_sMaterial); if (!m_sHatch.IsEmpty()) sHatch = m_sHatch; if (acedHatchPalletteDialog(sHatch, false, psz)) { m_sHatch = psz; m_wndBtHatch.SetWindowText(m_sHatch); } delete[] psz; } void CSZSXDlg::OnBnClickedCheckHatch() { UpdateData(); m_wndBtHatch.EnableWindow(m_bAddHatch); if (!m_bAddHatch) m_sHatch = HATCH_NO_NEED; else m_sHatch = HATCH_DEFAULT; UpdateData(FALSE); }