171 lines
3.7 KiB
C++
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("集水井"));
|
|
}
|