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

181 lines
4.3 KiB
C++

#include "stdafx.h"
#include "JBYCDlg.h"
#include "AecDbX3dPart.h"
#include "UITools.h"
#include "BimInfoDlg.h"
IMPLEMENT_DYNAMIC(CJBYCDlg, CDialog)
CJBYCDlg::CJBYCDlg(CWnd* pParent /*=NULL*/)
: CDialog(CJBYCDlg::IDD, pParent)
, m_dW(1.0)
, m_dH(0.8)
, m_dD(80)
, m_dt(5)
, m_sMaterial(_T("铝合金"))
, m_dSpace(20)
, m_dWallT(0.36)
{
UIDataCache::Read(_T("%d%d%d%d%d%d%d%s"), _T("CJBYCDlg")
, &m_dW , &m_dH , &m_dD
, &m_dt, &m_dt , &m_dSpace,&m_dWallT,&m_sMaterial);
}
CJBYCDlg::~CJBYCDlg()
{
}
void CJBYCDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDIT1, m_dW);
DDX_Text(pDX, IDC_EDIT2, m_dH);
DDX_Text(pDX, IDC_EDIT10, m_dD);
DDX_Text(pDX, IDC_EDIT35, m_dt);
DDX_Text(pDX, IDC_EDIT34, m_sMaterial);
DDX_Text(pDX, IDC_EDIT36, m_dSpace);
DDX_Text(pDX, IDC_EDIT38, m_dWallT);
}
BEGIN_MESSAGE_MAP(CJBYCDlg, CDialog)
ON_BN_CLICKED(IDOK, &CJBYCDlg::OnBnClickedOk)
ON_BN_CLICKED(IDC_BUTTON2, &CJBYCDlg::OnBnClickedButton2)
END_MESSAGE_MAP()
BOOL CJBYCDlg::OnInitDialog()
{
CDialog::OnInitDialog();
UpdateData(FALSE);
CBimInfoDlg::SetDefaultBimInfo(&m_mapBimData,_T("百叶窗"));
return TRUE;
}
void CJBYCDlg::OnBnClickedOk()
{
UpdateData();
if (m_dW < 1.e-3 || m_dH < 1.e-3 || m_dD < 1.e-3 || m_dt < 1.e-3)
{
AfxMessageBox(_T("百叶窗的尺寸输入不正确!请重新输入!"));
return;
}
UIDataCache::Write(_T("%d%d%d%d%d%d%d%s"), _T("CJBYCDlg")
, &m_dW , &m_dH , &m_dD
, &m_dt, &m_dt , &m_dSpace,&m_dWallT,&m_sMaterial);
OnOK();
}
int CJBYCDlg::GetX3dPart(AecDbX3dPart*& pGroup)
{
if (pGroup != NULL)
{
pGroup->RemoveAll3dSolidRec();
}
else
{
pGroup = new AecDbX3dPart;
}
AcGePoint3d ptOrg(0,0,0);
AcGeVector3d vtZ = AcGeVector3d::kZAxis;
AcDbX3dSolid* pXSolid = NULL;
//向外的门,//y 40mm厚 80mm 面宽
//上下左右4个box
double dThick = 0.04;
double dSlabW = 0.08;
ptOrg.z += m_dH / 2.0;
ptOrg.z -= dSlabW * 0.5;
//上
pXSolid = new AcDbX3dSolid;
pXSolid->Create(AcDbX3dSolid::kBox,ptOrg,vtZ,3,m_dW,dThick,dSlabW);
pGroup->AddX3dSolid(pXSolid,AcDb::kBoolUnite);
ptOrg.set(0,0,0);
ptOrg.z -= m_dH / 2.0;
ptOrg.z += dSlabW * 0.5;
//下
pXSolid = new AcDbX3dSolid;
pXSolid->Create(AcDbX3dSolid::kBox,ptOrg,vtZ,3,m_dW,dThick,dSlabW);
pGroup->AddX3dSolid(pXSolid,AcDb::kBoolUnite);
//左
ptOrg.set(0,0,0);
ptOrg.x -= m_dW * 0.5;
ptOrg.x += dSlabW * 0.5;
pXSolid = new AcDbX3dSolid;
pXSolid->Create(AcDbX3dSolid::kBox,ptOrg,vtZ,3,dSlabW,dThick,m_dH);
pGroup->AddX3dSolid(pXSolid,AcDb::kBoolUnite);
//右
ptOrg.set(0,0,0);
ptOrg.x += m_dW * 0.5;
ptOrg.x -= dSlabW * 0.5;
pXSolid = new AcDbX3dSolid;
pXSolid->Create(AcDbX3dSolid::kBox,ptOrg,vtZ,3,dSlabW,dThick,m_dH);
pGroup->AddX3dSolid(pXSolid,AcDb::kBoolUnite);
int nCount = (int)( (m_dH - 2.0 * dSlabW) / ( AS_MUNIT(m_dD) + AS_MUNIT(m_dSpace) ) );//间隙40mm
ptOrg.set(0,0,0);
ptOrg.z -= m_dH / 2.0;
//ptOrg.x -= m_dW / 2.0;
//ptOrg.x += dSlabW;
ptOrg.z += dSlabW;
ptOrg.z += AS_MUNIT(m_dSpace);
vtZ.rotateBy(PI / 6.0,AcGeVector3d::kXAxis);
for (int i = 0;i <= nCount;i++)
{
pXSolid = new AcDbX3dSolid;
pXSolid->Create(AcDbX3dSolid::kBox,ptOrg,vtZ,3,m_dW - 2.0 * dSlabW,AS_MUNIT(m_dt),AS_MUNIT(m_dD));
pGroup->AddX3dSolid(pXSolid,AcDb::kBoolUnite);
ptOrg.z += dSlabW;
ptOrg.z += AS_MUNIT(m_dSpace);
}
//总挖洞
// ptOrg.set(0,0,0);
// pXSolid = new AcDbX3dSolid;
// vtZ = AcGeVector3d::kZAxis;
// pXSolid->Create(AcDbX3dSolid::kBox,ptOrg,vtZ,3,m_dW,m_dWallT,m_dH);
// pGroup->AddX3dSolid(pXSolid,AcDb::kBoolSubtract);
ptOrg.set(0,0,0);
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_dH"),m_dH);
pGroup->GetSpecialtyData()->SetAt(_T("m_dD"),m_dD);
pGroup->GetSpecialtyData()->SetAt(_T("m_dt"),m_dt);
pGroup->GetSpecialtyData()->SetAt(_T("m_dSpace"),m_dSpace);
pGroup->GetSpecialtyData()->SetAt(_T("m_dWallT"),m_dWallT);
pGroup->GetSpecialtyData()->SetAt(_T("m_sMaterial"),m_sMaterial);
pGroup->GetSpecialtyData()->SetAt(_T("BIMDATA"),1,m_mapBimData);
return TRUE;
return 0;
}
void CJBYCDlg::OnBnClickedButton2()
{
CBimInfoDlg::ShowBimInfo(&m_mapBimData,_T("百叶窗"));
}