MathgeomGLS

Форк
0
/
Graf.Global2d.pas 
232 строки · 5.4 Кб
1
unit Graf.Global2d;
2

3
interface
4

5
uses
6
  System.Classes,
7
  System.SysUtils,
8
  Printers,
9
  GLS.OpenGLTokens,
10
  Vcl.Graphics,
11
  GLS.VectorGeometry,
12
  GLS.Coordinates,
13
  GLS.VectorLists,
14
  GLS.Color,
15
  GLS.VectorTypes;
16

17
const
18
  NewFName: TFileName = 'New Plot';
19

20
  PosFloat: Set of Char = ['0'..'9','e','E','.', #8];
21
  AnyFloat: Set of Char = ['-', '0'..'9','e','E', '.', #8];
22

23
type
24
  TLayout = record
25
    IsMaximize: Boolean; // is true if ViewForm.WindowState = wsMaximized
26
    MainLeft: integer;
27
    MainTop: integer;
28
    MainWidth: integer;
29
    MainHeight: integer;
30
    CurrentGraphFName: ShortString;
31
    CurrentDataPath: ShortString;
32
    CurrentImagePath: ShortString;
33
    FuncLeft: integer;
34
    FuncTop: integer;
35
    FuncWidth: integer;
36
    FuncHeight: integer;
37
    GridsVisible: Boolean;
38
    GridsLeft: integer;
39
    GridsTop: integer;
40
    GridColorsLeft: integer;
41
    GridColorsTop: integer;
42
    PlotColorsLeft: integer;
43
    PlotColorsTop: integer;
44
    EvaluateVisible: Boolean;
45
    EvaluateLeft: integer;
46
    EvaluateTop: integer;
47
    CoordVisible: Boolean;
48
    CoordLeft: integer;
49
    CoordTop: integer;
50
    DerivLeft: integer;
51
    DerivTop: integer;
52
    AddColorsLeft: integer;
53
    AddColorsTop: integer;
54
    PointCount: integer;
55
  end;
56

57
  TViewMode = (vmAmbient, vmAmbientandDiffuse, vmDiffuse, vmEmmision, vmNone);
58
  TViewModes = set of TViewMode;
59

60
  TfxyMode = (fxyFill, fxyLines, fxyPoints);
61
  TfxyModes = set of TfxyMode;
62

63
  TAddedType = (AddNone, AddDerivX, AddDerivY, AddVolume);
64

65
  TRange = record
66
    Maximum: TGLFloat;
67
    Minimum: TGLFloat;
68
    Step: TGlFloat;
69
  end;
70

71
  TxyGrid = record
72
    Color: TGLColorVector;
73
    xRange, yRange: TRange;
74
    zPosition: TGLFloat;  // unscaled
75
    zScale: TGLFloat;     // actual zPosition = zPosition*zScale
76
    IsVisible: Boolean;
77
    IsChecked: Boolean;
78
  end;
79

80
  TxzGrid = record
81
    Color: TGLColorVector;
82
    xRange, zRange: TRange;
83
    yPosition: TGLFloat;
84
    IsVisible: Boolean;
85
    IsChecked: Boolean;
86
  end;
87

88
  TyzGrid = record
89
    Color: TGLColorVector;
90
    yRange, zRange: TRange;
91
    xPosition: TGLFloat;
92
    IsVisible: Boolean;
93
    IsChecked: Boolean;
94
  end;
95

96
  TViewData = record
97
    CameraCubeAt: TGLVector;
98
    CameraAt: TGLVector;
99
    fLength: TGLFloat;
100
    LightAt: TGLVector;
101
    ViewDepth: TGLFloat;
102
    BackColor: TColor;
103

104
    xyGrid: TxyGrid;
105
    xzGrid: TxzGrid;
106
    yzGrid: TyzGrid;
107

108
    xEvaluate: TGLFloat;
109
    yEvaluate: TGLFloat;
110
    CoordChecked: Boolean;
111
    ToGridsChecked: Boolean;
112
    dzdx_dyChecked: Boolean;
113
    BoxChecked: Boolean;
114
    CoordWidth: integer;
115
    CoordColor: TColor;
116
    BoxLnWidth: integer;
117
    BoxLnColor: TGLColorVector;
118

119
    TextVisible: Boolean;
120
    TextFontN: ShortString;
121
    TextFontSz: integer;
122
    xPosYMax: Boolean;
123
    xPosZMax: Boolean;
124
    xTextColor: TColor;
125

126
    yPosXMax: Boolean;
127
    yPosZMax: Boolean;
128
    yTextColor: TColor;
129

130
    zPosXMax: Boolean;
131
    zPosYMax: Boolean;
132
    zTextColor: TColor;
133
    ArrowSize: TGLFloat;
134
  end;
135

136
  TPlotData = record
137
    fxyStr: string;                 // function string e.g. 'sin(x*y)'
138
    txtStr: string;
139
    NoteStr: string;
140
    xMin, xMax, xInc: TGLFloat;     // x limits and increment
141
    yMin, yMax, yInc: TGLFloat;     // y limits and increment
142
    zMin, zMax: TGLFloat;           // z limits
143
    zLim: Boolean;                  // limits upper & lower z
144
    zCap: Boolean;                  // caps the above z
145

146
    UpperColor, LowerColor: TGLColorVector;
147
    ColorBlend: TGLFloat;
148
    ColorMove: TGLFloat;
149
    ViewMode: TViewMode;
150
    fxyMode: TfxyMode;
151
  end;
152

153
  TPlotDataObject = class(TObject)        // data object stored in listbox
154
    constructor Create(D: TPlotData);
155
    destructor Destroy; override;
156
  public
157
    Data: TPlotData;
158
  end;
159

160
  TAddedData = record
161
    xMin, xMax, xInc: TGLFloat;           // x limits and increment
162
    yMin, yMax, yInc: TGLFloat;           // y limits and increment
163
    zMin, zMax: TGLFloat;                 // z limits
164
    zLim: Boolean;                        // limits upper & lower z
165
    zCap: Boolean;                        // caps the above z
166

167
    UpperColor, LowerColor: TGLColorVector;
168
    ColorBlend: TGLFloat;
169
    ColorMove: TGLFloat;
170
    ViewMode: TViewMode;
171
    fxyMode: TfxyMode;
172
    AddLineWidth: integer;
173
    AddLineColor: integer;
174
    AddedAs: TAddedType;
175
  end;
176

177
  TVolumeLineObject = class(TObject)
178
    constructor Create(xT, yT, zT, xE, yE, zE, Vol: TGLFloat);
179
    destructor Destroy; override;
180
  public
181
    x1, y1, z1, x2, y2, z2, v: TGLFloat;
182
  end;
183

184
var
185
  Altered: Boolean;   // any alteration to the plot
186
  GridColorsAltered: Boolean;
187
  DerivativeAltered: Boolean;
188

189
  BinPath: TFileName;     // the same as for Plot2d.dproj
190
///  PlotPath: TFileName; // Now exe in BinPath
191
  DataPath: TFileName;
192
  ImagePath: TFileName;
193
  GraphFName: TFileName;
194
  LayoutFName: TFileName;
195
  RecentFName: TFileName;
196
  Layout: TLayout;
197
  ViewData: TViewData;
198
  PlotData: TPlotData;
199
  AddedData: TAddedData;
200

201
//======================================================================
202
implementation
203
//======================================================================
204

205
constructor TPlotDataObject.Create(D: TPlotData);
206
begin
207
  inherited Create;
208
  Data := D;
209
end;
210

211
destructor TPlotDataObject.Destroy;
212
begin
213
  inherited Destroy;
214
end;
215

216
constructor TVolumeLineObject.Create(xT, yT, zT, xE, yE, zE, Vol: TGLFloat);
217
begin
218
  x1 := xT;
219
  y1 := yT;
220
  z1 := zT;
221
  x2 := xE;
222
  y2 := yE;
223
  z2 := zE;
224
  v := Vol;
225
end;
226

227
destructor TVolumeLineObject.Destroy;
228
begin
229
  inherited Destroy;
230
end;
231

232
end.
233

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.