Files
envi-code/SourceCode/Code2026/Pool3dCmd/HZGBDlg.cpp
T
2026-09-28 15:28:50 +08:00

344 lines
7.4 KiB
C++

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