diff options
-rw-r--r-- | epost.lpi | 3 | ||||
-rw-r--r-- | epost.lps | 136 | ||||
-rw-r--r-- | typenunit.pas | 179 |
3 files changed, 204 insertions, 114 deletions
@@ -16,9 +16,6 @@ <i18n> <EnableI18N LFM="False"/> </i18n> - <VersionInfo> - <StringTable ProductVersion=""/> - </VersionInfo> <BuildModes Count="1"> <Item1 Name="Default" Default="True"/> </BuildModes> @@ -7,8 +7,8 @@ <Unit0> <Filename Value="epost.lpr"/> <IsPartOfProject Value="True"/> - <TopLine Value="194"/> - <CursorPos Y="212"/> + <TopLine Value="589"/> + <CursorPos X="146" Y="603"/> <UsageCount Value="202"/> <Loaded Value="True"/> </Unit0> @@ -22,19 +22,19 @@ <Unit2> <Filename Value="epostunit.pas"/> <IsPartOfProject Value="True"/> - <IsVisibleTab Value="True"/> <EditorIndex Value="1"/> - <TopLine Value="1356"/> - <CursorPos X="17" Y="1371"/> + <TopLine Value="5923"/> + <CursorPos Y="5937"/> <UsageCount Value="201"/> <Loaded Value="True"/> </Unit2> <Unit3> <Filename Value="werteunit.pas"/> <IsPartOfProject Value="True"/> + <IsVisibleTab Value="True"/> <EditorIndex Value="9"/> - <TopLine Value="2002"/> - <CursorPos X="43" Y="1990"/> + <TopLine Value="878"/> + <CursorPos Y="911"/> <UsageCount Value="200"/> <Loaded Value="True"/> </Unit3> @@ -42,8 +42,8 @@ <Filename Value="typenunit.pas"/> <IsPartOfProject Value="True"/> <EditorIndex Value="12"/> - <TopLine Value="2673"/> - <CursorPos X="32" Y="2636"/> + <TopLine Value="2890"/> + <CursorPos X="38" Y="2906"/> <UsageCount Value="200"/> <Loaded Value="True"/> </Unit4> @@ -79,7 +79,7 @@ <EditorIndex Value="10"/> <TopLine Value="142"/> <CursorPos X="17" Y="170"/> - <UsageCount Value="144"/> + <UsageCount Value="149"/> <Loaded Value="True"/> </Unit8> <Unit9> @@ -91,9 +91,9 @@ <Unit10> <Filename Value="../units/mystringlistunit.pas"/> <EditorIndex Value="8"/> - <TopLine Value="498"/> - <CursorPos X="85" Y="515"/> - <UsageCount Value="72"/> + <TopLine Value="553"/> + <CursorPos X="30" Y="462"/> + <UsageCount Value="74"/> <Loaded Value="True"/> </Unit10> <Unit11> @@ -107,17 +107,17 @@ <Unit12> <Filename Value="../units/matheunit.pas"/> <EditorIndex Value="5"/> - <TopLine Value="82"/> - <CursorPos Y="109"/> + <TopLine Value="683"/> + <CursorPos X="36" Y="685"/> <UsageCount Value="101"/> <Loaded Value="True"/> </Unit12> <Unit13> <Filename Value="../units/systemunit.pas"/> <EditorIndex Value="2"/> - <TopLine Value="126"/> - <CursorPos X="7" Y="147"/> - <UsageCount Value="86"/> + <TopLine Value="238"/> + <CursorPos X="33" Y="202"/> + <UsageCount Value="88"/> <Loaded Value="True"/> </Unit13> <Unit14> @@ -188,128 +188,130 @@ <EditorIndex Value="6"/> <TopLine Value="87"/> <CursorPos X="3" Y="18"/> - <UsageCount Value="21"/> + <UsageCount Value="23"/> <Loaded Value="True"/> </Unit23> </Units> <JumpHistory Count="30" HistoryIndex="29"> <Position1> - <Filename Value="typenunit.pas"/> - <Caret Line="491" Column="31" TopLine="473"/> + <Filename Value="epostunit.pas"/> + <Caret Line="6012" Column="33" TopLine="5999"/> </Position1> <Position2> <Filename Value="epostunit.pas"/> - <Caret Line="2285" Column="38" TopLine="2267"/> + <Caret Line="182" Column="28" TopLine="166"/> </Position2> <Position3> <Filename Value="epostunit.pas"/> - <Caret Line="4052" Column="13" TopLine="4039"/> + <Caret Line="5847" Column="15" TopLine="5818"/> </Position3> <Position4> <Filename Value="epostunit.pas"/> - <Caret Line="8088" Column="20" TopLine="8080"/> + <Caret Line="5983" Column="111" TopLine="5966"/> </Position4> <Position5> <Filename Value="epostunit.pas"/> + <Caret Line="191" Column="176" TopLine="175"/> </Position5> <Position6> <Filename Value="epostunit.pas"/> - <Caret Line="399" Column="19" TopLine="370"/> + <Caret Line="6043" Column="154" TopLine="6019"/> </Position6> <Position7> <Filename Value="epostunit.pas"/> - <Caret Line="3992" Column="53" TopLine="3987"/> + <Caret Line="6036" TopLine="6019"/> </Position7> <Position8> <Filename Value="epostunit.pas"/> - <Caret Line="4052" Column="25" TopLine="4039"/> + <Caret Line="191" Column="15" TopLine="175"/> </Position8> <Position9> <Filename Value="epostunit.pas"/> - <Caret Line="8112" Column="29" TopLine="8101"/> + <Caret Line="5983" Column="102" TopLine="5966"/> </Position9> <Position10> - <Filename Value="werteunit.pas"/> - <Caret Line="50" Column="32" TopLine="34"/> + <Filename Value="epostunit.pas"/> + <Caret Line="6041" Column="155" TopLine="6024"/> </Position10> <Position11> <Filename Value="werteunit.pas"/> - <Caret Line="51" Column="32" TopLine="34"/> + <Caret Line="64" Column="65" TopLine="46"/> </Position11> <Position12> - <Filename Value="werteunit.pas"/> - <Caret Line="52" Column="32" TopLine="34"/> + <Filename Value="epostunit.pas"/> + <Caret Line="6041" Column="155" TopLine="6024"/> </Position12> <Position13> - <Filename Value="werteunit.pas"/> - <Caret Line="327" Column="37" TopLine="299"/> + <Filename Value="typenunit.pas"/> + <Caret Line="3187" Column="118" TopLine="3175"/> </Position13> <Position14> - <Filename Value="werteunit.pas"/> - <Caret Line="329" Column="37" TopLine="301"/> + <Filename Value="typenunit.pas"/> + <Caret Line="2238" Column="56" TopLine="2226"/> </Position14> <Position15> - <Filename Value="werteunit.inc"/> - <Caret Line="32" Column="41" TopLine="14"/> + <Filename Value="typenunit.pas"/> + <Caret Line="1642" TopLine="1624"/> </Position15> <Position16> - <Filename Value="werteunit.inc"/> + <Filename Value="typenunit.pas"/> + <Caret Line="2908" TopLine="2890"/> </Position16> <Position17> - <Filename Value="werteunit.inc"/> - <Caret Line="155" Column="43" TopLine="130"/> + <Filename Value="epostunit.pas"/> + <Caret Line="6403" Column="60" TopLine="6391"/> </Position17> <Position18> - <Filename Value="werteunit.inc"/> - <Caret Line="147" Column="36" TopLine="121"/> + <Filename Value="typenunit.pas"/> + <Caret Line="2055" TopLine="2028"/> </Position18> <Position19> - <Filename Value="werteunit.pas"/> - <Caret Line="324" Column="56" TopLine="303"/> + <Filename Value="typenunit.pas"/> + <Caret Line="2047" TopLine="2029"/> </Position19> <Position20> - <Filename Value="epostunit.pas"/> - <Caret Line="8112" Column="29" TopLine="8101"/> + <Filename Value="typenunit.pas"/> + <Caret Line="2908" TopLine="2890"/> </Position20> <Position21> - <Filename Value="werteunit.pas"/> - <Caret Line="50" Column="32" TopLine="34"/> + <Filename Value="typenunit.pas"/> + <Caret Line="2055" TopLine="2038"/> </Position21> <Position22> - <Filename Value="werteunit.pas"/> - <Caret Line="51" Column="32" TopLine="34"/> + <Filename Value="typenunit.pas"/> + <Caret Line="2908" TopLine="2891"/> </Position22> <Position23> - <Filename Value="werteunit.pas"/> - <Caret Line="52" Column="32" TopLine="34"/> + <Filename Value="typenunit.pas"/> + <Caret Line="296" Column="30" TopLine="278"/> </Position23> <Position24> - <Filename Value="werteunit.pas"/> - <Caret Line="327" Column="37" TopLine="317"/> + <Filename Value="typenunit.pas"/> + <Caret Line="297" Column="30" TopLine="278"/> </Position24> <Position25> - <Filename Value="werteunit.pas"/> - <Caret Line="24" Column="94" TopLine="9"/> + <Filename Value="typenunit.pas"/> + <Caret Line="1624" Column="42" TopLine="1616"/> </Position25> <Position26> - <Filename Value="epostunit.pas"/> - <Caret Line="8112" Column="29" TopLine="8101"/> + <Filename Value="typenunit.pas"/> + <Caret Line="1626" Column="18" TopLine="1616"/> </Position26> <Position27> - <Filename Value="epostunit.pas"/> - <Caret Line="170" Column="31" TopLine="154"/> + <Filename Value="typenunit.pas"/> + <Caret Line="1627" Column="18" TopLine="1616"/> </Position27> <Position28> - <Filename Value="werteunit.pas"/> - <Caret Line="88" Column="34" TopLine="72"/> + <Filename Value="typenunit.pas"/> + <Caret Line="1630" Column="42" TopLine="1616"/> </Position28> <Position29> - <Filename Value="epostunit.pas"/> - <Caret Line="4168" Column="19" TopLine="4153"/> + <Filename Value="typenunit.pas"/> + <Caret Line="1976" Column="71" TopLine="1945"/> </Position29> <Position30> <Filename Value="epostunit.pas"/> - <Caret Line="2273" TopLine="2257"/> + <Caret Line="5575" Column="22" TopLine="5564"/> </Position30> </JumpHistory> </ProjectSession> diff --git a/typenunit.pas b/typenunit.pas index 05e9c1d..0bc6894 100644 --- a/typenunit.pas +++ b/typenunit.pas @@ -293,8 +293,8 @@ type wmiaExplizit: boolean; // wMia wurde explizit gesetzt _anzZugehoerigerDaten: longint; - procedure testeAuszerhalb(p: tExtPoint); overload; inline; - procedure testeAuszerhalb(l: tLage; x: extended); overload; inline; + procedure testeAuszerhalb(input, koordinaten: boolean; p: tExtPoint); overload; inline; + procedure testeAuszerhalb(input, koordinaten: boolean; l: tLage; x: extended); overload; inline; procedure holeInfosVonVorgaengern; virtual; procedure aktualisiereAchsen; virtual; @@ -1621,25 +1621,48 @@ begin inherited destroy; end; -procedure tTransformation.testeAuszerhalb(p: tExtPoint); +procedure tTransformation.testeAuszerhalb(input, koordinaten: boolean; p: tExtPoint); begin - if (p['x']<0) or (p['x']>inXSTS['x']-1) or - (p['y']<0) or (p['y']>inXSTS['y']-1) then - fehler('Punkt '+tExtPointToStr(p)+' liegt außerhalb des gültigen Eingabebereich (0..'+intToStr(inXSTS['x']-1)+' x 0..'+intToStr(inXSTS['y']-1)+')!'); + testeAuszerhalb(input,koordinaten,lUnten,p['x']); + testeAuszerhalb(input,koordinaten,lLinks,p['y']); end; -procedure tTransformation.testeAuszerhalb(l: tLage; x: extended); +procedure tTransformation.testeAuszerhalb(input, koordinaten: boolean; l: tLage; x: extended); begin - if (x<min(outAchsen[paralleleRichtung[l],'x'],outAchsen[paralleleRichtung[l],'y'])) or - (x>max(outAchsen[paralleleRichtung[l],'x'],outAchsen[paralleleRichtung[l],'y'])) then - fehler( - 'Wert '+ - myFloatToStr(x)+ - ' liegt außerhalb des gültigen Bereichs ('+ - myFloatToStr(min(outAchsen[paralleleRichtung[l],'x'],outAchsen[paralleleRichtung[l],'y']))+ - '..'+ - myFloatToStr(max(outAchsen[paralleleRichtung[l],'x'],outAchsen[paralleleRichtung[l],'y']))+ - ')!'); + if koordinaten then begin + if input then begin + if (x<0) or (x>inXSTS[paralleleRichtung[l]]-1) then + fehler('Wert '+ + myFloatToStr(x)+ + ' liegt außerhalb des gültigen '+paralleleRichtung[l]+'-Eingabebereich (0..'+ + intToStr(inXSTS[paralleleRichtung[l]]-1)+')!'); + end + else + if (x<0) or (x>outXSTS[paralleleRichtung[l]]-1) then + fehler('Wert '+ + myFloatToStr(x)+ + ' liegt außerhalb des gültigen '+paralleleRichtung[l]+'-Ausgabebereich (0..'+ + intToStr(outXSTS[paralleleRichtung[l]]-1)+')!'); + end + else begin + if input then begin + if (x<min(inAchsen[paralleleRichtung[l],'x'],inAchsen[paralleleRichtung[l],'y'])) or + (x>max(inAchsen[paralleleRichtung[l],'x'],inAchsen[paralleleRichtung[l],'y'])) then + fehler('Wert '+ + myFloatToStr(x)+ + ' liegt außerhalb des gültigen '+paralleleRichtung[l]+'-Eingabebereich ('+ + myFloatToStr(min(inAchsen[paralleleRichtung[l],'x'],inAchsen[paralleleRichtung[l],'y']))+'..'+ + myFloatToStr(max(inAchsen[paralleleRichtung[l],'x'],inAchsen[paralleleRichtung[l],'y']))+')!'); + end + else + if (x<min(outAchsen[paralleleRichtung[l],'x'],outAchsen[paralleleRichtung[l],'y'])) or + (x>max(outAchsen[paralleleRichtung[l],'x'],outAchsen[paralleleRichtung[l],'y'])) then + fehler('Wert '+ + myFloatToStr(x)+ + ' liegt außerhalb des gültigen '+paralleleRichtung[l]+'-Ausgabebereich ('+ + myFloatToStr(min(outAchsen[paralleleRichtung[l],'x'],outAchsen[paralleleRichtung[l],'y']))+'..'+ + myFloatToStr(max(outAchsen[paralleleRichtung[l],'x'],outAchsen[paralleleRichtung[l],'y']))+')!'); + end; end; procedure tTransformation.holeInfosVonVorgaengern; @@ -1947,30 +1970,38 @@ end; function tTransformation.transformiereKoordinatenEinzeln(const p: tExtPoint; auszerhalbIstFehler: boolean = true): tExtPoint; begin + if auszerhalbIstFehler then + testeAuszerhalb(true,true,p); result:=p; if auszerhalbIstFehler then - testeAuszerhalb(p); + testeAuszerhalb(false,true,result); end; function tTransformation.transformiereKoordinatenEinzelnInvers(const p: tExtPoint; auszerhalbIstFehler: boolean = true): tExtPoint; begin + if auszerhalbIstFehler then + testeAuszerhalb(false,true,p); result:=p; if auszerhalbIstFehler then - testeAuszerhalb(p); + testeAuszerhalb(true,true,result); end; function tTransformation.transformiereAchseEinzeln(const l: tLage; x: extended; auszerhalbIstFehler: boolean = true): extended; begin // generisch passiert nichts mit der Achsenbeschriftung if auszerhalbIstFehler then - testeAuszerhalb(l,x); + testeAuszerhalb(true,false,l,x); result:=x; + if auszerhalbIstFehler then + testeAuszerhalb(false,false,l,result); end; function tTransformation.transformiereAchseEinzelnInvers(const l: tLage; x: extended; auszerhalbIstFehler: boolean = true): extended; begin // generisch passiert nichts mit der Achsenbeschriftung if auszerhalbIstFehler then - testeAuszerhalb(l,x); + testeAuszerhalb(false,false,l,x); result:=x; + if auszerhalbIstFehler then + testeAuszerhalb(true,false,l,result); end; function tTransformation.transformiereKoordinaten(const p: tExtPoint; const tiefe: longint = -1): tExtPoint; @@ -2003,6 +2034,8 @@ var c,d: char; p: tExtPoint; begin + if auszerhalbIstFehler then + testeAuszerhalb(false,false,l,x); // das generische Verhalten ist c:=paralleleRichtung[l]; d:=senkrechteRichtung[l]; @@ -2023,6 +2056,8 @@ begin // und in Anteile zurückzurechnen result:=p[c]/(outXSTS[c]-1); + if auszerhalbIstFehler then + testeAuszerhalb(false,true,l,result); end; function tTransformation.positionAufAchseZuWert(const l: tLage; x: extended; auszerhalbIstFehler: boolean = true): extended; @@ -2030,6 +2065,8 @@ var c,d: char; p: tExtPoint; begin + if auszerhalbIstFehler then + testeAuszerhalb(false,true,l,x); // das generische Verhalten ist invers zu oben: c:=paralleleRichtung[l]; d:=senkrechteRichtung[l]; @@ -2053,6 +2090,8 @@ begin // und den Wert transformieren result:=transformiereAchseEinzeln(l,result,auszerhalbIstFehler); + if auszerhalbIstFehler then + testeAuszerhalb(false,false,l,result); end; function tTransformation.transformiereWertEinzeln(const x: extended): extended; @@ -2100,19 +2139,23 @@ var c: char; begin if auszerhalbIstFehler then - testeAuszerhalb(l,x); + testeAuszerhalb(false,false,l,x); // ein Wert am Anfang ist einfach linear zu interpolieren c:=paralleleRichtung[l]; if x=outAchsen[c,'x'] then result:=0 else result:=(x-outAchsen[c,'x'])/(outAchsen[c,'y']-outAchsen[c,'x'])*(1-1/outXSTS[c]); + if auszerhalbIstFehler then + testeAuszerhalb(false,true,l,result); end; function tKeineTransformation.positionAufAchseZuWert(const l: tLage; x: extended; auszerhalbIstFehler: boolean = true): extended; var c: char; begin + if auszerhalbIstFehler then + testeAuszerhalb(false,true,l,x); // ein Wert am Anfang ist einfach linear zu interpolieren c:=paralleleRichtung[l]; if x=0 then @@ -2121,7 +2164,7 @@ begin result:=x/(1-1/outXSTS[c])*(outAchsen[c,'y']-outAchsen[c,'x'])+outAchsen[c,'x']; if auszerhalbIstFehler then - testeAuszerhalb(l,result); + testeAuszerhalb(false,false,l,result); end; // tIdentitaet ***************************************************************** @@ -2187,7 +2230,7 @@ var c: char; begin if auszerhalbIstFehler then - testeAuszerhalb(l,x); + testeAuszerhalb(false,false,l,x); if ((l in [lOben,lUnten]) and not horizontal) or // untransformierte Achse? ((not (l in [lOben,lUnten])) and not vertikal) then result:=inherited wertZuPositionAufAchse(l,x,auszerhalbIstFehler) // Vorfahren befragen @@ -2201,12 +2244,16 @@ begin result:=result*(1-1/outXSTS[c]); end; + if auszerhalbIstFehler then + testeAuszerhalb(false,true,l,result); end; function tFFTTransformation.positionAufAchseZuWert(const l: tLage; x: extended; auszerhalbIstFehler: boolean = true): extended; var c: char; begin + if auszerhalbIstFehler then + testeAuszerhalb(false,true,l,x); if ((l in [lOben,lUnten]) and not horizontal) or // untransformierte Achse? ((not (l in [lOben,lUnten])) and not vertikal) then result:=inherited positionAufAchseZuWert(l,x,auszerhalbIstFehler) // Vorfahren befragen @@ -2219,7 +2266,7 @@ begin result:=x/(1-1/outXSTS[c])*(outAchsen[c,'y']-outAchsen[c,'x'])+outAchsen[c,'x']; end; if auszerhalbIstFehler then - testeAuszerhalb(l,result); + testeAuszerhalb(false,false,l,result); end; function tFFTTransformation.dumpParams: string; @@ -2246,17 +2293,21 @@ end; function tSpiegelungsTransformation.transformiereKoordinatenEinzeln(const p: tExtPoint; auszerhalbIstFehler: boolean = true): tExtPoint; begin if auszerhalbIstFehler then - testeAuszerhalb(p); + testeAuszerhalb(true,true,p); result['x']:=inXSTS['x']-1-p['x']; result['y']:=p['y']; + if auszerhalbIstFehler then + testeAuszerhalb(false,true,result); end; function tSpiegelungsTransformation.transformiereKoordinatenEinzelnInvers(const p: tExtPoint; auszerhalbIstFehler: boolean = true): tExtPoint; begin if auszerhalbIstFehler then - testeAuszerhalb(p); + testeAuszerhalb(false,true,p); result['x']:=inXSTS['x']-1-p['x']; result['y']:=p['y']; + if auszerhalbIstFehler then + testeAuszerhalb(true,true,result); end; function tSpiegelungsTransformation.dumpParams: string; @@ -2342,7 +2393,7 @@ var lt,et: extended; begin if auszerhalbIstFehler then - testeAuszerhalb(p); + testeAuszerhalb(true,true,p); for c:='x' to 'y' do begin result[c]:=off[c]; lt:=lnOff[c]; @@ -2356,14 +2407,18 @@ begin result[c]:= result[c] + lnFak[c] * ln(lt) + expFak[c] * exp(et); end; + if auszerhalbIstFehler then + testeAuszerhalb(false,true,result); end; function tKonkreteKoordinatenTransformation.transformiereKoordinatenEinzelnInvers(const p: tExtPoint; auszerhalbIstFehler: boolean = true): tExtPoint; begin if auszerhalbIstFehler then - testeAuszerhalb(p); + testeAuszerhalb(false,true,p); fehler('tKonkreteKoordinatenTransformation: transformiereKoordinatenEinzelnInvers kann es nicht geben, weil transformiereKoordinatenEinzeln nicht umkehrbar sein muss!'); result:=extPoint(0,0); + if auszerhalbIstFehler then + testeAuszerhalb(true,true,result); end; function tKonkreteKoordinatenTransformation.initAbbildung(syntaxTest: boolean; s: string; xScale,yScale: extended; etf: tExprToFloat): boolean; @@ -2512,16 +2567,20 @@ end; function tLineareAchsenVerzerrTransformation.transformiereAchseEinzeln(const l: tLage; x: extended; auszerhalbIstFehler: boolean = true): extended; begin + if auszerhalbIstFehler then + testeAuszerhalb(true,false,l,x); result:=(x - inAchsen[paralleleRichtung[l],'x'] * byte(nullen[paralleleRichtung[l]])) * fak[paralleleRichtung[l]]; if auszerhalbIstFehler then - testeAuszerhalb(l,result); + testeAuszerhalb(false,false,l,result); end; function tLineareAchsenVerzerrTransformation.transformiereAchseEinzelnInvers(const l: tLage; x: extended; auszerhalbIstFehler: boolean = true): extended; begin if auszerhalbIstFehler then - testeAuszerhalb(l,x); + testeAuszerhalb(false,false,l,x); result:=x/fak[paralleleRichtung[l]] + inAchsen[paralleleRichtung[l],'x'] * byte(nullen[paralleleRichtung[l]]); + if auszerhalbIstFehler then + testeAuszerhalb(true,false,l,result); end; constructor tLineareAchsenVerzerrTransformation.create; @@ -2591,7 +2650,7 @@ var extra: extended; begin if auszerhalbIstFehler then - testeAuszerhalb(l,x); + testeAuszerhalb(false,false,l,x); if (((l in [lOben,lUnten]) and horizontal) or // wenn in der abgefragten Richtung ((l in [lLinks,lRechts]) and vertikal)) and // verdoppelt wurde und (x > inAchsen[paralleleRichtung[l],'y']) then begin // der Wert in der 2. Hälfte liegt @@ -2603,12 +2662,16 @@ begin else extra:=0; result:=beliebigerVorgaenger.wertZuPositionAufAchse(l,x,auszerhalbIstFehler)+extra; + if auszerhalbIstFehler then + testeAuszerhalb(false,true,l,result); end; function tGroeszenVerdopplungsTransformation.positionAufAchseZuWert(const l: tLage; x: extended; auszerhalbIstFehler: boolean = true): extended; var extra: extended; begin + if auszerhalbIstFehler then + testeAuszerhalb(false,true,l,x); if (((l in [lOben,lUnten]) and horizontal) or // wenn in der abgefragten Richtung ((l in [lLinks,lRechts]) and vertikal)) and // verdoppelt wurde und (x >= inXSTS[paralleleRichtung[l]]) then begin // der Wert in der 2. Hälfte liegt @@ -2621,7 +2684,7 @@ begin extra:=0; result:=beliebigerVorgaenger.wertZuPositionAufAchse(l,x,auszerhalbIstFehler)+extra; if auszerhalbIstFehler then - testeAuszerhalb(l,x); + testeAuszerhalb(false,false,l,result); end; function tGroeszenVerdopplungsTransformation.dumpParams: string; @@ -2652,23 +2715,27 @@ end; function tLambdaZuOmegaTransformation.transformiereAchseEinzeln(const l: tLage; x: extended; auszerhalbIstFehler: boolean = true): extended; begin if auszerhalbIstFehler then - testeAuszerhalb(l,x); + testeAuszerhalb(true,false,l,x); if ((l in [lOben,lUnten]) and horizontal) or // transformierte Achse? ((l in [lLinks,lRechts]) and vertikal) then result:=_faktor/x else result:=x; + if auszerhalbIstFehler then + testeAuszerhalb(false,false,l,result); end; function tLambdaZuOmegaTransformation.transformiereAchseEinzelnInvers(const l: tLage; x: extended; auszerhalbIstFehler: boolean = true): extended; begin + if auszerhalbIstFehler then + testeAuszerhalb(false,false,l,x); if ((l in [lOben,lUnten]) and horizontal) or // transformierte Achse? ((l in [lLinks,lRechts]) and vertikal) then result:=_faktor/x else result:=x; if auszerhalbIstFehler then - testeAuszerhalb(l,x); + testeAuszerhalb(true,false,l,result); end; procedure tLambdaZuOmegaTransformation.wHorizontal(h: boolean); @@ -2724,7 +2791,7 @@ var verh: extended; begin if auszerhalbIstFehler then - testeAuszerhalb(p); + testeAuszerhalb(true,true,p); if horizontal then begin verh:=verhaeltnisHorizontal; result['x']:= @@ -2741,12 +2808,16 @@ begin end else result['y']:=p['y']; + if auszerhalbIstFehler then + testeAuszerhalb(false,true,result); end; function tLambdaZuOmegaTransformation.transformiereKoordinatenEinzelnInvers(const p: tExtPoint; auszerhalbIstFehler: boolean = true): tExtPoint; var verh: extended; begin + if auszerhalbIstFehler then + testeAuszerhalb(false,true,p); if horizontal then begin verh:=verhaeltnisHorizontal; result['x']:= @@ -2764,7 +2835,7 @@ begin else result['y']:=p['y']; if auszerhalbIstFehler then - testeAuszerhalb(p); + testeAuszerhalb(true,true,result); end; function tLambdaZuOmegaTransformation.dumpParams: string; @@ -2830,9 +2901,11 @@ var c: char; begin if auszerhalbIstFehler then - testeAuszerhalb(p); + testeAuszerhalb(true,true,p); for c:='x' to 'y' do - result[c]:=max(0,min(outXSTS[c],p[c]-gr[c,'x'])); + result[c]:=max(0,min(outXSTS[c]-1,p[c]-gr[c,'x'])); + if auszerhalbIstFehler then + testeAuszerhalb(false,true,result); end; function tKoordinatenAusschnitt.transformiereKoordinatenEinzelnInvers(const p: tExtPoint; auszerhalbIstFehler: boolean = true): tExtPoint; @@ -2840,9 +2913,11 @@ var c: char; begin if auszerhalbIstFehler then - testeAuszerhalb(p); + testeAuszerhalb(false,true,p); for c:='x' to 'y' do result[c]:=p[c]+gr[c,'x']; + if auszerhalbIstFehler then + testeAuszerhalb(true,true,result); end; function tKoordinatenAusschnitt.dumpParams: string; @@ -2889,21 +2964,25 @@ end; function tFitTransformation.wertZuPositionAufAchse(const l: tLage; x: extended; auszerhalbIstFehler: boolean = true): extended; begin if auszerhalbIstFehler then - testeAuszerhalb(l,x); + testeAuszerhalb(false,false,l,x); if (l in [lOben,lUnten]) xor _senkrecht then result:=0 // keine Ausdehnung in dieser Richtung! else result:=beliebigerVorgaenger.wertZuPositionAufAchse(l,x,auszerhalbIstFehler); + if auszerhalbIstFehler then + testeAuszerhalb(false,true,l,result); end; function tFitTransformation.positionAufAchseZuWert(const l: tLage; x: extended; auszerhalbIstFehler: boolean = true): extended; begin + if auszerhalbIstFehler then + testeAuszerhalb(false,true,l,x); if (l in [lOben,lUnten]) xor _senkrecht then fehler('Eine fit-Transformation hat keine Ausdehnung in dieser Richtung!') else result:=beliebigerVorgaenger.positionAufAchseZuWert(l,x,auszerhalbIstFehler); if auszerhalbIstFehler then - testeAuszerhalb(l,result); + testeAuszerhalb(false,false,l,result); end; function tFitTransformation.dumpParams: string; @@ -3014,6 +3093,8 @@ var c: char; s: extended; begin + if auszerhalbIstFehler then + testeAuszerhalb(false,false,l,x); // man muss zuerst herausfinden, welcher Vorfahr für den Wert verantwortlich ist: i:=0; c:=paralleleRichtung[l]; @@ -3035,14 +3116,18 @@ begin if horizontal xor not (l in [lOben,lUnten]) then // in Agglomerationsrichtung result:=(result+i)/length(vorgaenger); // muss verschoben und gestaucht werden + if auszerhalbIstFehler then + testeAuszerhalb(false,true,l,result); end; function tAgglomeration.positionAufAchseZuWert(const l: tLage; x: extended; auszerhalbIstFehler: boolean = true): extended; begin if auszerhalbIstFehler then // intentionally wrong! - testeAuszerhalb(l,x); + testeAuszerhalb(false,false,l,x); fehler('tAgglomeration: positionAufAchseZuWert ist noch nicht implementiert'); result:=0; + if auszerhalbIstFehler then + testeAuszerhalb(false,true,l,result); end; function tAgglomeration.dumpParams: string; @@ -3100,18 +3185,24 @@ end; function tDiagonaleAgglomeration.wertZuPositionAufAchse(const l: tLage; x: extended; auszerhalbIstFehler: boolean = true): extended; begin + if auszerhalbIstFehler then + testeAuszerhalb(false,false,l,x); if (datenRichtung='x') xor (l in [lOben,lUnten]) then result:=beliebigerVorgaenger.wertZuPositionAufAchse(dreheLagePositiv(l),x,auszerhalbIstFehler) else result:=beliebigerVorgaenger.wertZuPositionAufAchse(l,x,auszerhalbIstFehler); + if auszerhalbIstFehler then + testeAuszerhalb(false,true,l,result); end; function tDiagonaleAgglomeration.positionAufAchseZuWert(const l: tLage; x: extended; auszerhalbIstFehler: boolean = true): extended; begin if auszerhalbIstFehler then // intentionally wrong - testeAuszerhalb(l,x); + testeAuszerhalb(false,true,l,x); fehler('tDiagonaleAgglomeration: positionAufAchseZuWert ist noch nicht implementiert!'); result:=0; + if auszerhalbIstFehler then + testeAuszerhalb(false,false,l,result); end; function tDiagonaleAgglomeration.dumpParams: string; |