summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErich Eckner <git@eckner.net>2018-01-12 15:40:55 +0100
committerErich Eckner <git@eckner.net>2018-01-12 15:40:55 +0100
commit010ab33bf44b068985672c52db8876ac9e1ca5c6 (patch)
tree6280fc35c296b899b6994b56d0858e4fe64ca33d
parent0364cc09b0a01778b185ac586b7e449badebc505 (diff)
downloadepost-010ab33bf44b068985672c52db8876ac9e1ca5c6.tar.xz
typenunit.pas: testeAuszerhalb aufgeräumt
-rw-r--r--epost.lpi3
-rw-r--r--epost.lps136
-rw-r--r--typenunit.pas179
3 files changed, 204 insertions, 114 deletions
diff --git a/epost.lpi b/epost.lpi
index 490d82c..a171585 100644
--- a/epost.lpi
+++ b/epost.lpi
@@ -16,9 +16,6 @@
<i18n>
<EnableI18N LFM="False"/>
</i18n>
- <VersionInfo>
- <StringTable ProductVersion=""/>
- </VersionInfo>
<BuildModes Count="1">
<Item1 Name="Default" Default="True"/>
</BuildModes>
diff --git a/epost.lps b/epost.lps
index efdbca9..8167ff5 100644
--- a/epost.lps
+++ b/epost.lps
@@ -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;