Методы вычерчивания графических примитивов в Delphi: Линия

Любая картинка, чертеж, схема могут рассматриваться как совокупность графических примитивов: точек, линий, окружностей, дуг и др. Таким образом, для того чтобы на экране появилась нужная картинка, программа должна обеспечить вычерчивание (вывод) графических примитивов, составляющих эту картинку. {replace on}

Вычерчивание графических примитивов на поверхности компонента (формы или области вывода иллюстрации) осуществляется применением соответствующих методов к свойству canvas этого компонента.

Линия

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

 

Компонент.Canvas-LineTo(x,у);

 

Метод LineTo вычерчивает прямую линию от текущей позиции карандаша в точку с координатами, указанными при вызове метода.

Начальную точку линии можно задать, переместив карандаш в нужную точку графической поверхности. Сделать это можно при помощи метода MoveTo, указав в качестве параметров координаты нового положения карандаша.

Вид линии (цвет, толщина и стиль) определяется значениями свойств объекта Реn графической поверхности, на которой вычерчивается линия. 

Довольно часто результаты расчетов удобно представить в виде графика. Для большей информативности и наглядности графики изображают на фоне координатных осей и оцифрованной сетки. В листинге 10.2 приведен текст программы, которая на поверхность формы выводит координатные оси и оцифрованную сетку (рис. 10.4).

Листинг 10.2. Оси координат и оцифрованная сетка

 

01.unit grid__;
02.interface
03.uses
04.Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
05.Dialogs, StdCtrls;
06.type
07.TForml = class[TForm]
08.procedure FonnPaint(Sender; TObject);
09.private
10.( Private declarations }
11.public
12.i Public declarations }
13.end;
14.var
15.Forml: TForm1;
16.ijoplementation
17.(SR *.DEM)
18.procedure TForml.FormPaint(Sender: TObject);
19. 
20.var
21.xO,yO:integer// координаты начала координатных осей
22.dx,dy; integer// шаг- координатной сетки (в пикселах)
23.h, w: integer// высота и ширина области вывода координатной сетки
24.х, у: integer;
25.lx,ly:real// метки (оцифровка) линий сетки по X и У
26.dlx,dly:real// mar меток (оцифровки) линяй сетки по X и Y
27.cross :integer// счетчик неоцифрой а иных линий сетки
28.dcross:integer;// количество неоцифрованных, линий между оцифрованными
29.begin
30.хО:=30; уО:=220// оси начинаются в точке (40,250)
31.dxi^O; dy:=40// шаг координатной сетки 40 пикселов
32.dcrossr=l; // помечать линии сетки X: 1 — каждую;
33.// 2 — через одну;
34.// 3 — через две,-
35.dlx:=0.5// шаг меток оси X
36.dly:=1.0// шаг меток оси У, метками будут: 1, 2, 3 и т. д.
37.h:=200;
38. 
39.w:=300;
40.with forml. Canvas do
41.begin
42.cross:=dcross;
43.MoveTo(xO,yO}; LineTo(xO.yO-h) ; // ось X
44.MoveTo(xO,yO) ; LineTo(xO+w,yD) ; // ось У
45.// засечки, сетка и оцифровка по оси X
46.x:=xO+dx;
47.lx:=dlx;
48.repeat
49.MoveTofx, yO-3) ;LineTo(x,yO+3) ; // засечка
50.cross ;=cross-l;
51.if cross = 0 then // оцифровка
52.begin
53.TextOut (x-8, yO+5, FloatTostr (Ix) ) ;
54.cross:=dcross;
55.end;
56. 
57.Pen.Style:=psDot;
58.MoveTo(x,yO-3);LineTo(x,yO-h); // линия сетки
59.Pen.Style:=psSolid;
60.lx:=lx+dlx;
61.x:=x+dx;
62.until (x>xO+w);
63. 
64.// засечки, сетка и оцифровка по оси У
65.y:=yO-dy;
66.ly:=dly;
67.repeat
68.MoveTo(хО-3,у);LineTo(xO+3,y]; // засечка
69.TextOut{хО-20,у,FloatToStr(ly)); // оцифровка
70.Pen.Style:=psDot;
71.MoveTo(xO+3,y); LirieTo (xO+w, y); // линия сетки
72.Pen.Style:=psSolid;
73.y:=y-dy;
74.ly:=ly+dly;
75.until (y<yO-h);
76.and;
77.end;
78.end.

 

 

 

Особенность приведенной программы заключается в том, что она позволяет задавать шаг сетки и оцифровку. Кроме того, программа дает возможность оцифровывать не каждую линию сетки оси х, а через одну, две, три и т. д. Сделано это для того, чтобы предотвратить возможные наложения изображений чисел оцифровки друг на друга в случае, если эти числа состоят из нескольких цифр.

������� ������ ��� dle ������� ��������� ������

Помоги проекту! Расскажи друзьям об этом сайте: