Процедуры Circle, DrawCircle, FillCircle

Здравствуйте, читатели сайта progmatem.ru о программировании на паскале. На этой странице рассмотрим следующие три процедуры графического модуля GraphABC – Circle, DrawCircle, FillCircle, причем последние две в среде PascalABC отсутствуют. Но обо всем по порядку, и начнем с определения подпрограммы Circle(x,y,r).

#

Процедура Circle

To the top

**procedure** Circle(x,y,r: integer);

— Рисует заполненную окружность с центром (x, y) и радиусом r

Цвет линии окружности задается с помощью SetPenColor(c), ширина – SetPenWidth(w), цвет области круга – SetBrushColor(c). В PascalABC.Net параметр с имеет тип Color, в PascalABC – тип ColorType. Ширина, или толщина пера w – целое положительное число.

Вот как выглядит это на примере:

uses
  GraphABC;

var
  x, y, r: integer;

begin
  x := 250; y := 200; //координаты центра окружности
  r := 100; //радиус окружности
  SetBrushColor(ClRed); //цвет заполнения
  SetPenWidth(5); //толщина границы окружности
  SetPenColor(ClGreen); //цвет границы окружности
  Circle(x, y, r) { <-- заполненная окужность с 
   центром в точке (x, y) радиуса r }
end.

**unit** GraphABC;: Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне **type** integer;: Представляет 32-битовое целое число со знаком.Диапазон значений: -2 147 483 648 .. 2 147 483 647 **procedure** SetBrushColor(c: Color);: Устанавливает цвет текущей кисти Цвет: clRed – красный **procedure** SetPenWidth(Width: integer);: Устанавливает ширину текущего пера **procedure** SetPenColor(c: Color);: Устанавливает цвет текущего пера Цвет: clGreen – зеленый **procedure** Circle(x,y,r: integer);: Рисует заполненную окружность с центром (x,y) и радиусом r Заполненная окружность в PascalABC.Net

Важное замечание: если не устанавливать вручную свойства границы и области окружности, то задействуются умолчания: цвет границы – черный, толщирна пера – 1px, цвет области – белый.

uses
  GraphABC;

begin
  Circle(250, 200, 100)
end.

**unit** GraphABC;: Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне **procedure** Circle(x,y,r: integer);: Рисует заполненную окружность с центром (x,y) и радиусом r Заполненная окружность Circle в PascalABC.Net

#

Процедура DrawCircle

To the top

**procedure** DrawCircle(x,y,r: integer);

— Рисует окружность с центром (x, y) и радиусом r

Отличие процедуры DrawCircle от Circle в том, что первая рисует только линию окружности, не заполняя внутренней части. То есть попросту говоря – окружность пустая внутри. Напишем простенькую программу.

uses
  GraphABC;

var
  x, y, r: integer;

begin
  x := 300; y := 250; //координаты центра окружности
  r := 150; //радиус окружности
  SetPenColor(ClOrange); //цвет пера (окружн. в данном сл.)
  SetPenWidth(5); //толщина пера (толщина линии окружности)
  DrawCircle(x, y, r) { <-- окужность с центром в 
   точке (x, y) радиуса r }
end.

**unit** GraphABC;: Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне **type** integer;: Представляет 32-битовое целое число со знаком.Диапазон значений: -2 147 483 648 .. 2 147 483 647 **procedure** SetPenColor(c: Color);: Устанавливает цвет текущего пера Цвет: clOrange – оранжевый **procedure** SetPenWidth(Width: integer);: Устанавливает ширину текущего пера **procedure** DrawCircle(x,y,r: integer);: Рисует окружность с центром (x,y) и радиусом r Незаполненная окружность DrawCircle в PascalABC.Net

А теперь продемонстрируем на примере, что процедура DrawCircle(x,y,r) действительно рисует незаполненную окружность в PascalABC.Net. Сначала программа рисут окружность Circle (строка 8 кода ниже), делая паузу на 2 секунды прорцедурой sleep(2000) в следующей строке. Наконец, в последней строке вызываем процедуру DrawCircle для создания незаполненной окружности. Запустите программу в PascalABC.Net и посмотрите результат:

uses
  GraphABC;

begin
  SetPenColor(ClOrange); //цвет пера (линия круга)
  SetBrushColor(clgreen); //цвет кисти (область круга)
  SetPenWidth(5); //толщина пера
  Circle(220, 200, 120);  { <-- рисуем заполненную окужность }
  sleep(2000); //пауза на 2 секунды
  SetPenColor(ClBlue); //цвет пера
  DrawCircle(330, 170, 90) { <-- рисуем незаполненную окужность }
end.

**unit** GraphABC;: Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне **procedure** SetPenColor(c: Color);: Устанавливает цвет текущего пера Цвет: clOrange – оранжевый **procedure** SetBrushColor(c: Color);: Устанавливает цвет текущей кисти Цвет: clGreen – зеленый **procedure** SetPenWidth(Width: integer);: Устанавливает ширину текущего пера **procedure** Circle(x,y,r: integer);: Рисует заполненную окружность с центром (x,y) и радиусом r **procedure** Sleep(ms: integer);: Делает паузу на ms миллисекунд **procedure** SetPenColor(c: Color);: Устанавливает цвет текущего пера Цвет: clBlue – синий **procedure** DrawCircle(x,y,r: integer);: Рисует окружность с центром (x,y) и радиусом r Демонстрация совместного использования Circle и DrawCircle в PascalABC.Net

Аналогичный вывод мы сделали на странице Процедуры DrawPolygon и FillPolygon по отношению к указанным подпрограммам, где демонстрировали использование закрашенного (заполненного) многоугольника Polygon и просто ломаной DrawPolygon. Здесь необходимо запомнить правило:

✎ Если в PascalABC.Net процедура графического модуля используется с приставкой Draw, то кисть Brush для закрашивания области здесь не используется. Это ясно из того, что одно из значений английского слова "draw" является "рисовать", то есть просто рисовать линию.

#

Процедура FillCircle

To the top

Наконец, подходим к последней процедуре FillCircle(...) этой группы подпрограмм, относящихся к окружности и кругу. В чем её отличие от предыдущих Circle и DrawCircle? Английское слово "fill" означает "заполнять", поэтому можно предположить, что данная процедура заполняет (закрашивает, зарисовывает) простаранство круга. Действительно:

**procedure** FillCircle(x,y,r: integer);

— Заполняет внутренность окружности с центром (x, y) и радиусом r

Приведем пример с окружностью закрашенной в розовый цвет. Вот программа:

uses
  GraphABC;

var
  x, y, r: integer; //x,y - коорд. центра, r - радиус

begin
  x := 250;
  y := 200;
  r := 100;
  SetBrushColor(ClPink); //цвет заполнения
  FillCircle(x, y, r) //процедура заполнения окружности
end.

**unit** GraphABC;: Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне **type** integer;: Представляет 32-битовое целое число со знаком.Диапазон значений: -2 147 483 648 .. 2 147 483 647 **procedure** SetBrushColor(c: Color);: Устанавливает цвет текущей кисти Цвет: clPink – розовый **procedure** FillCircle(x,y,r: integer);: Заполняет внутренность окружности с центром (x,y) и радиусом r Заполненная окружность FillCircle в PascalABC.Net

Особенность этой процедуры в том, что залитый таким образом круг не имеет границы, а поэтому перо Pen использовать не имеет смысла. Действительно, в следующей программе устанавливая толщину и цвет пера (5 и 6 строка кода), видим, что жёлтый круг все равно остается без границы:

uses
  GraphABC;

begin
  SetPenWidth(5); //толщина границы 5px
  SetPenColor(clGreen); //цвет границы - зеленый
  SetBrushColor(ClYellow); //цвет заполнения - жёлтый
  FillCircle(200, 150, 120); //процедура заполнения окружности
end.

**unit** GraphABC;: Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне **procedure** SetPenWidth(Width: integer);: Устанавливает ширину текущего пера **procedure** SetPenColor(c: Color);: Устанавливает цвет текущего пера Цвет: clGreen – зеленый **procedure** SetBrushColor(c: Color);: Устанавливает цвет текущей кисти Цвет: clYellow – жёлтый **procedure** FillCircle(x,y,r: integer);: Заполняет внутренность окружности с центром (x,y) и радиусом r Окружность с помощью FillCircle не имееет границы в PascalABC.Net

Вобщем, если нужно нарисовать круг и сразу его закрасить (залить), то используем Circle; если инужна окружность, то DrawCircle; если закрашенный круг без границ, то применяем FillCircle.

На этом все. Если есть вопросы или пожелания, то пишите в комментариях.