Добавил:
Studfiles2
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Региональный поиск метод дерева регионов / Source / PointsView
.cpp// PointsView.cpp : implementation file
//
#include "stdafx.h"
#include "RegionSearch.h"
#include "PointsView.h"
#include "Trees.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CPointsView
IMPLEMENT_DYNCREATE(CPointsView, CView)
CPointsView::CPointsView()
{
}
CPointsView::~CPointsView()
{
}
BEGIN_MESSAGE_MAP(CPointsView, CView)
//{{AFX_MSG_MAP(CPointsView)
ON_WM_LBUTTONDOWN()
ON_WM_MOUSEMOVE()
ON_WM_LBUTTONUP()
ON_WM_LBUTTONDBLCLK()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CPointsView drawing
void CPointsView::OnDraw(CDC* pDC)
{
CRegionSearchDoc* pDoc = GetDocument();
if(pDoc->IsRegionDisplayed())
{
CRect rc=pDoc->GetRegion();
rc.left = XToScreen(rc.left);
rc.right = XToScreen(rc.right);
rc.top = YToScreen(rc.top);
rc.bottom = YToScreen(rc.bottom);
pDC->Rectangle(&rc);
}
std::vector<Point>& Points = GetDocument()->Points;
for(int i=0; i<Points.size(); i++)
{
pDC->Ellipse(XToScreen(Points[i].first)-2, YToScreen(Points[i].second)-2,
XToScreen(Points[i].first)+2, YToScreen(Points[i].second)+2);
if(pDoc->GetShowNumbers())
{
std::ostringstream os;
os<<Points[i].number;
pDC->TextOut(XToScreen(Points[i].first)+3,
YToScreen(Points[i].second), os.str().c_str());
}
}
const std::list<Point>& Results = GetDocument()->GetResult();
if(Results.size()>0)
{
CBrush* pRedBrush = new CBrush(RGB(255,0,0));
CBrush* pOldBrush = pDC->SelectObject(pRedBrush);
std::list<Point>::const_iterator i1 = Results.begin();
while(i1!=Results.end())
{
pDC->Ellipse(XToScreen(i1->first)-2, YToScreen(i1->second)-2,
XToScreen(i1->first)+2, YToScreen(i1->second)+2);
i1++;
}
pDC->SelectObject(pOldBrush);
delete pRedBrush;
}
if(pDoc->GetShowSegments())
{
CRect rc;
GetClientRect(&rc);
for(int i=0; i<Points.size(); i++)
{
pDC->MoveTo(XToScreen(Points[i].first), 30);
pDC->LineTo(XToScreen(Points[i].first), rc.bottom);
std::ostringstream os;
os<<i+1;
pDC->TextOut(XToScreen(Points[i].first)-5, 20, os.str().c_str());
}
}
}
/////////////////////////////////////////////////////////////////////////////
// CPointsView diagnostics
#ifdef _DEBUG
void CPointsView::AssertValid() const
{
CView::AssertValid();
}
void CPointsView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CPointsView message handlers
void CPointsView::OnLButtonDown(UINT nFlags, CPoint point)
{
GetDocument()->StartEnterRegion(PointToLogical(point));
CView::OnLButtonDown(nFlags, point);
}
void CPointsView::OnMouseMove(UINT nFlags, CPoint point)
{
GetDocument()->ContinueEnterRegion(PointToLogical(point));
CView::OnMouseMove(nFlags, point);
}
void CPointsView::OnLButtonUp(UINT nFlags, CPoint point)
{
GetDocument()->EndEnterRegion(PointToLogical(point));
CView::OnLButtonUp(nFlags, point);
}
void CPointsView::OnLButtonDblClk(UINT nFlags, CPoint point)
{
GetDocument()->EnterPoint(PointToLogical(point));
CView::OnLButtonDblClk(nFlags, point);
}
int CPointsView::XToScreen(int x)
{
CRect rc;
GetClientRect(&rc);
return (x*rc.Width())/GetDocument()->GetWidth();
}
int CPointsView::YToScreen(int y)
{
CRect rc;
GetClientRect(&rc);
return (y*rc.Height())/GetDocument()->GetHeight();
}
int CPointsView::XToLogical(int x)
{
CRect rc;
GetClientRect(&rc);
if(rc.Width()>0)
return (x*GetDocument()->GetWidth())/rc.Width();
else
return 0;
}
int CPointsView::YToLogical(int y)
{
CRect rc;
GetClientRect(&rc);
if(rc.Height()>0)
return (y*GetDocument()->GetHeight())/rc.Height();
else
return 0;
}
CPoint CPointsView::PointToLogical(CPoint p)
{
return CPoint(XToLogical(p.x), YToLogical(p.y));
}
Соседние файлы в папке Source