Files
gjm 164968b62e chore
把非utf8-bom编码的cpp/h文件改为 utf8 bom 编码, msvc识别utf8编码时,如果不是bom格式的,会使用当前cp_oem来解码.
2026-10-04 00:04:20 +08:00

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