diff options
-rw-r--r-- | epost.lps | 171 | ||||
-rw-r--r-- | epostunit.pas | 75 | ||||
-rw-r--r-- | typenunit.pas | 42 | ||||
-rw-r--r-- | werteunit.inc | 18 | ||||
-rw-r--r-- | werteunit.pas | 30 |
5 files changed, 232 insertions, 104 deletions
@@ -7,8 +7,8 @@ <Unit0> <Filename Value="epost.lpr"/> <IsPartOfProject Value="True"/> - <TopLine Value="172"/> - <CursorPos X="15" Y="201"/> + <TopLine Value="61"/> + <CursorPos Y="74"/> <UsageCount Value="202"/> <Loaded Value="True"/> </Unit0> @@ -22,10 +22,9 @@ <Unit2> <Filename Value="epostunit.pas"/> <IsPartOfProject Value="True"/> - <IsVisibleTab Value="True"/> <EditorIndex Value="1"/> - <TopLine Value="8228"/> - <CursorPos X="2" Y="8236"/> + <TopLine Value="5753"/> + <CursorPos X="4" Y="5767"/> <UsageCount Value="201"/> <Loaded Value="True"/> </Unit2> @@ -39,8 +38,10 @@ <Unit4> <Filename Value="werteunit.pas"/> <IsPartOfProject Value="True"/> + <IsVisibleTab Value="True"/> <EditorIndex Value="8"/> - <CursorPos X="114" Y="15"/> + <TopLine Value="1001"/> + <CursorPos X="24" Y="1004"/> <UsageCount Value="200"/> <Loaded Value="True"/> </Unit4> @@ -48,8 +49,8 @@ <Filename Value="typenunit.pas"/> <IsPartOfProject Value="True"/> <EditorIndex Value="11"/> - <TopLine Value="2501"/> - <CursorPos X="14" Y="2530"/> + <TopLine Value="1163"/> + <CursorPos X="37" Y="1174"/> <UsageCount Value="200"/> <Loaded Value="True"/> </Unit5> @@ -67,7 +68,7 @@ <IsPartOfProject Value="True"/> <EditorIndex Value="4"/> <TopLine Value="156"/> - <CursorPos X="12" Y="191"/> + <CursorPos X="56" Y="179"/> <UsageCount Value="202"/> <Loaded Value="True"/> </Unit7> @@ -76,16 +77,16 @@ <IsPartOfProject Value="True"/> <EditorIndex Value="10"/> <CursorPos X="35" Y="10"/> - <UsageCount Value="179"/> + <UsageCount Value="187"/> <Loaded Value="True"/> </Unit8> <Unit9> <Filename Value="werteunit.inc"/> <IsPartOfProject Value="True"/> <EditorIndex Value="9"/> - <TopLine Value="382"/> - <CursorPos X="59" Y="417"/> - <UsageCount Value="66"/> + <TopLine Value="433"/> + <CursorPos X="9" Y="468"/> + <UsageCount Value="74"/> <Loaded Value="True"/> </Unit9> <Unit10> @@ -93,14 +94,14 @@ <EditorIndex Value="7"/> <TopLine Value="198"/> <CursorPos X="19" Y="226"/> - <UsageCount Value="34"/> + <UsageCount Value="38"/> <Loaded Value="True"/> </Unit10> <Unit11> <Filename Value="../units/lowlevelunit.pas"/> <EditorIndex Value="6"/> - <TopLine Value="99"/> - <CursorPos Y="112"/> + <TopLine Value="757"/> + <CursorPos Y="775"/> <UsageCount Value="100"/> <Loaded Value="True"/> </Unit11> @@ -109,7 +110,7 @@ <EditorIndex Value="5"/> <TopLine Value="32"/> <CursorPos X="46" Y="50"/> - <UsageCount Value="93"/> + <UsageCount Value="97"/> <Loaded Value="True"/> </Unit12> <Unit13> @@ -117,7 +118,7 @@ <EditorIndex Value="2"/> <TopLine Value="126"/> <CursorPos X="7" Y="147"/> - <UsageCount Value="48"/> + <UsageCount Value="52"/> <Loaded Value="True"/> </Unit13> <Unit14> @@ -125,41 +126,41 @@ <EditorIndex Value="-1"/> <TopLine Value="182"/> <CursorPos X="21" Y="202"/> - <UsageCount Value="3"/> + <UsageCount Value="2"/> </Unit14> <Unit15> <Filename Value="/usr/lib/fpc/src/rtl/unix/bunxovlh.inc"/> <EditorIndex Value="-1"/> <TopLine Value="61"/> <CursorPos X="10" Y="99"/> - <UsageCount Value="1"/> + <UsageCount Value="0"/> </Unit15> <Unit16> <Filename Value="/usr/lib/fpc/src/rtl/unix/baseunix.pp"/> <UnitName Value="BaseUnix"/> <EditorIndex Value="-1"/> <TopLine Value="61"/> - <UsageCount Value="1"/> + <UsageCount Value="0"/> </Unit16> <Unit17> <Filename Value="/usr/lib/fpc/src/rtl/unix/bunxovl.inc"/> <EditorIndex Value="-1"/> <TopLine Value="414"/> <CursorPos X="20" Y="434"/> - <UsageCount Value="1"/> + <UsageCount Value="0"/> </Unit17> <Unit18> <Filename Value="/usr/lib/fpc/src/rtl/linux/bunxsysc.inc"/> <EditorIndex Value="-1"/> <TopLine Value="16"/> - <UsageCount Value="1"/> + <UsageCount Value="0"/> </Unit18> <Unit19> <Filename Value="/usr/lib/fpc/src/rtl/unix/bunxh.inc"/> <EditorIndex Value="-1"/> <TopLine Value="74"/> <CursorPos X="15" Y="102"/> - <UsageCount Value="1"/> + <UsageCount Value="0"/> </Unit19> <Unit20> <Filename Value="/usr/lib/fpc/src/packages/fcl-image/src/fpimage.pp"/> @@ -167,171 +168,171 @@ <EditorIndex Value="-1"/> <TopLine Value="10"/> <CursorPos X="3" Y="30"/> - <UsageCount Value="1"/> + <UsageCount Value="0"/> </Unit20> <Unit21> <Filename Value="../fpGUI/src/corelib/render/software/agg_basics.pas"/> <EditorIndex Value="-1"/> <TopLine Value="327"/> <CursorPos X="12" Y="347"/> - <UsageCount Value="4"/> + <UsageCount Value="3"/> </Unit21> <Unit22> <Filename Value="/usr/lib/fpc/src/rtl/objpas/classes/classesh.inc"/> <EditorIndex Value="-1"/> <TopLine Value="673"/> <CursorPos X="42" Y="705"/> - <UsageCount Value="4"/> + <UsageCount Value="3"/> </Unit22> <Unit23> <Filename Value="/usr/lib/fpc/src/rtl/objpas/math.pp"/> <EditorIndex Value="-1"/> <TopLine Value="166"/> <CursorPos X="10" Y="183"/> - <UsageCount Value="2"/> + <UsageCount Value="1"/> </Unit23> <Unit24> <Filename Value="GTIWebServerTestAggActionHandlerUnit.pas"/> <EditorIndex Value="-1"/> <TopLine Value="53"/> <CursorPos X="49" Y="82"/> - <UsageCount Value="2"/> + <UsageCount Value="1"/> </Unit24> <Unit25> <Filename Value="/usr/lib/fpc/src/rtl/objpas/sysutils/sysstrh.inc"/> <EditorIndex Value="-1"/> <TopLine Value="204"/> <CursorPos X="18" Y="222"/> - <UsageCount Value="4"/> + <UsageCount Value="3"/> </Unit25> <Unit26> <Filename Value="/usr/lib/fpc/src/rtl/objpas/sysutils/osutilsh.inc"/> <EditorIndex Value="-1"/> <TopLine Value="9"/> <CursorPos X="10" Y="26"/> - <UsageCount Value="4"/> + <UsageCount Value="3"/> </Unit26> </Units> <JumpHistory Count="30" HistoryIndex="29"> <Position1> - <Filename Value="typenunit.pas"/> - <Caret Line="434" Column="45" TopLine="405"/> + <Filename Value="epostunit.pas"/> + <Caret Line="4025" Column="3" TopLine="4007"/> </Position1> <Position2> <Filename Value="typenunit.pas"/> - <Caret Line="462" Column="45" TopLine="433"/> + <Caret Line="202" Column="3" TopLine="184"/> </Position2> <Position3> <Filename Value="typenunit.pas"/> - <Caret Line="473" Column="45" TopLine="444"/> + <Caret Line="209" Column="28" TopLine="184"/> </Position3> <Position4> <Filename Value="typenunit.pas"/> - <Caret Line="1851" Column="57" TopLine="1822"/> + <Caret Line="215" Column="28" TopLine="186"/> </Position4> <Position5> <Filename Value="typenunit.pas"/> - <Caret Line="1885" Column="42" TopLine="1856"/> + <Caret Line="221" Column="28" TopLine="192"/> </Position5> <Position6> <Filename Value="typenunit.pas"/> - <Caret Line="1931" Column="37" TopLine="1902"/> + <Caret Line="228" Column="28" TopLine="199"/> </Position6> <Position7> - <Filename Value="typenunit.pas"/> - <Caret Line="2157" Column="68" TopLine="2128"/> + <Filename Value="werteunit.inc"/> + <Caret Line="417" Column="59" TopLine="382"/> </Position7> <Position8> - <Filename Value="typenunit.pas"/> - <Caret Line="2250" Column="76" TopLine="2221"/> + <Filename Value="werteunit.inc"/> + <Caret Line="360" TopLine="326"/> </Position8> <Position9> - <Filename Value="typenunit.pas"/> - <Caret Line="2276" Column="142" TopLine="2247"/> + <Filename Value="werteunit.inc"/> + <Caret Line="27"/> </Position9> <Position10> - <Filename Value="typenunit.pas"/> - <Caret Line="2505" TopLine="2512"/> + <Filename Value="werteunit.inc"/> + <Caret Line="456" Column="30" TopLine="434"/> </Position10> <Position11> - <Filename Value="typenunit.pas"/> - <Caret Line="1931" Column="32" TopLine="1903"/> + <Filename Value="epostunit.pas"/> + <Caret Line="4042" TopLine="4097"/> </Position11> <Position12> - <Filename Value="typenunit.pas"/> - <Caret Line="290" Column="45" TopLine="273"/> + <Filename Value="werteunit.inc"/> + <Caret Line="467" Column="11" TopLine="434"/> </Position12> <Position13> - <Filename Value="typenunit.pas"/> - <Caret Line="416" Column="45" TopLine="387"/> + <Filename Value="epostunit.pas"/> + <Caret Line="4033" TopLine="4023"/> </Position13> <Position14> - <Filename Value="typenunit.pas"/> - <Caret Line="434" Column="45" TopLine="405"/> + <Filename Value="epostunit.pas"/> + <Caret Line="4131" Column="106" TopLine="4118"/> </Position14> <Position15> - <Filename Value="typenunit.pas"/> - <Caret Line="462" Column="45" TopLine="433"/> + <Filename Value="epostunit.pas"/> + <Caret Line="4184" Column="26" TopLine="4165"/> </Position15> <Position16> - <Filename Value="typenunit.pas"/> - <Caret Line="473" Column="45" TopLine="444"/> + <Filename Value="werteunit.pas"/> + <Caret Line="86" Column="34" TopLine="71"/> </Position16> <Position17> - <Filename Value="typenunit.pas"/> - <Caret Line="1851" Column="57" TopLine="1822"/> + <Filename Value="epostunit.pas"/> + <Caret Line="4180" Column="92" TopLine="4165"/> </Position17> <Position18> - <Filename Value="typenunit.pas"/> - <Caret Line="1885" Column="42" TopLine="1856"/> + <Filename Value="epostunit.pas"/> + <Caret Line="170" Column="36" TopLine="154"/> </Position18> <Position19> - <Filename Value="typenunit.pas"/> - <Caret Line="1931" Column="37" TopLine="1902"/> + <Filename Value="werteunit.pas"/> + <Caret Line="1844" Column="62" TopLine="1827"/> </Position19> <Position20> - <Filename Value="typenunit.pas"/> - <Caret Line="2157" Column="68" TopLine="2128"/> + <Filename Value="werteunit.pas"/> + <Caret Line="59" Column="36" TopLine="33"/> </Position20> <Position21> - <Filename Value="typenunit.pas"/> - <Caret Line="2250" Column="76" TopLine="2221"/> + <Filename Value="epostunit.pas"/> + <Caret Line="4288" Column="24" TopLine="4269"/> </Position21> <Position22> - <Filename Value="typenunit.pas"/> - <Caret Line="2276" Column="142" TopLine="2247"/> + <Filename Value="epostunit.pas"/> + <Caret Line="6545" TopLine="6528"/> </Position22> <Position23> - <Filename Value="typenunit.pas"/> - <Caret Line="2506" Column="19" TopLine="2491"/> + <Filename Value="epostunit.pas"/> + <Caret Line="6031" TopLine="6013"/> </Position23> <Position24> - <Filename Value="typenunit.pas"/> - <Caret Line="459" Column="35" TopLine="441"/> + <Filename Value="epostunit.pas"/> + <Caret Line="5835" TopLine="5804"/> </Position24> <Position25> - <Filename Value="typenunit.pas"/> - <Caret Line="2460" Column="65" TopLine="2434"/> + <Filename Value="epostunit.pas"/> + <Caret Line="5767" Column="9" TopLine="5747"/> </Position25> <Position26> - <Filename Value="typenunit.pas"/> - <Caret Line="2463" Column="60" TopLine="2434"/> + <Filename Value="epostunit.pas"/> + <Caret Line="5832" Column="30" TopLine="5813"/> </Position26> <Position27> - <Filename Value="typenunit.pas"/> - <Caret Line="2539" Column="30" TopLine="2505"/> + <Filename Value="werteunit.pas"/> + <Caret Line="1010" Column="13" TopLine="988"/> </Position27> <Position28> - <Filename Value="typenunit.pas"/> - <Caret Line="1921" Column="45" TopLine="1903"/> + <Filename Value="werteunit.pas"/> + <Caret Line="1065" Column="15" TopLine="1046"/> </Position28> <Position29> - <Filename Value="epostunit.pas"/> - <Caret Line="3968" Column="54" TopLine="3957"/> + <Filename Value="werteunit.pas"/> + <Caret Line="1051" Column="33" TopLine="1033"/> </Position29> <Position30> <Filename Value="epostunit.pas"/> - <Caret Line="444" Column="24" TopLine="426"/> + <Caret Line="5829" TopLine="5816"/> </Position30> </JumpHistory> </ProjectSession> diff --git a/epostunit.pas b/epostunit.pas index fdba2da..ab1a0c7 100644 --- a/epostunit.pas +++ b/epostunit.pas @@ -4020,23 +4020,25 @@ end; function tWerte.entferneArtefakte(sT: boolean; f: tMyStringList; threads: longint): boolean; var - Zeit: extended; - hintergrund: tExtendedArray; - fensters: array[boolean] of tSin2Fenster; - s: string; - b,heiszePixel,fertig: boolean; - hintergrundAbziehen: tHintergrundAbzugsArt; - fensterThreads: array of tFensterThread; - i: int64; - bekannteBefehle: tMyStringList; - heiszPixelSchwellen: array[0..2] of extended; + Zeit,epsilon: extended; + hintergrund: tExtendedArray; + fensters: array[boolean] of tFenster; + s: string; + b,heiszePixel,fertig: boolean; + hintergrundAbziehen,haDummy: tHintergrundAbzugsArt; + fensterThreads: array of tFensterThread; + i: int64; + bekannteBefehle: tMyStringList; + heiszPixelSchwellen: array[0..2] of extended; begin result:=false; Zeit:=now; if not sT then gibAus('Artefakte entfernen ...',3); - for b:=false to true do + for b:=false to true do begin fensters[b]:=tSin2Fenster.create; + (fensters[b] as tSin2Fenster).breite:=_tSiz; + end; hintergrundAbziehen.art:=haaKeine; setLength(hintergrundAbziehen.parameter,0); setLength(hintergrund,0); @@ -4044,6 +4046,7 @@ begin heiszPixelSchwellen[1]:=-infinity; heiszPixelSchwellen[2]:=infinity; heiszePixel:=false; + epsilon:=1e-9; bekannteBefehle:=tMyStringList.create; repeat if not f.metaReadln(s,true) then begin @@ -4066,12 +4069,40 @@ begin delete(s,1,pos(':',s)); s:=trim(s); if b then - fensters[b].rand:=round(kont2diskFak('t',exprToFloat(sT,s))) + (fensters[b] as tSin2Fenster).rand:=round(kont2diskFak('t',exprToFloat(sT,s))) else - fensters[b].rand:=round(kont2diskFak('x',exprToFloat(sT,s))); + (fensters[b] as tSin2Fenster).rand:=round(kont2diskFak('x',exprToFloat(sT,s))); fensters[b].aktiv:=true; continue; end; + if istDasBefehl('epsilon:',s,bekannteBefehle,true) then begin + epsilon:=exprToFloat(sT,s); + continue; + end; + if istDasBefehl('durch horizontalen Verlauf teilen:',s,bekannteBefehle,true) then begin + if not stringToTHintergrundAbzugsArt(s,sT,knownValues,@callBackGetValue,haDummy) then begin + bekannteBefehle.free; + exit; + end; + if haDummy.art<>haaVertikaleMittel then begin + haDummy.art:=haaVertikaleMittel; + setLength(haDummy.parameter,2); + haDummy.parameter[0]:=3; + haDummy.parameter[1]:=3.141; + gibAus('Syntaxfehler beim Entfernen von Artefakten - erwartet: "durch horizontalen Verlauf teilen: '+tHintergrundAbzugsArtToStr(haDummy)+'"',3); + bekannteBefehle.free; + exit; + end; + if fensters[false].aktiv then begin + gibAus('Beim Entfernen von Artefakten kann ich nicht gleichzeitig in x Fenstern und durch einen horizontalen Verlauf teilen!',3); + bekannteBefehle.free; + exit; + end; + fensters[false].free; + fensters[false]:=tVerlaufTeilFenster.create(haDummy,epsilon); + fensters[false].aktiv:=true; + continue; + end; if istDasBefehl('Hintergrund abziehen:',s,bekannteBefehle,true) then begin if not stringToTHintergrundAbzugsArt(s,sT,knownValues,@callBackGetValue,hintergrundAbziehen) then begin bekannteBefehle.free; @@ -4098,12 +4129,26 @@ begin exit; until false; bekannteBefehle.free; - fensters[true].breite:=_tSiz-fensters[true].breite; - fensters[false].breite:=_xSteps-fensters[false].breite; if not ermittleHintergrund(sT,threads,hintergrundAbziehen,hintergrund) then exit; + if fensters[false] is tVerlaufTeilFenster then begin + haDummy.art:=haaVertikaleMittel; + setLength(haDummy.parameter,2); + haDummy.parameter[0]:=kont2disk('t',(fensters[false] as tVerlaufTeilFenster).tMin); + haDummy.parameter[1]:=kont2disk('t',(fensters[false] as tVerlaufTeilFenster).tMax); + if not ermittleHintergrund(sT,threads,haDummy,fensters[false].werte) then + exit; + for i:=0 to length(fensters[false].werte)-1 do + if abs(fensters[false].werte[i])>epsilon then + fensters[false].werte[i]:=1/fensters[false].werte[i] + else if fensters[false].werte[i]<0 then + fensters[false].werte[i]:=-1/epsilon + else + fensters[false].werte[i]:=1/epsilon; + end; + if sT then begin for b:=false to true do fensters[b].free; diff --git a/typenunit.pas b/typenunit.pas index de06330..d27fcd5 100644 --- a/typenunit.pas +++ b/typenunit.pas @@ -221,6 +221,13 @@ type procedure berechneWerte(anzWerte: longint; schlussBeiWenigInhalt: boolean = false); override; overload; function dumpParams: string; override; end; + tVerlaufTeilFenster = class(tFenster) + eps,tMin,tMax: extended; + constructor create; + constructor create(verlauf: tHintergrundAbzugsArt; epsilon: extended); + procedure berechneWerte(anzWerte: longint; schlussBeiWenigInhalt: boolean = false); override; overload; + function dumpParams: string; override; + end; tBeschriftung = class private _inhalt: string; @@ -1225,6 +1232,41 @@ begin inherited dumpParams; end; +// tVerlaufTeilFenster ********************************************************* + +constructor tVerlaufTeilFenster.create; +begin + fehler('tVerlaufTeilFenster ohne Verlauf kreiert!'); +end; + +constructor tVerlaufTeilFenster.create(verlauf: tHintergrundAbzugsArt; epsilon: extended); +begin + inherited create; + if (verlauf.art<>haaVertikaleMittel) or + (length(verlauf.parameter)<>2) then + fehler('tVerlaufTeilFenster mit ungültigem Verlauf kreiert - ich brauche haaVertikaleMittel!'); + eps:=epsilon; + tMin:=verlauf.parameter[0]; + tMax:=verlauf.parameter[1]; +end; + +procedure tVerlaufTeilFenster.berechneWerte(anzWerte: longint; schlussBeiWenigInhalt: boolean = false); +begin + if anzWerte>length(werte) then + fehler('tVerlaufTeilFenster kann keine neuen Werte berechnen - ich soll aus '+intToStr(length(werte))+' Werten '+intToStr(anzWerte)+' Werte machen!'); + setLength(werte,anzWerte); + testeFensterDurchschnitt(schlussBeiWenigInhalt); +end; + +function tVerlaufTeilFenster.dumpParams: string; +begin + result:= + 'tMin: '+myFloatToStr(tMin)+', '+ + 'tMax: '+myFloatToStr(tMax)+', '+ + 'eps: '+myFloatToStr(eps)+', '+ + inherited dumpParams; +end; + // tBeschriftung *************************************************************** constructor tBeschriftung.create; diff --git a/werteunit.inc b/werteunit.inc index 5fc74f2..8e768ca 100644 --- a/werteunit.inc +++ b/werteunit.inc @@ -448,3 +448,21 @@ begin if o0 then gibAus('Nur Nullen im Output!',1); end; {$ENDIF} + +{$IFDEF tLLWerte_fenstereWerte_fensterMultiplikation} + for j:=tMi to tMa do + for i:=xMi to xMa do + werte[i+j*params.xSteps]:= + ( + werte[i+j*params.xSteps] +{$IFDEF hatOffset} + -offset +{$ENDIF} + ) +{$IFDEF hatXFenster} + *xFen.werte[i] +{$ENDIF} +{$IFDEF hatTFenster} + *tFen.werte[j] +{$ENDIF} ; +{$ENDIF} diff --git a/werteunit.pas b/werteunit.pas index 6629ac5..f6747c7 100644 --- a/werteunit.pas +++ b/werteunit.pas @@ -1722,10 +1722,32 @@ begin werte[i+j*params.xSteps]:=werte[i+j*params.xSteps] - hg[i]; end; - for j:=tMi to tMa do - for i:=xMi to xMa do - werte[i+j*params.xSteps]:= - (werte[i+j*params.xSteps]-offset)*xFen.werte[i]*tFen.werte[j]; + {$DEFINE tLLWerte_fenstereWerte_fensterMultiplikation} + case 4*byte(offset<>0) + 2*byte(tFen.aktiv) + byte(xFen.aktiv) of + 1: + {$DEFINE hatXFenster} + {$INCLUDE werteunit.inc} + 3: + {$DEFINE hatTFenster} + {$INCLUDE werteunit.inc} + 2: + {$UNDEF hatXFenster} + {$INCLUDE werteunit.inc} + 6: + {$DEFINE hatOffset} + {$INCLUDE werteunit.inc} + 7: + {$UNDEF hatXFenster} + {$INCLUDE werteunit.inc} + 5: + {$UNDEF hatTFenster} + {$INCLUDE werteunit.inc} + 4: + {$UNDEF hatXFenster} + {$INCLUDE werteunit.inc} + {$UNDEF hatOffset} + end{of case}; + {$UNDEF tLLWerte_fenstereWerte_fensterMultiplikation} end; procedure tLLWerte.verschiebe(richtung: tInt64Point; xV,xB,tV,tB: longint); |