diff options
author | Erich Eckner <git@eckner.net> | 2016-03-10 09:11:46 +0100 |
---|---|---|
committer | Erich Eckner <git@eckner.net> | 2016-03-10 09:11:46 +0100 |
commit | d0003f1ce5ea2411b5bcacf354f9bf19560d3319 (patch) | |
tree | 5b1efd0d8f1c600772c7384f9676ecf7f5583625 /epostunit.pas | |
parent | f7e85f1de8e4fe5db54f750bf25649c3e6a326b8 (diff) | |
download | epost-d0003f1ce5ea2411b5bcacf354f9bf19560d3319.tar.xz |
Konturen mit Dicke in Bild zeichnen
Diffstat (limited to 'epostunit.pas')
-rw-r--r-- | epostunit.pas | 43 |
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); |