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