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

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

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

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

У меня проблема вот с этим: gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);. Вылезает ошибка: CS1061 "object" не содержит определения "GL_COLOR_BUFFER_BIT", и не удалось найти доступный метод расширения "GL_COLOR_BUFFER_BIT",...
Большое спасибо. Единственный код который прошел без каких либо ошибок. Ура!!!
Скажите пожалуйста, подскажите алгоритм по которому по заданным точкам можно определить тип многогранника, скажем это куб или прямоугольный параллелепипед. Нашел теорию по этим фигурам: https://www.mat... https://www.mat... Акцентировать внимание...
Всем у кого не работает. файл wizard.script Ещё одно упоминание Glut32 в строке "if (!VerifyLibFile(dir_nomacro_lib, _T("glut32"), _T("GLUT's"))) return false;" меняем на "if (!VerifyLibFile(dir_nomacro_lib, _T("freeglut"), _T("GLUT's"))) return...
Не получается, емаё

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

Рейтинг@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;