using System;
using System.Drawing;
namespace Shapes {
///
/// Figure — это абстрактный класс; прародитель семейства
/// классов геометрических фигур. Все фигуры имеют:
/// центр — center, масштаб — scale, статус
/// перетаскивания — dragged center — объект встроенного
/// класса (структуры) Point. Этот объект задает характерную
/// точку фигуры — чаще всего ее центр (тяжести)
/// scale задает масштаб фигуры, первоначально единичный.
/// drugged = true, когда фигура следует за курсором мыши.
/// над фигурами определены операции: параллельный
/// перенос — Move(а, Ь) масштабирование — Scale(s)
/// Показ фигуры — Show. Область захвата — Region_Capture
/// возвращает прямоугольник, характерный для фигуры,
/// перетаскивание фигуры возможно при установке курсора
/// мыши в области захвата.
///
abstract public class Figure
{
///
/// закрытые для клиентов атрибуты класса — center, scale
///
protected Point center;
protected double scale;
protected bool dragged;
protected Color color;
//Доступ к свойствам
public Point center_figure
{
get {return(center);}
set {center = value;}
}
public double scale_figure
{
get {return(scale);}
set {scale = value;}
}
public bool dragged figure
}
get {return(dragged);}
set {dragged = value;}
}
public Color color figure
{
get {return (color);}
set {color = value;}
}
///
/// базовый конструктор фигур
///
/// координата X характерной точки
///фигуры
/// Координата Y характерной точки
///фигуры
public Figure(int x, int y)
{
center = new Point(x,y);
scale = 1;
dragged = false;
color = Color.ForestGreen;
}
///
/// отложенный метод
/// Параллельный перенос фигуры на (а, Ь)
/// require: true;
/// ensure: для любой точки фигуры р(х, у):
/// х = old(x) + а; у = old(у) + Ь;
///
/// a — перемещение по горизонтали
/// вправо
/// b — перемещение по вертикали
/// вниз
/// Замечание: Для того, чтобы фигура при рисовании была
/// полностью видимой, координаты всех ее точек должны
/// быть в пределах области рисования,
public void Move (int a,int b)
{
center.X +=a; center.Y += b;
}
///
/// изменяет масштаб фигуры
///
/// масштаб изменяется в s раз
public void Scale(double s)
{
scale*=s;
}
///
/// рисование фигуры в окне, передающем объекты g и реп
///
/// графический объект, методы которого
/// рисуют фигуру
/// перо рисования
public abstract void Show(Graphics g, Pen pen,
Brush brush);
public abstract System.Drawing.Rectangle Region_Capture();
}