root / UFResSimulT.pas @ 3
Historique | Voir | Annoter | Télécharger (173,83 ko)
1 | 3 | avalancogn | unit UFResSimulT;
|
---|---|---|---|
2 | |||
3 | interface
|
||
4 | |||
5 | uses
|
||
6 | Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, |
||
7 | Dialogs, StdCtrls, Buttons, ExtCtrls, ComCtrls, Grids,Contnrs, CheckLst, |
||
8 | Menus, Printers, Math, PBNumEdit, TeEngine, Series, TeeProcs, Chart, |
||
9 | UVariables, gnugettext; |
||
10 | |||
11 | type
|
||
12 | TFResSimulT = class(TForm)
|
||
13 | PC: TPageControl; |
||
14 | TabAli: TTabSheet; |
||
15 | CBAli1: TComboBox; |
||
16 | TabPD: TTabSheet; |
||
17 | CBPD2: TComboBox; |
||
18 | LBPD: TListBox; |
||
19 | TabPerf: TTabSheet; |
||
20 | TabAA: TTabSheet; |
||
21 | CBAA1: TComboBox; |
||
22 | CBAA3: TComboBox; |
||
23 | CBAA4: TComboBox; |
||
24 | CBPerf1: TComboBox; |
||
25 | CBPerf2D: TComboBox; |
||
26 | CBPerf3D: TComboBox; |
||
27 | CBPerf4: TComboBox; |
||
28 | CBAli2D: TComboBox; |
||
29 | CBAli4: TComboBox; |
||
30 | TabRej: TTabSheet; |
||
31 | CBRej1: TComboBox; |
||
32 | CBRej2D: TComboBox; |
||
33 | CBRej3: TComboBox; |
||
34 | CBRej4: TComboBox; |
||
35 | CBAA5: TComboBox; |
||
36 | GBPerfT: TGroupBox; |
||
37 | GBPerfY: TGroupBox; |
||
38 | GBPerfX: TGroupBox; |
||
39 | GBPDF: TGroupBox; |
||
40 | GBAliT: TGroupBox; |
||
41 | GBAliY: TGroupBox; |
||
42 | GBAliX: TGroupBox; |
||
43 | GBPDT: TGroupBox; |
||
44 | GBPDY: TGroupBox; |
||
45 | GBPDX: TGroupBox; |
||
46 | GBAAT: TGroupBox; |
||
47 | GBAAY: TGroupBox; |
||
48 | GBAAX: TGroupBox; |
||
49 | GBRejT: TGroupBox; |
||
50 | GBRejY: TGroupBox; |
||
51 | GBRejX: TGroupBox; |
||
52 | Graph: TChart; |
||
53 | LBRej: TListBox; |
||
54 | CBAli2P: TComboBox; |
||
55 | CBRej2P: TComboBox; |
||
56 | CBPerf2P: TComboBox; |
||
57 | CBPerf3P: TComboBox; |
||
58 | TabNRJ: TTabSheet; |
||
59 | TabMin: TTabSheet; |
||
60 | GBNRJX: TGroupBox; |
||
61 | CBNRJ2D: TComboBox; |
||
62 | CBNRJ2P: TComboBox; |
||
63 | GBNRJY: TGroupBox; |
||
64 | CBNRJ3: TComboBox; |
||
65 | CBNRJ4: TComboBox; |
||
66 | GBNRJT: TGroupBox; |
||
67 | CBNRJ1: TComboBox; |
||
68 | LBNRJ: TListBox; |
||
69 | GBMinX: TGroupBox; |
||
70 | CBMin2D: TComboBox; |
||
71 | CBMin2P: TComboBox; |
||
72 | GBMinY: TGroupBox; |
||
73 | CBMin3: TComboBox; |
||
74 | CBMin4: TComboBox; |
||
75 | GBMinT: TGroupBox; |
||
76 | CBMin1: TComboBox; |
||
77 | CBAli3: TComboBox; |
||
78 | PD: TPrintDialog; |
||
79 | LBMin: TListBox; |
||
80 | CBMin5: TComboBox; |
||
81 | CBAA2D: TComboBox; |
||
82 | CBAA2P: TComboBox; |
||
83 | LBAA: TListBox; |
||
84 | PM: TPopupMenu; |
||
85 | MI3D: TMenuItem; |
||
86 | MIPreview: TMenuItem; |
||
87 | MIPrint: TMenuItem; |
||
88 | MIExport: TMenuItem; |
||
89 | SD: TSaveDialog; |
||
90 | MExport: TMemo; |
||
91 | CBAli5: TComboBox; |
||
92 | procedure FormClose(Sender: TObject; var Action: TCloseAction); |
||
93 | procedure FormShow(Sender: TObject);
|
||
94 | procedure PCChange(Sender: TObject);
|
||
95 | procedure CBPerf1Change(Sender: TObject);
|
||
96 | procedure CBPerf2Change(Sender: TObject);
|
||
97 | procedure CBPerf3Change(Sender: TObject);
|
||
98 | procedure CBPerf4Change(Sender: TObject);
|
||
99 | procedure CBAli1Change(Sender: TObject);
|
||
100 | procedure CBAli2Change(Sender: TObject);
|
||
101 | procedure CBAli4Change(Sender: TObject);
|
||
102 | procedure CBPD2Change(Sender: TObject);
|
||
103 | procedure LBPDClick(Sender: TObject);
|
||
104 | procedure LBPDDrawItem(Control: TWinControl; Index: Integer;
|
||
105 | Rect: TRect; State: TOwnerDrawState); |
||
106 | procedure CBAA1Change(Sender: TObject);
|
||
107 | procedure CBAA2Change(Sender: TObject);
|
||
108 | procedure CBAA3Change(Sender: TObject);
|
||
109 | procedure CBAA4Change(Sender: TObject);
|
||
110 | procedure CBAA5Change(Sender: TObject);
|
||
111 | procedure CBRej1Change(Sender: TObject);
|
||
112 | procedure CBRej2Change(Sender: TObject);
|
||
113 | procedure CBRej4Change(Sender: TObject);
|
||
114 | procedure CBRej3Change(Sender: TObject);
|
||
115 | procedure CBNRJ1Change(Sender: TObject);
|
||
116 | procedure CBNRJ2Change(Sender: TObject);
|
||
117 | procedure CBNRJ3Change(Sender: TObject);
|
||
118 | procedure CBNRJ4Change(Sender: TObject);
|
||
119 | procedure CBMin1Change(Sender: TObject);
|
||
120 | procedure CBMin2Change(Sender: TObject);
|
||
121 | procedure CBMin3Change(Sender: TObject);
|
||
122 | procedure CBMin4Change(Sender: TObject);
|
||
123 | procedure CBAli3Change(Sender: TObject);
|
||
124 | procedure MI3DClick(Sender: TObject);
|
||
125 | procedure MIPreviewClick(Sender: TObject);
|
||
126 | procedure MIPrintClick(Sender: TObject);
|
||
127 | procedure FormCreate(Sender: TObject);
|
||
128 | procedure CBMin5Change(Sender: TObject);
|
||
129 | procedure MIExportClick(Sender: TObject);
|
||
130 | procedure CBAli5Change(Sender: TObject);
|
||
131 | procedure WMSysCommand(var Message: TWMSysCommand); message WM_SYSCOMMAND; |
||
132 | private
|
||
133 | { D?clarations priv?es }
|
||
134 | LinePerf : TLineSeries ; |
||
135 | BarPerf : TBarSeries ; |
||
136 | ListAli, ListMat : TStrings ; |
||
137 | CompositionComplete : boolean ; |
||
138 | PieAli : TPieSeries ; |
||
139 | AreaAli : array of TAreaSeries ; |
||
140 | BarAli : array of TBarSeries ; |
||
141 | NbLimit : integer ; |
||
142 | ListPD : TStrings ; |
||
143 | LinePD : array of TLineSeries ; |
||
144 | ListAA : TStrings ; |
||
145 | PieAA : TPieSeries ; |
||
146 | AreaAA : array of TAreaSeries ; |
||
147 | BarAA : array of TBarSeries ; |
||
148 | LineAA : array[1..2] of TLineSeries ; |
||
149 | ListNRJ : TStrings ; |
||
150 | PieNRJ : TPieSeries ; |
||
151 | AreaNRJ : array of TAreaSeries ; |
||
152 | BarNRJ : array of TBarSeries ; |
||
153 | ListRej : TStrings ; |
||
154 | PieRej : TPieSeries ; |
||
155 | AreaRej : array of TAreaSeries ; |
||
156 | BarRej : array of TBarSeries ; |
||
157 | ListMin : TStrings ; |
||
158 | PieMin : TPieSeries ; |
||
159 | AreaMin : array of TAreaSeries ; |
||
160 | BarMin : array of TBarSeries ; |
||
161 | LineMin : array[1..2] of TLineSeries ; |
||
162 | procedure ResetGraph ;
|
||
163 | procedure InitAli ;
|
||
164 | procedure AffGraphAli ;
|
||
165 | procedure InitPD ;
|
||
166 | procedure AffGraphPD ;
|
||
167 | procedure InitPerf ;
|
||
168 | procedure AffGraphPerf ;
|
||
169 | procedure InitAA ;
|
||
170 | procedure AffGraphAA ;
|
||
171 | procedure InitNRJ ;
|
||
172 | procedure AffGraphNRJ ;
|
||
173 | procedure InitRej ;
|
||
174 | procedure AffGraphRej ;
|
||
175 | procedure InitMin ;
|
||
176 | procedure AffGraphMin ;
|
||
177 | public
|
||
178 | { D?clarations publiques }
|
||
179 | end;
|
||
180 | |||
181 | var
|
||
182 | FResSimulT: TFResSimulT; |
||
183 | |||
184 | implementation
|
||
185 | |||
186 | uses
|
||
187 | UStrings, UFindRec, UUtil, UEchelle, UFSimulT, UFPrevGraph; |
||
188 | |||
189 | {$R *.dfm}
|
||
190 | |||
191 | { TFResSimulT }
|
||
192 | |||
193 | procedure TFResSimulT.FormCreate(Sender: TObject);
|
||
194 | begin
|
||
195 | if Screen.Fonts.IndexOf('Arial Unicode MS') <> -1 |
||
196 | then
|
||
197 | Font.Name := 'Arial Unicode MS';
|
||
198 | TranslateComponent(Self); |
||
199 | Constraints.MinWidth := 544 + (Width - ClientWidth);
|
||
200 | Width := 640;
|
||
201 | Constraints.MinHeight := 360 + (Height - ClientHeight);
|
||
202 | Height := 480;
|
||
203 | CBPerf1.ItemIndex := 0;
|
||
204 | CBPerf2D.ItemIndex := 0;
|
||
205 | CBPerf2P.ItemIndex := 0;
|
||
206 | CBPerf3D.ItemIndex := 0;
|
||
207 | CBPerf3P.ItemIndex := 0;
|
||
208 | CBPerf4.Items.Add(StrKg); |
||
209 | CBPerf4.ItemIndex := 0;
|
||
210 | CBAli1.ItemIndex := 0;
|
||
211 | CBAli2D.ItemIndex := 0;
|
||
212 | CBAli2P.ItemIndex := 0;
|
||
213 | CBAli3.ItemIndex := 0;
|
||
214 | CBAli4.Items.Add(StrKg); |
||
215 | CBAli4.Items.Add('%');
|
||
216 | CBAli4.ItemIndex := 0;
|
||
217 | CBAli5.ItemIndex := 0;
|
||
218 | CBPD2.ItemIndex := 0;
|
||
219 | CBAA1.ItemIndex := 0;
|
||
220 | CBAA2D.ItemIndex := 0;
|
||
221 | CBAA2P.ItemIndex := 0;
|
||
222 | CBAA3.ItemIndex := 1;
|
||
223 | CBAA4.Items.Add(StrG); |
||
224 | CBAA4.Items.Add('%');
|
||
225 | CBAA4.ItemIndex := 0;
|
||
226 | CBAA5.ItemIndex := 0;
|
||
227 | CBNRJ1.ItemIndex := 0;
|
||
228 | CBNRJ2D.ItemIndex := 0;
|
||
229 | CBNRJ2P.ItemIndex := 0;
|
||
230 | CBNRJ3.ItemIndex := 0;
|
||
231 | CBNRJ4.Items.Add(StrMJ); |
||
232 | CBNRJ4.Items.Add('%');
|
||
233 | CBNRJ4.ItemIndex := 0;
|
||
234 | CBMin1.ItemIndex := 0;
|
||
235 | CBMin2D.ItemIndex := 0;
|
||
236 | CBMin2P.ItemIndex := 0;
|
||
237 | CBMin3.ItemIndex := 0;
|
||
238 | CBMin4.Items.Add(StrG); |
||
239 | CBMin4.Items.Add('%');
|
||
240 | CBMin4.ItemIndex := 0;
|
||
241 | CBMin5.ItemIndex := 0;
|
||
242 | CBRej1.ItemIndex := 0;
|
||
243 | CBRej2D.ItemIndex := 0;
|
||
244 | CBRej2P.ItemIndex := 0;
|
||
245 | CBRej3.ItemIndex := 0;
|
||
246 | CBRej4.Items.Add(StrG); |
||
247 | CBRej4.Items.Add('%');
|
||
248 | CBRej4.ItemIndex := 0;
|
||
249 | end;
|
||
250 | |||
251 | procedure TFResSimulT.FormShow (Sender : TObject) ;
|
||
252 | begin
|
||
253 | MIPrint.Enabled := IsComplete or IsEducation ;
|
||
254 | MIExport.Enabled := MIPrint.Enabled ; |
||
255 | // Bas de page du graphique
|
||
256 | Graph.Foot.Text.Clear ; |
||
257 | Graph.Foot.Text.Add (FSimulT.CBSimul.Text) ; |
||
258 | // Aliments
|
||
259 | InitAli ; |
||
260 | // Performances
|
||
261 | InitPerf ; |
||
262 | // D?p?t de prot?ines
|
||
263 | InitPD ; |
||
264 | // Acides Amin?s
|
||
265 | InitAA ; |
||
266 | // Energie
|
||
267 | InitNRJ ; |
||
268 | // Min?raux
|
||
269 | InitMin ; |
||
270 | // Rejets
|
||
271 | InitRej ; |
||
272 | // Abscisses par d?faut
|
||
273 | CBPerf2D.ItemIndex := XTruie ; |
||
274 | CBAli2D.ItemIndex := XTruie ; |
||
275 | CBPD2.ItemIndex := XTruie ; |
||
276 | CBAA2D.ItemIndex := XTruie ; |
||
277 | CBNRJ2D.ItemIndex := XTruie ; |
||
278 | CBRej2D.ItemIndex := XTruie ; |
||
279 | CBMin2D.ItemIndex := XTruie ; |
||
280 | // Affichage principal
|
||
281 | PC.ActivePageIndex := 0 ;
|
||
282 | PCChange (nil) ;
|
||
283 | end ;
|
||
284 | |||
285 | procedure TFResSimulT.FormClose (Sender : TObject ; var Action : TCloseAction) ; |
||
286 | var
|
||
287 | i : integer ; |
||
288 | begin
|
||
289 | // Performances
|
||
290 | BarPerf.Free ; |
||
291 | LinePerf.Free ; |
||
292 | // Aliments
|
||
293 | for i := 0 to ListAli.Count - 1 do |
||
294 | BarAli[i].Free ; |
||
295 | SetLength (BarAli, 0) ;
|
||
296 | for i := 0 to ListAli.Count - 1 do |
||
297 | AreaAli[i].Free ; |
||
298 | SetLength (AreaAli, 0) ;
|
||
299 | PieAli.Free ; |
||
300 | ListMat.Free ; |
||
301 | ListAli.Free ; |
||
302 | // D?p?t de prot?ines
|
||
303 | for i := 0 to ListPD.Count do |
||
304 | LinePD[i].Free ; |
||
305 | SetLength (LinePD, 0) ;
|
||
306 | ListPD.Free ; |
||
307 | // Acides Amin?s
|
||
308 | for i := 1 to 2 do |
||
309 | LineAA[i].Free ; |
||
310 | for i := 0 to ListAA.Count - 1 do |
||
311 | BarAA[i].Free ; |
||
312 | SetLength (BarAA, 0) ;
|
||
313 | for i := 0 to ListAA.Count - 1 do |
||
314 | AreaAA[i].Free ; |
||
315 | SetLength (AreaAA, 0) ;
|
||
316 | PieAA.Free ; |
||
317 | ListAA.Free ; |
||
318 | // Energie
|
||
319 | for i := 0 to ListNRJ.Count - 1 do |
||
320 | BarNRJ[i].Free ; |
||
321 | SetLength (BarNRJ, 0) ;
|
||
322 | for i := 0 to ListNRJ.Count - 1 do |
||
323 | AreaNRJ[i].Free ; |
||
324 | SetLength (AreaNRJ, 0) ;
|
||
325 | PieNRJ.Free ; |
||
326 | ListNRJ.Free ; |
||
327 | // Min?raux
|
||
328 | for i := 1 to 2 do |
||
329 | LineMin[i].Free ; |
||
330 | for i := 0 to ListMin.Count - 1 do |
||
331 | BarMin[i].Free ; |
||
332 | SetLength (BarMin, 0) ;
|
||
333 | for i := 0 to ListMin.Count - 1 do |
||
334 | AreaMin[i].Free ; |
||
335 | SetLength (AreaMin, 0) ;
|
||
336 | PieMin.Free ; |
||
337 | ListMin.Free ; |
||
338 | // Rejets
|
||
339 | for i := 0 to ListRej.Count - 1 do |
||
340 | BarRej[i].Free ; |
||
341 | SetLength (BarRej, 0) ;
|
||
342 | for i := 0 to ListRej.Count - 1 do |
||
343 | AreaRej[i].Free ; |
||
344 | SetLength (AreaRej, 0) ;
|
||
345 | PieRej.Free ; |
||
346 | ListRej.Free ; |
||
347 | end ;
|
||
348 | |||
349 | procedure TFResSimulT.PCChange (Sender : TObject) ;
|
||
350 | begin
|
||
351 | GBPDF.Visible := (PC.ActivePageIndex = 2) ;
|
||
352 | case PC.ActivePageIndex of |
||
353 | 0 : // Performances |
||
354 | AffGraphPerf ; |
||
355 | 1 : // Aliments |
||
356 | AffGraphAli ; |
||
357 | 2 : // D?p?t de prot?ines |
||
358 | AffGraphPD ; |
||
359 | 3 : // Acides Amin?s |
||
360 | AffGraphAA ; |
||
361 | 4 : // Energie |
||
362 | AffGraphNRJ ; |
||
363 | 5: // Min?raux |
||
364 | AffGraphMin ; |
||
365 | 6: // Rejets |
||
366 | AffGraphRej ; |
||
367 | end ;
|
||
368 | end ;
|
||
369 | |||
370 | procedure TFResSimulT.ResetGraph ;
|
||
371 | var
|
||
372 | i : integer ; |
||
373 | begin
|
||
374 | Graph.UndoZoom ; |
||
375 | // Graph.View3D := FALSE ;
|
||
376 | Graph.Legend.Visible := TRUE ; |
||
377 | Graph.Legend.Alignment := laRight ; |
||
378 | Graph.Title.Text.Clear ; |
||
379 | Graph.SubTitle.Text.Clear ; |
||
380 | Graph.BottomAxis.MinimumOffset := 0;
|
||
381 | Graph.BottomAxis.MaximumOffset := 0;
|
||
382 | // Performances
|
||
383 | LinePerf.Active := FALSE ; |
||
384 | BarPerf.Active := FALSE ; |
||
385 | // Aliments
|
||
386 | PieAli.Active := FALSE ; |
||
387 | for i := 0 to ListAli.Count - 1 do |
||
388 | AreaAli[i].Active := FALSE ; |
||
389 | for i := 0 to ListAli.Count - 1 do |
||
390 | BarAli[i].Active := FALSE ; |
||
391 | // D?p?t de prot?ines
|
||
392 | for i := 0 to ListPD.Count do |
||
393 | LinePD[i].Active := FALSE ; |
||
394 | // Acides Amin?s
|
||
395 | PieAA.Active := FALSE ; |
||
396 | for i := 0 to ListAA.Count - 1 do |
||
397 | AreaAA[i].Active := FALSE ; |
||
398 | for i := 0 to ListAA.Count - 1 do |
||
399 | BarAA[i].Active := FALSE ; |
||
400 | for i := 1 to 2 do |
||
401 | LineAA[i].Active := FALSE ; |
||
402 | // Energie
|
||
403 | PieNRJ.Active := FALSE ; |
||
404 | for i := 0 to ListNRJ.Count - 1 do |
||
405 | AreaNRJ[i].Active := FALSE ; |
||
406 | for i := 0 to ListNRJ.Count - 1 do |
||
407 | BarNRJ[i].Active := FALSE ; |
||
408 | // Min?raux
|
||
409 | PieMin.Active := FALSE ; |
||
410 | for i := 0 to ListMin.Count - 1 do |
||
411 | AreaMin[i].Active := FALSE ; |
||
412 | for i := 0 to ListMin.Count - 1 do |
||
413 | BarMin[i].Active := FALSE ; |
||
414 | for i := 1 to 2 do |
||
415 | LineMin[i].Active := FALSE ; |
||
416 | // Rejets
|
||
417 | PieRej.Active := FALSE ; |
||
418 | for i := 0 to ListRej.Count - 1 do |
||
419 | AreaRej[i].Active := FALSE ; |
||
420 | for i := 0 to ListRej.Count - 1 do |
||
421 | BarRej[i].Active := FALSE ; |
||
422 | // Export
|
||
423 | MExport.Clear; |
||
424 | end ;
|
||
425 | |||
426 | procedure TFResSimulT.MI3DClick (Sender : TObject) ;
|
||
427 | begin
|
||
428 | Graph.View3D := not (Graph.View3D) ;
|
||
429 | end ;
|
||
430 | |||
431 | procedure TFResSimulT.MIPreviewClick (Sender : TObject) ;
|
||
432 | begin
|
||
433 | FPrevGraph := TFPrevGraph.Create (Self) ; |
||
434 | with FPrevGraph do |
||
435 | begin
|
||
436 | TPPGraph.Panels.Add (Graph) ; |
||
437 | ShowModal ; |
||
438 | Release ; |
||
439 | end ;
|
||
440 | end ;
|
||
441 | |||
442 | procedure TFResSimulT.MIPrintClick (Sender : TObject) ;
|
||
443 | begin
|
||
444 | if PD.Execute
|
||
445 | then
|
||
446 | begin
|
||
447 | Printer.Orientation := poLandscape ; |
||
448 | Graph.Print ; |
||
449 | end ;
|
||
450 | end ;
|
||
451 | |||
452 | procedure TFResSimulT.MIExportClick(Sender: TObject);
|
||
453 | begin
|
||
454 | SD.InitialDir := GetCurrentDir; |
||
455 | if SD.Execute
|
||
456 | then
|
||
457 | MExport.Lines.SaveToFile(SD.FileName); |
||
458 | end;
|
||
459 | |||
460 | //////////////////////
|
||
461 | // Performances //
|
||
462 | //////////////////////
|
||
463 | procedure TFResSimulT.InitPerf ;
|
||
464 | begin
|
||
465 | // LinePerf : s?rie (ligne) graphique
|
||
466 | LinePerf := TLineSeries.Create (Graph) ; |
||
467 | LinePerf.ParentChart := Graph ; |
||
468 | // LinePerf.Title := ' ' ;
|
||
469 | LinePerf.SeriesColor := clTeal ; |
||
470 | LinePerf.LinePen.Color := LinePerf.SeriesColor ; |
||
471 | LinePerf.LinePen.Width := 2 ;
|
||
472 | Graph.AddSeries (LinePerf) ; |
||
473 | // BarPerf : s?rie (barre) graphique
|
||
474 | BarPerf := TBarSeries.Create (Graph) ; |
||
475 | BarPerf.ParentChart := Graph ; |
||
476 | // BarPerf.Title := ' ' ;
|
||
477 | BarPerf.SeriesColor := clTeal ; |
||
478 | BarPerf.BarPen.Color := BarPerf.SeriesColor ; |
||
479 | BarPerf.Marks.Style := smsValue ; |
||
480 | BarPerf.Marks.ArrowLength := 0 ;
|
||
481 | BarPerf.Marks.Arrow.Visible := FALSE ; |
||
482 | BarPerf.Marks.Brush.Style := bsClear ; |
||
483 | BarPerf.Marks.Frame.Visible := FALSE ; |
||
484 | BarPerf.Marks.Font.Style := [fsBold] ; |
||
485 | Graph.AddSeries (BarPerf) ; |
||
486 | end ;
|
||
487 | |||
488 | procedure TFResSimulT.AffGraphPerf ;
|
||
489 | var
|
||
490 | j, k : integer ; |
||
491 | x, p : double ; |
||
492 | s, csv : string ;
|
||
493 | |||
494 | // Abscisse
|
||
495 | function PerfX : double ;
|
||
496 | begin
|
||
497 | case CBPerf1.ItemIndex of |
||
498 | 0 : // Affichage dynamique |
||
499 | case CBPerf2D.ItemIndex of |
||
500 | 0 : // Age |
||
501 | result := PResSimulT.TabResult[1, j] ;
|
||
502 | 1 : // Dur?e |
||
503 | result := j - 1 ;
|
||
504 | else
|
||
505 | result := 0 ;
|
||
506 | end ;
|
||
507 | 1 : // Affichage par p?riode |
||
508 | case CBPerf2P.ItemIndex of |
||
509 | 0 : // Cycle |
||
510 | result := PResSimulT.TabResult[2, j] ;
|
||
511 | 1 : // Stade |
||
512 | result := PResSimulT.TabResult[3, j] ;
|
||
513 | else
|
||
514 | result := 0 ;
|
||
515 | end ;
|
||
516 | else
|
||
517 | result := 0 ;
|
||
518 | end ;
|
||
519 | end ;
|
||
520 | |||
521 | // Ordonn?e
|
||
522 | function PerfY : double ;
|
||
523 | var
|
||
524 | h : integer ; |
||
525 | v, d, conso, gain : double ; |
||
526 | begin
|
||
527 | case CBPerf1.ItemIndex of |
||
528 | 0 : // Affichage dynamique |
||
529 | case CBPerf3D.ItemIndex of |
||
530 | 0 : // Poids vif total |
||
531 | result := PResSimulT.TabResult[58, j] ;
|
||
532 | 1 : // Gain de poids total |
||
533 | result := PResSimulT.TabResult[59, j] * 1000 ; |
||
534 | 2 : // Poids vif net |
||
535 | result := PResSimulT.TabResult[60, j] ;
|
||
536 | 3 : // Gain de poids net |
||
537 | result := PResSimulT.TabResult[61, j] * 1000 ; |
||
538 | 4 : // Aliment consomm? |
||
539 | case CBPerf4.ItemIndex of |
||
540 | 0 : // Aliment |
||
541 | result := PResSimulT.TabResult[11, j] ;
|
||
542 | 1 : // MS |
||
543 | result := PResSimulT.TabResult[12, j] ;
|
||
544 | 2 : // ED |
||
545 | result := PResSimulT.TabResult[71, j] ;
|
||
546 | 3 : // EM |
||
547 | result := PResSimulT.TabResult[72, j] ;
|
||
548 | 4 : // EN |
||
549 | result := PResSimulT.TabResult[73, j] ;
|
||
550 | else
|
||
551 | result := 0 ;
|
||
552 | end ;
|
||
553 | 5 : // Indice de consommation |
||
554 | if PResSimulT.TabResult[59, j] <> 0 |
||
555 | then
|
||
556 | case CBPerf4.ItemIndex of |
||
557 | 0 : // Aliment |
||
558 | result := PResSimulT.TabResult[11, j] / PResSimulT.TabResult[59, j] ; |
||
559 | 1 : // MS |
||
560 | result := PResSimulT.TabResult[12, j] / PResSimulT.TabResult[59, j] ; |
||
561 | 2 : // ED |
||
562 | result := PResSimulT.TabResult[71, j] / PResSimulT.TabResult[59, j] ; |
||
563 | 3 : // EM |
||
564 | result := PResSimulT.TabResult[72, j] / PResSimulT.TabResult[59, j] ; |
||
565 | 4 : // EN |
||
566 | result := PResSimulT.TabResult[73, j] / PResSimulT.TabResult[59, j] ; |
||
567 | else
|
||
568 | result := 0 ;
|
||
569 | end
|
||
570 | else
|
||
571 | result := 0 ;
|
||
572 | 6 : // Efficacit? alimentaire |
||
573 | case CBPerf4.ItemIndex of |
||
574 | 0 : // Aliment |
||
575 | if PResSimulT.TabResult[11, j] <> 0 |
||
576 | then
|
||
577 | result := PResSimulT.TabResult[59, j] / PResSimulT.TabResult[11, j] |
||
578 | else
|
||
579 | result := 0 ;
|
||
580 | 1 : // MS |
||
581 | if PResSimulT.TabResult[12, j] <> 0 |
||
582 | then
|
||
583 | result := PResSimulT.TabResult[59, j] / PResSimulT.TabResult[12, j] |
||
584 | else
|
||
585 | result := 0 ;
|
||
586 | 2 : // ED |
||
587 | if PResSimulT.TabResult[71, j] <> 0 |
||
588 | then
|
||
589 | result := PResSimulT.TabResult[59, j] / PResSimulT.TabResult[71, j] |
||
590 | else
|
||
591 | result := 0 ;
|
||
592 | 3 : // EM |
||
593 | if PResSimulT.TabResult[72, j] <> 0 |
||
594 | then
|
||
595 | result := PResSimulT.TabResult[59, j] / PResSimulT.TabResult[72, j] |
||
596 | else
|
||
597 | result := 0 ;
|
||
598 | 4 : // EN |
||
599 | if PResSimulT.TabResult[73, j] <> 0 |
||
600 | then
|
||
601 | result := PResSimulT.TabResult[59, j] / PResSimulT.TabResult[73, j] |
||
602 | else
|
||
603 | result := 0 ;
|
||
604 | else
|
||
605 | result := 0 ;
|
||
606 | end ;
|
||
607 | 7 : // Poids de prot?ines |
||
608 | result := PResSimulT.TabResult[62, j] ;
|
||
609 | 8 : // D?p?t de prot?ines |
||
610 | result := PResSimulT.TabResult[63, j] ;
|
||
611 | 9 : // Poids de lipides |
||
612 | result := PResSimulT.TabResult[65, j] ;
|
||
613 | 10 : // D?p?t de lipides |
||
614 | result := PResSimulT.TabResult[66, j] ;
|
||
615 | 11 : // Epaisseur de lard |
||
616 | result := PResSimulT.TabResult[67, j] ;
|
||
617 | 12 : // Variation de P2 |
||
618 | result := PResSimulT.TabResult[68, j] ;
|
||
619 | 13 : // Production laiti?re |
||
620 | result := PResSimulT.TabResult[69, j] ;
|
||
621 | else
|
||
622 | result := 0 ;
|
||
623 | end ;
|
||
624 | 1 : // Affichage par p?riode |
||
625 | begin
|
||
626 | // Diviseur
|
||
627 | if (CBPerf3P.ItemIndex in [0, 1, 6, 7]) and (CBPerf4.ItemIndex = 1) |
||
628 | then // Dur?e et conversion kg -> g |
||
629 | d := (j - k) / 1000
|
||
630 | else
|
||
631 | if (CBPerf3P.ItemIndex in [3, 8, 9]) and (CBPerf4.ItemIndex mod 2 = 1) |
||
632 | then // Dur?e |
||
633 | d := (j - k) |
||
634 | else
|
||
635 | d := 1 ;
|
||
636 | v := 0 ;
|
||
637 | case CBPerf3P.ItemIndex of |
||
638 | 0 : // Gain de poids total |
||
639 | for h := k to j - 1 do |
||
640 | v := v + PResSimulT.TabResult[59, h] ;
|
||
641 | 1 : // Gain de poids net |
||
642 | for h := k to j - 1 do |
||
643 | v := v + PResSimulT.TabResult[61, h] ;
|
||
644 | 2 : // Dur?e |
||
645 | v := j - k ; |
||
646 | 3 : // Aliment consomm? |
||
647 | for h := k to j - 1 do |
||
648 | case CBPerf4.ItemIndex of |
||
649 | 0, 1 : // Aliment |
||
650 | v := v + PResSimulT.TabResult[11, h] ;
|
||
651 | 2, 3 : // MS |
||
652 | v := v + PResSimulT.TabResult[12, h] ;
|
||
653 | 4, 5 : // ED |
||
654 | v := v + PResSimulT.TabResult[71, h] ;
|
||
655 | 6, 7 : // EM |
||
656 | v := v + PResSimulT.TabResult[72, h] ;
|
||
657 | 8, 9 : // EN |
||
658 | v := v + PResSimulT.TabResult[73, h] ;
|
||
659 | end ;
|
||
660 | 4 : // Indice de consommation |
||
661 | begin
|
||
662 | conso := 0 ;
|
||
663 | for h := k to j - 1 do |
||
664 | case CBPerf4.ItemIndex of |
||
665 | 0 : // Aliment |
||
666 | conso := conso + PResSimulT.TabResult[11, h] ;
|
||
667 | 1 : // MS |
||
668 | conso := conso + PResSimulT.TabResult[12, h] ;
|
||
669 | 2 : // ED |
||
670 | conso := conso + PResSimulT.TabResult[71, h] ;
|
||
671 | 3 : // EM |
||
672 | conso := conso + PResSimulT.TabResult[72, h] ;
|
||
673 | 4 : // EN |
||
674 | conso := conso + PResSimulT.TabResult[73, h] ;
|
||
675 | end ;
|
||
676 | gain := 0 ;
|
||
677 | for h := k to j - 1 do |
||
678 | gain := gain + PResSimulT.TabResult[59, h] ;
|
||
679 | if gain <> 0 |
||
680 | then
|
||
681 | v := conso / gain ; |
||
682 | end ;
|
||
683 | 5 : // Efficacit? alimentaire |
||
684 | begin
|
||
685 | gain := 0 ;
|
||
686 | for h := k to j - 1 do |
||
687 | gain := gain + PResSimulT.TabResult[59, h] ;
|
||
688 | conso := 0 ;
|
||
689 | for h := k to j - 1 do |
||
690 | case CBPerf4.ItemIndex of |
||
691 | 0 : // Aliment |
||
692 | conso := conso + PResSimulT.TabResult[11, h] ;
|
||
693 | 1 : // MS |
||
694 | conso := conso + PResSimulT.TabResult[12, h] ;
|
||
695 | 2 : // ED |
||
696 | conso := conso + PResSimulT.TabResult[71, h] ;
|
||
697 | 3 : // EM |
||
698 | conso := conso + PResSimulT.TabResult[72, h] ;
|
||
699 | 4 : // EN |
||
700 | conso := conso + PResSimulT.TabResult[73, h] ;
|
||
701 | end ;
|
||
702 | if conso <> 0 |
||
703 | then
|
||
704 | v := gain / conso ; |
||
705 | end ;
|
||
706 | 6 : // D?p?t de prot?ines |
||
707 | for h := k to j - 1 do |
||
708 | v := v + PResSimulT.TabResult[63, h] / 1000 ; |
||
709 | 7 : // D?p?t de lipides |
||
710 | for h := k to j - 1 do |
||
711 | v := v + PResSimulT.TabResult[66, h] / 1000 ; |
||
712 | 8 : // Variation de P2 |
||
713 | for h := k to j - 1 do |
||
714 | v := v + PResSimulT.TabResult[68, h] ;
|
||
715 | 9 : // Production laiti?re |
||
716 | for h := k to j - 1 do |
||
717 | v := v + PResSimulT.TabResult[69, h] ;
|
||
718 | end ;
|
||
719 | result := v / d ; |
||
720 | end ;
|
||
721 | else
|
||
722 | result := 0 ;
|
||
723 | end ;
|
||
724 | end ;
|
||
725 | |||
726 | // AffGraphPerf
|
||
727 | begin
|
||
728 | ResetGraph ; |
||
729 | Graph.Legend.Visible := FALSE ; |
||
730 | Graph.Title.Text.Add (Format ('%s : %s', [TabPerf.Caption, CBPerf1.Text])) ;
|
||
731 | case CBPerf1.ItemIndex of |
||
732 | 0 : // Affichage dynamique |
||
733 | begin
|
||
734 | Graph.LeftAxis.Title.Caption := Format ('%s (%s)', [CBPerf3D.Text, CBPerf4.Text]) ;
|
||
735 | Graph.BottomAxis.Title.Caption := CBPerf2D.Text ; |
||
736 | csv := CBPerf2D.Text; |
||
737 | csv := csv + ';' + Format ('%s (%s)', [CBPerf3D.Text, CBPerf4.Text]); |
||
738 | MExport.Lines.Append(csv); |
||
739 | // Affichage de la ligne
|
||
740 | LinePerf.Active := TRUE ; |
||
741 | LinePerf.Clear ; |
||
742 | for j := 1 to PResSimulT.NbJSim do |
||
743 | begin
|
||
744 | if (j > 1) and ((PResSimulT.TabResult[2, j] <> PResSimulT.TabResult[2, j - 1]) and (PSimulT.OptInit = 1)) or ((PResSimulT.TabResult[3, j] <> PResSimulT.TabResult[3, j - 1]) and (PSimulT.OptInit = 0)) |
||
745 | then // Rupture de cycle ou de stade |
||
746 | LinePerf.AddXY (PerfX, PerfY, '', clNone) ;
|
||
747 | LinePerf.AddXY (PerfX, PerfY, '', clTeeColor) ;
|
||
748 | csv := FloatToStrF(PerfX, ffFixed, 15, 15); |
||
749 | csv := csv + ';' + FloatToStrF(PerfY, ffFixed, 15, 15); |
||
750 | MExport.Lines.Append(csv); |
||
751 | end ;
|
||
752 | end ;
|
||
753 | 1 : // Affichage par p?riode |
||
754 | begin
|
||
755 | Graph.LeftAxis.Title.Caption := Format ('%s (%s)', [CBPerf3P.Text, CBPerf4.Text]) ;
|
||
756 | Graph.BottomAxis.Title.Caption := CBPerf2P.Text ; |
||
757 | csv := CBPerf2P.Text; |
||
758 | csv := csv + ';' + Format ('%s (%s)', [CBPerf3P.Text, CBPerf4.Text]); |
||
759 | MExport.Lines.Append(csv); |
||
760 | // Affichage de la barre
|
||
761 | BarPerf.Active := TRUE ; |
||
762 | BarPerf.Clear ; |
||
763 | j := 1 ;
|
||
764 | x := PerfX ; |
||
765 | k := 1 ;
|
||
766 | if PResSimulT.NbJSim > 1 |
||
767 | then
|
||
768 | for j := 2 to PResSimulT.NbJSim do |
||
769 | begin
|
||
770 | p := PerfX ; |
||
771 | if x <> p
|
||
772 | then
|
||
773 | begin
|
||
774 | // Changement de p?riode
|
||
775 | if CBPerf2P.ItemIndex = 1 |
||
776 | then // Stade |
||
777 | case Trunc (x) of |
||
778 | 0 : s := StrGestation ;
|
||
779 | 1 : s := StrLactation ;
|
||
780 | 2 : s := StrISSF ;
|
||
781 | end
|
||
782 | else
|
||
783 | s := Format ('%1.0f', [x]) ;
|
||
784 | BarPerf.AddBar (PerfY, s, clTeeColor) ; |
||
785 | csv := s; |
||
786 | csv := csv + ';' + FloatToStrF(PerfY, ffFixed, 15, 15); |
||
787 | MExport.Lines.Append(csv); |
||
788 | x := p ; |
||
789 | k := j ; |
||
790 | end ;
|
||
791 | end ;
|
||
792 | j := PResSimulT.NbJSim + 1 ;
|
||
793 | if CBPerf2P.ItemIndex = 2 |
||
794 | then // Globale |
||
795 | s := ' '
|
||
796 | else
|
||
797 | if CBPerf2P.ItemIndex = 1 |
||
798 | then // Stade |
||
799 | case Trunc (x) of |
||
800 | 0 : s := StrGestation ;
|
||
801 | 1 : s := StrLactation ;
|
||
802 | 2 : s := StrISSF ;
|
||
803 | end
|
||
804 | else
|
||
805 | s := Format ('%1.0f', [x]) ;
|
||
806 | BarPerf.AddBar (PerfY, s, clTeeColor) ; |
||
807 | csv := s; |
||
808 | csv := csv + ';' + FloatToStrF(PerfY, ffFixed, 15, 15); |
||
809 | MExport.Lines.Append(csv); |
||
810 | end ;
|
||
811 | end ;
|
||
812 | Graph.View3DOptions.Orthogonal := TRUE ; |
||
813 | Graph.View3DOptions.Elevation := 345 ;
|
||
814 | Graph.View3DOptions.Rotation := 345 ;
|
||
815 | Graph.View3DOptions.Perspective := 15 ;
|
||
816 | AjustEchelle (Graph) ; |
||
817 | with BarPerf do |
||
818 | ValueFormat := AjustFormat (AjustPas (MaxYValue - MinYValue) / 10) ;
|
||
819 | end ;
|
||
820 | |||
821 | procedure TFResSimulT.CBPerf1Change (Sender : TObject) ;
|
||
822 | begin
|
||
823 | case CBPerf1.ItemIndex of |
||
824 | 0 : // Affichage dynamique |
||
825 | begin
|
||
826 | CBPerf2D.Visible := TRUE ; |
||
827 | CBPerf2P.Visible := FALSE ; |
||
828 | CBPerf3D.Visible := TRUE ; |
||
829 | CBPerf3P.Visible := FALSE ; |
||
830 | // CBPerf4.Visible := FALSE ;
|
||
831 | end ;
|
||
832 | 1 : // Affichage par p?riode |
||
833 | begin
|
||
834 | CBPerf2D.Visible := FALSE ; |
||
835 | CBPerf2P.Visible := TRUE ; |
||
836 | CBPerf3D.Visible := FALSE ; |
||
837 | CBPerf3P.Visible := TRUE ; |
||
838 | // CBPerf4.Visible := TRUE ;
|
||
839 | end ;
|
||
840 | end ;
|
||
841 | CBPerf3Change (nil) ;
|
||
842 | end ;
|
||
843 | |||
844 | procedure TFResSimulT.CBPerf2Change (Sender : TObject) ;
|
||
845 | begin
|
||
846 | AffGraphPerf ; |
||
847 | end ;
|
||
848 | |||
849 | procedure TFResSimulT.CBPerf3Change (Sender : TObject) ;
|
||
850 | begin
|
||
851 | CBPerf4.Items.Clear ; |
||
852 | case CBPerf1.ItemIndex of |
||
853 | 0 : // Affichage dynamique |
||
854 | case CBPerf3D.ItemIndex of |
||
855 | 0, 2 : // Poids vif (total ou net) |
||
856 | CBPerf4.Items.Add (StrKg) ; |
||
857 | 1, 3 : // Gain de poids (total ou net) |
||
858 | CBPerf4.Items.Add (Format ('%s/%s', [StrG, StrJ])) ;
|
||
859 | 4 : // Aliment consomm? |
||
860 | begin
|
||
861 | CBPerf4.Items.Add (Format ('%s %s/%s', [StrKg, StrAlimentUnit, StrJ])) ;
|
||
862 | CBPerf4.Items.Add (Format ('%s %s/%s', [StrKg, StrMS, StrJ])) ;
|
||
863 | CBPerf4.Items.Add (Format ('%s %s/%s', [StrMJ, StrED, StrJ])) ;
|
||
864 | CBPerf4.Items.Add (Format ('%s %s/%s', [StrMJ, StrEM, StrJ])) ;
|
||
865 | CBPerf4.Items.Add (Format ('%s %s/%s', [StrMJ, StrEN, StrJ])) ;
|
||
866 | end ;
|
||
867 | 5 : // Indice de consommation |
||
868 | begin
|
||
869 | CBPerf4.Items.Add (Format ('%s %s/%s %s', [StrKg, StrAlimentUnit, StrKg, StrGMQUnit])) ;
|
||
870 | CBPerf4.Items.Add (Format ('%s %s/%s %s', [StrKg, StrMS, StrKg, StrGMQUnit])) ;
|
||
871 | CBPerf4.Items.Add (Format ('%s %s/%s %s', [StrMJ, StrED, StrKg, StrGMQUnit])) ;
|
||
872 | CBPerf4.Items.Add (Format ('%s %s/%s %s', [StrMJ, StrEM, StrKg, StrGMQUnit])) ;
|
||
873 | CBPerf4.Items.Add (Format ('%s %s/%s %s', [StrMJ, StrEN, StrKg, StrGMQUnit])) ;
|
||
874 | end ;
|
||
875 | 6 : // Efficacit? alimentaire |
||
876 | begin
|
||
877 | CBPerf4.Items.Add (Format ('%s %s/%s %s', [StrKg, StrGMQUnit, StrKg, StrAlimentUnit])) ;
|
||
878 | CBPerf4.Items.Add (Format ('%s %s/%s %s', [StrKg, StrGMQUnit, StrKg, StrMS])) ;
|
||
879 | CBPerf4.Items.Add (Format ('%s %s/%s %s', [StrKg, StrGMQUnit, StrMJ, StrED])) ;
|
||
880 | CBPerf4.Items.Add (Format ('%s %s/%s %s', [StrKg, StrGMQUnit, StrMJ, StrEM])) ;
|
||
881 | CBPerf4.Items.Add (Format ('%s %s/%s %s', [StrKg, StrGMQUnit, StrMJ, StrEN])) ;
|
||
882 | end ;
|
||
883 | 7, 9 : // Poids de prot?ines ou de lipides |
||
884 | CBPerf4.Items.Add (StrKg) ; |
||
885 | 8, 10 : // D?p?t de prot?ines ou de lipides |
||
886 | CBPerf4.Items.Add (Format ('%s/%s', [StrG, StrJ])) ;
|
||
887 | 11 : // Epaisseur de lard |
||
888 | CBPerf4.Items.Add (StrMm) ; |
||
889 | 12 : // Variation de P2 |
||
890 | CBPerf4.Items.Add (Format ('%s/%s', [StrMm, StrJ])) ;
|
||
891 | 13 : // Production laiti?re |
||
892 | CBPerf4.Items.Add (Format ('%s/%s', [StrKg, StrJ])) ;
|
||
893 | end ;
|
||
894 | 1 : // Affichage par p?riode |
||
895 | case CBPerf3P.ItemIndex of |
||
896 | 0, 1 : // Gain de poids (total ou net) |
||
897 | begin
|
||
898 | CBPerf4.Items.Add (StrKg) ; |
||
899 | CBPerf4.Items.Add (Format ('%s/%s', [StrG, StrJ])) ;
|
||
900 | end ;
|
||
901 | 2 : // Dur?e |
||
902 | CBPerf4.Items.Add (StrJ) ; |
||
903 | 3 : // Aliment consomm? |
||
904 | begin
|
||
905 | CBPerf4.Items.Add (Format ('%s %s', [StrKg, StrAlimentUnit])) ;
|
||
906 | CBPerf4.Items.Add (Format ('%s %s/%s', [StrKg, StrAlimentUnit, StrJ])) ;
|
||
907 | CBPerf4.Items.Add (Format ('%s %s', [StrKg, StrMS])) ;
|
||
908 | CBPerf4.Items.Add (Format ('%s %s/%s', [StrKg, StrMS, StrJ])) ;
|
||
909 | CBPerf4.Items.Add (Format ('%s %s', [StrMJ, StrED])) ;
|
||
910 | CBPerf4.Items.Add (Format ('%s %s/%s', [StrMJ, StrED, StrJ])) ;
|
||
911 | CBPerf4.Items.Add (Format ('%s %s', [StrMJ, StrEM])) ;
|
||
912 | CBPerf4.Items.Add (Format ('%s %s/%s', [StrMJ, StrEM, StrJ])) ;
|
||
913 | CBPerf4.Items.Add (Format ('%s %s', [StrMJ, StrEN])) ;
|
||
914 | CBPerf4.Items.Add (Format ('%s %s/%s', [StrMJ, StrEN, StrJ])) ;
|
||
915 | end ;
|
||
916 | 4 : // Indice de consommation |
||
917 | begin
|
||
918 | CBPerf4.Items.Add (Format ('%s %s/%s %s', [StrKg, StrAlimentUnit, StrKg, StrGMQUnit])) ;
|
||
919 | CBPerf4.Items.Add (Format ('%s %s/%s %s', [StrKg, StrMS, StrKg, StrGMQUnit])) ;
|
||
920 | CBPerf4.Items.Add (Format ('%s %s/%s %s', [StrMJ, StrED, StrKg, StrGMQUnit])) ;
|
||
921 | CBPerf4.Items.Add (Format ('%s %s/%s %s', [StrMJ, StrEM, StrKg, StrGMQUnit])) ;
|
||
922 | CBPerf4.Items.Add (Format ('%s %s/%s %s', [StrMJ, StrEN, StrKg, StrGMQUnit])) ;
|
||
923 | end ;
|
||
924 | 5 : // Efficacit? alimentaire |
||
925 | begin
|
||
926 | CBPerf4.Items.Add (Format ('%s %s/%s %s', [StrKg, StrGMQUnit, StrKg, StrAlimentUnit])) ;
|
||
927 | CBPerf4.Items.Add (Format ('%s %s/%s %s', [StrKg, StrGMQUnit, StrKg, StrMS])) ;
|
||
928 | CBPerf4.Items.Add (Format ('%s %s/%s %s', [StrKg, StrGMQUnit, StrMJ, StrED])) ;
|
||
929 | CBPerf4.Items.Add (Format ('%s %s/%s %s', [StrKg, StrGMQUnit, StrMJ, StrEM])) ;
|
||
930 | CBPerf4.Items.Add (Format ('%s %s/%s %s', [StrKg, StrGMQUnit, StrMJ, StrEN])) ;
|
||
931 | end ;
|
||
932 | 6, 7 : // D?p?t de prot?ines ou de lipides |
||
933 | begin
|
||
934 | CBPerf4.Items.Add (StrKg) ; |
||
935 | CBPerf4.Items.Add (Format ('%s/%s', [StrG, StrJ])) ;
|
||
936 | end ;
|
||
937 | 8 : // Variation de P2 |
||
938 | begin
|
||
939 | CBPerf4.Items.Add (StrMm) ; |
||
940 | CBPerf4.Items.Add (Format ('%s/%s', [StrMm, StrJ])) ;
|
||
941 | end ;
|
||
942 | 9 : // Production laiti?re |
||
943 | begin
|
||
944 | CBPerf4.Items.Add (StrKg) ; |
||
945 | CBPerf4.Items.Add (Format ('%s/%s', [StrKg, StrJ])) ;
|
||
946 | end ;
|
||
947 | end ;
|
||
948 | end ;
|
||
949 | CBPerf4.ItemIndex := 0 ;
|
||
950 | AffGraphPerf ; |
||
951 | end ;
|
||
952 | |||
953 | procedure TFResSimulT.CBPerf4Change (Sender : TObject) ;
|
||
954 | begin
|
||
955 | AffGraphPerf ; |
||
956 | end ;
|
||
957 | |||
958 | //////////////////
|
||
959 | // Aliments //
|
||
960 | //////////////////
|
||
961 | procedure TFResSimulT.InitAli ;
|
||
962 | var
|
||
963 | i, j : integer ; |
||
964 | nom : string ;
|
||
965 | begin
|
||
966 | // ListAli : liste des aliments utilis?s
|
||
967 | ListAli := TStringList.Create ; |
||
968 | for i := 1 to 2 do // 2 aliments |
||
969 | for j := 1 to PResSimulT.NbJSim do |
||
970 | if PResSimulT.TabResult[8 + i, j] > 0 |
||
971 | then
|
||
972 | begin
|
||
973 | nom := FindNomAliment (Trunc (PResSimulT.TabResult[6 + i, j])) ;
|
||
974 | if ListAli.IndexOf (nom) = -1 |
||
975 | then
|
||
976 | ListAli.Add (nom) ; |
||
977 | end ;
|
||
978 | // ListMat : liste des mati?res premi?res utilis?es
|
||
979 | CompositionComplete := TRUE ; |
||
980 | ListMat := TStringList.Create ; |
||
981 | for i := 0 to ListAli.Count - 1 do |
||
982 | begin
|
||
983 | PAliment := ListAliment[FindIdxAliment (ListAli[i])] ; |
||
984 | if PAliment.MP.NbMat > 0 |
||
985 | then
|
||
986 | for j := 0 to PAliment.MP.NbMat - 1 do |
||
987 | begin
|
||
988 | nom := FindNomMatiere (PAliment.MP.NumMat[j]) ; |
||
989 | if ListMat.IndexOf (nom) = -1 |
||
990 | then
|
||
991 | ListMat.Add (nom) ; |
||
992 | end
|
||
993 | else
|
||
994 | CompositionComplete := FALSE ; |
||
995 | end ;
|
||
996 | CBAli5.Visible := ConfAffMP and CompositionComplete ;
|
||
997 | // PieAli : s?rie (camembert) graphique
|
||
998 | PieAli := TPieSeries.Create (Graph) ; |
||
999 | PieAli.ParentChart := Graph ; |
||
1000 | PieAli.SeriesColor := clBlack ; |
||
1001 | PieAli.Circled := TRUE ; |
||
1002 | PieAli.Marks.ArrowLength := 24 ;
|
||
1003 | PieAli.Marks.Arrow.Color := clBlack ; |
||
1004 | PieAli.Marks.Brush.Style := bsClear ; |
||
1005 | PieAli.Marks.Frame.Visible := FALSE ; |
||
1006 | PieAli.OtherSlice.Style := poBelowPercent ; |
||
1007 | PieAli.OtherSlice.Value := 1 ;
|
||
1008 | PieAli.OtherSlice.Text := StrAutres ; |
||
1009 | Graph.AddSeries (PieAli) ; |
||
1010 | // AreaAli : s?ries (aires) graphiques
|
||
1011 | SetLength (AreaAli, ListAli.Count) ; |
||
1012 | for i := 0 to ListAli.Count - 1 do |
||
1013 | begin
|
||
1014 | AreaAli[i] := TAreaSeries.Create (Graph) ; |
||
1015 | AreaAli[i].ParentChart := Graph ; |
||
1016 | AreaAli[i].Title := ListAli[i] ; |
||
1017 | AreaAli[i].AreaLinesPen.Visible := FALSE ; |
||
1018 | Graph.AddSeries (AreaAli[i]) ; |
||
1019 | end ;
|
||
1020 | // BarAli : s?ries (barres) graphiques
|
||
1021 | SetLength (BarAli, ListAli.Count) ; |
||
1022 | for i := 0 to ListAli.Count - 1 do |
||
1023 | begin
|
||
1024 | BarAli[i] := TBarSeries.Create (Graph) ; |
||
1025 | BarAli[i].ParentChart := Graph ; |
||
1026 | BarAli[i].Title := ListAli[i] ; |
||
1027 | BarAli[i].SeriesColor := AreaAli[i].SeriesColor ; |
||
1028 | BarAli[i].BarPen.Color := BarAli[i].SeriesColor ; |
||
1029 | BarAli[i].Marks.Visible := FALSE ; |
||
1030 | Graph.AddSeries (BarAli[i]) ; |
||
1031 | end ;
|
||
1032 | end ;
|
||
1033 | |||
1034 | procedure TFResSimulT.AffGraphAli ;
|
||
1035 | var
|
||
1036 | i, j, k : integer ; |
||
1037 | x, y, t, p : double ; |
||
1038 | s, csv : string ;
|
||
1039 | |||
1040 | // Abscisse
|
||
1041 | function AliX : double ;
|
||
1042 | begin
|
||
1043 | case CBAli1.ItemIndex of |
||
1044 | 1 : // R?partition dynamique |
||
1045 | case CBAli2D.ItemIndex of |
||
1046 | 0 : // Age |
||
1047 | result := PResSimulT.TabResult[1, j] ;
|
||
1048 | 1 : // Dur?e |
||
1049 | result := j - 1 ;
|
||
1050 | else
|
||
1051 | result := 0 ;
|
||
1052 | end ;
|
||
1053 | 2 : // R?partition par p?riode |
||
1054 | case CBAli2P.ItemIndex of |
||
1055 | 0 : // Cycle |
||
1056 | result := PResSimulT.TabResult[2, j] ;
|
||
1057 | 1 : // Stade |
||
1058 | result := PResSimulT.TabResult[3, j] ;
|
||
1059 | else
|
||
1060 | result := 0 ;
|
||
1061 | end ;
|
||
1062 | else
|
||
1063 | result := 0 ;
|
||
1064 | end ;
|
||
1065 | end ;
|
||
1066 | |||
1067 | // Ordonn?e (Aliments)
|
||
1068 | function AliY : double ;
|
||
1069 | var
|
||
1070 | h : integer ; |
||
1071 | v, d : double ; |
||
1072 | begin
|
||
1073 | case CBAli1.ItemIndex of |
||
1074 | 0 : // R?partition globale |
||
1075 | begin
|
||
1076 | v := 0 ;
|
||
1077 | for h := 1 to PResSimulT.NbJSim do |
||
1078 | begin
|
||
1079 | // Aliment 1
|
||
1080 | if (PResSimulT.TabResult[7, h] <> -1) and (FindNomAliment (Trunc (PResSimulT.TabResult[7, h])) = ListAli[i]) |
||
1081 | then
|
||
1082 | v := v + (PResSimulT.TabResult[11, h] * PResSimulT.TabResult[9, h] / 100) ; |
||
1083 | // Aliment 2
|
||
1084 | if (PResSimulT.TabResult[8, h] <> -1) and (FindNomAliment (Trunc (PResSimulT.TabResult[8, h])) = ListAli[i]) |
||
1085 | then
|
||
1086 | v := v + (PResSimulT.TabResult[11, h] * PResSimulT.TabResult[10, h] / 100) ; |
||
1087 | end ;
|
||
1088 | if CBAli3.ItemIndex = 1 |
||
1089 | then // Co?t |
||
1090 | begin
|
||
1091 | PAliment := ListAliment[FindIdxAliment (ListAli[i])] ; |
||
1092 | v := v * PAliment.Prix / 1000 ;
|
||
1093 | end ;
|
||
1094 | result := v ; |
||
1095 | end ;
|
||
1096 | 1 : // R?partition dynamique |
||
1097 | begin
|
||
1098 | // Diviseur
|
||
1099 | case CBAli3.ItemIndex of |
||
1100 | 1 : // Co?t |
||
1101 | case CBAli4.ItemIndex of |
||
1102 | 1 : // Aliment ing?r? |
||
1103 | d := PResSimulT.TabResult[11, j] ;
|
||
1104 | else
|
||
1105 | d := 1 ;
|
||
1106 | end ;
|
||
1107 | else
|
||
1108 | d := 1 ;
|
||
1109 | end ;
|
||
1110 | v := 0 ;
|
||
1111 | // Aliment 1
|
||
1112 | if (PResSimulT.TabResult[7, j] <> -1) and (FindNomAliment (Trunc (PResSimulT.TabResult[7, j])) = ListAli[i]) |
||
1113 | then
|
||
1114 | v := v + (PResSimulT.TabResult[11, j] * PResSimulT.TabResult[9, j] / 100) ; |
||
1115 | // Aliment 2
|
||
1116 | if (PResSimulT.TabResult[8, j] <> -1) and (FindNomAliment (Trunc (PResSimulT.TabResult[8, j])) = ListAli[i]) |
||
1117 | then
|
||
1118 | v := v + (PResSimulT.TabResult[11, j] * PResSimulT.TabResult[10, j] / 100) ; |
||
1119 | if CBAli3.ItemIndex = 1 |
||
1120 | then // Co?t |
||
1121 | begin
|
||
1122 | PAliment := ListAliment[FindIdxAliment (ListAli[i])] ; |
||
1123 | v := v * PAliment.Prix / 1000 ;
|
||
1124 | end ;
|
||
1125 | result := v / d ; |
||
1126 | end ;
|
||
1127 | 2 : // R?partition par p?riode |
||
1128 | begin
|
||
1129 | // Diviseur
|
||
1130 | case CBAli3.ItemIndex of |
||
1131 | 0 : // Quantit? |
||
1132 | case CBAli4.ItemIndex of |
||
1133 | 1 : // Dur?e |
||
1134 | d := j - k ; |
||
1135 | else
|
||
1136 | d := 1 ;
|
||
1137 | end ;
|
||
1138 | 1 : // Co?t |
||
1139 | case CBAli4.ItemIndex of |
||
1140 | 1 : // Dur?e |
||
1141 | d := j - k ; |
||
1142 | 2 : // Aliment ing?r? |
||
1143 | begin
|
||
1144 | d := 0 ;
|
||
1145 | for h := k to j - 1 do |
||
1146 | d := d + PResSimulT.TabResult[11, h] ;
|
||
1147 | end ;
|
||
1148 | else
|
||
1149 | d := 1 ;
|
||
1150 | end ;
|
||
1151 | else
|
||
1152 | d := 1 ;
|
||
1153 | end ;
|
||
1154 | v := 0 ;
|
||
1155 | for h := k to j - 1 do |
||
1156 | begin
|
||
1157 | // Aliment 1
|
||
1158 | if (PResSimulT.TabResult[7, h] <> -1) and (FindNomAliment (Trunc (PResSimulT.TabResult[7, h])) = ListAli[i]) |
||
1159 | then
|
||
1160 | v := v + (PResSimulT.TabResult[11, h] * PResSimulT.TabResult[9, h] / 100) ; |
||
1161 | // Aliment 2
|
||
1162 | if (PResSimulT.TabResult[8, h] <> -1) and (FindNomAliment (Trunc (PResSimulT.TabResult[8, h])) = ListAli[i]) |
||
1163 | then
|
||
1164 | v := v + (PResSimulT.TabResult[11, h] * PResSimulT.TabResult[10, h] / 100) ; |
||
1165 | end ;
|
||
1166 | if CBAli3.ItemIndex = 1 |
||
1167 | then // Co?t |
||
1168 | begin
|
||
1169 | PAliment := ListAliment[FindIdxAliment (ListAli[i])] ; |
||
1170 | v := v * PAliment.Prix / 1000 ;
|
||
1171 | end ;
|
||
1172 | result := v / d ; |
||
1173 | end ;
|
||
1174 | else
|
||
1175 | result := 0 ;
|
||
1176 | end ;
|
||
1177 | end ;
|
||
1178 | |||
1179 | // Ordonn?es (Mati?res premi?res)
|
||
1180 | function MatY : double ;
|
||
1181 | var
|
||
1182 | g, h : integer ; |
||
1183 | v : double ; |
||
1184 | begin
|
||
1185 | v := 0 ;
|
||
1186 | for h := 1 to PResSimulT.NbJSim do |
||
1187 | begin
|
||
1188 | if PResSimulT.TabResult[7, h] <> -1 |
||
1189 | then // Aliment 1 |
||
1190 | begin
|
||
1191 | PAliment := ListAliment[FindIdxAliment (FindNomAliment (Trunc (PResSimulT.TabResult[7, h])))] ;
|
||
1192 | for g := 0 to PAliment.MP.NbMat - 1 do |
||
1193 | if FindNomMatiere (PAliment.MP.NumMat[g]) = ListMat[i]
|
||
1194 | then
|
||
1195 | v := v + (PAliment.MP.Qte[g] * PResSimulT.TabResult[11, h] * PResSimulT.TabResult[9, h] / 100) ; |
||
1196 | end ;
|
||
1197 | if PResSimulT.TabResult[8, h] <> -1 |
||
1198 | then // Aliment 2 |
||
1199 | begin
|
||
1200 | PAliment := ListAliment[FindIdxAliment (FindNomAliment (Trunc (PResSimulT.TabResult[8, h])))] ;
|
||
1201 | for g := 0 to PAliment.MP.NbMat - 1 do |
||
1202 | if FindNomMatiere (PAliment.MP.NumMat[g]) = ListMat[i]
|
||
1203 | then
|
||
1204 | v := v + (PAliment.MP.Qte[g] * PResSimulT.TabResult[11, h] * PResSimulT.TabResult[10, h] / 100) ; |
||
1205 | end ;
|
||
1206 | end ;
|
||
1207 | result := v / 1000 ; // Conversion g -> kg |
||
1208 | end ;
|
||
1209 | |||
1210 | // AffGraphAli
|
||
1211 | begin
|
||
1212 | ResetGraph ; |
||
1213 | Graph.Title.Text.Add (Format ('%s : %s', [CBAli5.Text, CBAli1.Text])) ;
|
||
1214 | Graph.LeftAxis.Title.Caption := Format ('%s (%s)', [CBAli3.Text, CBAli4.Text]) ;
|
||
1215 | case CBAli1.ItemIndex of |
||
1216 | 0 : // R?partition globale |
||
1217 | begin
|
||
1218 | // Graph.View3D := TRUE ;
|
||
1219 | Graph.Legend.Visible := FALSE ; |
||
1220 | csv := '';
|
||
1221 | for i := 0 to ListAli.Count - 1 do |
||
1222 | csv := csv + Format ('%s (%s)', [ListAli[i], CBAli4.Text]) + ';'; |
||
1223 | MExport.Lines.Append(csv); |
||
1224 | // Affichage du camembert
|
||
1225 | PieAli.Active := TRUE ; |
||
1226 | PieAli.Clear ; |
||
1227 | if CBAli4.ItemIndex = 1 |
||
1228 | then
|
||
1229 | PieAli.Marks.Style := smsLabelPercent |
||
1230 | else
|
||
1231 | PieAli.Marks.Style := smsLabelValue ; |
||
1232 | t := 0 ;
|
||
1233 | csv := '';
|
||
1234 | if CBAli5.ItemIndex = 1 |
||
1235 | then // Mati?res premi?res |
||
1236 | for i := 0 to ListMat.Count - 1 do |
||
1237 | begin
|
||
1238 | y := MatY ; |
||
1239 | PieAli.AddPie (y, ListMat[i], clTeeColor) ; |
||
1240 | t := t + y ; |
||
1241 | csv := csv + FloatToStrF(y, ffFixed, 15, 15) + ';'; |
||
1242 | end
|
||
1243 | else // Aliments |
||
1244 | for i := 0 to ListAli.Count - 1 do |
||
1245 | begin
|
||
1246 | y := AliY ; |
||
1247 | PieAli.AddPie (y, ListAli[i], AreaAli[i].SeriesColor) ; |
||
1248 | t := t + y ; |
||
1249 | csv := csv + FloatToStrF(y, ffFixed, 15, 15) + ';'; |
||
1250 | end ;
|
||
1251 | Graph.SubTitle.Text.Add (Format ('%s : %1.0f %s', [StrTotal, t, CBAli4.Items[0]])) ; |
||
1252 | MExport.Lines.Append(csv); |
||
1253 | end ;
|
||
1254 | 1 : // R?partition dynamique |
||
1255 | begin
|
||
1256 | Graph.BottomAxis.Title.Caption := CBAli2D.Text ; |
||
1257 | csv := CBAli2D.Text; |
||
1258 | for i := 0 to ListAli.Count - 1 do |
||
1259 | csv := csv + ';' + Format ('%s (%s)', [ListAli[i], CBAli4.Text]); |
||
1260 | MExport.Lines.Append(csv); |
||
1261 | // Affichage des aires
|
||
1262 | for i := 0 to ListAli.Count - 1 do |
||
1263 | AreaAli[i].Active := TRUE ; |
||
1264 | for i := 0 to ListAli.Count - 1 do |
||
1265 | AreaAli[i].Clear ; |
||
1266 | if (CBAli4.ItemIndex = 1) and (CBAli3.ItemIndex = 0) |
||
1267 | then
|
||
1268 | for i := 0 to ListAli.Count - 1 do |
||
1269 | AreaAli[i].MultiArea := maStacked100 |
||
1270 | else
|
||
1271 | for i := 0 to ListAli.Count - 1 do |
||
1272 | AreaAli[i].MultiArea := maStacked ; |
||
1273 | for j := 1 to PResSimulT.NbJSim do |
||
1274 | begin
|
||
1275 | csv := FloatToStrF(AliX, ffFixed, 15, 15); |
||
1276 | for i := 0 to ListAli.Count - 1 do |
||
1277 | begin
|
||
1278 | AreaAli[i].AddXY (AliX, AliY, '', clTeeColor) ;
|
||
1279 | csv := csv + ';' + FloatToStrF(AliY, ffFixed, 15, 15); |
||
1280 | end;
|
||
1281 | MExport.Lines.Append(csv); |
||
1282 | end;
|
||
1283 | end ;
|
||
1284 | 2 : // R?partition par p?riode |
||
1285 | begin
|
||
1286 | Graph.BottomAxis.Title.Caption := CBAli2P.Text ; |
||
1287 | csv := CBAli2P.Text; |
||
1288 | for i := 0 to ListAli.Count - 1 do |
||
1289 | csv := csv + ';' + Format ('%s (%s)', [ListAli[i], CBAli4.Text]); |
||
1290 | MExport.Lines.Append(csv); |
||
1291 | // Affichage des barres
|
||
1292 | for i := 0 to ListAli.Count - 1 do |
||
1293 | BarAli[i].Active := TRUE ; |
||
1294 | for i := 0 to ListAli.Count - 1 do |
||
1295 | BarAli[i].Clear ; |
||
1296 | if (CBAli4.ItemIndex = 2) and (CBAli3.ItemIndex = 0) |
||
1297 | then
|
||
1298 | for i := 0 to ListAli.Count - 1 do |
||
1299 | BarAli[i].MultiBar := mbStacked100 |
||
1300 | else
|
||
1301 | for i := 0 to ListAli.Count - 1 do |
||
1302 | BarAli[i].MultiBar := mbStacked ; |
||
1303 | j := 1 ;
|
||
1304 | x := AliX ; |
||
1305 | k := 1 ;
|
||
1306 | if PResSimulT.NbJSim > 1 |
||
1307 | then
|
||
1308 | for j := 2 to PResSimulT.NbJSim do |
||
1309 | begin
|
||
1310 | p := AliX ; |
||
1311 | if x <> p
|
||
1312 | then
|
||
1313 | begin
|
||
1314 | // Changement de p?riode
|
||
1315 | if CBAli2P.ItemIndex = 1 |
||
1316 | then // Stade |
||
1317 | case Trunc (x) of |
||
1318 | 0 : s := StrGestation ;
|
||
1319 | 1 : s := StrLactation ;
|
||
1320 | 2 : s := StrISSF ;
|
||
1321 | end
|
||
1322 | else
|
||
1323 | s := Format ('%1.0f', [x]) ;
|
||
1324 | csv := s; |
||
1325 | for i := 0 to ListAli.Count - 1 do |
||
1326 | begin
|
||
1327 | y := AliY ; |
||
1328 | if y > 0 |
||
1329 | then
|
||
1330 | BarAli[i].AddBar (y, s, clTeeColor) |
||
1331 | else
|
||
1332 | BarAli[i].AddNull (s) ; |
||
1333 | csv := csv + ';' + FloatToStrF(y, ffFixed, 15, 15); |
||
1334 | end ;
|
||
1335 | MExport.Lines.Append(csv); |
||
1336 | x := p ; |
||
1337 | k := j ; |
||
1338 | end ;
|
||
1339 | end ;
|
||
1340 | j := PResSimulT.NbJSim + 1 ;
|
||
1341 | if CBAli2P.ItemIndex = 2 |
||
1342 | then // Globale |
||
1343 | s := ' '
|
||
1344 | else
|
||
1345 | if CBAli2P.ItemIndex = 1 |
||
1346 | then // Stade |
||
1347 | case Trunc (x) of |
||
1348 | 0 : s := StrGestation ;
|
||
1349 | 1 : s := StrLactation ;
|
||
1350 | 2 : s := StrISSF ;
|
||
1351 | end
|
||
1352 | else
|
||
1353 | s := Format ('%1.0f', [x]) ;
|
||
1354 | csv := s; |
||
1355 | for i := 0 to ListAli.Count - 1 do |
||
1356 | begin
|
||
1357 | y := AliY ; |
||
1358 | if y > 0 |
||
1359 | then
|
||
1360 | BarAli[i].AddBar (y, s, clTeeColor) |
||
1361 | else
|
||
1362 | BarAli[i].AddNull (s) ; |
||
1363 | csv := csv + ';' + FloatToStrF(y, ffFixed, 15, 15); |
||
1364 | end ;
|
||
1365 | MExport.Lines.Append(csv); |
||
1366 | end ;
|
||
1367 | end ;
|
||
1368 | if PieAli.Active
|
||
1369 | then
|
||
1370 | begin
|
||
1371 | Graph.View3DOptions.Orthogonal := FALSE ; |
||
1372 | Graph.View3DOptions.Elevation := 315 ;
|
||
1373 | Graph.View3DOptions.Rotation := 360 ;
|
||
1374 | Graph.View3DOptions.Perspective := 0 ;
|
||
1375 | end
|
||
1376 | else
|
||
1377 | begin
|
||
1378 | Graph.View3DOptions.Orthogonal := TRUE ; |
||
1379 | Graph.View3DOptions.Elevation := 345 ;
|
||
1380 | Graph.View3DOptions.Rotation := 345 ;
|
||
1381 | Graph.View3DOptions.Perspective := 15 ;
|
||
1382 | end ;
|
||
1383 | AjustEchelle (Graph) ; |
||
1384 | PieAli.PercentFormat := Format ('%s %s', [AjustFormat (0.1), CBAli4.Text]) ; |
||
1385 | PieAli.ValueFormat := Format ('%s %s', [AjustFormat (0.1), CBAli4.Text]) ; |
||
1386 | PieAli.PercentFormat := Format ('%s %s', [AjustFormat (1), CBAli4.Text]) ; |
||
1387 | PieAli.ValueFormat := Format ('%s %s', [AjustFormat (1), CBAli4.Text]) ; |
||
1388 | end ;
|
||
1389 | |||
1390 | procedure TFResSimulT.CBAli1Change (Sender : TObject) ;
|
||
1391 | begin
|
||
1392 | case CBAli1.ItemIndex of |
||
1393 | 0 : // R?partition globale |
||
1394 | begin
|
||
1395 | CBAli2D.Visible := FALSE ; |
||
1396 | CBAli2P.Visible := FALSE ; |
||
1397 | CBAli5.Visible := ConfAffMP and CompositionComplete ;
|
||
1398 | end ;
|
||
1399 | 1 : // R?partition dynamique |
||
1400 | begin
|
||
1401 | CBAli2D.Visible := TRUE ; |
||
1402 | CBAli2P.Visible := FALSE ; |
||
1403 | CBAli3.Enabled := TRUE ; |
||
1404 | CBAli5.ItemIndex := 0 ; // Aliments |
||
1405 | CBAli5.Visible := FALSE ; |
||
1406 | end ;
|
||
1407 | 2 : // R?partition par p?riode |
||
1408 | begin
|
||
1409 | CBAli2D.Visible := FALSE ; |
||
1410 | CBAli2P.Visible := TRUE ; |
||
1411 | CBAli3.Enabled := TRUE ; |
||
1412 | CBAli5.ItemIndex := 0 ; // Aliments |
||
1413 | CBAli5.Visible := FALSE ; |
||
1414 | end ;
|
||
1415 | end ;
|
||
1416 | CBAli3Change (nil) ;
|
||
1417 | end ;
|
||
1418 | |||
1419 | procedure TFResSimulT.CBAli2Change (Sender : TObject) ;
|
||
1420 | begin
|
||
1421 | AffGraphAli ; |
||
1422 | end ;
|
||
1423 | |||
1424 | procedure TFResSimulT.CBAli3Change(Sender: TObject);
|
||
1425 | begin
|
||
1426 | CBAli4.Items.Clear ; |
||
1427 | case CBAli1.ItemIndex of |
||
1428 | 0 : // R?partition globale |
||
1429 | case CBAli3.ItemIndex of |
||
1430 | 0 : // Quantit? |
||
1431 | begin
|
||
1432 | CBAli4.Items.Add (StrKg) ; |
||
1433 | CBAli4.Items.Add ('%') ;
|
||
1434 | end ;
|
||
1435 | 1 : // Co?t |
||
1436 | begin
|
||
1437 | CBAli4.Items.Add (CurrencySign) ; |
||
1438 | CBAli4.Items.Add ('%') ;
|
||
1439 | end ;
|
||
1440 | end ;
|
||
1441 | 1 : // R?partition dynamique |
||
1442 | case CBAli3.ItemIndex of |
||
1443 | 0 : // Quantit? |
||
1444 | begin
|
||
1445 | CBAli4.Items.Add (Format ('%s/%s', [StrKg, StrJ])) ;
|
||
1446 | CBAli4.Items.Add ('%') ;
|
||
1447 | end ;
|
||
1448 | 1 : // Co?t |
||
1449 | begin
|
||
1450 | CBAli4.Items.Add (Format ('%s/%s', [CurrencySign, StrJ])) ;
|
||
1451 | CBAli4.Items.Add (Format ('%s/%s %s', [CurrencySign, StrKg, StrAlimentUnit])) ;
|
||
1452 | end ;
|
||
1453 | end ;
|
||
1454 | 2 : // R?partition par p?riode |
||
1455 | case CBAli3.ItemIndex of |
||
1456 | 0 : // Quantit? |
||
1457 | begin
|
||
1458 | CBAli4.Items.Add (StrKg) ; |
||
1459 | CBAli4.Items.Add (Format ('%s/%s', [StrKg, StrJ])) ;
|
||
1460 | CBAli4.Items.Add ('%') ;
|
||
1461 | end ;
|
||
1462 | 1 : // Co?t |
||
1463 | begin
|
||
1464 | CBAli4.Items.Add (CurrencySign) ; |
||
1465 | CBAli4.Items.Add (Format ('%s/%s', [CurrencySign, StrJ])) ;
|
||
1466 | CBAli4.Items.Add (Format ('%s/%s %s', [CurrencySign, StrKg, StrAlimentUnit])) ;
|
||
1467 | end ;
|
||
1468 | end ;
|
||
1469 | end ;
|
||
1470 | CBAli4.ItemIndex := 0 ;
|
||
1471 | AffGraphAli ; |
||
1472 | end;
|
||
1473 | |||
1474 | procedure TFResSimulT.CBAli4Change (Sender : TObject) ;
|
||
1475 | begin
|
||
1476 | AffGraphAli ; |
||
1477 | end ;
|
||
1478 | |||
1479 | procedure TFResSimulT.CBAli5Change(Sender: TObject);
|
||
1480 | begin
|
||
1481 | CBAli3.Enabled := CBAli5.ItemIndex = 0 ; // Aliments |
||
1482 | if (CBAli5.ItemIndex = 1) and (CBAli3.ItemIndex <> 0) |
||
1483 | then // Mati?res premi?res => Quantit? |
||
1484 | begin
|
||
1485 | CBAli3.ItemIndex := 0 ;
|
||
1486 | CBAli4.Items.Clear ; |
||
1487 | CBAli4.Items.Add (StrKg) ; |
||
1488 | CBAli4.Items.Add ('%') ;
|
||
1489 | CBAli4.ItemIndex := 0 ;
|
||
1490 | end ;
|
||
1491 | AffGraphAli ; |
||
1492 | end;
|
||
1493 | |||
1494 | ////////////////////////////
|
||
1495 | // D?p?t de prot?ines //
|
||
1496 | ////////////////////////////
|
||
1497 | procedure TFResSimulT.InitPD ;
|
||
1498 | const
|
||
1499 | TabColor : array[0..14] of TColor = (clRed, clGreen, clYellow, clBlue, |
||
1500 | clFuchsia, clTeal, clNavy, clLime, clMaroon, clOlive, clPurple, clAqua, |
||
1501 | clMoneyGreen, clSkyBlue, clCream) ; |
||
1502 | type
|
||
1503 | TRecTriPD = record
|
||
1504 | Idx : integer ; |
||
1505 | Min : double ; |
||
1506 | Moy : double ; |
||
1507 | end ;
|
||
1508 | var
|
||
1509 | i, j : integer ; |
||
1510 | PD, PDAA : double ; |
||
1511 | TabTriPD : array of TRecTriPD ; |
||
1512 | TabTemp : array of double ; |
||
1513 | RecTemp : TRecTriPD ; |
||
1514 | begin
|
||
1515 | // ListPD : liste pour le d?p?t de prot?ines
|
||
1516 | ListPD := TStringList.Create ; |
||
1517 | ListPD.Assign (LBPD.Items) ; |
||
1518 | // Initialisation du tableau
|
||
1519 | SetLength (TabTriPD, ListPD.Count) ; |
||
1520 | SetLength (TabTemp, PResSimulT.NbJSim) ; |
||
1521 | for i := 0 to ListPD.Count - 1 do |
||
1522 | begin
|
||
1523 | TabTriPD[i].Idx := i ; |
||
1524 | for j := 1 to PResSimulT.NbJSim do |
||
1525 | begin
|
||
1526 | if PresSimulT.TabResult[3, j] = 1 |
||
1527 | then // Lactation |
||
1528 | PD := PResSimulT.TabResult[69, j] / 6.38 * 50 * 6.25 |
||
1529 | else
|
||
1530 | PD := PResSimulT.TabResult[64, j] ;
|
||
1531 | case i of |
||
1532 | 0 : // Energie |
||
1533 | PDAA := PResSimulT.TabResult[40, j] ;
|
||
1534 | 1 : // Lysine |
||
1535 | PDAA := PResSimulT.TabResult[42, j] ;
|
||
1536 | 2 : // Thr?onine |
||
1537 | PDAA := PResSimulT.TabResult[46, j] ;
|
||
1538 | 3 : // Tryptophane |
||
1539 | PDAA := PResSimulT.TabResult[45, j] ;
|
||
1540 | 4 : // M?thionine |
||
1541 | PDAA := PResSimulT.TabResult[43, j] ;
|
||
1542 | 5 : // M?thionine+Cystine |
||
1543 | PDAA := PResSimulT.TabResult[54, j] ;
|
||
1544 | 6 : // Valine |
||
1545 | PDAA := PResSimulT.TabResult[51, j] ;
|
||
1546 | 7 : // Isoleucine |
||
1547 | PDAA := PResSimulT.TabResult[50, j] ;
|
||
1548 | 8 : // Leucine |
||
1549 | PDAA := PResSimulT.TabResult[49, j] ;
|
||
1550 | 9 : // Ph?nylalanine |
||
1551 | PDAA := PResSimulT.TabResult[47, j] ;
|
||
1552 | 10 : // Ph?nylalanine+Tyrosine |
||
1553 | PDAA := PResSimulT.TabResult[55, j] ;
|
||
1554 | 11 : // Arginine |
||
1555 | PDAA := PResSimulT.TabResult[53, j] ;
|
||
1556 | 12 : // Histidine |
||
1557 | PDAA := PResSimulT.TabResult[52, j] ;
|
||
1558 | 13 : // MAT |
||
1559 | PDAA := PResSimulT.TabResult[41, j] ;
|
||
1560 | else
|
||
1561 | PDAA := 0 ;
|
||
1562 | end ;
|
||
1563 | if (PD = 0) or (PDAA = 0) |
||
1564 | then
|
||
1565 | TabTemp[j - 1] := INFINI
|
||
1566 | else
|
||
1567 | TabTemp[j - 1] := PDAA / PD ;
|
||
1568 | end ;
|
||
1569 | TabTriPD[i].Min := MinValue (TabTemp) ; |
||
1570 | TabTriPD[i].Moy := Mean (TabTemp) ; |
||
1571 | end ;
|
||
1572 | // D?termination du nombre de facteurs limitants
|
||
1573 | NbLimit := 0 ;
|
||
1574 | for i := 0 to ListPD.Count - 1 do |
||
1575 | if TabTriPD[i].Min - 1 < PICO then Inc (NbLimit) ; |
||
1576 | // Tri du tableau (tri ? bulle) sur Min et Moy
|
||
1577 | for i := ListPD.Count - 1 downto 1 do |
||
1578 | for j := 0 to i - 1 do |
||
1579 | if (TabTriPD[j].Min > TabTriPD[j + 1].Min) |
||
1580 | or ((TabTriPD[j].Min = TabTriPD[j + 1].Min) |
||
1581 | and (TabTriPD[j].Moy > TabTriPD[j + 1].Moy)) |
||
1582 | then
|
||
1583 | begin
|
||
1584 | RecTemp.Idx := TabTriPD[j].Idx ; |
||
1585 | RecTemp.Min := TabTriPD[j].Min ; |
||
1586 | RecTemp.Moy := TabTriPD[j].Moy ; |
||
1587 | TabTriPD[j].Idx := TabTriPD[j + 1].Idx ;
|
||
1588 | TabTriPD[j].Min := TabTriPD[j + 1].Min ;
|
||
1589 | TabTriPD[j].Moy := TabTriPD[j + 1].Moy ;
|
||
1590 | TabTriPD[j + 1].Idx := RecTemp.Idx ;
|
||
1591 | TabTriPD[j + 1].Min := RecTemp.Min ;
|
||
1592 | TabTriPD[j + 1].Moy := RecTemp.Moy ;
|
||
1593 | end ;
|
||
1594 | // Construction de la liste tri?e
|
||
1595 | LBPD.Items.Clear ; |
||
1596 | for i := 0 to ListPD.Count - 1 do |
||
1597 | LBPD.Items.Add (ListPD[TabTriPD[i].Idx]) ; |
||
1598 | // LinePD : s?ries (lignes) graphiques
|
||
1599 | SetLength (LinePD, ListPD.Count + 1) ;
|
||
1600 | // D?p?t de prot?ines
|
||
1601 | LinePD[ListPD.Count] := TLineSeries.Create (Graph) ; |
||
1602 | LinePD[ListPD.Count].ParentChart := Graph ; |
||
1603 | LinePD[ListPD.Count].Title := TabPD.Caption ; |
||
1604 | LinePD[ListPD.Count].SeriesColor := clBlack ; |
||
1605 | LinePD[ListPD.Count].LinePen.Color := LinePD[ListPD.Count].SeriesColor ; |
||
1606 | LinePD[ListPD.Count].LinePen.Width := 2 ;
|
||
1607 | Graph.AddSeries (LinePD[ListPD.Count]) ; |
||
1608 | // Facteurs potentiellement limitants
|
||
1609 | for i := 0 to ListPD.Count - 1 do |
||
1610 | begin
|
||
1611 | LinePD[i] := TLineSeries.Create (Graph) ; |
||
1612 | LinePD[i].ParentChart := Graph ; |
||
1613 | LinePD[i].Title := ListPD[i] ; |
||
1614 | LinePD[i].SeriesColor := TabColor[LBPD.Items.IndexOf (ListPD[i])] ; |
||
1615 | LinePD[i].LinePen.Color := LinePD[i].SeriesColor ; |
||
1616 | LinePD[i].LinePen.Width := 2 ;
|
||
1617 | Graph.AddSeries (LinePD[i]) ; |
||
1618 | end ;
|
||
1619 | {
|
||
1620 | // S?lection des facteurs effectivement limitants
|
||
1621 | for i := 0 to NbLimit - 1 do
|
||
1622 | LBPD.Selected[i] := TRUE ;
|
||
1623 | }
|
||
1624 | end ;
|
||
1625 | |||
1626 | procedure TFResSimulT.AffGraphPD ;
|
||
1627 | var
|
||
1628 | i, j : integer ; |
||
1629 | csv : string ;
|
||
1630 | |||
1631 | // Abscisse
|
||
1632 | function PDX : double ;
|
||
1633 | begin
|
||
1634 | case CBPD2.ItemIndex of |
||
1635 | 0 : // Age |
||
1636 | result := PResSimulT.TabResult[1, j] ;
|
||
1637 | 1 : // Dur?e |
||
1638 | result := j - 1 ;
|
||
1639 | else
|
||
1640 | result := 0 ;
|
||
1641 | end ;
|
||
1642 | end ;
|
||
1643 | |||
1644 | // Ordonn?e
|
||
1645 | function PDY : double ;
|
||
1646 | begin
|
||
1647 | case i of |
||
1648 | 0 : // Energie |
||
1649 | result := PResSimulT.TabResult[40, j] ;
|
||
1650 | 1 : // Lysine |
||
1651 | result := PResSimulT.TabResult[42, j] ;
|
||
1652 | 2 : // Thr?onine |
||
1653 | result := PResSimulT.TabResult[46, j] ;
|
||
1654 | 3 : // Tryptophane |
||
1655 | result := PResSimulT.TabResult[45, j] ;
|
||
1656 | 4 : // M?thionine |
||
1657 | result := PResSimulT.TabResult[43, j] ;
|
||
1658 | 5 : // M?thionine+Cystine |
||
1659 | result := PResSimulT.TabResult[54, j] ;
|
||
1660 | 6 : // Valine |
||
1661 | result := PResSimulT.TabResult[51, j] ;
|
||
1662 | 7 : // Isoleucine |
||
1663 | result := PResSimulT.TabResult[50, j] ;
|
||
1664 | 8 : // Leucine |
||
1665 | result := PResSimulT.TabResult[49, j] ;
|
||
1666 | 9 : // Ph?nylalanine |
||
1667 | result := PResSimulT.TabResult[47, j] ;
|
||
1668 | 10 : // Ph?nylalanine+Tyrosine |
||
1669 | result := PResSimulT.TabResult[55, j] ;
|
||
1670 | 11 : // Arginine |
||
1671 | result := PResSimulT.TabResult[53, j] ;
|
||
1672 | 12 : // Histidine |
||
1673 | result := PResSimulT.TabResult[52, j] ;
|
||
1674 | 13 : // MAT |
||
1675 | result := PResSimulT.TabResult[41, j] ;
|
||
1676 | 14 : // D?p?t de prot?ines |
||
1677 | if PresSimulT.TabResult[3, j] = 1 |
||
1678 | then // Lactation |
||
1679 | result := PResSimulT.TabResult[40, j]
|
||
1680 | else
|
||
1681 | result := PResSimulT.TabResult[64, j] ;
|
||
1682 | else
|
||
1683 | result := 0 ;
|
||
1684 | end ;
|
||
1685 | end ;
|
||
1686 | |||
1687 | // AffGraphPD
|
||
1688 | begin
|
||
1689 | ResetGraph ; |
||
1690 | Graph.Legend.Visible := FALSE ; |
||
1691 | Graph.Title.Text.Add (TabPD.Caption) ; |
||
1692 | Graph.LeftAxis.Title.Caption := Format ('%s (%s/%s)', [TabPD.Caption, StrG, StrJ]) ;
|
||
1693 | Graph.BottomAxis.Title.Caption := CBPD2.Text ; |
||
1694 | csv := CBPD2.Text; |
||
1695 | for i := 0 to ListPD.Count - 1 do |
||
1696 | csv := csv + ';' + Format ('%s (%s %s/%s)', [ListPD[i], StrG, StrPD, StrJ]); |
||
1697 | csv := csv + ';' + StrMinimum;
|
||
1698 | MExport.Lines.Append(csv); |
||
1699 | // Affichage des lignes
|
||
1700 | for i := 0 to ListPD.Count do |
||
1701 | LinePD[i].Active := TRUE ; |
||
1702 | for i := 0 to ListPD.Count do |
||
1703 | LinePD[i].Clear ; |
||
1704 | for j := 1 to PResSimulT.NbJSim do |
||
1705 | begin
|
||
1706 | csv := FloatToStrF(PDX, ffFixed, 15, 15); |
||
1707 | for i := 0 to ListPD.Count - 1 do |
||
1708 | begin
|
||
1709 | if LBPD.Selected[LBPD.Items.IndexOf (ListPD[i])]
|
||
1710 | then
|
||
1711 | LinePD[i].AddXY (PDX, PDY) ; |
||
1712 | csv := csv + ';' + FloatToStrF(PDY, ffFixed, 15, 15); |
||
1713 | end ;
|
||
1714 | i := ListPD.Count ; |
||
1715 | LinePD[i].AddXY (PDX, PDY) ; |
||
1716 | csv := csv + ';' + FloatToStrF(PDY, ffFixed, 15, 15); |
||
1717 | MExport.Lines.Append(csv); |
||
1718 | end ;
|
||
1719 | Graph.View3DOptions.Orthogonal := TRUE ; |
||
1720 | Graph.View3DOptions.Elevation := 345 ;
|
||
1721 | Graph.View3DOptions.Rotation := 345 ;
|
||
1722 | Graph.View3DOptions.Perspective := 15 ;
|
||
1723 | AjustEchelle (Graph) ; |
||
1724 | end ;
|
||
1725 | |||
1726 | procedure TFResSimulT.CBPD2Change (Sender : TObject) ;
|
||
1727 | begin
|
||
1728 | AffGraphPD ; |
||
1729 | end ;
|
||
1730 | |||
1731 | procedure TFResSimulT.LBPDClick (Sender : TObject) ;
|
||
1732 | begin
|
||
1733 | AffGraphPD ; |
||
1734 | end ;
|
||
1735 | |||
1736 | procedure TFResSimulT.LBPDDrawItem (Control : TWinControl ; Index : Integer ;
|
||
1737 | Rect : TRect ; State : TOwnerDrawState) ; |
||
1738 | begin
|
||
1739 | with (Control as TListBox).Canvas do |
||
1740 | begin
|
||
1741 | // Cadre principal
|
||
1742 | FillRect (Rect) ; |
||
1743 | // Etoile
|
||
1744 | SetTextAlign (Handle, TA_RIGHT) ; |
||
1745 | if Index < NbLimit
|
||
1746 | then // Facteur limitant |
||
1747 | TextRect (Rect, Rect.Right - 4, Rect.Top, '*') ; |
||
1748 | Rect.Right := Rect.Right - 16 ;
|
||
1749 | // Texte
|
||
1750 | SetTextAlign (Handle, TA_LEFT) ; |
||
1751 | TextRect (Rect, Rect.Left + 32, Rect.Top, LBPD.Items[Index]) ;
|
||
1752 | Rect.Right := 32 ;
|
||
1753 | // Num?ro
|
||
1754 | SetTextAlign (Handle, TA_RIGHT) ; |
||
1755 | TextRect (Rect, Rect.Right - 8, Rect.Top, Format ('%d', [Index + 1])) ; |
||
1756 | // Couleur
|
||
1757 | if odSelected in State |
||
1758 | then
|
||
1759 | begin
|
||
1760 | // Cadre noir
|
||
1761 | Brush.Color := clBlack ; |
||
1762 | Rect.Top := Rect.Top + 2 ;
|
||
1763 | Rect.Bottom := Rect.Bottom - 2 ;
|
||
1764 | Rect.Left := Rect.Left + 2 ;
|
||
1765 | Rect.Right := Rect.Left + (Rect.Bottom - Rect.Top) ; |
||
1766 | FillRect (Rect) ; |
||
1767 | // Carr? de couleur
|
||
1768 | Brush.Color := LinePD[ListPD.IndexOf (LBPD.Items[Index])].SeriesColor ; |
||
1769 | Rect.Top := Rect.Top + 1 ;
|
||
1770 | Rect.Bottom := Rect.Bottom - 1 ;
|
||
1771 | Rect.Left := Rect.Left + 1 ;
|
||
1772 | Rect.Right := Rect.Right - 1 ;
|
||
1773 | FillRect (Rect) ; |
||
1774 | end ;
|
||
1775 | end ;
|
||
1776 | end ;
|
||
1777 | |||
1778 | ///////////////////////
|
||
1779 | // Acides amin?s //
|
||
1780 | ///////////////////////
|
||
1781 | procedure TFResSimulT.InitAA ;
|
||
1782 | const
|
||
1783 | TabColor1 : array[0..10] of TColor |
||
1784 | = (clTeal, clAqua, clOlive, clPurple, clSilver, clPink, clWhite, clSkyBlue, |
||
1785 | clGray, clRed, clGreen) ; |
||
1786 | TabColor2 : array[1..2] of TColor |
||
1787 | = (clGreen, clRed) ; |
||
1788 | var
|
||
1789 | i : integer ; |
||
1790 | begin
|
||
1791 | // ListAA : liste pour les acides amin?s
|
||
1792 | ListAA := TStringList.Create ; |
||
1793 | ListAA.Assign (LBAA.Items) ; |
||
1794 | // PieAA : s?rie (camembert) graphique
|
||
1795 | PieAA := TPieSeries.Create (Graph) ; |
||
1796 | PieAA.ParentChart := Graph ; |
||
1797 | PieAA.Circled := TRUE ; |
||
1798 | PieAA.Marks.ArrowLength := 24 ;
|
||
1799 | PieAA.Marks.Arrow.Color := clBlack ; |
||
1800 | PieAA.Marks.Brush.Style := bsClear ; |
||
1801 | PieAA.Marks.Frame.Visible := FALSE ; |
||
1802 | PieAA.ValueFormat := Format ('# ##0 %s', [StrG]) ;
|
||
1803 | PieAA.PercentFormat := '##0 %' ;
|
||
1804 | Graph.AddSeries (PieAA) ; |
||
1805 | // AreaAA : s?ries (aires) graphiques
|
||
1806 | SetLength (AreaAA, ListAA.Count) ; |
||
1807 | for i := 0 to ListAA.Count - 1 do |
||
1808 | begin
|
||
1809 | AreaAA[i] := TAreaSeries.Create (Graph) ; |
||
1810 | AreaAA[i].ParentChart := Graph ; |
||
1811 | AreaAA[i].Title := ListAA[i] ; |
||
1812 | AreaAA[i].SeriesColor := TabColor1[i] ; |
||
1813 | AreaAA[i].AreaLinesPen.Visible := FALSE ; |
||
1814 | Graph.AddSeries (AreaAA[i]) ; |
||
1815 | end ;
|
||
1816 | // BarAA : s?ries (barres) graphiques
|
||
1817 | SetLength (BarAA, ListAA.Count) ; |
||
1818 | for i := 0 to ListAA.Count - 1 do |
||
1819 | begin
|
||
1820 | BarAA[i] := TBarSeries.Create (Graph) ; |
||
1821 | BarAA[i].ParentChart := Graph ; |
||
1822 | BarAA[i].Title := ListAA[i] ; |
||
1823 | BarAA[i].SeriesColor := TabColor1[i] ; |
||
1824 | BarAA[i].BarPen.Color := BarAA[i].SeriesColor ; |
||
1825 | BarAA[i].Marks.Visible := FALSE ; |
||
1826 | Graph.AddSeries (BarAA[i]) ; |
||
1827 | end ;
|
||
1828 | // LineAA : s?ries (lignes) graphiques
|
||
1829 | for i := 1 to 2 do |
||
1830 | begin
|
||
1831 | LineAA[i] := TLineSeries.Create (Graph) ; |
||
1832 | LineAA[i].ParentChart := Graph ; |
||
1833 | if i = 1 |
||
1834 | then // Apport |
||
1835 | LineAA[i].Title := StrApport |
||
1836 | else // Besoin |
||
1837 | LineAA[i].Title := StrBesoin ; |
||
1838 | LineAA[i].SeriesColor := TabColor2[i] ; |
||
1839 | LineAA[i].LinePen.Color := LineAA[i].SeriesColor ; |
||
1840 | LineAA[i].LinePen.Width := 2 ;
|
||
1841 | Graph.AddSeries (LineAA[i]) ; |
||
1842 | end ;
|
||
1843 | end ;
|
||
1844 | |||
1845 | procedure TFResSimulT.AffGraphAA ;
|
||
1846 | var
|
||
1847 | i, j, k : integer ; |
||
1848 | x, y, t, p : double ; |
||
1849 | s, csv : string ;
|
||
1850 | |||
1851 | // Abscisse
|
||
1852 | function AAX : double ;
|
||
1853 | begin
|
||
1854 | case CBAA1.ItemIndex of |
||
1855 | 1 : // R?partition dynamique |
||
1856 | case CBAA2D.ItemIndex of |
||
1857 | 0 : // Age |
||
1858 | result := PResSimulT.TabResult[1, j] ;
|
||
1859 | 1 : // Dur?e |
||
1860 | result := j - 1 ;
|
||
1861 | else
|
||
1862 | result := 0 ;
|
||
1863 | end ;
|
||
1864 | 2 : // R?partition par p?riode |
||
1865 | case CBAA2P.ItemIndex of |
||
1866 | 0 : // Cycle |
||
1867 | result := PResSimulT.TabResult[2, j] ;
|
||
1868 | 1 : // Stade |
||
1869 | result := PResSimulT.TabResult[3, j] ;
|
||
1870 | else
|
||
1871 | result := 0 ;
|
||
1872 | end ;
|
||
1873 | 3 : // Besoin et apport |
||
1874 | case CBAA2D.ItemIndex of |
||
1875 | 0 : // Age |
||
1876 | result := PResSimulT.TabResult[1, j] ;
|
||
1877 | 1 : // Dur?e |
||
1878 | result := j - 1 ;
|
||
1879 | else
|
||
1880 | result := 0 ;
|
||
1881 | end ;
|
||
1882 | else
|
||
1883 | result := 0 ;
|
||
1884 | end ;
|
||
1885 | end ;
|
||
1886 | |||
1887 | // Ordonn?e
|
||
1888 | function AAY : double ;
|
||
1889 | var
|
||
1890 | h : integer ; |
||
1891 | v, d, Lys, ProtId, PDMax, PVV : double ; |
||
1892 | |||
1893 | function Ingere(AA, Jour: integer): double;
|
||
1894 | begin
|
||
1895 | result := PresSimulT.TabResult[AA + 14, Jour];
|
||
1896 | if (AA = 3) or (AA = 7) |
||
1897 | then // met + cys, phe + tyr |
||
1898 | result := result + PresSimulT.TabResult[AA + 13, Jour];
|
||
1899 | end;
|
||
1900 | |||
1901 | function Digestible(AA, Jour: integer): double;
|
||
1902 | begin
|
||
1903 | result := PresSimulT.TabResult[AA + 27, Jour];
|
||
1904 | if (AA = 3) or (AA = 7) |
||
1905 | then // met + cys, phe + tyr |
||
1906 | result := result + PresSimulT.TabResult[AA + 26, Jour];
|
||
1907 | end;
|
||
1908 | |||
1909 | function Endogene(AA, Jour: integer): double;
|
||
1910 | var
|
||
1911 | IngereSec: double; |
||
1912 | begin
|
||
1913 | IngereSec := PResSimulT.TabResult[12, Jour] ;
|
||
1914 | result := IngereSec * AAendogene[AA] ; |
||
1915 | if (AA = 3) or (AA = 7) |
||
1916 | then // met + cys, phe + tyr |
||
1917 | result := result + IngereSec * AAendogene[AA - 1] ;
|
||
1918 | end;
|
||
1919 | |||
1920 | function Entretien(AA, Jour: integer): double;
|
||
1921 | var
|
||
1922 | PVTot, ProfilEnt: double; |
||
1923 | begin
|
||
1924 | PVTot := PresSimulT.TabResult[58, Jour];
|
||
1925 | ProfilEnt := AAm75[AA]; |
||
1926 | if (AA = 3) or (AA = 7) |
||
1927 | then // met + cys, phe + tyr |
||
1928 | ProfilEnt := ProfilEnt + AAm75[AA - 1];
|
||
1929 | result := ProfilEnt * Power(PVTot, 0.75);
|
||
1930 | end;
|
||
1931 | |||
1932 | function Portee(AA, Jour: integer): double;
|
||
1933 | var
|
||
1934 | PDTot, PDNet, ProfilRet : double ; |
||
1935 | begin
|
||
1936 | if PresSimulT.TabResult[3, Jour] = 0 |
||
1937 | then // Gestation |
||
1938 | begin
|
||
1939 | PDTot := PresSimulT.TabResult[64, Jour] ;
|
||
1940 | PDNet := PresSimulT.TabResult[63, Jour] ;
|
||
1941 | if AA = 0 |
||
1942 | then // Azote |
||
1943 | result := PDTot - PDNet |
||
1944 | else
|
||
1945 | begin
|
||
1946 | ProfilRet := ProtIdRet[AA] ; |
||
1947 | if (AA = 3) or (AA = 7) |
||
1948 | then // met + cys, phe + tyr |
||
1949 | ProfilRet := ProfilRet + ProtIdRet[AA - 1] ;
|
||
1950 | result := (PDTot - PDNet) * 0.060 * ProfilRet / 100 ; |
||
1951 | end ;
|
||
1952 | end
|
||
1953 | else // Lactation ou ISSF |
||
1954 | result := 0 ;
|
||
1955 | end;
|
||
1956 | |||
1957 | function DepotPot(AA, Jour: integer): double;
|
||
1958 | var
|
||
1959 | PDPot, PDTot, PDNet, ProfilRet : double ; |
||
1960 | begin
|
||
1961 | if PresSimulT.TabResult[3, Jour] = 1 |
||
1962 | then // Lactation |
||
1963 | result := 0
|
||
1964 | else // Gestation ou ISSF |
||
1965 | begin
|
||
1966 | PDPot := PresSimulT.TabResult[40, Jour] ;
|
||
1967 | PDTot := PresSimulT.TabResult[64, Jour] ;
|
||
1968 | PDNet := PresSimulT.TabResult[63, Jour] ;
|
||
1969 | if AA = 0 |
||
1970 | then // Azote |
||
1971 | result := PDPot - (PDTot - PDNet) |
||
1972 | else
|
||
1973 | begin
|
||
1974 | ProfilRet := ProtIdRet[AA] ; |
||
1975 | if (AA = 3) or (AA = 7) |
||
1976 | then // met + cys, phe + tyr |
||
1977 | ProfilRet := ProfilRet + ProtIdRet[AA - 1] ;
|
||
1978 | result := (PDPot - (PDTot - PDNet)) * 0.070 * ProfilRet / 100 ; |
||
1979 | end ;
|
||
1980 | end ;
|
||
1981 | end;
|
||
1982 | |||
1983 | function Depot(AA, Jour: integer): double;
|
||
1984 | var
|
||
1985 | PDPot, PDTot : double ; |
||
1986 | begin
|
||
1987 | if PresSimulT.TabResult[3, Jour] = 1 |
||
1988 | then // Lactation |
||
1989 | result := 0
|
||
1990 | else // Gestation ou ISSF |
||
1991 | begin
|
||
1992 | PDPot := PresSimulT.TabResult[40, Jour] ;
|
||
1993 | PDTot := PresSimulT.TabResult[64, Jour] ;
|
||
1994 | result := (Portee(AA, Jour) + DepotPot(AA, Jour)) / PDPot * PDTot - Portee(AA, Jour) ; |
||
1995 | end ;
|
||
1996 | end;
|
||
1997 | |||
1998 | function Cumul(AA, Jour: integer): double;
|
||
1999 | var
|
||
2000 | ProtLait, ProfilLact, ProfilGest : double ; |
||
2001 | begin
|
||
2002 | if PresSimulT.TabResult[3, Jour] = 1 |
||
2003 | then // Lactation |
||
2004 | if AA > 1 |
||
2005 | then
|
||
2006 | begin
|
||
2007 | ProfilLact := ProtIdLact[AA] ; |
||
2008 | if (AA = 3) or (AA = 7) |
||
2009 | then // met + cys, phe + tyr |
||
2010 | ProfilLact := ProfilLact + ProtIdLact[AA - 1] ;
|
||
2011 | result := Cumul(1, Jour) * ProfilLact / 100 ; |
||
2012 | end
|
||
2013 | else
|
||
2014 | begin
|
||
2015 | ProtLait := PresSimulT.TabResult[40, Jour] ;
|
||
2016 | if AA = 0 |
||
2017 | then // Azote |
||
2018 | result := Endogene(0, Jour) + Entretien(0, Jour) + ProtLait / kAA[0] |
||
2019 | else // Lysine |
||
2020 | result := (14.2 + 0.629 * ProtLait / 6.28) / 1.335 ; |
||
2021 | end
|
||
2022 | else // Gestation ou ISSF |
||
2023 | if AA = 0 |
||
2024 | then // Azote |
||
2025 | result := Endogene(0, Jour) + Entretien(0, Jour) + (Portee(0, Jour) + Depot(0, Jour)) / kAA[0] |
||
2026 | else
|
||
2027 | if AA = 12 |
||
2028 | then // Arginine |
||
2029 | result := Endogene(12, Jour) + Entretien(12, Jour) + Portee(12, Jour) + Depot(12, Jour) |
||
2030 | else
|
||
2031 | begin
|
||
2032 | ProfilGest := ProtIdGest[AA] ; |
||
2033 | if (AA = 3) or (AA = 7) |
||
2034 | then // met + cys, phe + tyr |
||
2035 | ProfilGest := ProfilGest + ProtIdGest[AA - 1] ;
|
||
2036 | result := (Endogene(1, Jour) + Entretien(1, Jour) + (Portee(1, Jour) + Depot(1, Jour)) / KLysGest) * ProfilGest / 100 ; |
||
2037 | end ;
|
||
2038 | end;
|
||
2039 | |||
2040 | function CumulPot(AA, Jour: integer): double;
|
||
2041 | var
|
||
2042 | ProfilGest : double ; |
||
2043 | begin
|
||
2044 | if PresSimulT.TabResult[3, Jour] = 1 |
||
2045 | then // Lactation |
||
2046 | result := 0
|
||
2047 | else // Gestation ou ISSF |
||
2048 | if AA = 0 |
||
2049 | then // Azote |
||
2050 | result := Endogene(0, Jour) + Entretien(0, Jour) + (Portee(0, Jour) + DepotPot(0, Jour)) / kAA[0] |
||
2051 | else
|
||
2052 | if AA = 12 |
||
2053 | then // Arginine |
||
2054 | result := Endogene(12, Jour) + Entretien(12, Jour) + Portee(12, Jour) + DepotPot(12, Jour) |
||
2055 | else
|
||
2056 | begin
|
||
2057 | ProfilGest := ProtIdGest[AA] ; |
||
2058 | if (AA = 3) or (AA = 7) |
||
2059 | then // met + cys, phe + tyr |
||
2060 | ProfilGest := ProfilGest + ProtIdGest[AA - 1] ;
|
||
2061 | result := (Endogene(1, Jour) + Entretien(1, Jour) + (Portee(1, Jour) + DepotPot(1, Jour)) / KLysGest) * ProfilGest / 100 ; |
||
2062 | end ;
|
||
2063 | end;
|
||
2064 | |||
2065 | function Mobilisation(AA, Jour: integer): double;
|
||
2066 | begin
|
||
2067 | if PresSimulT.TabResult[3, Jour] = 1 |
||
2068 | then // Lactation |
||
2069 | result := Max(Cumul(AA, Jour) - Digestible(AA, Jour), 0)
|
||
2070 | else // Gestation ou ISSF |
||
2071 | result := 0 ;
|
||
2072 | end;
|
||
2073 | |||
2074 | // AA du lait provenant de l'aliment
|
||
2075 | function Lait(AA, Jour: integer): double;
|
||
2076 | var
|
||
2077 | ProtLait, ProfilLait, ExportLait, BesoinLait, CoeffLait : double ; |
||
2078 | begin
|
||
2079 | if PresSimulT.TabResult[3, Jour] = 1 |
||
2080 | then // Lactation |
||
2081 | begin
|
||
2082 | ProtLait := PresSimulT.TabResult[40, Jour] ;
|
||
2083 | BesoinLait := Cumul(AA, Jour) - Endogene(AA, Jour) - Entretien(AA, Jour) ; |
||
2084 | CoeffLait := Max ((BesoinLait - Mobilisation(AA, Jour)) / BesoinLait, 0) ;
|
||
2085 | if AA = 0 |
||
2086 | then // Azote |
||
2087 | ExportLait := ProtLait |
||
2088 | else
|
||
2089 | begin
|
||
2090 | ProfilLait := ProtIdLait[AA] ; |
||
2091 | if (AA = 3) or (AA = 7) |
||
2092 | then // met + cys, phe + tyr |
||
2093 | ProfilLait := ProfilLait + ProtIdLait[AA - 1] ;
|
||
2094 | ExportLait := ProtLait * 0.075 * ProfilLait / 100 ; |
||
2095 | end ;
|
||
2096 | result := CoeffLait * ExportLait ; |
||
2097 | end
|
||
2098 | else // Gestation ou ISSF |
||
2099 | result := 0 ;
|
||
2100 | end;
|
||
2101 | |||
2102 | function Deficit(AA, Jour: integer): double;
|
||
2103 | begin
|
||
2104 | if PresSimulT.TabResult[3, Jour] = 1 |
||
2105 | then // Lactation |
||
2106 | result := 0
|
||
2107 | else // Gestation ou ISSF |
||
2108 | result := Max(CumulPot(AA, Jour) - Digestible(AA, Jour), 0) ;
|
||
2109 | end;
|
||
2110 | |||
2111 | function Exces(AA, Jour: integer): double;
|
||
2112 | begin
|
||
2113 | if PresSimulT.TabResult[3, Jour] = 1 |
||
2114 | then // Lactation |
||
2115 | result := Max(Digestible(AA, Jour) - Cumul(AA, Jour), 0)
|
||
2116 | else // Gestation ou ISSF |
||
2117 | result := Max(Digestible(AA, Jour) - CumulPot(AA, Jour), 0) ;
|
||
2118 | end;
|
||
2119 | |||
2120 | function Desequilibre(AA, Jour: integer): double;
|
||
2121 | begin
|
||
2122 | if PresSimulT.TabResult[3, Jour] = 1 |
||
2123 | then // Lactation |
||
2124 | result := 0
|
||
2125 | else // Gestation ou ISSF |
||
2126 | result := Max(CumulPot(AA, Jour) - Cumul(AA, Jour) - Deficit(AA, Jour), 0) ;
|
||
2127 | end;
|
||
2128 | |||
2129 | function Oxydation(AA, Jour: integer): double;
|
||
2130 | begin
|
||
2131 | if PresSimulT.TabResult[3, Jour] = 1 |
||
2132 | then // Lactation |
||
2133 | begin
|
||
2134 | result := Cumul(AA, Jour) - Mobilisation(AA, Jour) - Endogene(AA, Jour) - Entretien(AA, Jour) - Lait(AA, Jour) |
||
2135 | end
|
||
2136 | else // Gestation ou ISSF |
||
2137 | result := Max(Cumul(AA, Jour) - Entretien(AA, Jour) - Endogene(AA, Jour) - Portee(AA, Jour) - Depot(AA, Jour), 0) ;
|
||
2138 | end;
|
||
2139 | |||
2140 | begin
|
||
2141 | case CBAA1.ItemIndex of |
||
2142 | 0 : // R?partition globale |
||
2143 | begin
|
||
2144 | v := 0 ;
|
||
2145 | case i of |
||
2146 | 0 : // Indigestible |
||
2147 | if CBAA5.ItemIndex = 2 |
||
2148 | then // Total |
||
2149 | for h := 1 to PresSimulT.NbJSim do |
||
2150 | v := v + Ingere(CBAA3.ItemIndex, h) - Digestible(CBAA3.ItemIndex, h) ; |
||
2151 | 1 : // Endog?ne basal |
||
2152 | if CBAA5.ItemIndex <> 1 |
||
2153 | then // Total ou Digestible standardis? |
||
2154 | for h := 1 to PresSimulT.NbJSim do |
||
2155 | v := v + Endogene(CBAA3.ItemIndex, h) ; |
||
2156 | 2 : // Entretien |
||
2157 | for h := 1 to PresSimulT.NbJSim do |
||
2158 | v := v + Entretien(CBAA3.ItemIndex, h) ; |
||
2159 | 3 : // Port?e |
||
2160 | for h := 1 to PresSimulT.NbJSim do |
||
2161 | v := v + Portee(CBAA3.ItemIndex, h) ; |
||
2162 | 4 : // Oxydation minimale |
||
2163 | for h := 1 to PresSimulT.NbJSim do |
||
2164 | v := v + Oxydation(CBAA3.ItemIndex, h) ; |
||
2165 | 5 : // D?p?t |
||
2166 | for h := 1 to PresSimulT.NbJSim do |
||
2167 | v := v + Depot(CBAA3.ItemIndex, h) ; |
||
2168 | 6 : // Lait |
||
2169 | for h := 1 to PresSimulT.NbJSim do |
||
2170 | v := v + Lait(CBAA3.ItemIndex, h) ; |
||
2171 | 7 : // Mobilisation |
||
2172 | for h := 1 to PresSimulT.NbJSim do |
||
2173 | v := v + Mobilisation(CBAA3.ItemIndex, h) ; |
||
2174 | 8 : // D?s?quilibre |
||
2175 | for h := 1 to PresSimulT.NbJSim do |
||
2176 | v := v + Desequilibre(CBAA3.ItemIndex, h) ; |
||
2177 | 9 : // D?ficit |
||
2178 | for h := 1 to PresSimulT.NbJSim do |
||
2179 | v := v + Deficit(CBAA3.ItemIndex, h) ; |
||
2180 | 10 : // Exc?s |
||
2181 | for h := 1 to PresSimulT.NbJSim do |
||
2182 | v := v + Exces(CBAA3.ItemIndex, h) ; |
||
2183 | end ;
|
||
2184 | result := v ; |
||
2185 | end ;
|
||
2186 | 1 : // R?partition dynamique |
||
2187 | begin
|
||
2188 | // Diviseur
|
||
2189 | case CBAA4.ItemIndex of |
||
2190 | 1 : // Aliment ing?r? |
||
2191 | d := PResSimulT.TabResult[11, j] ;
|
||
2192 | else
|
||
2193 | d := 1 ;
|
||
2194 | end ;
|
||
2195 | case i of |
||
2196 | 0 : // Indigestible |
||
2197 | if CBAA5.ItemIndex = 2 |
||
2198 | then // Total |
||
2199 | v := Ingere(CBAA3.ItemIndex, j) - Digestible(CBAA3.ItemIndex, j) |
||
2200 | else
|
||
2201 | v := 0 ;
|
||
2202 | 1 : // Endog?ne basal |
||
2203 | if CBAA5.ItemIndex <> 1 |
||
2204 | then // Total ou Digestible standardis? |
||
2205 | v := Endogene(CBAA3.ItemIndex, j) |
||
2206 | else
|
||
2207 | v := 0 ;
|
||
2208 | 2 : // Entretien |
||
2209 | v := Entretien(CBAA3.ItemIndex, j) ; |
||
2210 | 3 : // Port?e |
||
2211 | v := Portee(CBAA3.ItemIndex, j) ; |
||
2212 | 4 : // Oxydation minimale |
||
2213 | v := Oxydation(CBAA3.ItemIndex, j) ; |
||
2214 | 5 : // D?p?t |
||
2215 | v := Depot(CBAA3.ItemIndex, j) ; |
||
2216 | 6 : // Lait |
||
2217 | v := Lait(CBAA3.ItemIndex, j) ; |
||
2218 | 7 : // Mobilisation |
||
2219 | v := Mobilisation(CBAA3.ItemIndex, j) ; |
||
2220 | 8 : // D?s?quilibre |
||
2221 | v := Desequilibre(CBAA3.ItemIndex, j) ; |
||
2222 | 9 : // D?ficit |
||
2223 | v := Deficit(CBAA3.ItemIndex, j) ; |
||
2224 | 10 : // Exc?s |
||
2225 | v := Exces(CBAA3.ItemIndex, j) ; |
||
2226 | else
|
||
2227 | v := 0 ;
|
||
2228 | end ;
|
||
2229 | result := v / d ; |
||
2230 | end ;
|
||
2231 | 2 : // R?partition par p?riode |
||
2232 | begin
|
||
2233 | // Diviseur
|
||
2234 | case CBAA4.ItemIndex of |
||
2235 | 1 : // Dur?e |
||
2236 | d := j - k ; |
||
2237 | 2 : // Aliment ing?r? |
||
2238 | begin
|
||
2239 | d := 0 ;
|
||
2240 | for h := k to j - 1 do |
||
2241 | d := d + PResSimulT.TabResult[11, h] ;
|
||
2242 | end ;
|
||
2243 | else
|
||
2244 | d := 1 ;
|
||
2245 | end ;
|
||
2246 | v := 0 ;
|
||
2247 | case i of |
||
2248 | 0 : // Indigestible |
||
2249 | if CBAA5.ItemIndex = 2 |
||
2250 | then // Total |
||
2251 | for h := k to j - 1 do |
||
2252 | v := v + Ingere(CBAA3.ItemIndex, h) - Digestible(CBAA3.ItemIndex, h) ; |
||
2253 | 1 : // Endog?ne basal |
||
2254 | if CBAA5.ItemIndex <> 1 |
||
2255 | then // Total ou Digestible standardis? |
||
2256 | for h := k to j - 1 do |
||
2257 | v := v + Endogene(CBAA3.ItemIndex, h) ; |
||
2258 | 2 : // Entretien |
||
2259 | for h := k to j - 1 do |
||
2260 | v := v + Entretien(CBAA3.ItemIndex, h) ; |
||
2261 | 3 : // Port?e |
||
2262 | for h := k to j - 1 do |
||
2263 | v := v + Portee(CBAA3.ItemIndex, h) ; |
||
2264 | 4 : // Oxydation minimale |
||
2265 | for h := k to j - 1 do |
||
2266 | v := v + Oxydation(CBAA3.ItemIndex, h) ; |
||
2267 | 5 : // D?p?t |
||
2268 | for h := k to j - 1 do |
||
2269 | v := v + Depot(CBAA3.ItemIndex, h) ; |
||
2270 | 6 : // Lait |
||
2271 | for h := k to j - 1 do |
||
2272 | v := v + Lait(CBAA3.ItemIndex, h) ; |
||
2273 | 7 : // Mobilisation |
||
2274 | for h := k to j - 1 do |
||
2275 | v := v + Mobilisation(CBAA3.ItemIndex, h) ; |
||
2276 | 8 : // D?s?quilibre |
||
2277 | for h := k to j - 1 do |
||
2278 | v := v + Desequilibre(CBAA3.ItemIndex, h) ; |
||
2279 | 9 : // D?ficit |
||
2280 | for h := k to j - 1 do |
||
2281 | v := v + Deficit(CBAA3.ItemIndex, h) ; |
||
2282 | 10 : // Exc?s |
||
2283 | for h := k to j - 1 do |
||
2284 | v := v + Exces(CBAA3.ItemIndex, h) ; |
||
2285 | end ;
|
||
2286 | result := v / d ; |
||
2287 | end ;
|
||
2288 | 3 : // Besoin et apport |
||
2289 | begin
|
||
2290 | PDmax := PResSimulT.TabResult[40, j] ;
|
||
2291 | PVV := PResSimulT.TabResult[58, j] * PV2PVV ;
|
||
2292 | if PResSimulT.TabResult[3, j] = 1 |
||
2293 | then // Lactation |
||
2294 | Lys := (14.2 + 0.629 * PDmax / 6.38) / 1.335 |
||
2295 | else // Gestation ou ISSF |
||
2296 | Lys := (PDmax * 0.065 + 0.036 * Power (PVV, 0.75)) / KLysGest ; |
||
2297 | // Diviseur
|
||
2298 | case CBAA4.ItemIndex of |
||
2299 | 1 : // Lysine |
||
2300 | begin
|
||
2301 | if i = 1 |
||
2302 | then // Apport |
||
2303 | case CBAA5.ItemIndex of |
||
2304 | 0 : // Standardis? |
||
2305 | d := Digestible(1, j) ;
|
||
2306 | 1 : // Apparent |
||
2307 | d := Digestible(1, j) - Endogene(1, j) ; |
||
2308 | 2 : // Total |
||
2309 | d := Ingere(1, j) ;
|
||
2310 | else
|
||
2311 | d := 1 ;
|
||
2312 | end
|
||
2313 | else // Besoin |
||
2314 | case CBAA5.ItemIndex of |
||
2315 | 0 : // Standardis? |
||
2316 | d := Lys ; |
||
2317 | 1 : // Apparent |
||
2318 | d := Lys - Endogene(1, j) ;
|
||
2319 | else
|
||
2320 | d := 1 ;
|
||
2321 | end ;
|
||
2322 | d := d / 100 ;
|
||
2323 | end ;
|
||
2324 | 2 : // ED |
||
2325 | d := PResSimulT.TabResult[71, j] ;
|
||
2326 | 3 : // EM |
||
2327 | d := PResSimulT.TabResult[72, j] ;
|
||
2328 | 4 : // EN |
||
2329 | d := PResSimulT.TabResult[73, j] ;
|
||
2330 | 5 : // Aliment ing?r? |
||
2331 | d := PResSimulT.TabResult[11, j] ;
|
||
2332 | else
|
||
2333 | d := 1 ;
|
||
2334 | end ;
|
||
2335 | if i = 1 |
||
2336 | then // Apport |
||
2337 | case CBAA5.ItemIndex of |
||
2338 | 0 : // Standardis? |
||
2339 | v := Digestible(CBAA3.ItemIndex, j) ; |
||
2340 | 1 : // Apparent |
||
2341 | v := Digestible(CBAA3.ItemIndex, j) - Endogene(CBAA3.ItemIndex, j) ; |
||
2342 | 2 : // Total |
||
2343 | v := Ingere(CBAA3.ItemIndex, j) ; |
||
2344 | else
|
||
2345 | v := 0 ;
|
||
2346 | end
|
||
2347 | else // Besoin |
||
2348 | begin
|
||
2349 | if PResSimulT.TabResult[3, j] = 1 |
||
2350 | then // Lactation |
||
2351 | begin
|
||
2352 | ProtId := ProtIdLact[CBAA3.ItemIndex] ; |
||
2353 | if (CBAA3.ItemIndex = 3) or (CBAA3.ItemIndex = 7) |
||
2354 | then // met + cys, phe + tyr |
||
2355 | ProtId := ProtId + ProtIdLact[CBAA3.ItemIndex - 1] ;
|
||
2356 | end
|
||
2357 | else // Gestation ou ISSF |
||
2358 | begin
|
||
2359 | ProtId := ProtIdGest[CBAA3.ItemIndex] ; |
||
2360 | if (CBAA3.ItemIndex = 3) or (CBAA3.ItemIndex = 7) |
||
2361 | then // met + cys, phe + tyr |
||
2362 | ProtId := ProtId + ProtIdGest[CBAA3.ItemIndex - 1] ;
|
||
2363 | end ;
|
||
2364 | case CBAA5.ItemIndex of |
||
2365 | 0 : // Standardis? |
||
2366 | if CBAA3.ItemIndex = 0 |
||
2367 | then // Mati?res azot?es |
||
2368 | v := (PDmax + AAm75[0] * Power (PVV, 0.75) + Endogene(0, j)) / kAA[0] |
||
2369 | else
|
||
2370 | v := Lys * ProtId / 100 ;
|
||
2371 | 1 : // Apparent |
||
2372 | if CBAA3.ItemIndex = 0 |
||
2373 | then // Mati?res azot?es |
||
2374 | v := (PDmax + AAm75[0] * Power (PVV, 0.75)) / kAA[0] |
||
2375 | else
|
||
2376 | v := Lys * ProtId / 100 - Endogene(CBAA3.ItemIndex, j) ;
|
||
2377 | else
|
||
2378 | v := 0 ;
|
||
2379 | end ;
|
||
2380 | end ;
|
||
2381 | result := v / d ; |
||
2382 | end ;
|
||
2383 | else
|
||
2384 | result := 0 ;
|
||
2385 | end ;
|
||
2386 | end ;
|
||
2387 | |||
2388 | // AffGraphAA
|
||
2389 | begin
|
||
2390 | ResetGraph ; |
||
2391 | Graph.Title.Text.Add (Format ('%s : %s', [CBAA3.Text, CBAA1.Text])) ;
|
||
2392 | Graph.SubTitle.Text.Add (CBAA5.Text) ; |
||
2393 | Graph.LeftAxis.Title.Caption := Format ('%s (%s)', [CBAA3.Text, CBAA4.Text]) ;
|
||
2394 | case CBAA1.ItemIndex of |
||
2395 | 0 : // R?partition globale |
||
2396 | begin
|
||
2397 | // Graph.View3D := TRUE ;
|
||
2398 | Graph.Legend.Visible := FALSE ; |
||
2399 | csv := '';
|
||
2400 | for i := 0 to ListAA.Count - 1 do |
||
2401 | csv := csv + Format ('%s (%s)', [ListAA[i], CBAA4.Text]) + ';'; |
||
2402 | MExport.Lines.Append(csv); |
||
2403 | // Affichage du camembert
|
||
2404 | PieAA.Active := TRUE ; |
||
2405 | PieAA.Clear ; |
||
2406 | if CBAA4.ItemIndex = 1 |
||
2407 | then // % |
||
2408 | PieAA.Marks.Style := smsLabelPercent |
||
2409 | else
|
||
2410 | PieAA.Marks.Style := smsLabelValue ; |
||
2411 | t := 0 ;
|
||
2412 | csv := '';
|
||
2413 | for i := 0 to ListAA.Count - 1 do |
||
2414 | begin
|
||
2415 | y := AAY ; |
||
2416 | if y > PICO
|
||
2417 | then
|
||
2418 | PieAA.AddPie (y, ListAA[i], AreaAA[i].SeriesColor) ; |
||
2419 | csv := csv + FloatToStrF(y, ffFixed, 15, 15) + ';'; |
||
2420 | t := t + y ; |
||
2421 | end ;
|
||
2422 | Graph.SubTitle.Text.Add (Format ('%s : %1.0f %s', [StrTotal, t, StrG])) ;
|
||
2423 | MExport.Lines.Append(csv); |
||
2424 | end ;
|
||
2425 | 1 : // R?partition dynamique |
||
2426 | begin
|
||
2427 | csv := CBAA2D.Text; |
||
2428 | for i := 0 to ListAA.Count - 1 do |
||
2429 | csv := csv + ';' + Format ('%s (%s)', [ListAA[i], CBAA4.Text]); |
||
2430 | MExport.Lines.Append(csv); |
||
2431 | Graph.BottomAxis.Title.Caption := CBAA2D.Text ; |
||
2432 | // Affichage des aires
|
||
2433 | for i := 0 to ListAA.Count - 1 do |
||
2434 | AreaAA[i].Active := TRUE ; |
||
2435 | for i := 0 to ListAA.Count - 1 do |
||
2436 | AreaAA[i].Clear ; |
||
2437 | if CBAA4.ItemIndex = 2 |
||
2438 | then // % |
||
2439 | for i := 0 to ListAA.Count - 1 do |
||
2440 | AreaAA[i].MultiArea := maStacked100 |
||
2441 | else
|
||
2442 | for i := 0 to ListAA.Count - 1 do |
||
2443 | AreaAA[i].MultiArea := maStacked ; |
||
2444 | for j := 1 to PResSimulT.NbJSim do |
||
2445 | begin
|
||
2446 | csv := FloatToStrF(AAX, ffFixed, 15, 15); |
||
2447 | for i := 0 to ListAA.Count - 1 do |
||
2448 | begin
|
||
2449 | AreaAA[i].AddXY (AAX, AAY, '', clTeeColor) ;
|
||
2450 | csv := csv + ';' + FloatToStrF(AAY, ffFixed, 15, 15); |
||
2451 | end;
|
||
2452 | MExport.Lines.Append(csv); |
||
2453 | end;
|
||
2454 | end ;
|
||
2455 | 2 : // R?partition par p?riode |
||
2456 | begin
|
||
2457 | Graph.BottomAxis.Title.Caption := CBAA2P.Text ; |
||
2458 | csv := CBAA2P.Text; |
||
2459 | for i := 0 to ListAA.Count - 1 do |
||
2460 | csv := csv + ';' + Format ('%s (%s)', [ListAA[i], CBAA4.Text]); |
||
2461 | MExport.Lines.Append(csv); |
||
2462 | // Affichage des barres
|
||
2463 | for i := 0 to ListAA.Count - 1 do |
||
2464 | BarAA[i].Active := TRUE ; |
||
2465 | for i := 0 to ListAA.Count - 1 do |
||
2466 | BarAA[i].Clear ; |
||
2467 | if CBAA4.ItemIndex = 3 |
||
2468 | then // % |
||
2469 | for i := 0 to ListAA.Count - 1 do |
||
2470 | BarAA[i].MultiBar := mbStacked100 |
||
2471 | else
|
||
2472 | for i := 0 to ListAA.Count - 1 do |
||
2473 | BarAA[i].MultiBar := mbStacked ; |
||
2474 | j := 1 ;
|
||
2475 | x := AAX ; |
||
2476 | k := 1 ;
|
||
2477 | if PResSimulT.NbJSim > 1 |
||
2478 | then
|
||
2479 | for j := 2 to PResSimulT.NbJSim do |
||
2480 | begin
|
||
2481 | p := AAX ; |
||
2482 | if x <> p
|
||
2483 | then
|
||
2484 | begin
|
||
2485 | // Changement de p?riode
|
||
2486 | s := Format ('%1.0f', [x]) ;
|
||
2487 | csv := s; |
||
2488 | for i := 0 to ListAA.Count - 1 do |
||
2489 | begin
|
||
2490 | y := AAY ; |
||
2491 | if y > PICO
|
||
2492 | then
|
||
2493 | BarAA[i].AddBar (y, s, clTeeColor) |
||
2494 | else
|
||
2495 | BarAA[i].AddNull (s) ; |
||
2496 | csv := csv + ';' + FloatToStrF(y, ffFixed, 15, 15); |
||
2497 | end ;
|
||
2498 | MExport.Lines.Append(csv); |
||
2499 | x := p ; |
||
2500 | k := j ; |
||
2501 | end ;
|
||
2502 | end ;
|
||
2503 | j := PResSimulT.NbJSim + 1 ;
|
||
2504 | if j > k
|
||
2505 | then
|
||
2506 | begin
|
||
2507 | if CBAA2P.ItemIndex = 2 |
||
2508 | then // Globale |
||
2509 | s := ' '
|
||
2510 | else
|
||
2511 | s := Format ('%1.0f', [x]) ;
|
||
2512 | csv := s; |
||
2513 | for i := 0 to ListAA.Count - 1 do |
||
2514 | begin
|
||
2515 | y := AAY ; |
||
2516 | if y > PICO
|
||
2517 | then
|
||
2518 | BarAA[i].AddBar (y, s, clTeeColor) |
||
2519 | else
|
||
2520 | BarAA[i].AddNull (s) ; |
||
2521 | csv := csv + ';' + FloatToStrF(y, ffFixed, 15, 15); |
||
2522 | end ;
|
||
2523 | MExport.Lines.Append(csv); |
||
2524 | end ;
|
||
2525 | end ;
|
||
2526 | 3 : // Besoin et apport |
||
2527 | begin
|
||
2528 | Graph.BottomAxis.Title.Caption := CBAA2D.Text ; |
||
2529 | Graph.Legend.Alignment := laTop ; |
||
2530 | csv := CBAA2D.Text; |
||
2531 | if CBAA5.ItemIndex = 2 |
||
2532 | then // En digestibilit? totale, seul l'apport est affich? |
||
2533 | csv := csv + ';' + Format ('%s (%s)', [LineAA[1].Title, CBAA4.Text]) |
||
2534 | else
|
||
2535 | for i := 1 to 2 do |
||
2536 | csv := csv + ';' + Format ('%s (%s)', [LineAA[i].Title, CBAA4.Text]); |
||
2537 | MExport.Lines.Append(csv); |
||
2538 | // Affichage des lignes
|
||
2539 | if CBAA5.ItemIndex = 2 |
||
2540 | then // En digestibilit? totale, seul l'apport est affich? |
||
2541 | LineAA[1].Active := TRUE
|
||
2542 | else
|
||
2543 | for i := 1 to 2 do |
||
2544 | LineAA[i].Active := TRUE ; |
||
2545 | for i := 1 to 2 do |
||
2546 | LineAA[i].Clear ; |
||
2547 | for j := 1 to PResSimulT.NbJSim do |
||
2548 | begin
|
||
2549 | csv := FloatToStrF(AAX, ffFixed, 15, 15); |
||
2550 | for i := 1 to 2 do |
||
2551 | if (CBAA5.ItemIndex = 2) and (i = 2) |
||
2552 | then // En digestibilit? totale, le besoin n'est pas affich? |
||
2553 | Continue |
||
2554 | else
|
||
2555 | begin
|
||
2556 | LineAA[i].AddXY (AAX, AAY, '', clTeeColor) ;
|
||
2557 | csv := csv + ';' + FloatToStrF(AAY, ffFixed, 15, 15); |
||
2558 | end ;
|
||
2559 | MExport.Lines.Append(csv); |
||
2560 | end ;
|
||
2561 | end ;
|
||
2562 | end ;
|
||
2563 | if PieAA.Active
|
||
2564 | then
|
||
2565 | begin
|
||
2566 | Graph.View3DOptions.Orthogonal := FALSE ; |
||
2567 | Graph.View3DOptions.Elevation := 315 ;
|
||
2568 | Graph.View3DOptions.Rotation := 360 ;
|
||
2569 | Graph.View3DOptions.Perspective := 0 ;
|
||
2570 | end
|
||
2571 | else
|
||
2572 | begin
|
||
2573 | Graph.View3DOptions.Orthogonal := TRUE ; |
||
2574 | Graph.View3DOptions.Elevation := 345 ;
|
||
2575 | Graph.View3DOptions.Rotation := 345 ;
|
||
2576 | Graph.View3DOptions.Perspective := 15 ;
|
||
2577 | end ;
|
||
2578 | AjustEchelle (Graph) ; |
||
2579 | end ;
|
||
2580 | |||
2581 | procedure TFResSimulT.CBAA1Change (Sender : TObject) ;
|
||
2582 | begin
|
||
2583 | CBAA4.Items.Clear ; |
||
2584 | case CBAA1.ItemIndex of |
||
2585 | 0 : // R?partition globale |
||
2586 | begin
|
||
2587 | CBAA2D.Visible := FALSE ; |
||
2588 | CBAA2P.Visible := FALSE ; |
||
2589 | // Unit?s
|
||
2590 | CBAA4.Items.Add (StrG) ; |
||
2591 | CBAA4.Items.Add ('%') ;
|
||
2592 | end ;
|
||
2593 | 1 : // R?partition dynamique |
||
2594 | begin
|
||
2595 | CBAA2D.Visible := TRUE ; |
||
2596 | CBAA2P.Visible := FALSE ; |
||
2597 | // Unit?s
|
||
2598 | CBAA4.Items.Add (Format ('%s/%s', [StrG, StrJ])) ;
|
||
2599 | CBAA4.Items.Add (Format ('%s/%s %s', [StrG, StrKg, StrAlimentUnit])) ;
|
||
2600 | CBAA4.Items.Add ('%') ;
|
||
2601 | end ;
|
||
2602 | 2 : // R?partition par p?riode |
||
2603 | begin
|
||
2604 | CBAA2D.Visible := FALSE ; |
||
2605 | CBAA2P.Visible := TRUE ; |
||
2606 | // Unit?s
|
||
2607 | CBAA4.Items.Add (StrG) ; |
||
2608 | CBAA4.Items.Add (Format ('%s/%s', [StrG, StrJ])) ;
|
||
2609 | CBAA4.Items.Add (Format ('%s/%s %s', [StrG, StrKg, StrAlimentUnit])) ;
|
||
2610 | CBAA4.Items.Add ('%') ;
|
||
2611 | end ;
|
||
2612 | 3 : // Besoin et apport |
||
2613 | begin
|
||
2614 | CBAA2D.Visible := TRUE ; |
||
2615 | CBAA2P.Visible := FALSE ; |
||
2616 | // Unit?s
|
||
2617 | CBAA4.Items.Add (Format ('%s/%s', [StrG, StrJ])) ;
|
||
2618 | CBAA4.Items.Add (Format ('%% %s', [StrLys])) ;
|
||
2619 | CBAA4.Items.Add (Format ('%s/%s %s', [StrG, StrMJ, StrED])) ;
|
||
2620 | CBAA4.Items.Add (Format ('%s/%s %s', [StrG, StrMJ, StrEM])) ;
|
||
2621 | CBAA4.Items.Add (Format ('%s/%s %s', [StrG, StrMJ, StrEN])) ;
|
||
2622 | CBAA4.Items.Add (Format ('%s/%s %s', [StrG, StrKg, StrAlimentUnit])) ;
|
||
2623 | end ;
|
||
2624 | end ;
|
||
2625 | CBAA4.ItemIndex := 0 ;
|
||
2626 | AffGraphAA ; |
||
2627 | end ;
|
||
2628 | |||
2629 | procedure TFResSimulT.CBAA2Change (Sender : TObject) ;
|
||
2630 | begin
|
||
2631 | AffGraphAA ; |
||
2632 | end ;
|
||
2633 | |||
2634 | procedure TFResSimulT.CBAA3Change (Sender : TObject) ;
|
||
2635 | begin
|
||
2636 | AffGraphAA ; |
||
2637 | end ;
|
||
2638 | |||
2639 | procedure TFResSimulT.CBAA4Change (Sender : TObject) ;
|
||
2640 | begin
|
||
2641 | AffGraphAA ; |
||
2642 | end ;
|
||
2643 | |||
2644 | procedure TFResSimulT.CBAA5Change (Sender : TObject) ;
|
||
2645 | begin
|
||
2646 | AffGraphAA ; |
||
2647 | end ;
|
||
2648 | |||
2649 | /////////////////
|
||
2650 | // Energie //
|
||
2651 | /////////////////
|
||
2652 | procedure TFResSimulT.InitNRJ ;
|
||
2653 | const
|
||
2654 | TabColor : array[0..9] of TColor |
||
2655 | = (clTeal, clYellow, clOlive, clAqua, clFuchsia, clPurple, clWhite, clBlue, |
||
2656 | clLime, clRed) ; |
||
2657 | var
|
||
2658 | i : integer ; |
||
2659 | begin
|
||
2660 | // ListNRJ : liste pour l'?nergie
|
||
2661 | ListNRJ := TStringList.Create ; |
||
2662 | ListNRJ.Assign (LBNRJ.Items) ; |
||
2663 | // PieNRJ : s?rie (camembert) graphique
|
||
2664 | PieNRJ := TPieSeries.Create (Graph) ; |
||
2665 | PieNRJ.ParentChart := Graph ; |
||
2666 | PieNRJ.Circled := TRUE ; |
||
2667 | PieNRJ.Marks.ArrowLength := 24 ;
|
||
2668 | PieNRJ.Marks.Arrow.Color := clBlack ; |
||
2669 | PieNRJ.Marks.Brush.Style := bsClear ; |
||
2670 | PieNRJ.Marks.Frame.Visible := FALSE ; |
||
2671 | PieNRJ.ValueFormat := Format ('# ##0 %s', [StrMJ]) ;
|
||
2672 | PieNRJ.PercentFormat := '##0 %' ;
|
||
2673 | Graph.AddSeries (PieNRJ) ; |
||
2674 | // AreaNRJ : s?ries (aires) graphiques
|
||
2675 | SetLength (AreaNRJ, ListNRJ.Count) ; |
||
2676 | for i := 0 to ListNRJ.Count - 1 do |
||
2677 | begin
|
||
2678 | AreaNRJ[i] := TAreaSeries.Create (Graph) ; |
||
2679 | AreaNRJ[i].ParentChart := Graph ; |
||
2680 | AreaNRJ[i].Title := ListNRJ[i] ; |
||
2681 | AreaNRJ[i].SeriesColor := TabColor[i] ; |
||
2682 | AreaNRJ[i].AreaLinesPen.Visible := FALSE ; |
||
2683 | Graph.AddSeries (AreaNRJ[i]) ; |
||
2684 | end ;
|
||
2685 | // BarNRJ : s?ries (barres) graphiques
|
||
2686 | SetLength (BarNRJ, ListNRJ.Count) ; |
||
2687 | for i := 0 to ListNRJ.Count - 1 do |
||
2688 | begin
|
||
2689 | BarNRJ[i] := TBarSeries.Create (Graph) ; |
||
2690 | BarNRJ[i].ParentChart := Graph ; |
||
2691 | BarNRJ[i].Title := ListNRJ[i] ; |
||
2692 | BarNRJ[i].SeriesColor := TabColor[i] ; |
||
2693 | BarNRJ[i].BarPen.Color := BarNRJ[i].SeriesColor ; |
||
2694 | BarNRJ[i].Marks.Visible := FALSE ; |
||
2695 | Graph.AddSeries (BarNRJ[i]) ; |
||
2696 | end ;
|
||
2697 | end ;
|
||
2698 | |||
2699 | procedure TFResSimulT.AffGraphNRJ ;
|
||
2700 | var
|
||
2701 | i, j, k : integer ; |
||
2702 | x, y, t, p : double ; |
||
2703 | s, csv : string ;
|
||
2704 | |||
2705 | // Abscisse
|
||
2706 | function NRJX : double ;
|
||
2707 | begin
|
||
2708 | case CBNRJ1.ItemIndex of |
||
2709 | 1 : // R?partition dynamique |
||
2710 | case CBNRJ2D.ItemIndex of |
||
2711 | 0 : // Age |
||
2712 | result := PresSimulT.TabResult[1, j] ;
|
||
2713 | 1 : // Dur?e |
||
2714 | result := j - 1 ;
|
||
2715 | else
|
||
2716 | result := 0 ;
|
||
2717 | end ;
|
||
2718 | 2 : // R?partition par p?riode |
||
2719 | case CBNRJ2P.ItemIndex of |
||
2720 | 0 : // Cycle |
||
2721 | result := PResSimulT.TabResult[2, j] ;
|
||
2722 | 1 : // Stade |
||
2723 | result := PResSimulT.TabResult[3, j] ;
|
||
2724 | else
|
||
2725 | result := 0 ;
|
||
2726 | end ;
|
||
2727 | else
|
||
2728 | result := 0 ;
|
||
2729 | end ;
|
||
2730 | end ;
|
||
2731 | |||
2732 | // Ordonn?e
|
||
2733 | function NRJY : double ;
|
||
2734 | var
|
||
2735 | h : integer ; |
||
2736 | v, d, EBIng, EDIng, EMIng, EMEnt, EMThe, EMAct, Chaleur, ENProd, Deficit, |
||
2737 | ENProt, ENLip, EMProd, EMRes : double ; |
||
2738 | begin
|
||
2739 | case CBNRJ1.ItemIndex of |
||
2740 | 0 : // R?partition globale |
||
2741 | begin
|
||
2742 | v := 0 ;
|
||
2743 | case i of |
||
2744 | 0 : // Indigestible |
||
2745 | if CBNRJ3.ItemIndex = 0 |
||
2746 | then // EB |
||
2747 | for h := 1 to PresSimulT.NbJSim do |
||
2748 | begin
|
||
2749 | EBIng := PresSimulT.TabResult[13, h] ;
|
||
2750 | EDIng := PresSimulT.TabResult[71, h] ;
|
||
2751 | v := v + EBIng - EDIng ; |
||
2752 | end ;
|
||
2753 | 1 : // M?thane et urines |
||
2754 | if CBNRJ3.ItemIndex <= 1 |
||
2755 | then // EB ou ED |
||
2756 | for h := 1 to PresSimulT.NbJSim do |
||
2757 | begin
|
||
2758 | EDIng := PresSimulT.TabResult[71, h] ;
|
||
2759 | EMIng := PresSimulT.TabResult[72, h] ;
|
||
2760 | v := v + EDIng - EMIng ; |
||
2761 | end ;
|
||
2762 | 2 : // Entretien et activit? |
||
2763 | for h := 1 to PresSimulT.NbJSim do |
||
2764 | begin
|
||
2765 | EMEnt := PresSimulT.TabResult[74, h] ;
|
||
2766 | EMAct := PresSimulT.TabResult[76, h] ;
|
||
2767 | if CBNRJ3.ItemIndex = 3 |
||
2768 | then // EN |
||
2769 | v := v + (EMEnt + EMAct) * KGest |
||
2770 | else // EB, ED ou EM |
||
2771 | v := v + EMEnt + EMAct ; |
||
2772 | end ;
|
||
2773 | 3 : // Thermor?gulation |
||
2774 | for h := 1 to PresSimulT.NbJSim do |
||
2775 | begin
|
||
2776 | EMThe := PresSimulT.TabResult[75, h] ;
|
||
2777 | v := v + EMThe ; |
||
2778 | end ;
|
||
2779 | 4 : // Extrachaleur |
||
2780 | if CBNRJ3.ItemIndex <= 2 |
||
2781 | then // EB ou ED ou EM |
||
2782 | for h := 1 to PresSimulT.NbJSim do |
||
2783 | begin
|
||
2784 | Chaleur := PresSimulT.TabResult[70, h] ;
|
||
2785 | EMEnt := PresSimulT.TabResult[74, h] ;
|
||
2786 | EMThe := PresSimulT.TabResult[75, h] ;
|
||
2787 | EMAct := PresSimulT.TabResult[76, h] ;
|
||
2788 | if PresSimulT.TabResult[3, h] = 1 |
||
2789 | then // Lactation |
||
2790 | begin
|
||
2791 | EMIng := PresSimulT.TabResult[72, h] ;
|
||
2792 | EMProd := PresSimulT.TabResult[77, h] ;
|
||
2793 | EMRes := EMIng - EMEnt - EMThe - EMAct - EMProd ; |
||
2794 | if EMRes > 0 |
||
2795 | then // D?p?t |
||
2796 | v := v + Chaleur - EMEnt - EMThe - EMAct |
||
2797 | else // Mobilisation |
||
2798 | v := v + Chaleur - EMEnt - EMThe - EMAct - EMRes * KL / KResL * (1 - KResL) ;
|
||
2799 | end
|
||
2800 | else
|
||
2801 | v := v + Chaleur - EMEnt - EMThe - EMAct ; |
||
2802 | end ;
|
||
2803 | 5 : // Port?e |
||
2804 | for h := 1 to PresSimulT.NbJSim do |
||
2805 | if PresSimulT.TabResult[3, h] = 0 |
||
2806 | then // Gestation |
||
2807 | begin
|
||
2808 | ENProd := PresSimulT.TabResult[77, h] * KU ;
|
||
2809 | ENProt := PresSimulT.TabResult[63, h] * 23.8 / 1000 ; |
||
2810 | ENLip := PresSimulT.TabResult[66, h] * 39.7 / 1000 ; |
||
2811 | Deficit := Abs (Min (ENProt, 0) + Min (ENLip, 0)) ; |
||
2812 | if Deficit > Max (ENProt, 0) |
||
2813 | then // Deficit |
||
2814 | v := v + Max (ENProd + Max (ENProt, 0) - Deficit, 0) |
||
2815 | else
|
||
2816 | v := v + ENProd ; |
||
2817 | end ;
|
||
2818 | 6 : // Lait |
||
2819 | for h := 1 to PresSimulT.NbJSim do |
||
2820 | if PresSimulT.TabResult[3, h] = 1 |
||
2821 | then // Lactation |
||
2822 | begin
|
||
2823 | ENProd := PresSimulT.TabResult[77, h] * KL ;
|
||
2824 | ENProt := PresSimulT.TabResult[63, h] * 23.8 / 1000 ; |
||
2825 | ENLip := PresSimulT.TabResult[66, h] * 39.7 / 1000 ; |
||
2826 | Deficit := Abs (Min (ENProt, 0) + Min (ENLip, 0)) * KResL ; |
||
2827 | v := v + Max (ENProd - Deficit, 0) ;
|
||
2828 | end ;
|
||
2829 | 7 : // d?p?t de prot?ines |
||
2830 | for h := 1 to PresSimulT.NbJSim do |
||
2831 | if PresSimulT.TabResult[3, h] <> 1 |
||
2832 | then // Gestation ou ISSF |
||
2833 | begin
|
||
2834 | ENProt := PresSimulT.TabResult[63, h] * 23.8 / 1000 ; |
||
2835 | ENLip := PresSimulT.TabResult[66, h] * 39.7 / 1000 ; |
||
2836 | Deficit := Abs (Min (ENProt, 0) + Min (ENLip, 0)) ; |
||
2837 | v := v + Max (ENProt - Deficit, 0) ;
|
||
2838 | end ;
|
||
2839 | 8 : // D?p?t de lipides |
||
2840 | for h := 1 to PresSimulT.NbJSim do |
||
2841 | begin
|
||
2842 | ENLip := PresSimulT.TabResult[66, h] * 39.7 / 1000 ; |
||
2843 | v := v + Max (ENLip, 0) ;
|
||
2844 | end ;
|
||
2845 | 9 : // D?ficit (mobilisation) |
||
2846 | for h := 1 to PresSimulT.NbJSim do |
||
2847 | begin
|
||
2848 | ENProt := PresSimulT.TabResult[63, h] * 23.8 / 1000 ; |
||
2849 | ENLip := PresSimulT.TabResult[66, h] * 39.7 / 1000 ; |
||
2850 | if PresSimulT.TabResult[3, h] = 1 |
||
2851 | then // Lactation |
||
2852 | begin
|
||
2853 | ENProd := PresSimulT.TabResult[77, h] * KL ;
|
||
2854 | Deficit := (Max (- ENProt, 0) + Max (- ENLip, 0)) * KResL ; |
||
2855 | if Deficit > ENProd
|
||
2856 | then // on limite le d?ficit ? la production de lait |
||
2857 | Deficit := ENProd ; |
||
2858 | end
|
||
2859 | else
|
||
2860 | Deficit := Max (- ENProt, 0) + Max (- ENLip, 0) ; |
||
2861 | v := v + Deficit ; |
||
2862 | end ;
|
||
2863 | end ;
|
||
2864 | result := v ; |
||
2865 | end ;
|
||
2866 | 1 : // R?partition dynamique |
||
2867 | begin
|
||
2868 | // Diviseur
|
||
2869 | case CBNRJ4.ItemIndex of |
||
2870 | 1 : // PV^0.75 |
||
2871 | d := Power (PResSimulT.TabResult[58, j], 0.75) ; |
||
2872 | 2 : // Aliment ing?r? |
||
2873 | d := PResSimulT.TabResult[11, j] ;
|
||
2874 | else
|
||
2875 | d := 1 ;
|
||
2876 | end ;
|
||
2877 | case i of |
||
2878 | 0 : // Indigestible |
||
2879 | if CBNRJ3.ItemIndex = 0 |
||
2880 | then // EB |
||
2881 | begin
|
||
2882 | EBIng := PresSimulT.TabResult[13, j] ;
|
||
2883 | EDIng := PresSimulT.TabResult[71, j] ;
|
||
2884 | v := EBIng - EDIng ; |
||
2885 | end
|
||
2886 | else
|
||
2887 | v := 0 ;
|
||
2888 | 1 : // M?thane et urines |
||
2889 | if CBNRJ3.ItemIndex <= 1 |
||
2890 | then // EB ou ED |
||
2891 | begin
|
||
2892 | EDIng := PresSimulT.TabResult[71, j] ;
|
||
2893 | EMIng := PresSimulT.TabResult[72, j] ;
|
||
2894 | v := EDIng - EMIng ; |
||
2895 | end
|
||
2896 | else
|
||
2897 | v := 0 ;
|
||
2898 | 2 : // Entretien et activit? |
||
2899 | begin
|
||
2900 | EMEnt := PresSimulT.TabResult[74, j] ;
|
||
2901 | EMAct := PresSimulT.TabResult[76, j] ;
|
||
2902 | if CBNRJ3.ItemIndex = 3 |
||
2903 | then // EN |
||
2904 | v := (EMEnt + EMAct) * KGest |
||
2905 | else // EB, ED ou EM |
||
2906 | v := EMEnt + EMAct ; |
||
2907 | end ;
|
||
2908 | 3 : // Thermor?gulation |
||
2909 | begin
|
||
2910 | EMThe := PresSimulT.TabResult[75, j] ;
|
||
2911 | v := EMThe ; |
||
2912 | end ;
|
||
2913 | 4 : // Extrachaleur |
||
2914 | if CBNRJ3.ItemIndex <= 2 |
||
2915 | then // EB ou ED ou EM |
||
2916 | begin
|
||
2917 | Chaleur := PresSimulT.TabResult[70, j] ;
|
||
2918 | EMEnt := PresSimulT.TabResult[74, j] ;
|
||
2919 | EMThe := PresSimulT.TabResult[75, j] ;
|
||
2920 | EMAct := PresSimulT.TabResult[76, j] ;
|
||
2921 | if PresSimulT.TabResult[3, j] = 1 |
||
2922 | then // Lactation |
||
2923 | begin
|
||
2924 | EMIng := PresSimulT.TabResult[72, j] ;
|
||
2925 | EMProd := PresSimulT.TabResult[77, j] ;
|
||
2926 | EMRes := EMIng - EMEnt - EMThe - EMAct - EMProd ; |
||
2927 | if EMRes > 0 |
||
2928 | then // D?p?t |
||
2929 | v := Chaleur - EMEnt - EMThe - EMAct |
||
2930 | else // Mobilisation |
||
2931 | v := Chaleur - EMEnt - EMThe - EMAct - EMRes * KL / KResL * (1 - KResL) ;
|
||
2932 | end
|
||
2933 | else
|
||
2934 | v := Chaleur - EMEnt - EMThe - EMAct ; |
||
2935 | end
|
||
2936 | else
|
||
2937 | v := 0 ;
|
||
2938 | 5 : // Port?e |
||
2939 | if PresSimulT.TabResult[3, j] = 0 |
||
2940 | then // Gestation |
||
2941 | begin
|
||
2942 | ENProd := PresSimulT.TabResult[77, j] * KU ;
|
||
2943 | ENProt := PresSimulT.TabResult[63, j] * 23.8 / 1000 ; |
||
2944 | ENLip := PresSimulT.TabResult[66, j] * 39.7 / 1000 ; |
||
2945 | Deficit := Abs (Min (ENProt, 0) + Min (ENLip, 0)) ; |
||
2946 | if Deficit > Max (ENProt, 0) |
||
2947 | then // Deficit |
||
2948 | v := Max (ENProd + Max (ENProt, 0) - Deficit, 0) |
||
2949 | else
|
||
2950 | v := ENProd ; |
||
2951 | end
|
||
2952 | else
|
||
2953 | v := 0 ;
|
||
2954 | 6 : // Lait |
||
2955 | if PresSimulT.TabResult[3, j] = 1 |
||
2956 | then // Lactation |
||
2957 | begin
|
||
2958 | ENProd := PresSimulT.TabResult[77, j] * KL ;
|
||
2959 | ENProt := PresSimulT.TabResult[63, j] * 23.8 / 1000 ; |
||
2960 | ENLip := PresSimulT.TabResult[66, j] * 39.7 / 1000 ; |
||
2961 | Deficit := Abs (Min (ENProt, 0) + Min (ENLip, 0)) * KResL ; |
||
2962 | v := Max (ENProd - Deficit, 0) ;
|
||
2963 | end
|
||
2964 | else
|
||
2965 | v := 0 ;
|
||
2966 | 7 : // d?p?t de prot?ines |
||
2967 | if PresSimulT.TabResult[3, j] <> 1 |
||
2968 | then // Gestation ou ISSF |
||
2969 | begin
|
||
2970 | ENProt := PresSimulT.TabResult[63, j] * 23.8 / 1000 ; |
||
2971 | ENLip := PresSimulT.TabResult[66, j] * 39.7 / 1000 ; |
||
2972 | Deficit := Abs (Min (ENProt, 0) + Min (ENLip, 0)) ; |
||
2973 | v := Max (ENProt - Deficit, 0) ;
|
||
2974 | end
|
||
2975 | else
|
||
2976 | v := 0 ;
|
||
2977 | 8 : // D?p?t de lipides |
||
2978 | begin
|
||
2979 | ENLip := PresSimulT.TabResult[66, j] * 39.7 / 1000 ; |
||
2980 | v := Max (ENLip, 0) ;
|
||
2981 | end ;
|
||
2982 | 9 : // D?ficit (mobilisation) |
||
2983 | begin
|
||
2984 | ENProt := PresSimulT.TabResult[63, j] * 23.8 / 1000 ; |
||
2985 | ENLip := PresSimulT.TabResult[66, j] * 39.7 / 1000 ; |
||
2986 | if PresSimulT.TabResult[3, j] = 1 |
||
2987 | then // Lactation |
||
2988 | begin
|
||
2989 | ENProd := PresSimulT.TabResult[77, j] * KL ;
|
||
2990 | Deficit := (Max (- ENProt, 0) + Max (- ENLip, 0)) * KResL ; |
||
2991 | if Deficit > ENProd
|
||
2992 | then // on limite le d?ficit ? la production de lait |
||
2993 | Deficit := ENProd ; |
||
2994 | end
|
||
2995 | else
|
||
2996 | Deficit := Max (- ENProt, 0) + Max (- ENLip, 0) ; |
||
2997 | v := Deficit ; |
||
2998 | end ;
|
||
2999 | else
|
||
3000 | v := 0 ;
|
||
3001 | end ;
|
||
3002 | result := v / d ; |
||
3003 | end ;
|
||
3004 | 2 : // R?partition par p?riode |
||
3005 | begin
|
||
3006 | // Diviseur
|
||
3007 | case CBNRJ4.ItemIndex of |
||
3008 | 1 : // Dur?e |
||
3009 | d := j - k ; |
||
3010 | 2 : // Aliment ing?r? |
||
3011 | begin
|
||
3012 | d := 0 ;
|
||
3013 | for h := k to j - 1 do |
||
3014 | d := d + PResSimulT.TabResult[11, h] ;
|
||
3015 | end ;
|
||
3016 | else
|
||
3017 | d := 1 ;
|
||
3018 | end ;
|
||
3019 | v := 0 ;
|
||
3020 | case i of |
||
3021 | 0 : // Indigestible |
||
3022 | if CBNRJ3.ItemIndex = 0 |
||
3023 | then // EB |
||
3024 | for h := k to j - 1 do |
||
3025 | begin
|
||
3026 | EBIng := PresSimulT.TabResult[13, h] ;
|
||
3027 | EDIng := PresSimulT.TabResult[71, h] ;
|
||
3028 | v := v + EBIng - EDIng ; |
||
3029 | end ;
|
||
3030 | 1 : // M?thane et urines |
||
3031 | if CBNRJ3.ItemIndex <= 1 |
||
3032 | then // EB ou ED |
||
3033 | for h := k to j - 1 do |
||
3034 | begin
|
||
3035 | EDIng := PresSimulT.TabResult[71, h] ;
|
||
3036 | EMIng := PresSimulT.TabResult[72, h] ;
|
||
3037 | v := v + EDIng - EMIng ; |
||
3038 | end ;
|
||
3039 | 2 : // Entretien et activit? |
||
3040 | for h := k to j - 1 do |
||
3041 | begin
|
||
3042 | EMEnt := PresSimulT.TabResult[74, h] ;
|
||
3043 | EMAct := PresSimulT.TabResult[76, h] ;
|
||
3044 | if CBNRJ3.ItemIndex = 3 |
||
3045 | then // EN |
||
3046 | v := v + (EMEnt + EMAct) * KGest |
||
3047 | else // EB, ED ou EM |
||
3048 | v := v + EMEnt + EMAct ; |
||
3049 | end ;
|
||
3050 | 3 : // Thermor?gulation |
||
3051 | for h := k to j - 1 do |
||
3052 | begin
|
||
3053 | EMThe := PresSimulT.TabResult[75, h] ;
|
||
3054 | v := v + EMThe ; |
||
3055 | end ;
|
||
3056 | 4 : // Extrachaleur |
||
3057 | if CBNRJ3.ItemIndex <= 2 |
||
3058 | then // EB ou ED ou EM |
||
3059 | for h := k to j - 1 do |
||
3060 | begin
|
||
3061 | Chaleur := PresSimulT.TabResult[70, h] ;
|
||
3062 | EMEnt := PresSimulT.TabResult[74, h] ;
|
||
3063 | EMThe := PresSimulT.TabResult[75, h] ;
|
||
3064 | EMAct := PresSimulT.TabResult[76, h] ;
|
||
3065 | if PresSimulT.TabResult[3, h] = 1 |
||
3066 | then // Lactation |
||
3067 | begin
|
||
3068 | EMIng := PresSimulT.TabResult[72, h] ;
|
||
3069 | EMProd := PresSimulT.TabResult[77, h] ;
|
||
3070 | EMRes := EMIng - EMEnt - EMThe - EMAct - EMProd ; |
||
3071 | if EMRes > 0 |
||
3072 | then // D?p?t |
||
3073 | v := v + Chaleur - EMEnt - EMThe - EMAct |
||
3074 | else // Mobilisation |
||
3075 | v := v + Chaleur - EMEnt - EMThe - EMAct - EMRes * KL / KResL * (1 - KResL) ;
|
||
3076 | end
|
||
3077 | else
|
||
3078 | v := v + Chaleur - EMEnt - EMThe - EMAct ; |
||
3079 | end ;
|
||
3080 | 5 : // Port?e |
||
3081 | for h := k to j - 1 do |
||
3082 | if PresSimulT.TabResult[3, h] = 0 |
||
3083 | then // Gestation |
||
3084 | begin
|
||
3085 | ENProd := PresSimulT.TabResult[77, h] * KU ;
|
||
3086 | ENProt := PresSimulT.TabResult[63, h] * 23.8 / 1000 ; |
||
3087 | ENLip := PresSimulT.TabResult[66, h] * 39.7 / 1000 ; |
||
3088 | Deficit := Abs (Min (ENProt, 0) + Min (ENLip, 0)) ; |
||
3089 | if Deficit > Max (ENProt, 0) |
||
3090 | then // Deficit |
||
3091 | v := v + Max (ENProd + Max (ENProt, 0) - Deficit, 0) |
||
3092 | else
|
||
3093 | v := v + ENProd ; |
||
3094 | end ;
|
||
3095 | 6 : // Lait |
||
3096 | for h := k to j - 1 do |
||
3097 | if PresSimulT.TabResult[3, h] = 1 |
||
3098 | then // Lactation |
||
3099 | begin
|
||
3100 | ENProd := PresSimulT.TabResult[77, h] * KL ;
|
||
3101 | ENProt := PresSimulT.TabResult[63, h] * 23.8 / 1000 ; |
||
3102 | ENLip := PresSimulT.TabResult[66, h] * 39.7 / 1000 ; |
||
3103 | Deficit := Abs (Min (ENProt, 0) + Min (ENLip, 0)) * KResL ; |
||
3104 | v := v + Max (ENProd - Deficit, 0) ;
|
||
3105 | end ;
|
||
3106 | 7 : // d?p?t de prot?ines |
||
3107 | for h := k to j - 1 do |
||
3108 | if PresSimulT.TabResult[3, h] <> 1 |
||
3109 | then // Gestation ou ISSF |
||
3110 | begin
|
||
3111 | ENProt := PresSimulT.TabResult[63, h] * 23.8 / 1000 ; |
||
3112 | ENLip := PresSimulT.TabResult[66, h] * 39.7 / 1000 ; |
||
3113 | Deficit := Abs (Min (ENProt, 0) + Min (ENLip, 0)) ; |
||
3114 | v := v + Max (ENProt - Deficit, 0) ;
|
||
3115 | end ;
|
||
3116 | 8 : // D?p?t de lipides |
||
3117 | for h := k to j - 1 do |
||
3118 | begin
|
||
3119 | ENLip := PresSimulT.TabResult[66, h] * 39.7 / 1000 ; |
||
3120 | v := v + Max (ENLip, 0) ;
|
||
3121 | end ;
|
||
3122 | 9 : // D?ficit (mobilisation) |
||
3123 | for h := k to j - 1 do |
||
3124 | begin
|
||
3125 | ENProt := PresSimulT.TabResult[63, h] * 23.8 / 1000 ; |
||
3126 | ENLip := PresSimulT.TabResult[66, h] * 39.7 / 1000 ; |
||
3127 | if PresSimulT.TabResult[3, h] = 1 |
||
3128 | then // Lactation |
||
3129 | begin
|
||
3130 | ENProd := PresSimulT.TabResult[77, h] * KL ;
|
||
3131 | Deficit := (Max (- ENProt, 0) + Max (- ENLip, 0)) * KResL ; |
||
3132 | if Deficit > ENProd
|
||
3133 | then // on limite le d?ficit ? la production de lait |
||
3134 | Deficit := ENProd ; |
||
3135 | end
|
||
3136 | else
|
||
3137 | Deficit := Max (- ENProt, 0) + Max (- ENLip, 0) ; |
||
3138 | v := v + Deficit ; |
||
3139 | end ;
|
||
3140 | end ;
|
||
3141 | result := v / d ; |
||
3142 | end ;
|
||
3143 | else
|
||
3144 | result := 0 ;
|
||
3145 | end ;
|
||
3146 | end ;
|
||
3147 | |||
3148 | // AffGraphNRJ
|
||
3149 | begin
|
||
3150 | ResetGraph ; |
||
3151 | case CBNRJ1.ItemIndex of |
||
3152 | 0 : // R?partition globale |
||
3153 | begin
|
||
3154 | Graph.LeftAxis.Title.Caption := Format ('%s (%s)', [CBNRJ3.Text, CBNRJ4.Text]) ;
|
||
3155 | // Graph.View3D := TRUE ;
|
||
3156 | Graph.Legend.Visible := FALSE ; |
||
3157 | Graph.Title.Text.Add (Format ('%s : %s', [CBNRJ3.Text, CBNRJ1.Text])) ;
|
||
3158 | csv := '';
|
||
3159 | for i := 0 to ListNRJ.Count - 1 do |
||
3160 | csv := csv + Format ('%s (%s)', [ListNRJ[i], CBNRJ4.Text]) + ';'; |
||
3161 | MExport.Lines.Append(csv); |
||
3162 | // Affichage du camembert
|
||
3163 | PieNRJ.Active := TRUE ; |
||
3164 | PieNRJ.Clear ; |
||
3165 | if CBNRJ4.ItemIndex = 1 |
||
3166 | then // % |
||
3167 | PieNRJ.Marks.Style := smsLabelPercent |
||
3168 | else
|
||
3169 | PieNRJ.Marks.Style := smsLabelValue ; |
||
3170 | t := 0 ;
|
||
3171 | csv := '';
|
||
3172 | for i := 0 to ListNRJ.Count - 1 do |
||
3173 | begin
|
||
3174 | y := NRJY ; |
||
3175 | if y > PICO
|
||
3176 | then
|
||
3177 | PieNRJ.AddPie (y, ListNRJ[i], AreaNRJ[i].SeriesColor) ; |
||
3178 | t := t + y ; |
||
3179 | csv := csv + FloatToStrF(y, ffFixed, 15, 15) + ';'; |
||
3180 | end ;
|
||
3181 | Graph.SubTitle.Text.Add (Format ('%s : %1.0f %s', [StrTotal, t, StrMJ])) ;
|
||
3182 | MExport.Lines.Append(csv); |
||
3183 | end ;
|
||
3184 | 1 : // R?partition dynamique |
||
3185 | begin
|
||
3186 | Graph.LeftAxis.Title.Caption := Format ('%s (%s)', [CBNRJ3.Text, CBNRJ4.Text]) ;
|
||
3187 | Graph.BottomAxis.Title.Caption := CBNRJ2D.Text ; |
||
3188 | Graph.Title.Text.Add (Format ('%s : %s', [CBNRJ3.Text, CBNRJ1.Text])) ;
|
||
3189 | csv := CBNRJ2D.Text; |
||
3190 | for i := 0 to ListNRJ.Count - 1 do |
||
3191 | csv := csv + ';' + Format ('%s (%s)', [ListNRJ[i], CBNRJ4.Text]); |
||
3192 | MExport.Lines.Append(csv); |
||
3193 | // Affichage des aires
|
||
3194 | for i := 0 to ListNRJ.Count - 1 do |
||
3195 | AreaNRJ[i].Active := TRUE ; |
||
3196 | for i := 0 to ListNRJ.Count - 1 do |
||
3197 | AreaNRJ[i].Clear ; |
||
3198 | if CBNRJ4.ItemIndex = 3 |
||
3199 | then // % |
||
3200 | for i := 0 to ListNRJ.Count - 1 do |
||
3201 | AreaNRJ[i].MultiArea := maStacked100 |
||
3202 | else
|
||
3203 | for i := 0 to ListNRJ.Count - 1 do |
||
3204 | AreaNRJ[i].MultiArea := maStacked ; |
||
3205 | for j := 1 to PResSimulT.NbJSim do |
||
3206 | begin
|
||
3207 | csv := FloatToStrF(NRJX, ffFixed, 15, 15); |
||
3208 | for i := 0 to ListNRJ.Count - 1 do |
||
3209 | begin
|
||
3210 | AreaNRJ[i].AddXY (NRJX, NRJY, '', clTeeColor) ;
|
||
3211 | csv := csv + ';' + FloatToStrF(NRJY, ffFixed, 15, 15); |
||
3212 | end;
|
||
3213 | MExport.Lines.Append(csv); |
||
3214 | end;
|
||
3215 | end ;
|
||
3216 | 2 : // R?partition par p?riode |
||
3217 | begin
|
||
3218 | Graph.LeftAxis.Title.Caption := Format ('%s (%s)', [CBNRJ3.Text, CBNRJ4.Text]) ;
|
||
3219 | Graph.BottomAxis.Title.Caption := CBNRJ2P.Text ; |
||
3220 | Graph.Title.Text.Add (Format ('%s : %s', [CBNRJ3.Text, CBNRJ1.Text])) ;
|
||
3221 | csv := CBNRJ2P.Text; |
||
3222 | for i := 0 to ListNRJ.Count - 1 do |
||
3223 | csv := csv + ';' + Format ('%s (%s)', [ListNRJ[i], CBNRJ4.Text]); |
||
3224 | MExport.Lines.Append(csv); |
||
3225 | // Affichage des barres
|
||
3226 | for i := 0 to ListNRJ.Count - 1 do |
||
3227 | BarNRJ[i].Active := TRUE ; |
||
3228 | for i := 0 to ListNRJ.Count - 1 do |
||
3229 | BarNRJ[i].Clear ; |
||
3230 | if CBNRJ4.ItemIndex = 3 |
||
3231 | then // % |
||
3232 | for i := 0 to ListNRJ.Count - 1 do |
||
3233 | BarNRJ[i].MultiBar := mbStacked100 |
||
3234 | else
|
||
3235 | for i := 0 to ListNRJ.Count - 1 do |
||
3236 | BarNRJ[i].MultiBar := mbStacked ; |
||
3237 | j := 1 ;
|
||
3238 | x := NRJX ; |
||
3239 | k := 1 ;
|
||
3240 | if PResSimulT.NbJSim > 1 |
||
3241 | then
|
||
3242 | for j := 2 to PResSimulT.NbJSim do |
||
3243 | begin
|
||
3244 | p := NRJX ; |
||
3245 | if x <> p
|
||
3246 | then
|
||
3247 | begin
|
||
3248 | // Changement de p?riode
|
||
3249 | s := Format ('%1.0f', [x]) ;
|
||
3250 | csv := s; |
||
3251 | for i := 0 to ListNRJ.Count - 1 do |
||
3252 | begin
|
||
3253 | y := NRJY ; |
||
3254 | if y > PICO
|
||
3255 | then
|
||
3256 | BarNRJ[i].AddBar (y, s, clTeeColor) |
||
3257 | else
|
||
3258 | BarNRJ[i].AddNull (s) ; |
||
3259 | csv := csv + ';' + FloatToStrF(y, ffFixed, 15, 15); |
||
3260 | end ;
|
||
3261 | MExport.Lines.Append(csv); |
||
3262 | x := p ; |
||
3263 | k := j ; |
||
3264 | end ;
|
||
3265 | end ;
|
||
3266 | j := PResSimulT.NbJSim + 1 ;
|
||
3267 | if j > k
|
||
3268 | then
|
||
3269 | begin
|
||
3270 | if CBNRJ2P.ItemIndex = 2 |
||
3271 | then // Globale |
||
3272 | s := ' '
|
||
3273 | else
|
||
3274 | s := Format ('%1.0f', [x]) ;
|
||
3275 | csv := s; |
||
3276 | for i := 0 to ListNRJ.Count - 1 do |
||
3277 | begin
|
||
3278 | y := NRJY ; |
||
3279 | if y > PICO
|
||
3280 | then
|
||
3281 | BarNRJ[i].AddBar (y, s, clTeeColor) |
||
3282 | else
|
||
3283 | BarNRJ[i].AddNull (s) ; |
||
3284 | csv := csv + ';' + FloatToStrF(y, ffFixed, 15, 15); |
||
3285 | end ;
|
||
3286 | MExport.Lines.Append(csv); |
||
3287 | end ;
|
||
3288 | end ;
|
||
3289 | end ;
|
||
3290 | if PieNRJ.Active
|
||
3291 | then
|
||
3292 | begin
|
||
3293 | Graph.View3DOptions.Orthogonal := FALSE ; |
||
3294 | Graph.View3DOptions.Elevation := 315 ;
|
||
3295 | Graph.View3DOptions.Rotation := 360 ;
|
||
3296 | Graph.View3DOptions.Perspective := 0 ;
|
||
3297 | end
|
||
3298 | else
|
||
3299 | begin
|
||
3300 | Graph.View3DOptions.Orthogonal := TRUE ; |
||
3301 | Graph.View3DOptions.Elevation := 345 ;
|
||
3302 | Graph.View3DOptions.Rotation := 345 ;
|
||
3303 | Graph.View3DOptions.Perspective := 15 ;
|
||
3304 | end ;
|
||
3305 | AjustEchelle (Graph) ; |
||
3306 | end ;
|
||
3307 | |||
3308 | procedure TFResSimulT.CBNRJ1Change (Sender : TObject) ;
|
||
3309 | begin
|
||
3310 | CBNRJ4.Items.Clear ; |
||
3311 | case CBNRJ1.ItemIndex of |
||
3312 | 0 : // R?partition globale |
||
3313 | begin
|
||
3314 | CBNRJ2D.Visible := FALSE ; |
||
3315 | CBNRJ2P.Visible := FALSE ; |
||
3316 | CBNRJ3.Visible := TRUE ; |
||
3317 | CBNRJ4.Visible := TRUE ; |
||
3318 | // Unit?s
|
||
3319 | CBNRJ4.Items.Add (StrMJ) ; |
||
3320 | CBNRJ4.Items.Add ('%') ;
|
||
3321 | end ;
|
||
3322 | 1 : // R?partition dynamique |
||
3323 | begin
|
||
3324 | CBNRJ2D.Visible := TRUE ; |
||
3325 | CBNRJ2P.Visible := FALSE ; |
||
3326 | CBNRJ3.Visible := TRUE ; |
||
3327 | CBNRJ4.Visible := TRUE ; |
||
3328 | // Unit?s
|
||
3329 | CBNRJ4.Items.Add (Format ('%s/%s', [StrMJ, StrJ])) ;
|
||
3330 | CBNRJ4.Items.Add (Format ('%s/(%s %s)^0.75/%s', [StrMJ, StrKg, StrPV, StrJ])) ;
|
||
3331 | CBNRJ4.Items.Add (Format ('%s/%s %s', [StrMJ, StrKg, StrAlimentUnit])) ;
|
||
3332 | CBNRJ4.Items.Add ('%') ;
|
||
3333 | end ;
|
||
3334 | 2 : // R?partition par p?riode |
||
3335 | begin
|
||
3336 | CBNRJ2D.Visible := FALSE ; |
||
3337 | CBNRJ2P.Visible := TRUE ; |
||
3338 | CBNRJ3.Visible := TRUE ; |
||
3339 | CBNRJ4.Visible := TRUE ; |
||
3340 | // Unit?s
|
||
3341 | CBNRJ4.Items.Add (StrMJ) ; |
||
3342 | CBNRJ4.Items.Add (Format ('%s/%s', [StrMJ, StrJ])) ;
|
||
3343 | CBNRJ4.Items.Add (Format ('%s/%s %s', [StrMJ, StrKg, StrAlimentUnit])) ;
|
||
3344 | CBNRJ4.Items.Add ('%') ;
|
||
3345 | end ;
|
||
3346 | end ;
|
||
3347 | CBNRJ4.ItemIndex := 0 ;
|
||
3348 | AffGraphNRJ ; |
||
3349 | end ;
|
||
3350 | |||
3351 | procedure TFResSimulT.CBNRJ2Change (Sender : TObject) ;
|
||
3352 | begin
|
||
3353 | AffGraphNRJ ; |
||
3354 | end ;
|
||
3355 | |||
3356 | procedure TFResSimulT.CBNRJ3Change (Sender : TObject) ;
|
||
3357 | begin
|
||
3358 | AffGraphNRJ ; |
||
3359 | end ;
|
||
3360 | |||
3361 | procedure TFResSimulT.CBNRJ4Change (Sender : TObject) ;
|
||
3362 | begin
|
||
3363 | AffGraphNRJ ; |
||
3364 | end ;
|
||
3365 | |||
3366 | //////////////////
|
||
3367 | // Min?raux //
|
||
3368 | //////////////////
|
||
3369 | procedure TFResSimulT.InitMin ;
|
||
3370 | const
|
||
3371 | TabColor1 : array[0..6] of TColor |
||
3372 | = (clTeal, clOlive, clPurple, clPink, clWhite, clRed, clGreen) ; |
||
3373 | TabColor2 : array[1..2] of TColor |
||
3374 | = (clGreen, clRed) ; |
||
3375 | var
|
||
3376 | i : integer ; |
||
3377 | begin
|
||
3378 | // ListMin : liste pour les min?raux
|
||
3379 | ListMin := TStringList.Create ; |
||
3380 | ListMin.Assign (LBMin.Items) ; |
||
3381 | // PieMin : s?rie (camembert) graphique
|
||
3382 | PieMin := TPieSeries.Create (Graph) ; |
||
3383 | PieMin.ParentChart := Graph ; |
||
3384 | PieMin.Circled := TRUE ; |
||
3385 | PieMin.Marks.ArrowLength := 24 ;
|
||
3386 | PieMin.Marks.Arrow.Color := clBlack ; |
||
3387 | PieMin.Marks.Brush.Style := bsClear ; |
||
3388 | PieMin.Marks.Frame.Visible := FALSE ; |
||
3389 | PieMin.ValueFormat := Format ('# ##0 %s', [StrG]) ;
|
||
3390 | PieMin.PercentFormat := '##0 %' ;
|
||
3391 | Graph.AddSeries (PieMin) ; |
||
3392 | // AreaMin : s?ries (aires) graphiques
|
||
3393 | SetLength (AreaMin, ListMin.Count) ; |
||
3394 | for i := 0 to ListMin.Count - 1 do |
||
3395 | begin
|
||
3396 | AreaMin[i] := TAreaSeries.Create (Graph) ; |
||
3397 | AreaMin[i].ParentChart := Graph ; |
||
3398 | AreaMin[i].Title := ListMin[i] ; |
||
3399 | AreaMin[i].SeriesColor := TabColor1[i] ; |
||
3400 | AreaMin[i].AreaLinesPen.Visible := FALSE ; |
||
3401 | Graph.AddSeries (AreaMin[i]) ; |
||
3402 | end ;
|
||
3403 | // BarMin : s?ries (barres) graphiques
|
||
3404 | SetLength (BarMin, ListMin.Count) ; |
||
3405 | for i := 0 to ListMin.Count - 1 do |
||
3406 | begin
|
||
3407 | BarMin[i] := TBarSeries.Create (Graph) ; |
||
3408 | BarMin[i].ParentChart := Graph ; |
||
3409 | BarMin[i].Title := ListMin[i] ; |
||
3410 | BarMin[i].SeriesColor := TabColor1[i] ; |
||
3411 | BarMin[i].BarPen.Color := BarMin[i].SeriesColor ; |
||
3412 | BarMin[i].Marks.Visible := FALSE ; |
||
3413 | Graph.AddSeries (BarMin[i]) ; |
||
3414 | end ;
|
||
3415 | // LineMin : s?ries (lignes) graphiques
|
||
3416 | for i := 1 to 2 do |
||
3417 | begin
|
||
3418 | LineMin[i] := TLineSeries.Create (Graph) ; |
||
3419 | LineMin[i].ParentChart := Graph ; |
||
3420 | if i = 1 |
||
3421 | then // Apport |
||
3422 | LineMin[i].Title := StrApport |
||
3423 | else // Besoin |
||
3424 | LineMin[i].Title := StrBesoin ; |
||
3425 | LineMin[i].SeriesColor := TabColor2[i] ; |
||
3426 | LineMin[i].LinePen.Color := LineMin[i].SeriesColor ; |
||
3427 | LineMin[i].LinePen.Width := 2 ;
|
||
3428 | Graph.AddSeries (LineMin[i]) ; |
||
3429 | end ;
|
||
3430 | end ;
|
||
3431 | |||
3432 | procedure TFResSimulT.AffGraphMin ;
|
||
3433 | var
|
||
3434 | i, j, k : integer ; |
||
3435 | x, y, t, p : double ; |
||
3436 | s, csv : string ;
|
||
3437 | |||
3438 | // Abscisse
|
||
3439 | function MinX : double ;
|
||
3440 | begin
|
||
3441 | case CBMin1.ItemIndex of |
||
3442 | 1 : // R?partition dynamique |
||
3443 | case CBMin2D.ItemIndex of |
||
3444 | 0 : // Age |
||
3445 | result := PResSimulT.TabResult[1, j] ;
|
||
3446 | 1 : // Dur?e |
||
3447 | result := j - 1 ;
|
||
3448 | else
|
||
3449 | result := 0 ;
|
||
3450 | end ;
|
||
3451 | 2 : // R?partition par p?riode |
||
3452 | case CBMin2P.ItemIndex of |
||
3453 | 0 : // Cycle |
||
3454 | result := PResSimulT.TabResult[2, j] ;
|
||
3455 | 1 : // Stade |
||
3456 | result := PResSimulT.TabResult[3, j] ;
|
||
3457 | else
|
||
3458 | result := 0 ;
|
||
3459 | end ;
|
||
3460 | 3 : // Besoin et apport |
||
3461 | case CBMin2D.ItemIndex of |
||
3462 | 0 : // Age |
||
3463 | result := PResSimulT.TabResult[1, j] ;
|
||
3464 | 1 : // Dur?e |
||
3465 | result := j - 1 ;
|
||
3466 | else
|
||
3467 | result := 0 ;
|
||
3468 | end ;
|
||
3469 | else
|
||
3470 | result := 0 ;
|
||
3471 | end ;
|
||
3472 | end ;
|
||
3473 | |||
3474 | // Ordonn?e
|
||
3475 | function MinY : double ;
|
||
3476 | var
|
||
3477 | h, Cycle, Jour : integer ; |
||
3478 | v, d, Ptot, Pdig, PVtot, PVnet, GMQnet, PdsPortee, NesT, Foetus, Placenta, |
||
3479 | Indigestible, Entretien, Portee, Retenu, Lait : double ; |
||
3480 | |||
3481 | // Composition des aliments
|
||
3482 | procedure Composition (jour : integer) ;
|
||
3483 | var
|
||
3484 | Aliment1, Aliment2 : integer ; |
||
3485 | IngereFrais, Taux1, Taux2, IngereSec1, IngereSec2, Ptot1, Ptot2, Pdig1, Pdig2 : double ; |
||
3486 | CC1, CC2 : CompositionChimique ; |
||
3487 | begin
|
||
3488 | IngereFrais := PresSimulT.TabResult[11, jour] ;
|
||
3489 | // Aliment 1
|
||
3490 | Aliment1 := Round (PresSimulT.TabResult[7, jour]) ;
|
||
3491 | if Aliment1 = -1 |
||
3492 | then
|
||
3493 | CC1 := CCVide |
||
3494 | else
|
||
3495 | begin
|
||
3496 | PAliment := ListAliment[FindIdxAliment (FindNomAliment (Aliment1))] ; |
||
3497 | CC1 := PAliment.CC ; |
||
3498 | end ;
|
||
3499 | Taux1 := PresSimulT.TabResult[9, jour] / 100 ; |
||
3500 | IngereSec1 := IngereFrais * Taux1 * CC1.MS / 1000 ;
|
||
3501 | Ptot1 := IngereSec1 * CC1.P ; |
||
3502 | if Aliment1 = -1 |
||
3503 | then
|
||
3504 | Pdig1 := 0
|
||
3505 | else
|
||
3506 | if PAliment.Presentation = 0 |
||
3507 | then // Granul?s |
||
3508 | Pdig1 := IngereSec1 * PAliment.CC.PdigG |
||
3509 | else // Farine |
||
3510 | Pdig1 := IngereSec1 * PAliment.CC.PdigF ; |
||
3511 | // Aliment 2
|
||
3512 | Aliment2 := Round (PresSimulT.TabResult[8, jour]) ;
|
||
3513 | if Aliment2 = -1 |
||
3514 | then
|
||
3515 | CC2 := CCVide |
||
3516 | else
|
||
3517 | begin
|
||
3518 | PAliment := ListAliment[FindIdxAliment (FindNomAliment (Aliment2))] ; |
||
3519 | CC2 := PAliment.CC ; |
||
3520 | end ;
|
||
3521 | Taux2 := PresSimulT.TabResult[10, jour] / 100 ; |
||
3522 | IngereSec2 := IngereFrais * Taux2 * CC2.MS / 1000 ;
|
||
3523 | Ptot2 := IngereSec2 * CC2.P ; |
||
3524 | if Aliment2 = -1 |
||
3525 | then
|
||
3526 | Pdig2 := 0
|
||
3527 | else
|
||
3528 | if PAliment.Presentation = 0 |
||
3529 | then // Granul?s |
||
3530 | Pdig2 := IngereSec2 * PAliment.CC.PdigG |
||
3531 | else // Farine |
||
3532 | Pdig2 := IngereSec2 * PAliment.CC.PdigF ; |
||
3533 | // Cumul
|
||
3534 | Ptot := Ptot1 + Ptot2 ; |
||
3535 | Pdig := Pdig1 + Pdig2 ; |
||
3536 | end ;
|
||
3537 | |||
3538 | begin
|
||
3539 | case CBMin1.ItemIndex of |
||
3540 | 0 : // R?partition globale |
||
3541 | begin
|
||
3542 | v := 0 ;
|
||
3543 | case CBMin3.ItemIndex of |
||
3544 | 0 : // Phosphore |
||
3545 | case i of |
||
3546 | 0 : // Indigestible |
||
3547 | if CBMin5.ItemIndex = 1 |
||
3548 | then // Total |
||
3549 | for h := 1 to PresSimulT.NbJSim do |
||
3550 | begin
|
||
3551 | Composition (h) ; |
||
3552 | Indigestible := Ptot - Pdig ; |
||
3553 | v := v + Indigestible ; |
||
3554 | end ;
|
||
3555 | 1 : // Entretien |
||
3556 | for h := 1 to PresSimulT.NbJSim do |
||
3557 | begin
|
||
3558 | Composition (h) ; |
||
3559 | Indigestible := Ptot - Pdig ; |
||
3560 | PVtot := PResSimulT.TabResult[58, h] ;
|
||
3561 | Entretien := 10 * PVtot / 1000 ; |
||
3562 | if Ptot < Indigestible + Entretien
|
||
3563 | then // D?ficit |
||
3564 | v := v + Ptot - Indigestible |
||
3565 | else
|
||
3566 | v := v + Entretien ; |
||
3567 | end ;
|
||
3568 | 2 : // Port?e |
||
3569 | for h := 1 to PresSimulT.NbJSim do |
||
3570 | if PResSimulT.TabResult[3, h] = 0 |
||
3571 | then // Gestation |
||
3572 | begin
|
||
3573 | Composition (h) ; |
||
3574 | Indigestible := Ptot - Pdig ; |
||
3575 | PVtot := PResSimulT.TabResult[58, h] ;
|
||
3576 | Entretien := 10 * PVtot / 1000 ; |
||
3577 | Cycle := Trunc(PResSimulT.TabResult[2, h]) ;
|
||
3578 | with PPRofilT.Porcelets[Cycle] do |
||
3579 | begin
|
||
3580 | PdsPortee := NesTotaux * PdsNais ; |
||
3581 | NesT := NesTotaux ; |
||
3582 | end ;
|
||
3583 | Jour := Trunc(PResSimulT.TabResult[78, h]) ;
|
||
3584 | Foetus := 6.25 * 6.389 * 0.023998 * PdsPortee |
||
3585 | * Exp(-0.023998 * (Jour - 45) |
||
3586 | - 6.389 * Exp(-0.023998 * (Jour - 45)) |
||
3587 | + 6.389 * Exp(-0.023998 * (115 - 45))) ; |
||
3588 | Placenta := (1.40598 * 0.06250 * Exp(-0.06250 * (Jour - 45)) + 0.00759) |
||
3589 | * Exp(7.34264 - 1.40598 * Exp(-0.06250 * (Jour - 45)) |
||
3590 | + 0.00759 * Jour + 0.06339 * NesT) |
||
3591 | * 0.0096 / 23.8 ; |
||
3592 | Portee := Foetus + Placenta ; |
||
3593 | if Ptot < Indigestible + Entretien + Portee
|
||
3594 | then // D?ficit |
||
3595 | v := v + Max (Ptot - Indigestible - Entretien, 0)
|
||
3596 | else
|
||
3597 | v := v + Portee ; |
||
3598 | end ;
|
||
3599 | 3 : // Retenu |
||
3600 | for h := 1 to PresSimulT.NbJSim do |
||
3601 | if PResSimulT.TabResult[3, h] <> 1 |
||
3602 | then // Gestation ou ISSF |
||
3603 | begin
|
||
3604 | Composition (h) ; |
||
3605 | Indigestible := Ptot - Pdig ; |
||
3606 | PVtot := PResSimulT.TabResult[58, h] ;
|
||
3607 | Entretien := 10 * PVtot / 1000 ; |
||
3608 | if PResSimulT.TabResult[3, h] = 0 |
||
3609 | then // Gestation |
||
3610 | begin
|
||
3611 | Cycle := Trunc(PResSimulT.TabResult[2, h]) ;
|
||
3612 | with PPRofilT.Porcelets[Cycle] do |
||
3613 | begin
|
||
3614 | PdsPortee := NesTotaux * PdsNais ; |
||
3615 | NesT := NesTotaux ; |
||
3616 | end ;
|
||
3617 | Jour := Trunc(PResSimulT.TabResult[78, h]) ;
|
||
3618 | Foetus := 6.25 * 6.389 * 0.023998 * PdsPortee |
||
3619 | * Exp(-0.023998 * (Jour - 45) |
||
3620 | - 6.389 * Exp(-0.023998 * (Jour - 45)) |
||
3621 | + 6.389 * Exp(-0.023998 * (115 - 45))) ; |
||
3622 | Placenta := (1.40598 * 0.06250 * Exp(-0.06250 * (Jour - 45)) + 0.00759) |
||
3623 | * Exp(7.34264 - 1.40598 * Exp(-0.06250 * (Jour - 45)) |
||
3624 | + 0.00759 * Jour + 0.06339 * NesT) |
||
3625 | * 0.0096 / 23.8 ; |
||
3626 | Portee := Foetus + Placenta ; |
||
3627 | end
|
||
3628 | else
|
||
3629 | Portee := 0 ;
|
||
3630 | PVnet := PResSimulT.TabResult[60, h] ;
|
||
3631 | GMQnet := PResSimulT.TabResult[61, h] ;
|
||
3632 | Retenu := Max ((5.4199 - 2 * 0.002857 * PVnet) * GMQnet, 0) ; |
||
3633 | if Ptot < Indigestible + Entretien + Portee + Retenu
|
||
3634 | then // D?ficit |
||
3635 | v := v + Max (Ptot - Indigestible - Entretien - Portee, 0)
|
||
3636 | else
|
||
3637 | v := v + Retenu ; |
||
3638 | end ;
|
||
3639 | 4 : // Lait |
||
3640 | for h := 1 to PresSimulT.NbJSim do |
||
3641 | if PResSimulT.TabResult[3, h] = 1 |
||
3642 | then // Lactation |
||
3643 | begin
|
||
3644 | Composition (h) ; |
||
3645 | Indigestible := Ptot - Pdig ; |
||
3646 | PVtot := PResSimulT.TabResult[58, h] ;
|
||
3647 | Entretien := 10 * PVtot / 1000 ; |
||
3648 | Lait := PResSimulT.TabResult[69, h] * 1.55 ; |
||
3649 | if Ptot < Indigestible + Entretien + Lait
|
||
3650 | then // D?ficit |
||
3651 | v := v + Max (Ptot - Indigestible - Entretien, 0)
|
||
3652 | else
|
||
3653 | v := v + Lait ; |
||
3654 | end ;
|
||
3655 | 5 : // D?ficit |
||
3656 | for h := 1 to PresSimulT.NbJSim do |
||
3657 | begin
|
||
3658 | Composition (h) ; |
||
3659 | Indigestible := Ptot - Pdig ; |
||
3660 | PVtot := PResSimulT.TabResult[58, h] ;
|
||
3661 | Entretien := 10 * PVtot / 1000 ; |
||
3662 | if PResSimulT.TabResult[3, h] = 0 |
||
3663 | then // Gestation |
||
3664 | begin
|
||
3665 | Cycle := Trunc(PResSimulT.TabResult[2, h]) ;
|
||
3666 | with PPRofilT.Porcelets[Cycle] do |
||
3667 | begin
|
||
3668 | PdsPortee := NesTotaux * PdsNais ; |
||
3669 | NesT := NesTotaux ; |
||
3670 | end ;
|
||
3671 | Jour := Trunc(PResSimulT.TabResult[78, h]) ;
|
||
3672 | Foetus := 6.25 * 6.389 * 0.023998 * PdsPortee |
||
3673 | * Exp(-0.023998 * (Jour - 45) |
||
3674 | - 6.389 * Exp(-0.023998 * (Jour - 45)) |
||
3675 | + 6.389 * Exp(-0.023998 * (115 - 45))) ; |
||
3676 | Placenta := (1.40598 * 0.06250 * Exp(-0.06250 * (Jour - 45)) + 0.00759) |
||
3677 | * Exp(7.34264 - 1.40598 * Exp(-0.06250 * (Jour - 45)) |
||
3678 | + 0.00759 * Jour + 0.06339 * NesT) |
||
3679 | * 0.0096 / 23.8 ; |
||
3680 | Portee := Foetus + Placenta ; |
||
3681 | end
|
||
3682 | else
|
||
3683 | Portee := 0 ;
|
||
3684 | if PResSimulT.TabResult[3, h] <> 1 |
||
3685 | then // Gestation ou ISSF |
||
3686 | begin
|
||
3687 | PVnet := PResSimulT.TabResult[60, h] ;
|
||
3688 | GMQnet := PResSimulT.TabResult[61, h] ;
|
||
3689 | Retenu := Max ((5.4199 - 2 * 0.002857 * PVnet) * GMQnet, 0) ; |
||
3690 | end
|
||
3691 | else
|
||
3692 | Retenu := 0 ;
|
||
3693 | if PResSimulT.TabResult[3, h] = 1 |
||
3694 | then // Lactation |
||
3695 | Lait := PResSimulT.TabResult[69, h] * 1.55 |
||
3696 | else
|
||
3697 | Lait := 0 ;
|
||
3698 | if Ptot < Indigestible + Entretien + Portee + Retenu + Lait
|
||
3699 | then
|
||
3700 | v := v + Indigestible + Entretien + Portee + Retenu + Lait - Ptot ; |
||
3701 | end ;
|
||
3702 | 6 : // Exc?s |
||
3703 | for h := 1 to PresSimulT.NbJSim do |
||
3704 | begin
|
||
3705 | Composition (h) ; |
||
3706 | Indigestible := Ptot - Pdig ; |
||
3707 | PVtot := PResSimulT.TabResult[58, h] ;
|
||
3708 | Entretien := 10 * PVtot / 1000 ; |
||
3709 | if PResSimulT.TabResult[3, h] = 0 |
||
3710 | then // Gestation |
||
3711 | begin
|
||
3712 | Cycle := Trunc(PResSimulT.TabResult[2, h]) ;
|
||
3713 | with PPRofilT.Porcelets[Cycle] do |
||
3714 | begin
|
||
3715 | PdsPortee := NesTotaux * PdsNais ; |
||
3716 | NesT := NesTotaux ; |
||
3717 | end ;
|
||
3718 | Jour := Trunc(PResSimulT.TabResult[78, h]) ;
|
||
3719 | Foetus := 6.25 * 6.389 * 0.023998 * PdsPortee |
||
3720 | * Exp(-0.023998 * (Jour - 45) |
||
3721 | - 6.389 * Exp(-0.023998 * (Jour - 45)) |
||
3722 | + 6.389 * Exp(-0.023998 * (115 - 45))) ; |
||
3723 | Placenta := (1.40598 * 0.06250 * Exp(-0.06250 * (Jour - 45)) + 0.00759) |
||
3724 | * Exp(7.34264 - 1.40598 * Exp(-0.06250 * (Jour - 45)) |
||
3725 | + 0.00759 * Jour + 0.06339 * NesT) |
||
3726 | * 0.0096 / 23.8 ; |
||
3727 | Portee := Foetus + Placenta ; |
||
3728 | end
|
||
3729 | else
|
||
3730 | Portee := 0 ;
|
||
3731 | if PResSimulT.TabResult[3, h] <> 1 |
||
3732 | then // Gestation ou ISSF |
||
3733 | begin
|
||
3734 | PVnet := PResSimulT.TabResult[60, h] ;
|
||
3735 | GMQnet := PResSimulT.TabResult[61, h] ;
|
||
3736 | Retenu := Max ((5.4199 - 2 * 0.002857 * PVnet) * GMQnet, 0) ; |
||
3737 | end
|
||
3738 | else
|
||
3739 | Retenu := 0 ;
|
||
3740 | if PResSimulT.TabResult[3, h] = 1 |
||
3741 | then // Lactation |
||
3742 | Lait := PResSimulT.TabResult[69, h] * 1.55 |
||
3743 | else
|
||
3744 | Lait := 0 ;
|
||
3745 | if Ptot > Indigestible + Entretien + Portee + Retenu + Lait
|
||
3746 | then
|
||
3747 | v := v + Ptot - Indigestible - Entretien - Portee - Retenu - Lait ; |
||
3748 | end ;
|
||
3749 | end ;
|
||
3750 | end ;
|
||
3751 | result := v ; |
||
3752 | end ;
|
||
3753 | 1 : // R?partition dynamique |
||
3754 | begin
|
||
3755 | // Diviseur
|
||
3756 | if CBMin4.ItemIndex = 1 |
||
3757 | then // Aliment ing?r? |
||
3758 | d := PResSimulT.TabResult[11, j]
|
||
3759 | else
|
||
3760 | d := 1 ;
|
||
3761 | case CBMin3.ItemIndex of |
||
3762 | 0 : // Phosphore |
||
3763 | case i of |
||
3764 | 0 : // Indigestible |
||
3765 | if CBMin5.ItemIndex = 1 |
||
3766 | then // Total |
||
3767 | begin
|
||
3768 | Composition (j) ; |
||
3769 | Indigestible := Ptot - Pdig ; |
||
3770 | v := Indigestible ; |
||
3771 | end
|
||
3772 | else
|
||
3773 | v := 0 ;
|
||
3774 | 1 : // Entretien |
||
3775 | begin
|
||
3776 | Composition (j) ; |
||
3777 | Indigestible := Ptot - Pdig ; |
||
3778 | PVtot := PResSimulT.TabResult[58, j] ;
|
||
3779 | Entretien := 10 * PVtot / 1000 ; |
||
3780 | if Ptot < Indigestible + Entretien
|
||
3781 | then // D?ficit |
||
3782 | v := Ptot - Indigestible |
||
3783 | else
|
||
3784 | v := Entretien ; |
||
3785 | end ;
|
||
3786 | 2 : // Port?e |
||
3787 | if PResSimulT.TabResult[3, j] = 0 |
||
3788 | then // Gestation |
||
3789 | begin
|
||
3790 | Composition (j) ; |
||
3791 | Indigestible := Ptot - Pdig ; |
||
3792 | PVtot := PResSimulT.TabResult[58, j] ;
|
||
3793 | Entretien := 10 * PVtot / 1000 ; |
||
3794 | Cycle := Trunc(PResSimulT.TabResult[2, j]) ;
|
||
3795 | with PPRofilT.Porcelets[Cycle] do |
||
3796 | begin
|
||
3797 | PdsPortee := NesTotaux * PdsNais ; |
||
3798 | NesT := NesTotaux ; |
||
3799 | end ;
|
||
3800 | Jour := Trunc(PResSimulT.TabResult[78, j]) ;
|
||
3801 | Foetus := 6.25 * 6.389 * 0.023998 * PdsPortee |
||
3802 | * Exp(-0.023998 * (Jour - 45) |
||
3803 | - 6.389 * Exp(-0.023998 * (Jour - 45)) |
||
3804 | + 6.389 * Exp(-0.023998 * (115 - 45))) ; |
||
3805 | Placenta := (1.40598 * 0.06250 * Exp(-0.06250 * (Jour - 45)) + 0.00759) |
||
3806 | * Exp(7.34264 - 1.40598 * Exp(-0.06250 * (Jour - 45)) |
||
3807 | + 0.00759 * Jour + 0.06339 * NesT) |
||
3808 | * 0.0096 / 23.8 ; |
||
3809 | Portee := Foetus + Placenta ; |
||
3810 | if Ptot < Indigestible + Entretien + Portee
|
||
3811 | then // D?ficit |
||
3812 | v := Max (Ptot - Indigestible - Entretien, 0)
|
||
3813 | else
|
||
3814 | v := Portee ; |
||
3815 | end
|
||
3816 | else
|
||
3817 | v := 0 ;
|
||
3818 | 3 : // Retenu |
||
3819 | if PResSimulT.TabResult[3, j] <> 1 |
||
3820 | then // Gestation ou ISSF |
||
3821 | begin
|
||
3822 | Composition (j) ; |
||
3823 | Indigestible := Ptot - Pdig ; |
||
3824 | PVtot := PResSimulT.TabResult[58, j] ;
|
||
3825 | Entretien := 10 * PVtot / 1000 ; |
||
3826 | if PResSimulT.TabResult[3, j] = 0 |
||
3827 | then // Gestation |
||
3828 | begin
|
||
3829 | Cycle := Trunc(PResSimulT.TabResult[2, j]) ;
|
||
3830 | with PPRofilT.Porcelets[Cycle] do |
||
3831 | begin
|
||
3832 | PdsPortee := NesTotaux * PdsNais ; |
||
3833 | NesT := NesTotaux ; |
||
3834 | end ;
|
||
3835 | Jour := Trunc(PResSimulT.TabResult[78, j]) ;
|
||
3836 | Foetus := 6.25 * 6.389 * 0.023998 * PdsPortee |
||
3837 | * Exp(-0.023998 * (Jour - 45) |
||
3838 | - 6.389 * Exp(-0.023998 * (Jour - 45)) |
||
3839 | + 6.389 * Exp(-0.023998 * (115 - 45))) ; |
||
3840 | Placenta := (1.40598 * 0.06250 * Exp(-0.06250 * (Jour - 45)) + 0.00759) |
||
3841 | * Exp(7.34264 - 1.40598 * Exp(-0.06250 * (Jour - 45)) |
||
3842 | + 0.00759 * Jour + 0.06339 * NesT) |
||
3843 | * 0.0096 / 23.8 ; |
||
3844 | Portee := Foetus + Placenta ; |
||
3845 | end
|
||
3846 | else
|
||
3847 | Portee := 0 ;
|
||
3848 | PVnet := PResSimulT.TabResult[60, j] ;
|
||
3849 | GMQnet := PResSimulT.TabResult[61, j] ;
|
||
3850 | Retenu := Max ((5.4199 - 2 * 0.002857 * PVnet) * GMQnet, 0) ; |
||
3851 | if Ptot < Indigestible + Entretien + Portee + Retenu
|
||
3852 | then // D?ficit |
||
3853 | v := Max (Ptot - Indigestible - Entretien - Portee, 0)
|
||
3854 | else
|
||
3855 | v := Retenu ; |
||
3856 | end
|
||
3857 | else
|
||
3858 | v := 0 ;
|
||
3859 | 4 : // Lait |
||
3860 | if PResSimulT.TabResult[3, j] = 1 |
||
3861 | then // Lactation |
||
3862 | begin
|
||
3863 | Composition (j) ; |
||
3864 | Indigestible := Ptot - Pdig ; |
||
3865 | PVtot := PResSimulT.TabResult[58, j] ;
|
||
3866 | Entretien := 10 * PVtot / 1000 ; |
||
3867 | Lait := PResSimulT.TabResult[69, j] * 1.55 ; |
||
3868 | if Ptot < Indigestible + Entretien + Lait
|
||
3869 | then // D?ficit |
||
3870 | v := Max (Ptot - Indigestible - Entretien, 0)
|
||
3871 | else
|
||
3872 | v := Lait ; |
||
3873 | end
|
||
3874 | else
|
||
3875 | v := 0 ;
|
||
3876 | 5 : // D?ficit |
||
3877 | begin
|
||
3878 | Composition (j) ; |
||
3879 | Indigestible := Ptot - Pdig ; |
||
3880 | PVtot := PResSimulT.TabResult[58, j] ;
|
||
3881 | Entretien := 10 * PVtot / 1000 ; |
||
3882 | if PResSimulT.TabResult[3, j] = 0 |
||
3883 | then // Gestation |
||
3884 | begin
|
||
3885 | Cycle := Trunc(PResSimulT.TabResult[2, j]) ;
|
||
3886 | with PPRofilT.Porcelets[Cycle] do |
||
3887 | begin
|
||
3888 | PdsPortee := NesTotaux * PdsNais ; |
||
3889 | NesT := NesTotaux ; |
||
3890 | end ;
|
||
3891 | Jour := Trunc(PResSimulT.TabResult[78, j]) ;
|
||
3892 | Foetus := 6.25 * 6.389 * 0.023998 * PdsPortee |
||
3893 | * Exp(-0.023998 * (Jour - 45) |
||
3894 | - 6.389 * Exp(-0.023998 * (Jour - 45)) |
||
3895 | + 6.389 * Exp(-0.023998 * (115 - 45))) ; |
||
3896 | Placenta := (1.40598 * 0.06250 * Exp(-0.06250 * (Jour - 45)) + 0.00759) |
||
3897 | * Exp(7.34264 - 1.40598 * Exp(-0.06250 * (Jour - 45)) |
||
3898 | + 0.00759 * Jour + 0.06339 * NesT) |
||
3899 | * 0.0096 / 23.8 ; |
||
3900 | Portee := Foetus + Placenta ; |
||
3901 | end
|
||
3902 | else
|
||
3903 | Portee := 0 ;
|
||
3904 | if PResSimulT.TabResult[3, j] <> 1 |
||
3905 | then // Gestation ou ISSF |
||
3906 | begin
|
||
3907 | PVnet := PResSimulT.TabResult[60, j] ;
|
||
3908 | GMQnet := PResSimulT.TabResult[61, j] ;
|
||
3909 | Retenu := Max ((5.4199 - 2 * 0.002857 * PVnet) * GMQnet, 0) ; |
||
3910 | end
|
||
3911 | else
|
||
3912 | Retenu := 0 ;
|
||
3913 | if PResSimulT.TabResult[3, j] = 1 |
||
3914 | then // Lactation |
||
3915 | Lait := PResSimulT.TabResult[69, j] * 1.55 |
||
3916 | else
|
||
3917 | Lait := 0 ;
|
||
3918 | if Ptot < Indigestible + Entretien + Portee + Retenu + Lait
|
||
3919 | then
|
||
3920 | v := Indigestible + Entretien + Portee + Retenu + Lait - Ptot |
||
3921 | else
|
||
3922 | v := 0 ;
|
||
3923 | end ;
|
||
3924 | 6 : // Exc?s |
||
3925 | begin
|
||
3926 | Composition (j) ; |
||
3927 | Indigestible := Ptot - Pdig ; |
||
3928 | PVtot := PResSimulT.TabResult[58, j] ;
|
||
3929 | Entretien := 10 * PVtot / 1000 ; |
||
3930 | if PResSimulT.TabResult[3, j] = 0 |
||
3931 | then // Gestation |
||
3932 | begin
|
||
3933 | Cycle := Trunc(PResSimulT.TabResult[2, j]) ;
|
||
3934 | with PPRofilT.Porcelets[Cycle] do |
||
3935 | begin
|
||
3936 | PdsPortee := NesTotaux * PdsNais ; |
||
3937 | NesT := NesTotaux ; |
||
3938 | end ;
|
||
3939 | Jour := Trunc(PResSimulT.TabResult[78, j]) ;
|
||
3940 | Foetus := 6.25 * 6.389 * 0.023998 * PdsPortee |
||
3941 | * Exp(-0.023998 * (Jour - 45) |
||
3942 | - 6.389 * Exp(-0.023998 * (Jour - 45)) |
||
3943 | + 6.389 * Exp(-0.023998 * (115 - 45))) ; |
||
3944 | Placenta := (1.40598 * 0.06250 * Exp(-0.06250 * (Jour - 45)) + 0.00759) |
||
3945 | * Exp(7.34264 - 1.40598 * Exp(-0.06250 * (Jour - 45)) |
||
3946 | + 0.00759 * Jour + 0.06339 * NesT) |
||
3947 | * 0.0096 / 23.8 ; |
||
3948 | Portee := Foetus + Placenta ; |
||
3949 | end
|
||
3950 | else
|
||
3951 | Portee := 0 ;
|
||
3952 | if PResSimulT.TabResult[3, j] <> 1 |
||
3953 | then // Gestation ou ISSF |
||
3954 | begin
|
||
3955 | PVnet := PResSimulT.TabResult[60, j] ;
|
||
3956 | GMQnet := PResSimulT.TabResult[61, j] ;
|
||
3957 | Retenu := Max ((5.4199 - 2 * 0.002857 * PVnet) * GMQnet, 0) ; |
||
3958 | end
|
||
3959 | else
|
||
3960 | Retenu := 0 ;
|
||
3961 | if PResSimulT.TabResult[3, j] = 1 |
||
3962 | then // Lactation |
||
3963 | Lait := PResSimulT.TabResult[69, j] * 1.55 |
||
3964 | else
|
||
3965 | Lait := 0 ;
|
||
3966 | if Ptot > Indigestible + Entretien + Portee + Retenu + Lait
|
||
3967 | then
|
||
3968 | v := Ptot - Indigestible - Entretien - Portee - Retenu - Lait |
||
3969 | else
|
||
3970 | v := 0 ;
|
||
3971 | end ;
|
||
3972 | else
|
||
3973 | v := 0 ;
|
||
3974 | end ;
|
||
3975 | else
|
||
3976 | v := 0 ;
|
||
3977 | end ;
|
||
3978 | result := v / d ; |
||
3979 | end ;
|
||
3980 | 2 : // R?partition par p?riode |
||
3981 | begin
|
||
3982 | // Diviseur
|
||
3983 | case CBMin4.ItemIndex of |
||
3984 | 1 : // Dur?e |
||
3985 | d := j - k ; |
||
3986 | 2 : // Aliment ing?r? |
||
3987 | begin
|
||
3988 | d := 0 ;
|
||
3989 | for h := k to j - 1 do |
||
3990 | d := d + PResSimulT.TabResult[11, h] ;
|
||
3991 | end ;
|
||
3992 | else
|
||
3993 | d := 1 ;
|
||
3994 | end ;
|
||
3995 | v := 0 ;
|
||
3996 | case CBMin3.ItemIndex of |
||
3997 | 0 : // Phosphore |
||
3998 | case i of |
||
3999 | 0 : // Indigestible |
||
4000 | if CBMin5.ItemIndex = 1 |
||
4001 | then // Total |
||
4002 | for h := k to j - 1 do |
||
4003 | begin
|
||
4004 | Composition (h) ; |
||
4005 | Indigestible := Ptot - Pdig ; |
||
4006 | v := v + Indigestible ; |
||
4007 | end ;
|
||
4008 | 1 : // Entretien |
||
4009 | for h := k to j - 1 do |
||
4010 | begin
|
||
4011 | Composition (h) ; |
||
4012 | Indigestible := Ptot - Pdig ; |
||
4013 | PVtot := PResSimulT.TabResult[58, h] ;
|
||
4014 | Entretien := 10 * PVtot / 1000 ; |
||
4015 | if Ptot < Indigestible + Entretien
|
||
4016 | then // D?ficit |
||
4017 | v := v + Ptot - Indigestible |
||
4018 | else
|
||
4019 | v := v + Entretien ; |
||
4020 | end ;
|
||
4021 | 2 : // Port?e |
||
4022 | for h := k to j - 1 do |
||
4023 | if PResSimulT.TabResult[3, h] = 0 |
||
4024 | then // Gestation |
||
4025 | begin
|
||
4026 | Composition (h) ; |
||
4027 | Indigestible := Ptot - Pdig ; |
||
4028 | PVtot := PResSimulT.TabResult[58, h] ;
|
||
4029 | Entretien := 10 * PVtot / 1000 ; |
||
4030 | Cycle := Trunc(PResSimulT.TabResult[2, h]) ;
|
||
4031 | with PPRofilT.Porcelets[Cycle] do |
||
4032 | begin
|
||
4033 | PdsPortee := NesTotaux * PdsNais ; |
||
4034 | NesT := NesTotaux ; |
||
4035 | end ;
|
||
4036 | Jour := Trunc(PResSimulT.TabResult[78, h]) ;
|
||
4037 | Foetus := 6.25 * 6.389 * 0.023998 * PdsPortee |
||
4038 | * Exp(-0.023998 * (Jour - 45) |
||
4039 | - 6.389 * Exp(-0.023998 * (Jour - 45)) |
||
4040 | + 6.389 * Exp(-0.023998 * (115 - 45))) ; |
||
4041 | Placenta := (1.40598 * 0.06250 * Exp(-0.06250 * (Jour - 45)) + 0.00759) |
||
4042 | * Exp(7.34264 - 1.40598 * Exp(-0.06250 * (Jour - 45)) |
||
4043 | + 0.00759 * Jour + 0.06339 * NesT) |
||
4044 | * 0.0096 / 23.8 ; |
||
4045 | Portee := Foetus + Placenta ; |
||
4046 | if Ptot < Indigestible + Entretien + Portee
|
||
4047 | then // D?ficit |
||
4048 | v := v + Max (Ptot - Indigestible - Entretien, 0)
|
||
4049 | else
|
||
4050 | v := v + Portee ; |
||
4051 | end ;
|
||
4052 | 3 : // Retenu |
||
4053 | for h := k to j - 1 do |
||
4054 | if PResSimulT.TabResult[3, h] <> 1 |
||
4055 | then // Gestation ou ISSF |
||
4056 | begin
|
||
4057 | Composition (h) ; |
||
4058 | Indigestible := Ptot - Pdig ; |
||
4059 | PVtot := PResSimulT.TabResult[58, h] ;
|
||
4060 | Entretien := 10 * PVtot / 1000 ; |
||
4061 | if PResSimulT.TabResult[3, h] = 0 |
||
4062 | then // Gestation |
||
4063 | begin
|
||
4064 | Cycle := Trunc(PResSimulT.TabResult[2, h]) ;
|
||
4065 | with PPRofilT.Porcelets[Cycle] do |
||
4066 | begin
|
||
4067 | PdsPortee := NesTotaux * PdsNais ; |
||
4068 | NesT := NesTotaux ; |
||
4069 | end ;
|
||
4070 | Jour := Trunc(PResSimulT.TabResult[78, h]) ;
|
||
4071 | Foetus := 6.25 * 6.389 * 0.023998 * PdsPortee |
||
4072 | * Exp(-0.023998 * (Jour - 45) |
||
4073 | - 6.389 * Exp(-0.023998 * (Jour - 45)) |
||
4074 | + 6.389 * Exp(-0.023998 * (115 - 45))) ; |
||
4075 | Placenta := (1.40598 * 0.06250 * Exp(-0.06250 * (Jour - 45)) + 0.00759) |
||
4076 | * Exp(7.34264 - 1.40598 * Exp(-0.06250 * (Jour - 45)) |
||
4077 | + 0.00759 * Jour + 0.06339 * NesT) |
||
4078 | * 0.0096 / 23.8 ; |
||
4079 | Portee := Foetus + Placenta ; |
||
4080 | end
|
||
4081 | else
|
||
4082 | Portee := 0 ;
|
||
4083 | PVnet := PResSimulT.TabResult[60, h] ;
|
||
4084 | GMQnet := PResSimulT.TabResult[61, h] ;
|
||
4085 | Retenu := Max ((5.4199 - 2 * 0.002857 * PVnet) * GMQnet, 0) ; |
||
4086 | if Ptot < Indigestible + Entretien + Portee + Retenu
|
||
4087 | then // D?ficit |
||
4088 | v := v + Max (Ptot - Indigestible - Entretien - Portee, 0)
|
||
4089 | else
|
||
4090 | v := v + Retenu ; |
||
4091 | end ;
|
||
4092 | 4 : // Lait |
||
4093 | for h := k to j - 1 do |
||
4094 | if PResSimulT.TabResult[3, h] = 1 |
||
4095 | then // Lactation |
||
4096 | begin
|
||
4097 | Composition (h) ; |
||
4098 | Indigestible := Ptot - Pdig ; |
||
4099 | PVtot := PResSimulT.TabResult[58, h] ;
|
||
4100 | Entretien := 10 * PVtot / 1000 ; |
||
4101 | Lait := PResSimulT.TabResult[69, h] * 1.55 ; |
||
4102 | if Ptot < Indigestible + Entretien + Lait
|
||
4103 | then // D?ficit |
||
4104 | v := v + Max (Ptot - Indigestible - Entretien, 0)
|
||
4105 | else
|
||
4106 | v := v + Lait ; |
||
4107 | end ;
|
||
4108 | 5 : // D?ficit |
||
4109 | for h := k to j - 1 do |
||
4110 | begin
|
||
4111 | Composition (h) ; |
||
4112 | Indigestible := Ptot - Pdig ; |
||
4113 | PVtot := PResSimulT.TabResult[58, h] ;
|
||
4114 | Entretien := 10 * PVtot / 1000 ; |
||
4115 | if PResSimulT.TabResult[3, h] = 0 |
||
4116 | then // Gestation |
||
4117 | begin
|
||
4118 | Cycle := Trunc(PResSimulT.TabResult[2, h]) ;
|
||
4119 | with PPRofilT.Porcelets[Cycle] do |
||
4120 | begin
|
||
4121 | PdsPortee := NesTotaux * PdsNais ; |
||
4122 | NesT := NesTotaux ; |
||
4123 | end ;
|
||
4124 | Jour := Trunc(PResSimulT.TabResult[78, h]) ;
|
||
4125 | Foetus := 6.25 * 6.389 * 0.023998 * PdsPortee |
||
4126 | * Exp(-0.023998 * (Jour - 45) |
||
4127 | - 6.389 * Exp(-0.023998 * (Jour - 45)) |
||
4128 | + 6.389 * Exp(-0.023998 * (115 - 45))) ; |
||
4129 | Placenta := (1.40598 * 0.06250 * Exp(-0.06250 * (Jour - 45)) + 0.00759) |
||
4130 | * Exp(7.34264 - 1.40598 * Exp(-0.06250 * (Jour - 45)) |
||
4131 | + 0.00759 * Jour + 0.06339 * NesT) |
||
4132 | * 0.0096 / 23.8 ; |
||
4133 | Portee := Foetus + Placenta ; |
||
4134 | end
|
||
4135 | else
|
||
4136 | Portee := 0 ;
|
||
4137 | if PResSimulT.TabResult[3, h] <> 1 |
||
4138 | then // Gestation ou ISSF |
||
4139 | begin
|
||
4140 | PVnet := PResSimulT.TabResult[60, h] ;
|
||
4141 | GMQnet := PResSimulT.TabResult[61, h] ;
|
||
4142 | Retenu := Max ((5.4199 - 2 * 0.002857 * PVnet) * GMQnet, 0) ; |
||
4143 | end
|
||
4144 | else
|
||
4145 | Retenu := 0 ;
|
||
4146 | if PResSimulT.TabResult[3, h] = 1 |
||
4147 | then // Lactation |
||
4148 | Lait := PResSimulT.TabResult[69, h] * 1.55 |
||
4149 | else
|
||
4150 | Lait := 0 ;
|
||
4151 | if Ptot < Indigestible + Entretien + Portee + Retenu + Lait
|
||
4152 | then
|
||
4153 | v := v + Indigestible + Entretien + Portee + Retenu + Lait - Ptot ; |
||
4154 | end ;
|
||
4155 | 6 : // Exc?s |
||
4156 | for h := k to j - 1 do |
||
4157 | begin
|
||
4158 | Composition (h) ; |
||
4159 | Indigestible := Ptot - Pdig ; |
||
4160 | PVtot := PResSimulT.TabResult[58, h] ;
|
||
4161 | Entretien := 10 * PVtot / 1000 ; |
||
4162 | if PResSimulT.TabResult[3, h] = 0 |
||
4163 | then // Gestation |
||
4164 | begin
|
||
4165 | Cycle := Trunc(PResSimulT.TabResult[2, h]) ;
|
||
4166 | with PPRofilT.Porcelets[Cycle] do |
||
4167 | begin
|
||
4168 | PdsPortee := NesTotaux * PdsNais ; |
||
4169 | NesT := NesTotaux ; |
||
4170 | end ;
|
||
4171 | Jour := Trunc(PResSimulT.TabResult[78, h]) ;
|
||
4172 | Foetus := 6.25 * 6.389 * 0.023998 * PdsPortee |
||
4173 | * Exp(-0.023998 * (Jour - 45) |
||
4174 | - 6.389 * Exp(-0.023998 * (Jour - 45)) |
||
4175 | + 6.389 * Exp(-0.023998 * (115 - 45))) ; |
||
4176 | Placenta := (1.40598 * 0.06250 * Exp(-0.06250 * (Jour - 45)) + 0.00759) |
||
4177 | * Exp(7.34264 - 1.40598 * Exp(-0.06250 * (Jour - 45)) |
||
4178 | + 0.00759 * Jour + 0.06339 * NesT) |
||
4179 | * 0.0096 / 23.8 ; |
||
4180 | Portee := Foetus + Placenta ; |
||
4181 | end
|
||
4182 | else
|
||
4183 | Portee := 0 ;
|
||
4184 | if PResSimulT.TabResult[3, h] <> 1 |
||
4185 | then // Gestation ou ISSF |
||
4186 | begin
|
||
4187 | PVnet := PResSimulT.TabResult[60, h] ;
|
||
4188 | GMQnet := PResSimulT.TabResult[61, h] ;
|
||
4189 | Retenu := Max ((5.4199 - 2 * 0.002857 * PVnet) * GMQnet, 0) ; |
||
4190 | end
|
||
4191 | else
|
||
4192 | Retenu := 0 ;
|
||
4193 | if PResSimulT.TabResult[3, h] = 1 |
||
4194 | then // Lactation |
||
4195 | Lait := PResSimulT.TabResult[69, h] * 1.55 |
||
4196 | else
|
||
4197 | Lait := 0 ;
|
||
4198 | if Ptot > Indigestible + Entretien + Portee + Retenu + Lait
|
||
4199 | then
|
||
4200 | v := v + Ptot - Indigestible - Entretien - Portee - Retenu - Lait ; |
||
4201 | end ;
|
||
4202 | end ;
|
||
4203 | end ;
|
||
4204 | result := v / d ; |
||
4205 | end ;
|
||
4206 | 3 : // Besoin et apport |
||
4207 | begin
|
||
4208 | // Diviseur
|
||
4209 | if CBMin4.ItemIndex = 1 |
||
4210 | then // Aliment ing?r? |
||
4211 | d := PResSimulT.TabResult[11, j]
|
||
4212 | else
|
||
4213 | d := 1 ;
|
||
4214 | case CBMin3.ItemIndex of |
||
4215 | 0 : // Phosphore |
||
4216 | case i of |
||
4217 | 1 : // Apport |
||
4218 | begin
|
||
4219 | Composition (j) ; |
||
4220 | if CBMin5.ItemIndex = 0 |
||
4221 | then // Digestibilit? apparente |
||
4222 | v := Pdig |
||
4223 | else // Total |
||
4224 | v := Ptot ; |
||
4225 | end ;
|
||
4226 | 2 : // Besoin |
||
4227 | if CBMin5.ItemIndex = 0 |
||
4228 | then // Digestibilit? apparente |
||
4229 | begin
|
||
4230 | PVtot := PResSimulT.TabResult[58, j] ;
|
||
4231 | Entretien := 10 * PVtot / 1000 ; |
||
4232 | if PResSimulT.TabResult[3, j] = 0 |
||
4233 | then // Gestation |
||
4234 | begin
|
||
4235 | Cycle := Trunc(PResSimulT.TabResult[2, j]) ;
|
||
4236 | with PPRofilT.Porcelets[Cycle] do |
||
4237 | begin
|
||
4238 | PdsPortee := NesTotaux * PdsNais ; |
||
4239 | NesT := NesTotaux ; |
||
4240 | end ;
|
||
4241 | Jour := Trunc(PResSimulT.TabResult[78, j]) ;
|
||
4242 | Foetus := 6.25 * 6.389 * 0.023998 * PdsPortee |
||
4243 | * Exp(-0.023998 * (Jour - 45) |
||
4244 | - 6.389 * Exp(-0.023998 * (Jour - 45)) |
||
4245 | + 6.389 * Exp(-0.023998 * (115 - 45))) ; |
||
4246 | Placenta := (1.40598 * 0.06250 * Exp(-0.06250 * (Jour - 45)) + 0.00759) |
||
4247 | * Exp(7.34264 - 1.40598 * Exp(-0.06250 * (Jour - 45)) |
||
4248 | + 0.00759 * Jour + 0.06339 * NesT) |
||
4249 | * 0.0096 / 23.8 ; |
||
4250 | Portee := Foetus + Placenta ; |
||
4251 | end
|
||
4252 | else
|
||
4253 | Portee := 0 ;
|
||
4254 | if PResSimulT.TabResult[3, j] <> 1 |
||
4255 | then // Gestation ou ISSF |
||
4256 | begin
|
||
4257 | PVnet := PResSimulT.TabResult[60, j] ;
|
||
4258 | GMQnet := PResSimulT.TabResult[61, j] ;
|
||
4259 | Retenu := Max ((5.4199 - 2 * 0.002857 * PVnet) * GMQnet, 0) ; |
||
4260 | end
|
||
4261 | else
|
||
4262 | Retenu := 0 ;
|
||
4263 | if PResSimulT.TabResult[3, j] = 1 |
||
4264 | then // Lactation |
||
4265 | Lait := PResSimulT.TabResult[69, j] * 1.55 |
||
4266 | else
|
||
4267 | Lait := 0 ;
|
||
4268 | v := Entretien + Portee + Retenu + Lait ; |
||
4269 | end
|
||
4270 | else
|
||
4271 | v := 0 ;
|
||
4272 | else
|
||
4273 | v := 0 ;
|
||
4274 | end ;
|
||
4275 | else
|
||
4276 | v := 0 ;
|
||
4277 | end ;
|
||
4278 | result := v / d ; |
||
4279 | end ;
|
||
4280 | else
|
||
4281 | result := 0 ;
|
||
4282 | end ;
|
||
4283 | end ;
|
||
4284 | |||
4285 | // AffGraphMin
|
||
4286 | begin
|
||
4287 | ResetGraph ; |
||
4288 | Graph.Title.Text.Add (Format ('%s : %s', [CBMin3.Text, CBMin1.Text])) ;
|
||
4289 | Graph.SubTitle.Text.Add (CBMin5.Text) ; |
||
4290 | Graph.LeftAxis.Title.Caption := Format ('%s (%s)', [CBMin3.Text, CBMin4.Text]) ;
|
||
4291 | case CBMin1.ItemIndex of |
||
4292 | 0 : // R?partition globale |
||
4293 | begin
|
||
4294 | // Graph.View3D := TRUE ;
|
||
4295 | Graph.Legend.Visible := FALSE ; |
||
4296 | csv := '';
|
||
4297 | for i := 0 to ListMin.Count - 1 do |
||
4298 | csv := csv + Format ('%s (%s)', [ListMin[i], CBMin4.Text]) + ';'; |
||
4299 | MExport.Lines.Append(csv); |
||
4300 | // Affichage du camembert
|
||
4301 | PieMin.Active := TRUE ; |
||
4302 | PieMin.Clear ; |
||
4303 | if CBMin4.ItemIndex = 1 |
||
4304 | then
|
||
4305 | PieMin.Marks.Style := smsLabelPercent |
||
4306 | else
|
||
4307 | PieMin.Marks.Style := smsLabelValue ; |
||
4308 | t := 0 ;
|
||
4309 | csv := '';
|
||
4310 | for i := 0 to ListMin.Count - 1 do |
||
4311 | begin
|
||
4312 | y := MinY ; |
||
4313 | if y > PICO
|
||
4314 | then
|
||
4315 | PieMin.AddPie (y, ListMin[i], AreaMin[i].SeriesColor) ; |
||
4316 | t := t + y ; |
||
4317 | csv := csv + FloatToStrF(y, ffFixed, 15, 15) + ';'; |
||
4318 | end ;
|
||
4319 | Graph.SubTitle.Text.Add (Format ('%s : %1.0f %s', [StrTotal, t, StrG])) ;
|
||
4320 | MExport.Lines.Append(csv); |
||
4321 | end ;
|
||
4322 | 1 : // R?partition dynamique |
||
4323 | begin
|
||
4324 | Graph.BottomAxis.Title.Caption := CBMin2D.Text ; |
||
4325 | csv := CBMin2D.Text; |
||
4326 | for i := 0 to ListMin.Count - 1 do |
||
4327 | csv := csv + ';' + Format ('%s (%s)', [ListMin[i], CBMin4.Text]); |
||
4328 | MExport.Lines.Append(csv); |
||
4329 | // Affichage des aires
|
||
4330 | for i := 0 to ListMin.Count - 1 do |
||
4331 | AreaMin[i].Active := TRUE ; |
||
4332 | for i := 0 to ListMin.Count - 1 do |
||
4333 | AreaMin[i].Clear ; |
||
4334 | if CBMin4.ItemIndex = 2 |
||
4335 | then
|
||
4336 | for i := 0 to ListMin.Count - 1 do |
||
4337 | AreaMin[i].MultiArea := maStacked100 |
||
4338 | else
|
||
4339 | for i := 0 to ListMin.Count - 1 do |
||
4340 | AreaMin[i].MultiArea := maStacked ; |
||
4341 | for j := 1 to PResSimulT.NbJSim do |
||
4342 | begin
|
||
4343 | csv := FloatToStrF(MinX, ffFixed, 15, 15); |
||
4344 | for i := 0 to ListMin.Count - 1 do |
||
4345 | begin
|
||
4346 | AreaMin[i].AddXY (MinX, MinY, '', clTeeColor) ;
|
||
4347 | csv := csv + ';' + FloatToStrF(MinY, ffFixed, 15, 15); |
||
4348 | end;
|
||
4349 | MExport.Lines.Append(csv); |
||
4350 | end;
|
||
4351 | end ;
|
||
4352 | 2 : // R?partition par p?riode |
||
4353 | begin
|
||
4354 | Graph.BottomAxis.Title.Caption := CBMin2P.Text ; |
||
4355 | csv := CBMin2P.Text; |
||
4356 | for i := 0 to ListMin.Count - 1 do |
||
4357 | csv := csv + ';' + Format ('%s (%s)', [ListMin[i], CBMin4.Text]); |
||
4358 | MExport.Lines.Append(csv); |
||
4359 | // Affichage des barres
|
||
4360 | for i := 0 to ListMin.Count - 1 do |
||
4361 | BarMin[i].Active := TRUE ; |
||
4362 | for i := 0 to ListMin.Count - 1 do |
||
4363 | BarMin[i].Clear ; |
||
4364 | if CBMin4.ItemIndex = 3 |
||
4365 | then
|
||
4366 | for i := 0 to ListMin.Count - 1 do |
||
4367 | BarMin[i].MultiBar := mbStacked100 |
||
4368 | else
|
||
4369 | for i := 0 to ListMin.Count - 1 do |
||
4370 | BarMin[i].MultiBar := mbStacked ; |
||
4371 | j := 1 ;
|
||
4372 | x := MinX ; |
||
4373 | k := 1 ;
|
||
4374 | if PResSimulT.NbJSim > 1 |
||
4375 | then
|
||
4376 | for j := 2 to PResSimulT.NbJSim do |
||
4377 | begin
|
||
4378 | p := MinX ; |
||
4379 | if x <> p
|
||
4380 | then
|
||
4381 | begin
|
||
4382 | // Changement de p?riode
|
||
4383 | if CBMin2P.ItemIndex = 1 |
||
4384 | then // Stade |
||
4385 | case Trunc (x) of |
||
4386 | 0 : s := StrGestation ;
|
||
4387 | 1 : s := StrLactation ;
|
||
4388 | 2 : s := StrISSF ;
|
||
4389 | end
|
||
4390 | else
|
||
4391 | s := Format ('%1.0f', [x]) ;
|
||
4392 | csv := s; |
||
4393 | for i := 0 to ListMin.Count - 1 do |
||
4394 | begin
|
||
4395 | y := MinY ; |
||
4396 | if y > PICO
|
||
4397 | then
|
||
4398 | BarMin[i].AddBar (y, s, clTeeColor) |
||
4399 | else
|
||
4400 | BarMin[i].AddNull (s) ; |
||
4401 | csv := csv + ';' + FloatToStrF(y, ffFixed, 15, 15); |
||
4402 | end ;
|
||
4403 | MExport.Lines.Append(csv); |
||
4404 | x := p ; |
||
4405 | k := j ; |
||
4406 | end ;
|
||
4407 | end ;
|
||
4408 | j := PResSimulT.NbJSim + 1 ;
|
||
4409 | if CBMin2P.ItemIndex = 2 |
||
4410 | then // Globale |
||
4411 | s := ' '
|
||
4412 | else
|
||
4413 | if CBMin2P.ItemIndex = 1 |
||
4414 | then // Stade |
||
4415 | case Trunc (x) of |
||
4416 | 0 : s := StrGestation ;
|
||
4417 | 1 : s := StrLactation ;
|
||
4418 | 2 : s := StrISSF ;
|
||
4419 | end
|
||
4420 | else
|
||
4421 | s := Format ('%1.0f', [x]) ;
|
||
4422 | csv := s; |
||
4423 | for i := 0 to ListMin.Count - 1 do |
||
4424 | begin
|
||
4425 | y := MinY ; |
||
4426 | if y > PICO
|
||
4427 | then
|
||
4428 | BarMin[i].AddBar (y, s, clTeeColor) |
||
4429 | else
|
||
4430 | BarMin[i].AddNull (s) ; |
||
4431 | csv := csv + ';' + FloatToStrF(y, ffFixed, 15, 15); |
||
4432 | end ;
|
||
4433 | MExport.Lines.Append(csv); |
||
4434 | end ;
|
||
4435 | 3 : // Besoin et apport |
||
4436 | begin
|
||
4437 | Graph.BottomAxis.Title.Caption := CBMin2D.Text ; |
||
4438 | Graph.Legend.Alignment := laTop ; |
||
4439 | csv := CBMin2D.Text; |
||
4440 | if CBMin5.ItemIndex = 1 |
||
4441 | then // En digestibilit? totale, seul l'apport est affich? |
||
4442 | csv := csv + ';' + Format ('%s (%s)', [LineMin[1].Title, CBMin4.Text]) |
||
4443 | else
|
||
4444 | for i := 1 to 2 do |
||
4445 | csv := csv + ';' + Format ('%s (%s)', [LineMin[i].Title, CBMin4.Text]); |
||
4446 | // Affichage des lignes
|
||
4447 | if CBMin5.ItemIndex = 1 |
||
4448 | then // En digestibilit? totale, seul l'apport est affich? |
||
4449 | LineMin[1].Active := TRUE
|
||
4450 | else
|
||
4451 | for i := 1 to 2 do |
||
4452 | LineMin[i].Active := TRUE ; |
||
4453 | for i := 1 to 2 do |
||
4454 | LineMin[i].Clear ; |
||
4455 | for j := 1 to PResSimulT.NbJSim do |
||
4456 | begin
|
||
4457 | csv := FloatToStrF(MinX, ffFixed, 15, 15); |
||
4458 | for i := 1 to 2 do |
||
4459 | if (CBAA5.ItemIndex = 1) and (i = 2) |
||
4460 | then // Le besoin total n'a pas de sens |
||
4461 | Continue |
||
4462 | else
|
||
4463 | begin
|
||
4464 | LineMin[i].AddXY (MinX, MinY, '', clTeeColor) ;
|
||
4465 | csv := csv + ';' + FloatToStrF(MinY, ffFixed, 15, 15); |
||
4466 | end ;
|
||
4467 | MExport.Lines.Append(csv); |
||
4468 | end ;
|
||
4469 | end ;
|
||
4470 | end ;
|
||
4471 | if PieMin.Active
|
||
4472 | then
|
||
4473 | begin
|
||
4474 | Graph.View3DOptions.Orthogonal := FALSE ; |
||
4475 | Graph.View3DOptions.Elevation := 315 ;
|
||
4476 | Graph.View3DOptions.Rotation := 360 ;
|
||
4477 | Graph.View3DOptions.Perspective := 0 ;
|
||
4478 | end
|
||
4479 | else
|
||
4480 | begin
|
||
4481 | Graph.View3DOptions.Orthogonal := TRUE ; |
||
4482 | Graph.View3DOptions.Elevation := 345 ;
|
||
4483 | Graph.View3DOptions.Rotation := 345 ;
|
||
4484 | Graph.View3DOptions.Perspective := 15 ;
|
||
4485 | end ;
|
||
4486 | AjustEchelle (Graph) ; |
||
4487 | end ;
|
||
4488 | |||
4489 | procedure TFResSimulT.CBMin1Change(Sender: TObject);
|
||
4490 | begin
|
||
4491 | CBMin4.Items.Clear ; |
||
4492 | case CBMin1.ItemIndex of |
||
4493 | 0 : // R?partition globale |
||
4494 | begin
|
||
4495 | CBMin2D.Visible := FALSE ; |
||
4496 | CBMin2P.Visible := FALSE ; |
||
4497 | // Unit?s
|
||
4498 | CBMin4.Items.Add (StrG) ; |
||
4499 | CBMin4.Items.Add ('%') ;
|
||
4500 | end ;
|
||
4501 | 1 : // R?partition dynamique |
||
4502 | begin
|
||
4503 | CBMin2D.Visible := TRUE ; |
||
4504 | CBMin2P.Visible := FALSE ; |
||
4505 | // Unit?s
|
||
4506 | CBMin4.Items.Add (Format ('%s/%s', [StrG, StrJ])) ;
|
||
4507 | CBMin4.Items.Add (Format ('%s/%s %s', [StrG, StrKg, StrAlimentUnit])) ;
|
||
4508 | CBMin4.Items.Add ('%') ;
|
||
4509 | end ;
|
||
4510 | 2 : // R?partition par p?riode |
||
4511 | begin
|
||
4512 | CBMin2D.Visible := FALSE ; |
||
4513 | CBMin2P.Visible := TRUE ; |
||
4514 | // Unit?s
|
||
4515 | CBMin4.Items.Add (StrG) ; |
||
4516 | CBMin4.Items.Add (Format ('%s/%s', [StrG, StrJ])) ;
|
||
4517 | CBMin4.Items.Add (Format ('%s/%s %s', [StrG, StrKg, StrAlimentUnit])) ;
|
||
4518 | CBMin4.Items.Add ('%') ;
|
||
4519 | end ;
|
||
4520 | 3 : // Besoin et apport |
||
4521 | begin
|
||
4522 | CBMin2D.Visible := TRUE ; |
||
4523 | CBMin2P.Visible := FALSE ; |
||
4524 | // Unit?s
|
||
4525 | CBMin4.Items.Add (Format ('%s/%s', [StrG, StrJ])) ;
|
||
4526 | CBMin4.Items.Add (Format ('%s/%s %s', [StrG, StrKg, StrAlimentUnit])) ;
|
||
4527 | end ;
|
||
4528 | end ;
|
||
4529 | CBMin4.ItemIndex := 0 ;
|
||
4530 | AffGraphMin ; |
||
4531 | end;
|
||
4532 | |||
4533 | procedure TFResSimulT.CBMin2Change(Sender: TObject);
|
||
4534 | begin
|
||
4535 | AffGraphMin ; |
||
4536 | end;
|
||
4537 | |||
4538 | procedure TFResSimulT.CBMin3Change(Sender: TObject);
|
||
4539 | begin
|
||
4540 | AffGraphMin ; |
||
4541 | end;
|
||
4542 | |||
4543 | procedure TFResSimulT.CBMin4Change(Sender: TObject);
|
||
4544 | begin
|
||
4545 | AffGraphMin ; |
||
4546 | end;
|
||
4547 | |||
4548 | procedure TFResSimulT.CBMin5Change(Sender: TObject);
|
||
4549 | begin
|
||
4550 | AffGraphMin ; |
||
4551 | end;
|
||
4552 | |||
4553 | ////////////////
|
||
4554 | // Rejets //
|
||
4555 | ////////////////
|
||
4556 | procedure TFResSimulT.InitRej ;
|
||
4557 | const
|
||
4558 | TabColor : array[0..3] of TColor |
||
4559 | = (clMaroon, clYellow, clPink, clMaroon) ; |
||
4560 | var
|
||
4561 | i : integer ; |
||
4562 | begin
|
||
4563 | // ListRej : liste pour les rejets
|
||
4564 | ListRej := TStringList.Create ; |
||
4565 | ListRej.Assign (LBRej.Items) ; |
||
4566 | // PieRej : s?rie (camembert) graphique
|
||
4567 | PieRej := TPieSeries.Create (Graph) ; |
||
4568 | PieRej.ParentChart := Graph ; |
||
4569 | PieRej.Circled := TRUE ; |
||
4570 | PieRej.Marks.ArrowLength := 24 ;
|
||
4571 | PieRej.Marks.Arrow.Color := clBlack ; |
||
4572 | PieRej.Marks.Brush.Style := bsClear ; |
||
4573 | PieRej.Marks.Frame.Visible := FALSE ; |
||
4574 | PieRej.ValueFormat := Format ('# ##0 %s', [StrG]) ;
|
||
4575 | PieRej.PercentFormat := '##0 %' ;
|
||
4576 | Graph.AddSeries (PieRej) ; |
||
4577 | // AreaRej : s?ries (aires) graphiques
|
||
4578 | SetLength (AreaRej, ListRej.Count) ; |
||
4579 | for i := 0 to ListRej.Count - 1 do |
||
4580 | begin
|
||
4581 | AreaRej[i] := TAreaSeries.Create (Graph) ; |
||
4582 | AreaRej[i].ParentChart := Graph ; |
||
4583 | AreaRej[i].Title := ListRej[i] ; |
||
4584 | AreaRej[i].SeriesColor := TabColor[i] ; |
||
4585 | AreaRej[i].AreaLinesPen.Visible := FALSE ; |
||
4586 | Graph.AddSeries (AreaRej[i]) ; |
||
4587 | end ;
|
||
4588 | // BarRej : s?ries (barres) graphiques
|
||
4589 | SetLength (BarRej, ListRej.Count) ; |
||
4590 | for i := 0 to ListRej.Count - 1 do |
||
4591 | begin
|
||
4592 | BarRej[i] := TBarSeries.Create (Graph) ; |
||
4593 | BarRej[i].ParentChart := Graph ; |
||
4594 | BarRej[i].Title := ListRej[i] ; |
||
4595 | BarRej[i].SeriesColor := TabColor[i] ; |
||
4596 | BarRej[i].BarPen.Color := BarRej[i].SeriesColor ; |
||
4597 | BarRej[i].Marks.Visible := FALSE ; |
||
4598 | Graph.AddSeries (BarRej[i]) ; |
||
4599 | end ;
|
||
4600 | end ;
|
||
4601 | |||
4602 | procedure TFResSimulT.AffGraphRej ;
|
||
4603 | var
|
||
4604 | i, j, k : integer ; |
||
4605 | x, y, t, p : double ; |
||
4606 | s, csv : string ;
|
||
4607 | |||
4608 | // Abscisse
|
||
4609 | function RejX : double ;
|
||
4610 | begin
|
||
4611 | case CBRej1.ItemIndex of |
||
4612 | 1 : // R?partition dynamique |
||
4613 | case CBRej2D.ItemIndex of |
||
4614 | 0 : // Age |
||
4615 | result := PResSimulT.TabResult[1, j] ;
|
||
4616 | 1 : // Dur?e |
||
4617 | result := j - 1 ;
|
||
4618 | else
|
||
4619 | result := 0 ;
|
||
4620 | end ;
|
||
4621 | 2 : // R?partition par p?riode |
||
4622 | case CBRej2P.ItemIndex of |
||
4623 | 0 : // Cycle |
||
4624 | result := PResSimulT.TabResult[2, j] ;
|
||
4625 | 1 : // Stade |
||
4626 | result := PResSimulT.TabResult[3, j] ;
|
||
4627 | else
|
||
4628 | result := 0 ;
|
||
4629 | end ;
|
||
4630 | else
|
||
4631 | result := 0 ;
|
||
4632 | end ;
|
||
4633 | end ;
|
||
4634 | |||
4635 | // Ordonn?e
|
||
4636 | function RejY : double ;
|
||
4637 | var
|
||
4638 | h : integer ; |
||
4639 | v, d, IngereSec1, IngereSec2, Ptot, Pdig, Ingere, Digestible, Depose, Exporte : double ; |
||
4640 | CC1, CC2 : CompositionChimique ; |
||
4641 | |||
4642 | // Composition des aliments
|
||
4643 | procedure Composition (jour : integer) ;
|
||
4644 | var
|
||
4645 | Aliment1, Aliment2 : integer ; |
||
4646 | IngereFrais, Taux1, Taux2, Ptot1, Ptot2, Pdig1, Pdig2 : double ; |
||
4647 | begin
|
||
4648 | IngereFrais := PresSimulT.TabResult[11, jour] ;
|
||
4649 | // Aliment 1
|
||
4650 | Aliment1 := Round (PresSimulT.TabResult[7, jour]) ;
|
||
4651 | if Aliment1 = -1 |
||
4652 | then
|
||
4653 | CC1 := CCVide |
||
4654 | else
|
||
4655 | begin
|
||
4656 | PAliment := ListAliment[FindIdxAliment (FindNomAliment (Aliment1))] ; |
||
4657 | CC1 := PAliment.CC ; |
||
4658 | end ;
|
||
4659 | Taux1 := PresSimulT.TabResult[9, jour] / 100 ; |
||
4660 | IngereSec1 := IngereFrais * Taux1 * CC1.MS / 1000 ;
|
||
4661 | Ptot1 := IngereSec1 * CC1.P ; |
||
4662 | if Aliment1 = -1 |
||
4663 | then
|
||
4664 | Pdig1 := 0
|
||
4665 | else
|
||
4666 | if PAliment.Presentation = 0 |
||
4667 | then // Granul?s |
||
4668 | Pdig1 := IngereSec1 * PAliment.CC.PdigG |
||
4669 | else // Farine |
||
4670 | Pdig1 := IngereSec1 * PAliment.CC.PdigF ; |
||
4671 | // Aliment 2
|
||
4672 | Aliment2 := Round (PresSimulT.TabResult[8, jour]) ;
|
||
4673 | if Aliment2 = -1 |
||
4674 | then
|
||
4675 | CC2 := CCVide |
||
4676 | else
|
||
4677 | begin
|
||
4678 | PAliment := ListAliment[FindIdxAliment (FindNomAliment (Aliment2))] ; |
||
4679 | CC2 := PAliment.CC ; |
||
4680 | end ;
|
||
4681 | Taux2 := PresSimulT.TabResult[10, jour] / 100 ; |
||
4682 | IngereSec2 := IngereFrais * Taux2 * CC2.MS / 1000 ;
|
||
4683 | Ptot2 := IngereSec2 * CC2.P ; |
||
4684 | if Aliment2 = -1 |
||
4685 | then
|
||
4686 | Pdig2 := 0
|
||
4687 | else
|
||
4688 | if PAliment.Presentation = 0 |
||
4689 | then // Granul?s |
||
4690 | Pdig2 := IngereSec2 * PAliment.CC.PdigG |
||
4691 | else // Farine |
||
4692 | Pdig2 := IngereSec2 * PAliment.CC.PdigF ; |
||
4693 | // Cumul
|
||
4694 | Ptot := Ptot1 + Ptot2 ; |
||
4695 | Pdig := Pdig1 + Pdig2 ; |
||
4696 | end ;
|
||
4697 | |||
4698 | // Calcul de l'ing?r?
|
||
4699 | function CalcIngere : Double ;
|
||
4700 | begin
|
||
4701 | case CBRej3.ItemIndex of |
||
4702 | 0 : // Azote |
||
4703 | result := (IngereSec1*CC1.MAT + IngereSec2*CC2.MAT) * 0.16 ;
|
||
4704 | 1 : // Phosphore |
||
4705 | result := Ptot; |
||
4706 | 2 : // Calcium |
||
4707 | result := IngereSec1*CC1.Ca + IngereSec2*CC2.Ca ; |
||
4708 | 3 : // Potassium |
||
4709 | result := IngereSec1*CC1.K + IngereSec2*CC2.K ; |
||
4710 | 4 : // Cuivre |
||
4711 | result := IngereSec1*CC1.Cu + IngereSec2*CC2.Cu ; |
||
4712 | 5 : // Zinc |
||
4713 | result := IngereSec1*CC1.Zn + IngereSec2*CC2.Zn ; |
||
4714 | else
|
||
4715 | result := 0 ;
|
||
4716 | end ;
|
||
4717 | end ;
|
||
4718 | |||
4719 | // Calcul du digestible
|
||
4720 | function CalcDigestible : Double ;
|
||
4721 | begin
|
||
4722 | case CBRej3.ItemIndex of |
||
4723 | 0 : // Azote |
||
4724 | result := (IngereSec1*CC1.MAT*CC1.dMAT_C/100 + IngereSec2*CC2.MAT*CC2.dMAT_C/100) * 0.16 ; |
||
4725 | 1 : // Phosphore |
||
4726 | result := Pdig; |
||
4727 | else
|
||
4728 | result := 0 ;
|
||
4729 | end ;
|
||
4730 | end ;
|
||
4731 | |||
4732 | // Calcul du d?p?t (potentiel)
|
||
4733 | function CalcDepot (jour : integer) : Double ;
|
||
4734 | var
|
||
4735 | PV, GMQ, PD : Double ; |
||
4736 | begin
|
||
4737 | PV := PresSimulT.TabResult[58, jour] ;
|
||
4738 | GMQ := PresSimulT.TabResult[59, jour] ;
|
||
4739 | PD := PResSimulT.TabResult[64, jour] ;
|
||
4740 | case CBRej3.ItemIndex of |
||
4741 | 0 : // Azote |
||
4742 | result := PD * 0.16 ;
|
||
4743 | 1 : // Phosphore |
||
4744 | if GMQ > 0 |
||
4745 | then
|
||
4746 | result := -0.00227 * (Power(PV+GMQ, 2) - Power(PV, 2)) + 5.36335 * GMQ |
||
4747 | else
|
||
4748 | result := 0 ;
|
||
4749 | 2 : // Calcium |
||
4750 | if GMQ > 0 |
||
4751 | then
|
||
4752 | result := -0.00180 * (Power(PV+GMQ, 2) - Power(PV, 2)) + 8.64633 * GMQ |
||
4753 | else
|
||
4754 | result := 0 ;
|
||
4755 | 3 : // Potassium |
||
4756 | if GMQ > 0 |
||
4757 | then
|
||
4758 | result := -0.00345 * (Power(PV+GMQ, 2) - Power(PV, 2)) + 2.53338 * GMQ |
||
4759 | else
|
||
4760 | result := 0 ;
|
||
4761 | 4 : // Cuivre |
||
4762 | if GMQ > 0 |
||
4763 | then
|
||
4764 | result := 1.0 * GMQ
|
||
4765 | else
|
||
4766 | result := 0 ;
|
||
4767 | 5 : // Zinc |
||
4768 | if GMQ > 0 |
||
4769 | then
|
||
4770 | result := 21.8 * GMQ |
||
4771 | else
|
||
4772 | result := 0 ;
|
||
4773 | else
|
||
4774 | result := 0 ;
|
||
4775 | end ;
|
||
4776 | end ;
|
||
4777 | |||
4778 | // Calcul de l'export (lait)
|
||
4779 | function CalcExport (jour : integer) : Double ;
|
||
4780 | var
|
||
4781 | Lait : Double ; |
||
4782 | begin
|
||
4783 | Lait := PResSimulT.TabResult[69, jour] ;
|
||
4784 | case CBRej3.ItemIndex of |
||
4785 | 0 : // Azote |
||
4786 | result := Lait / 0.1325 ;
|
||
4787 | 1 : // Phosphore |
||
4788 | result := Lait * 1.41 ;
|
||
4789 | 2 : // Calcium |
||
4790 | result := Lait * 1.95 ;
|
||
4791 | 3 : // Potassium |
||
4792 | result := Lait * 0.59 ;
|
||
4793 | 4 : // Cuivre |
||
4794 | result := Lait * 0.002 ;
|
||
4795 | 5 : // Zinc |
||
4796 | result := Lait * 0.007 ;
|
||
4797 | else
|
||
4798 | result := 0 ;
|
||
4799 | end ;
|
||
4800 | end ;
|
||
4801 | |||
4802 | // RejY
|
||
4803 | begin
|
||
4804 | case CBRej1.ItemIndex of |
||
4805 | 0 : // R?partition globale |
||
4806 | begin
|
||
4807 | v := 0 ;
|
||
4808 | for h := 1 to PResSimulT.NbJSim do |
||
4809 | begin
|
||
4810 | Composition (h) ; |
||
4811 | Ingere := CalcIngere ; |
||
4812 | Digestible := CalcDigestible ; |
||
4813 | Depose := CalcDepot (h) ; |
||
4814 | Exporte := CalcExport (h) ; |
||
4815 | if CBRej3.ItemIndex < 2 |
||
4816 | then // Azote ou phosphore |
||
4817 | case i of |
||
4818 | 0 : // F?cal |
||
4819 | v := v + Ingere - Digestible ; |
||
4820 | 1 : // Urinaire |
||
4821 | v := v + Max (Digestible - Depose - Exporte, 0) ;
|
||
4822 | 2 : // Retenu ou export? |
||
4823 | v := v + Min (Digestible, Depose + Exporte) ; |
||
4824 | end
|
||
4825 | else // Autres |
||
4826 | case i of |
||
4827 | 2 : // Retenu ou export? |
||
4828 | v := v + Min (Ingere, Depose + Exporte) ; |
||
4829 | 3 : // Ecr?t? |
||
4830 | v := v + Max (Ingere - Depose - Exporte, 0) ;
|
||
4831 | end ;
|
||
4832 | end ;
|
||
4833 | result := v ; |
||
4834 | end ;
|
||
4835 | 1 : // R?partition dynamique |
||
4836 | begin
|
||
4837 | // Diviseur
|
||
4838 | if CBRej4.ItemIndex = 1 |
||
4839 | then // Aliment ing?r? |
||
4840 | d := PResSimulT.TabResult[11, j]
|
||
4841 | else
|
||
4842 | d := 1 ;
|
||
4843 | Composition (j) ; |
||
4844 | Ingere := CalcIngere ; |
||
4845 | Digestible := CalcDigestible ; |
||
4846 | Depose := CalcDepot (j) ; |
||
4847 | Exporte := CalcExport (j) ; |
||
4848 | if CBRej3.ItemIndex < 2 |
||
4849 | then // Azote ou phosphore |
||
4850 | case i of |
||
4851 | 0 : // F?cal |
||
4852 | v := Ingere - Digestible ; |
||
4853 | 1 : // Urinaire |
||
4854 | v := Max (Digestible - Depose - Exporte, 0) ;
|
||
4855 | 2 : // Retenu ou export? |
||
4856 | v := Min (Digestible, Depose + Exporte) ; |
||
4857 | else
|
||
4858 | v := 0 ;
|
||
4859 | end
|
||
4860 | else // Autres |
||
4861 | case i of |
||
4862 | 2 : // Retenu ou export? |
||
4863 | v := Min (Ingere, Depose + Exporte) ; |
||
4864 | 3 : // Ecr?t? |
||
4865 | v := Max (Ingere - Depose - Exporte, 0) ;
|
||
4866 | else
|
||
4867 | v := 0 ;
|
||
4868 | end ;
|
||
4869 | result := v / d ; |
||
4870 | end ;
|
||
4871 | 2 : // R?partition par p?riode |
||
4872 | begin
|
||
4873 | // Diviseur
|
||
4874 | case CBRej4.ItemIndex of |
||
4875 | 1 : // Dur?e |
||
4876 | d := j - k ; |
||
4877 | 2 : // Aliment ing?r? |
||
4878 | begin
|
||
4879 | d := 0 ;
|
||
4880 | for h := k to j - 1 do |
||
4881 | d := d + PResSimulT.TabResult[11, h] ;
|
||
4882 | end ;
|
||
4883 | else
|
||
4884 | d := 1 ;
|
||
4885 | end ;
|
||
4886 | v := 0 ;
|
||
4887 | for h := k to j - 1 do |
||
4888 | begin
|
||
4889 | Composition (h) ; |
||
4890 | Ingere := CalcIngere ; |
||
4891 | Digestible := CalcDigestible ; |
||
4892 | Depose := CalcDepot (h) ; |
||
4893 | Exporte := CalcExport (h) ; |
||
4894 | if CBRej3.ItemIndex < 2 |
||
4895 | then // Azote ou phosphore |
||
4896 | case i of |
||
4897 | 0 : // F?cal |
||
4898 | v := v + Ingere - Digestible ; |
||
4899 | 1 : // Urinaire |
||
4900 | v := v + Max (Digestible - Depose - Exporte, 0) ;
|
||
4901 | 2 : // Retenu ou export? |
||
4902 | v := v + Min (Digestible, Depose + Exporte) ; |
||
4903 | end
|
||
4904 | else // Autres |
||
4905 | case i of |
||
4906 | 2 : // Retenu ou export? |
||
4907 | v := v + Min (Ingere, Depose + Exporte) ; |
||
4908 | 3 : // Ecr?t? |
||
4909 | v := v + Max (Ingere - Depose - Exporte, 0) ;
|
||
4910 | end ;
|
||
4911 | end ;
|
||
4912 | result := v / d ; |
||
4913 | end ;
|
||
4914 | else
|
||
4915 | result := 0 ;
|
||
4916 | end ;
|
||
4917 | end ;
|
||
4918 | |||
4919 | // AffGraphRej
|
||
4920 | begin
|
||
4921 | ResetGraph ; |
||
4922 | Graph.Title.Text.Add (Format ('%s : %s', [CBRej3.Text, CBRej1.Text])) ;
|
||
4923 | Graph.LeftAxis.Title.Caption := Format ('%s (%s)', [CBRej3.Text, CBRej4.Text]) ;
|
||
4924 | case CBRej1.ItemIndex of |
||
4925 | 0 : // R?partition globale |
||
4926 | begin
|
||
4927 | // Graph.View3D := TRUE ;
|
||
4928 | Graph.Legend.Visible := FALSE ; |
||
4929 | csv := '';
|
||
4930 | if CBRej3.ItemIndex < 2 |
||
4931 | then // Azote ou phosphore : F?cal, Urinaire et Retenu |
||
4932 | for i := 0 to 2 do |
||
4933 | csv := csv + Format ('%s (%s)', [ListRej[i], CBRej4.Text]) + ';' |
||
4934 | else // Autres : Retenu et Excr?t? |
||
4935 | for i := 2 to ListRej.Count - 1 do |
||
4936 | csv := csv + Format ('%s (%s)', [ListRej[i], CBRej4.Text]) + ';'; |
||
4937 | MExport.Lines.Append(csv); |
||
4938 | // Affichage du camembert
|
||
4939 | PieRej.Active := TRUE ; |
||
4940 | PieRej.Clear ; |
||
4941 | if CBRej4.ItemIndex = 1 |
||
4942 | then
|
||
4943 | PieRej.Marks.Style := smsLabelPercent |
||
4944 | else
|
||
4945 | PieRej.Marks.Style := smsLabelValue ; |
||
4946 | t := 0 ;
|
||
4947 | csv := '';
|
||
4948 | if CBRej3.ItemIndex < 2 |
||
4949 | then // Azote ou phosphore : F?cal, Urinaire et Retenu |
||
4950 | for i := 0 to 2 do |
||
4951 | begin
|
||
4952 | y := RejY ; |
||
4953 | PieRej.AddPie (y, ListRej[i], AreaRej[i].SeriesColor) ; |
||
4954 | t := t + y ; |
||
4955 | csv := csv + FloatToStrF(y, ffFixed, 15, 15) + ';'; |
||
4956 | end
|
||
4957 | else // Autres : Retenu et Excr?t? |
||
4958 | for i := 2 to ListRej.Count - 1 do |
||
4959 | begin
|
||
4960 | y := RejY ; |
||
4961 | if y > PICO
|
||
4962 | then
|
||
4963 | PieRej.AddPie (y, ListRej[i], AreaRej[i].SeriesColor) ; |
||
4964 | t := t + y ; |
||
4965 | csv := csv + FloatToStrF(y, ffFixed, 15, 15) + ';'; |
||
4966 | end ;
|
||
4967 | if CBRej3.ItemIndex > 3 |
||
4968 | then // Oligo-?l?ment |
||
4969 | Graph.SubTitle.Text.Add (Format ('%s : %1.0f %s', [StrTotal, t, StrMg]))
|
||
4970 | else // Macro-?l?ment |
||
4971 | Graph.SubTitle.Text.Add (Format ('%s : %1.0f %s', [StrTotal, t, StrG])) ;
|
||
4972 | MExport.Lines.Append(csv); |
||
4973 | end ;
|
||
4974 | 1 : // R?partition dynamique |
||
4975 | begin
|
||
4976 | Graph.BottomAxis.Title.Caption := CBRej2D.Text ; |
||
4977 | csv := CBRej2D.Text; |
||
4978 | if CBRej3.ItemIndex < 2 |
||
4979 | then // Azote ou phosphore : F?cal, Urinaire et Retenu |
||
4980 | for i := 0 to 2 do |
||
4981 | csv := csv + ';' + Format ('%s (%s)', [ListRej[i], CBRej4.Text]) |
||
4982 | else // Autres : Retenu et Excr?t? |
||
4983 | for i := 2 to ListRej.Count - 1 do |
||
4984 | csv := csv + ';' + Format ('%s (%s)', [ListRej[i], CBRej4.Text]); |
||
4985 | MExport.Lines.Append(csv); |
||
4986 | // Affichage des aires
|
||
4987 | if CBRej3.ItemIndex < 2 |
||
4988 | then // Azote ou phosphore : F?cal, Urinaire et Retenu |
||
4989 | for i := 0 to 2 do |
||
4990 | AreaRej[i].Active := TRUE |
||
4991 | else // Autres : Retenu et Excr?t? |
||
4992 | for i := 2 to ListRej.Count - 1 do |
||
4993 | AreaRej[i].Active := TRUE ; |
||
4994 | for i := 0 to ListRej.Count - 1 do |
||
4995 | AreaRej[i].Clear ; |
||
4996 | if CBRej4.ItemIndex = 2 |
||
4997 | then
|
||
4998 | for i := 0 to ListRej.Count - 1 do |
||
4999 | AreaRej[i].MultiArea := maStacked100 |
||
5000 | else
|
||
5001 | for i := 0 to ListRej.Count - 1 do |
||
5002 | AreaRej[i].MultiArea := maStacked ; |
||
5003 | for j := 1 to PResSimulT.NbJSim do |
||
5004 | begin
|
||
5005 | csv := FloatToStrF(RejX, ffFixed, 15, 15); |
||
5006 | if CBRej3.ItemIndex < 2 |
||
5007 | then // Azote ou phosphore : F?cal, Urinaire et Retenu |
||
5008 | for i := 0 to 2 do |
||
5009 | begin
|
||
5010 | AreaRej[i].AddXY (RejX, RejY, '', clTeeColor) ;
|
||
5011 | csv := csv + ';' + FloatToStrF(RejY, ffFixed, 15, 15); |
||
5012 | end
|
||
5013 | else // Autres : Retenu et Excr?t? |
||
5014 | for i := 2 to ListRej.Count - 1 do |
||
5015 | begin
|
||
5016 | AreaRej[i].AddXY (RejX, RejY, '', clTeeColor) ;
|
||
5017 | csv := csv + ';' + FloatToStrF(RejY, ffFixed, 15, 15); |
||
5018 | end;
|
||
5019 | MExport.Lines.Append(csv); |
||
5020 | end;
|
||
5021 | end ;
|
||
5022 | 2 : // R?partition par p?riode |
||
5023 | begin
|
||
5024 | Graph.BottomAxis.Title.Caption := CBRej2P.Text ; |
||
5025 | csv := CBRej2P.Text; |
||
5026 | if CBRej3.ItemIndex < 2 |
||
5027 | then // Azote ou phosphore : F?cal, Urinaire et Retenu |
||
5028 | for i := 0 to 2 do |
||
5029 | csv := csv + ';' + Format ('%s (%s)', [ListRej[i], CBRej4.Text]) |
||
5030 | else // Autres : Retenu et Excr?t? |
||
5031 | for i := 2 to ListRej.Count - 1 do |
||
5032 | csv := csv + ';' + Format ('%s (%s)', [ListRej[i], CBRej4.Text]); |
||
5033 | MExport.Lines.Append(csv); |
||
5034 | // Affichage des barres
|
||
5035 | if CBRej3.ItemIndex < 2 |
||
5036 | then // Azote ou phosphore : F?cal, Urinaire et Retenu |
||
5037 | for i := 0 to 2 do |
||
5038 | BarRej[i].Active := TRUE |
||
5039 | else // Autres : Retenu et Excr?t? |
||
5040 | for i := 2 to ListRej.Count - 1 do |
||
5041 | BarRej[i].Active := TRUE ; |
||
5042 | for i := 0 to ListRej.Count - 1 do |
||
5043 | BarRej[i].Clear ; |
||
5044 | if CBRej4.ItemIndex = 3 |
||
5045 | then
|
||
5046 | for i := 0 to ListRej.Count - 1 do |
||
5047 | BarRej[i].MultiBar := mbStacked100 |
||
5048 | else
|
||
5049 | for i := 0 to ListRej.Count - 1 do |
||
5050 | BarRej[i].MultiBar := mbStacked ; |
||
5051 | j := 1 ;
|
||
5052 | x := RejX ; |
||
5053 | k := 1 ;
|
||
5054 | if PResSimulT.NbJSim > 1 |
||
5055 | then
|
||
5056 | for j := 2 to PResSimulT.NbJSim do |
||
5057 | begin
|
||
5058 | p := RejX ; |
||
5059 | if x <> p
|
||
5060 | then
|
||
5061 | begin
|
||
5062 | // Changement de p?riode
|
||
5063 | if CBRej2P.ItemIndex = 1 |
||
5064 | then // Stade |
||
5065 | case Trunc (x) of |
||
5066 | 0 : s := StrGestation ;
|
||
5067 | 1 : s := StrLactation ;
|
||
5068 | 2 : s := StrISSF ;
|
||
5069 | end
|
||
5070 | else
|
||
5071 | s := Format ('%1.0f', [x]) ;
|
||
5072 | csv := s; |
||
5073 | if CBRej3.ItemIndex < 2 |
||
5074 | then // Azote ou phosphore : F?cal, Urinaire et Retenu |
||
5075 | for i := 0 to 2 do |
||
5076 | begin
|
||
5077 | y := RejY ; |
||
5078 | if y > PICO
|
||
5079 | then
|
||
5080 | BarRej[i].AddBar (y, s, clTeeColor) |
||
5081 | else
|
||
5082 | BarRej[i].AddNull (s) ; |
||
5083 | csv := csv + ';' + FloatToStrF(y, ffFixed, 15, 15); |
||
5084 | end
|
||
5085 | else // Autres : Retenu et Excr?t? |
||
5086 | for i := 2 to ListRej.Count - 1 do |
||
5087 | begin
|
||
5088 | y := RejY ; |
||
5089 | if y > PICO
|
||
5090 | then
|
||
5091 | BarRej[i].AddBar (y, s, clTeeColor) |
||
5092 | else
|
||
5093 | BarRej[i].AddNull (s) ; |
||
5094 | csv := csv + ';' + FloatToStrF(y, ffFixed, 15, 15); |
||
5095 | end ;
|
||
5096 | MExport.Lines.Append(csv); |
||
5097 | x := p ; |
||
5098 | k := j ; |
||
5099 | end ;
|
||
5100 | end ;
|
||
5101 | j := PResSimulT.NbJSim + 1 ;
|
||
5102 | if CBRej2P.ItemIndex = 2 |
||
5103 | then // Globale |
||
5104 | s := ' '
|
||
5105 | else
|
||
5106 | if CBRej2P.ItemIndex = 1 |
||
5107 | then // Stade |
||
5108 | case Trunc (x) of |
||
5109 | 0 : s := StrGestation ;
|
||
5110 | 1 : s := StrLactation ;
|
||
5111 | 2 : s := StrISSF ;
|
||
5112 | end
|
||
5113 | else
|
||
5114 | s := Format ('%1.0f', [x]) ;
|
||
5115 | csv := s; |
||
5116 | if CBRej3.ItemIndex < 2 |
||
5117 | then // Azote ou phosphore : F?cal, Urinaire et Retenu |
||
5118 | for i := 0 to 2 do |
||
5119 | begin
|
||
5120 | y := RejY ; |
||
5121 | if y > PICO
|
||
5122 | then
|
||
5123 | BarRej[i].AddBar (y, s, clTeeColor) |
||
5124 | else
|
||
5125 | BarRej[i].AddNull (s) ; |
||
5126 | csv := csv + ';' + FloatToStrF(y, ffFixed, 15, 15); |
||
5127 | end
|
||
5128 | else // Autres : Retenu et Excr?t? |
||
5129 | for i := 2 to ListRej.Count - 1 do |
||
5130 | begin
|
||
5131 | y := RejY ; |
||
5132 | if y > PICO
|
||
5133 | then
|
||
5134 | BarRej[i].AddBar (y, s, clTeeColor) |
||
5135 | else
|
||
5136 | BarRej[i].AddNull (s) ; |
||
5137 | csv := csv + ';' + FloatToStrF(y, ffFixed, 15, 15); |
||
5138 | end ;
|
||
5139 | MExport.Lines.Append(csv); |
||
5140 | end ;
|
||
5141 | end ;
|
||
5142 | if PieRej.Active
|
||
5143 | then
|
||
5144 | begin
|
||
5145 | Graph.View3DOptions.Orthogonal := FALSE ; |
||
5146 | Graph.View3DOptions.Elevation := 315 ;
|
||
5147 | Graph.View3DOptions.Rotation := 360 ;
|
||
5148 | Graph.View3DOptions.Perspective := 0 ;
|
||
5149 | end
|
||
5150 | else
|
||
5151 | begin
|
||
5152 | Graph.View3DOptions.Orthogonal := TRUE ; |
||
5153 | Graph.View3DOptions.Elevation := 345 ;
|
||
5154 | Graph.View3DOptions.Rotation := 345 ;
|
||
5155 | Graph.View3DOptions.Perspective := 15 ;
|
||
5156 | end ;
|
||
5157 | AjustEchelle (Graph) ; |
||
5158 | end ;
|
||
5159 | |||
5160 | procedure TFResSimulT.CBRej1Change (Sender : TObject) ;
|
||
5161 | begin
|
||
5162 | case CBRej1.ItemIndex of |
||
5163 | 0 : // R?partition globale |
||
5164 | begin
|
||
5165 | CBRej2D.Visible := FALSE ; |
||
5166 | CBRej2P.Visible := FALSE ; |
||
5167 | end ;
|
||
5168 | 1 : // R?partition dynamique |
||
5169 | begin
|
||
5170 | CBRej2D.Visible := TRUE ; |
||
5171 | CBRej2P.Visible := FALSE ; |
||
5172 | end ;
|
||
5173 | 2 : // R?partition par p?riode |
||
5174 | begin
|
||
5175 | CBRej2D.Visible := FALSE ; |
||
5176 | CBRej2P.Visible := TRUE ; |
||
5177 | end ;
|
||
5178 | end ;
|
||
5179 | CBRej3Change (nil) ;
|
||
5180 | end ;
|
||
5181 | |||
5182 | procedure TFResSimulT.CBRej2Change (Sender : TObject) ;
|
||
5183 | begin
|
||
5184 | AffGraphRej ; |
||
5185 | end ;
|
||
5186 | |||
5187 | procedure TFResSimulT.CBRej3Change (Sender : TObject) ;
|
||
5188 | begin
|
||
5189 | if CBRej3.ItemIndex > 3 |
||
5190 | then // Oligo-?l?ment |
||
5191 | PieRej.ValueFormat := Format ('# ##0 %s', [StrMg])
|
||
5192 | else // Macro-?l?ment |
||
5193 | PieRej.ValueFormat := Format ('# ##0 %s', [StrG]) ;
|
||
5194 | CBRej4.Items.Clear ; |
||
5195 | case CBRej1.ItemIndex of |
||
5196 | 0 : // R?partition globale |
||
5197 | if CBRej3.ItemIndex > 3 |
||
5198 | then // Oligo-?l?ment |
||
5199 | begin
|
||
5200 | CBRej4.Items.Add (StrMG) ; |
||
5201 | CBRej4.Items.Add ('%') ;
|
||
5202 | end
|
||
5203 | else // Macro-?l?ment |
||
5204 | begin
|
||
5205 | CBRej4.Items.Add (StrG) ; |
||
5206 | CBRej4.Items.Add ('%') ;
|
||
5207 | end ;
|
||
5208 | 1 : // R?partition dynamique |
||
5209 | if CBRej3.ItemIndex > 3 |
||
5210 | then // Oligo-?l?ment |
||
5211 | begin
|
||
5212 | CBRej4.Items.Add (Format ('%s/%s', [StrMG, StrJ])) ;
|
||
5213 | CBRej4.Items.Add (Format ('%s/%s %s', [StrMG, StrKg, StrAlimentUnit])) ;
|
||
5214 | CBRej4.Items.Add ('%') ;
|
||
5215 | end
|
||
5216 | else // Macro-?l?ment |
||
5217 | begin
|
||
5218 | CBRej4.Items.Add (Format ('%s/%s', [StrG, StrJ])) ;
|
||
5219 | CBRej4.Items.Add (Format ('%s/%s %s', [StrG, StrKg, StrAlimentUnit])) ;
|
||
5220 | CBRej4.Items.Add ('%') ;
|
||
5221 | end ;
|
||
5222 | 2 : // R?partition par p?riode |
||
5223 | if CBRej3.ItemIndex > 3 |
||
5224 | then // Oligo-?l?ment |
||
5225 | begin
|
||
5226 | CBRej4.Items.Add (StrMG) ; |
||
5227 | CBRej4.Items.Add (Format ('%s/%s', [StrMG, StrJ])) ;
|
||
5228 | CBRej4.Items.Add (Format ('%s/%s %s', [StrMG, StrKg, StrAlimentUnit])) ;
|
||
5229 | CBRej4.Items.Add ('%') ;
|
||
5230 | end
|
||
5231 | else // Macro-?l?ment |
||
5232 | begin
|
||
5233 | CBRej4.Items.Add (StrG) ; |
||
5234 | CBRej4.Items.Add (Format ('%s/%s', [StrG, StrJ])) ;
|
||
5235 | CBRej4.Items.Add (Format ('%s/%s %s', [StrG, StrKg, StrAlimentUnit])) ;
|
||
5236 | CBRej4.Items.Add ('%') ;
|
||
5237 | end ;
|
||
5238 | end ;
|
||
5239 | CBRej4.ItemIndex := 0 ;
|
||
5240 | AffGraphRej ; |
||
5241 | end ;
|
||
5242 | |||
5243 | procedure TFResSimulT.CBRej4Change (Sender : TObject) ;
|
||
5244 | begin
|
||
5245 | AffGraphRej ; |
||
5246 | end ;
|
||
5247 | |||
5248 | procedure TFResSimulT.WMSysCommand(var Message: TWMSysCommand); |
||
5249 | begin
|
||
5250 | if Message.CmdType = SC_MINIMIZE
|
||
5251 | then
|
||
5252 | Application.Minimize |
||
5253 | else
|
||
5254 | inherited;
|
||
5255 | end;
|
||
5256 | |||
5257 | end. |