Добавил:
korayakov
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Лабы / igs (супер 2001) / Spline_2d / Spline_2dView
.cpp// Spline_2dView.cpp : implementation of the CSpline_2dView class
//
#include "stdafx.h"
#include "Spline_2d.h"
#include "Spline_2dDoc.h"
#include "Spline_2dView.h"
#include <math.h>
#include "NewSpline.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CSpline_2dView
IMPLEMENT_DYNCREATE(CSpline_2dView, CView)
BEGIN_MESSAGE_MAP(CSpline_2dView, CView)
//{{AFX_MSG_MAP(CSpline_2dView)
ON_WM_LBUTTONDOWN()
ON_WM_LBUTTONUP()
ON_WM_MOUSEMOVE()
ON_UPDATE_COMMAND_UI(ID_SHOW_CARCAS, OnUpdateShowCarcas)
ON_COMMAND(ID_SHOW_CARCAS, OnShowCarcas)
ON_COMMAND(ID_NEW_SPLINE, OnNewSpline)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CSpline_2dView construction/destruction
CSpline_2dView::CSpline_2dView()
{
// TODO: add construction code here
ButtonDown = 0;
ShowCarcas = 1;
Spline = new CSpline(8, CPoint(350,230));
}
CSpline_2dView::~CSpline_2dView()
{
if(Spline) delete Spline;
}
BOOL CSpline_2dView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CSpline_2dView drawing
void CSpline_2dView::OnDraw(CDC* pDC)
{
CSpline_2dDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
Spline->DrawSpline(pDC, ShowCarcas);
}
/////////////////////////////////////////////////////////////////////////////
// CSpline_2dView diagnostics
#ifdef _DEBUG
void CSpline_2dView::AssertValid() const
{
CView::AssertValid();
}
void CSpline_2dView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CSpline_2dDoc* CSpline_2dView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CSpline_2dDoc)));
return (CSpline_2dDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CSpline_2dView message handlers
void CSpline_2dView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
int flag = -1;
for(int i=0; i<Spline->PointNum; i++)
{ CRect Rect(Spline->PointCoord[i].x - Spline->PointRad, Spline->PointCoord[i].y - Spline->PointRad,
Spline->PointCoord[i].x + Spline->PointRad, Spline->PointCoord[i].y + Spline->PointRad);
if(Rect.PtInRect(point)) flag = i;
}
ButtonDown = 1; PointDown = flag;
CView::OnLButtonDown(nFlags, point);
}
void CSpline_2dView::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
ButtonDown = 0;
CView::OnLButtonUp(nFlags, point);
}
void CSpline_2dView::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
if(ButtonDown)if(PointDown!=-1){Spline->PointCoord[PointDown] = point;
Invalidate();
}
CView::OnMouseMove(nFlags, point);
}
void CSpline_2dView::OnUpdateShowCarcas(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->Enable(true);
if(ShowCarcas)pCmdUI->SetCheck(1);else pCmdUI->SetCheck(0);
}
void CSpline_2dView::OnShowCarcas()
{
// TODO: Add your command handler code here
if(ShowCarcas)ShowCarcas = 0;
else ShowCarcas = 1;
Invalidate();
}
void CSpline_2dView::OnNewSpline()
{
// TODO: Add your command handler code here
CNewSpline *NewSpline = new CNewSpline();
int Result = NewSpline->DoModal();
if(Result==IDOK){if(Spline) delete Spline;
Spline = new CSpline(NewSpline->m_PointNum, CPoint(350,230));
Invalidate();
}
if(NewSpline) delete NewSpline;
}
Соседние файлы в папке Spline_2d