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

183 lines
4.2 KiB
C++

#include "stdafx.h"
#include "TJSJDlg.h"
#include "AecDbEarthWorm.h"
#include "KTCADUtilityEx.h"
#include "AcDbX3dSolid.h"
#include "AecDbX3dPart.h"
#include "UITools.h"
#include "BimInfoDlg.h"
IMPLEMENT_DYNAMIC(CTJSJDlg, CDialog)
CTJSJDlg::CTJSJDlg(CWnd* pParent /*=NULL*/)
: CDialog(CTJSJDlg::IDD, pParent)
, m_nShape(0)
, m_dH(3.0)
, m_dW(4.0)
, m_dL(4.0)
, m_dT(0.24)
, m_dX(6.0)
, m_dS(0.4)
{
UIDataCache::Read(_T("%i%d%d%d%d%d%s"), _T("CTJSJDlg")
, &m_nShape
, &m_dH , &m_dW , &m_dL , &m_dT , &m_dX
, &m_sCrossSectionScr);
}
CTJSJDlg::~CTJSJDlg()
{
}
void CTJSJDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Radio(pDX, IDC_RADIO1, m_nShape);
DDX_Text(pDX, IDC_EDIT1, m_dH);
DDX_Text(pDX, IDC_EDIT2, m_dW);
DDX_Text(pDX, IDC_EDIT10, m_dL);
DDX_Text(pDX, IDC_EDIT34, m_dT);
DDX_Text(pDX, IDC_EDIT36, m_dX);
DDX_Control(pDX, IDC_EDIT10, m_wndL);
DDX_Control(pDX, IDC_STATIC_W, m_wndStaticW);
DDX_Text(pDX, IDC_EDIT35, m_dS);
}
BEGIN_MESSAGE_MAP(CTJSJDlg, CDialog)
ON_BN_CLICKED(IDC_RADIO1, &CTJSJDlg::OnBnClickedRadio1)
ON_BN_CLICKED(IDC_RADIO2, &CTJSJDlg::OnBnClickedRadio2)
ON_BN_CLICKED(IDOK, &CTJSJDlg::OnBnClickedOk)
ON_BN_CLICKED(IDC_BUTTON1, &CTJSJDlg::OnBnClickedButton1)
END_MESSAGE_MAP()
void CTJSJDlg::OnBnClickedRadio1()
{
UpdateData();
if (m_nShape == 0)
{
m_wndStaticW.SetWindowText(_T("竖井宽度 W:"));
m_wndL.EnableWindow(TRUE);
}
}
void CTJSJDlg::OnBnClickedRadio2()
{
UpdateData();
if (m_nShape == 1)
{
m_wndStaticW.SetWindowText(_T("竖井外径 W:"));
m_wndL.EnableWindow(FALSE);
}
}
BOOL CTJSJDlg::OnInitDialog()
{
CDialog::OnInitDialog();
UpdateData(FALSE);
if (m_nShape == 0)
OnBnClickedRadio1();
else
OnBnClickedRadio2();
CBimInfoDlg::SetDefaultBimInfo(&m_mapBimData,_T("竖井"));
return TRUE;
}
void CTJSJDlg::OnBnClickedOk()
{
UpdateData();
if (m_dH < 0.2 || m_dW < 0.1 || m_dL < 0.1)
{
AfxMessageBox(_T("竖井尺寸太小!请重新输入参数!"));
}
UIDataCache::Write(_T("%i%d%d%d%d%d%s"), _T("CTJSJDlg")
, &m_nShape
, &m_dH , &m_dW , &m_dL , &m_dT , &m_dX
, &m_sCrossSectionScr);
OnOK();
}
extern void GetEarthWormHeightWidthAndThick(LPCTSTR pszCrossSectionScr,AcGePoint2d& ptHW,AcGePoint2d& ptOIW);
int CTJSJDlg::GetX3dPart(AecDbX3dPart*& pPart)
{
AcGePoint2d ptHW,ptOIW;
GetEarthWormHeightWidthAndThick(m_sCrossSectionScr,ptHW,ptOIW);
double dHeight = ptHW.x;
double dWidth = ptHW.y;
double dOutW = ptOIW.x;
double dIntW = ptOIW.y;
if (pPart != NULL)
{
pPart->RemoveAll3dSolidRec();
}
else
{
pPart = new AecDbX3dPart;
}
AcGePoint3d ptOrg;
ptOrg.set(m_dX,0,dHeight * 0.5);
AcGeVector3d vtZ = AcGeVector3d::kZAxis;
ptOrg.z += m_dH * 0.5;
AcDbX3dSolid* pXSolid = NULL;
if (m_nShape == 0)
{
//L,W,t,H 长宽,厚度
pXSolid = new AcDbX3dSolid;
pXSolid->Create(AcDbX3dSolid::kRectTube, ptOrg, vtZ, 4, m_dL, m_dW, m_dT, m_dH);
pPart->AddX3dSolid(pXSolid,AcDb::kBoolUnite);
ptOrg.set(m_dX,0,dHeight * 0.5);
ptOrg.z -= 0.5 * m_dS;
pXSolid = new AcDbX3dSolid;
pXSolid->Create(AcDbX3dSolid::kBox, ptOrg, vtZ, 3, m_dL - 2 * m_dT, m_dW - 2 * m_dT, m_dS);
pPart->AddX3dSolid(pXSolid,AcDb::kBoolSubtract,true);
}
else
{
////r,t,H
pXSolid = new AcDbX3dSolid;
pXSolid->Create(AcDbX3dSolid::kPipe, ptOrg, vtZ, 3, m_dW * 0.5, m_dT, m_dH);
pPart->AddX3dSolid(pXSolid,AcDb::kBoolUnite);
pXSolid = new AcDbX3dSolid;
pXSolid->Create(AcDbX3dSolid::kPipe, ptOrg, vtZ, 3, (m_dW - 2.0 * m_dT) * 0.5, m_dT, m_dH);
pPart->AddX3dSolid(pXSolid,AcDb::kBoolSubtract,true);
}
pPart->SetOrgPoint( ptOrg );
pPart->SetAxis(X,AcGeVector3d::kXAxis);
pPart->SetAxis(Y,AcGeVector3d::kYAxis);
pPart->SetAxis(Z,AcGeVector3d::kZAxis);
//序列化BIM数据
pPart->GetSpecialtyData()->SetAt(_T("m_dH"),m_dH);
pPart->GetSpecialtyData()->SetAt(_T("m_dW"),m_dW);
pPart->GetSpecialtyData()->SetAt(_T("m_dL"),m_dL);
pPart->GetSpecialtyData()->SetAt(_T("m_dT"),m_dT);
pPart->GetSpecialtyData()->SetAt(_T("m_dX"),m_dX);
pPart->GetSpecialtyData()->SetAt(_T("m_nShape"),m_nShape);
pPart->GetSpecialtyData()->SetAt(_T("m_sCrossSectionScr"),m_sCrossSectionScr);
pPart->GetSpecialtyData()->SetAt(_T("BIMDATA"),1,m_mapBimData);
return TRUE;
}
void CTJSJDlg::OnBnClickedButton1()
{
CBimInfoDlg::ShowBimInfo(&m_mapBimData,_T("竖井"));
}