MathgeomGLS

Форк
0
/
faPlotColors.pas 
269 строк · 7.4 Кб
1
unit faPlotColors;
2

3
interface
4

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

20
  GLS.OpenGLTokens,
21
  GLS.VectorTypes,
22

23
  Graf.Global2d,
24
  faFunctions,
25
  faDerivativeOptions;
26

27
type
28
  TPlotColorsForm = class(TForm)
29
    GroupBox1: TGroupBox;
30
    Label1: TLabel;
31
    Label2: TLabel;
32
    Label3: TLabel;
33
    Label4: TLabel;
34
    UpperRed: TTrackBar;
35
    UpperGreen: TTrackBar;
36
    UpperBlue: TTrackBar;
37
    UpperAlpha: TTrackBar;
38
    GroupBox2: TGroupBox;
39
    Label5: TLabel;
40
    Label6: TLabel;
41
    Label7: TLabel;
42
    Label8: TLabel;
43
    LowerRed: TTrackBar;
44
    LowerGreen: TTrackBar;
45
    LowerBlue: TTrackBar;
46
    LowerAlpha: TTrackBar;
47
    UpperLowerLock: TCheckBox;
48
    EditBlend: TEdit;
49
    Label9: TLabel;
50
    Label10: TLabel;
51
    EditMove: TEdit;
52
    ApplyBtn: TBitBtn;
53
    BitBtn1: TBitBtn;
54
    procedure FormShow(Sender: TObject);
55
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
56
    procedure UpperRedChange(Sender: TObject);
57
    procedure UpperGreenChange(Sender: TObject);
58
    procedure UpperBlueChange(Sender: TObject);
59
    procedure UpperAlphaChange(Sender: TObject);
60
    procedure LowerRedChange(Sender: TObject);
61
    procedure LowerGreenChange(Sender: TObject);
62
    procedure LowerBlueChange(Sender: TObject);
63
    procedure LowerAlphaChange(Sender: TObject);
64
    procedure ApplyBtnClick(Sender: TObject);
65
    procedure BitBtn1Click(Sender: TObject);
66
    procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
67
    procedure UpperLowerLockClick(Sender: TObject);
68
    procedure EditBlendKeyDown(Sender: TObject; var Key: Word;
69
                                Shift: TShiftState);
70
    procedure EditBlendKeyPress(Sender: TObject; var Key: Char);
71
    procedure EditBlendKeyUp(Sender: TObject; var Key: Word;
72
                              Shift: TShiftState);
73
    procedure EditMoveKeyPress(Sender: TObject; var Key: Char);
74
    procedure EditMoveKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
75
  private
76
  public
77
    procedure ShowPlotColorData;
78
  end;
79

80
var
81
  PlotColorsForm: TPlotColorsForm;
82

83
//=======================================================================
84
implementation
85
//=======================================================================
86

87
uses
88
  faGraf2d;
89

90
{$R *.dfm}
91

92
procedure TPlotColorsForm.ApplyBtnClick(Sender: TObject);
93
begin
94
  with FunctionsForm.CheckListBox do
95
  TPlotDataObject(Items.Objects[ItemIndex]).Data := PlotData;
96
  FormPlotStars.UpdatePlot;
97
  ApplyBtn.Visible := False;
98
  Altered := True;
99
end;
100

101
procedure TPlotColorsForm.BitBtn1Click(Sender: TObject);
102
begin
103
  Close;
104
end;
105

106
procedure TPlotColorsForm.EditBlendKeyDown(Sender: TObject; var Key: Word;
107
                                            Shift: TShiftState);
108
begin
109
  if (Key = VK_DELETE) or (Key = VK_BACK) then ApplyBtn.Visible := True;
110
end;
111

112
procedure TPlotColorsForm.EditBlendKeyPress(Sender: TObject; var Key: Char);
113
begin
114
  if CharInSet(Key, PosFloat) then ApplyBtn.Visible := True
115
  else Key := #0;
116
end;
117

118
procedure TPlotColorsForm.EditBlendKeyUp(Sender: TObject; var Key: Word;
119
                                          Shift: TShiftState);
120
var
121
  x: TGLFloat;
122

123
begin
124
  try
125
    x := StrToFloat(EditBlend.Text);
126
  except
127
    x := 1.0;
128
  end;
129
  PlotData.ColorBlend := x;
130
  ApplyBtn.Visible := True;
131
end;
132

133

134
procedure TPlotColorsForm.EditMoveKeyPress(Sender: TObject; var Key: Char);
135
begin
136
  if CharInSet(Key, AnyFloat) then ApplyBtn.Visible := True
137
  else Key := #0;
138
end;
139

140
procedure TPlotColorsForm.EditMoveKeyUp(Sender: TObject; var Key: Word;
141
                                         Shift: TShiftState);
142
var
143
  x: TGLFloat;
144

145
begin
146
  try
147
    x := StrToFloat(EditMove.Text);
148
  except
149
    x := 0.0;
150
  end;
151
  PlotData.ColorMove := x;
152
  ApplyBtn.Visible := True;
153
end;
154

155
procedure TPlotColorsForm.FormCloseQuery(Sender: TObject;
156
                                   var CanClose: Boolean);
157
begin
158
  if ApplyBtn.Visible then
159
  begin
160
    case MessageDlg('The current graph''s color data has been altered.'+
161
              #13#10'Do you wish to save the alterations ?', mtConfirmation,
162
                    [mbYes, mbNo, mbCancel], 0) of
163
    mrYes: ApplyBtnClick(Sender);
164
 mrCancel: begin
165
             CanClose := False;
166
             Exit;
167
           end;
168
    end;
169
  end;
170
end;
171

172
procedure TPlotColorsForm.FormKeyDown(Sender: TObject; var Key: Word;
173
                                       Shift: TShiftState);
174
begin
175
  if Key = VK_ESCAPE then Close;
176
end;
177

178
procedure TPlotColorsForm.FormShow(Sender: TObject);
179
begin
180
  UpperLowerLock.Checked := False;
181
  ShowPlotColorData;
182
  ApplyBtn.Visible := False;
183
end;
184

185
procedure TPlotColorsForm.UpperRedChange(Sender: TObject);
186
begin
187
  PlotData.UpperColor.X := UpperRed.Position/225;
188
  if UpperLowerLock.Checked then LowerRed.Position := UpperRed.Position;
189
  ApplyBtn.Visible := True;
190
end;
191

192
procedure TPlotColorsForm.UpperGreenChange(Sender: TObject);
193
begin
194
  PlotData.UpperColor.Y := UpperGreen.Position/225;
195
  if UpperLowerLock.Checked then LowerGreen.Position := UpperGreen.Position;
196
  ApplyBtn.Visible := True;
197
end;
198

199
procedure TPlotColorsForm.UpperLowerLockClick(Sender: TObject);
200
begin
201
  if UpperLowerLock.Checked then
202
  begin
203
    LowerRed.Position := UpperRed.Position;
204
    LowerGreen.Position := UpperGreen.Position;
205
    LowerBlue.Position := UpperBlue.Position;
206
    LowerAlpha.Position := UpperAlpha.Position;
207
  end;
208
end;
209

210
procedure TPlotColorsForm.UpperBlueChange(Sender: TObject);
211
begin
212
  PlotData.UpperColor.Z := UpperBlue.Position/225;
213
  if UpperLowerLock.Checked then LowerBlue.Position := UpperBlue.Position;
214
  ApplyBtn.Visible := True;
215
end;
216

217
procedure TPlotColorsForm.UpperAlphaChange(Sender: TObject);
218
begin
219
  PlotData.UpperColor.W := UpperAlpha.Position/1000;
220
  if UpperLowerLock.Checked then LowerAlpha.Position := UpperAlpha.Position;
221
  ApplyBtn.Visible := True;
222
end;
223

224
procedure TPlotColorsForm.LowerRedChange(Sender: TObject);
225
begin
226
  PlotData.LowerColor.X := LowerRed.Position/225;
227
  if UpperLowerLock.Checked then UpperRed.Position := LowerRed.Position;
228
  ApplyBtn.Visible := True;
229
end;
230

231
procedure TPlotColorsForm.LowerGreenChange(Sender: TObject);
232
begin
233
  PlotData.LowerColor.Y := LowerGreen.Position/225;
234
  if UpperLowerLock.Checked then UpperGreen.Position := LowerGreen.Position;
235
  ApplyBtn.Visible := True;
236
end;
237

238
procedure TPlotColorsForm.LowerBlueChange(Sender: TObject);
239
begin
240
  PlotData.LowerColor.Z := LowerBlue.Position/225;
241
  if UpperLowerLock.Checked then UpperBlue.Position := LowerBlue.Position;
242
  ApplyBtn.Visible := True;
243
end;
244

245
procedure TPlotColorsForm.LowerAlphaChange(Sender: TObject);
246
begin
247
  PlotData.LowerColor.W := LowerAlpha.Position/1000;
248
  if UpperLowerLock.Checked then UpperAlpha.Position := LowerAlpha.Position;
249
  ApplyBtn.Visible := True;
250
end;
251

252
    { Public declarations }
253
procedure TPlotColorsForm.ShowPlotColorData;
254
begin
255
  UpperRed.Position := round(PlotData.UpperColor.X*255);
256
  UpperGreen.Position := round(PlotData.UpperColor.Y*255);
257
  UpperBlue.Position := round(PlotData.UpperColor.Z*255);
258
  UpperAlpha.Position := round(PlotData.UpperColor.W*1000);
259

260
  LowerRed.Position := round(PlotData.LowerColor.X*255);
261
  LowerGreen.Position := round(PlotData.LowerColor.Y*255);
262
  LowerBlue.Position := round(PlotData.LowerColor.Z*255);
263
  LowerAlpha.Position := round(PlotData.LowerColor.W*1000);
264

265
  EditBlend.Text := FloatToStrF(PlotData.ColorBlend, ffGeneral, 7, 4);
266
  EditMove.Text := FloatToStrF(Plotdata.ColorMove, ffGeneral, 7, 4);
267
end;
268

269
end.
270

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

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

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

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