diff options
author | Erich Eckner <git@eckner.net> | 2017-07-20 12:29:22 +0200 |
---|---|---|
committer | Erich Eckner <git@eckner.net> | 2017-07-20 12:29:22 +0200 |
commit | 60add613bc677f80eff5a55e3d9397ede2ede0b1 (patch) | |
tree | d313025e026e4970284e758c4ab373e8b3a9673e | |
parent | 6b0861f3f2803f283f1797f5b43d20770c5cf80c (diff) | |
download | epost-60add613bc677f80eff5a55e3d9397ede2ede0b1.tar.xz |
tPalette is jetzt eine Klasse
-rw-r--r-- | epost.lps | 167 | ||||
-rw-r--r-- | epostunit.pas | 300 |
2 files changed, 282 insertions, 185 deletions
@@ -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. |