898 lines
22 KiB
C++
898 lines
22 KiB
C++
#include "stdafx.h"
|
|
#include "SLabDlg.h"
|
|
#include "AcDbX3dSolid.h"
|
|
#include "AecDbX3dGroup.h"
|
|
#include "AecDbX3dPart.h"
|
|
#include "UITools.h"
|
|
#include "BimInfoDlg.h"
|
|
|
|
extern Acad::ErrorStatus AddToModelSpace(AcDbEntity* pEnt,AcDbDatabase* pDb ,bool bClose );
|
|
extern CString IDCreate();
|
|
|
|
IMPLEMENT_DYNAMIC(CSLabDlg, CDialog)
|
|
|
|
CSLabDlg::CSLabDlg(CWnd* pParent /*=NULL*/)
|
|
: CDialog(CSLabDlg::IDD, pParent)
|
|
, m_dL(4)
|
|
, m_dW(0.36)
|
|
, m_dH(3)
|
|
, m_nType(0)
|
|
, m_nN(0)
|
|
, m_sMaterial(_T(""))
|
|
, m_sSpecType(_T(""))
|
|
, m_bCheckQ(FALSE)
|
|
, m_dTLen(0)
|
|
{
|
|
UIDataCache::Read(_T("%d%d%d%d%i%i%i%s%s"), _T("CSLabDlg") , &m_dL , &m_dW , &m_dH, &m_dTLen, &m_nN, &m_nType, &m_bCheckQ, &m_sMaterial, &m_sSpecType);
|
|
m_sPoints = _T("");
|
|
}
|
|
|
|
CSLabDlg::~CSLabDlg()
|
|
{
|
|
}
|
|
|
|
void CSLabDlg::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
DDX_Text(pDX, IDC_EDIT1, m_dL);
|
|
DDX_Text(pDX, IDC_EDIT3, m_dW);
|
|
DDX_Text(pDX, IDC_EDIT4, m_dH);
|
|
DDX_Radio(pDX, IDC_RADIO1, m_nType);
|
|
DDX_Control(pDX, IDC_STATIC_L, m_wndL);
|
|
DDX_Control(pDX, IDC_STATIC_W, m_wndW);
|
|
DDX_Control(pDX, IDC_STATIC_H, m_wndH);
|
|
DDX_Control(pDX, IDC_EDITH8, m_wndEditN);
|
|
DDX_Control(pDX, IDC_EDIT4, m_wndEditH);
|
|
DDX_Control(pDX, IDC_EDIT3, m_wndEditW);
|
|
DDX_Control(pDX, IDC_EDIT1, m_wndEditL);
|
|
DDX_Control(pDX, IDC_STATIC_N, m_wndN);
|
|
DDX_Control(pDX, IDC_STATIC_K, m_wndK);
|
|
DDX_Text(pDX, IDC_EDITH8, m_nN);
|
|
DDX_CBString(pDX, IDC_COMBO5, m_sMaterial);
|
|
DDX_Control(pDX, IDC_COMBO5, m_wndComboMa);
|
|
DDX_CBString(pDX, IDC_COMBO4, m_sSpecType);
|
|
DDX_Control(pDX, IDC_COMBO4, m_wndComboType);
|
|
DDX_Control(pDX, IDC_CHECK1, m_wndBtCheck);
|
|
DDX_Check(pDX, IDC_CHECK1, m_bCheckQ);
|
|
DDX_Control(pDX, IDC_BUTTON1, m_wndYXWall);
|
|
DDX_Control(pDX, IDC_STATIC_ZC, m_wndStaZC);
|
|
DDX_Control(pDX, IDC_EDIT2, m_wndEditZC);
|
|
DDX_Control(pDX, IDC_STATIC_ZCS, m_wndStaZCS);
|
|
DDX_Text(pDX, IDC_EDIT2, m_dTLen);
|
|
DDX_Control(pDX, IDC_STATIC_SP, m_wndStaSp);
|
|
}
|
|
|
|
BEGIN_MESSAGE_MAP(CSLabDlg, CDialog)
|
|
ON_BN_CLICKED(IDOK, &CSLabDlg::OnBnClickedOk)
|
|
ON_BN_CLICKED(IDC_RADIO1, &CSLabDlg::OnBnClickedRadio1)
|
|
ON_BN_CLICKED(IDC_RADIO2, &CSLabDlg::OnBnClickedRadio2)
|
|
ON_BN_CLICKED(IDC_RADIO3, &CSLabDlg::OnBnClickedRadio3)
|
|
ON_BN_CLICKED(IDC_RADIO4, &CSLabDlg::OnBnClickedRadio4)
|
|
ON_BN_CLICKED(IDC_CHECK1, &CSLabDlg::OnBnClickedCheck1)
|
|
ON_BN_CLICKED(IDC_BUTTON1, &CSLabDlg::OnBnClickedButton1)
|
|
ON_EN_CHANGE(IDC_EDIT2, &CSLabDlg::OnEnChangeEdit2)
|
|
ON_EN_CHANGE(IDC_EDITH8, &CSLabDlg::OnEnChangeEdith8)
|
|
ON_BN_CLICKED(IDC_BUTTON2, &CSLabDlg::OnBnClickedButton2)
|
|
END_MESSAGE_MAP()
|
|
|
|
BOOL CSLabDlg::OnInitDialog()
|
|
{
|
|
CDialog::OnInitDialog();
|
|
|
|
m_sMaterial = _T("钢筋混凝土墙");
|
|
m_wndComboMa.ResetContent();
|
|
m_wndComboMa.AddString(_T("钢筋混凝土墙"));
|
|
m_wndComboMa.AddString(_T("砖墙"));
|
|
|
|
m_sSpecType = _T("剪力墙");
|
|
m_wndComboType.ResetContent();
|
|
m_wndComboType.AddString(_T("剪力墙"));
|
|
m_wndComboType.AddString(_T("轻墙"));
|
|
|
|
UpdateData(FALSE);
|
|
m_bIsInit = TRUE;
|
|
switch(m_nType)
|
|
{
|
|
case 0:
|
|
{
|
|
OnBnClickedRadio1();
|
|
CBimInfoDlg::SetDefaultBimInfo(&m_mapBimData,_T("墙体"));
|
|
break;
|
|
}
|
|
case 1:
|
|
{
|
|
OnBnClickedRadio2();
|
|
CBimInfoDlg::SetDefaultBimInfo(&m_mapBimData,_T("平板"));
|
|
break;
|
|
}
|
|
case 2:
|
|
{
|
|
OnBnClickedRadio3();
|
|
CBimInfoDlg::SetDefaultBimInfo(&m_mapBimData,_T("料口盖板"));
|
|
break;
|
|
}
|
|
case 3:
|
|
{
|
|
OnBnClickedRadio4();
|
|
CBimInfoDlg::SetDefaultBimInfo(&m_mapBimData,_T("井盖"));
|
|
break;
|
|
}
|
|
default:
|
|
break;
|
|
}
|
|
|
|
m_bIsInit = FALSE;
|
|
return TRUE;
|
|
}
|
|
|
|
void CSLabDlg::OnBnClickedOk()
|
|
{
|
|
UpdateData();
|
|
|
|
if (m_dL < 1.e-10 || m_dW < 1.e-10 || m_dH < 1.e-10)
|
|
{
|
|
AfxMessageBox(_T("墙板尺寸数据必须大于0.01米!"));
|
|
return;
|
|
}
|
|
|
|
UIDataCache::Write(_T("%d%d%d%d%i%i%i%s%s"), _T("CSLabDlg") , &m_dL , &m_dW , &m_dH, &m_dTLen, &m_nN, &m_nType, &m_bCheckQ, &m_sMaterial, &m_sSpecType);
|
|
|
|
OnOK();
|
|
}
|
|
|
|
int CSLabDlg::GetX3dSolidRecs( AecDbX3dGroup*& pGroup)
|
|
{
|
|
if (pGroup != NULL)
|
|
{
|
|
pGroup->RemoveAll3dSolidRec();
|
|
}
|
|
else
|
|
{
|
|
pGroup = new AecDbX3dGroup;
|
|
}
|
|
|
|
AcGePoint3d ptOrg;
|
|
ptOrg.set(0,0,0);
|
|
|
|
AcGeVector3d vtZ = AcGeVector3d::kZAxis;
|
|
|
|
AcDbX3dSolid* pXSolid = NULL;
|
|
X3dSolidRec rec;
|
|
|
|
switch(m_nType)
|
|
{
|
|
case 0:
|
|
case 1://墙板
|
|
{
|
|
pXSolid = new AcDbX3dSolid;
|
|
|
|
if (m_sPoints.IsEmpty())
|
|
{
|
|
pXSolid->Create(AcDbX3dSolid::kBox,ptOrg,vtZ,3,m_dL,m_dW,m_dH);
|
|
}
|
|
else
|
|
{
|
|
pXSolid->CreateExtrude(ptOrg,vtZ,m_sPoints,m_dH,0.0);
|
|
}
|
|
|
|
rec.pXSolid = pXSolid;
|
|
rec.bType = AcDb::kBoolUnite;
|
|
_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_dL"),m_dL);
|
|
pGroup->GetSpecialtyData()->SetAt(_T("m_dW"),m_dW);
|
|
pGroup->GetSpecialtyData()->SetAt(_T("m_dH"),m_dH);
|
|
pGroup->GetSpecialtyData()->SetAt(_T("m_nType"),m_nType);
|
|
pGroup->GetSpecialtyData()->SetAt(_T("m_nN"),m_nN);
|
|
pGroup->GetSpecialtyData()->SetAt(_T("m_sMaterial"),m_sMaterial);
|
|
pGroup->GetSpecialtyData()->SetAt(_T("m_sSpecType"),m_sSpecType);
|
|
pGroup->GetSpecialtyData()->SetAt(_T("m_bCheckQ"),m_bCheckQ);
|
|
pGroup->GetSpecialtyData()->SetAt(_T("m_sPoints"),m_sPoints);
|
|
pGroup->GetSpecialtyData()->SetAt(_T("BIMDATA"),1,m_mapBimData);
|
|
|
|
break;
|
|
}
|
|
case 2://料口盖板
|
|
{
|
|
//先开口
|
|
AcGePoint3d ptOrgBk = ptOrg;
|
|
pGroup->SetOrgPoint( ptOrg );
|
|
|
|
double dL = m_nN * m_dL + (m_nN - 1) * 0.02;
|
|
|
|
AcGePoint3d ptNewOrg = ptOrg;
|
|
ptNewOrg.x += 0.5 * ( dL - m_dL);
|
|
dL += 0.08;
|
|
|
|
//套管
|
|
pXSolid = new AcDbX3dSolid;
|
|
pXSolid->Create(AcDbX3dSolid::kRectTube,ptNewOrg,vtZ,4,dL,m_dW + 0.08,0.02,m_dH + 0.04);
|
|
rec.pXSolid = pXSolid;
|
|
rec.bType = AcDb::kBoolUnite;
|
|
_tcscpy(rec.szLockId,IDCreate());
|
|
pGroup->AddX3dSolidRec(rec);
|
|
|
|
for (int i = 0;i < m_nN;i++)
|
|
{
|
|
pXSolid = new AcDbX3dSolid;
|
|
pXSolid->Create(AcDbX3dSolid::kBox,ptOrg,vtZ,3,m_dL,m_dW,m_dH);
|
|
|
|
rec.pXSolid = pXSolid;
|
|
rec.bType = AcDb::kBoolUnite;
|
|
_tcscpy(rec.szLockId,IDCreate());
|
|
|
|
pGroup->AddX3dSolidRec(rec);
|
|
|
|
ptOrg.x += m_dL;
|
|
ptOrg.x += 0.02;//20MM
|
|
}
|
|
|
|
pGroup->SetAxis(X,AcGeVector3d::kXAxis);
|
|
pGroup->SetAxis(Y,AcGeVector3d::kYAxis);
|
|
pGroup->SetAxis(Z,AcGeVector3d::kZAxis);
|
|
|
|
//序列化BIM数据
|
|
pGroup->GetSpecialtyData()->SetAt(_T("m_dL"),m_dL);
|
|
pGroup->GetSpecialtyData()->SetAt(_T("m_dW"),m_dW);
|
|
pGroup->GetSpecialtyData()->SetAt(_T("m_dH"),m_dH);
|
|
pGroup->GetSpecialtyData()->SetAt(_T("m_nType"),m_nType);
|
|
pGroup->GetSpecialtyData()->SetAt(_T("m_nN"),m_nN);
|
|
pGroup->GetSpecialtyData()->SetAt(_T("m_sMaterial"),m_sMaterial);
|
|
pGroup->GetSpecialtyData()->SetAt(_T("m_sSpecType"),m_sSpecType);
|
|
pGroup->GetSpecialtyData()->SetAt(_T("m_bCheckQ"),m_bCheckQ);
|
|
pGroup->GetSpecialtyData()->SetAt(_T("BIMDATA"),1,m_mapBimData);
|
|
|
|
break;
|
|
}
|
|
case 3://井盖
|
|
{
|
|
if (m_bCheckQ)
|
|
{
|
|
pXSolid = new AcDbX3dSolid;
|
|
pXSolid->Create(AcDbX3dSolid::kBox,ptOrg,vtZ,3,m_dL,m_dW,m_dH);
|
|
rec.pXSolid = pXSolid;
|
|
rec.bType = AcDb::kBoolUnite;
|
|
_tcscpy(rec.szLockId,IDCreate());
|
|
|
|
pGroup->AddX3dSolidRec(rec);
|
|
|
|
AcGePoint3d ptOrg2;
|
|
ptOrg2.z += 0.5 * m_dH;
|
|
ptOrg2.z -= 0.01;
|
|
|
|
pXSolid = new AcDbX3dSolid;
|
|
pXSolid->Create(AcDbX3dSolid::kBox,ptOrg2,vtZ,3,m_dL - 0.08,m_dW - 0.08,0.02);
|
|
rec.pXSolid = pXSolid;
|
|
rec.bType = AcDb::kBoolSubtract;
|
|
_tcscpy(rec.szLockId,IDCreate());
|
|
|
|
pGroup->AddX3dSolidRec(rec);
|
|
|
|
ptOrg2 = ptOrg;
|
|
ptOrg2.x -= 0.25 * m_dL;
|
|
pXSolid = new AcDbX3dSolid;
|
|
pXSolid->Create(AcDbX3dSolid::kCylinder,ptOrg2,vtZ,2,0.02,m_dH);
|
|
rec.pXSolid = pXSolid;
|
|
rec.bType = AcDb::kBoolSubtract;
|
|
_tcscpy(rec.szLockId,IDCreate());
|
|
|
|
pGroup->AddX3dSolidRec(rec);
|
|
|
|
ptOrg2 = ptOrg;
|
|
ptOrg2.x += 0.25 * m_dL;
|
|
pXSolid = new AcDbX3dSolid;
|
|
pXSolid->Create(AcDbX3dSolid::kCylinder,ptOrg2,vtZ,2,0.02,m_dH);
|
|
rec.pXSolid = pXSolid;
|
|
rec.bType = AcDb::kBoolSubtract;
|
|
_tcscpy(rec.szLockId,IDCreate());
|
|
|
|
pGroup->AddX3dSolidRec(rec);
|
|
}
|
|
else
|
|
{
|
|
pXSolid = new AcDbX3dSolid;
|
|
pXSolid->Create(AcDbX3dSolid::kPipe,ptOrg,vtZ,3,0.5 * ( m_dL + 0.08 ),0.02,m_dH + 0.02);//壁厚20
|
|
rec.pXSolid = pXSolid;
|
|
rec.bType = AcDb::kBoolUnite;
|
|
_tcscpy(rec.szLockId,IDCreate());
|
|
|
|
pGroup->AddX3dSolidRec(rec);
|
|
|
|
pXSolid = new AcDbX3dSolid;
|
|
pXSolid->Create(AcDbX3dSolid::kCylinder,ptOrg,vtZ,2,0.5 * m_dL,m_dH);
|
|
rec.pXSolid = pXSolid;
|
|
rec.bType = AcDb::kBoolUnite;
|
|
_tcscpy(rec.szLockId,IDCreate());
|
|
|
|
pGroup->AddX3dSolidRec(rec);
|
|
|
|
//再减去内部一块
|
|
AcGePoint3d ptOrg2;
|
|
ptOrg2.z += 0.5 * m_dH;
|
|
ptOrg2.z -= 0.01;
|
|
|
|
pXSolid = new AcDbX3dSolid;
|
|
pXSolid->Create(AcDbX3dSolid::kCylinder,ptOrg2,vtZ,2,0.5 * ( m_dL - 0.04 ),0.02);
|
|
rec.pXSolid = pXSolid;
|
|
rec.bType = AcDb::kBoolSubtract;
|
|
_tcscpy(rec.szLockId,IDCreate());
|
|
pGroup->AddX3dSolidRec(rec);
|
|
|
|
|
|
ptOrg2 = ptOrg;
|
|
ptOrg2.x -= 0.25 * m_dL;
|
|
pXSolid = new AcDbX3dSolid;
|
|
pXSolid->Create(AcDbX3dSolid::kCylinder,ptOrg2,vtZ,2,0.02,m_dH);
|
|
rec.pXSolid = pXSolid;
|
|
rec.bType = AcDb::kBoolSubtract;
|
|
_tcscpy(rec.szLockId,IDCreate());
|
|
pGroup->AddX3dSolidRec(rec);
|
|
|
|
ptOrg2 = ptOrg;
|
|
ptOrg2.x += 0.25 * m_dL;
|
|
pXSolid = new AcDbX3dSolid;
|
|
pXSolid->Create(AcDbX3dSolid::kCylinder,ptOrg2,vtZ,2,0.02,m_dH);
|
|
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_dL"),m_dL);
|
|
pGroup->GetSpecialtyData()->SetAt(_T("m_dW"),m_dW);
|
|
pGroup->GetSpecialtyData()->SetAt(_T("m_dH"),m_dH);
|
|
pGroup->GetSpecialtyData()->SetAt(_T("m_nType"),m_nType);
|
|
pGroup->GetSpecialtyData()->SetAt(_T("m_nN"),m_nN);
|
|
pGroup->GetSpecialtyData()->SetAt(_T("m_sMaterial"),m_sMaterial);
|
|
pGroup->GetSpecialtyData()->SetAt(_T("m_sSpecType"),m_sSpecType);
|
|
pGroup->GetSpecialtyData()->SetAt(_T("m_bCheckQ"),m_bCheckQ);
|
|
pGroup->GetSpecialtyData()->SetAt(_T("BIMDATA"),1,m_mapBimData);
|
|
|
|
break;
|
|
}
|
|
default:
|
|
break;
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
int CSLabDlg::GetX3dPart(AecDbX3dPart*& pGroup)
|
|
{
|
|
if (pGroup != NULL)
|
|
{
|
|
pGroup->RemoveAll3dSolidRec();
|
|
}
|
|
else
|
|
{
|
|
pGroup = new AecDbX3dPart;
|
|
}
|
|
|
|
AcGePoint3d ptOrg;
|
|
ptOrg.set(0,0,0);
|
|
|
|
AcGeVector3d vtZ = AcGeVector3d::kZAxis;
|
|
|
|
AcDbX3dSolid* pXSolid = NULL;
|
|
|
|
switch(m_nType)
|
|
{
|
|
case 0:
|
|
case 1://墙板
|
|
{
|
|
pXSolid = new AcDbX3dSolid;
|
|
if (m_sPoints.IsEmpty())
|
|
{
|
|
pXSolid->Create(AcDbX3dSolid::kBox,ptOrg,vtZ,3,m_dL,m_dW,m_dH);
|
|
}
|
|
else
|
|
{
|
|
pXSolid->CreateExtrude(ptOrg,vtZ,m_sPoints,m_dH,0.0);
|
|
}
|
|
pGroup->AddX3dSolid(pXSolid,AcDb::kBoolUnite);
|
|
|
|
pGroup->SetOrgPoint( ptOrg );
|
|
pGroup->SetAxis(X,AcGeVector3d::kXAxis);
|
|
pGroup->SetAxis(Y,AcGeVector3d::kYAxis);
|
|
pGroup->SetAxis(Z,AcGeVector3d::kZAxis);
|
|
|
|
//序列化BIM数据
|
|
pGroup->GetSpecialtyData()->SetAt(_T("m_dL"),m_dL);
|
|
pGroup->GetSpecialtyData()->SetAt(_T("m_dW"),m_dW);
|
|
pGroup->GetSpecialtyData()->SetAt(_T("m_dH"),m_dH);
|
|
pGroup->GetSpecialtyData()->SetAt(_T("m_nType"),m_nType);
|
|
pGroup->GetSpecialtyData()->SetAt(_T("m_nN"),m_nN);
|
|
pGroup->GetSpecialtyData()->SetAt(_T("m_sMaterial"),m_sMaterial);
|
|
pGroup->GetSpecialtyData()->SetAt(_T("m_sSpecType"),m_sSpecType);
|
|
pGroup->GetSpecialtyData()->SetAt(_T("m_bCheckQ"),m_bCheckQ);
|
|
pGroup->GetSpecialtyData()->SetAt(_T("m_sPoints"),m_sPoints);
|
|
pGroup->GetSpecialtyData()->SetAt(_T("BIMDATA"),1,m_mapBimData);
|
|
|
|
break;
|
|
}
|
|
case 2://料口盖板
|
|
{
|
|
//先开口
|
|
AcGePoint3d ptOrgBk = ptOrg;
|
|
pGroup->SetOrgPoint( ptOrg );
|
|
|
|
double dL = m_nN * m_dL + (m_nN - 1) * 0.02;
|
|
|
|
AcGePoint3d ptNewOrg = ptOrg;
|
|
ptNewOrg.x += 0.5 * ( dL - m_dL);
|
|
dL += 0.08;
|
|
|
|
//套管
|
|
pXSolid = new AcDbX3dSolid;
|
|
pXSolid->Create(AcDbX3dSolid::kRectTube,ptNewOrg,vtZ,4,dL,m_dW + 0.08,0.02,m_dH + 0.04);
|
|
pGroup->AddX3dSolid(pXSolid,AcDb::kBoolUnite,true);
|
|
|
|
for (int i = 0;i < m_nN;i++)
|
|
{
|
|
pXSolid = new AcDbX3dSolid;
|
|
pXSolid->Create(AcDbX3dSolid::kBox,ptOrg,vtZ,3,m_dL,m_dW,m_dH);
|
|
pGroup->AddX3dSolid(pXSolid,AcDb::kBoolUnite);
|
|
ptOrg.x += m_dL;
|
|
ptOrg.x += 0.02;//20MM间隙
|
|
}
|
|
|
|
pGroup->SetAxis(X,AcGeVector3d::kXAxis);
|
|
pGroup->SetAxis(Y,AcGeVector3d::kYAxis);
|
|
pGroup->SetAxis(Z,AcGeVector3d::kZAxis);
|
|
|
|
//序列化BIM数据
|
|
pGroup->GetSpecialtyData()->SetAt(_T("m_dL"),m_dL);
|
|
pGroup->GetSpecialtyData()->SetAt(_T("m_dW"),m_dW);
|
|
pGroup->GetSpecialtyData()->SetAt(_T("m_dH"),m_dH);
|
|
pGroup->GetSpecialtyData()->SetAt(_T("m_nType"),m_nType);
|
|
pGroup->GetSpecialtyData()->SetAt(_T("m_nN"),m_nN);
|
|
pGroup->GetSpecialtyData()->SetAt(_T("m_sMaterial"),m_sMaterial);
|
|
pGroup->GetSpecialtyData()->SetAt(_T("m_sSpecType"),m_sSpecType);
|
|
pGroup->GetSpecialtyData()->SetAt(_T("m_bCheckQ"),m_bCheckQ);
|
|
pGroup->GetSpecialtyData()->SetAt(_T("BIMDATA"),1,m_mapBimData);
|
|
|
|
break;
|
|
}
|
|
case 3://井盖
|
|
{
|
|
if (m_bCheckQ)
|
|
{
|
|
pXSolid = new AcDbX3dSolid;
|
|
pXSolid->Create(AcDbX3dSolid::kBox,ptOrg,vtZ,3,m_dL,m_dW,m_dH);
|
|
pGroup->AddX3dSolid(pXSolid,AcDb::kBoolUnite);
|
|
|
|
AcGePoint3d ptOrg2;
|
|
ptOrg2.z += 0.5 * m_dH;
|
|
ptOrg2.z -= 0.01;
|
|
|
|
pXSolid = new AcDbX3dSolid;
|
|
pXSolid->Create(AcDbX3dSolid::kBox,ptOrg2,vtZ,3,m_dL - 0.08,m_dW - 0.08,0.02);
|
|
pGroup->AddX3dSolid(pXSolid,AcDb::kBoolSubtract);
|
|
|
|
ptOrg2 = ptOrg;
|
|
ptOrg2.x -= 0.25 * m_dL;
|
|
pXSolid = new AcDbX3dSolid;
|
|
pXSolid->Create(AcDbX3dSolid::kCylinder,ptOrg2,vtZ,2,0.02,m_dH);
|
|
pGroup->AddX3dSolid(pXSolid,AcDb::kBoolSubtract);
|
|
|
|
ptOrg2 = ptOrg;
|
|
ptOrg2.x += 0.25 * m_dL;
|
|
pXSolid = new AcDbX3dSolid;
|
|
pXSolid->Create(AcDbX3dSolid::kCylinder,ptOrg2,vtZ,2,0.02,m_dH);
|
|
pGroup->AddX3dSolid(pXSolid,AcDb::kBoolSubtract);
|
|
}
|
|
else
|
|
{
|
|
pXSolid = new AcDbX3dSolid;
|
|
pXSolid->Create(AcDbX3dSolid::kPipe,ptOrg,vtZ,3,0.5 * ( m_dL + 0.08 ),0.02,m_dH + 0.02);//壁厚20
|
|
pGroup->AddX3dSolid(pXSolid,AcDb::kBoolUnite,true);
|
|
|
|
pXSolid = new AcDbX3dSolid;
|
|
pXSolid->Create(AcDbX3dSolid::kCylinder,ptOrg,vtZ,2,0.5 * m_dL,m_dH);
|
|
pGroup->AddX3dSolid(pXSolid,AcDb::kBoolUnite);
|
|
|
|
//再减去内部一块
|
|
AcGePoint3d ptOrg2;
|
|
ptOrg2.z += 0.5 * m_dH;
|
|
ptOrg2.z -= 0.01;
|
|
|
|
pXSolid = new AcDbX3dSolid;
|
|
pXSolid->Create(AcDbX3dSolid::kCylinder,ptOrg2,vtZ,2,0.5 * ( m_dL - 0.04 ),0.02);
|
|
pGroup->AddX3dSolid(pXSolid,AcDb::kBoolSubtract);
|
|
|
|
ptOrg2 = ptOrg;
|
|
ptOrg2.x -= 0.25 * m_dL;
|
|
pXSolid = new AcDbX3dSolid;
|
|
pXSolid->Create(AcDbX3dSolid::kCylinder,ptOrg2,vtZ,2,0.02,m_dH);
|
|
pGroup->AddX3dSolid(pXSolid,AcDb::kBoolSubtract);
|
|
|
|
ptOrg2 = ptOrg;
|
|
ptOrg2.x += 0.25 * m_dL;
|
|
pXSolid = new AcDbX3dSolid;
|
|
pXSolid->Create(AcDbX3dSolid::kCylinder,ptOrg2,vtZ,2,0.02,m_dH);
|
|
pGroup->AddX3dSolid(pXSolid,AcDb::kBoolSubtract);
|
|
}
|
|
|
|
pGroup->SetOrgPoint( ptOrg );
|
|
pGroup->SetAxis(X,AcGeVector3d::kXAxis);
|
|
pGroup->SetAxis(Y,AcGeVector3d::kYAxis);
|
|
pGroup->SetAxis(Z,AcGeVector3d::kZAxis);
|
|
|
|
//序列化BIM数据
|
|
pGroup->GetSpecialtyData()->SetAt(_T("m_dL"),m_dL);
|
|
pGroup->GetSpecialtyData()->SetAt(_T("m_dW"),m_dW);
|
|
pGroup->GetSpecialtyData()->SetAt(_T("m_dH"),m_dH);
|
|
pGroup->GetSpecialtyData()->SetAt(_T("m_nType"),m_nType);
|
|
pGroup->GetSpecialtyData()->SetAt(_T("m_nN"),m_nN);
|
|
pGroup->GetSpecialtyData()->SetAt(_T("m_sMaterial"),m_sMaterial);
|
|
pGroup->GetSpecialtyData()->SetAt(_T("m_sSpecType"),m_sSpecType);
|
|
pGroup->GetSpecialtyData()->SetAt(_T("m_bCheckQ"),m_bCheckQ);
|
|
pGroup->GetSpecialtyData()->SetAt(_T("BIMDATA"),1,m_mapBimData);
|
|
|
|
break;
|
|
}
|
|
default:
|
|
break;
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
//墙体
|
|
void CSLabDlg::OnBnClickedRadio1()
|
|
{
|
|
UpdateData();
|
|
|
|
m_wndL.SetWindowText(_T("长度 L:"));
|
|
m_wndW.SetWindowText(_T("宽度 W:"));
|
|
m_wndH.SetWindowText(_T("厚度 H:"));
|
|
|
|
m_wndL.EnableWindow(TRUE);
|
|
m_wndW.EnableWindow(TRUE);
|
|
m_wndH.EnableWindow(TRUE);
|
|
|
|
m_wndEditL.EnableWindow(TRUE);
|
|
m_wndEditW.EnableWindow(TRUE);
|
|
m_wndEditH.EnableWindow(TRUE);
|
|
|
|
m_wndN.ShowWindow(SW_HIDE);
|
|
m_wndK.ShowWindow(SW_HIDE);
|
|
m_wndEditN.ShowWindow(SW_HIDE);
|
|
m_wndBtCheck.ShowWindow(SW_HIDE);
|
|
m_wndYXWall.ShowWindow(SW_SHOW);
|
|
|
|
m_wndStaZC.ShowWindow(SW_HIDE);
|
|
m_wndEditZC.ShowWindow(SW_HIDE);
|
|
m_wndStaZCS.ShowWindow(SW_HIDE);
|
|
m_wndStaSp.ShowWindow(SW_HIDE);
|
|
|
|
if (!m_bIsInit)
|
|
{
|
|
m_dL = 4.0;
|
|
m_dW = 0.36;
|
|
m_dH = 3.0;
|
|
m_nN = 0;
|
|
}
|
|
|
|
m_sMaterial = _T("钢筋混凝土墙");
|
|
m_wndComboMa.ResetContent();
|
|
m_wndComboMa.AddString(_T("钢筋混凝土墙"));
|
|
m_wndComboMa.AddString(_T("砖墙"));
|
|
|
|
m_sSpecType = _T("剪力墙");
|
|
m_wndComboType.ResetContent();
|
|
m_wndComboType.AddString(_T("剪力墙"));
|
|
m_wndComboType.AddString(_T("轻墙"));
|
|
|
|
UpdateData(FALSE);
|
|
}
|
|
|
|
//平板
|
|
void CSLabDlg::OnBnClickedRadio2()
|
|
{
|
|
UpdateData();
|
|
|
|
m_wndL.SetWindowText(_T("长度 L:"));
|
|
m_wndW.SetWindowText(_T("宽度 W:"));
|
|
m_wndH.SetWindowText(_T("厚度 H:"));
|
|
|
|
m_wndL.EnableWindow(TRUE);
|
|
m_wndW.EnableWindow(TRUE);
|
|
m_wndH.EnableWindow(TRUE);
|
|
|
|
m_wndEditL.EnableWindow(TRUE);
|
|
m_wndEditW.EnableWindow(TRUE);
|
|
m_wndEditH.EnableWindow(TRUE);
|
|
|
|
m_wndN.ShowWindow(SW_HIDE);
|
|
m_wndK.ShowWindow(SW_HIDE);
|
|
m_wndEditN.ShowWindow(SW_HIDE);
|
|
m_wndBtCheck.ShowWindow(SW_HIDE);
|
|
m_wndYXWall.ShowWindow(SW_HIDE);
|
|
|
|
m_wndStaZC.ShowWindow(SW_HIDE);
|
|
m_wndEditZC.ShowWindow(SW_HIDE);
|
|
m_wndStaZCS.ShowWindow(SW_HIDE);
|
|
m_wndStaSp.ShowWindow(SW_HIDE);
|
|
|
|
if (!m_bIsInit)
|
|
{
|
|
m_dL = 4.0;
|
|
m_dW = 0.36;
|
|
m_dH = 3.0;
|
|
m_nN = 0;
|
|
}
|
|
|
|
m_sMaterial = _T("钢筋混凝土板");
|
|
m_wndComboMa.ResetContent();
|
|
m_wndComboMa.AddString(_T("钢筋混凝土板"));
|
|
|
|
m_sSpecType = _T("楼板");
|
|
m_wndComboType.ResetContent();
|
|
m_wndComboType.AddString(_T("楼板"));
|
|
|
|
UpdateData(FALSE);
|
|
}
|
|
|
|
//料口盖板
|
|
void CSLabDlg::OnBnClickedRadio3()
|
|
{
|
|
UpdateData();
|
|
|
|
m_wndL.SetWindowText(_T("钢筋混凝土活动盖板长 L:"));
|
|
m_wndW.SetWindowText(_T("钢筋混凝土活动盖板宽 W:"));
|
|
m_wndH.SetWindowText(_T("钢筋混凝土活动盖板厚 H:"));
|
|
|
|
m_wndL.EnableWindow(TRUE);
|
|
m_wndW.EnableWindow(TRUE);
|
|
m_wndH.EnableWindow(TRUE);
|
|
|
|
m_wndEditL.EnableWindow(TRUE);
|
|
m_wndEditW.EnableWindow(TRUE);
|
|
m_wndEditH.EnableWindow(TRUE);
|
|
|
|
m_wndN.ShowWindow(SW_SHOW);
|
|
m_wndK.ShowWindow(SW_SHOW);
|
|
m_wndEditN.ShowWindow(SW_SHOW);
|
|
m_wndBtCheck.ShowWindow(SW_HIDE);
|
|
m_wndYXWall.ShowWindow(SW_HIDE);
|
|
m_wndN.SetWindowText(_T("钢筋混凝土活动盖板数量 N:"));
|
|
|
|
m_wndStaZC.ShowWindow(SW_SHOW);
|
|
m_wndEditZC.ShowWindow(SW_SHOW);
|
|
m_wndStaZCS.ShowWindow(SW_SHOW);
|
|
m_wndStaSp.ShowWindow(SW_SHOW);
|
|
|
|
if (!m_bIsInit)
|
|
{
|
|
m_dL = 0.5;
|
|
m_dW = 0.8;
|
|
m_dH = 0.03;
|
|
m_nN = 14;
|
|
}
|
|
|
|
m_sMaterial = _T("钢筋混凝土板");
|
|
m_wndComboMa.ResetContent();
|
|
m_wndComboMa.AddString(_T("钢筋混凝土板"));
|
|
|
|
m_sSpecType = _T("料口盖板");
|
|
m_wndComboType.ResetContent();
|
|
m_wndComboType.AddString(_T("料口盖板"));
|
|
|
|
UpdateData(FALSE);
|
|
OnEnChangeEdith8();
|
|
|
|
UpdateData(FALSE);
|
|
}
|
|
|
|
//井盖
|
|
void CSLabDlg::OnBnClickedRadio4()
|
|
{
|
|
UpdateData();
|
|
|
|
if (m_bCheckQ)
|
|
{
|
|
m_wndL.SetWindowText(_T("长度 L:"));
|
|
m_wndW.SetWindowText(_T("宽度 W:"));
|
|
|
|
m_wndW.EnableWindow(TRUE);
|
|
m_wndEditW.EnableWindow(TRUE);
|
|
}
|
|
else
|
|
{
|
|
m_wndL.SetWindowText(_T("直径 L:"));
|
|
m_wndW.SetWindowText(_T("宽度 W:"));
|
|
|
|
m_wndW.EnableWindow(FALSE);
|
|
m_wndEditW.EnableWindow(FALSE);
|
|
}
|
|
|
|
m_wndH.SetWindowText(_T("厚度 H:"));
|
|
|
|
m_wndN.ShowWindow(SW_HIDE);
|
|
m_wndK.ShowWindow(SW_HIDE);
|
|
m_wndEditN.ShowWindow(SW_HIDE);
|
|
m_wndBtCheck.ShowWindow(SW_SHOW);
|
|
m_wndYXWall.ShowWindow(SW_HIDE);
|
|
|
|
m_wndStaZC.ShowWindow(SW_HIDE);
|
|
m_wndEditZC.ShowWindow(SW_HIDE);
|
|
m_wndStaZCS.ShowWindow(SW_HIDE);
|
|
m_wndStaSp.ShowWindow(SW_HIDE);
|
|
|
|
if (!m_bIsInit)
|
|
{
|
|
m_dL = 1.0;
|
|
m_dW = 0.8;
|
|
m_dH = 0.05;
|
|
m_nN = 0;
|
|
}
|
|
|
|
m_sMaterial = _T("铸铁");
|
|
m_wndComboMa.ResetContent();
|
|
m_wndComboMa.AddString(_T("铸铁"));
|
|
m_wndComboMa.AddString(_T("钢筋混凝土"));
|
|
|
|
m_sSpecType = _T("液压井盖");
|
|
m_wndComboType.ResetContent();
|
|
m_wndComboType.AddString(_T("液压井盖"));
|
|
m_wndComboType.AddString(_T("普通铸铁井盖"));
|
|
|
|
UpdateData(FALSE);
|
|
}
|
|
|
|
void CSLabDlg::OnBnClickedCheck1()
|
|
{
|
|
UpdateData();
|
|
|
|
if (m_bCheckQ)
|
|
{
|
|
m_wndL.SetWindowText(_T("长度 L:"));
|
|
m_wndW.SetWindowText(_T("宽度 W:"));
|
|
|
|
m_wndL.EnableWindow(TRUE);
|
|
m_wndW.EnableWindow(TRUE);
|
|
|
|
m_wndEditL.EnableWindow(TRUE);
|
|
m_wndEditW.EnableWindow(TRUE);
|
|
}
|
|
else
|
|
{
|
|
if (m_nType == 3)
|
|
{
|
|
m_wndL.SetWindowText(_T("直径 L:"));
|
|
m_wndW.SetWindowText(_T("宽度 W:"));
|
|
}
|
|
|
|
m_wndL.EnableWindow(TRUE);
|
|
m_wndW.EnableWindow(FALSE);
|
|
m_wndEditL.EnableWindow(TRUE);
|
|
m_wndEditW.EnableWindow(FALSE);
|
|
}
|
|
}
|
|
|
|
void CSLabDlg::OnBnClickedButton1()
|
|
{
|
|
m_sPoints = _T("");
|
|
EnableWindow(FALSE);
|
|
CWnd* pFrame = acedGetAcadFrame();
|
|
pFrame->EnableWindow(TRUE);
|
|
ShowWindow(SW_HIDE);
|
|
pFrame->SetFocus();
|
|
|
|
AcAxDocLock lock;
|
|
ads_point pt;
|
|
ads_name ent;
|
|
int nRes = acedEntSel(_T("\n请选择闭合pline线:"),ent,pt);
|
|
if (nRes == RTNORM)
|
|
{
|
|
AcDbObjectId id;
|
|
acdbGetObjectId(id,ent);
|
|
|
|
CString sText;
|
|
AcDbEntity* pEnt = NULL;
|
|
if (Acad::eOk == acdbOpenAcDbEntity(pEnt,id,AcDb::kForRead))
|
|
{
|
|
AcDbPolyline* pPl = AcDbPolyline::cast(pEnt);
|
|
if (pPl != NULL)
|
|
{
|
|
AcDbExtents ext;
|
|
pPl->getGeomExtents(ext);
|
|
|
|
m_sPoints = _T("");
|
|
double dBulge = 0.0;
|
|
AcGePoint2d pt2d;
|
|
AcGePoint2dArray arPt2ds;
|
|
for (int i = 0;i < pPl->numVerts();i++)
|
|
{
|
|
pPl->getPointAt(i,pt2d);
|
|
pPl->getBulgeAt(i,dBulge);
|
|
|
|
|
|
//if (arPt2ds.find(pt2d) == -1)
|
|
{
|
|
arPt2ds.append(pt2d);
|
|
|
|
sText.Format(_T("%g,%g@%g,"),pt2d.x,pt2d.y,dBulge);
|
|
m_sPoints += sText;
|
|
}
|
|
}
|
|
|
|
if ( arPt2ds.last().distanceTo(arPt2ds.first()) > 1.e-2)
|
|
{
|
|
pt2d = arPt2ds.first();
|
|
sText.Format(_T("%g,%g@0.0,"),pt2d.x,pt2d.y);
|
|
m_sPoints += sText;
|
|
}
|
|
m_sPoints.TrimRight(_T(","));
|
|
}
|
|
else
|
|
{
|
|
acutPrintf(_T("\n选择的实体不是pline线实体!"));
|
|
}
|
|
pEnt->close();
|
|
}
|
|
}
|
|
|
|
pFrame->EnableWindow(FALSE);
|
|
ShowWindow(SW_SHOW);
|
|
EnableWindow(TRUE);
|
|
}
|
|
|
|
void CSLabDlg::OnEnChangeEdit2()
|
|
{
|
|
//20MM间隙
|
|
UpdateData();
|
|
m_nN = (int)(m_dTLen / (m_dL + 0.02) + 0.5);
|
|
UpdateData(FALSE);
|
|
}
|
|
|
|
void CSLabDlg::OnEnChangeEdith8()
|
|
{
|
|
UpdateData();
|
|
//20MM间隙
|
|
m_dTLen = m_nN * (m_dL + 0.02);
|
|
UpdateData(FALSE);
|
|
}
|
|
|
|
void CSLabDlg::OnBnClickedButton2()
|
|
{
|
|
UpdateData();
|
|
switch(m_nType)
|
|
{
|
|
case 0:
|
|
{
|
|
CBimInfoDlg::ShowBimInfo(&m_mapBimData,_T("墙体"));
|
|
break;
|
|
}
|
|
case 1:
|
|
{
|
|
CBimInfoDlg::ShowBimInfo(&m_mapBimData,_T("平板"));
|
|
break;
|
|
}
|
|
case 2:
|
|
{
|
|
CBimInfoDlg::ShowBimInfo(&m_mapBimData,_T("料口盖板"));
|
|
break;
|
|
}
|
|
case 3:
|
|
{
|
|
CBimInfoDlg::ShowBimInfo(&m_mapBimData,_T("井盖"));
|
|
break;
|
|
}
|
|
default:
|
|
break;
|
|
}
|
|
}
|