diff options
Diffstat (limited to 'typenunit.pas')
-rw-r--r-- | typenunit.pas | 36 |
1 files changed, 34 insertions, 2 deletions
diff --git a/typenunit.pas b/typenunit.pas index ff29cf2..bc3a52f 100644 --- a/typenunit.pas +++ b/typenunit.pas @@ -279,7 +279,8 @@ type wmiaExplizit: boolean; // wMia wurde explizit gesetzt _anzZugehoerigerDaten: longint; - procedure testeAuszerhalb(const p: tExtPoint); + procedure testeAuszerhalb(p: tExtPoint); overload; inline; + procedure testeAuszerhalb(l: tLage; x: extended); overload; inline; procedure holeInfosVonVorgaengern; virtual; procedure aktualisiereAchsen; virtual; @@ -1506,13 +1507,27 @@ begin inherited destroy; end; -procedure tTransformation.testeAuszerhalb(const p: tExtPoint); +procedure tTransformation.testeAuszerhalb(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)+')!'); end; +procedure tTransformation.testeAuszerhalb(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']))+ + ')!'); +end; + procedure tTransformation.holeInfosVonVorgaengern; var i: longint; @@ -1943,6 +1958,8 @@ function tKeineTransformation.wertZuPositionAufAchse(const l: tLage; x: extended var c: char; begin + if auszerhalbIstFehler then + testeAuszerhalb(l,x); // ein Wert am Anfang ist einfach linear zu interpolieren c:=char(ord('y')-byte(l in [lOben,lUnten])); if x=outAchsen[c,'x'] then @@ -1955,6 +1972,8 @@ function tKeineTransformation.positionAufAchseZuWert(const l: tLage; x: extended var c: char; begin + if auszerhalbIstFehler then + testeAuszerhalb(l,x); // ein Wert am Anfang ist einfach linear zu interpolieren c:=char(ord('y')-byte(l in [lOben,lUnten])); if x=0 then @@ -2025,6 +2044,8 @@ function tFFTTransformation.wertZuPositionAufAchse(const l: tLage; x: extended; var c: char; begin + if auszerhalbIstFehler then + testeAuszerhalb(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 @@ -2044,6 +2065,8 @@ function tFFTTransformation.positionAufAchseZuWert(const l: tLage; x: extended; var c: char; begin + if auszerhalbIstFehler then + testeAuszerhalb(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 @@ -2194,7 +2217,10 @@ end; function tKonkreteKoordinatenTransformation.transformiereKoordinatenEinzelnIvers(const p: tExtPoint; auszerhalbIstFehler: boolean = true): tExtPoint; begin + if auszerhalbIstFehler then + testeAuszerhalb(p); fehler('tKonkreteKoordinatenTransformation: transformiereKoordinatenEinzelnIvers kann es nicht geben, weil transformiereKoordinatenEinzeln nicht umkehrbar sein muss!'); + result:=extPoint(0,0); end; function tKonkreteKoordinatenTransformation.initAbbildung(syntaxTest: boolean; s: string; xScale,yScale: extended; etf: tExprToFloat): boolean; @@ -2708,7 +2734,10 @@ end; function tAgglomeration.positionAufAchseZuWert(const l: tLage; x: extended; auszerhalbIstFehler: boolean = true): extended; begin + if auszerhalbIstFehler then + testeAuszerhalb(l,x); fehler('tAgglomeration: positionAufAchseZuWert ist noch nicht implementiert'); + result:=0; end; function tAgglomeration.dumpParams: string; @@ -2774,7 +2803,10 @@ end; function tDiagonaleAgglomeration.positionAufAchseZuWert(const l: tLage; x: extended; auszerhalbIstFehler: boolean = true): extended; begin + if auszerhalbIstFehler then + testeAuszerhalb(l,x); fehler('tDiagonaleAgglomeration: positionAufAchseZuWert ist noch nicht implementiert!'); + result:=0; end; function tDiagonaleAgglomeration.dumpParams: string; |