180 lines
4.3 KiB
C++
180 lines
4.3 KiB
C++
#include "stdafx.h"
|
|
#include "LXFZDlg.h"
|
|
#include "AecDbEarthWorm.h"
|
|
#include "KTCADUtilityEx.h"
|
|
#include "AcDbX3dSolid.h"
|
|
#include "AecDbX3dPart.h"
|
|
#include "UITools.h"
|
|
#include "BimInfoDlg.h"
|
|
|
|
IMPLEMENT_DYNAMIC(CLXFZDlg, CDialog)
|
|
|
|
CLXFZDlg::CLXFZDlg(CWnd* pParent /*=NULL*/)
|
|
: CDialog(CLXFZDlg::IDD, pParent)
|
|
, m_dH(3.0)
|
|
, m_dW(12.0)
|
|
, m_dL(14.0)
|
|
, m_dW1(6.0)
|
|
, m_dL1(7.0)
|
|
, m_dT(0.36)
|
|
, m_dX(6.0)
|
|
, m_bLWHIsRoom(FALSE)
|
|
{
|
|
UIDataCache::Read(_T("%d%d%d%d%d%d%d%s"), _T("CLXFZDlg")
|
|
, &m_dH , &m_dW , &m_dL , &m_dW1 , &m_dL1 , &m_dT , &m_dX
|
|
, &m_sCrossSectionScr);
|
|
}
|
|
|
|
CLXFZDlg::~CLXFZDlg()
|
|
{
|
|
}
|
|
|
|
void CLXFZDlg::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
DDX_Control(pDX, IDC_STATIC_BMP, m_wndStaBmp);
|
|
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_dW1);
|
|
DDX_Text(pDX, IDC_EDIT35, m_dL1);
|
|
DDX_Text(pDX, IDC_EDIT36, m_dT);
|
|
DDX_Text(pDX, IDC_EDIT38, m_dX);
|
|
DDX_Check(pDX, IDC_CHECK1, m_bLWHIsRoom);
|
|
}
|
|
|
|
BEGIN_MESSAGE_MAP(CLXFZDlg, CDialog)
|
|
ON_BN_CLICKED(IDOK, &CLXFZDlg::OnBnClickedOk)
|
|
ON_BN_CLICKED(IDC_BUTTON1, &CLXFZDlg::OnBnClickedButton1)
|
|
END_MESSAGE_MAP()
|
|
|
|
BOOL CLXFZDlg::OnInitDialog()
|
|
{
|
|
CDialog::OnInitDialog();
|
|
|
|
UpdateData(FALSE);
|
|
|
|
CBimInfoDlg::SetDefaultBimInfo(&m_mapBimData,_T("房子"));
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
void CLXFZDlg::OnBnClickedOk()
|
|
{
|
|
UpdateData(TRUE);
|
|
if (m_dL < m_dL1)
|
|
{
|
|
AfxMessageBox(_T("L型房子大尺寸数据比小尺寸数据小!"));
|
|
return;
|
|
}
|
|
|
|
if (m_dL < 0.1 || m_dL1 < 0.1 || m_dW < 0.1 || m_dH < 0.1 || m_dT < 0.1)
|
|
{
|
|
AfxMessageBox(_T("房子尺寸数据太小!"));
|
|
return;
|
|
}
|
|
|
|
UIDataCache::Write(_T("%d%d%d%d%d%d%d%s"), _T("CLXFZDlg")
|
|
, &m_dH, &m_dW, &m_dL, &m_dW1, &m_dL1, &m_dT, &m_dX
|
|
, &m_sCrossSectionScr);
|
|
|
|
OnOK();
|
|
}
|
|
|
|
extern void GetEarthWormHeightWidthAndThick(LPCTSTR pszCrossSectionScr,AcGePoint2d& ptHW,AcGePoint2d& ptOIW);
|
|
int CLXFZDlg::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;
|
|
}
|
|
|
|
double dH = m_dH + (m_bLWHIsRoom ? m_dT : 0.0);
|
|
double dW = m_dW + (m_bLWHIsRoom ? 2.0 * m_dT : 0.0);
|
|
double dL = m_dL + (m_bLWHIsRoom ? 2.0 * m_dT : 0.0);
|
|
double dW1 = m_dW1 + (m_bLWHIsRoom ? -1.0 * m_dT : 0.0);
|
|
double dL1 = m_dL1 + (m_bLWHIsRoom ? 2.0 * m_dT : 0.0);
|
|
|
|
AcGePoint3d ptOrg;
|
|
ptOrg.set(m_dX,0,dHeight * 0.5);
|
|
|
|
AcGeVector3d vtZ = AcGeVector3d::kZAxis;
|
|
|
|
CString sText,sPoints = _T("");
|
|
AcGePoint2d pt2d(0,0);
|
|
|
|
sText.Format(_T("%g,%g,"),pt2d.x,pt2d.y);
|
|
sPoints += sText;
|
|
|
|
pt2d.x += dL;
|
|
sText.Format(_T("%g,%g,"),pt2d.x,pt2d.y);
|
|
sPoints += sText;
|
|
|
|
pt2d.y += dW;
|
|
sText.Format(_T("%g,%g,"),pt2d.x,pt2d.y);
|
|
sPoints += sText;
|
|
|
|
pt2d.x -= (dL - dL1);
|
|
sText.Format(_T("%g,%g,"),pt2d.x,pt2d.y);
|
|
sPoints += sText;
|
|
|
|
pt2d.y += dW1;
|
|
sText.Format(_T("%g,%g,"),pt2d.x,pt2d.y);
|
|
sPoints += sText;
|
|
|
|
pt2d.x -= dL1;
|
|
sText.Format(_T("%g,%g,"),pt2d.x,pt2d.y);
|
|
sPoints += sText;
|
|
|
|
pt2d.set(0,0);
|
|
sText.Format(_T("%g,%g,"),pt2d.x,pt2d.y);
|
|
sPoints += sText;
|
|
|
|
AcDbX3dSolid* pXSolid = new AcDbX3dSolid;
|
|
pXSolid->CreateExtrude(AcGePoint3d(0,0,0),vtZ,sPoints,dH,m_dT);
|
|
|
|
AcGeVector3d vtMove(m_dX,0,0);
|
|
pXSolid->AddMove(vtMove);
|
|
|
|
vtMove.set(0,0,dHeight / 2.0);
|
|
pXSolid->AddMove(vtMove);
|
|
|
|
vtMove.set(0,-0.5 * dWidth,0.0);
|
|
pXSolid->AddMove(vtMove);
|
|
|
|
pPart->AddX3dSolid(pXSolid,AcDb::kBoolUnite);
|
|
|
|
pPart->SetOrgPoint( ptOrg );
|
|
pPart->SetAxis(X,AcGeVector3d::kXAxis);
|
|
pPart->SetAxis(Y,AcGeVector3d::kYAxis);
|
|
pPart->SetAxis(Z,AcGeVector3d::kZAxis);
|
|
|
|
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_dW1"),m_dW1);
|
|
pPart->GetSpecialtyData()->SetAt(_T("m_dL1"),m_dL1);
|
|
pPart->GetSpecialtyData()->SetAt(_T("m_dT"),m_dT);
|
|
pPart->GetSpecialtyData()->SetAt(_T("m_dX"),m_dX);
|
|
pPart->GetSpecialtyData()->SetAt(_T("m_sCrossSectionScr"),m_sCrossSectionScr);
|
|
pPart->GetSpecialtyData()->SetAt(_T("m_bLWHIsRoom"),m_bLWHIsRoom);
|
|
pPart->GetSpecialtyData()->SetAt(_T("BIMDATA"),1,m_mapBimData);
|
|
return TRUE;
|
|
}
|
|
|
|
void CLXFZDlg::OnBnClickedButton1()
|
|
{
|
|
CBimInfoDlg::ShowBimInfo(&m_mapBimData,_T("房子"));
|
|
}
|