home *** CD-ROM | disk | FTP | other *** search
/ CD Actual Thematic 25: Programming / pc_actual_25.iso / Delphi / TeeChartPro / TeeChart5Delphi5Eval.exe / %MAINDIR% / Examples / Features / OpenGL_TriSurface.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  2001-09-10  |  6.9 KB  |  269 lines

  1. {$I TeeDefs.inc}
  2. unit OpenGL_TriSurface;
  3.  
  4. interface
  5.  
  6. { This example shows the Tri-Surface Charting style of
  7.   TeeChart Pro with OpenGL.
  8.  
  9.   The "Tri-Surface" series allows you to add 3D points
  10.   using the AddXYZ method using floating point values and
  11.   without having to specify a "grid" of surface cells.
  12.  
  13.   So, you are free to add points at any XYZ coordinates:
  14.  
  15.     Series1.AddXYZ( 1.23 , 4.2984, 545.22 );
  16.     Series1.AddXYZ( -325.3 , 67.32, 65.3 );
  17.     Series1.AddXYZ( 66.2 , 821.2, -255.11 );
  18.     ...
  19.  
  20.   and the TriSurface series will calculate the best set of
  21.   "triangles" that connects all 3 points forming a surface.
  22.  
  23.   The triangles are displayed using the Pen and Brush of the
  24.   Series, and the gradient and pallete of colors are also
  25.   available.
  26. }
  27.  
  28.  
  29. uses
  30.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  31.   ExtCtrls, TeeProcs, TeEngine, Chart, TeeComma, StdCtrls,
  32.   TeeOpenGL, TeeEditPro, Series, TeePoin3, TeeSurfa, ComCtrls, TeeTriSurface;
  33.  
  34. type
  35.   TOpenGLTriSurface = class(TForm)
  36.     Chart1: TChart;
  37.     TeeOpenGL1: TTeeOpenGL;
  38.     Panel1: TPanel;
  39.     Label1: TLabel;
  40.     Button1: TButton;
  41.     Button2: TButton;
  42.     CheckBox6: TCheckBox;
  43.     CheckBox1: TCheckBox;
  44.     CheckBox2: TCheckBox;
  45.     CheckBox3: TCheckBox;
  46.     Label2: TLabel;
  47.     Edit1: TEdit;
  48.     UpDown1: TUpDown;
  49.     ScrollBar1: TScrollBar;
  50.     ScrollBar2: TScrollBar;
  51.     ScrollBar3: TScrollBar;
  52.     CheckBox8: TCheckBox;
  53.     CheckBox9: TCheckBox;
  54.     Series1: TTriSurfaceSeries;
  55.     Series2: TPoint3DSeries;
  56.     Series3: TSurfaceSeries;
  57.     TeeCommander1: TTeeCommander;
  58.     procedure FormCreate(Sender: TObject);
  59.     procedure CheckBox1Click(Sender: TObject);
  60.     procedure CheckBox2Click(Sender: TObject);
  61.     procedure CheckBox3Click(Sender: TObject);
  62.     procedure FormShow(Sender: TObject);
  63.     procedure Button1Click(Sender: TObject);
  64.     procedure Button2Click(Sender: TObject);
  65.     procedure CheckBox6Click(Sender: TObject);
  66.     procedure ScrollBar1Change(Sender: TObject);
  67.     procedure ScrollBar2Change(Sender: TObject);
  68.     procedure ScrollBar3Change(Sender: TObject);
  69.     procedure CheckBox8Click(Sender: TObject);
  70.     procedure CheckBox9Click(Sender: TObject);
  71.     procedure Edit1Change(Sender: TObject);
  72.     procedure Series1GetMarkText(Sender: TChartSeries; ValueIndex: Integer;
  73.       var MarkText: String);
  74.   private
  75.     { Private declarations }
  76.     Changing:Boolean;
  77.     Procedure AddRandomPoint;
  78.   public
  79.     { Public declarations }
  80.   end;
  81.  
  82. implementation
  83.  
  84. {$R *.DFM}
  85. Uses TeeTriSurfEdit, TeeGLEditor;
  86.  
  87. procedure TOpenGLTriSurface.FormCreate(Sender: TObject);
  88. var t,
  89.     tt : Integer;
  90. begin
  91.   Changing:=False;
  92.  
  93.   { Tri-Surface }
  94.   With Series1 do
  95.   begin
  96.     Clear;
  97.     for t:=1 to 30 do AddRandomPoint;
  98.  
  99. { // some test...
  100.     AddPoint(0,0,0);
  101.     AddPoint(0.5,0.25,0.5);
  102.     AddPoint(0.25,0,0.5);
  103.     AddPoint(0,0.5,0.1);
  104.     AddPoint(0.5,0.5,0.15);
  105. }
  106.  
  107.     UsePalette:=True;
  108.     UseColorRange:=False;
  109.  
  110.     Title:='Tri-Surface';
  111.   end;
  112.  
  113.   { Point3D series }
  114.   With Series2 do
  115.   begin
  116.     ColorEachPoint:=True;
  117.     DataSource:=Series1;
  118.     Pointer.VertSize:=8;
  119.     Pointer.HorizSize:=8;
  120.     Pointer.Style:=psCircle;
  121.   end;
  122.  
  123.   { Irregular Surface }
  124.   With Series3 do
  125.   begin
  126.     IrregularGrid:=True;
  127.     UsePalette:=True;
  128.     UseColorRange:=False;
  129.     Clear;
  130.     NumXValues:=0;
  131.     NumZValues:=0;
  132.     for t:=1 to 10 do
  133.         for tt:=1 to 10 do
  134.             AddXYZ( t,(exp(1+cos(t)*tt+sin(t)*cos(tt))) ,(tt-5.0)/10.0
  135.                    {$IFNDEF D4}, '', clTeeColor{$ENDIF});
  136.   end;
  137. end;
  138.  
  139. procedure TOpenGLTriSurface.CheckBox1Click(Sender: TObject);
  140. begin
  141.   TeeOpenGL1.Active:=CheckBox1.Checked
  142. end;
  143.  
  144. procedure TOpenGLTriSurface.CheckBox2Click(Sender: TObject);
  145. begin
  146.   Series1.Pen.Visible:=CheckBox2.Checked
  147. end;
  148.  
  149. procedure TOpenGLTriSurface.CheckBox3Click(Sender: TObject);
  150. begin
  151.   Series1.UsePalette:=CheckBox3.Checked;
  152.   Series1.UseColorRange:=not Series1.UsePalette;
  153. end;
  154.  
  155. procedure TOpenGLTriSurface.FormShow(Sender: TObject);
  156. begin
  157.   TeeCommander1.ButtonRotate.Down:=True;
  158. end;
  159.  
  160. { Some formula to calculate values... }
  161. Procedure TOpenGLTriSurface.AddRandomPoint;
  162. Const tmpRange=100;
  163. var tmpX,tmpZ:Double;
  164. begin
  165.   tmpX:=-0.5+Random(tmpRange)/tmpRange;
  166.   tmpZ:=-0.5+Random(tmpRange)/tmpRange;
  167.   Series1.AddXYZ( tmpX,
  168.                     -Sqrt(exp(tmpx * cos(sqr(tmpx)))) + sin(tmpz * tmpz)
  169.                     ,tmpZ,'',clTeeColor);
  170.  
  171.   UpDown1.Max:=Series1.Count-1;
  172. end;
  173.  
  174. procedure TOpenGLTriSurface.Button1Click(Sender: TObject);
  175. begin
  176.   { add one more random point to the Series }
  177.   AddRandomPoint;
  178.   Label1.Caption:='Num.Points: '+IntToStr(Series1.Count);
  179. end;
  180.  
  181. procedure TOpenGLTriSurface.Button2Click(Sender: TObject);
  182. begin
  183.   { Remove one point (only when there are more than 8 points) }
  184.   With Series1 do
  185.   if Count>8 then
  186.   begin
  187.     { the Chart will repaint after deleting one point.. }
  188.     Delete(Random(Count));
  189.     UpDown1.Max:=Count-1;
  190.   end;
  191. end;
  192.  
  193. procedure TOpenGLTriSurface.CheckBox6Click(Sender: TObject);
  194. begin
  195.   Series1.Border.Visible:=CheckBox6.Checked;
  196. end;
  197.  
  198. procedure TOpenGLTriSurface.ScrollBar1Change(Sender: TObject);
  199. begin
  200.   if not Changing then
  201.   begin
  202.     Series1.XValues[UpDown1.Position]:=ScrollBar1.Position/100.0;
  203.     Series1.Repaint;
  204.   end;
  205. end;
  206.  
  207. procedure TOpenGLTriSurface.ScrollBar2Change(Sender: TObject);
  208. begin
  209.   if not Changing then
  210.   begin
  211.     Series1.YValues[UpDown1.Position]:=ScrollBar2.Position/50.0;
  212.     Series1.Repaint;
  213.   end;
  214. end;
  215.  
  216. procedure TOpenGLTriSurface.ScrollBar3Change(Sender: TObject);
  217. begin
  218.   if not Changing then
  219.   begin
  220.     Series1.ZValues[UpDown1.Position]:=ScrollBar3.Position/100.0;
  221.     Series1.Repaint;
  222.   end;
  223. end;
  224.  
  225. procedure TOpenGLTriSurface.CheckBox8Click(Sender: TObject);
  226. var t : Integer;
  227. begin
  228.   for t:=0 to Chart1.SeriesCount-1 do
  229.   if Chart1[t] is TPoint3DSeries then
  230.      Chart1[t].Active:=CheckBox8.Checked;
  231. end;
  232.  
  233. procedure TOpenGLTriSurface.CheckBox9Click(Sender: TObject);
  234. var t:Integer;
  235. begin
  236.   for t:=0 to Chart1.SeriesCount-1 do
  237.   if Chart1[t] is TSurfaceSeries then
  238.      Chart1[t].Active:=CheckBox9.Checked;
  239.   if CheckBox9.Checked then
  240.   begin
  241.     Chart1.LeftAxis.EndPosition:=50;
  242.     Chart1.BottomAxis.EndPosition:=50;
  243.   end
  244.   else
  245.   begin
  246.     Chart1.LeftAxis.EndPosition:=100;
  247.     Chart1.BottomAxis.EndPosition:=100;
  248.   end;
  249. end;
  250.  
  251. procedure TOpenGLTriSurface.Edit1Change(Sender: TObject);
  252. begin
  253.   Changing:=True;
  254.   ScrollBar1.Position:=Round(100.0*Series1.XValues[UpDown1.Position]);
  255.   ScrollBar2.Position:=Round(50.0*Series1.YValues[UpDown1.Position]);
  256.   ScrollBar3.Position:=Round(100.0*Series1.ZValues[UpDown1.Position]);
  257.   Changing:=False;
  258. end;
  259.  
  260. procedure TOpenGLTriSurface.Series1GetMarkText(Sender: TChartSeries;
  261.   ValueIndex: Integer; var MarkText: String);
  262. begin
  263.   MarkText:=IntToStr(ValueIndex);
  264. end;
  265.  
  266. initialization
  267.   RegisterClass(TOpenGLTriSurface);
  268. end.
  269.