#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; }