Читаем Интернет-журнал "Домашняя лаборатория", 2007 №9 полностью

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();

}

Перейти на страницу:

Похожие книги