148 lines
2.5 KiB
C++
148 lines
2.5 KiB
C++
#include "stdafx.h"
|
|
#include "HZGQDlg.h"
|
|
#include "EarThwormDef.h"
|
|
|
|
void FreeBuffer(int n, AcDbVoidPtrArray& arEntPtrs)
|
|
{
|
|
AcDbEntity* pEnt = NULL;
|
|
while (arEntPtrs.length() > n)
|
|
{
|
|
pEnt = (AcDbEntity*)arEntPtrs.last();
|
|
pEnt->erase();
|
|
pEnt->close();
|
|
DELETE_PTR(pEnt);
|
|
arEntPtrs.removeLast();
|
|
}
|
|
}
|
|
|
|
IMPLEMENT_DYNAMIC(CHZGQDlg, CDialog)
|
|
|
|
CHZGQDlg::CHZGQDlg(CWnd* pParent /*=NULL*/)
|
|
: CDialog(CHZGQDlg::IDD, pParent)
|
|
, m_dW(800)
|
|
, m_dH(800)
|
|
, m_dV(700)
|
|
, m_dAngle(0)
|
|
, m_sMaterial(_T("素砼"))
|
|
, m_sPurpose(_T("进水渠"))
|
|
, m_dBomEl(0)
|
|
, m_dT(10)
|
|
{
|
|
GET_CACHE(CHZGQDlg
|
|
, %f%f%f%f%f%f%s%s
|
|
, &m_dW
|
|
, &m_dH
|
|
, &m_dV
|
|
, &m_dAngle
|
|
, &m_dBomEl
|
|
, &m_dT
|
|
, &m_sMaterial
|
|
, &m_sPurpose);
|
|
}
|
|
|
|
CHZGQDlg::~CHZGQDlg()
|
|
{
|
|
}
|
|
|
|
void CHZGQDlg::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
DDX_Text(pDX, IDC_EDIT1, m_dW);
|
|
DDX_Text(pDX, IDC_EDIT2, m_dH);
|
|
DDX_Text(pDX, IDC_EDIT3, m_dV);
|
|
DDX_Text(pDX, IDC_EDIT4, m_dAngle);
|
|
DDX_Text(pDX, IDC_EDIT6, m_dBomEl);
|
|
DDX_Text(pDX, IDC_EDIT7, m_dT);
|
|
DDX_Text(pDX, IDC_EDIT5, m_sMaterial);
|
|
DDX_Text(pDX, IDC_EDIT18, m_sPurpose);
|
|
}
|
|
|
|
BEGIN_MESSAGE_MAP(CHZGQDlg, CDialog)
|
|
ON_BN_CLICKED(IDOK, &CHZGQDlg::OnBnClickedOk)
|
|
END_MESSAGE_MAP()
|
|
|
|
BOOL CHZGQDlg::OnInitDialog()
|
|
{
|
|
CDialog::OnInitDialog();
|
|
|
|
UpdateData(FALSE);
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
void CHZGQDlg::OnBnClickedOk()
|
|
{
|
|
UpdateData();
|
|
SET_CACHE(CHZGQDlg
|
|
, %f%f%f%f%f%f%s%s
|
|
, m_dW
|
|
, m_dH
|
|
, m_dV
|
|
, m_dAngle
|
|
, m_dBomEl
|
|
, m_dT
|
|
, m_sMaterial
|
|
, m_sPurpose);
|
|
OnOK();
|
|
}
|
|
|
|
AcDbRegion* CHZGQDlg::GetSection(AcGePoint3d& ptCen)
|
|
{
|
|
AcGePoint3d ptGe[9];
|
|
|
|
ptGe[0].set(0,0,0);
|
|
ptGe[0].x -= 0.5 * m_dW;
|
|
|
|
ptGe[1] = ptGe[0];
|
|
ptGe[1].y += m_dH;
|
|
|
|
ptGe[3].set(0,0,0);
|
|
ptGe[3].y += m_dT;
|
|
ptGe[3].x -= 0.5 * m_dV;
|
|
|
|
double dA = m_dAngle * PI / 180.0;
|
|
double dX = (m_dH - m_dT) * tan(dA);
|
|
|
|
ptGe[2] = ptGe[3];
|
|
ptGe[2].y += (m_dH - m_dT);
|
|
ptGe[2].x -= dX;
|
|
|
|
ptGe[4] = ptGe[3];
|
|
ptGe[4].x += m_dV;
|
|
|
|
ptGe[5] = ptGe[4];
|
|
ptGe[5].x += dX;
|
|
ptGe[5].y += (m_dH - m_dT);
|
|
|
|
ptGe[6] = ptGe[0];
|
|
ptGe[6].x += m_dW;
|
|
ptGe[6].y += m_dH;
|
|
|
|
ptGe[7] = ptGe[0];
|
|
ptGe[7].x += m_dW;
|
|
|
|
ptGe[8] = ptGe[0];
|
|
|
|
AcDbVoidPtrArray arPtrs;
|
|
AcDbLine* pLn = NULL;
|
|
for (int i = 0;i < 8;i++)
|
|
{
|
|
pLn = new AcDbLine;
|
|
pLn->setStartPoint(ptGe[i]);
|
|
pLn->setEndPoint(ptGe[i+1]);
|
|
arPtrs.append(pLn);
|
|
}
|
|
|
|
ptCen.set(0,0,0);
|
|
|
|
AcDbVoidPtrArray arRegPtrs;
|
|
AcDbRegion::createFromCurves(arPtrs,arRegPtrs);
|
|
FreeBuffer(0,arPtrs);
|
|
|
|
if (arRegPtrs.isEmpty())
|
|
{
|
|
return NULL;
|
|
}
|
|
AcDbRegion* pReg = (AcDbRegion*)arRegPtrs.first();
|
|
return pReg;
|
|
} |