Chartl.SeriesList[0] := Series2;
Chartl.SeriesList[1] := Seriesl;
Chartl.SeriesList[2] := Series3;
Chartl.Repaint;

разместят на заднем плане серию Series2, на среднем - Seriesl и на переднем - серию Series3. После перестановок надо выполнить метод Repaint, чтобы изображение перерисовалось и изменения отобразились в окне графика.

Приведем еще один пример. Следующий код изменяет последовательность серий на обратную, перемещая на первый план серии, бывшие на заднем плане:

var i: integer;
P: Pointer;
for i:= 0 to (Chartl.SeriesCount-1) div 2 do begin P := Chartl.SeriesList [i];
Chartl.SeriesList[i] := Chartl.SeriesList[Chartl.SeriesCount-l-i];
Chartl.SeriesList[Chartl.SeriesCount-l-i] := P;
end;
Chartl.Repaint;

Число уровней, выделенных на оси Z, показывает свойство MaxZOrder.

Надо упомянуть еще об одной особенности оси Z. Свойство Inverted (инвертирование) этой оси переставляет только метки, не изменяя размещение серий. В этом отличие этого свойства для оси Z от аналогичного свойства для горизонтальных и вертикальных осей, в которых изменяется и последовательность отображаемых значений. Таким образом, для оси Z свойство Inverted всегда должно равняться false. Иначе возникнет путаница между метками оси и в действительности размещенными на этих метках сериями.

Говоря о трехмерных изображениях, надо рассмотреть особенности канвы компонента Chart. Эта канва (свойство Canvas) может рассматриваться и как обычная канва класса TCanvas, обеспечивающая, в частности, рисование плоских фигур, и как трехмерная канва класса TCanvas3D, обладающая множеством методов рисования трехмерных изображений. Так как в рамках данной книги невозможно их все рассмотреть, изучите их по встроенной справке Delphi. Среди них есть аналоги двумерных методов: MoveTo3D - перемещение текущей точки, LineTo3D - рисование линии, TextOut3D - вывод текста. Есть методы рисования плоских фигур в трехмерном пространстве. Например, RectangleY - горизонтальный прямоугольник при указанном значении Y, RectangleZ - вертикальный прямоугольник при указанном значении X, RectangleWithZ - прямоугольник в указанной позиции Z. А есть методы рисования объемных фигур. В качестве примера приведем объявления методов, рисующих цилиндр, пирамиду и куб:

procédure Cylinder (Vertical :Boolean;
Left, Top, Right, Bottom, ZO, ZI: Integer;
DarkCover: Boolean);
procédure Pyramid (Vertical :Boolean;
Left, Top, Right, Bottom, ZO, ZI: Integer;
Darksides: Boolean);
procédure Cube (Left, Right, Top, Bottom, ZO, ZI: Integer;
DarkSides: Boolean);

Параметры Left, Right, Top, Bottom, ZO и ZI указывают координаты параллелепипеда, ограничивающего рисуемое тело. Параметр Darksides указывает, должна ли изображаться тень на правой поверхности тела. Параметр Vertical для цилиндра и пирамиды указывает, вертикально или горизонтально располагается тело.

При трехмерном рисовании очень полезен метод Calculate3DPosition канвы TCanvas3D:

function Calculate3DPosition (х,у,z:Integer):TPoint;

Этот метод рассчитывает и возвращает местоположение на плоскости точки с координатами х, у, z.

На рис. 7.20 приведен пример применения рассмотренных методов. Изображение получено с помощью кода:

Var P:TPoint;

With Chartl.Canvas do begin

P:=Calculate3DPosition(Chartl.ChartXCenter, Chartl.ChartYCenter, 0) ;
TextOut3D (P.X,70,0,'Примеры фигур');
TextOut3D (P.X,70,10,'Примеры фигур');
Cylinder(true, P.Х-150,P.Y-4 0,P.X-7 0,P.Y+4 0,0,20, false);
Cube(P.X-40,P.X+40,P.Y-40,P.Y+40,0,20, true );
Pyramid(true, P.X+70,P.Y-4 0,P.X+150,P.Y+40,0,20, true);
end;

Рис. 7.20

Пример цилиндра, куба, пирамиды и надписей в трехмерном пространстве

7.6 Трехмерное представление графиков и диаграмм

Первый оператор определяет с помощью метода Calculate3DPosition положение на плоскости точки соответствующей центру осей X и Y (находятся с помощью свойств ChartXCenter и ChartYCenter) и нулевой координате Z. Два следующих оператора пишут методом TextOut3D на канве одинаковый текст "Примеры фигур" в одинаковых позициях X и Y, но при разных значениях координаты Z. Как видно на рис. 7.19, эти тексты размещаются с соответствующей перспективой, отображая глубину пространства. Три следующие оператора рисуют цилиндр, куб и пирамиду, отсчитывая их местоположение относительно определенного первым оператором центра изображения.

7.5 Оси координат, надписи около делений, масштаб и прокрутка || Оглавление || 7.7 Классы серий графиков и диаграмм


⇐ Предыдущая страница|

Приемы программирования в Delphi на основе VCL



Новости за месяц

  • Апрель
    2020
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31