MathgeomGLS
232 строки · 5.4 Кб
1unit Graf.Global2d;2
3interface
4
5uses
6System.Classes,7System.SysUtils,8Printers,9GLS.OpenGLTokens,10Vcl.Graphics,11GLS.VectorGeometry,12GLS.Coordinates,13GLS.VectorLists,14GLS.Color,15GLS.VectorTypes;16
17const
18NewFName: TFileName = 'New Plot';19
20PosFloat: Set of Char = ['0'..'9','e','E','.', #8];21AnyFloat: Set of Char = ['-', '0'..'9','e','E', '.', #8];22
23type
24TLayout = record25IsMaximize: Boolean; // is true if ViewForm.WindowState = wsMaximized26MainLeft: integer;27MainTop: integer;28MainWidth: integer;29MainHeight: integer;30CurrentGraphFName: ShortString;31CurrentDataPath: ShortString;32CurrentImagePath: ShortString;33FuncLeft: integer;34FuncTop: integer;35FuncWidth: integer;36FuncHeight: integer;37GridsVisible: Boolean;38GridsLeft: integer;39GridsTop: integer;40GridColorsLeft: integer;41GridColorsTop: integer;42PlotColorsLeft: integer;43PlotColorsTop: integer;44EvaluateVisible: Boolean;45EvaluateLeft: integer;46EvaluateTop: integer;47CoordVisible: Boolean;48CoordLeft: integer;49CoordTop: integer;50DerivLeft: integer;51DerivTop: integer;52AddColorsLeft: integer;53AddColorsTop: integer;54PointCount: integer;55end;56
57TViewMode = (vmAmbient, vmAmbientandDiffuse, vmDiffuse, vmEmmision, vmNone);58TViewModes = set of TViewMode;59
60TfxyMode = (fxyFill, fxyLines, fxyPoints);61TfxyModes = set of TfxyMode;62
63TAddedType = (AddNone, AddDerivX, AddDerivY, AddVolume);64
65TRange = record66Maximum: TGLFloat;67Minimum: TGLFloat;68Step: TGlFloat;69end;70
71TxyGrid = record72Color: TGLColorVector;73xRange, yRange: TRange;74zPosition: TGLFloat; // unscaled75zScale: TGLFloat; // actual zPosition = zPosition*zScale76IsVisible: Boolean;77IsChecked: Boolean;78end;79
80TxzGrid = record81Color: TGLColorVector;82xRange, zRange: TRange;83yPosition: TGLFloat;84IsVisible: Boolean;85IsChecked: Boolean;86end;87
88TyzGrid = record89Color: TGLColorVector;90yRange, zRange: TRange;91xPosition: TGLFloat;92IsVisible: Boolean;93IsChecked: Boolean;94end;95
96TViewData = record97CameraCubeAt: TGLVector;98CameraAt: TGLVector;99fLength: TGLFloat;100LightAt: TGLVector;101ViewDepth: TGLFloat;102BackColor: TColor;103
104xyGrid: TxyGrid;105xzGrid: TxzGrid;106yzGrid: TyzGrid;107
108xEvaluate: TGLFloat;109yEvaluate: TGLFloat;110CoordChecked: Boolean;111ToGridsChecked: Boolean;112dzdx_dyChecked: Boolean;113BoxChecked: Boolean;114CoordWidth: integer;115CoordColor: TColor;116BoxLnWidth: integer;117BoxLnColor: TGLColorVector;118
119TextVisible: Boolean;120TextFontN: ShortString;121TextFontSz: integer;122xPosYMax: Boolean;123xPosZMax: Boolean;124xTextColor: TColor;125
126yPosXMax: Boolean;127yPosZMax: Boolean;128yTextColor: TColor;129
130zPosXMax: Boolean;131zPosYMax: Boolean;132zTextColor: TColor;133ArrowSize: TGLFloat;134end;135
136TPlotData = record137fxyStr: string; // function string e.g. 'sin(x*y)'138txtStr: string;139NoteStr: string;140xMin, xMax, xInc: TGLFloat; // x limits and increment141yMin, yMax, yInc: TGLFloat; // y limits and increment142zMin, zMax: TGLFloat; // z limits143zLim: Boolean; // limits upper & lower z144zCap: Boolean; // caps the above z145
146UpperColor, LowerColor: TGLColorVector;147ColorBlend: TGLFloat;148ColorMove: TGLFloat;149ViewMode: TViewMode;150fxyMode: TfxyMode;151end;152
153TPlotDataObject = class(TObject) // data object stored in listbox154constructor Create(D: TPlotData);155destructor Destroy; override;156public157Data: TPlotData;158end;159
160TAddedData = record161xMin, xMax, xInc: TGLFloat; // x limits and increment162yMin, yMax, yInc: TGLFloat; // y limits and increment163zMin, zMax: TGLFloat; // z limits164zLim: Boolean; // limits upper & lower z165zCap: Boolean; // caps the above z166
167UpperColor, LowerColor: TGLColorVector;168ColorBlend: TGLFloat;169ColorMove: TGLFloat;170ViewMode: TViewMode;171fxyMode: TfxyMode;172AddLineWidth: integer;173AddLineColor: integer;174AddedAs: TAddedType;175end;176
177TVolumeLineObject = class(TObject)178constructor Create(xT, yT, zT, xE, yE, zE, Vol: TGLFloat);179destructor Destroy; override;180public181x1, y1, z1, x2, y2, z2, v: TGLFloat;182end;183
184var
185Altered: Boolean; // any alteration to the plot186GridColorsAltered: Boolean;187DerivativeAltered: Boolean;188
189BinPath: TFileName; // the same as for Plot2d.dproj190/// PlotPath: TFileName; // Now exe in BinPath
191DataPath: TFileName;192ImagePath: TFileName;193GraphFName: TFileName;194LayoutFName: TFileName;195RecentFName: TFileName;196Layout: TLayout;197ViewData: TViewData;198PlotData: TPlotData;199AddedData: TAddedData;200
201//======================================================================
202implementation
203//======================================================================
204
205constructor TPlotDataObject.Create(D: TPlotData);206begin
207inherited Create;208Data := D;209end;210
211destructor TPlotDataObject.Destroy;212begin
213inherited Destroy;214end;215
216constructor TVolumeLineObject.Create(xT, yT, zT, xE, yE, zE, Vol: TGLFloat);217begin
218x1 := xT;219y1 := yT;220z1 := zT;221x2 := xE;222y2 := yE;223z2 := zE;224v := Vol;225end;226
227destructor TVolumeLineObject.Destroy;228begin
229inherited Destroy;230end;231
232end.233