summaryrefslogtreecommitdiff
path: root/epostunit.pas
diff options
context:
space:
mode:
Diffstat (limited to 'epostunit.pas')
-rw-r--r--epostunit.pas43
1 files changed, 26 insertions, 17 deletions
diff --git a/epostunit.pas b/epostunit.pas
index d368c09..4bc6655 100644
--- a/epostunit.pas
+++ b/epostunit.pas
@@ -3175,9 +3175,9 @@ function tWerte.erzeugeLinearesBild(st: boolean; var f: tMyStringlist; maxThread
var
s,datei: string;
i,j,k,schriftgroesze: longint;
- xzoom,yzoom,wert,schritt,miw,maw,Zeit: extended;
- xpe,tpe: extended;
- xmin,xmax,tmin,tmax,xp,tp: longint;
+ xzoom,yzoom,wert,schritt,miw,maw,Zeit,
+ xp0,tp0,konturDicke: extended;
+ xmin,xmax,tmin,tmax,xp,tp,
breite,hoehe,lof,rof,oof,uof: longint;
Paletten: pTPalettenArray;
Nachbearbeitungen: tTransformationArray;
@@ -3189,6 +3189,7 @@ var
fontRenderer: tFontRenderer;
beschriftungen: array of tBeschriftung;
verwKonturen: tLongintArray;
+ konturDicken: tExtendedArray;
quellen: tWerteArray;
procedure aufraeumen;
@@ -3226,6 +3227,7 @@ begin
tmin:=0;
tmax:=_tsiz-1;
schriftgroesze:=24;
+ konturDicke:=1;
setlength(quellen,1);
quellen[0]:=self;
setlength(Nachbearbeitungen,1);
@@ -3234,6 +3236,7 @@ begin
findePalette(Paletten[0],'Graustufen');
setlength(Achsen,0);
setlength(verwKonturen,0);
+ setlength(konturDicken,0);
setlength(beschriftungen,0);
setlength(BilderThreads,0);
Ausschnitt:=nil;
@@ -3354,15 +3357,21 @@ begin
Achsen[length(Achsen)-1].Striche:=strtoint(s);
continue;
end;
+ if startetMit('Konturdicke:',s) then begin
+ konturDicke:=exprToFloat(st,s);
+ continue;
+ end;
if startetMit('Kontur:',s) then begin
while length(s)>0 do begin
setlength(verwKonturen,length(verwKonturen)+1);
+ setlength(konturDicken,length(konturDicken)+1);
verwKonturen[length(verwKonturen)-1]:=findeKontur(erstesArgument(s),nil,Wertes,Konturen,false);
if (verwKonturen[length(verwKonturen)-1]<0) or (verwKonturen[length(verwKonturen)-1]>=length(Konturen^)) then begin
gibAus('Die Kontur gibt es nicht!',3);
aufraeumen;
exit;
end;
+ konturDicken[length(konturDicken)-1]:=konturDicke;
end;
continue;
end;
@@ -3510,18 +3519,18 @@ begin
gibAus('Alle Threads beendet, Konturen einfügen ...',1);
for i:=0 to length(verwKonturen)-1 do
for j:=0 to length(konturen^[verwKonturen[i]].orte)-1 do begin
- xpe:=kont2diskFak('x',konturen^[verwKonturen[i]].orte[j]['x']);
- tpe:=kont2diskFak('t',konturen^[verwKonturen[i]].orte[j]['y']);
-
- if (xmin<=xpe) and (xpe<=xmax) and (tmin<=tpe) and (tpe<=tmax) then begin
- k:=0;
- xp:=round((xpe-xmin)*xzoom);
- tp:=round((tpe-tmin)*yzoom);
- while (k<length(Bilderthreads)-1) and (xp>=Bilderthreads[k+1].xpmi) do
- inc(k);
- Bilderthreads[k].farben[(tp+oof)*Bilderthreads[k].Breite + xp - Bilderthreads[k].xpmi]:=
- konturen^[verwKonturen[i]].farbe;
- end;
+ xp0:=(kont2diskFak('x',konturen^[verwKonturen[i]].orte[j]['x'])-xmin)*xzoom;
+ tp0:=(kont2diskFak('t',konturen^[verwKonturen[i]].orte[j]['y'])-tmin)*yzoom;
+
+ for xp:=ceil(xp0-konturDicken[i]/2) to floor(xp0+konturDicken[i]/2) do
+ for tp:=ceil(tp0-konturDicken[i]/2) to floor(tp0+konturDicken[i]/2) do
+ if (0<=xp) and (xp<=Breite) and (0<=tp) and (tp<=Hoehe) and (sqr(xp-xp0)+sqr(tp-tp0)<=sqr(konturDicken[i]/2)) then begin
+ k:=0;
+ while (k<length(Bilderthreads)-1) and (xp>=Bilderthreads[k+1].xpmi) do
+ inc(k);
+ Bilderthreads[k].farben[(tp+oof)*Bilderthreads[k].Breite + xp - Bilderthreads[k].xpmi]:=
+ konturen^[verwKonturen[i]].farbe;
+ end;
end;
gibAus('fertig, speichere Bild ...',1);
assign(img,datei);
@@ -5265,9 +5274,9 @@ begin
inc(lenPO);
if baustellen[lenB-1,'x']=low(longint) then
- pOrte[lenPO-1,0]:=pOrte[baustellen[lenB-1,'y'],0]-1
+ pOrte[lenPO-1,0]:=pOrte[baustellen[lenB-1,'y'],0]-max(round(max(dx,dt)),1)
else if baustellen[lenB-1,'y']=high(longint) then
- pOrte[lenPO-1,0]:=pOrte[baustellen[lenB-1,'x'],0]+1
+ pOrte[lenPO-1,0]:=pOrte[baustellen[lenB-1,'x'],0]+max(round(max(dx,dt)),1)
else
pOrte[lenPO-1,0]:=(pOrte[baustellen[lenB-1,'x'],0] + pOrte[baustellen[lenB-1,'y'],0])/2;
berechnePOrt(lenPO-1);