214 lines
5.4 KiB
C++
214 lines
5.4 KiB
C++
#include "stdafx.h"
|
|
#include "CRMCDlg.h"
|
|
#include "AcDbX3dSolid.h"
|
|
#include "AecDbX3dPart.h"
|
|
#include "UITools.h"
|
|
#include "BimInfoDlg.h"
|
|
|
|
IMPLEMENT_DYNAMIC(CCRMCDlg, CDialog)
|
|
|
|
CCRMCDlg::CCRMCDlg(CWnd* pParent /*=NULL*/)
|
|
: CDialog(CCRMCDlg::IDD, pParent)
|
|
, m_dW(1.2)
|
|
, m_dH(2.4)
|
|
, m_dT(0.4)
|
|
, m_nKind(0)
|
|
{
|
|
UIDataCache::Read(_T("%d%d%d%i"), _T("CCRMCDlg")
|
|
, &m_dW , &m_dH , &m_dT
|
|
, &m_nKind);
|
|
}
|
|
|
|
CCRMCDlg::~CCRMCDlg()
|
|
{
|
|
}
|
|
|
|
void CCRMCDlg::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
DDX_Text(pDX, IDC_EDIT1, m_dW);
|
|
DDX_Text(pDX, IDC_EDIT3, m_dH);
|
|
DDX_Text(pDX, IDC_EDIT4, m_dT);
|
|
DDX_Radio(pDX, IDC_RADIO1, m_nKind);
|
|
}
|
|
|
|
BEGIN_MESSAGE_MAP(CCRMCDlg, CDialog)
|
|
ON_BN_CLICKED(IDOK, &CCRMCDlg::OnBnClickedOk)
|
|
ON_BN_CLICKED(IDC_BUTTON1, &CCRMCDlg::OnBnClickedButton1)
|
|
END_MESSAGE_MAP()
|
|
|
|
|
|
BOOL CCRMCDlg::OnInitDialog()
|
|
{
|
|
CDialog::OnInitDialog();
|
|
|
|
UpdateData(FALSE);
|
|
|
|
CBimInfoDlg::SetDefaultBimInfo(&m_mapBimData,_T("门窗"));
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
int CCRMCDlg::GetX3dPart(AecDbX3dPart*& pGroup)
|
|
{
|
|
if (pGroup != NULL)
|
|
{
|
|
pGroup->RemoveAll3dSolidRec();
|
|
}
|
|
else
|
|
{
|
|
pGroup = new AecDbX3dPart;
|
|
}
|
|
|
|
AcGePoint3d ptOrg(0,0,0);
|
|
AcGeVector3d vtZ = AcGeVector3d::kZAxis;
|
|
|
|
//向外的门,//y 40mm厚 100mm 面宽
|
|
//上下左右4个box
|
|
double dThick = 0.04;
|
|
double dSlabW = 0.1;
|
|
|
|
ptOrg.z += m_dH / 2.0;
|
|
ptOrg.z -= dSlabW * 0.5;
|
|
|
|
//上
|
|
AcDbX3dSolid* 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);
|
|
|
|
//中间
|
|
if (m_nKind == 0)
|
|
{
|
|
ptOrg.set(0,0,0);
|
|
pXSolid = new AcDbX3dSolid;
|
|
pXSolid->Create(AcDbX3dSolid::kBox,ptOrg,vtZ,3,(m_dW - 2.0 * dSlabW),dThick,dSlabW);
|
|
pGroup->AddX3dSolid(pXSolid,AcDb::kBoolUnite);
|
|
}
|
|
else
|
|
{
|
|
ptOrg.set(0,0,0);
|
|
pXSolid = new AcDbX3dSolid;
|
|
pXSolid->Create(AcDbX3dSolid::kBox,ptOrg,vtZ,3,(m_dW - 2.0 * dSlabW),dThick,0.5 * dSlabW);
|
|
pGroup->AddX3dSolid(pXSolid,AcDb::kBoolUnite);
|
|
|
|
pXSolid = new AcDbX3dSolid;
|
|
pXSolid->Create(AcDbX3dSolid::kBox,ptOrg,vtZ,3,0.5 * dSlabW,dThick,m_dH);
|
|
pGroup->AddX3dSolid(pXSolid,AcDb::kBoolUnite);
|
|
}
|
|
|
|
//开洞,左右挖掉
|
|
ptOrg.set(0,0,0);
|
|
ptOrg.y -= ( ( m_dT - dThick) / 4.0 + dThick / 2.0 );
|
|
ptOrg.z += dSlabW / 2.0;
|
|
ptOrg.z += (m_dH - dSlabW) / 4.0;
|
|
|
|
pXSolid = new AcDbX3dSolid;
|
|
pXSolid->Create(AcDbX3dSolid::kBox,ptOrg,vtZ,3,m_dW,( m_dT - dThick) / 2.0, ( m_dH - dSlabW) / 2.0 );
|
|
pGroup->AddX3dSolid(pXSolid,AcDb::kBoolSubtract,true);
|
|
|
|
ptOrg.set(0,0,0);
|
|
ptOrg.y += ( ( m_dT - dThick) / 4.0 + dThick / 2.0 );
|
|
ptOrg.z += dSlabW / 2.0;
|
|
ptOrg.z += (m_dH - dSlabW) / 4.0;
|
|
|
|
pXSolid = new AcDbX3dSolid;
|
|
pXSolid->Create(AcDbX3dSolid::kBox,ptOrg,vtZ,3,m_dW,( m_dT - dThick) / 2.0, ( m_dH - dSlabW) / 2.0 );
|
|
pGroup->AddX3dSolid(pXSolid,AcDb::kBoolSubtract,true);
|
|
|
|
ptOrg.set(0,0,0);
|
|
ptOrg.y += ( ( m_dT - dThick) / 4.0 + dThick / 2.0 );
|
|
ptOrg.z -= dSlabW / 2.0;
|
|
ptOrg.z -= (m_dH - dSlabW) / 4.0;
|
|
|
|
pXSolid = new AcDbX3dSolid;
|
|
pXSolid->Create(AcDbX3dSolid::kBox,ptOrg,vtZ,3,m_dW,( m_dT - dThick) / 2.0,( m_dH - dSlabW) / 2.0 );
|
|
pGroup->AddX3dSolid(pXSolid,AcDb::kBoolSubtract,true);
|
|
|
|
ptOrg.set(0,0,0);
|
|
ptOrg.y -= ( ( m_dT - dThick) / 4.0 + dThick / 2.0 );
|
|
ptOrg.z -= dSlabW / 2.0;
|
|
ptOrg.z -= (m_dH - dSlabW) / 4.0;
|
|
|
|
pXSolid = new AcDbX3dSolid;
|
|
pXSolid->Create(AcDbX3dSolid::kBox,ptOrg,vtZ,3,m_dW,( m_dT - dThick) / 2.0,( m_dH - dSlabW) / 2.0 );
|
|
pGroup->AddX3dSolid(pXSolid,AcDb::kBoolSubtract,true);
|
|
|
|
//中间左右再挖一些
|
|
// ptOrg.set(0,0,0);
|
|
// ptOrg.y += ( ( m_dT - dThick) / 4.0 + dThick / 2.0 );
|
|
// ptOrg.y += ( m_dT - dThick) / 4.0;
|
|
// pXSolid = new AcDbX3dSolid;
|
|
// pXSolid->Create(AcDbX3dSolid::kBox,ptOrg,vtZ,3,m_dW,dThick,dSlabW);
|
|
// pGroup->AddX3dSolid(pXSolid,AcDb::kBoolSubtract,true);
|
|
//
|
|
// ptOrg.set(0,0,0);
|
|
// ptOrg.y -= ( ( m_dT - dThick) / 4.0 + dThick / 2.0 );
|
|
// ptOrg.y -= ( m_dT - dThick) / 4.0;
|
|
// pXSolid = new AcDbX3dSolid;
|
|
// pXSolid->Create(AcDbX3dSolid::kBox,ptOrg,vtZ,3,m_dW,dThick,dSlabW);
|
|
// pGroup->AddX3dSolid(pXSolid,AcDb::kBoolSubtract,true);
|
|
|
|
//
|
|
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_dT"),m_dT);
|
|
pGroup->GetSpecialtyData()->SetAt(_T("m_nKind"),m_nKind);
|
|
pGroup->GetSpecialtyData()->SetAt(_T("BIMDATA"),1,m_mapBimData);
|
|
return TRUE;
|
|
}
|
|
|
|
void CCRMCDlg::OnBnClickedOk()
|
|
{
|
|
UpdateData();
|
|
|
|
if (m_dW < 1.e-3 || m_dH < 1.e-3)
|
|
{
|
|
AfxMessageBox(_T("门窗的尺寸输入不正确!请重新输入!"));
|
|
return;
|
|
}
|
|
|
|
UIDataCache::Write(_T("%d%d%d%i"), _T("CCRMCDlg")
|
|
, &m_dW , &m_dH , &m_dT
|
|
, &m_nKind);
|
|
|
|
OnOK();
|
|
}
|
|
|
|
void CCRMCDlg::OnBnClickedButton1()
|
|
{
|
|
CBimInfoDlg::ShowBimInfo(&m_mapBimData,_T("门窗"));
|
|
} |