summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErich Eckner <git@eckner.net>2017-07-20 12:29:22 +0200
committerErich Eckner <git@eckner.net>2017-07-20 12:29:22 +0200
commit60add613bc677f80eff5a55e3d9397ede2ede0b1 (patch)
treed313025e026e4970284e758c4ab373e8b3a9673e
parent6b0861f3f2803f283f1797f5b43d20770c5cf80c (diff)
downloadepost-60add613bc677f80eff5a55e3d9397ede2ede0b1.tar.xz
tPalette is jetzt eine Klasse
-rw-r--r--epost.lps167
-rw-r--r--epostunit.pas300
2 files changed, 282 insertions, 185 deletions
diff --git a/epost.lps b/epost.lps
index 3d3e628..858401b 100644
--- a/epost.lps
+++ b/epost.lps
@@ -7,8 +7,8 @@
<Unit0>
<Filename Value="epost.lpr"/>
<IsPartOfProject Value="True"/>
- <TopLine Value="41"/>
- <CursorPos X="86" Y="131"/>
+ <TopLine Value="502"/>
+ <CursorPos X="31" Y="531"/>
<UsageCount Value="202"/>
<Loaded Value="True"/>
</Unit0>
@@ -22,9 +22,10 @@
<Unit2>
<Filename Value="epostunit.pas"/>
<IsPartOfProject Value="True"/>
+ <IsVisibleTab Value="True"/>
<EditorIndex Value="1"/>
- <TopLine Value="7019"/>
- <CursorPos X="92" Y="7031"/>
+ <TopLine Value="435"/>
+ <CursorPos X="50" Y="461"/>
<UsageCount Value="201"/>
<Loaded Value="True"/>
</Unit2>
@@ -48,8 +49,8 @@
<Filename Value="typenunit.pas"/>
<IsPartOfProject Value="True"/>
<EditorIndex Value="8"/>
- <TopLine Value="1271"/>
- <CursorPos X="35" Y="1284"/>
+ <TopLine Value="2637"/>
+ <CursorPos X="36" Y="2618"/>
<UsageCount Value="200"/>
<Loaded Value="True"/>
</Unit5>
@@ -59,7 +60,7 @@
<EditorIndex Value="2"/>
<TopLine Value="55"/>
<CursorPos X="126" Y="71"/>
- <UsageCount Value="174"/>
+ <UsageCount Value="180"/>
<Loaded Value="True"/>
</Unit6>
<Unit7>
@@ -68,7 +69,7 @@
<EditorIndex Value="3"/>
<TopLine Value="133"/>
<CursorPos X="99" Y="152"/>
- <UsageCount Value="171"/>
+ <UsageCount Value="177"/>
<Loaded Value="True"/>
</Unit7>
<Unit8>
@@ -76,7 +77,7 @@
<IsPartOfProject Value="True"/>
<EditorIndex Value="7"/>
<CursorPos X="35" Y="10"/>
- <UsageCount Value="77"/>
+ <UsageCount Value="83"/>
<Loaded Value="True"/>
</Unit8>
<Unit9>
@@ -84,35 +85,34 @@
<EditorIndex Value="-1"/>
<TopLine Value="1612"/>
<CursorPos X="2" Y="1675"/>
- <UsageCount Value="8"/>
+ <UsageCount Value="7"/>
</Unit9>
<Unit10>
<Filename Value="../units/mystringlistunit.pas"/>
<EditorIndex Value="-1"/>
<TopLine Value="638"/>
<CursorPos X="58" Y="660"/>
- <UsageCount Value="10"/>
+ <UsageCount Value="9"/>
</Unit10>
<Unit11>
<Filename Value="../units/lowlevelunit.pas"/>
- <IsVisibleTab Value="True"/>
<EditorIndex Value="5"/>
- <TopLine Value="380"/>
- <CursorPos X="70" Y="403"/>
- <UsageCount Value="68"/>
+ <TopLine Value="506"/>
+ <CursorPos X="19" Y="517"/>
+ <UsageCount Value="70"/>
<Loaded Value="True"/>
</Unit11>
<Unit12>
<Filename Value="../units/randomunit.pas"/>
<EditorIndex Value="-1"/>
- <UsageCount Value="8"/>
+ <UsageCount Value="7"/>
</Unit12>
<Unit13>
<Filename Value="../units/matheunit.pas"/>
<EditorIndex Value="4"/>
<TopLine Value="517"/>
<CursorPos X="21" Y="393"/>
- <UsageCount Value="42"/>
+ <UsageCount Value="44"/>
<Loaded Value="True"/>
</Unit13>
<Unit14>
@@ -120,48 +120,48 @@
<EditorIndex Value="-1"/>
<TopLine Value="186"/>
<CursorPos Y="161"/>
- <UsageCount Value="10"/>
+ <UsageCount Value="9"/>
</Unit14>
<Unit15>
<Filename Value="/usr/lib/fpc/src/rtl/inc/objpash.inc"/>
<EditorIndex Value="-1"/>
<TopLine Value="182"/>
<CursorPos X="21" Y="202"/>
- <UsageCount Value="1"/>
+ <UsageCount Value="0"/>
</Unit15>
<Unit16>
<Filename Value="/usr/lib/fpc/src/rtl/unix/bunxovlh.inc"/>
<EditorIndex Value="-1"/>
<TopLine Value="61"/>
<CursorPos X="10" Y="99"/>
- <UsageCount Value="9"/>
+ <UsageCount Value="8"/>
</Unit16>
<Unit17>
<Filename Value="/usr/lib/fpc/src/rtl/unix/baseunix.pp"/>
<UnitName Value="BaseUnix"/>
<EditorIndex Value="-1"/>
<TopLine Value="61"/>
- <UsageCount Value="9"/>
+ <UsageCount Value="8"/>
</Unit17>
<Unit18>
<Filename Value="/usr/lib/fpc/src/rtl/unix/bunxovl.inc"/>
<EditorIndex Value="-1"/>
<TopLine Value="414"/>
<CursorPos X="20" Y="434"/>
- <UsageCount Value="9"/>
+ <UsageCount Value="8"/>
</Unit18>
<Unit19>
<Filename Value="/usr/lib/fpc/src/rtl/linux/bunxsysc.inc"/>
<EditorIndex Value="-1"/>
<TopLine Value="16"/>
- <UsageCount Value="9"/>
+ <UsageCount Value="8"/>
</Unit19>
<Unit20>
<Filename Value="/usr/lib/fpc/src/rtl/unix/bunxh.inc"/>
<EditorIndex Value="-1"/>
<TopLine Value="74"/>
<CursorPos X="15" Y="102"/>
- <UsageCount Value="9"/>
+ <UsageCount Value="8"/>
</Unit20>
<Unit21>
<Filename Value="/usr/lib/fpc/src/packages/fcl-image/src/fpimage.pp"/>
@@ -169,156 +169,153 @@
<EditorIndex Value="-1"/>
<TopLine Value="10"/>
<CursorPos X="3" Y="30"/>
- <UsageCount Value="9"/>
+ <UsageCount Value="8"/>
</Unit21>
<Unit22>
<Filename Value="../fpGUI/src/corelib/render/software/agg_basics.pas"/>
<EditorIndex Value="-1"/>
<TopLine Value="327"/>
<CursorPos X="12" Y="347"/>
- <UsageCount Value="2"/>
+ <UsageCount Value="1"/>
</Unit22>
<Unit23>
<Filename Value="/usr/lib/fpc/src/rtl/objpas/classes/classesh.inc"/>
<EditorIndex Value="-1"/>
<TopLine Value="673"/>
<CursorPos X="42" Y="705"/>
- <UsageCount Value="2"/>
+ <UsageCount Value="1"/>
</Unit23>
<Unit24>
<Filename Value="/usr/lib/fpc/src/rtl/objpas/math.pp"/>
<EditorIndex Value="-1"/>
<TopLine Value="166"/>
<CursorPos X="10" Y="183"/>
- <UsageCount Value="10"/>
+ <UsageCount Value="9"/>
</Unit24>
<Unit25>
<Filename Value="GTIWebServerTestAggActionHandlerUnit.pas"/>
<EditorIndex Value="-1"/>
<TopLine Value="53"/>
<CursorPos X="49" Y="82"/>
- <UsageCount Value="10"/>
+ <UsageCount Value="9"/>
</Unit25>
</Units>
<JumpHistory Count="30" HistoryIndex="29">
<Position1>
- <Filename Value="werteunit.pas"/>
- <Caret Line="374" Column="18" TopLine="345"/>
+ <Filename Value="epostunit.pas"/>
+ <Caret Line="1255" Column="12" TopLine="1226"/>
</Position1>
<Position2>
- <Filename Value="werteunit.pas"/>
- <Caret Line="379" Column="17" TopLine="350"/>
+ <Filename Value="epostunit.pas"/>
</Position2>
<Position3>
- <Filename Value="werteunit.pas"/>
- <Caret Line="382" Column="12" TopLine="353"/>
+ <Filename Value="epostunit.pas"/>
+ <Caret Line="37" Column="34" TopLine="13"/>
</Position3>
<Position4>
- <Filename Value="werteunit.pas"/>
- <Caret Line="393" Column="12" TopLine="364"/>
+ <Filename Value="epostunit.pas"/>
+ <Caret Line="38" Column="44" TopLine="13"/>
</Position4>
<Position5>
- <Filename Value="werteunit.pas"/>
- <Caret Line="399" Column="31" TopLine="370"/>
+ <Filename Value="epostunit.pas"/>
+ <Caret Line="44" Column="37" TopLine="15"/>
</Position5>
<Position6>
- <Filename Value="werteunit.pas"/>
- <Caret Line="405" Column="16" TopLine="376"/>
+ <Filename Value="epostunit.pas"/>
+ <Caret Line="252" Column="58" TopLine="223"/>
</Position6>
<Position7>
- <Filename Value="werteunit.pas"/>
- <Caret Line="406" Column="18" TopLine="377"/>
+ <Filename Value="epostunit.pas"/>
+ <Caret Line="390" Column="44" TopLine="361"/>
</Position7>
<Position8>
- <Filename Value="werteunit.pas"/>
- <Caret Line="411" Column="17" TopLine="382"/>
+ <Filename Value="epostunit.pas"/>
+ <Caret Line="391" Column="148" TopLine="362"/>
</Position8>
<Position9>
- <Filename Value="werteunit.pas"/>
- <Caret Line="414" Column="12" TopLine="385"/>
+ <Filename Value="epostunit.pas"/>
+ <Caret Line="431" TopLine="413"/>
</Position9>
<Position10>
- <Filename Value="werteunit.pas"/>
- <Caret Line="425" Column="12" TopLine="396"/>
+ <Filename Value="epostunit.pas"/>
</Position10>
<Position11>
- <Filename Value="werteunit.pas"/>
- <Caret Line="431" Column="31" TopLine="402"/>
+ <Filename Value="epostunit.pas"/>
+ <Caret Line="7493" Column="23" TopLine="7463"/>
</Position11>
<Position12>
- <Filename Value="werteunit.pas"/>
- <Caret Line="437" Column="16" TopLine="408"/>
+ <Filename Value="epostunit.pas"/>
+ <Caret Line="175" TopLine="175"/>
</Position12>
<Position13>
- <Filename Value="werteunit.pas"/>
- <Caret Line="438" Column="18" TopLine="409"/>
+ <Filename Value="epostunit.pas"/>
+ <Caret Line="252" Column="58" TopLine="223"/>
</Position13>
<Position14>
- <Filename Value="werteunit.pas"/>
- <Caret Line="443" Column="17" TopLine="414"/>
+ <Filename Value="epostunit.pas"/>
+ <Caret Line="255" Column="210" TopLine="226"/>
</Position14>
<Position15>
- <Filename Value="werteunit.pas"/>
- <Caret Line="446" Column="12" TopLine="417"/>
+ <Filename Value="epostunit.pas"/>
+ <Caret Line="390" Column="44" TopLine="361"/>
</Position15>
<Position16>
- <Filename Value="werteunit.pas"/>
- <Caret Line="497" Column="12" TopLine="469"/>
+ <Filename Value="epostunit.pas"/>
+ <Caret Line="391" Column="148" TopLine="362"/>
</Position16>
<Position17>
- <Filename Value="werteunit.pas"/>
- <Caret Line="500" Column="16" TopLine="472"/>
+ <Filename Value="epostunit.pas"/>
+ <Caret Line="399" Column="27" TopLine="370"/>
</Position17>
<Position18>
- <Filename Value="werteunit.pas"/>
- <Caret Line="501" Column="18" TopLine="473"/>
+ <Filename Value="epostunit.pas"/>
+ <Caret Line="407" Column="12" TopLine="378"/>
</Position18>
<Position19>
- <Filename Value="werteunit.pas"/>
- <Caret Line="502" Column="28" TopLine="474"/>
+ <Filename Value="epostunit.pas"/>
+ <Caret Line="460" Column="71" TopLine="443"/>
</Position19>
<Position20>
- <Filename Value="werteunit.pas"/>
- <Caret Line="504" Column="14" TopLine="476"/>
+ <Filename Value="epostunit.pas"/>
</Position20>
<Position21>
- <Filename Value="werteunit.pas"/>
- <Caret Line="505" Column="16" TopLine="477"/>
+ <Filename Value="epostunit.pas"/>
+ <Caret Line="4349" Column="29" TopLine="4336"/>
</Position21>
<Position22>
- <Filename Value="werteunit.pas"/>
- <Caret Line="557" Column="12" TopLine="529"/>
+ <Filename Value="epost.lpr"/>
+ <Caret Line="131" Column="86" TopLine="41"/>
</Position22>
<Position23>
- <Filename Value="werteunit.pas"/>
- <Caret Line="1078" Column="74" TopLine="1050"/>
+ <Filename Value="epostunit.pas"/>
+ <Caret Line="4359" Column="30" TopLine="4336"/>
</Position23>
<Position24>
- <Filename Value="werteunit.pas"/>
+ <Filename Value="epostunit.pas"/>
</Position24>
<Position25>
<Filename Value="epostunit.pas"/>
- <Caret Line="5678" Column="108" TopLine="5666"/>
+ <Caret Line="387" Column="21" TopLine="358"/>
</Position25>
<Position26>
- <Filename Value="werteunit.pas"/>
- <Caret Line="1026" Column="67" TopLine="1020"/>
+ <Filename Value="epostunit.pas"/>
+ <Caret Line="7444" Column="21" TopLine="7445"/>
</Position26>
<Position27>
- <Filename Value="typenunit.pas"/>
- <Caret Line="2475" Column="86" TopLine="2463"/>
+ <Filename Value="epostunit.pas"/>
+ <Caret Line="39" Column="15" TopLine="21"/>
</Position27>
<Position28>
- <Filename Value="../units/lowlevelunit.pas"/>
- <Caret Line="41" Column="44" TopLine="24"/>
+ <Filename Value="epostunit.pas"/>
+ <Caret Line="40" Column="23" TopLine="21"/>
</Position28>
<Position29>
<Filename Value="epostunit.pas"/>
- <Caret Line="9" Column="62"/>
+ <Caret Line="460" Column="64" TopLine="435"/>
</Position29>
<Position30>
<Filename Value="../units/lowlevelunit.pas"/>
- <Caret Line="388" Column="58" TopLine="380"/>
+ <Caret Line="74" Column="11" TopLine="56"/>
</Position30>
</JumpHistory>
</ProjectSession>
diff --git a/epostunit.pas b/epostunit.pas
index 5c62226..87bb0ed 100644
--- a/epostunit.pas
+++ b/epostunit.pas
@@ -27,13 +27,20 @@ type
biClrUsed : longint;
biClrImportant : longint;
end ;
- tPalette = record
+ tPalette = class
+ private
+ farben: array[boolean] of tRGBArray;
+ public
name: string;
- farben: tRGBArray;
+ constructor create;
+ constructor create(original: tPalette);
+ destructor destroy; override;
+ procedure kopiereVon(original: tPalette);
+ function neuerWert(s: string; imPart: boolean): boolean; overload;
+ function neuerWert(farbe: tRGB; imPart: boolean): boolean; overload;
+ function wertZuFarbe(x: extended; imPart: boolean = false): tRGB; inline;
end;
- tRGBArrayArray = array of tRGBArray;
- pTPalette = ^tPalette;
- pTPalettenArray = array of pTPalette;
+ tPalettenArray = array of tPalette;
tWerte = class;
tLiKo = array of record
alpha: extended;
@@ -241,10 +248,10 @@ type
farben: tRGBArray;
wertes: array of tExtendedArray;
anzahlens: array of tLongintArray;
- pals: tRGBArrayArray;
- rahmen: boolean;
+ pals: array of tPalette;
+ rahmen,komplex: boolean;
beschr: pTBeschriftungen;
- constructor create(i,maxThreads,iBreite,iHoehe,lO,oO,rO,uO: longint; const wes: tWerteArray; xMin,xMax,tMin,tMax: longint; xZoom,yZoom: extended; nachbearbeitungen: tTransformationArray; paletten: pTPalettenArray; beschri: pTBeschriftungen; rm: boolean);
+ constructor create(i,maxThreads,iBreite,iHoehe,lO,oO,rO,uO: longint; const wes: tWerteArray; xMin,xMax,tMin,tMax: longint; xZoom,yZoom: extended; nachbearbeitungen: tTransformationArray; paletten: tPalettenArray; beschri: pTBeschriftungen; rm,kmpl: boolean);
destructor destroy; override;
procedure stExecute; override;
procedure initAnzahlensFuerKontur;
@@ -379,8 +386,8 @@ type
function neuePalette(f: tMyStringList): boolean;
function initBmpHeader(w,h: longint): tBmpHeader;
procedure schreibeBmpHeader(var f: file; w,h: longint);
-function findePalette(out palette: pTPalette; name: string): boolean;
-function erzeugeLegende(sT: boolean; f: tMyStringList; datei: string; qu: tWerte; minDichte,maxDichte: extended; nB: tTransformation; pal: pTPalette): boolean;
+function findePalette(out palette: tPalette; name: string): boolean;
+function erzeugeLegende(sT: boolean; f: tMyStringList; datei: string; qu: tWerte; minDichte,maxDichte: extended; nB: tTransformation; pal: tPalette): boolean;
function findeWerte(s: string; f: tMyStringList; pws: pTWerteArray; kont: pTKonturenArray; darfErstellen: boolean): integer;
function findeKontur(s: string; f: tMyStringList; pws: pTWerteArray; pks: pTKonturenArray; darfErstellen: boolean): integer;
function externerBefehl(sT: boolean; s: string): boolean;
@@ -388,7 +395,7 @@ procedure warteAufExterneBefehle;
procedure beendeExterneBefehleWennFertig;
var
- paletten: array of tPalette;
+ allePaletten: tPalettenArray;
behalteLogs: boolean;
externeBefehle: array of tBefehlThread;
@@ -396,6 +403,69 @@ implementation
uses math, systemunit;
+// tPalette ********************************************************************
+
+constructor tPalette.create;
+var
+ b: boolean;
+begin
+ inherited create;
+ for b:=false to true do begin
+ fillchar(farben,sizeOf(farben),0);
+ setLength(farben[b],0);
+ end;
+ fillchar(name,sizeOf(name),0);
+end;
+
+constructor tPalette.create(original: tPalette);
+begin
+ create;
+ kopiereVon(original);
+end;
+
+destructor tPalette.destroy;
+var
+ b: boolean;
+begin
+ for b:=false to true do
+ setLength(farben[b],0);
+ inherited destroy;
+end;
+
+procedure tPalette.kopiereVon(original: tPalette);
+var
+ b: boolean;
+ i: longint;
+begin
+ name:=original.name;
+ for b:=false to true do begin
+ setLength(farben[b],length(original.farben[b]));
+ for i:=0 to length(farben[b])-1 do
+ move(original.farben[b][i],farben[b][i],sizeOf(farben[b][i]));
+ end;
+end;
+
+function tPalette.neuerWert(s: string; imPart: boolean): boolean;
+var
+ farbe: tRGB;
+begin
+ result:=strToTRGB(s,farbe);
+ if result then
+ neuerWert(farbe,imPart);
+end;
+
+function tPalette.neuerWert(farbe: tRGB; imPart: boolean): boolean;
+begin
+ setLength(farben[imPart],length(farben[imPart])+1);
+ farben[imPart][length(farben[imPart])-1]:=farbe;
+ result:=true;
+end;
+
+function tPalette.wertZuFarbe(x: extended; imPart: boolean = false): tRGB;
+begin
+ result:=lowlevelunit.wertZuFarbe(x,farben[imPart]);
+end;
+
// tDatenVorfahr ***************************************************************
constructor tDatenVorfahr.create(kont: pTKonturenArray; wert: pTWerteArray);
@@ -4136,7 +4206,7 @@ var
xp0,tp0: extended;
xMin,xMax,tMin,tMax,xp,tp,
breite,hoehe,lOf,rOf,oOf,uOf: longint;
- paletten: pTPalettenArray;
+ paletten: tPalettenArray;
nachbearbeitungen: tTransformationArray;
Ausschnitt: tTransformation;
bilderThreads: array of tBilderThread;
@@ -4252,8 +4322,10 @@ begin
i:=strtoint(erstesArgument(s))
else
i:=0;
- if i>=length(paletten) then
- setLength(paletten,i+1);
+ while i>=length(paletten) do begin
+ setLength(paletten,length(paletten)+1);
+ paletten[length(paletten)-1]:=nil;
+ end;
if not findePalette(paletten[i],s) then begin
gibAus('Kenne Palette '''+s+''' nicht!',3);
aufraeumen;
@@ -4293,6 +4365,11 @@ begin
continue;
end;
if istDasBefehl('Legende:',s,bekannteBefehle,true) then begin
+ if komplex then begin
+ gibAus('Ich kann keine Legende zu komplexen Werten erstellen!',3);
+ aufraeumen;
+ exit;
+ end;
if s[1] in ['0'..'9'] then
i:=strtoint(erstesArgument(s))
else
@@ -4490,7 +4567,7 @@ begin
setLength(bilderThreads,maxThreads);
for i:=0 to length(bilderThreads)-1 do
- bilderThreads[i]:=tBilderThread.create(i,length(bilderThreads),breite,hoehe,lOf,oOf,rOf,uOf,quellen,xMin,xMax,tMin,tMax,xZoom,yZoom,nachbearbeitungen,paletten,@beschriftungen,rahmen);
+ bilderThreads[i]:=tBilderThread.create(i,length(bilderThreads),breite,hoehe,lOf,oOf,rOf,uOf,quellen,xMin,xMax,tMin,tMax,xZoom,yZoom,nachbearbeitungen,paletten,@beschriftungen,rahmen,komplex);
for i:=0 to length(bilderThreads)-1 do begin
gibAus('starte Thread '+intToStr(i)+' ...',1);
bilderThreads[i].suspended:=false;
@@ -5470,7 +5547,7 @@ end;
// tBilderThread ***************************************************************
-constructor tBilderThread.create(i,maxThreads,iBreite,iHoehe,lO,oO,rO,uO: longint; const wes: tWerteArray; xMin,xMax,tMin,tMax: longint; xZoom,yZoom: extended; nachbearbeitungen: tTransformationArray; paletten: pTPalettenArray; beschri: pTBeschriftungen; rm: boolean);
+constructor tBilderThread.create(i,maxThreads,iBreite,iHoehe,lO,oO,rO,uO: longint; const wes: tWerteArray; xMin,xMax,tMin,tMax: longint; xZoom,yZoom: extended; nachbearbeitungen: tTransformationArray; paletten: tPalettenArray; beschri: pTBeschriftungen; rm,kmpl: boolean);
var
ii: longint;
begin
@@ -5494,8 +5571,9 @@ begin
nbs:=nachbearbeitungen;
setLength(pals,length(paletten));
for ii:=0 to length(pals)-1 do
- pals[ii]:=paletten[ii]^.farben;
+ pals[ii]:=paletten[ii];
rahmen:=rm;
+ komplex:=kmpl;
xPMi:=nummer*((gesBreite+lOf+rOf) div mT)-lOf;
if nummer=mT-1 then xPMa:=gesBreite+rOf-1 // der letzte Thread bekommt den Rest
else xPMa:=(nummer+1)*((gesBreite+lOf+rOf) div mT)-lOf-1;
@@ -5559,17 +5637,18 @@ begin
farben[i-xPMi+(j+oOf)*breite].rgbRed:=0;
farben[i-xPMi+(j+oOf)*breite].rgbGreen:=0;
farben[i-xPMi+(j+oOf)*breite].rgbBlue:=0;
- for k:=0 to length(wertes)-1 do begin
- wert:=(wertes[k,i-max(0,xPMi)+j*wBreite]/anzahlens[k,i-max(0,xPMi)+j*wBreite]-ws[k]._minW)/(ws[k]._maxW-ws[k]._minW);
- wert:=max(0,min(wert,1));
- wert:=nbs[k].transformiereWert(wert);
- frb:=wertZuFarbe(wert,pals[k]);
- with farben[i-xPMi+(j+oOf)*breite] do begin // farben startet bei Index 0 + 0*breite
- rgbRed:= rgbRed + frb.rgbRed;
- rgbGreen:=rgbGreen + frb.rgbGreen;
- rgbBlue:= rgbBlue + frb.rgbBlue;
+ for k:=0 to length(wertes)-1 do
+ for b:=false to false do begin
+ wert:=(wertes[k,i-max(0,xPMi)+(j+byte(b)*wHoehe)*wBreite]/anzahlens[k,i-max(0,xPMi)+(j+byte(b)*wHoehe)*wBreite]-ws[k]._minW)/(ws[k]._maxW-ws[k]._minW);
+ wert:=max(0,min(wert,1));
+ wert:=nbs[k].transformiereWert(wert);
+ frb:=pals[k].wertZuFarbe(wert,b);
+ with farben[i-xPMi+(j+oOf)*breite] do begin // farben startet bei Index 0 + 0*breite
+ rgbRed:= rgbRed + frb.rgbRed;
+ rgbGreen:=rgbGreen + frb.rgbGreen;
+ rgbBlue:= rgbBlue + frb.rgbBlue;
+ end;
end;
- end;
end
else begin
farben[i-xPMi+(j+oOf)*breite].rgbRed:=
@@ -6934,22 +7013,21 @@ end;
// sonstiges *******************************************************************
-function findePalette(out palette: pTPalette; name: string): boolean;
+function findePalette(out palette: tPalette; name: string): boolean;
var
i: longint;
begin
result:=true;
- for i:=0 to length(paletten)-1 do
- if paletten[i].name=name then
- begin
- palette:=@(paletten[i]);
- exit;
+ for i:=0 to length(allePaletten)-1 do
+ if allePaletten[i].name=name then begin
+ palette:=allePaletten[i];
+ exit;
end;
palette:=nil;
result:=false;
end;
-function erzeugeLegende(sT: boolean; f: tMyStringList; datei: string; qu: tWerte; minDichte,maxDichte: extended; nB: tTransformation; pal: pTPalette): boolean;
+function erzeugeLegende(sT: boolean; f: tMyStringList; datei: string; qu: tWerte; minDichte,maxDichte: extended; nB: tTransformation; pal: tPalette): boolean;
var
s: string;
breite,hoehe,i,j,k,lO,rO,oO,uO,
@@ -7147,7 +7225,7 @@ begin
wert:=i/length(farben);
if not lineareFarbe then
wert:=nB.transformiereWert(wert);
- farben[i]:=wertZuFarbe(wert,pal^.farben);
+ farben[i]:=pal.wertZuFarbe(wert);
end;
assign(img,datei);
rewrite(img,1);
@@ -7335,15 +7413,15 @@ end;
function neuePalette(f: tMyStringList): boolean;
var
- s,name: string;
- palette: tRGBArray;
- i: longint;
- nPalette: pTPalette;
+ s,name: string;
+ palette,nPalette: tPalette;
+ imPart: boolean;
begin
result:=false;
- setLength(palette,0);
- name:='';
+ palette:=tPalette.create;
nPalette:=nil;
+ name:='';
+ imPart:=false;
repeat
if not f.metaReadln(s,true) then begin
gibAus('Unerwartetes Dateiende in '''+paramstr(1)+'''!',3);
@@ -7355,8 +7433,16 @@ begin
findePalette(nPalette,s);
continue;
end;
- setLength(palette,length(palette)+1);
- if strToTRGB(s,palette[length(palette)-1]) then continue;
+ if startetMit('Imaginärteile:',s) then begin
+ if imPart then begin
+ gibAus('Ich hatte schon Imaginärteile für diese Palette gelesen!',3);
+ exit;
+ end;
+ imPart:=true;
+ continue;
+ end;
+ if palette.neuerWert(s,imPart) then
+ continue;
gibAus(''''+s+''' ist keine Farbe für eine Palette!',3);
exit;
until false;
@@ -7364,19 +7450,21 @@ begin
gibAus('Die Palette braucht einen Namen!',3);
exit;
end;
- if length(palette)<2 then begin
- gibAus('Zu wenige Farben in der Palette '''+name+''', nämlich nur '+intToStr(length(palette)),3);
+ if length(palette.farben[false])<2 then begin
+ gibAus('Zu wenige Farben in der Palette '''+name+''', nämlich nur '+intToStr(length(palette.farben[false])),3);
exit;
end;
if nPalette=nil then begin
- setLength(paletten,length(paletten)+1);
- nPalette:=@(paletten[length(paletten)-1]);
- end;
- nPalette^.name:=name;
- setLength(nPalette^.farben,length(palette));
- for i:=0 to length(palette)-1 do
- nPalette^.farben[i]:=palette[i];
- gibAus('Neue Palette '''+nPalette^.name+''' erstellt!',3);
+ setLength(allePaletten,length(allePaletten)+1);
+ allePaletten[length(allePaletten)-1]:=tPalette.create;
+ nPalette:=allePaletten[length(allePaletten)-1];
+ end
+ else
+ gibAus('Überschreibe bereits vorhandene Palette '''+nPalette.name+'''.',3);
+ nPalette.kopiereVon(palette);
+ nPalette.name:=name;
+ palette.free;
+ gibAus('Neue Palette '''+nPalette.name+''' erstellt!',3);
result:=true;
end;
@@ -7445,57 +7533,69 @@ begin
end;
end;
+var
+ i: longint;
+
begin
fileMode := fmOpenRead;
setLength(externeBefehle,0);
- setLength(paletten,6);
- paletten[0].name:='Graustufen';
- setLength(paletten[0].farben,2);
- paletten[0].farben[0]:=rgb($ff,$ff,$ff);
- paletten[0].farben[1]:=rgb($00,$00,$00);
-
- paletten[1].name:='invertierte Graustufen';
- setLength(paletten[1].farben,2);
- paletten[1].farben[0]:=rgb($00,$00,$00);
- paletten[1].farben[1]:=rgb($ff,$ff,$ff);
-
- paletten[2].name:='Regenbogen';
- setLength(paletten[2].farben,6);
- paletten[2].farben[0]:=rgb($00,$00,$ff);
- paletten[2].farben[1]:=rgb($00,$ff,$ff);
- paletten[2].farben[2]:=rgb($00,$ff,$00);
- paletten[2].farben[3]:=rgb($ff,$ff,$00);
- paletten[2].farben[4]:=rgb($ff,$00,$00);
- paletten[2].farben[5]:=rgb($00,$00,$00);
-
- paletten[3].name:='invertierter Regenbogen';
- setLength(paletten[3].farben,6);
- paletten[3].farben[0]:=rgb($00,$00,$00);
- paletten[3].farben[1]:=rgb($ff,$00,$00);
- paletten[3].farben[2]:=rgb($ff,$ff,$00);
- paletten[3].farben[3]:=rgb($00,$ff,$00);
- paletten[3].farben[4]:=rgb($00,$ff,$ff);
- paletten[3].farben[5]:=rgb($00,$00,$ff);
-
- paletten[4].name:='Jet-Regenbogen';
- setLength(paletten[4].farben,5);
- paletten[4].farben[0]:=rgb($ff,$00,$00);
- paletten[4].farben[1]:=rgb($ff,$ff,$00);
- paletten[4].farben[2]:=rgb($00,$ff,$00);
- paletten[4].farben[3]:=rgb($00,$ff,$ff);
- paletten[4].farben[4]:=rgb($00,$00,$ff);
-
- paletten[5].name:='erweiterter Regenbogen';
- setLength(paletten[5].farben,8);
- paletten[5].farben[0]:=rgb($ff,$ff,$ff);
- paletten[5].farben[1]:=rgb($00,$00,$ff);
- paletten[5].farben[2]:=rgb($00,$ff,$ff);
- paletten[5].farben[3]:=rgb($00,$ff,$00);
- paletten[5].farben[4]:=rgb($ff,$ff,$00);
- paletten[5].farben[5]:=rgb($ff,$00,$00);
- paletten[5].farben[6]:=rgb($ff,$00,$ff);
- paletten[5].farben[7]:=rgb($00,$00,$00);
+ setLength(allePaletten,8);
+ for i:=0 to length(allePaletten)-1 do
+ allePaletten[i]:=tPalette.create;
+
+ allePaletten[0].name:='Graustufen';
+ allePaletten[0].neuerWert(rgb($ff,$ff,$ff),false);
+ allePaletten[0].neuerWert(rgb($00,$00,$00),false);
+
+ allePaletten[1].name:='invertierte Graustufen';
+ allePaletten[1].neuerWert(rgb($00,$00,$00),false);
+ allePaletten[1].neuerWert(rgb($ff,$ff,$ff),false);
+
+ allePaletten[2].name:='Regenbogen';
+ allePaletten[2].neuerWert(rgb($00,$00,$ff),false);
+ allePaletten[2].neuerWert(rgb($00,$ff,$ff),false);
+ allePaletten[2].neuerWert(rgb($00,$ff,$00),false);
+ allePaletten[2].neuerWert(rgb($ff,$ff,$00),false);
+ allePaletten[2].neuerWert(rgb($ff,$00,$00),false);
+ allePaletten[2].neuerWert(rgb($00,$00,$00),false);
+
+ allePaletten[3].name:='invertierter Regenbogen';
+ allePaletten[3].neuerWert(rgb($00,$00,$00),false);
+ allePaletten[3].neuerWert(rgb($ff,$00,$00),false);
+ allePaletten[3].neuerWert(rgb($ff,$ff,$00),false);
+ allePaletten[3].neuerWert(rgb($00,$ff,$00),false);
+ allePaletten[3].neuerWert(rgb($00,$ff,$ff),false);
+ allePaletten[3].neuerWert(rgb($00,$00,$ff),false);
+
+ allePaletten[4].name:='Jet-Regenbogen';
+ allePaletten[4].neuerWert(rgb($ff,$00,$00),false);
+ allePaletten[4].neuerWert(rgb($ff,$ff,$00),false);
+ allePaletten[4].neuerWert(rgb($00,$ff,$00),false);
+ allePaletten[4].neuerWert(rgb($00,$ff,$ff),false);
+ allePaletten[4].neuerWert(rgb($00,$00,$ff),false);
+
+ allePaletten[5].name:='erweiterter Regenbogen';
+ allePaletten[5].neuerWert(rgb($ff,$ff,$ff),false);
+ allePaletten[5].neuerWert(rgb($00,$00,$ff),false);
+ allePaletten[5].neuerWert(rgb($00,$ff,$ff),false);
+ allePaletten[5].neuerWert(rgb($00,$ff,$00),false);
+ allePaletten[5].neuerWert(rgb($ff,$ff,$00),false);
+ allePaletten[5].neuerWert(rgb($ff,$00,$00),false);
+ allePaletten[5].neuerWert(rgb($ff,$00,$ff),false);
+ allePaletten[5].neuerWert(rgb($00,$00,$00),false);
+
+ allePaletten[6].name:='komplexer Martin';
+ allePaletten[6].neuerWert(rgb($00,$00,$ff),false);
+ allePaletten[6].neuerWert(rgb($ff,$00,$00),false);
+ allePaletten[6].neuerWert(rgb($00,$ff,$00),true);
+ allePaletten[6].neuerWert(rgb($00,$00,$00),true);
+
+ allePaletten[6].name:='invertierter komplexer Martin';
+ allePaletten[7].neuerWert(rgb($ff,$ff,$00),false);
+ allePaletten[7].neuerWert(rgb($00,$ff,$ff),false);
+ allePaletten[7].neuerWert(rgb($ff,$00,$ff),true);
+ allePaletten[7].neuerWert(rgb($ff,$ff,$ff),true);
end.