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

351 lines
8.0 KiB
C++

#include "stdafx.h"
#include "StdArx.h"
#include "SZSXDlg.h"
#include "AecDbEwEquipment.h"
#include "CoreTools.h"
DLLIMPEXP CString IDCreate();
IMPLEMENT_DYNAMIC(CSZSXDlg, CDialog)
CSZSXDlg::CSZSXDlg(CWnd* pParent /*=NULL*/)
: CDialog(CSZSXDlg::IDD, pParent)
, m_dBomEl(0)
, m_dBomThick(400.0)
, m_dH(0.0)
, m_dWallThick(0.0)
, m_bUsePickWalls(FALSE)
, m_nAlign(1)
, m_dHZ(0)
, m_dHZ2(0)
, m_sZFlag(_T(""))
, m_sNO(_T(""))
, m_bNOSetDefault(FALSE)
, m_bAddHatch(TRUE)
, m_sHatch(HATCH_DEFAULT)
{
m_sGradX = _T("0");
m_sGradY = _T("0");
m_sMaterial = _T("钢筋混凝土");
m_sPurpose = _T("过滤池");
m_bHasWalls = false;
GET_CACHE(CSZSXDlg
, %f%f%f%f%f%f%s%s%s%s%s%d%d%s
, &m_dBomEl
, &m_dBomThick
, &m_dH
, &m_dWallThick
, &m_dHZ
, &m_dHZ2
, &m_sGradX
, &m_sGradY
, &m_sMaterial
, &m_sPurpose
, &m_sZFlag
, &m_bUsePickWalls
, &m_nAlign
, &m_sHatch
);
m_nAlign = 1;
m_sNO = IDCreate();
}
CSZSXDlg::~CSZSXDlg()
{
}
void CSZSXDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDIT1, m_dBomEl);
DDX_Text(pDX, IDC_EDIT2, m_dBomThick);
DDX_Text(pDX, IDC_EDIT3, m_dH);
DDX_Text(pDX, IDC_EDIT12, m_dWallThick);
DDX_Text(pDX, IDC_EDIT4, m_dHZ);
DDX_Text(pDX, IDC_EDIT5, m_dHZ2);
DDX_Text(pDX, IDC_EDIT13, m_sGradX);
DDX_Text(pDX, IDC_EDIT14, m_sGradY);
DDX_Text(pDX, IDC_EDIT15, m_sMaterial);
DDX_Text(pDX, IDC_EDIT16, m_sPurpose);
DDX_Text(pDX, IDC_EDIT18, m_sZFlag);
DDX_Check(pDX, IDC_CHECK2, m_bUsePickWalls);
DDX_Radio(pDX, IDC_RADIO1, m_nAlign);
DDX_Text(pDX, IDC_EDIT6, m_sNO);
DDX_Check(pDX, IDC_CHECK5, 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(CSZSXDlg, CDialog)
ON_BN_CLICKED(IDOK, &CSZSXDlg::OnBnClickedOk)
ON_BN_CLICKED(IDC_BUTTON1, &CSZSXDlg::OnBnClickedButton1)
ON_BN_CLICKED(IDC_CHECK5, &CSZSXDlg::OnBnClickedCheck5)
ON_BN_CLICKED(IDC_BTN_FILL, &CSZSXDlg::OnBnClickedBtnFill)
ON_BN_CLICKED(IDC_CHECK_HATCH, &CSZSXDlg::OnBnClickedCheckHatch)
END_MESSAGE_MAP()
BOOL CSZSXDlg::OnInitDialog()
{
CDialog::OnInitDialog();
if (m_bHasWalls)
{
m_bUsePickWalls = TRUE;
m_nAlign = 0;
}
if (m_bNOSetDefault)
{
GetDlgItem(IDC_EDIT6)->EnableWindow(FALSE);
}
m_wndBtHatch.EnableWindow(m_bAddHatch);
UpdateData(FALSE);
return TRUE;
}
void CSZSXDlg::OnBnClickedOk()
{
UpdateData(TRUE);
SET_CACHE(CSZSXDlg
, %f%f%f%f%f%f%s%s%s%s%s%d%d%s
, m_dBomEl
, m_dBomThick
, m_dH
, m_dWallThick
, m_dHZ
, m_dHZ2
, m_sGradX
, m_sGradY
, m_sMaterial
, m_sPurpose
, m_sZFlag
, m_bUsePickWalls
, m_nAlign
, m_sHatch
);
UpdateSlabData();
OnOK();
}
void CSZSXDlg::GetPoolData(PoolData& data) const
{
data.m_dBomEl = m_dBomEl;
//折算为外底部标高
data.m_dBomEl -= m_dBomThick;
data.m_dBomThick = m_dBomThick;
data.m_dWallH = m_dH;
data.m_dWallThick = m_dWallThick;
data.m_dHZ = m_dHZ;
data.m_dHZ2 = m_dHZ2;
_tcscpy(data.m_sGradX,(LPCTSTR)m_sGradX);
_tcscpy(data.m_sGradY,(LPCTSTR)m_sGradY);
_tcscpy(data.m_sMaterial,(LPCTSTR)m_sMaterial);
_tcscpy(data.m_sPurpose,(LPCTSTR)m_sPurpose);
_tcscpy(data.m_szZHFlag,(LPCTSTR)m_sZFlag);
_tcscpy(data.m_szNO,(LPCTSTR)m_sNO);
_tcscpy(data.m_sSectionHatch,(LPCTSTR)m_sHatch);
}
void CSZSXDlg::SetFromId(const AcDbObjectId& id)
{
m_idSlab = id;
AcDbEntity* pEnt = NULL;
if (Acad::eOk == acdbOpenAcDbEntity(pEnt,id,AcDb::kForRead))
{
AecDbXSlab* pSlab = AecDbXSlab::cast(pEnt);
if (pSlab != NULL)
{
pSlab->GetSpecialtyData()->GetAt(KEY_HZ,m_dHZ);
pSlab->GetSpecialtyData()->GetAt(KEY_HZ2,m_dHZ2);
pSlab->GetSpecialtyData()->GetAt(KEY_ZHFS,m_sZFlag);
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_BOMTHICK,m_dBomThick);
pSlab->GetSpecialtyData()->GetAt(KEY_SECTION_HATCH,m_sHatch);
pSlab->GetSpecialtyData()->GetAt(KEY_GRADX, m_sGradX);
pSlab->GetSpecialtyData()->GetAt(KEY_GRADY, m_sGradY);
if (m_sHatch == HATCH_NO_NEED)
m_bAddHatch = FALSE;
else
m_bAddHatch = TRUE;
pSlab->GetSpecialtyData()->GetAt(KEY_USEPICKWALLS,m_bUsePickWalls);
pSlab->GetSpecialtyData()->GetAt(KEY_HEIGHT,m_dH);
pSlab->GetSpecialtyData()->GetAt(KEY_THICK,m_dWallThick);
AcGePoint3d ptCenPos;
pSlab->GetSpecialtyData()->GetAt(KEY_ORGPT,ptCenPos);
m_dBomEl = ptCenPos.z;
m_dBomEl += m_dBomThick;
}
pEnt->close();
}
}
void CSZSXDlg::UpdateSlabData()
{
PoolData data;
GetPoolData(data);
AcDbEntity* pEnt = NULL;
if ( Acad::eOk == acdbOpenAcDbEntity(pEnt,m_idSlab,AcDb::kForWrite))
{
AecDbXSlab* pSlab = AecDbXSlab::cast(pEnt);
if (pSlab != NULL)
{
AcDbLine* pLn = AcDbLine::cast(pSlab->GetBaseCurve());
if (pLn != NULL)
{
AcGePoint3d ptSta = pLn->startPoint();
AcGePoint3d ptEnd = pLn->endPoint();
AcGeVector3d vtDir = ptEnd - ptSta;
if (vtDir.isParallelTo(AcGeVector3d::kZAxis))
{
ptSta.z = data.m_dBomEl;
ptEnd.z = ptSta.z + data.m_dBomThick;
pLn->setStartPoint(ptSta);
pLn->setEndPoint(ptEnd);
pSlab->SetBaseCurve(pLn);
delete pLn;
}
else//截面拉伸底板
{
AcGeLine3d lnSeg(ptSta,ptEnd);
if ( AcGePlane::kXYPlane.isParallelTo(lnSeg) )
{
ptSta.z = data.m_dBomEl;
ptEnd.z = data.m_dBomEl;
pLn->setStartPoint(ptSta);
pLn->setEndPoint(ptEnd);
pSlab->SetBaseCurve(pLn);
delete pLn;
}
}
}
AcGePoint3d ptCenPos;
pSlab->GetSpecialtyData()->GetAt(KEY_ORGPT,ptCenPos);
ptCenPos.z = data.m_dBomEl;
pSlab->GetSpecialtyData()->SetAt(KEY_ORGPT,ptCenPos,TRUE);
pSlab->GetSpecialtyData()->SetAt(KEY_SECTION_HATCH, data.m_sSectionHatch);
pSlab->GetSpecialtyData()->SetAt(KEY_BOMTHICK,data.m_dBomThick);
pSlab->GetSpecialtyData()->SetAt(KEY_USEPICKWALLS,m_bUsePickWalls);
pSlab->GetSpecialtyData()->SetAt(KEY_HEIGHT,data.m_dWallH);
pSlab->GetSpecialtyData()->SetAt(KEY_THICK,data.m_dWallThick);
pSlab->GetSpecialtyData()->SetAt(KEY_MATERIAL,data.m_sMaterial);
pSlab->GetSpecialtyData()->SetAt(KEY_PURPOSE,data.m_sPurpose);
// 下面这3个 KEY,无论将来用或不用,都不要删除,目前靠它来判断底板
pSlab->GetSpecialtyData()->SetAt(KEY_HZ,data.m_dHZ);
pSlab->GetSpecialtyData()->SetAt(KEY_HZ2,data.m_dHZ2);
pSlab->GetSpecialtyData()->SetAt(KEY_ZHFS,data.m_szZHFlag);
// 以后的底板都用此标记来判断
pSlab->SetAt(AecDbXSlab::KEY_DB_Flag, TRUE);
pSlab->GetSpecialtyData()->SetAt(KEY_NO,data.m_szNO);
pSlab->SetAt(KEY_GRADX, data.m_sGradX);
pSlab->SetAt(KEY_GRADY, data.m_sGradY);
int nShape = -1;
pSlab->GetSpecialtyData()->GetAt(KEY_SHAPE,nShape);
ESection eShape = (ESection)nShape;
if (eShape == eUserDef)
{
CString sPl;
pSlab->GetSpecialtyData()->GetAt(KEY_POINTS,sPl);
AcDbPolyline* pPl = CoreTools::StringToPolyline(sPl);
if (pPl != NULL)
{
pPl->setElevation(data.m_dBomEl);
CoreTools::PolylineToString(pPl,sPl);
delete pPl;
}
pSlab->GetSpecialtyData()->SetAt(KEY_POINTS,sPl);
}
}
pEnt->close();
}
}
void CSZSXDlg::OnBnClickedButton1()
{
}
void CSZSXDlg::OnBnClickedCheck5()
{
UpdateData();
if (m_bNOSetDefault)
{
GetDlgItem(IDC_EDIT6)->EnableWindow(FALSE);
}
else
{
GetDlgItem(IDC_EDIT6)->EnableWindow(TRUE);
}
}
extern bool __cdecl acedHatchPalletteDialog(wchar_t const* , bool , wchar_t *&);
void CSZSXDlg::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 CSZSXDlg::OnBnClickedCheckHatch()
{
UpdateData();
m_wndBtHatch.EnableWindow(m_bAddHatch);
if (!m_bAddHatch)
m_sHatch = HATCH_NO_NEED;
else
m_sHatch = HATCH_DEFAULT;
UpdateData(FALSE);
}