#include "stdafx.h" #include "StdArx.h" #include "HZGBDlg.h" #include "CoreTools.h" //填充面板对话框: extern bool acedHatchPalletteDialog(const TCHAR* Pattern, bool bAllowCustom, TCHAR*& result); DLLIMPEXP CString IDCreate(); IMPLEMENT_DYNAMIC(CHZGBDlg, CDialog) int g_nGSlabNo = 1; CHZGBDlg::CHZGBDlg(CWnd* pParent/* = NULL*/) : CDialog(CHZGBDlg::IDD, pParent) , m_dW(500) , m_dT(10.0) , m_dBomEl(0.0) , m_sMaterial(_T("玻璃盖板")) , m_sPurpose(_T("出水")) , m_dXAngle(0.0) , m_dYAngle(0.0) , m_sPatternName(_T("ANGLE")) , m_dAngle(0.0) , m_sScale(_T("50.0")) , m_sNo(_T("GB-001")) , m_bNOSetDefault(TRUE) , m_sHatch(HATCH_DEFAULT) , m_bAddHatch(TRUE) { m_nColor = 4; g_nGSlabNo++; m_sNo.Format(_T("GB-%d"),g_nGSlabNo); if (m_bNOSetDefault) { m_sNo = IDCreate(); } GET_CACHE(CHZGBDlg , %f%f%f%f%f%f%s%s%s%s%s%s , &m_dW , &m_dT , &m_dBomEl , &m_dXAngle , &m_dYAngle , &m_dAngle , &m_sMaterial , &m_sPurpose , &m_sPatternName , &m_sScale , &m_sNo , &m_sHatch); } CHZGBDlg::~CHZGBDlg(void) { } void CHZGBDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Text(pDX, IDC_EDIT15, m_dW); DDX_Text(pDX, IDC_EDIT1, m_dT); DDX_Text(pDX, IDC_EDIT3, m_dBomEl); DDX_Text(pDX, IDC_EDIT13, m_dXAngle); DDX_Text(pDX, IDC_EDIT14, m_dYAngle); DDX_Text(pDX, IDC_EDIT5, m_dAngle); DDX_Text(pDX, IDC_EDIT2, m_sMaterial); DDX_Text(pDX, IDC_EDIT12, m_sPurpose); DDX_Text(pDX, IDC_EDIT4, m_sPatternName); DDX_CBString(pDX, IDC_COMBO1, m_sScale); DDX_Text(pDX, IDC_EDIT6, m_sNo); DDX_Check(pDX, IDC_CHECK6, 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(CHZGBDlg, CDialog) ON_BN_CLICKED(IDOK, &CHZGBDlg::OnBnClickedOk) ON_BN_CLICKED(IDC_BUTTON2, &CHZGBDlg::OnBnClickedButton2) ON_BN_CLICKED(IDC_BUTTON3, &CHZGBDlg::OnBnClickedButton3) ON_BN_CLICKED(IDC_STATIC_COLOR, &CHZGBDlg::OnStaticColor) ON_WM_CTLCOLOR() ON_BN_CLICKED(IDC_CHECK6, &CHZGBDlg::OnBnClickedCheck6) ON_BN_CLICKED(IDC_BTN_FILL, &CHZGBDlg::OnBnClickedBtnFill) ON_BN_CLICKED(IDC_CHECK_HATCH, &CHZGBDlg::OnBnClickedCheckHatch) END_MESSAGE_MAP() BOOL CHZGBDlg::OnInitDialog() { CDialog::OnInitDialog(); if (m_bNOSetDefault) { GetDlgItem(IDC_EDIT6)->EnableWindow(FALSE); } if (m_idSlab.isValid()) { GetDlgItem(IDC_EDIT15)->EnableWindow(FALSE); } m_wndBtHatch.EnableWindow(m_bAddHatch); UpdateData(FALSE); return TRUE; } void CHZGBDlg::OnBnClickedOk() { UpdateData(); // 保护一下盖板类型 if (m_sPurpose.IsEmpty() || m_sPurpose.Find(_T("盖板")) == -1) m_sPurpose += _T("盖板"); UpdateData(FALSE); SET_CACHE(CHZGBDlg , %f%f%f%f%f%f%s%s%s%s%s%s , m_dW , m_dT , m_dBomEl , m_dXAngle , m_dYAngle , m_dAngle , m_sMaterial , m_sPurpose , m_sPatternName , m_sScale , m_sNo , m_sHatch); UpdateSlabData(); OnOK(); } void CHZGBDlg::OnStaticColor() { UpdateData(); acedSetColorDialog(m_nColor, Adesk::kFalse, m_nColor); Invalidate(); UpdateData(FALSE); } void CHZGBDlg::OnBnClickedButton2() { //选择标高文字或者基本构件 } void CHZGBDlg::OnBnClickedButton3() { UpdateData(); LPCTSTR pszPattern = _T("ANSI32"); #ifdef ZWCAD TCHAR* pszReslt = new TCHAR; #else TCHAR* pszReslt = NULL; #endif if ( acedHatchPalletteDialog(pszPattern,true,pszReslt) ) { m_sPatternName = pszReslt; UpdateData(FALSE); } DELETE_PTR(pszReslt); } HBRUSH CHZGBDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); if (nCtlColor == CTLCOLOR_STATIC) { if (pWnd != NULL && pWnd->GetDlgCtrlID() == IDC_STATIC_COLOR) { COLORREF crColor = RGB(255, 255, 255); if (m_nColor == 256) { crColor = RGB(255, 255, 255); } else { crColor = acedGetRGB(m_nColor); } CRect rc; pWnd->GetClientRect(rc); pDC->FillSolidRect(rc, crColor); } } return hbr; } void CHZGBDlg::OnBnClickedCheck6() { if (m_bNOSetDefault) { GetDlgItem(IDC_EDIT6)->EnableWindow(FALSE); } else { GetDlgItem(IDC_EDIT6)->EnableWindow(TRUE); } } void CHZGBDlg::SetFromId(AcDbObjectId& id) { m_idSlab = id; AcDbEntity* pEnt = NULL; if (Acad::eOk == acdbOpenAcDbEntity(pEnt,id,AcDb::kForRead)) { AecDbXSlab* pSlab = AecDbXSlab::cast(pEnt); if (pSlab != NULL) { AcGePoint3d ptCenPos; pSlab->GetSpecialtyData()->GetAt(KEY_ORGPT,ptCenPos); m_dBomEl = ptCenPos.z; pSlab->GetSpecialtyData()->GetAt(KEY_BOMTHICK,m_dT); pSlab->GetSpecialtyData()->GetAt(KEY_NO,m_sNo); pSlab->GetSpecialtyData()->GetAt(_T("COLOR"),m_nColor); pSlab->GetSpecialtyData()->GetAt(KEY_MATERIAL,m_sMaterial); pSlab->GetSpecialtyData()->GetAt(KEY_PURPOSE,m_sPurpose); pSlab->GetSpecialtyData()->GetAt(KEY_PATTERN,m_sPatternName); pSlab->GetSpecialtyData()->GetAt(KEY_PATTERNANG,m_dAngle); pSlab->GetSpecialtyData()->GetAt(KEY_SECTION_HATCH, m_sHatch); if (m_sHatch == HATCH_NO_NEED) m_bAddHatch = FALSE; else m_bAddHatch = TRUE; double dScale = 1.0; pSlab->GetSpecialtyData()->GetAt(KEY_PATTERNSCA,dScale); m_sScale.Format(_T("%.1f"),dScale); } pEnt->close(); } } void CHZGBDlg::UpdateSlabData() { AcDbEntity* pEnt = NULL; if ( Acad::eOk == acdbOpenAcDbEntity(pEnt,m_idSlab,AcDb::kForWrite)) { AecDbXSlab* pSlab = AecDbXSlab::cast(pEnt); if (pSlab != NULL) { AcGePoint3d ptCenPos; pSlab->GetSpecialtyData()->GetAt(KEY_ORGPT,ptCenPos); CString sPl; pSlab->GetSpecialtyData()->GetAt(KEY_POINTS,sPl); AcDbPolyline* pPl = CoreTools::StringToPolyline(sPl); if (pPl != NULL) { pPl->setElevation(m_dBomEl); CoreTools::PolylineToString(pPl,sPl); delete pPl; } //仅仅改变厚度和标高,Region不变 //ptCenPos.z = 0.0; //pSlab->SetRegionSlab(sPl,m_dT,m_dBomEl,ptCenPos); AcDbLine* pLn = AcDbLine::cast(pSlab->GetBaseCurve()); if (pLn != NULL) { AcGePoint3d ptSta = pLn->startPoint(); AcGePoint3d ptEnd = pLn->endPoint(); ptSta.z = m_dBomEl; ptEnd.z = ptSta.z + m_dT; pLn->setStartPoint(ptSta); pLn->setEndPoint(ptEnd); pSlab->SetBaseCurve(pLn); delete pLn; } AcGePoint3d pt = ptCenPos; pt.z = m_dBomEl; pSlab->GetSpecialtyData()->SetAt(KEY_ORGPT,pt,TRUE); pSlab->GetSpecialtyData()->SetAt(KEY_POINTS,sPl); pSlab->GetSpecialtyData()->SetAt(KEY_BOMTHICK,m_dT); // 这个 _T("COLOR") KEY,无论将来用或不用,都不要删除,目前靠它来判断盖板 pSlab->GetSpecialtyData()->SetAt(_T("COLOR"),m_nColor); // 以后的盖板都用此标记来判断 pSlab->SetAt(AecDbXSlab::KEY_GB_Flag, TRUE); pSlab->GetSpecialtyData()->SetAt(KEY_NO,m_sNo); pSlab->GetSpecialtyData()->SetAt(KEY_2DSTYLE,2); pSlab->GetSpecialtyData()->SetAt(KEY_MATERIAL,m_sMaterial); pSlab->GetSpecialtyData()->SetAt(KEY_PURPOSE,m_sPurpose); pSlab->SetHatch(m_sPatternName,m_dAngle,_ttof(m_sScale)); pSlab->GetSpecialtyData()->SetAt(KEY_SECTION_HATCH, m_sHatch); } pEnt->close(); } } void CHZGBDlg::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 CHZGBDlg::OnBnClickedCheckHatch() { UpdateData(); m_wndBtHatch.EnableWindow(m_bAddHatch); if (!m_bAddHatch) m_sHatch = HATCH_NO_NEED; else m_sHatch = HATCH_DEFAULT; UpdateData(FALSE); }