summaryrefslogtreecommitdiff
path: root/epostunit.pas
diff options
context:
space:
mode:
authorErich Eckner <git@eckner.net>2017-12-19 11:06:32 +0100
committerErich Eckner <git@eckner.net>2017-12-19 11:06:32 +0100
commit02d293647c2f691cd5cd6f573f74b8a89c2707a0 (patch)
tree195fd1a1f3be88a720689849a9d31d216d2ad767 /epostunit.pas
parent47e2f4445b833e9d4bd88efb8e6df1b6c96c96c3 (diff)
downloadepost-02d293647c2f691cd5cd6f573f74b8a89c2707a0.tar.xz
skaliere kann nun auch die Werte skalieren
Diffstat (limited to 'epostunit.pas')
-rw-r--r--epostunit.pas80
1 files changed, 68 insertions, 12 deletions
diff --git a/epostunit.pas b/epostunit.pas
index 3b2a43c..bdd6044 100644
--- a/epostunit.pas
+++ b/epostunit.pas
@@ -455,6 +455,13 @@ type
constructor create(werte: tWerte; xMin,xMax,tMin,tMax: longint; vertikal: boolean; exponent: int64);
procedure stExecute; override;
end;
+ tSkalierungsThread = class(tLogThread)
+ we: tWerte;
+ tMi,tMa: longint;
+ skal: string;
+ constructor create(werte: tWerte; tMin,tMax: longint; skalierung: string);
+ procedure stExecute; override;
+ end;
function neuePalette(f: tMyStringList): boolean;
function initBmpHeader(w,h: longint): tBmpHeader;
@@ -4591,12 +4598,15 @@ end;
function tWerte.skaliere(sT: boolean; f: tMyStringList; threads: longint): boolean;
var
- bekannteBefehle: tMyStringList;
- s,speichernAls: string;
- skalierung: array['x'..'z'] of string;
- nullen: array['x'..'y'] of boolean;
- c: char;
- transformation: tLineareAchsenVerzerrTransformation;
+ bekannteBefehle: tMyStringList;
+ s,speichernAls: string;
+ skalierung: array['x'..'z'] of string;
+ nullen: array['x'..'y'] of boolean;
+ c: char;
+ transformation: tLineareAchsenVerzerrTransformation;
+ skalierungsThreads: array of tSkalierungsThread;
+ i: longint;
+ fertig: boolean;
begin
result:=false;
bekannteBefehle:=tMyStringList.create;
@@ -4665,12 +4675,31 @@ begin
transformationen:=transformation;
end;
- if skalierung['z']<>'1' then
- fehler('Werteskalierung ist noch nicht implementiert!');
-
- if sT then begin
- result:=true;
- exit;
+ if skalierung['z']<>'1' then begin
+ if sT then begin
+ knownValues.add('x',_xStart);
+ knownValues.add('y',_tStart);
+ exprToFloat(sT,skalierung['z']);
+ knownValues.rem('x');
+ knownValues.rem('y');
+ end
+ else begin
+ setLength(skalierungsThreads,threads);
+ for i:=0 to length(skalierungsThreads)-1 do
+ skalierungsThreads[i]:=
+ tSkalierungsThread.create(
+ self,
+ round(i*_tSiz/length(skalierungsThreads)),
+ round((i+1)*_tSiz/length(skalierungsThreads))-1,
+ skalierung['z']
+ );
+ repeat
+ sleep(10);
+ fertig:=true;
+ for i:=0 to length(skalierungsThreads)-1 do
+ fertig:=skalierungsThreads[i].fertig and fertig;
+ until fertig;
+ end;
end;
result:=true;
@@ -8305,6 +8334,33 @@ begin
gibAus('KantenExtraktionsThread beendet',1);
end;
+// tSkalierungsThread **********************************************************
+
+constructor tSkalierungsThread.create(werte: tWerte; tMin,tMax: longint; skalierung: string);
+begin
+ inherited create;
+ we:=werte;
+ tMi:=tMin;
+ tMa:=tMax;
+ skal:=skalierung;
+ suspended:=false;
+ gibAus('SkalierungsThread erzeugt: '+intToStr(tMi)+'-'+intToStr(tMa)+' '''+skal+'''',1);
+end;
+
+procedure tSkalierungsThread.stExecute;
+begin
+ gibAus('SkalierungsThread gestartet',1);
+ case we.genauigkeit of
+ gSingle:
+ we.sWerte.skaliere(tMi,tMa,skal,we.transformationen,we.knownValues,@we.callBackGetValue);
+ gDouble:
+ we.dWerte.skaliere(tMi,tMa,skal,we.transformationen,we.knownValues,@we.callBackGetValue);
+ gExtended:
+ we.eWerte.skaliere(tMi,tMa,skal,we.transformationen,we.knownValues,@we.callBackGetValue);
+ end{of case};
+ gibAus('SkalierungsThread beendet',1);
+end;
+
// sonstiges *******************************************************************
function findePalette(out palette: tPalette; name: string): boolean;