ArenaZ

Форк
0
/
uGlobal.pas 
229 строк · 5.3 Кб
1
unit uGlobal;
2

3

4
interface
5

6
uses
7
  Classes,
8
  SysUtils,
9
  Printers,
10
  OpenGLTokens,
11
  Graphics,
12
  GLVectorGeometry,
13
  GLCoordinates,
14
  GLVectorLists,
15
  GLColor;
16

17
const
18
  NewFName: TFileName = 'New Graph';
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: TColorVector;
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: TColorVector;
82
    xRange, zRange: TRange;
83
    yPosition: TGLFloat;
84
    IsVisible: Boolean;
85
    IsChecked: Boolean;
86
  end;
87

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

96
  TViewData = record
97
    CameraCubeAt: TVector;
98
    CameraAt: TVector;
99
    fLength: TGLFloat;
100
    LightAt: TVector;
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: TColorVector;
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: TColorVector;
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: TColorVector;
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
  MainPath: TFileName;
190
  DataPath: TFileName;
191
  ImagePath: TFileName;
192
  GraphFName: TFileName;
193
  LayoutFName: TFileName;
194
  RecentFName: TFileName;
195
  Layout: TLayout;
196
  ViewData: TViewData;
197
  PlotData: TPlotData;
198
  AddedData: TAddedData;
199

200
implementation
201

202
constructor TPlotDataObject.Create(D: TPlotData);
203
begin
204
  inherited Create;
205
  Data := D;
206
end;
207

208
destructor TPlotDataObject.Destroy;
209
begin
210
  inherited Destroy;
211
end;
212

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

224
destructor TVolumeLineObject.Destroy;
225
begin
226
  inherited Destroy;
227
end;
228

229
end.
230

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

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

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

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