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

171 lines
3.7 KiB
C++

#include "stdafx.h"
#include "JSJDlg.h"
#include "AcDbX3dSolid.h"
#include "AecDbX3dGroup.h"
#include "AecDbEarthWorm.h"
#include "UITools.h"
#include "BimInfoDlg.h"
extern CString IDCreate();
IMPLEMENT_DYNAMIC(CJSJDlg, CDialog)
CJSJDlg::CJSJDlg(CWnd* pParent /*=NULL*/)
: CDialog(CJSJDlg::IDD, pParent)
, m_dW(1.2)
, m_dD(1.5)
, m_dT(0.4)
, m_dX(5.0)
, m_dY(0.0)
, m_dL(1.2)
{
UIDataCache::Read(_T("%d%d%d%d%d%s"), _T("CJSJDlg")
, &m_dW , &m_dD , &m_dT , &m_dX , &m_dY
, &m_sCrossSectionScr);
}
CJSJDlg::~CJSJDlg()
{
}
void CJSJDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDIT3, m_dW);
DDX_Text(pDX, IDC_EDIT4, m_dD);
DDX_Text(pDX, IDC_EDIT5, m_dT);
DDX_Text(pDX, IDC_EDIT1, m_dX);
DDX_Text(pDX, IDC_EDIT6, m_dY);
DDX_Text(pDX, IDC_EDIT7, m_dL);
}
BEGIN_MESSAGE_MAP(CJSJDlg, CDialog)
ON_BN_CLICKED(IDOK, &CJSJDlg::OnBnClickedOk)
ON_BN_CLICKED(IDC_BUTTON1, &CJSJDlg::OnBnClickedButton1)
END_MESSAGE_MAP()
BOOL CJSJDlg::OnInitDialog()
{
CDialog::OnInitDialog();
if (m_dL < 0.3)
m_dL = m_dW;
UpdateData(FALSE);
CBimInfoDlg::SetDefaultBimInfo(&m_mapBimData,_T("集水井"));
return TRUE;
}
void CJSJDlg::OnBnClickedOk()
{
UpdateData();
if (m_dW < 0.3 || m_dT < 0.1 || m_dD < 0.3 || m_dL < 0.3)
{
AfxMessageBox(_T("集水井尺寸太小!请重新输入尺寸!"));
return;
}
UIDataCache::Write(_T("%d%d%d%d%d%s"), _T("CJSJDlg")
, &m_dW , &m_dD , &m_dT , &m_dX , &m_dY
, &m_sCrossSectionScr);
OnOK();
}
int CJSJDlg::GetX3dSolidRecs( AecDbX3dGroup*& pGroup)
{
//_T("RECT:3900x3600|2900x3600|400x300|EXT:...");//EXT为扩充字段
AecDbEarthWorm worm;
worm.SetCrossSectionScr(m_sCrossSectionScr);
worm.SetChamferInter(100.0);
ESection eType = eRect;
AcGePoint2dArray arDatas;
eType = worm.ExtractEarthWormScr(arDatas);
//外壁厚,内隔壁厚
double dOutW = 0.0,dIntW = 0.0;
if (arDatas.length() > 0)
{
dOutW = arDatas.last().x;
dIntW = arDatas.last().y;
}
//总高度
double dHeight = arDatas.first().y;
dHeight += 2 * arDatas.last().x;
//总宽度
double dWidth = 0.0;
for (int i = 0;i < arDatas.length()-1;i++)
{
dWidth += arDatas.at(i).x;
}
dWidth += (arDatas.length() - 2) * dIntW;
dWidth += dOutW * 2.0;
if (pGroup != NULL)
{
pGroup->RemoveAll3dSolidRec();
}
else
{
pGroup = new AecDbX3dGroup;
}
AcGePoint3d ptOrg;
ptOrg.x = m_dX;
ptOrg.y = 0.5 * dWidth - m_dY - 0.5 * (m_dW + 2 * m_dT);
ptOrg.z = -dHeight * 0.5 - ( m_dD + m_dT ) * 0.5;
AcGeVector3d vtZ = AcGeVector3d::kZAxis;
AcDbX3dSolid* pXSolid = NULL;
pXSolid = new AcDbX3dSolid;
pXSolid->Create(AcDbX3dSolid::kBox,ptOrg,vtZ,4,m_dW + m_dT * 2.0,m_dL + m_dT * 2.0,m_dD + m_dT );
X3dSolidRec rec;
rec.pXSolid = pXSolid;
rec.bType = AcDb::kBoolUnite;
_tcscpy(rec.szLockId,IDCreate());
pGroup->AddX3dSolidRec(rec);
ptOrg.z = -dHeight * 0.5 - m_dD * 0.5;
pXSolid = new AcDbX3dSolid;
pXSolid->Create(AcDbX3dSolid::kBox,ptOrg,vtZ,4,m_dW,m_dL,m_dD);
rec.pXSolid = pXSolid;
rec.bType = AcDb::kBoolSubtract;
_tcscpy(rec.szLockId,IDCreate());
pGroup->AddX3dSolidRec(rec);
pGroup->SetOrgPoint( ptOrg );
pGroup->SetAxis(X,AcGeVector3d::kXAxis);
pGroup->SetAxis(Y,AcGeVector3d::kYAxis);
pGroup->SetAxis(Z,AcGeVector3d::kZAxis);
//序列化BIM数据
pGroup->GetSpecialtyData()->SetAt(_T("m_dW"),m_dW);
pGroup->GetSpecialtyData()->SetAt(_T("m_dL"),m_dL);
pGroup->GetSpecialtyData()->SetAt(_T("m_dD"),m_dD);
pGroup->GetSpecialtyData()->SetAt(_T("m_dT"),m_dT);
pGroup->GetSpecialtyData()->SetAt(_T("m_dX"),m_dX);
pGroup->GetSpecialtyData()->SetAt(_T("m_dY"),m_dY);
pGroup->GetSpecialtyData()->SetAt(_T("m_sCrossSectionScr"),m_sCrossSectionScr);
pGroup->GetSpecialtyData()->SetAt(_T("BIMDATA"),1,m_mapBimData);
return 1;
}
void CJSJDlg::OnBnClickedButton1()
{
CBimInfoDlg::ShowBimInfo(&m_mapBimData,_T("集水井"));
}