MathgeomGLS

Форк
0
/
faGridOptions.pas 
1074 строки · 27.1 Кб
1
unit faGridOptions;
2

3
interface
4

5
uses
6
  Winapi.Windows,
7
  Winapi.Messages,
8
  System.SysUtils,
9
  System.Variants,
10
  System.Classes,
11
  System.Math,
12
  Vcl.Graphics,
13
  Vcl.Controls,
14
  Vcl.Forms,
15
  Vcl.Dialogs,
16
  Vcl.StdCtrls,
17
  Vcl.Buttons,
18

19
  GLS.OpenGLTokens,
20
  GLS.VectorTypes,
21
  GLS.Coordinates,
22
  GLS.VectorGeometry,
23

24
  Graf.Global2d,
25
  Graf.Parser2d,
26
  faGridColors;
27

28
type
29
  TFormGridOptions = class(TForm)
30
    GroupBoxXY: TGroupBox;
31
    Label7: TLabel;
32
    Label8: TLabel;
33
    Label9: TLabel;
34
    Label11: TLabel;
35
    Label12: TLabel;
36
    Label10: TLabel;
37
    EditxyGridMinx: TEdit;
38
    EditxyGridMaxx: TEdit;
39
    EditxyGridStpx: TEdit;
40
    EditxyGridMiny: TEdit;
41
    EditxyGridMaxy: TEdit;
42
    EditxyGridStpy: TEdit;
43
    EditxyGridPosz: TEdit;
44
    xyLock: TCheckBox;
45
    GroupBoxXZ: TGroupBox;
46
    Label13: TLabel;
47
    Label18: TLabel;
48
    Label20: TLabel;
49
    Label21: TLabel;
50
    Label22: TLabel;
51
    Label23: TLabel;
52
    EditxzGridMinx: TEdit;
53
    EditxzGridMaxx: TEdit;
54
    EditxzGridStpx: TEdit;
55
    EditxzGridMinz: TEdit;
56
    EditxzGridMaxz: TEdit;
57
    EditxzGridStpz: TEdit;
58
    EditxzGridPosy: TEdit;
59
    zLock: TCheckBox;
60
    GroupBoxYZ: TGroupBox;
61
    Label24: TLabel;
62
    Label25: TLabel;
63
    Label26: TLabel;
64
    Label27: TLabel;
65
    Label28: TLabel;
66
    Label29: TLabel;
67
    EdityzGridMiny: TEdit;
68
    EdityzGridMaxy: TEdit;
69
    EdityzGridStpy: TEdit;
70
    EdityzGridMinz: TEdit;
71
    EdityzGridMaxz: TEdit;
72
    EdityzGridStpz: TEdit;
73
    EdityzGridPosx: TEdit;
74
    GroupBoxOp: TGroupBox;
75
    Label14: TLabel;
76
    Label19: TLabel;
77
    Colors: TSpeedButton;
78
    xyGridCB: TCheckBox;
79
    xzGridCB: TCheckBox;
80
    yzGridCB: TCheckBox;
81
    EditViewDepth: TEdit;
82
    MinLock: TCheckBox;
83
    Label1: TLabel;
84
    EditzScale: TEdit;
85
    Centre: TSpeedButton;
86
    BoxOutlineCB: TCheckBox;
87
    Label4: TLabel;
88
    EditBoxLnWidth: TEdit;
89
    BitBtn1: TBitBtn;
90
    PlotValues: TSpeedButton;
91
    procedure ColorsClick(Sender: TObject);
92
    procedure FloatKeyPress(Sender: TObject; var Key: Char);
93
    procedure PositiveKeyPress(Sender: TObject; var Key: Char);
94
    procedure EditxyGridMinxChange(Sender: TObject);
95
    procedure EditxyGridMaxxChange(Sender: TObject);
96
    procedure EditxyGridStpxChange(Sender: TObject);
97
    procedure EditxyGridPoszChange(Sender: TObject);
98
    procedure EditxyGridMinyChange(Sender: TObject);
99
    procedure EditxyGridMaxyChange(Sender: TObject);
100
    procedure EditxyGridStpyChange(Sender: TObject);
101
    procedure EditxzGridMinxChange(Sender: TObject);
102
    procedure EditxzGridMaxxChange(Sender: TObject);
103
    procedure EditxzGridStpxChange(Sender: TObject);
104
    procedure EditxzGridPosyChange(Sender: TObject);
105
    procedure EditxzGridMinzChange(Sender: TObject);
106
    procedure EditxzGridMaxzChange(Sender: TObject);
107
    procedure EditxzGridStpzChange(Sender: TObject);
108
    procedure EdityzGridMinyChange(Sender: TObject);
109
    procedure EdityzGridMaxyChange(Sender: TObject);
110
    procedure EdityzGridStpyChange(Sender: TObject);
111
    procedure EdityzGridPosxChange(Sender: TObject);
112
    procedure EdityzGridMinzChange(Sender: TObject);
113
    procedure EdityzGridMaxzChange(Sender: TObject);
114
    procedure EdityzGridStpzChange(Sender: TObject);
115
    procedure xyGridCBClick(Sender: TObject);
116
    procedure xzGridCBClick(Sender: TObject);
117
    procedure yzGridCBClick(Sender: TObject);
118
    procedure xyLockClick(Sender: TObject);
119
    procedure zLockClick(Sender: TObject);
120
    procedure MinLockClick(Sender: TObject);
121
    procedure ComboBoxMouseEnter(Sender: TObject);
122
    procedure EditViewDepthChange(Sender: TObject);
123
    procedure CentreClick(Sender: TObject);
124
    procedure EditzScaleKeyUp(Sender: TObject; var Key: Word;
125
      Shift: TShiftState);
126
    procedure BoxOutlineCBClick(Sender: TObject);
127
    procedure IntKeyPress(Sender: TObject; var Key: Char);
128
    procedure EditBoxLnWidthKeyUp(Sender: TObject; var Key: Word;
129
      Shift: TShiftState);
130
    procedure BitBtn1Click(Sender: TObject);
131
    procedure EditxzGridStpxExit(Sender: TObject);
132
    procedure EdityzGridStpyExit(Sender: TObject);
133
    procedure EdityzGridStpzExit(Sender: TObject);
134
    procedure PlotValuesClick(Sender: TObject);
135
  private
136
  public
137
    procedure DrawOutline(const Show: Boolean);
138
  end;
139

140
var
141
  FormGridOptions: TFormGridOptions;
142

143
// =====================================================================
144
implementation
145
// =====================================================================
146

147
uses
148
  faGraf2d,
149
  faEvaluate,
150
  faCoordOptions,
151
  faFunctions;
152

153
{$R *.dfm}
154

155
procedure TFormGridOptions.CentreClick(Sender: TObject);
156
var
157
  x, y, z: TGLFloat;
158

159
begin
160
  with FormPlotStars do
161
  begin
162
    MousePoint.x := Maxint;
163
    if GLxyGrid.XSamplingScale.Max - GLxyGrid.XSamplingScale.Min >
164
      GLxzGrid.XSamplingScale.Max - GLxzGrid.XSamplingScale.Min then
165
      x := GLxyGrid.XSamplingScale.Max + GLxyGrid.XSamplingScale.Min
166
    else
167
      x := GLxzGrid.XSamplingScale.Max + GLxzGrid.XSamplingScale.Min;
168

169
    if GLxyGrid.YSamplingScale.Max - GLxyGrid.YSamplingScale.Min >
170
      GLyzGrid.YSamplingScale.Max - GLxzGrid.YSamplingScale.Min then
171
      y := GLxyGrid.YSamplingScale.Max + GLxyGrid.YSamplingScale.Min
172
    else
173
      y := GLyzGrid.YSamplingScale.Max + GLyzGrid.YSamplingScale.Min;
174

175
    if GLxzGrid.ZSamplingScale.Max - GLxzGrid.ZSamplingScale.Min >
176
      GLyzGrid.ZSamplingScale.Max - GLyzGrid.ZSamplingScale.Min then
177
      z := GLxzGrid.ZSamplingScale.Max + GLxzGrid.ZSamplingScale.Min
178
    else
179
      z := GLyzGrid.ZSamplingScale.Max + GLyzGrid.ZSamplingScale.Min;
180

181
    TargetCube.Position.SetPoint(x / 2, y / 2,
182
      (ViewData.xyGrid.zScale * z) / 2);
183
  end;
184
  Altered := True;
185
  FormPlotStars.ShowDisplacement;
186
end;
187

188
procedure TFormGridOptions.BitBtn1Click(Sender: TObject);
189
begin
190
  Close;
191
end;
192

193
procedure TFormGridOptions.BoxOutlineCBClick(Sender: TObject);
194
begin
195
  ViewData.BoxChecked := BoxOutlineCB.Checked;
196
  DrawOutline(ViewData.BoxChecked);
197
  Altered := True;
198
end;
199

200
procedure TFormGridOptions.ColorsClick(Sender: TObject);
201
begin
202
  GridColorsForm.Show;
203
end;
204

205
procedure TFormGridOptions.IntKeyPress(Sender: TObject; var Key: Char);
206
begin
207
  with Sender as TEdit do
208
    if not CharInSet(Key, ['0' .. '9', #8]) then
209
      Key := #0
210
end;
211

212
procedure TFormGridOptions.EditBoxLnWidthKeyUp(Sender: TObject; var Key: Word;
213
  Shift: TShiftState);
214
var
215
  w: integer;
216

217
begin
218
  try
219
    w := StrToInt(EditBoxLnWidth.Text);
220
  except
221
    w := 3;
222
  end;
223
  ViewData.BoxLnWidth := w;
224
  FormPlotStars.BoxLine1.LineWidth := w;
225
  FormPlotStars.BoxLine2.LineWidth := w;
226
  FormPlotStars.BoxLine3.LineWidth := w;
227
  FormPlotStars.BoxLine4.LineWidth := w;
228
  Altered := True;
229
end;
230

231
procedure TFormGridOptions.EditViewDepthChange(Sender: TObject);
232
var
233
  v: TGLFloat;
234

235
begin
236
  if Active then
237
  begin
238
    try
239
      v := StrToFloat(EditViewDepth.Text);
240
    except
241
      v := 1000;
242
    end;
243
    if v = 0 then
244
      Exit;
245
    ViewData.ViewDepth := v;
246
    FormPlotStars.GLSViewer.Camera.DepthOfView := v;
247
  end;
248
end;
249

250
procedure TFormGridOptions.PlotValuesClick(Sender: TObject);
251
begin
252
  if xyLock.Checked and zLock.Checked and MinLock.Checked then
253
  begin
254
    EditxyGridMinx.Text := FloatToStrF(PlotData.xMin, ffGeneral, 7, 4);
255
    EditxyGridMaxx.Text := FloatToStrF(PlotData.xMax, ffGeneral, 7, 4);
256
    EditxyGridMiny.Text := FloatToStrF(PlotData.yMin, ffGeneral, 7, 4);
257
    EditxyGridMaxy.Text := FloatToStrF(PlotData.yMax, ffGeneral, 7, 4);
258
    EditxzGridMinz.Text := FloatToStrF(PlotData.zMin, ffGeneral, 7, 4);
259
    EditxzGridMaxz.Text := FloatToStrF(PlotData.zMax, ffGeneral, 7, 4);
260
  end;
261
end;
262

263
procedure TFormGridOptions.PositiveKeyPress(Sender: TObject; var Key: Char);
264
begin
265
  with Sender as TEdit do
266
    if not CharInSet(Key, ['+', '0' .. '9', '.', #8]) then
267
      Key := #0;
268
end;
269

270
procedure TFormGridOptions.EditxyGridMaxxChange(Sender: TObject);
271
var
272
  x: TGLFloat;
273

274
begin { 2 }
275
  if Active then
276
  begin
277
    try
278
      x := StrToFloat(EditxyGridMaxx.Text);
279
    except
280
      x := 1.0;
281
    end;
282
    ViewData.xyGrid.xRange.Maximum := x;
283
    FormPlotStars.GLxyGrid.XSamplingScale.Max := x;
284
    if xyLock.Checked then
285
    begin
286
      ViewData.xzGrid.xRange.Maximum := x;
287
      FormPlotStars.GLxzGrid.XSamplingScale.Max := x;
288
      EditxzGridMaxx.Text := EditxyGridMaxx.Text;
289
    end;
290
    DrawOutline(ViewData.BoxChecked);
291
    CoordsForm.UpdateCoordText;
292
  end;
293
end;
294

295
procedure TFormGridOptions.EditxyGridMaxyChange(Sender: TObject);
296
var
297
  y: TGLFloat;
298

299
begin { 5 }
300
  if Active then
301
  begin
302
    try
303
      y := StrToFloat(EditxyGridMaxy.Text);
304
    except
305
      y := 1.0;
306
    end;
307
    ViewData.xyGrid.yRange.Maximum := y;
308
    FormPlotStars.GLxyGrid.YSamplingScale.Max := y;
309
    if xyLock.Checked then
310
    begin
311
      ViewData.yzGrid.yRange.Maximum := y;
312
      FormPlotStars.GLyzGrid.YSamplingScale.Max := y;
313
      EdityzGridMaxy.Text := EditxyGridMaxy.Text;
314
    end;
315
    DrawOutline(ViewData.BoxChecked);
316
    CoordsForm.UpdateCoordText;
317
  end;
318
end;
319

320
procedure TFormGridOptions.EditxyGridMinxChange(Sender: TObject);
321
var
322
  x: TGLFloat;
323

324
begin { 1 }
325
  if Active then
326
  begin
327
    try
328
      x := StrToFloat(EditxyGridMinx.Text);
329
    except
330
      x := -1.0;
331
    end;
332
    ViewData.xyGrid.xRange.Minimum := x;
333
    FormPlotStars.GLxyGrid.XSamplingScale.Min := x;
334
    if xyLock.Checked then
335
    begin
336
      ViewData.xzGrid.xRange.Minimum := x;
337
      FormPlotStars.GLxzGrid.XSamplingScale.Min := x;
338
      EditxzGridMinx.Text := EditxyGridMinx.Text;
339
    end;
340
    if MinLock.Checked then
341
    begin
342
      ViewData.yzGrid.xPosition := x;
343
      FormPlotStars.GLyzGrid.Position.x := x;
344
      EdityzGridPosx.Text := EditxyGridMinx.Text;
345
    end;
346
    DrawOutline(ViewData.BoxChecked);
347
    CoordsForm.UpdateCoordText;
348
  end;
349
end;
350

351
procedure TFormGridOptions.EditxyGridMinyChange(Sender: TObject);
352
var
353
  y: TGLFloat;
354

355
begin { 4 }
356
  if Active then
357
  begin { 1 }
358
    try
359
      y := StrToFloat(EditxyGridMiny.Text);
360
    except
361
      y := -1.0;
362
    end;
363
    if xyLock.Checked then
364
      ViewData.xyGrid.yRange.Minimum := y;
365
    FormPlotStars.GLxyGrid.YSamplingScale.Min := y;
366
    if xyLock.Checked then
367
    begin
368
      ViewData.yzGrid.yRange.Minimum := y;
369
      FormPlotStars.GLyzGrid.YSamplingScale.Min := y;
370
      EdityzGridMiny.Text := EditxyGridMiny.Text;
371
    end;
372
    if MinLock.Checked then
373
    begin
374
      ViewData.xzGrid.yPosition := y;
375
      FormPlotStars.GLxzGrid.Position.y := y;
376
      EditxzGridPosy.Text := EditxyGridMiny.Text;
377
    end;
378
    DrawOutline(ViewData.BoxChecked);
379
    CoordsForm.UpdateCoordText;
380
  end;
381
end;
382

383
procedure TFormGridOptions.EditxyGridPoszChange(Sender: TObject);
384
var
385
  z: TGLFloat;
386

387
begin { - }
388
  if Active then
389
  begin
390
    try
391
      z := StrToFloat(EditxyGridPosz.Text);
392
    except
393
      z := 0.0;
394
    end;
395
    ViewData.xyGrid.zPosition := z;
396
    FormPlotStars.GLxyGrid.Position.z := z * ViewData.xyGrid.zScale;
397
    EvaluateForm.UpdateEvaluate;
398
    DrawOutline(ViewData.BoxChecked);
399
  end;
400
end;
401

402
procedure TFormGridOptions.EditxyGridStpxChange(Sender: TObject);
403
var
404
  x: TGLFloat;
405

406
begin { 3 }
407
  if Active then
408
  begin
409
    try
410
      x := StrToFloat(EditxyGridStpx.Text);
411
    except
412
      x := 1.0;
413
    end;
414
    if x = 0 then
415
      x := 1;
416
    ViewData.xyGrid.xRange.Step := x;
417
    FormPlotStars.GLxyGrid.XSamplingScale.Step := x;
418
    if xyLock.Checked then
419
    begin
420
      ViewData.xzGrid.xRange.Step := x;
421
      FormPlotStars.GLxzGrid.XSamplingScale.Step := x;
422
      EditxzGridStpx.Text := EditxyGridStpx.Text;
423
    end;
424
    CoordsForm.UpdateCoordText;
425
    EvaluateForm.DoEvaluate;
426
  end;
427
end;
428

429
procedure TFormGridOptions.EditxyGridStpyChange(Sender: TObject);
430
var
431
  y: TGLFloat;
432

433
begin { 6 }
434
  if Active then
435
  begin
436
    try
437
      y := StrToFloat(EditxyGridStpy.Text);
438
    except
439
      y := 1.0;
440
    end;
441
    if y = 0 then
442
      y := 1;
443
    ViewData.xyGrid.yRange.Step := y;
444
    FormPlotStars.GLxyGrid.YSamplingScale.Step := y;
445
    if xyLock.Checked then
446
    begin
447
      ViewData.yzGrid.yRange.Step := y;
448
      FormPlotStars.GLyzGrid.YSamplingScale.Step := y;
449
      EdityzGridStpy.Text := EditxyGridStpy.Text;
450
    end;
451
    CoordsForm.UpdateCoordText;
452
    EvaluateForm.DoEvaluate;
453
  end;
454
end;
455

456
procedure TFormGridOptions.EditxzGridMaxxChange(Sender: TObject);
457
var
458
  x: TGLFloat;
459

460
begin { 2 }
461
  if Active then
462
  begin
463
    try
464
      x := StrToFloat(EditxzGridMaxx.Text);
465
    except
466
      x := 1.0;
467
    end;
468
    ViewData.xzGrid.xRange.Maximum := x;
469
    FormPlotStars.GLxzGrid.XSamplingScale.Max := x;
470
    if xyLock.Checked then
471
    begin
472
      ViewData.xyGrid.xRange.Maximum := x;
473
      FormPlotStars.GLxyGrid.XSamplingScale.Max := x;
474
      EditxyGridMaxx.Text := EditxzGridMaxx.Text;
475
    end;
476
    DrawOutline(ViewData.BoxChecked);
477
    CoordsForm.UpdateCoordText;
478
  end;
479
end;
480

481
procedure TFormGridOptions.EditxzGridMaxzChange(Sender: TObject);
482
var
483
  z: TGLFloat;
484

485
begin { 8 }
486
  if Active then
487
  begin
488
    try
489
      z := StrToFloat(EditxzGridMaxz.Text);
490
    except
491
      z := 1.0;
492
    end;
493
    ViewData.xzGrid.zRange.Maximum := z;
494
    FormPlotStars.GLxzGrid.ZSamplingScale.Max := z;
495
    if zLock.Checked then
496
    begin
497
      ViewData.yzGrid.zRange.Maximum := z;
498
      FormPlotStars.GLyzGrid.ZSamplingScale.Max := z;
499
      EdityzGridMaxz.Text := EditxzGridMaxz.Text;
500
    end;
501
    DrawOutline(ViewData.BoxChecked);
502
    CoordsForm.UpdateCoordText;
503
  end;
504
end;
505

506
procedure TFormGridOptions.EditxzGridMinxChange(Sender: TObject);
507
var
508
  x: TGLFloat;
509

510
begin { 1 }
511
  if Active then
512
  begin
513
    try
514
      x := StrToFloat(EditxzGridMinx.Text);
515
    except
516
      x := -1.0;
517
    end;
518
    ViewData.xzGrid.xRange.Minimum := x;
519
    FormPlotStars.GLxzGrid.XSamplingScale.Min := x;
520
    if xyLock.Checked then
521
    begin
522
      ViewData.xyGrid.xRange.Minimum := x;
523
      FormPlotStars.GLxyGrid.XSamplingScale.Min := x;
524
      EditxyGridMinx.Text := EditxzGridMinx.Text;
525
    end;
526
    if MinLock.Checked then
527
    begin
528
      ViewData.yzGrid.xPosition := x;
529
      FormPlotStars.GLyzGrid.Position.x := x;
530
      EdityzGridPosx.Text := EditxzGridMinx.Text;
531
    end;
532
    DrawOutline(ViewData.BoxChecked);
533
    CoordsForm.UpdateCoordText;
534
  end;
535
end;
536

537
procedure TFormGridOptions.EditxzGridMinzChange(Sender: TObject);
538
var
539
  z: TGLFloat;
540

541
begin { 7 }
542
  if Active then
543
  begin
544
    try
545
      z := StrToFloat(EditxzGridMinz.Text);
546
    except
547
      z := -1.0;
548
    end;
549
    ViewData.xzGrid.zRange.Minimum := z;
550
    FormPlotStars.GLxzGrid.ZSamplingScale.Min := z;
551
    if zLock.Checked then
552
    begin
553
      ViewData.yzGrid.zRange.Minimum := z;
554
      FormPlotStars.GLyzGrid.ZSamplingScale.Min := z;
555
      EdityzGridMinz.Text := EditxzGridMinz.Text;
556
    end;
557
    if MinLock.Checked then
558
    begin
559
      ViewData.xyGrid.zPosition := z;
560
      FormPlotStars.GLxyGrid.Position.z := z * ViewData.xyGrid.zScale;
561
      EditxyGridPosz.Text := EditxzGridMinz.Text;
562
    end;
563
    DrawOutline(ViewData.BoxChecked);
564
    CoordsForm.UpdateCoordText;
565
  end;
566
end;
567

568
procedure TFormGridOptions.EditxzGridPosyChange(Sender: TObject);
569
var
570
  y: TGLFloat;
571

572
begin { - }
573
  if Active then
574
  begin
575
    try
576
      y := StrToFloat(EditxzGridPosy.Text);
577
    except
578
      y := 1.0;
579
    end;
580
    ViewData.xzGrid.yPosition := y;
581
    FormPlotStars.GLxzGrid.Position.y := y;
582
    EvaluateForm.UpdateEvaluate;
583
    DrawOutline(ViewData.BoxChecked);
584
  end;
585
end;
586

587
procedure TFormGridOptions.EditxzGridStpxChange(Sender: TObject);
588
var
589
  x: TGLFloat;
590

591
begin { 3 }
592
  if Active then
593
  begin
594
    try
595
      x := StrToFloat(EditxzGridStpx.Text);
596
    except
597
      x := 1.0;
598
    end;
599
    if x = 0 then
600
      x := 1;
601
    ViewData.xzGrid.xRange.Step := x;
602
    FormPlotStars.GLxzGrid.XSamplingScale.Step := x;
603
    if xyLock.Checked then
604
    begin
605
      ViewData.xyGrid.xRange.Step := x;
606
      FormPlotStars.GLxyGrid.XSamplingScale.Step := x;
607
    end;
608
    CoordsForm.UpdateCoordText;
609
  end;
610
end;
611

612
procedure TFormGridOptions.EditxzGridStpxExit(Sender: TObject);
613
begin
614
  if xyLock.Checked then
615
    EditxyGridStpx.Text := EditxzGridStpx.Text;
616
end;
617

618
procedure TFormGridOptions.EditxzGridStpzChange(Sender: TObject);
619
var
620
  z: TGLFloat;
621

622
begin { 9 }
623
  if Active then
624
  begin
625
    try
626
      z := StrToFloat(EditxzGridStpz.Text);
627
    except
628
      z := 1.0;
629
    end;
630
    if z = 0 then
631
      z := 1;
632
    ViewData.xzGrid.zRange.Step := z;
633
    FormPlotStars.GLxzGrid.ZSamplingScale.Step := z;
634
    if zLock.Checked then
635
    begin
636
      ViewData.yzGrid.zRange.Step := z;
637
      FormPlotStars.GLyzGrid.ZSamplingScale.Step := z;
638
      EdityzGridStpz.Text := EditxzGridStpz.Text;
639
    end;
640
    CoordsForm.UpdateCoordText;
641
  end;
642
end;
643

644
procedure TFormGridOptions.EdityzGridMaxyChange(Sender: TObject);
645
var
646
  y: TGLFloat;
647

648
begin { 5 }
649
  if Active then
650
  begin
651
    try
652
      y := StrToFloat(EdityzGridMaxy.Text);
653
    except
654
      y := 1.0;
655
    end;
656
    ViewData.yzGrid.yRange.Maximum := y;
657
    FormPlotStars.GLyzGrid.YSamplingScale.Max := y;
658
    if xyLock.Checked then
659
    begin
660
      ViewData.xyGrid.yRange.Maximum := y;
661
      FormPlotStars.GLxyGrid.YSamplingScale.Max := y;
662
      EditxyGridMaxy.Text := EdityzGridMaxy.Text;
663
    end;
664
    DrawOutline(ViewData.BoxChecked);
665
    CoordsForm.UpdateCoordText;
666
  end;
667
end;
668

669
procedure TFormGridOptions.EdityzGridMaxzChange(Sender: TObject);
670
var
671
  z: TGLFloat;
672

673
begin { 8 }
674
  if Active then
675
  begin
676
    try
677
      z := StrToFloat(EdityzGridMaxz.Text);
678
    except
679
      z := 1.0;
680
    end;
681
    ViewData.yzGrid.zRange.Maximum := z;
682
    FormPlotStars.GLyzGrid.ZSamplingScale.Max := z;
683
    if zLock.Checked then
684
    begin
685
      ViewData.xzGrid.zRange.Maximum := z;
686
      FormPlotStars.GLxzGrid.ZSamplingScale.Max := z;
687
      EditxzGridMaxz.Text := EdityzGridMaxz.Text;
688
    end;
689
    DrawOutline(ViewData.BoxChecked);
690
    CoordsForm.UpdateCoordText;
691
  end;
692
end;
693

694
procedure TFormGridOptions.EdityzGridMinyChange(Sender: TObject);
695
var
696
  y: TGLFloat;
697

698
begin { 4 }
699
  if Active then
700
  begin
701
    try
702
      y := StrToFloat(EdityzGridMiny.Text);
703
    except
704
      y := -1.0;
705
    end;
706
    ViewData.yzGrid.yRange.Minimum := y;
707
    FormPlotStars.GLyzGrid.YSamplingScale.Min := y;
708
    if xyLock.Checked then
709
    begin
710
      ViewData.xyGrid.yRange.Minimum := y;
711
      FormPlotStars.GLxyGrid.YSamplingScale.Min := y;
712
      EditxyGridMiny.Text := EdityzGridMiny.Text;
713
    end;
714
    if MinLock.Checked then
715
    begin
716
      ViewData.xzGrid.yPosition := y;
717
      FormPlotStars.GLxzGrid.Position.y := y;
718
      EditxzGridPosy.Text := EdityzGridMiny.Text;
719
    end;
720
    DrawOutline(ViewData.BoxChecked);
721
    CoordsForm.UpdateCoordText;
722
  end;
723
end;
724

725
procedure TFormGridOptions.EdityzGridMinzChange(Sender: TObject);
726
var
727
  z: TGLFloat;
728

729
begin { 7 }
730
  if Active then
731
  begin
732
    try
733
      z := StrToFloat(EdityzGridMinz.Text);
734
    except
735
      z := -1.0;
736
    end;
737
    ViewData.yzGrid.zRange.Minimum := z;
738
    FormPlotStars.GLyzGrid.ZSamplingScale.Min := z;
739
    if zLock.Checked then
740
    begin
741
      ViewData.xyGrid.zPosition := z;
742
      FormPlotStars.GLxzGrid.ZSamplingScale.Min := z;
743
      EditxzGridMinz.Text := EdityzGridMinz.Text;
744
    end;
745
    if MinLock.Checked then
746
    begin
747
      ViewData.xyGrid.zPosition := z;
748
      FormPlotStars.GLxyGrid.Position.z := z * ViewData.xyGrid.zScale;
749
      EditxyGridPosz.Text := EdityzGridMinz.Text;
750
    end;
751
    DrawOutline(ViewData.BoxChecked);
752
    CoordsForm.UpdateCoordText;
753
  end;
754
end;
755

756
procedure TFormGridOptions.EdityzGridPosxChange(Sender: TObject);
757
var
758
  x: TGLFloat;
759

760
begin { - }
761
  if Active then
762
  begin
763
    try
764
      x := StrToFloat(EdityzGridPosx.Text);
765
    except
766
      x := 1.0;
767
    end;
768
    ViewData.yzGrid.xPosition := x;
769
    FormPlotStars.GLyzGrid.Position.x := x;
770
    EvaluateForm.UpdateEvaluate;
771
    DrawOutline(ViewData.BoxChecked);
772
  end;
773
end;
774

775
procedure TFormGridOptions.EdityzGridStpyChange(Sender: TObject);
776
var
777
  y: TGLFloat;
778

779
begin { 6 }
780
  if Active then
781
  begin
782
    try
783
      y := StrToFloat(EdityzGridStpy.Text);
784
    except
785
      y := 1.0;
786
    end;
787
    if y = 0 then
788
      y := 1;
789
    ViewData.yzGrid.yRange.Step := y;
790
    FormPlotStars.GLyzGrid.YSamplingScale.Step := y;
791
    if xyLock.Checked then
792
    begin
793
      ViewData.xyGrid.yRange.Step := y;
794
      FormPlotStars.GLxyGrid.YSamplingScale.Step := y;
795
    end;
796
    CoordsForm.UpdateCoordText;
797
  end;
798
end;
799

800
procedure TFormGridOptions.EdityzGridStpyExit(Sender: TObject);
801
begin
802
  if xyLock.Checked then
803
    EditxyGridStpy.Text := EdityzGridStpy.Text;
804
end;
805

806
procedure TFormGridOptions.EdityzGridStpzChange(Sender: TObject);
807
var
808
  z: TGLFloat;
809

810
begin { 9 }
811
  if Active then
812
  begin
813
    try
814
      z := StrToFloat(EdityzGridStpz.Text);
815
    except
816
      z := 1.0;
817
    end;
818
    if z = 0 then
819
      z := 1;
820
    ViewData.yzGrid.zRange.Step := z;
821
    FormPlotStars.GLyzGrid.ZSamplingScale.Step := z;
822
    if zLock.Checked then
823
    begin
824
      ViewData.xzGrid.zRange.Step := z;
825
      FormPlotStars.GLxzGrid.ZSamplingScale.Step := z;
826
    end;
827
    CoordsForm.UpdateCoordText;
828
  end;
829
end;
830

831
procedure TFormGridOptions.EdityzGridStpzExit(Sender: TObject);
832
begin
833
  if zLock.Checked then
834
    EditxzGridStpz.Text := EdityzGridStpz.Text;
835
end;
836

837
procedure TFormGridOptions.EditzScaleKeyUp(Sender: TObject; var Key: Word;
838
  Shift: TShiftState);
839
var
840
  z: TGLFloat;
841

842
begin
843
  if Key <> 9 then
844
  begin
845
    try
846
      z := StrToFloat(EditzScale.Text);
847
    except
848
      z := 1.0;
849
    end;
850
    if z = 0 then
851
      Exit;
852
    ViewData.xyGrid.zScale := z;
853
    FormPlotStars.GLxzGrid.Scale.z := z;
854
    FormPlotStars.GLyzGrid.Scale.z := z;
855
    FormPlotStars.GLxyGrid.Position.z := ViewData.xyGrid.zPosition *
856
      ViewData.xyGrid.zScale;
857
    DrawOutline(ViewData.BoxChecked);
858
    CoordsForm.UpdateCoordText;
859
    EvaluateForm.UpdateEvaluate;
860
    FunctionsForm.ApplyBtnClick(Sender);
861
  end;
862
end;
863

864
procedure TFormGridOptions.FloatKeyPress(Sender: TObject; var Key: Char);
865
begin
866
  with Sender as TEdit do
867
    if not CharInSet(Key, AnyFloat) then
868
      Key := #0;
869
end;
870

871
procedure TFormGridOptions.MinLockClick(Sender: TObject);
872
var
873
  x, y, z: TGLFloat;
874

875
begin
876
  if MinLock.Checked then
877
  begin
878
    if ViewData.xyGrid.xRange.Minimum < ViewData.xzGrid.xRange.Minimum then
879
      x := ViewData.xyGrid.xRange.Minimum
880
    else
881
      x := ViewData.xzGrid.xRange.Minimum;
882
    FormPlotStars.GLyzGrid.Position.x := x;
883
    EdityzGridPosx.Text := FloatToStrF(x, ffGeneral, 7, 4);
884

885
    if ViewData.xyGrid.yRange.Minimum < ViewData.yzGrid.yRange.Minimum then
886
      y := ViewData.xyGrid.yRange.Minimum
887
    else
888
      y := ViewData.yzGrid.yRange.Minimum;
889
    FormPlotStars.GLxzGrid.Position.y := y;
890
    EditxzGridPosy.Text := FloatToStrF(y, ffGeneral, 7, 4);
891

892
    if ViewData.xzGrid.zRange.Minimum < ViewData.yzGrid.zRange.Minimum then
893
      z := ViewData.xzGrid.zRange.Minimum
894
    else
895
      z := ViewData.yzGrid.zRange.Minimum;
896
    FormPlotStars.GLxyGrid.Position.z := z * ViewData.xyGrid.zScale;
897
    EditxyGridPosz.Text := FloatToStrF(z, ffGeneral, 7, 4);
898
  end;
899

900
  ViewData.yzGrid.IsChecked := MinLock.Checked;
901
  Altered := True;
902
end;
903

904
procedure TFormGridOptions.ComboBoxMouseEnter(Sender: TObject);
905
begin
906
  FormPlotStars.MousePoint.x := Maxint;
907
end;
908

909
procedure TFormGridOptions.xyGridCBClick(Sender: TObject);
910
begin
911
  FormPlotStars.GLxyGrid.Visible := xyGridCB.Checked;
912
  ViewData.xyGrid.IsVisible := xyGridCB.Checked;
913
  Altered := True;
914
end;
915

916
procedure TFormGridOptions.xyLockClick(Sender: TObject);
917
begin
918
  if xyLock.Checked then
919
  begin
920
    if ViewData.xyGrid.xRange.Minimum < ViewData.xzGrid.xRange.Minimum then
921
      EditxzGridMinx.Text := FloatToStrF(ViewData.xyGrid.xRange.Minimum,
922
        ffGeneral, 7, 4)
923
    else
924
      EditxyGridMinx.Text := FloatToStrF(ViewData.xzGrid.xRange.Minimum,
925
        ffGeneral, 7, 4);
926

927
    if ViewData.xyGrid.yRange.Minimum < ViewData.yzGrid.yRange.Minimum then
928
      EdityzGridMiny.Text := FloatToStrF(ViewData.xyGrid.yRange.Minimum,
929
        ffGeneral, 7, 4)
930
    else
931
      EditxyGridMiny.Text := FloatToStrF(ViewData.yzGrid.yRange.Minimum,
932
        ffGeneral, 7, 4);
933
  end;
934

935
  ViewData.xyGrid.IsChecked := xyLock.Checked;
936
  Altered := True;
937
end;
938

939
procedure TFormGridOptions.xzGridCBClick(Sender: TObject);
940
begin
941
  FormPlotStars.GLxzGrid.Visible := xzGridCB.Checked;
942
  ViewData.xzGrid.IsVisible := xzGridCB.Checked;
943
  Altered := True;
944
end;
945

946
procedure TFormGridOptions.yzGridCBClick(Sender: TObject);
947
begin
948
  FormPlotStars.GLyzGrid.Visible := yzGridCB.Checked;
949
  ViewData.yzGrid.IsVisible := yzGridCB.Checked;
950
  Altered := True;
951
end;
952

953
procedure TFormGridOptions.zLockClick(Sender: TObject);
954
begin
955
  if zLock.Checked then
956
  begin
957
    if ViewData.xzGrid.zRange.Minimum < ViewData.yzGrid.zRange.Minimum then
958
      EdityzGridMinz.Text := FloatToStrF(ViewData.xzGrid.zRange.Minimum,
959
        ffGeneral, 7, 4)
960
    else
961
      EditxzGridMinz.Text := FloatToStrF(ViewData.yzGrid.zRange.Minimum,
962
        ffGeneral, 7, 4);
963
  end;
964

965
  ViewData.xzGrid.IsChecked := zLock.Checked;
966
  Altered := True;
967
end;
968

969
procedure TFormGridOptions.DrawOutline(const Show: Boolean);
970
var
971
  Vectors: array [0 .. 7] of TGLVector;
972

973
begin
974
  FormPlotStars.BoxLine1.Visible := Show;
975
  FormPlotStars.BoxLine1.LineWidth := ViewData.BoxLnWidth;
976

977
  FormPlotStars.BoxLine2.Visible := Show;
978
  FormPlotStars.BoxLine2.LineWidth := ViewData.BoxLnWidth;
979

980
  FormPlotStars.BoxLine3.Visible := Show;
981
  FormPlotStars.BoxLine3.LineWidth := ViewData.BoxLnWidth;
982

983
  FormPlotStars.BoxLine4.Visible := Show;
984
  FormPlotStars.BoxLine4.LineWidth := ViewData.BoxLnWidth;
985

986
  if Show then
987
  begin
988
    if ViewData.xyGrid.xRange.Minimum < ViewData.xzGrid.xRange.Minimum then
989
      Vectors[0].x := ViewData.xyGrid.xRange.Minimum
990
    else
991
      Vectors[0].x := ViewData.xzGrid.xRange.Minimum;
992

993
    if ViewData.xyGrid.xRange.Maximum > ViewData.xzGrid.xRange.Maximum then
994
      Vectors[1].x := ViewData.xyGrid.xRange.Maximum
995
    else
996
      Vectors[1].x := ViewData.xzGrid.xRange.Maximum;
997

998
    if ViewData.xyGrid.yRange.Minimum < ViewData.yzGrid.yRange.Minimum then
999
      Vectors[0].y := ViewData.xyGrid.yRange.Minimum
1000
    else
1001
      Vectors[0].y := ViewData.yzGrid.yRange.Minimum;
1002

1003
    if ViewData.xyGrid.yRange.Maximum > ViewData.yzGrid.yRange.Maximum then
1004
      Vectors[2].y := ViewData.xyGrid.yRange.Maximum
1005
    else
1006
      Vectors[2].y := ViewData.yzGrid.yRange.Maximum;
1007

1008
    if ViewData.xzGrid.zRange.Minimum < ViewData.yzGrid.zRange.Minimum then
1009
      Vectors[0].z := ViewData.xzGrid.zRange.Minimum * ViewData.xyGrid.zScale
1010
    else
1011
      Vectors[0].z := ViewData.yzGrid.zRange.Minimum * ViewData.xyGrid.zScale;
1012

1013
    if ViewData.xzGrid.zRange.Maximum > ViewData.yzGrid.zRange.Maximum then
1014
      Vectors[4].z := ViewData.xzGrid.zRange.Maximum * ViewData.xyGrid.zScale
1015
    else
1016
      Vectors[4].z := ViewData.yzGrid.zRange.Maximum * ViewData.xyGrid.zScale;
1017

1018
    Vectors[1].y := Vectors[0].y;
1019
    Vectors[1].z := Vectors[0].z;
1020

1021
    Vectors[2].x := Vectors[1].x;
1022
    Vectors[2].z := Vectors[0].z;
1023

1024
    Vectors[3].x := Vectors[0].x;
1025
    Vectors[3].y := Vectors[2].y;
1026
    Vectors[3].z := Vectors[0].z;
1027

1028
    Vectors[4].x := Vectors[0].x;
1029
    Vectors[4].y := Vectors[0].y;
1030

1031
    Vectors[5].x := Vectors[1].x;
1032
    Vectors[5].y := Vectors[1].y;
1033
    Vectors[5].z := Vectors[4].z;
1034

1035
    Vectors[6].x := Vectors[2].x;
1036
    Vectors[6].y := Vectors[2].y;
1037
    Vectors[6].z := Vectors[4].z;
1038

1039
    Vectors[7].x := Vectors[3].x;
1040
    Vectors[7].y := Vectors[3].y;
1041
    Vectors[7].z := Vectors[4].z;
1042

1043
    with FormPlotStars.BoxLine1 do
1044
    begin
1045
      Nodes[0].AsVector := Vectors[0];
1046
      Nodes[1].AsVector := Vectors[1];
1047
      Nodes[2].AsVector := Vectors[2];
1048
      Nodes[3].AsVector := Vectors[3];
1049
      Nodes[4].AsVector := Vectors[0];
1050
      Nodes[5].AsVector := Vectors[4];
1051
      Nodes[6].AsVector := Vectors[5];
1052
      Nodes[7].AsVector := Vectors[6];
1053
      Nodes[8].AsVector := Vectors[7];
1054
      Nodes[9].AsVector := Vectors[4];
1055
    end;
1056
    with FormPlotStars.BoxLine2 do
1057
    begin
1058
      Nodes[0].AsVector := Vectors[1];
1059
      Nodes[1].AsVector := Vectors[5];
1060
    end;
1061
    with FormPlotStars.BoxLine3 do
1062
    begin
1063
      Nodes[0].AsVector := Vectors[2];
1064
      Nodes[1].AsVector := Vectors[6];
1065
    end;
1066
    with FormPlotStars.BoxLine4 do
1067
    begin
1068
      Nodes[0].AsVector := Vectors[3];
1069
      Nodes[1].AsVector := Vectors[7];
1070
    end;
1071
  end;
1072
end;
1073

1074
end.
1075

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

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

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

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