diff options
-rw-r--r-- | epost.lpr | 8 | ||||
-rw-r--r-- | epost.lps | 111 | ||||
-rw-r--r-- | epostunit.pas | 181 |
3 files changed, 164 insertions, 136 deletions
@@ -513,8 +513,12 @@ begin continue; end; if istDasBefehl('Lineout',s,bekannteBefehle,true) then begin - i:=findeWerte(erstesArgument(s),nil,@wertes,@konturen,false); - if (i<0) or not wertes[i].erzeugeLineout(syntaxTest,s) then begin + i:=findeWerte(s,nil,@wertes,@konturen,false); + if i<0 then begin + aufraeumen; + halt(1); + end; + if not wertes[i].erzeugeLineout(syntaxTest,inf) then begin aufraeumen; halt(1); end; @@ -7,8 +7,8 @@ <Unit0> <Filename Value="epost.lpr"/> <IsPartOfProject Value="True"/> - <TopLine Value="458"/> - <CursorPos X="56" Y="468"/> + <TopLine Value="471"/> + <CursorPos X="14" Y="497"/> <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="2029"/> - <CursorPos X="32" Y="2065"/> + <TopLine Value="5383"/> + <CursorPos X="23" Y="5401"/> <UsageCount Value="201"/> <Loaded Value="True"/> </Unit2> @@ -47,10 +48,9 @@ <Unit5> <Filename Value="typenunit.pas"/> <IsPartOfProject Value="True"/> - <IsVisibleTab Value="True"/> <EditorIndex Value="11"/> - <TopLine Value="1851"/> - <CursorPos X="27" Y="1877"/> + <TopLine Value="1869"/> + <CursorPos X="55" Y="1891"/> <UsageCount Value="200"/> <Loaded Value="True"/> </Unit5> @@ -77,7 +77,7 @@ <IsPartOfProject Value="True"/> <EditorIndex Value="10"/> <CursorPos X="35" Y="10"/> - <UsageCount Value="161"/> + <UsageCount Value="165"/> <Loaded Value="True"/> </Unit8> <Unit9> @@ -86,7 +86,7 @@ <EditorIndex Value="9"/> <TopLine Value="382"/> <CursorPos X="59" Y="417"/> - <UsageCount Value="48"/> + <UsageCount Value="52"/> <Loaded Value="True"/> </Unit9> <Unit10> @@ -101,14 +101,14 @@ <EditorIndex Value="7"/> <TopLine Value="198"/> <CursorPos X="19" Y="226"/> - <UsageCount Value="25"/> + <UsageCount Value="27"/> <Loaded Value="True"/> </Unit11> <Unit12> <Filename Value="../units/lowlevelunit.pas"/> <EditorIndex Value="6"/> - <TopLine Value="905"/> - <CursorPos X="25" Y="921"/> + <TopLine Value="99"/> + <CursorPos Y="112"/> <UsageCount Value="100"/> <Loaded Value="True"/> </Unit12> @@ -122,7 +122,7 @@ <EditorIndex Value="5"/> <TopLine Value="32"/> <CursorPos X="46" Y="50"/> - <UsageCount Value="84"/> + <UsageCount Value="86"/> <Loaded Value="True"/> </Unit14> <Unit15> @@ -130,7 +130,7 @@ <EditorIndex Value="2"/> <TopLine Value="126"/> <CursorPos X="7" Y="147"/> - <UsageCount Value="39"/> + <UsageCount Value="41"/> <Loaded Value="True"/> </Unit15> <Unit16> @@ -228,121 +228,122 @@ <JumpHistory Count="30" HistoryIndex="29"> <Position1> <Filename Value="typenunit.pas"/> - <Caret Line="450" Column="101" TopLine="421"/> + <Caret Line="1522" Column="29" TopLine="1504"/> </Position1> <Position2> <Filename Value="typenunit.pas"/> - <Caret Line="1810" Column="5" TopLine="1777"/> + <Caret Line="454" Column="25" TopLine="436"/> </Position2> <Position3> <Filename Value="typenunit.pas"/> - <Caret Line="1819" Column="51" TopLine="1790"/> + <Caret Line="2492" Column="52" TopLine="2484"/> </Position3> <Position4> <Filename Value="typenunit.pas"/> - <Caret Line="1849" Column="59" TopLine="1820"/> + <Caret Line="338" Column="36" TopLine="322"/> </Position4> <Position5> <Filename Value="typenunit.pas"/> - <Caret Line="2007" Column="5" TopLine="1975"/> + <Caret Line="380" Column="36" TopLine="351"/> </Position5> <Position6> <Filename Value="typenunit.pas"/> - <Caret Line="2094" TopLine="2063"/> + <Caret Line="403" Column="36" TopLine="374"/> </Position6> <Position7> <Filename Value="typenunit.pas"/> - <Caret Line="2307" Column="3" TopLine="2273"/> + <Caret Line="446" Column="36" TopLine="417"/> </Position7> <Position8> <Filename Value="typenunit.pas"/> - <Caret Line="2388" Column="3" TopLine="2354"/> + <Caret Line="475" Column="36" TopLine="446"/> </Position8> <Position9> <Filename Value="typenunit.pas"/> + <Caret Line="493" Column="36" TopLine="464"/> </Position9> <Position10> <Filename Value="typenunit.pas"/> - <Caret Line="282" Column="30" TopLine="253"/> + <Caret Line="506" Column="36" TopLine="477"/> </Position10> <Position11> <Filename Value="typenunit.pas"/> - <Caret Line="1496" Column="42" TopLine="1467"/> + <Caret Line="1870" Column="48" TopLine="1841"/> </Position11> <Position12> - <Filename Value="typenunit.pas"/> - <Caret Line="1810" Column="20" TopLine="1781"/> + <Filename Value="epostunit.pas"/> + <Caret Line="2043" Column="38" TopLine="2021"/> </Position12> <Position13> - <Filename Value="typenunit.pas"/> - <Caret Line="2007" Column="20" TopLine="1978"/> + <Filename Value="epostunit.pas"/> + <Caret Line="3143" Column="90" TopLine="3124"/> </Position13> <Position14> - <Filename Value="typenunit.pas"/> - <Caret Line="2095" Column="20" TopLine="2066"/> + <Filename Value="epostunit.pas"/> + <Caret Line="2447" Column="47" TopLine="2427"/> </Position14> <Position15> - <Filename Value="typenunit.pas"/> - <Caret Line="2307" Column="20" TopLine="2278"/> + <Filename Value="epostunit.pas"/> + <Caret Line="2517" Column="24" TopLine="2488"/> </Position15> <Position16> - <Filename Value="typenunit.pas"/> - <Caret Line="2387" Column="30" TopLine="2359"/> + <Filename Value="epostunit.pas"/> + <Caret Line="2516" Column="17" TopLine="2516"/> </Position16> <Position17> - <Filename Value="typenunit.pas"/> - <Caret Line="377" Column="64" TopLine="358"/> + <Filename Value="epostunit.pas"/> </Position17> <Position18> <Filename Value="epostunit.pas"/> - <Caret Line="2025" Column="36" TopLine="2007"/> + <Caret Line="2441" Column="47" TopLine="2419"/> </Position18> <Position19> <Filename Value="epostunit.pas"/> - <Caret Line="5366" Column="47" TopLine="5362"/> + <Caret Line="2447" Column="46" TopLine="2419"/> </Position19> <Position20> <Filename Value="epostunit.pas"/> + <Caret Line="2516" Column="25" TopLine="2488"/> </Position20> <Position21> <Filename Value="epostunit.pas"/> - <Caret Line="134" Column="23" TopLine="106"/> + <Caret Line="2686" Column="28" TopLine="2657"/> </Position21> <Position22> <Filename Value="epostunit.pas"/> - <Caret Line="2067" Column="61" TopLine="2047"/> + <Caret Line="2694" Column="28" TopLine="2671"/> </Position22> <Position23> <Filename Value="epostunit.pas"/> - <Caret Line="2065" Column="32" TopLine="2029"/> + <Caret Line="2702" Column="28" TopLine="2673"/> </Position23> <Position24> - <Filename Value="typenunit.pas"/> - <Caret Line="335" Column="36" TopLine="319"/> + <Filename Value="epostunit.pas"/> + <Caret Line="2773" Column="24" TopLine="2744"/> </Position24> <Position25> - <Filename Value="typenunit.pas"/> - <Caret Line="378" TopLine="348"/> + <Filename Value="epostunit.pas"/> + <Caret Line="2898" Column="24" TopLine="2869"/> </Position25> <Position26> - <Filename Value="typenunit.pas"/> - <Caret Line="401" TopLine="371"/> + <Filename Value="epostunit.pas"/> + <Caret Line="3143" Column="44" TopLine="3114"/> </Position26> <Position27> - <Filename Value="typenunit.pas"/> - <Caret Line="442" TopLine="412"/> + <Filename Value="epostunit.pas"/> + <Caret Line="4493" TopLine="4464"/> </Position27> <Position28> - <Filename Value="typenunit.pas"/> - <Caret Line="470" TopLine="439"/> + <Filename Value="epostunit.pas"/> + <Caret Line="5048" Column="31" TopLine="5019"/> </Position28> <Position29> - <Filename Value="typenunit.pas"/> - <Caret Line="488" TopLine="457"/> + <Filename Value="epostunit.pas"/> + <Caret Line="177" Column="28" TopLine="161"/> </Position29> <Position30> - <Filename Value="typenunit.pas"/> - <Caret Line="501" TopLine="470"/> + <Filename Value="epostunit.pas"/> + <Caret Line="5401" Column="11" TopLine="5320"/> </Position30> </JumpHistory> </ProjectSession> diff --git a/epostunit.pas b/epostunit.pas index d5b98c0..96582c6 100644 --- a/epostunit.pas +++ b/epostunit.pas @@ -174,7 +174,7 @@ type function berechneFFT2d(sT: boolean; f: tMyStringList; threads: longint; warn: tWarnStufe): boolean; function erzeugeLinearesBild(sT: boolean; var f: tMyStringList; threads: longint): boolean; function erzeugeAscii(sT: boolean; f: tMyStringList): boolean; - function erzeugeLineout(sT: boolean; params: string): boolean; + function erzeugeLineout(sT: boolean; f: tMyStringList): boolean; function erzeugeBinning(sT: boolean; params: string): boolean; procedure spiegle(threads: longint); overload; procedure spiegle(threads,tMin,tMax: longint); overload; @@ -5375,14 +5375,15 @@ begin result:=true; end; -function tWerte.erzeugeLineout(sT: boolean; params: string): boolean; +function tWerte.erzeugeLineout(sT: boolean; f: tMyStringList): boolean; var - ab: array[boolean,boolean] of longint; - s: string; - f: textfile; - Zeit: extended; - i: longint; - b1,b2: boolean; + ab: t2x2Extended; + datei,s: string; + fOut: textfile; + bekannteBefehle: tMyStringList; + Zeit: extended; + i,schritte: longint; + integriere,iWaag: boolean; begin result:=false; warteAufBeendigungDesLeseThreads; @@ -5392,90 +5393,112 @@ begin gibAus('insgesamt: '+floatToStr(transformationen.xStart)+'..'+floatToStr(transformationen.xStop)+' x '+floatToStr(transformationen.tStart)+'..'+floatToStr(transformationen.tStop),3); end; - for b1:=false to true do - for b2:=false to true do - ab[b1,b2]:=0; + ab['x']:=extPoint(0,0); + ab['y']:=extPoint(_xSteps-1,_tSiz-1); - params:=trim(params); - if startetMit('integriere ',params) then begin - if startetMit('waagerecht',params) then b1:=true - else if startetMit('senkrecht',params) then b1:=false - else exit; - if sT then begin - result:=true; + datei:=''; + integriere:=false; + iWaag:=false; + bekannteBefehle:=tMyStringList.create; + repeat + if not f.metaReadln(s,true) then begin + gibAus('Unerwartetes Dateiende in '''+paramstr(1)+'''!',3); + bekannteBefehle.free; exit; end; - if b1 then s:='waagerecht' - else s:='senkrecht'; - gibAus('... schreibe in '''+params+''', integriere '+s,3); - - if pos(' ',params)>0 then begin - gibAus('Leerzeichen im Dateinamen sind nicht erlaubt!',3); - exit; + bekannteBefehle.clear; + if istDasBefehl('Ende',s,bekannteBefehle,false) then break; + if istDasBefehl('Datei:',s,bekannteBefehle,true) then begin + datei:=s; + continue; end; - - assignFile(f,params); - rewrite(f); - for i:=0 to _xSteps*byte(not b1)+_tSiz*byte(b1)-1 do - schreibeWertIntegriert(f,i,b1); - closeFile(f); - end - else begin - for b1:=false to true do - if startetMit('(',params) then begin - s:=erstesArgument(params,','); - ab[b1,false]:=kont2disk('x',exprToFloat(sT,s)); - s:=erstesArgument(params,')'); - ab[b1,true]:=kont2disk('t',exprToFloat(sT,s)); - end - else begin - ab[true,false]:=ab[false,false]; - ab[true,true]:=ab[false,true]; - ab[false,false]:=(_xSteps-1)*byte(not b1); - ab[false,true]:=(_tSiz-1)*byte(not b1); + if istDasBefehl('integriere waagerecht',s,bekannteBefehle,false) then begin + if integriere then begin + gibAus('Ich kann bei einem Lineout nur in einer Richtung integrieren!',3); + bekannteBefehle.free; + exit; end; - - if sT then begin - result:=true; - exit; + integriere:=true; + iWaag:=true; + continue; end; - - if pos(' ',params)>0 then begin - gibAus('Leerzeichen im Dateinamen sind nicht erlaubt!',3); - exit; + if istDasBefehl('integriere senkrecht',s,bekannteBefehle,false) then begin + if integriere then begin + gibAus('Ich kann bei einem Lineout nur in einer Richtung integrieren!',3); + bekannteBefehle.free; + exit; + end; + integriere:=true; + iWaag:=false; + continue; end; - - s:='... schreibe in '''+params+''' ('; - for i:=0 to 3 do begin - s:=s+intToStr(ab[odd(i div 2),odd(i)]); - if not odd(i) then s:=s+',' - else if i=1 then s:=s+')--('; + if istDasBefehl('von',s,bekannteBefehle,true) then begin + ab['x','x']:=kont2disk('x',exprToFloat(sT,erstesArgument(s,';'))); + ab['x','y']:=kont2disk('y',exprToFloat(sT,s)); + continue; + end; + if istDasBefehl('bis',s,bekannteBefehle,true) then begin + ab['y','x']:=kont2disk('x',exprToFloat(sT,erstesArgument(s,';'))); + ab['y','y']:=kont2disk('y',exprToFloat(sT,s)); + continue; end; - gibAus(s+') ...',3); + bekannteBefehle.sort; + gibAus('Verstehe Option '''+s+''' nicht bei Erzeugung eines Lineouts!'#10'Ich kenne:'#10+bekannteBefehle.text,3); + bekannteBefehle.free; + exit; + until false; + bekannteBefehle.free; - assignFile(f,params); - rewrite(f); - if abs(ab[true,true]-ab[false,true])>abs(ab[true,false]-ab[false,false]) then begin - if ab[true,true]>ab[false,true] then begin - for i:=ab[false,true] to ab[true,true] do - schreibeWert(f,round(ab[false,false]+i/(ab[true,true]-ab[false,true])*(ab[true,false]-ab[false,false])),i); - end - else - for i:=ab[false,true] downto ab[true,true] do - schreibeWert(f,round(ab[false,false]+i/(ab[true,true]-ab[false,true])*(ab[true,false]-ab[false,false])),i); - end - else begin - if ab[true,false]>ab[false,false] then begin - for i:=ab[false,false] to ab[true,false] do - schreibeWert(f,i,round(ab[false,true]+i/(ab[true,false]-ab[false,false])*(ab[true,true]-ab[false,true]))); + writeln(t2x2ExtendedToStr(ab)); + + if datei='' then begin + gibAus('Keine Ausgabedatei für den Lineout angegeben!',3); + exit; + end; + + if not sT then begin + assignFile(fOut,datei); + rewrite(fOut); + end; + if integriere then begin + if not sT then begin + if iWaag then begin + if ab['y','y']>ab['x','y'] then begin + for i:=round(ab['x','y']) to round(ab['y','y']) do + schreibeWertIntegriert(fOut,i,iWaag); + end + else + for i:=round(ab['x','y']) downto round(ab['y','y']) do + schreibeWertIntegriert(fOut,i,iWaag); end else - for i:=ab[false,false] downto ab[true,false] do - schreibeWert(f,i,round(ab[false,true]+i/(ab[true,false]-ab[false,false])*(ab[true,true]-ab[false,true]))); + if ab['y','x']>ab['x','x'] then begin + for i:=round(ab['x','x']) to round(ab['y','x']) do + schreibeWertIntegriert(fOut,i,iWaag); + end + else + for i:=round(ab['x','x']) downto round(ab['y','x']) do + schreibeWertIntegriert(fOut,i,iWaag); + end; + end + else begin + schritte:= + round(max( + abs(ab['y','y']-ab['x','y']), + abs(ab['y','x']-ab['x','x']) + )); + if schritte=0 then begin + gibAus('Anfangs- und Endpunkt des Lineouts sind identisch ('+tExtPointToStr(ab['x'])+' .. '+tExtPointToStr(ab['y'])+')!',3); + exit; end; - closeFile(f); + if not sT then + for i:=0 to schritte do + schreibeWert(fOut,round(ab['x']+(i/schritte)*(ab['y']-ab['x']))); + end; + if not sT then begin + closeFile(fOut); + gibAus('... fertig '+timetostr(now-Zeit),3); end; - gibAus('... fertig '+timetostr(now-Zeit),3); result:=true; end; |