diff options
author | Erich Eckner <git@eckner.net> | 2017-12-19 11:06:32 +0100 |
---|---|---|
committer | Erich Eckner <git@eckner.net> | 2017-12-19 11:06:32 +0100 |
commit | 02d293647c2f691cd5cd6f573f74b8a89c2707a0 (patch) | |
tree | 195fd1a1f3be88a720689849a9d31d216d2ad767 /epostunit.pas | |
parent | 47e2f4445b833e9d4bd88efb8e6df1b6c96c96c3 (diff) | |
download | epost-02d293647c2f691cd5cd6f573f74b8a89c2707a0.tar.xz |
skaliere kann nun auch die Werte skalieren
Diffstat (limited to 'epostunit.pas')
-rw-r--r-- | epostunit.pas | 80 |
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; |