MathgeomGLS
1074 строки · 27.1 Кб
1unit faGridOptions;
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
24Graf.Global2d,
25Graf.Parser2d,
26faGridColors;
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);
135private
136public
137procedure DrawOutline(const Show: Boolean);
138end;
139
140var
141FormGridOptions: TFormGridOptions;
142
143// =====================================================================
144implementation
145// =====================================================================
146
147uses
148faGraf2d,
149faEvaluate,
150faCoordOptions,
151faFunctions;
152
153{$R *.dfm}
154
155procedure TFormGridOptions.CentreClick(Sender: TObject);
156var
157x, y, z: TGLFloat;
158
159begin
160with FormPlotStars do
161begin
162MousePoint.x := Maxint;
163if GLxyGrid.XSamplingScale.Max - GLxyGrid.XSamplingScale.Min >
164GLxzGrid.XSamplingScale.Max - GLxzGrid.XSamplingScale.Min then
165x := GLxyGrid.XSamplingScale.Max + GLxyGrid.XSamplingScale.Min
166else
167x := GLxzGrid.XSamplingScale.Max + GLxzGrid.XSamplingScale.Min;
168
169if GLxyGrid.YSamplingScale.Max - GLxyGrid.YSamplingScale.Min >
170GLyzGrid.YSamplingScale.Max - GLxzGrid.YSamplingScale.Min then
171y := GLxyGrid.YSamplingScale.Max + GLxyGrid.YSamplingScale.Min
172else
173y := GLyzGrid.YSamplingScale.Max + GLyzGrid.YSamplingScale.Min;
174
175if GLxzGrid.ZSamplingScale.Max - GLxzGrid.ZSamplingScale.Min >
176GLyzGrid.ZSamplingScale.Max - GLyzGrid.ZSamplingScale.Min then
177z := GLxzGrid.ZSamplingScale.Max + GLxzGrid.ZSamplingScale.Min
178else
179z := GLyzGrid.ZSamplingScale.Max + GLyzGrid.ZSamplingScale.Min;
180
181TargetCube.Position.SetPoint(x / 2, y / 2,
182(ViewData.xyGrid.zScale * z) / 2);
183end;
184Altered := True;
185FormPlotStars.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
202GridColorsForm.Show;
203end;
204
205procedure TFormGridOptions.IntKeyPress(Sender: TObject; var Key: Char);
206begin
207with Sender as TEdit do
208if not CharInSet(Key, ['0' .. '9', #8]) then
209Key := #0
210end;
211
212procedure TFormGridOptions.EditBoxLnWidthKeyUp(Sender: TObject; var Key: Word;
213Shift: TShiftState);
214var
215w: integer;
216
217begin
218try
219w := StrToInt(EditBoxLnWidth.Text);
220except
221w := 3;
222end;
223ViewData.BoxLnWidth := w;
224FormPlotStars.BoxLine1.LineWidth := w;
225FormPlotStars.BoxLine2.LineWidth := w;
226FormPlotStars.BoxLine3.LineWidth := w;
227FormPlotStars.BoxLine4.LineWidth := w;
228Altered := True;
229end;
230
231procedure TFormGridOptions.EditViewDepthChange(Sender: TObject);
232var
233v: TGLFloat;
234
235begin
236if Active then
237begin
238try
239v := StrToFloat(EditViewDepth.Text);
240except
241v := 1000;
242end;
243if v = 0 then
244Exit;
245ViewData.ViewDepth := v;
246FormPlotStars.GLSViewer.Camera.DepthOfView := v;
247end;
248end;
249
250procedure TFormGridOptions.PlotValuesClick(Sender: TObject);
251begin
252if xyLock.Checked and zLock.Checked and MinLock.Checked then
253begin
254EditxyGridMinx.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 do
266if not CharInSet(Key, ['+', '0' .. '9', '.', #8]) then
267Key := #0;
268end;
269
270procedure TFormGridOptions.EditxyGridMaxxChange(Sender: TObject);
271var
272x: TGLFloat;
273
274begin { 2 }
275if Active then
276begin
277try
278x := StrToFloat(EditxyGridMaxx.Text);
279except
280x := 1.0;
281end;
282ViewData.xyGrid.xRange.Maximum := x;
283FormPlotStars.GLxyGrid.XSamplingScale.Max := x;
284if xyLock.Checked then
285begin
286ViewData.xzGrid.xRange.Maximum := x;
287FormPlotStars.GLxzGrid.XSamplingScale.Max := x;
288EditxzGridMaxx.Text := EditxyGridMaxx.Text;
289end;
290DrawOutline(ViewData.BoxChecked);
291CoordsForm.UpdateCoordText;
292end;
293end;
294
295procedure TFormGridOptions.EditxyGridMaxyChange(Sender: TObject);
296var
297y: TGLFloat;
298
299begin { 5 }
300if Active then
301begin
302try
303y := StrToFloat(EditxyGridMaxy.Text);
304except
305y := 1.0;
306end;
307ViewData.xyGrid.yRange.Maximum := y;
308FormPlotStars.GLxyGrid.YSamplingScale.Max := y;
309if xyLock.Checked then
310begin
311ViewData.yzGrid.yRange.Maximum := y;
312FormPlotStars.GLyzGrid.YSamplingScale.Max := y;
313EdityzGridMaxy.Text := EditxyGridMaxy.Text;
314end;
315DrawOutline(ViewData.BoxChecked);
316CoordsForm.UpdateCoordText;
317end;
318end;
319
320procedure TFormGridOptions.EditxyGridMinxChange(Sender: TObject);
321var
322x: TGLFloat;
323
324begin { 1 }
325if Active then
326begin
327try
328x := StrToFloat(EditxyGridMinx.Text);
329except
330x := -1.0;
331end;
332ViewData.xyGrid.xRange.Minimum := x;
333FormPlotStars.GLxyGrid.XSamplingScale.Min := x;
334if xyLock.Checked then
335begin
336ViewData.xzGrid.xRange.Minimum := x;
337FormPlotStars.GLxzGrid.XSamplingScale.Min := x;
338EditxzGridMinx.Text := EditxyGridMinx.Text;
339end;
340if MinLock.Checked then
341begin
342ViewData.yzGrid.xPosition := x;
343FormPlotStars.GLyzGrid.Position.x := x;
344EdityzGridPosx.Text := EditxyGridMinx.Text;
345end;
346DrawOutline(ViewData.BoxChecked);
347CoordsForm.UpdateCoordText;
348end;
349end;
350
351procedure TFormGridOptions.EditxyGridMinyChange(Sender: TObject);
352var
353y: TGLFloat;
354
355begin { 4 }
356if Active then
357begin { 1 }
358try
359y := StrToFloat(EditxyGridMiny.Text);
360except
361y := -1.0;
362end;
363if xyLock.Checked then
364ViewData.xyGrid.yRange.Minimum := y;
365FormPlotStars.GLxyGrid.YSamplingScale.Min := y;
366if xyLock.Checked then
367begin
368ViewData.yzGrid.yRange.Minimum := y;
369FormPlotStars.GLyzGrid.YSamplingScale.Min := y;
370EdityzGridMiny.Text := EditxyGridMiny.Text;
371end;
372if MinLock.Checked then
373begin
374ViewData.xzGrid.yPosition := y;
375FormPlotStars.GLxzGrid.Position.y := y;
376EditxzGridPosy.Text := EditxyGridMiny.Text;
377end;
378DrawOutline(ViewData.BoxChecked);
379CoordsForm.UpdateCoordText;
380end;
381end;
382
383procedure TFormGridOptions.EditxyGridPoszChange(Sender: TObject);
384var
385z: TGLFloat;
386
387begin { - }
388if Active then
389begin
390try
391z := StrToFloat(EditxyGridPosz.Text);
392except
393z := 0.0;
394end;
395ViewData.xyGrid.zPosition := z;
396FormPlotStars.GLxyGrid.Position.z := z * ViewData.xyGrid.zScale;
397EvaluateForm.UpdateEvaluate;
398DrawOutline(ViewData.BoxChecked);
399end;
400end;
401
402procedure TFormGridOptions.EditxyGridStpxChange(Sender: TObject);
403var
404x: TGLFloat;
405
406begin { 3 }
407if Active then
408begin
409try
410x := StrToFloat(EditxyGridStpx.Text);
411except
412x := 1.0;
413end;
414if x = 0 then
415x := 1;
416ViewData.xyGrid.xRange.Step := x;
417FormPlotStars.GLxyGrid.XSamplingScale.Step := x;
418if xyLock.Checked then
419begin
420ViewData.xzGrid.xRange.Step := x;
421FormPlotStars.GLxzGrid.XSamplingScale.Step := x;
422EditxzGridStpx.Text := EditxyGridStpx.Text;
423end;
424CoordsForm.UpdateCoordText;
425EvaluateForm.DoEvaluate;
426end;
427end;
428
429procedure TFormGridOptions.EditxyGridStpyChange(Sender: TObject);
430var
431y: TGLFloat;
432
433begin { 6 }
434if Active then
435begin
436try
437y := StrToFloat(EditxyGridStpy.Text);
438except
439y := 1.0;
440end;
441if y = 0 then
442y := 1;
443ViewData.xyGrid.yRange.Step := y;
444FormPlotStars.GLxyGrid.YSamplingScale.Step := y;
445if xyLock.Checked then
446begin
447ViewData.yzGrid.yRange.Step := y;
448FormPlotStars.GLyzGrid.YSamplingScale.Step := y;
449EdityzGridStpy.Text := EditxyGridStpy.Text;
450end;
451CoordsForm.UpdateCoordText;
452EvaluateForm.DoEvaluate;
453end;
454end;
455
456procedure TFormGridOptions.EditxzGridMaxxChange(Sender: TObject);
457var
458x: TGLFloat;
459
460begin { 2 }
461if Active then
462begin
463try
464x := StrToFloat(EditxzGridMaxx.Text);
465except
466x := 1.0;
467end;
468ViewData.xzGrid.xRange.Maximum := x;
469FormPlotStars.GLxzGrid.XSamplingScale.Max := x;
470if xyLock.Checked then
471begin
472ViewData.xyGrid.xRange.Maximum := x;
473FormPlotStars.GLxyGrid.XSamplingScale.Max := x;
474EditxyGridMaxx.Text := EditxzGridMaxx.Text;
475end;
476DrawOutline(ViewData.BoxChecked);
477CoordsForm.UpdateCoordText;
478end;
479end;
480
481procedure TFormGridOptions.EditxzGridMaxzChange(Sender: TObject);
482var
483z: TGLFloat;
484
485begin { 8 }
486if Active then
487begin
488try
489z := StrToFloat(EditxzGridMaxz.Text);
490except
491z := 1.0;
492end;
493ViewData.xzGrid.zRange.Maximum := z;
494FormPlotStars.GLxzGrid.ZSamplingScale.Max := z;
495if zLock.Checked then
496begin
497ViewData.yzGrid.zRange.Maximum := z;
498FormPlotStars.GLyzGrid.ZSamplingScale.Max := z;
499EdityzGridMaxz.Text := EditxzGridMaxz.Text;
500end;
501DrawOutline(ViewData.BoxChecked);
502CoordsForm.UpdateCoordText;
503end;
504end;
505
506procedure TFormGridOptions.EditxzGridMinxChange(Sender: TObject);
507var
508x: TGLFloat;
509
510begin { 1 }
511if Active then
512begin
513try
514x := StrToFloat(EditxzGridMinx.Text);
515except
516x := -1.0;
517end;
518ViewData.xzGrid.xRange.Minimum := x;
519FormPlotStars.GLxzGrid.XSamplingScale.Min := x;
520if xyLock.Checked then
521begin
522ViewData.xyGrid.xRange.Minimum := x;
523FormPlotStars.GLxyGrid.XSamplingScale.Min := x;
524EditxyGridMinx.Text := EditxzGridMinx.Text;
525end;
526if MinLock.Checked then
527begin
528ViewData.yzGrid.xPosition := x;
529FormPlotStars.GLyzGrid.Position.x := x;
530EdityzGridPosx.Text := EditxzGridMinx.Text;
531end;
532DrawOutline(ViewData.BoxChecked);
533CoordsForm.UpdateCoordText;
534end;
535end;
536
537procedure TFormGridOptions.EditxzGridMinzChange(Sender: TObject);
538var
539z: TGLFloat;
540
541begin { 7 }
542if Active then
543begin
544try
545z := StrToFloat(EditxzGridMinz.Text);
546except
547z := -1.0;
548end;
549ViewData.xzGrid.zRange.Minimum := z;
550FormPlotStars.GLxzGrid.ZSamplingScale.Min := z;
551if zLock.Checked then
552begin
553ViewData.yzGrid.zRange.Minimum := z;
554FormPlotStars.GLyzGrid.ZSamplingScale.Min := z;
555EdityzGridMinz.Text := EditxzGridMinz.Text;
556end;
557if MinLock.Checked then
558begin
559ViewData.xyGrid.zPosition := z;
560FormPlotStars.GLxyGrid.Position.z := z * ViewData.xyGrid.zScale;
561EditxyGridPosz.Text := EditxzGridMinz.Text;
562end;
563DrawOutline(ViewData.BoxChecked);
564CoordsForm.UpdateCoordText;
565end;
566end;
567
568procedure TFormGridOptions.EditxzGridPosyChange(Sender: TObject);
569var
570y: TGLFloat;
571
572begin { - }
573if Active then
574begin
575try
576y := StrToFloat(EditxzGridPosy.Text);
577except
578y := 1.0;
579end;
580ViewData.xzGrid.yPosition := y;
581FormPlotStars.GLxzGrid.Position.y := y;
582EvaluateForm.UpdateEvaluate;
583DrawOutline(ViewData.BoxChecked);
584end;
585end;
586
587procedure TFormGridOptions.EditxzGridStpxChange(Sender: TObject);
588var
589x: TGLFloat;
590
591begin { 3 }
592if Active then
593begin
594try
595x := StrToFloat(EditxzGridStpx.Text);
596except
597x := 1.0;
598end;
599if x = 0 then
600x := 1;
601ViewData.xzGrid.xRange.Step := x;
602FormPlotStars.GLxzGrid.XSamplingScale.Step := x;
603if xyLock.Checked then
604begin
605ViewData.xyGrid.xRange.Step := x;
606FormPlotStars.GLxyGrid.XSamplingScale.Step := x;
607end;
608CoordsForm.UpdateCoordText;
609end;
610end;
611
612procedure TFormGridOptions.EditxzGridStpxExit(Sender: TObject);
613begin
614if xyLock.Checked then
615EditxyGridStpx.Text := EditxzGridStpx.Text;
616end;
617
618procedure TFormGridOptions.EditxzGridStpzChange(Sender: TObject);
619var
620z: TGLFloat;
621
622begin { 9 }
623if Active then
624begin
625try
626z := StrToFloat(EditxzGridStpz.Text);
627except
628z := 1.0;
629end;
630if z = 0 then
631z := 1;
632ViewData.xzGrid.zRange.Step := z;
633FormPlotStars.GLxzGrid.ZSamplingScale.Step := z;
634if zLock.Checked then
635begin
636ViewData.yzGrid.zRange.Step := z;
637FormPlotStars.GLyzGrid.ZSamplingScale.Step := z;
638EdityzGridStpz.Text := EditxzGridStpz.Text;
639end;
640CoordsForm.UpdateCoordText;
641end;
642end;
643
644procedure TFormGridOptions.EdityzGridMaxyChange(Sender: TObject);
645var
646y: TGLFloat;
647
648begin { 5 }
649if Active then
650begin
651try
652y := StrToFloat(EdityzGridMaxy.Text);
653except
654y := 1.0;
655end;
656ViewData.yzGrid.yRange.Maximum := y;
657FormPlotStars.GLyzGrid.YSamplingScale.Max := y;
658if xyLock.Checked then
659begin
660ViewData.xyGrid.yRange.Maximum := y;
661FormPlotStars.GLxyGrid.YSamplingScale.Max := y;
662EditxyGridMaxy.Text := EdityzGridMaxy.Text;
663end;
664DrawOutline(ViewData.BoxChecked);
665CoordsForm.UpdateCoordText;
666end;
667end;
668
669procedure TFormGridOptions.EdityzGridMaxzChange(Sender: TObject);
670var
671z: TGLFloat;
672
673begin { 8 }
674if Active then
675begin
676try
677z := StrToFloat(EdityzGridMaxz.Text);
678except
679z := 1.0;
680end;
681ViewData.yzGrid.zRange.Maximum := z;
682FormPlotStars.GLyzGrid.ZSamplingScale.Max := z;
683if zLock.Checked then
684begin
685ViewData.xzGrid.zRange.Maximum := z;
686FormPlotStars.GLxzGrid.ZSamplingScale.Max := z;
687EditxzGridMaxz.Text := EdityzGridMaxz.Text;
688end;
689DrawOutline(ViewData.BoxChecked);
690CoordsForm.UpdateCoordText;
691end;
692end;
693
694procedure TFormGridOptions.EdityzGridMinyChange(Sender: TObject);
695var
696y: TGLFloat;
697
698begin { 4 }
699if Active then
700begin
701try
702y := StrToFloat(EdityzGridMiny.Text);
703except
704y := -1.0;
705end;
706ViewData.yzGrid.yRange.Minimum := y;
707FormPlotStars.GLyzGrid.YSamplingScale.Min := y;
708if xyLock.Checked then
709begin
710ViewData.xyGrid.yRange.Minimum := y;
711FormPlotStars.GLxyGrid.YSamplingScale.Min := y;
712EditxyGridMiny.Text := EdityzGridMiny.Text;
713end;
714if MinLock.Checked then
715begin
716ViewData.xzGrid.yPosition := y;
717FormPlotStars.GLxzGrid.Position.y := y;
718EditxzGridPosy.Text := EdityzGridMiny.Text;
719end;
720DrawOutline(ViewData.BoxChecked);
721CoordsForm.UpdateCoordText;
722end;
723end;
724
725procedure TFormGridOptions.EdityzGridMinzChange(Sender: TObject);
726var
727z: TGLFloat;
728
729begin { 7 }
730if Active then
731begin
732try
733z := StrToFloat(EdityzGridMinz.Text);
734except
735z := -1.0;
736end;
737ViewData.yzGrid.zRange.Minimum := z;
738FormPlotStars.GLyzGrid.ZSamplingScale.Min := z;
739if zLock.Checked then
740begin
741ViewData.xyGrid.zPosition := z;
742FormPlotStars.GLxzGrid.ZSamplingScale.Min := z;
743EditxzGridMinz.Text := EdityzGridMinz.Text;
744end;
745if MinLock.Checked then
746begin
747ViewData.xyGrid.zPosition := z;
748FormPlotStars.GLxyGrid.Position.z := z * ViewData.xyGrid.zScale;
749EditxyGridPosz.Text := EdityzGridMinz.Text;
750end;
751DrawOutline(ViewData.BoxChecked);
752CoordsForm.UpdateCoordText;
753end;
754end;
755
756procedure TFormGridOptions.EdityzGridPosxChange(Sender: TObject);
757var
758x: TGLFloat;
759
760begin { - }
761if Active then
762begin
763try
764x := StrToFloat(EdityzGridPosx.Text);
765except
766x := 1.0;
767end;
768ViewData.yzGrid.xPosition := x;
769FormPlotStars.GLyzGrid.Position.x := x;
770EvaluateForm.UpdateEvaluate;
771DrawOutline(ViewData.BoxChecked);
772end;
773end;
774
775procedure TFormGridOptions.EdityzGridStpyChange(Sender: TObject);
776var
777y: TGLFloat;
778
779begin { 6 }
780if Active then
781begin
782try
783y := StrToFloat(EdityzGridStpy.Text);
784except
785y := 1.0;
786end;
787if y = 0 then
788y := 1;
789ViewData.yzGrid.yRange.Step := y;
790FormPlotStars.GLyzGrid.YSamplingScale.Step := y;
791if xyLock.Checked then
792begin
793ViewData.xyGrid.yRange.Step := y;
794FormPlotStars.GLxyGrid.YSamplingScale.Step := y;
795end;
796CoordsForm.UpdateCoordText;
797end;
798end;
799
800procedure TFormGridOptions.EdityzGridStpyExit(Sender: TObject);
801begin
802if xyLock.Checked then
803EditxyGridStpy.Text := EdityzGridStpy.Text;
804end;
805
806procedure TFormGridOptions.EdityzGridStpzChange(Sender: TObject);
807var
808z: TGLFloat;
809
810begin { 9 }
811if Active then
812begin
813try
814z := StrToFloat(EdityzGridStpz.Text);
815except
816z := 1.0;
817end;
818if z = 0 then
819z := 1;
820ViewData.yzGrid.zRange.Step := z;
821FormPlotStars.GLyzGrid.ZSamplingScale.Step := z;
822if zLock.Checked then
823begin
824ViewData.xzGrid.zRange.Step := z;
825FormPlotStars.GLxzGrid.ZSamplingScale.Step := z;
826end;
827CoordsForm.UpdateCoordText;
828end;
829end;
830
831procedure TFormGridOptions.EdityzGridStpzExit(Sender: TObject);
832begin
833if zLock.Checked then
834EditxzGridStpz.Text := EdityzGridStpz.Text;
835end;
836
837procedure TFormGridOptions.EditzScaleKeyUp(Sender: TObject; var Key: Word;
838Shift: TShiftState);
839var
840z: TGLFloat;
841
842begin
843if Key <> 9 then
844begin
845try
846z := StrToFloat(EditzScale.Text);
847except
848z := 1.0;
849end;
850if z = 0 then
851Exit;
852ViewData.xyGrid.zScale := z;
853FormPlotStars.GLxzGrid.Scale.z := z;
854FormPlotStars.GLyzGrid.Scale.z := z;
855FormPlotStars.GLxyGrid.Position.z := ViewData.xyGrid.zPosition *
856ViewData.xyGrid.zScale;
857DrawOutline(ViewData.BoxChecked);
858CoordsForm.UpdateCoordText;
859EvaluateForm.UpdateEvaluate;
860FunctionsForm.ApplyBtnClick(Sender);
861end;
862end;
863
864procedure TFormGridOptions.FloatKeyPress(Sender: TObject; var Key: Char);
865begin
866with Sender as TEdit do
867if not CharInSet(Key, AnyFloat) then
868Key := #0;
869end;
870
871procedure TFormGridOptions.MinLockClick(Sender: TObject);
872var
873x, y, z: TGLFloat;
874
875begin
876if MinLock.Checked then
877begin
878if ViewData.xyGrid.xRange.Minimum < ViewData.xzGrid.xRange.Minimum then
879x := ViewData.xyGrid.xRange.Minimum
880else
881x := ViewData.xzGrid.xRange.Minimum;
882FormPlotStars.GLyzGrid.Position.x := x;
883EdityzGridPosx.Text := FloatToStrF(x, ffGeneral, 7, 4);
884
885if ViewData.xyGrid.yRange.Minimum < ViewData.yzGrid.yRange.Minimum then
886y := ViewData.xyGrid.yRange.Minimum
887else
888y := ViewData.yzGrid.yRange.Minimum;
889FormPlotStars.GLxzGrid.Position.y := y;
890EditxzGridPosy.Text := FloatToStrF(y, ffGeneral, 7, 4);
891
892if ViewData.xzGrid.zRange.Minimum < ViewData.yzGrid.zRange.Minimum then
893z := ViewData.xzGrid.zRange.Minimum
894else
895z := ViewData.yzGrid.zRange.Minimum;
896FormPlotStars.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
906FormPlotStars.MousePoint.x := Maxint;
907end;
908
909procedure TFormGridOptions.xyGridCBClick(Sender: TObject);
910begin
911FormPlotStars.GLxyGrid.Visible := xyGridCB.Checked;
912ViewData.xyGrid.IsVisible := xyGridCB.Checked;
913Altered := True;
914end;
915
916procedure TFormGridOptions.xyLockClick(Sender: TObject);
917begin
918if xyLock.Checked then
919begin
920if ViewData.xyGrid.xRange.Minimum < ViewData.xzGrid.xRange.Minimum then
921EditxzGridMinx.Text := FloatToStrF(ViewData.xyGrid.xRange.Minimum,
922ffGeneral, 7, 4)
923else
924EditxyGridMinx.Text := FloatToStrF(ViewData.xzGrid.xRange.Minimum,
925ffGeneral, 7, 4);
926
927if ViewData.xyGrid.yRange.Minimum < ViewData.yzGrid.yRange.Minimum then
928EdityzGridMiny.Text := FloatToStrF(ViewData.xyGrid.yRange.Minimum,
929ffGeneral, 7, 4)
930else
931EditxyGridMiny.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
941FormPlotStars.GLxzGrid.Visible := xzGridCB.Checked;
942ViewData.xzGrid.IsVisible := xzGridCB.Checked;
943Altered := True;
944end;
945
946procedure TFormGridOptions.yzGridCBClick(Sender: TObject);
947begin
948FormPlotStars.GLyzGrid.Visible := yzGridCB.Checked;
949ViewData.yzGrid.IsVisible := yzGridCB.Checked;
950Altered := True;
951end;
952
953procedure TFormGridOptions.zLockClick(Sender: TObject);
954begin
955if zLock.Checked then
956begin
957if ViewData.xzGrid.zRange.Minimum < ViewData.yzGrid.zRange.Minimum then
958EdityzGridMinz.Text := FloatToStrF(ViewData.xzGrid.zRange.Minimum,
959ffGeneral, 7, 4)
960else
961EditxzGridMinz.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
974FormPlotStars.BoxLine1.Visible := Show;
975FormPlotStars.BoxLine1.LineWidth := ViewData.BoxLnWidth;
976
977FormPlotStars.BoxLine2.Visible := Show;
978FormPlotStars.BoxLine2.LineWidth := ViewData.BoxLnWidth;
979
980FormPlotStars.BoxLine3.Visible := Show;
981FormPlotStars.BoxLine3.LineWidth := ViewData.BoxLnWidth;
982
983FormPlotStars.BoxLine4.Visible := Show;
984FormPlotStars.BoxLine4.LineWidth := ViewData.BoxLnWidth;
985
986if Show then
987begin
988if ViewData.xyGrid.xRange.Minimum < ViewData.xzGrid.xRange.Minimum then
989Vectors[0].x := ViewData.xyGrid.xRange.Minimum
990else
991Vectors[0].x := ViewData.xzGrid.xRange.Minimum;
992
993if ViewData.xyGrid.xRange.Maximum > ViewData.xzGrid.xRange.Maximum then
994Vectors[1].x := ViewData.xyGrid.xRange.Maximum
995else
996Vectors[1].x := ViewData.xzGrid.xRange.Maximum;
997
998if ViewData.xyGrid.yRange.Minimum < ViewData.yzGrid.yRange.Minimum then
999Vectors[0].y := ViewData.xyGrid.yRange.Minimum
1000else
1001Vectors[0].y := ViewData.yzGrid.yRange.Minimum;
1002
1003if ViewData.xyGrid.yRange.Maximum > ViewData.yzGrid.yRange.Maximum then
1004Vectors[2].y := ViewData.xyGrid.yRange.Maximum
1005else
1006Vectors[2].y := ViewData.yzGrid.yRange.Maximum;
1007
1008if ViewData.xzGrid.zRange.Minimum < ViewData.yzGrid.zRange.Minimum then
1009Vectors[0].z := ViewData.xzGrid.zRange.Minimum * ViewData.xyGrid.zScale
1010else
1011Vectors[0].z := ViewData.yzGrid.zRange.Minimum * ViewData.xyGrid.zScale;
1012
1013if ViewData.xzGrid.zRange.Maximum > ViewData.yzGrid.zRange.Maximum then
1014Vectors[4].z := ViewData.xzGrid.zRange.Maximum * ViewData.xyGrid.zScale
1015else
1016Vectors[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 FormPlotStars.BoxLine1 do
1044begin
1045Nodes[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 FormPlotStars.BoxLine2 do
1057begin
1058Nodes[0].AsVector := Vectors[1];
1059Nodes[1].AsVector := Vectors[5];
1060end;
1061with FormPlotStars.BoxLine3 do
1062begin
1063Nodes[0].AsVector := Vectors[2];
1064Nodes[1].AsVector := Vectors[6];
1065end;
1066with FormPlotStars.BoxLine4 do
1067begin
1068Nodes[0].AsVector := Vectors[3];
1069Nodes[1].AsVector := Vectors[7];
1070end;
1071end;
1072end;
1073
1074end.
1075