319 lines
6.9 KiB
C++
319 lines
6.9 KiB
C++
#include "stdafx.h"
|
|
#include "StdArx.h"
|
|
#include "FZLBDlg.h"
|
|
#include "CoreTools.h"
|
|
|
|
|
|
//填充面板对话框:
|
|
extern bool acedHatchPalletteDialog(const TCHAR* Pattern, bool bAllowCustom, TCHAR*& result);
|
|
DLLIMPEXP CString IDCreate();
|
|
|
|
IMPLEMENT_DYNAMIC(CFZLBDlg, CDialog)
|
|
|
|
int g_nSlabNo = 1;
|
|
CFZLBDlg::CFZLBDlg(CWnd* pParent /*=NULL*/)
|
|
: CDialog(CFZLBDlg::IDD, pParent)
|
|
, m_dT(360.0)
|
|
, m_dBomEl(0.0)
|
|
, m_sMaterial(_T("钢筋混凝土"))
|
|
, m_sPurpose(_T("工业楼板"))
|
|
, m_dWallThick(400.0)
|
|
, m_bOffsetHalfWall(FALSE)
|
|
, m_sNo(_T("B-01"))
|
|
, m_sPatternName(_T(""))
|
|
, m_dAngle(0.0)
|
|
, m_sScale(_T("50.0"))
|
|
, m_bNOSetDefault(TRUE)
|
|
, m_sHatch(HATCH_DEFAULT)
|
|
, m_bAddHatch(TRUE)
|
|
{
|
|
g_nSlabNo++;
|
|
m_sNo.Format(_T("B-%d"),g_nSlabNo);
|
|
|
|
if (m_bNOSetDefault)
|
|
m_sNo = IDCreate();
|
|
|
|
GET_CACHE(CFZLBDlg
|
|
, %f%f%f%s%s%s%d%s
|
|
, &m_dT
|
|
, &m_dBomEl
|
|
, &m_dWallThick
|
|
, &m_sMaterial
|
|
, &m_sPurpose
|
|
, &m_sNo
|
|
, &m_bOffsetHalfWall
|
|
, &m_sHatch );
|
|
}
|
|
|
|
CFZLBDlg::~CFZLBDlg()
|
|
{
|
|
}
|
|
|
|
void CFZLBDlg::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
DDX_Text(pDX, IDC_EDIT1, m_dT);
|
|
DDX_Text(pDX, IDC_EDIT3, m_dBomEl);
|
|
DDX_Text(pDX, IDC_EDIT4, m_dWallThick);
|
|
DDX_Text(pDX, IDC_EDIT2, m_sMaterial);
|
|
DDX_Text(pDX, IDC_EDIT12, m_sPurpose);
|
|
DDX_Text(pDX, IDC_EDIT6, m_sNo);
|
|
DDX_Check(pDX, IDC_CHECK1, m_bOffsetHalfWall);
|
|
DDX_Text(pDX, IDC_EDIT5, m_sPatternName);
|
|
DDX_CBString(pDX, IDC_COMBO3, m_sScale);
|
|
DDX_Text(pDX, IDC_EDIT18, m_dAngle);
|
|
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(CFZLBDlg, CDialog)
|
|
ON_BN_CLICKED(IDOK, &CFZLBDlg::OnBnClickedOk)
|
|
ON_BN_CLICKED(IDC_BUTTON3, &CFZLBDlg::OnBnClickedButton3)
|
|
ON_BN_CLICKED(IDC_BUTTON1, &CFZLBDlg::OnBnClickedButton1)
|
|
ON_BN_CLICKED(IDC_CHECK6, &CFZLBDlg::OnBnClickedCheck6)
|
|
ON_BN_CLICKED(IDC_BTN_FILL, &CFZLBDlg::OnBnClickedBtnFill)
|
|
ON_BN_CLICKED(IDC_CHECK_HATCH, &CFZLBDlg::OnBnClickedCheckHatch)
|
|
END_MESSAGE_MAP()
|
|
|
|
|
|
BOOL CFZLBDlg::OnInitDialog()
|
|
{
|
|
CDialog::OnInitDialog();
|
|
|
|
|
|
if (m_bNOSetDefault)
|
|
{
|
|
GetDlgItem(IDC_EDIT6)->EnableWindow(FALSE);
|
|
}
|
|
|
|
if (m_idSlab.isValid())
|
|
{
|
|
GetDlgItem(IDC_CHECK1)->EnableWindow(FALSE);
|
|
GetDlgItem(IDC_EDIT4)->EnableWindow(FALSE);
|
|
}
|
|
|
|
m_wndBtHatch.EnableWindow(m_bAddHatch);
|
|
|
|
UpdateData(FALSE);
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
void CFZLBDlg::OnBnClickedOk()
|
|
{
|
|
if (!UpdateData(TRUE)) return;
|
|
|
|
SET_CACHE(CFZLBDlg
|
|
, %f%f%f%s%s%s%d%s
|
|
, m_dT
|
|
, m_dBomEl
|
|
, m_dWallThick
|
|
, m_sMaterial
|
|
, m_sPurpose
|
|
, m_sNo
|
|
, m_bOffsetHalfWall
|
|
, m_sHatch);
|
|
|
|
//界面为顶部标高,内部调整为板底标高
|
|
m_dBomEl -= m_dT;
|
|
|
|
// 保护一下楼板类型
|
|
if (m_sPurpose.IsEmpty() || m_sPurpose.Find(_T("楼板")) == -1)
|
|
m_sPurpose += _T("楼板");
|
|
|
|
UpdateSlabData();
|
|
|
|
OnOK();
|
|
}
|
|
|
|
void CFZLBDlg::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);
|
|
}
|
|
|
|
void CFZLBDlg::OnBnClickedButton1()
|
|
{
|
|
|
|
}
|
|
|
|
void CFZLBDlg::OnBnClickedCheck6()
|
|
{
|
|
UpdateData();
|
|
|
|
if (m_bNOSetDefault)
|
|
{
|
|
GetDlgItem(IDC_EDIT6)->EnableWindow(FALSE);
|
|
}
|
|
else
|
|
{
|
|
GetDlgItem(IDC_EDIT6)->EnableWindow(TRUE);
|
|
}
|
|
}
|
|
|
|
void CFZLBDlg::SetFromId(AcDbObjectId& id)
|
|
{
|
|
m_idSlab = id;
|
|
|
|
AcDbEntity* pEnt = NULL;
|
|
if ( Acad::eOk == acdbOpenAcDbEntity(pEnt,id,AcDb::kForWrite))
|
|
{
|
|
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);
|
|
|
|
//界面为顶部标高,调整为顶部标高
|
|
m_dBomEl += m_dT;
|
|
|
|
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_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);
|
|
|
|
pSlab->GetAt(_T("_SLAB_HALF_WALL_"), m_bOffsetHalfWall);
|
|
if (m_bOffsetHalfWall)
|
|
pSlab->GetAt(_T("_HALF_WALL_THICK_"), m_dWallThick);
|
|
|
|
}
|
|
pEnt->close();
|
|
}
|
|
}
|
|
|
|
void CFZLBDlg::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);
|
|
|
|
// 以后的楼板都用此标记来判断
|
|
pSlab->SetAt(AecDbXSlab::KEY_LB_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);
|
|
if (m_bOffsetHalfWall)
|
|
{
|
|
pSlab->SetAt(_T("_SLAB_HALF_WALL_"), TRUE);
|
|
pSlab->SetAt(_T("_HALF_WALL_THICK_"), m_dWallThick);
|
|
}
|
|
else
|
|
{
|
|
pSlab->SetAt(_T("_SLAB_HALF_WALL_"), FALSE);
|
|
}
|
|
|
|
}
|
|
pEnt->close();
|
|
}
|
|
}
|
|
|
|
void CFZLBDlg::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 CFZLBDlg::OnBnClickedCheckHatch()
|
|
{
|
|
UpdateData();
|
|
m_wndBtHatch.EnableWindow(m_bAddHatch);
|
|
if (!m_bAddHatch)
|
|
m_sHatch = HATCH_NO_NEED;
|
|
else
|
|
m_sHatch = HATCH_DEFAULT;
|
|
|
|
UpdateData(FALSE);
|
|
}
|