344 lines
7.4 KiB
C++
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);
|
|
}
|