Уроки, алгоритмы, программы, примеры

Вход на сайт

Материалы по разделам

Построения
на плоскости (2D)
Графика
в пространстве (3D)
Вычислительная
геометрия
Физическое
моделирование
Фрактальная
графика

Новые комментарии

torrvic, возможно, Вам нужно добавить -lGLU
Извините за тупой вопрос. У меня при сборке Вашего примера выходит ошибка: "undefined reference to gluLookAt". Не могу найти в какой библиотеке находится эта функция. У меня задано: -lGL -lglut ... Искал в /usr/lib таким образом: nm lib*so* | grep...
Здравствуйте. Спасибо за проект. У меня вопрос, по какой причине определение принадлежности точки многоугольнику работает некорректно, если координаты из больших чисел состоят, например: int[] vertex = new int[] {...
Сейчас проверила нашла причину не запускания // Создание контекста воспроизведения OpenGL и привязка его к панели на форме OpenGLControl1:=TOpenGLControl.Create(Self); with OpenGLControl1 do begin Name:='OpenGLControl1'; //вот тут...
Ну..кажется что то пошло не так http://pp.usera...

Счетчики и рейтинг

Рейтинг@Mail.ru
купить кухонный стол и стулья
Среда программирования: 
Delphi (Lazarus)

Класс TCanvas — сердцевина графической подсистемы Delphi (Lazarus). Он объединяет в себе и "холст" (контекст конкретного устройства GDI), и "рабочие инструменты" (перо, кисть, шрифт) и даже "подмастерьев" (набор функций по рисованию типовых геометрических фигур).

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

Для рисования канва включает в себя шрифт, перо и кисть:

(рb) property Font: TFont ;  {TFont: Charset, Color, Style, Size}
(Pt) property Pen: TPen; {TPen: Color, Mode, Style, Width}
(Рb) property Brush: TBrush;  {TBrush: Bitmap, Color, Style}

Кроме того, можно рисовать и поточечно, получив доступ к каждому пикселу. Значение свойства

property Pixels[X, Y: Integer]: TColor;

соответствует цвету точки с координатами (X,Y).

Класс TCanvas

procedure Arc (X1, Y1, X2, Y2,, Y3, X4, Y4: Integer); Метод рисует сегмент эллипса. Эллипс определяется описывающим прямоугольником (X1,Y1) — (X2,Y2). Начальная точка сегмента лежит на пересечении эллипса и луча, проведенного из его центра через точку (X3,Y3). Конечная точка сегмента лежит на пересечении эллипса и луча, проведенного из его центра через точку (X4,Y4). Сегмент рисуется против часовой стрелки.
procedure Chord(X1, Y1, X2, Y2,, Y3, X4, Y4: Integer); Рисует хорду и заливает отсекаемую ею часть эллипса. Эллипс, начальная и конечная точки определяются, как в методе Arc.
procedure Ellipse(X1, Y1, X2, Y2: Integer); Рисует и закрашивает эллипс, вписанный в прямоугольник (X1,Y1) — (X2,Y2).
procedure MoveTo(X, Y: Integer); Перемещает текущее положение пера (свойство PenPos) в точку (X,Y).
procedure LineTo(X, Y: Integer); Проводит линию текущим пером из текущей точки в (X,Y).
procedure BrushCopy(const Dest: TRect; Bitmap: TBitmap; const Source: TRect; Color: TColor); Производит специальное копирование. Прямоугольник Source из битовой карты Bitmap копируется в прямоугольник Dest на канве; при этом цвет Color заменяется на цвет текущей кисти (Brush.Color).
procedure CopyRect(const Dest: TRect; Canvas: TCanvas; const Source: TRect); Производит копирование прямоугольника Source из канвы Canvas в прямоугольник Dest в области самого объекта.
procedure FillRect(const Rect: TRect); Производит заливку прямоугольника (текущей кистью).
procedure Draw(X, Y: Integer; Graphic: TGraphic); Осуществляет рисование графического объекта Graphic
procedure StretchDraw(const Rect: TRect; Graphic: TGraphic); Осуществляет рисование объекта Graphic в заданном прямоугольнике Rect. Если размеры их не совпадают, Graphic масштабируется.
procedure FloodFill(X, Y: Integer; Color: TColor; FillStyle: TFillStyle); TFillStyle = (fsSurface, fsBorder); Производит заливку области текущей кистью. Процесс начинается с точки (X,Y). Если режим FillStyle равен fsSurface, то он продолжается до тех пор, пока есть соседние точки с цветом Color. В режиме fsBorder закрашивание, наоборот, прекращается при выходе на границу с цветом Color.
procedure Pie (X1, Y1, X2, Y2,, Y3, X4, Y4: Integer); Рисует сектор эллипса, описываемого прямоугольником (X1,Y1) — (X2,Y2). Стороны сектора лежат на лучах, проходящих из центра эллипса через точки (X3.Y3) и (X4,Y4).
procedure Polygon(const Points: array of TPoint); Строит многоугольник, используя массив координат точек Points. При этом последняя точка соединяется с первой и внутренняя область закрашивается.
Polygon ([Point(10,10), Point(30,30),Point(20,40)])
procedure Polyline(const Points: array of TPoint); Строит ломаную линию, используя массив координат точек Points.
procedure Rectangle(X1, Y1, X2, Y2 : Integer); Рисует прямоугольник с диагональю заданной координатами (X1,Y1) и (X2,Y2).
procedure RoundRect (X1, Yl, X2, Y2, ХW, YH: Integer); Рисует прямоугольник с закругленными углами. Координаты вершин — те же, что и в методе Rectangle. Закругления рисуются как сегменты эллипса с размерами осей по горизонтали и вертикали ХW и YH.
function TextHeight(const Text: string): Integer; Возвращает высоту строки Text в пикселах.
function TextWidth(const Text: string): Integer; Возвращает ширину строки Text в пикселах.
procedure TextOut(X, Y: Integer; const Text: string); Производит вывод строки Text. Левый верхний угол помещается в точку канвы (X,Y).
procedure TextRect(Rect: TRect; X, Y: Integer; const Text: string); Производит вывод текста с отсечением. Как и в TextOut, строка Text выводится с позиции (X,Y); при этом часть текста, лежащая вне пределов прямоугольника Rect, отсекается и не будет видна.
property PenPos: TPoint; Содержит текущую позицию пера канвы (изменяется посредством метода MoveTo).

Пример

procedure TForm1.Button1Click(Sender: TObject);
begin
  with Paintbox1.Canvas do begin
    Brush.Color := clGray;
    Rectangle(10,100,250,300);  // корпус
    Polygon([Point(0,100),Point(130,20),Point(260,100)]); // крыша
    Brush.Color := clWhite;
    Ellipse(110,40,150,80); // чердак
    Rectangle(30,150,110,230);   // окно
    MoveTo(70,150);
    LineTo(70,230);
    Rectangle(150,300,230,150);  // дверь
    Brush.Color := clGray;
    Polygon([Point(150,300),Point(150,150),Point(210,160),Point(210,300)]);
 
  end;
end;