MathgeomGLS
1074 строки · 26.9 Кб
1unit fGridOptions;2
3interface
4
5uses
6Winapi.Windows,7Winapi.Messages,8System.SysUtils,9System.Variants,10System.Classes,11System.Math,12Vcl.Graphics,13Vcl.Controls,14Vcl.Forms,15Vcl.Dialogs,16Vcl.StdCtrls,17Vcl.Buttons,18
19GLS.OpenGLTokens,20GLS.VectorTypes,21GLS.Coordinates,22GLS.VectorGeometry,23
24uGlobal,25uParser,26fGridColors;27
28type
29TFormGridOptions = class(TForm)30GroupBoxXY: TGroupBox;31Label7: TLabel;32Label8: TLabel;33Label9: TLabel;34Label11: TLabel;35Label12: TLabel;36Label10: TLabel;37EditxyGridMinx: TEdit;38EditxyGridMaxx: TEdit;39EditxyGridStpx: TEdit;40EditxyGridMiny: TEdit;41EditxyGridMaxy: TEdit;42EditxyGridStpy: TEdit;43EditxyGridPosz: TEdit;44xyLock: TCheckBox;45GroupBoxXZ: TGroupBox;46Label13: TLabel;47Label18: TLabel;48Label20: TLabel;49Label21: TLabel;50Label22: TLabel;51Label23: TLabel;52EditxzGridMinx: TEdit;53EditxzGridMaxx: TEdit;54EditxzGridStpx: TEdit;55EditxzGridMinz: TEdit;56EditxzGridMaxz: TEdit;57EditxzGridStpz: TEdit;58EditxzGridPosy: TEdit;59zLock: TCheckBox;60GroupBoxYZ: TGroupBox;61Label24: TLabel;62Label25: TLabel;63Label26: TLabel;64Label27: TLabel;65Label28: TLabel;66Label29: TLabel;67EdityzGridMiny: TEdit;68EdityzGridMaxy: TEdit;69EdityzGridStpy: TEdit;70EdityzGridMinz: TEdit;71EdityzGridMaxz: TEdit;72EdityzGridStpz: TEdit;73EdityzGridPosx: TEdit;74GroupBoxOp: TGroupBox;75Label14: TLabel;76Label19: TLabel;77Colors: TSpeedButton;78xyGridCB: TCheckBox;79xzGridCB: TCheckBox;80yzGridCB: TCheckBox;81EditViewDepth: TEdit;82MinLock: TCheckBox;83Label1: TLabel;84EditzScale: TEdit;85Centre: TSpeedButton;86BoxOutlineCB: TCheckBox;87Label4: TLabel;88EditBoxLnWidth: TEdit;89BitBtn1: TBitBtn;90PlotValues: TSpeedButton;91procedure ColorsClick(Sender: TObject);92procedure FloatKeyPress(Sender: TObject; var Key: Char);93procedure PositiveKeyPress(Sender: TObject; var Key: Char);94procedure EditxyGridMinxChange(Sender: TObject);95procedure EditxyGridMaxxChange(Sender: TObject);96procedure EditxyGridStpxChange(Sender: TObject);97procedure EditxyGridPoszChange(Sender: TObject);98procedure EditxyGridMinyChange(Sender: TObject);99procedure EditxyGridMaxyChange(Sender: TObject);100procedure EditxyGridStpyChange(Sender: TObject);101procedure EditxzGridMinxChange(Sender: TObject);102procedure EditxzGridMaxxChange(Sender: TObject);103procedure EditxzGridStpxChange(Sender: TObject);104procedure EditxzGridPosyChange(Sender: TObject);105procedure EditxzGridMinzChange(Sender: TObject);106procedure EditxzGridMaxzChange(Sender: TObject);107procedure EditxzGridStpzChange(Sender: TObject);108procedure EdityzGridMinyChange(Sender: TObject);109procedure EdityzGridMaxyChange(Sender: TObject);110procedure EdityzGridStpyChange(Sender: TObject);111procedure EdityzGridPosxChange(Sender: TObject);112procedure EdityzGridMinzChange(Sender: TObject);113procedure EdityzGridMaxzChange(Sender: TObject);114procedure EdityzGridStpzChange(Sender: TObject);115procedure xyGridCBClick(Sender: TObject);116procedure xzGridCBClick(Sender: TObject);117procedure yzGridCBClick(Sender: TObject);118procedure xyLockClick(Sender: TObject);119procedure zLockClick(Sender: TObject);120procedure MinLockClick(Sender: TObject);121procedure ComboBoxMouseEnter(Sender: TObject);122procedure EditViewDepthChange(Sender: TObject);123procedure CentreClick(Sender: TObject);124procedure EditzScaleKeyUp(Sender: TObject; var Key: Word;125Shift: TShiftState);126procedure BoxOutlineCBClick(Sender: TObject);127procedure IntKeyPress(Sender: TObject; var Key: Char);128procedure EditBoxLnWidthKeyUp(Sender: TObject; var Key: Word;129Shift: TShiftState);130procedure BitBtn1Click(Sender: TObject);131procedure EditxzGridStpxExit(Sender: TObject);132procedure EdityzGridStpyExit(Sender: TObject);133procedure EdityzGridStpzExit(Sender: TObject);134procedure PlotValuesClick(Sender: TObject);135private136public137procedure DrawOutline(const Show: Boolean);138end;139
140var
141FormGridOptions: TFormGridOptions;142
143// =====================================================================
144implementation
145// =====================================================================
146
147uses
148fPlot2D,149fEvaluate,150fCoordOptions,151fFunctions;152
153{$R *.dfm}
154
155procedure TFormGridOptions.CentreClick(Sender: TObject);156var
157x, y, z: TGLFloat;158
159begin
160with FormPlot2D do161begin162MousePoint.x := Maxint;163if GLxyGrid.XSamplingScale.Max - GLxyGrid.XSamplingScale.Min >164GLxzGrid.XSamplingScale.Max - GLxzGrid.XSamplingScale.Min then165x := GLxyGrid.XSamplingScale.Max + GLxyGrid.XSamplingScale.Min166else167x := GLxzGrid.XSamplingScale.Max + GLxzGrid.XSamplingScale.Min;168
169if GLxyGrid.YSamplingScale.Max - GLxyGrid.YSamplingScale.Min >170GLyzGrid.YSamplingScale.Max - GLxzGrid.YSamplingScale.Min then171y := GLxyGrid.YSamplingScale.Max + GLxyGrid.YSamplingScale.Min172else173y := GLyzGrid.YSamplingScale.Max + GLyzGrid.YSamplingScale.Min;174
175if GLxzGrid.ZSamplingScale.Max - GLxzGrid.ZSamplingScale.Min >176GLyzGrid.ZSamplingScale.Max - GLyzGrid.ZSamplingScale.Min then177z := GLxzGrid.ZSamplingScale.Max + GLxzGrid.ZSamplingScale.Min178else179z := GLyzGrid.ZSamplingScale.Max + GLyzGrid.ZSamplingScale.Min;180
181TargetCube.Position.SetPoint(x / 2, y / 2,182(ViewData.xyGrid.zScale * z) / 2);183end;184Altered := True;185FormPlot2D.ShowDisplacement;186end;187
188procedure TFormGridOptions.BitBtn1Click(Sender: TObject);189begin
190Close;191end;192
193procedure TFormGridOptions.BoxOutlineCBClick(Sender: TObject);194begin
195ViewData.BoxChecked := BoxOutlineCB.Checked;196DrawOutline(ViewData.BoxChecked);197Altered := True;198end;199
200procedure TFormGridOptions.ColorsClick(Sender: TObject);201begin
202FormGridColors.Show;203end;204
205procedure TFormGridOptions.IntKeyPress(Sender: TObject; var Key: Char);206begin
207with Sender as TEdit do208if not CharInSet(Key, ['0' .. '9', #8]) then209Key := #0210end;211
212procedure TFormGridOptions.EditBoxLnWidthKeyUp(Sender: TObject; var Key: Word;213Shift: TShiftState);214var
215w: integer;216
217begin
218try219w := StrToInt(EditBoxLnWidth.Text);220except221w := 3;222end;223ViewData.BoxLnWidth := w;224FormPlot2D.BoxLine1.LineWidth := w;225FormPlot2D.BoxLine2.LineWidth := w;226FormPlot2D.BoxLine3.LineWidth := w;227FormPlot2D.BoxLine4.LineWidth := w;228Altered := True;229end;230
231procedure TFormGridOptions.EditViewDepthChange(Sender: TObject);232var
233v: TGLFloat;234
235begin
236if Active then237begin238try239v := StrToFloat(EditViewDepth.Text);240except241v := 1000;242end;243if v = 0 then244Exit;245ViewData.ViewDepth := v;246FormPlot2D.GLSViewer.Camera.DepthOfView := v;247end;248end;249
250procedure TFormGridOptions.PlotValuesClick(Sender: TObject);251begin
252if xyLock.Checked and zLock.Checked and MinLock.Checked then253begin254EditxyGridMinx.Text := FloatToStrF(PlotData.xMin, ffGeneral, 7, 4);255EditxyGridMaxx.Text := FloatToStrF(PlotData.xMax, ffGeneral, 7, 4);256EditxyGridMiny.Text := FloatToStrF(PlotData.yMin, ffGeneral, 7, 4);257EditxyGridMaxy.Text := FloatToStrF(PlotData.yMax, ffGeneral, 7, 4);258EditxzGridMinz.Text := FloatToStrF(PlotData.zMin, ffGeneral, 7, 4);259EditxzGridMaxz.Text := FloatToStrF(PlotData.zMax, ffGeneral, 7, 4);260end;261end;262
263procedure TFormGridOptions.PositiveKeyPress(Sender: TObject; var Key: Char);264begin
265with Sender as TEdit do266if not CharInSet(Key, ['+', '0' .. '9', '.', #8]) then267Key := #0;268end;269
270procedure TFormGridOptions.EditxyGridMaxxChange(Sender: TObject);271var
272x: TGLFloat;273
274begin { 2 }275if Active then276begin277try278x := StrToFloat(EditxyGridMaxx.Text);279except280x := 1.0;281end;282ViewData.xyGrid.xRange.Maximum := x;283FormPlot2D.GLxyGrid.XSamplingScale.Max := x;284if xyLock.Checked then285begin286ViewData.xzGrid.xRange.Maximum := x;287FormPlot2D.GLxzGrid.XSamplingScale.Max := x;288EditxzGridMaxx.Text := EditxyGridMaxx.Text;289end;290DrawOutline(ViewData.BoxChecked);291FormCoords.UpdateCoordText;292end;293end;294
295procedure TFormGridOptions.EditxyGridMaxyChange(Sender: TObject);296var
297y: TGLFloat;298
299begin { 5 }300if Active then301begin302try303y := StrToFloat(EditxyGridMaxy.Text);304except305y := 1.0;306end;307ViewData.xyGrid.yRange.Maximum := y;308FormPlot2D.GLxyGrid.YSamplingScale.Max := y;309if xyLock.Checked then310begin311ViewData.yzGrid.yRange.Maximum := y;312FormPlot2D.GLyzGrid.YSamplingScale.Max := y;313EdityzGridMaxy.Text := EditxyGridMaxy.Text;314end;315DrawOutline(ViewData.BoxChecked);316FormCoords.UpdateCoordText;317end;318end;319
320procedure TFormGridOptions.EditxyGridMinxChange(Sender: TObject);321var
322x: TGLFloat;323
324begin { 1 }325if Active then326begin327try328x := StrToFloat(EditxyGridMinx.Text);329except330x := -1.0;331end;332ViewData.xyGrid.xRange.Minimum := x;333FormPlot2D.GLxyGrid.XSamplingScale.Min := x;334if xyLock.Checked then335begin336ViewData.xzGrid.xRange.Minimum := x;337FormPlot2D.GLxzGrid.XSamplingScale.Min := x;338EditxzGridMinx.Text := EditxyGridMinx.Text;339end;340if MinLock.Checked then341begin342ViewData.yzGrid.xPosition := x;343FormPlot2D.GLyzGrid.Position.x := x;344EdityzGridPosx.Text := EditxyGridMinx.Text;345end;346DrawOutline(ViewData.BoxChecked);347FormCoords.UpdateCoordText;348end;349end;350
351procedure TFormGridOptions.EditxyGridMinyChange(Sender: TObject);352var
353y: TGLFloat;354
355begin { 4 }356if Active then357begin { 1 }358try359y := StrToFloat(EditxyGridMiny.Text);360except361y := -1.0;362end;363if xyLock.Checked then364ViewData.xyGrid.yRange.Minimum := y;365FormPlot2D.GLxyGrid.YSamplingScale.Min := y;366if xyLock.Checked then367begin368ViewData.yzGrid.yRange.Minimum := y;369FormPlot2D.GLyzGrid.YSamplingScale.Min := y;370EdityzGridMiny.Text := EditxyGridMiny.Text;371end;372if MinLock.Checked then373begin374ViewData.xzGrid.yPosition := y;375FormPlot2D.GLxzGrid.Position.y := y;376EditxzGridPosy.Text := EditxyGridMiny.Text;377end;378DrawOutline(ViewData.BoxChecked);379FormCoords.UpdateCoordText;380end;381end;382
383procedure TFormGridOptions.EditxyGridPoszChange(Sender: TObject);384var
385z: TGLFloat;386
387begin { - }388if Active then389begin390try391z := StrToFloat(EditxyGridPosz.Text);392except393z := 0.0;394end;395ViewData.xyGrid.zPosition := z;396FormPlot2D.GLxyGrid.Position.z := z * ViewData.xyGrid.zScale;397FormEvaluate.UpdateEvaluate;398DrawOutline(ViewData.BoxChecked);399end;400end;401
402procedure TFormGridOptions.EditxyGridStpxChange(Sender: TObject);403var
404x: TGLFloat;405
406begin { 3 }407if Active then408begin409try410x := StrToFloat(EditxyGridStpx.Text);411except412x := 1.0;413end;414if x = 0 then415x := 1;416ViewData.xyGrid.xRange.Step := x;417FormPlot2D.GLxyGrid.XSamplingScale.Step := x;418if xyLock.Checked then419begin420ViewData.xzGrid.xRange.Step := x;421FormPlot2D.GLxzGrid.XSamplingScale.Step := x;422EditxzGridStpx.Text := EditxyGridStpx.Text;423end;424FormCoords.UpdateCoordText;425FormEvaluate.DoEvaluate;426end;427end;428
429procedure TFormGridOptions.EditxyGridStpyChange(Sender: TObject);430var
431y: TGLFloat;432
433begin { 6 }434if Active then435begin436try437y := StrToFloat(EditxyGridStpy.Text);438except439y := 1.0;440end;441if y = 0 then442y := 1;443ViewData.xyGrid.yRange.Step := y;444FormPlot2D.GLxyGrid.YSamplingScale.Step := y;445if xyLock.Checked then446begin447ViewData.yzGrid.yRange.Step := y;448FormPlot2D.GLyzGrid.YSamplingScale.Step := y;449EdityzGridStpy.Text := EditxyGridStpy.Text;450end;451FormCoords.UpdateCoordText;452FormEvaluate.DoEvaluate;453end;454end;455
456procedure TFormGridOptions.EditxzGridMaxxChange(Sender: TObject);457var
458x: TGLFloat;459
460begin { 2 }461if Active then462begin463try464x := StrToFloat(EditxzGridMaxx.Text);465except466x := 1.0;467end;468ViewData.xzGrid.xRange.Maximum := x;469FormPlot2D.GLxzGrid.XSamplingScale.Max := x;470if xyLock.Checked then471begin472ViewData.xyGrid.xRange.Maximum := x;473FormPlot2D.GLxyGrid.XSamplingScale.Max := x;474EditxyGridMaxx.Text := EditxzGridMaxx.Text;475end;476DrawOutline(ViewData.BoxChecked);477FormCoords.UpdateCoordText;478end;479end;480
481procedure TFormGridOptions.EditxzGridMaxzChange(Sender: TObject);482var
483z: TGLFloat;484
485begin { 8 }486if Active then487begin488try489z := StrToFloat(EditxzGridMaxz.Text);490except491z := 1.0;492end;493ViewData.xzGrid.zRange.Maximum := z;494FormPlot2D.GLxzGrid.ZSamplingScale.Max := z;495if zLock.Checked then496begin497ViewData.yzGrid.zRange.Maximum := z;498FormPlot2D.GLyzGrid.ZSamplingScale.Max := z;499EdityzGridMaxz.Text := EditxzGridMaxz.Text;500end;501DrawOutline(ViewData.BoxChecked);502FormCoords.UpdateCoordText;503end;504end;505
506procedure TFormGridOptions.EditxzGridMinxChange(Sender: TObject);507var
508x: TGLFloat;509
510begin { 1 }511if Active then512begin513try514x := StrToFloat(EditxzGridMinx.Text);515except516x := -1.0;517end;518ViewData.xzGrid.xRange.Minimum := x;519FormPlot2D.GLxzGrid.XSamplingScale.Min := x;520if xyLock.Checked then521begin522ViewData.xyGrid.xRange.Minimum := x;523FormPlot2D.GLxyGrid.XSamplingScale.Min := x;524EditxyGridMinx.Text := EditxzGridMinx.Text;525end;526if MinLock.Checked then527begin528ViewData.yzGrid.xPosition := x;529FormPlot2D.GLyzGrid.Position.x := x;530EdityzGridPosx.Text := EditxzGridMinx.Text;531end;532DrawOutline(ViewData.BoxChecked);533FormCoords.UpdateCoordText;534end;535end;536
537procedure TFormGridOptions.EditxzGridMinzChange(Sender: TObject);538var
539z: TGLFloat;540
541begin { 7 }542if Active then543begin544try545z := StrToFloat(EditxzGridMinz.Text);546except547z := -1.0;548end;549ViewData.xzGrid.zRange.Minimum := z;550FormPlot2D.GLxzGrid.ZSamplingScale.Min := z;551if zLock.Checked then552begin553ViewData.yzGrid.zRange.Minimum := z;554FormPlot2D.GLyzGrid.ZSamplingScale.Min := z;555EdityzGridMinz.Text := EditxzGridMinz.Text;556end;557if MinLock.Checked then558begin559ViewData.xyGrid.zPosition := z;560FormPlot2D.GLxyGrid.Position.z := z * ViewData.xyGrid.zScale;561EditxyGridPosz.Text := EditxzGridMinz.Text;562end;563DrawOutline(ViewData.BoxChecked);564FormCoords.UpdateCoordText;565end;566end;567
568procedure TFormGridOptions.EditxzGridPosyChange(Sender: TObject);569var
570y: TGLFloat;571
572begin { - }573if Active then574begin575try576y := StrToFloat(EditxzGridPosy.Text);577except578y := 1.0;579end;580ViewData.xzGrid.yPosition := y;581FormPlot2D.GLxzGrid.Position.y := y;582FormEvaluate.UpdateEvaluate;583DrawOutline(ViewData.BoxChecked);584end;585end;586
587procedure TFormGridOptions.EditxzGridStpxChange(Sender: TObject);588var
589x: TGLFloat;590
591begin { 3 }592if Active then593begin594try595x := StrToFloat(EditxzGridStpx.Text);596except597x := 1.0;598end;599if x = 0 then600x := 1;601ViewData.xzGrid.xRange.Step := x;602FormPlot2D.GLxzGrid.XSamplingScale.Step := x;603if xyLock.Checked then604begin605ViewData.xyGrid.xRange.Step := x;606FormPlot2D.GLxyGrid.XSamplingScale.Step := x;607end;608FormCoords.UpdateCoordText;609end;610end;611
612procedure TFormGridOptions.EditxzGridStpxExit(Sender: TObject);613begin
614if xyLock.Checked then615EditxyGridStpx.Text := EditxzGridStpx.Text;616end;617
618procedure TFormGridOptions.EditxzGridStpzChange(Sender: TObject);619var
620z: TGLFloat;621
622begin { 9 }623if Active then624begin625try626z := StrToFloat(EditxzGridStpz.Text);627except628z := 1.0;629end;630if z = 0 then631z := 1;632ViewData.xzGrid.zRange.Step := z;633FormPlot2D.GLxzGrid.ZSamplingScale.Step := z;634if zLock.Checked then635begin636ViewData.yzGrid.zRange.Step := z;637FormPlot2D.GLyzGrid.ZSamplingScale.Step := z;638EdityzGridStpz.Text := EditxzGridStpz.Text;639end;640FormCoords.UpdateCoordText;641end;642end;643
644procedure TFormGridOptions.EdityzGridMaxyChange(Sender: TObject);645var
646y: TGLFloat;647
648begin { 5 }649if Active then650begin651try652y := StrToFloat(EdityzGridMaxy.Text);653except654y := 1.0;655end;656ViewData.yzGrid.yRange.Maximum := y;657FormPlot2D.GLyzGrid.YSamplingScale.Max := y;658if xyLock.Checked then659begin660ViewData.xyGrid.yRange.Maximum := y;661FormPlot2D.GLxyGrid.YSamplingScale.Max := y;662EditxyGridMaxy.Text := EdityzGridMaxy.Text;663end;664DrawOutline(ViewData.BoxChecked);665FormCoords.UpdateCoordText;666end;667end;668
669procedure TFormGridOptions.EdityzGridMaxzChange(Sender: TObject);670var
671z: TGLFloat;672
673begin { 8 }674if Active then675begin676try677z := StrToFloat(EdityzGridMaxz.Text);678except679z := 1.0;680end;681ViewData.yzGrid.zRange.Maximum := z;682FormPlot2D.GLyzGrid.ZSamplingScale.Max := z;683if zLock.Checked then684begin685ViewData.xzGrid.zRange.Maximum := z;686FormPlot2D.GLxzGrid.ZSamplingScale.Max := z;687EditxzGridMaxz.Text := EdityzGridMaxz.Text;688end;689DrawOutline(ViewData.BoxChecked);690FormCoords.UpdateCoordText;691end;692end;693
694procedure TFormGridOptions.EdityzGridMinyChange(Sender: TObject);695var
696y: TGLFloat;697
698begin { 4 }699if Active then700begin701try702y := StrToFloat(EdityzGridMiny.Text);703except704y := -1.0;705end;706ViewData.yzGrid.yRange.Minimum := y;707FormPlot2D.GLyzGrid.YSamplingScale.Min := y;708if xyLock.Checked then709begin710ViewData.xyGrid.yRange.Minimum := y;711FormPlot2D.GLxyGrid.YSamplingScale.Min := y;712EditxyGridMiny.Text := EdityzGridMiny.Text;713end;714if MinLock.Checked then715begin716ViewData.xzGrid.yPosition := y;717FormPlot2D.GLxzGrid.Position.y := y;718EditxzGridPosy.Text := EdityzGridMiny.Text;719end;720DrawOutline(ViewData.BoxChecked);721FormCoords.UpdateCoordText;722end;723end;724
725procedure TFormGridOptions.EdityzGridMinzChange(Sender: TObject);726var
727z: TGLFloat;728
729begin { 7 }730if Active then731begin732try733z := StrToFloat(EdityzGridMinz.Text);734except735z := -1.0;736end;737ViewData.yzGrid.zRange.Minimum := z;738FormPlot2D.GLyzGrid.ZSamplingScale.Min := z;739if zLock.Checked then740begin741ViewData.xyGrid.zPosition := z;742FormPlot2D.GLxzGrid.ZSamplingScale.Min := z;743EditxzGridMinz.Text := EdityzGridMinz.Text;744end;745if MinLock.Checked then746begin747ViewData.xyGrid.zPosition := z;748FormPlot2D.GLxyGrid.Position.z := z * ViewData.xyGrid.zScale;749EditxyGridPosz.Text := EdityzGridMinz.Text;750end;751DrawOutline(ViewData.BoxChecked);752FormCoords.UpdateCoordText;753end;754end;755
756procedure TFormGridOptions.EdityzGridPosxChange(Sender: TObject);757var
758x: TGLFloat;759
760begin { - }761if Active then762begin763try764x := StrToFloat(EdityzGridPosx.Text);765except766x := 1.0;767end;768ViewData.yzGrid.xPosition := x;769FormPlot2D.GLyzGrid.Position.x := x;770FormEvaluate.UpdateEvaluate;771DrawOutline(ViewData.BoxChecked);772end;773end;774
775procedure TFormGridOptions.EdityzGridStpyChange(Sender: TObject);776var
777y: TGLFloat;778
779begin { 6 }780if Active then781begin782try783y := StrToFloat(EdityzGridStpy.Text);784except785y := 1.0;786end;787if y = 0 then788y := 1;789ViewData.yzGrid.yRange.Step := y;790FormPlot2D.GLyzGrid.YSamplingScale.Step := y;791if xyLock.Checked then792begin793ViewData.xyGrid.yRange.Step := y;794FormPlot2D.GLxyGrid.YSamplingScale.Step := y;795end;796FormCoords.UpdateCoordText;797end;798end;799
800procedure TFormGridOptions.EdityzGridStpyExit(Sender: TObject);801begin
802if xyLock.Checked then803EditxyGridStpy.Text := EdityzGridStpy.Text;804end;805
806procedure TFormGridOptions.EdityzGridStpzChange(Sender: TObject);807var
808z: TGLFloat;809
810begin { 9 }811if Active then812begin813try814z := StrToFloat(EdityzGridStpz.Text);815except816z := 1.0;817end;818if z = 0 then819z := 1;820ViewData.yzGrid.zRange.Step := z;821FormPlot2D.GLyzGrid.ZSamplingScale.Step := z;822if zLock.Checked then823begin824ViewData.xzGrid.zRange.Step := z;825FormPlot2D.GLxzGrid.ZSamplingScale.Step := z;826end;827FormCoords.UpdateCoordText;828end;829end;830
831procedure TFormGridOptions.EdityzGridStpzExit(Sender: TObject);832begin
833if zLock.Checked then834EditxzGridStpz.Text := EdityzGridStpz.Text;835end;836
837procedure TFormGridOptions.EditzScaleKeyUp(Sender: TObject; var Key: Word;838Shift: TShiftState);839var
840z: TGLFloat;841
842begin
843if Key <> 9 then844begin845try846z := StrToFloat(EditzScale.Text);847except848z := 1.0;849end;850if z = 0 then851Exit;852ViewData.xyGrid.zScale := z;853FormPlot2D.GLxzGrid.Scale.z := z;854FormPlot2D.GLyzGrid.Scale.z := z;855FormPlot2D.GLxyGrid.Position.z := ViewData.xyGrid.zPosition *856ViewData.xyGrid.zScale;857DrawOutline(ViewData.BoxChecked);858FormCoords.UpdateCoordText;859FormEvaluate.UpdateEvaluate;860FormFunctions.ApplyBtnClick(Sender);861end;862end;863
864procedure TFormGridOptions.FloatKeyPress(Sender: TObject; var Key: Char);865begin
866with Sender as TEdit do867if not CharInSet(Key, AnyFloat) then868Key := #0;869end;870
871procedure TFormGridOptions.MinLockClick(Sender: TObject);872var
873x, y, z: TGLFloat;874
875begin
876if MinLock.Checked then877begin878if ViewData.xyGrid.xRange.Minimum < ViewData.xzGrid.xRange.Minimum then879x := ViewData.xyGrid.xRange.Minimum880else881x := ViewData.xzGrid.xRange.Minimum;882FormPlot2D.GLyzGrid.Position.x := x;883EdityzGridPosx.Text := FloatToStrF(x, ffGeneral, 7, 4);884
885if ViewData.xyGrid.yRange.Minimum < ViewData.yzGrid.yRange.Minimum then886y := ViewData.xyGrid.yRange.Minimum887else888y := ViewData.yzGrid.yRange.Minimum;889FormPlot2D.GLxzGrid.Position.y := y;890EditxzGridPosy.Text := FloatToStrF(y, ffGeneral, 7, 4);891
892if ViewData.xzGrid.zRange.Minimum < ViewData.yzGrid.zRange.Minimum then893z := ViewData.xzGrid.zRange.Minimum894else895z := ViewData.yzGrid.zRange.Minimum;896FormPlot2D.GLxyGrid.Position.z := z * ViewData.xyGrid.zScale;897EditxyGridPosz.Text := FloatToStrF(z, ffGeneral, 7, 4);898end;899
900ViewData.yzGrid.IsChecked := MinLock.Checked;901Altered := True;902end;903
904procedure TFormGridOptions.ComboBoxMouseEnter(Sender: TObject);905begin
906FormPlot2D.MousePoint.x := Maxint;907end;908
909procedure TFormGridOptions.xyGridCBClick(Sender: TObject);910begin
911FormPlot2D.GLxyGrid.Visible := xyGridCB.Checked;912ViewData.xyGrid.IsVisible := xyGridCB.Checked;913Altered := True;914end;915
916procedure TFormGridOptions.xyLockClick(Sender: TObject);917begin
918if xyLock.Checked then919begin920if ViewData.xyGrid.xRange.Minimum < ViewData.xzGrid.xRange.Minimum then921EditxzGridMinx.Text := FloatToStrF(ViewData.xyGrid.xRange.Minimum,922ffGeneral, 7, 4)923else924EditxyGridMinx.Text := FloatToStrF(ViewData.xzGrid.xRange.Minimum,925ffGeneral, 7, 4);926
927if ViewData.xyGrid.yRange.Minimum < ViewData.yzGrid.yRange.Minimum then928EdityzGridMiny.Text := FloatToStrF(ViewData.xyGrid.yRange.Minimum,929ffGeneral, 7, 4)930else931EditxyGridMiny.Text := FloatToStrF(ViewData.yzGrid.yRange.Minimum,932ffGeneral, 7, 4);933end;934
935ViewData.xyGrid.IsChecked := xyLock.Checked;936Altered := True;937end;938
939procedure TFormGridOptions.xzGridCBClick(Sender: TObject);940begin
941FormPlot2D.GLxzGrid.Visible := xzGridCB.Checked;942ViewData.xzGrid.IsVisible := xzGridCB.Checked;943Altered := True;944end;945
946procedure TFormGridOptions.yzGridCBClick(Sender: TObject);947begin
948FormPlot2D.GLyzGrid.Visible := yzGridCB.Checked;949ViewData.yzGrid.IsVisible := yzGridCB.Checked;950Altered := True;951end;952
953procedure TFormGridOptions.zLockClick(Sender: TObject);954begin
955if zLock.Checked then956begin957if ViewData.xzGrid.zRange.Minimum < ViewData.yzGrid.zRange.Minimum then958EdityzGridMinz.Text := FloatToStrF(ViewData.xzGrid.zRange.Minimum,959ffGeneral, 7, 4)960else961EditxzGridMinz.Text := FloatToStrF(ViewData.yzGrid.zRange.Minimum,962ffGeneral, 7, 4);963end;964
965ViewData.xzGrid.IsChecked := zLock.Checked;966Altered := True;967end;968
969procedure TFormGridOptions.DrawOutline(const Show: Boolean);970var
971Vectors: array [0 .. 7] of TGLVector;972
973begin
974FormPlot2D.BoxLine1.Visible := Show;975FormPlot2D.BoxLine1.LineWidth := ViewData.BoxLnWidth;976
977FormPlot2D.BoxLine2.Visible := Show;978FormPlot2D.BoxLine2.LineWidth := ViewData.BoxLnWidth;979
980FormPlot2D.BoxLine3.Visible := Show;981FormPlot2D.BoxLine3.LineWidth := ViewData.BoxLnWidth;982
983FormPlot2D.BoxLine4.Visible := Show;984FormPlot2D.BoxLine4.LineWidth := ViewData.BoxLnWidth;985
986if Show then987begin988if ViewData.xyGrid.xRange.Minimum < ViewData.xzGrid.xRange.Minimum then989Vectors[0].x := ViewData.xyGrid.xRange.Minimum990else991Vectors[0].x := ViewData.xzGrid.xRange.Minimum;992
993if ViewData.xyGrid.xRange.Maximum > ViewData.xzGrid.xRange.Maximum then994Vectors[1].x := ViewData.xyGrid.xRange.Maximum995else996Vectors[1].x := ViewData.xzGrid.xRange.Maximum;997
998if ViewData.xyGrid.yRange.Minimum < ViewData.yzGrid.yRange.Minimum then999Vectors[0].y := ViewData.xyGrid.yRange.Minimum1000else1001Vectors[0].y := ViewData.yzGrid.yRange.Minimum;1002
1003if ViewData.xyGrid.yRange.Maximum > ViewData.yzGrid.yRange.Maximum then1004Vectors[2].y := ViewData.xyGrid.yRange.Maximum1005else1006Vectors[2].y := ViewData.yzGrid.yRange.Maximum;1007
1008if ViewData.xzGrid.zRange.Minimum < ViewData.yzGrid.zRange.Minimum then1009Vectors[0].z := ViewData.xzGrid.zRange.Minimum * ViewData.xyGrid.zScale1010else1011Vectors[0].z := ViewData.yzGrid.zRange.Minimum * ViewData.xyGrid.zScale;1012
1013if ViewData.xzGrid.zRange.Maximum > ViewData.yzGrid.zRange.Maximum then1014Vectors[4].z := ViewData.xzGrid.zRange.Maximum * ViewData.xyGrid.zScale1015else1016Vectors[4].z := ViewData.yzGrid.zRange.Maximum * ViewData.xyGrid.zScale;1017
1018Vectors[1].y := Vectors[0].y;1019Vectors[1].z := Vectors[0].z;1020
1021Vectors[2].x := Vectors[1].x;1022Vectors[2].z := Vectors[0].z;1023
1024Vectors[3].x := Vectors[0].x;1025Vectors[3].y := Vectors[2].y;1026Vectors[3].z := Vectors[0].z;1027
1028Vectors[4].x := Vectors[0].x;1029Vectors[4].y := Vectors[0].y;1030
1031Vectors[5].x := Vectors[1].x;1032Vectors[5].y := Vectors[1].y;1033Vectors[5].z := Vectors[4].z;1034
1035Vectors[6].x := Vectors[2].x;1036Vectors[6].y := Vectors[2].y;1037Vectors[6].z := Vectors[4].z;1038
1039Vectors[7].x := Vectors[3].x;1040Vectors[7].y := Vectors[3].y;1041Vectors[7].z := Vectors[4].z;1042
1043with FormPlot2D.BoxLine1 do1044begin1045Nodes[0].AsVector := Vectors[0];1046Nodes[1].AsVector := Vectors[1];1047Nodes[2].AsVector := Vectors[2];1048Nodes[3].AsVector := Vectors[3];1049Nodes[4].AsVector := Vectors[0];1050Nodes[5].AsVector := Vectors[4];1051Nodes[6].AsVector := Vectors[5];1052Nodes[7].AsVector := Vectors[6];1053Nodes[8].AsVector := Vectors[7];1054Nodes[9].AsVector := Vectors[4];1055end;1056with FormPlot2D.BoxLine2 do1057begin1058Nodes[0].AsVector := Vectors[1];1059Nodes[1].AsVector := Vectors[5];1060end;1061with FormPlot2D.BoxLine3 do1062begin1063Nodes[0].AsVector := Vectors[2];1064Nodes[1].AsVector := Vectors[6];1065end;1066with FormPlot2D.BoxLine4 do1067begin1068Nodes[0].AsVector := Vectors[3];1069Nodes[1].AsVector := Vectors[7];1070end;1071end;1072end;1073
1074end.1075