MathgeomGLS
269 строк · 7.4 Кб
1unit faPlotColors;
2
3interface
4
5uses
6Winapi.Windows,
7Winapi.Messages,
8System.SysUtils,
9System.UITypes,
10System.Variants,
11System.Classes,
12Vcl.Graphics,
13Vcl.Controls,
14Vcl.Forms,
15Vcl.Dialogs,
16Vcl.StdCtrls,
17Vcl.Buttons,
18Vcl.ComCtrls,
19
20GLS.OpenGLTokens,
21GLS.VectorTypes,
22
23Graf.Global2d,
24faFunctions,
25faDerivativeOptions;
26
27type
28TPlotColorsForm = class(TForm)
29GroupBox1: TGroupBox;
30Label1: TLabel;
31Label2: TLabel;
32Label3: TLabel;
33Label4: TLabel;
34UpperRed: TTrackBar;
35UpperGreen: TTrackBar;
36UpperBlue: TTrackBar;
37UpperAlpha: TTrackBar;
38GroupBox2: TGroupBox;
39Label5: TLabel;
40Label6: TLabel;
41Label7: TLabel;
42Label8: TLabel;
43LowerRed: TTrackBar;
44LowerGreen: TTrackBar;
45LowerBlue: TTrackBar;
46LowerAlpha: TTrackBar;
47UpperLowerLock: TCheckBox;
48EditBlend: TEdit;
49Label9: TLabel;
50Label10: TLabel;
51EditMove: TEdit;
52ApplyBtn: TBitBtn;
53BitBtn1: TBitBtn;
54procedure FormShow(Sender: TObject);
55procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
56procedure UpperRedChange(Sender: TObject);
57procedure UpperGreenChange(Sender: TObject);
58procedure UpperBlueChange(Sender: TObject);
59procedure UpperAlphaChange(Sender: TObject);
60procedure LowerRedChange(Sender: TObject);
61procedure LowerGreenChange(Sender: TObject);
62procedure LowerBlueChange(Sender: TObject);
63procedure LowerAlphaChange(Sender: TObject);
64procedure ApplyBtnClick(Sender: TObject);
65procedure BitBtn1Click(Sender: TObject);
66procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
67procedure UpperLowerLockClick(Sender: TObject);
68procedure EditBlendKeyDown(Sender: TObject; var Key: Word;
69Shift: TShiftState);
70procedure EditBlendKeyPress(Sender: TObject; var Key: Char);
71procedure EditBlendKeyUp(Sender: TObject; var Key: Word;
72Shift: TShiftState);
73procedure EditMoveKeyPress(Sender: TObject; var Key: Char);
74procedure EditMoveKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
75private
76public
77procedure ShowPlotColorData;
78end;
79
80var
81PlotColorsForm: TPlotColorsForm;
82
83//=======================================================================
84implementation
85//=======================================================================
86
87uses
88faGraf2d;
89
90{$R *.dfm}
91
92procedure TPlotColorsForm.ApplyBtnClick(Sender: TObject);
93begin
94with FunctionsForm.CheckListBox do
95TPlotDataObject(Items.Objects[ItemIndex]).Data := PlotData;
96FormPlotStars.UpdatePlot;
97ApplyBtn.Visible := False;
98Altered := True;
99end;
100
101procedure TPlotColorsForm.BitBtn1Click(Sender: TObject);
102begin
103Close;
104end;
105
106procedure TPlotColorsForm.EditBlendKeyDown(Sender: TObject; var Key: Word;
107Shift: TShiftState);
108begin
109if (Key = VK_DELETE) or (Key = VK_BACK) then ApplyBtn.Visible := True;
110end;
111
112procedure TPlotColorsForm.EditBlendKeyPress(Sender: TObject; var Key: Char);
113begin
114if CharInSet(Key, PosFloat) then ApplyBtn.Visible := True
115else Key := #0;
116end;
117
118procedure TPlotColorsForm.EditBlendKeyUp(Sender: TObject; var Key: Word;
119Shift: TShiftState);
120var
121x: TGLFloat;
122
123begin
124try
125x := StrToFloat(EditBlend.Text);
126except
127x := 1.0;
128end;
129PlotData.ColorBlend := x;
130ApplyBtn.Visible := True;
131end;
132
133
134procedure TPlotColorsForm.EditMoveKeyPress(Sender: TObject; var Key: Char);
135begin
136if CharInSet(Key, AnyFloat) then ApplyBtn.Visible := True
137else Key := #0;
138end;
139
140procedure TPlotColorsForm.EditMoveKeyUp(Sender: TObject; var Key: Word;
141Shift: TShiftState);
142var
143x: TGLFloat;
144
145begin
146try
147x := StrToFloat(EditMove.Text);
148except
149x := 0.0;
150end;
151PlotData.ColorMove := x;
152ApplyBtn.Visible := True;
153end;
154
155procedure TPlotColorsForm.FormCloseQuery(Sender: TObject;
156var CanClose: Boolean);
157begin
158if ApplyBtn.Visible then
159begin
160case 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
163mrYes: ApplyBtnClick(Sender);
164mrCancel: begin
165CanClose := False;
166Exit;
167end;
168end;
169end;
170end;
171
172procedure TPlotColorsForm.FormKeyDown(Sender: TObject; var Key: Word;
173Shift: TShiftState);
174begin
175if Key = VK_ESCAPE then Close;
176end;
177
178procedure TPlotColorsForm.FormShow(Sender: TObject);
179begin
180UpperLowerLock.Checked := False;
181ShowPlotColorData;
182ApplyBtn.Visible := False;
183end;
184
185procedure TPlotColorsForm.UpperRedChange(Sender: TObject);
186begin
187PlotData.UpperColor.X := UpperRed.Position/225;
188if UpperLowerLock.Checked then LowerRed.Position := UpperRed.Position;
189ApplyBtn.Visible := True;
190end;
191
192procedure TPlotColorsForm.UpperGreenChange(Sender: TObject);
193begin
194PlotData.UpperColor.Y := UpperGreen.Position/225;
195if UpperLowerLock.Checked then LowerGreen.Position := UpperGreen.Position;
196ApplyBtn.Visible := True;
197end;
198
199procedure TPlotColorsForm.UpperLowerLockClick(Sender: TObject);
200begin
201if UpperLowerLock.Checked then
202begin
203LowerRed.Position := UpperRed.Position;
204LowerGreen.Position := UpperGreen.Position;
205LowerBlue.Position := UpperBlue.Position;
206LowerAlpha.Position := UpperAlpha.Position;
207end;
208end;
209
210procedure TPlotColorsForm.UpperBlueChange(Sender: TObject);
211begin
212PlotData.UpperColor.Z := UpperBlue.Position/225;
213if UpperLowerLock.Checked then LowerBlue.Position := UpperBlue.Position;
214ApplyBtn.Visible := True;
215end;
216
217procedure TPlotColorsForm.UpperAlphaChange(Sender: TObject);
218begin
219PlotData.UpperColor.W := UpperAlpha.Position/1000;
220if UpperLowerLock.Checked then LowerAlpha.Position := UpperAlpha.Position;
221ApplyBtn.Visible := True;
222end;
223
224procedure TPlotColorsForm.LowerRedChange(Sender: TObject);
225begin
226PlotData.LowerColor.X := LowerRed.Position/225;
227if UpperLowerLock.Checked then UpperRed.Position := LowerRed.Position;
228ApplyBtn.Visible := True;
229end;
230
231procedure TPlotColorsForm.LowerGreenChange(Sender: TObject);
232begin
233PlotData.LowerColor.Y := LowerGreen.Position/225;
234if UpperLowerLock.Checked then UpperGreen.Position := LowerGreen.Position;
235ApplyBtn.Visible := True;
236end;
237
238procedure TPlotColorsForm.LowerBlueChange(Sender: TObject);
239begin
240PlotData.LowerColor.Z := LowerBlue.Position/225;
241if UpperLowerLock.Checked then UpperBlue.Position := LowerBlue.Position;
242ApplyBtn.Visible := True;
243end;
244
245procedure TPlotColorsForm.LowerAlphaChange(Sender: TObject);
246begin
247PlotData.LowerColor.W := LowerAlpha.Position/1000;
248if UpperLowerLock.Checked then UpperAlpha.Position := LowerAlpha.Position;
249ApplyBtn.Visible := True;
250end;
251
252{ Public declarations }
253procedure TPlotColorsForm.ShowPlotColorData;
254begin
255UpperRed.Position := round(PlotData.UpperColor.X*255);
256UpperGreen.Position := round(PlotData.UpperColor.Y*255);
257UpperBlue.Position := round(PlotData.UpperColor.Z*255);
258UpperAlpha.Position := round(PlotData.UpperColor.W*1000);
259
260LowerRed.Position := round(PlotData.LowerColor.X*255);
261LowerGreen.Position := round(PlotData.LowerColor.Y*255);
262LowerBlue.Position := round(PlotData.LowerColor.Z*255);
263LowerAlpha.Position := round(PlotData.LowerColor.W*1000);
264
265EditBlend.Text := FloatToStrF(PlotData.ColorBlend, ffGeneral, 7, 4);
266EditMove.Text := FloatToStrF(Plotdata.ColorMove, ffGeneral, 7, 4);
267end;
268
269end.
270