98_SVG.pm: fill areas to the 0 line (by Damian, Forum #108858)

git-svn-id: https://svn.fhem.de/fhem/trunk@21332 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
rudolfkoenig 2020-03-01 20:16:30 +00:00
parent b3d97f649c
commit 25e4ba52a5

View File

@ -1914,6 +1914,7 @@ SVG_render($$$$$$$$$$)
my $xmul; my $xmul;
$xmul = $w/($xmax-$xmin) if( $conf{xrange} ); $xmul = $w/($xmax-$xmin) if( $conf{xrange} );
my $hmul = $h/($hmax{$a}-$min); my $hmul = $h/($hmax{$a}-$min);
my $hfill = $hmul*$hmax{$a}; # Fill only to the 0-line, #108858
my $ret = ""; my $ret = "";
my ($dxp, $dyp) = ($hdx[$idx], $hdy[$idx]); my ($dxp, $dyp) = ($hdx[$idx], $hdy[$idx]);
SVG_pO "<!-- Warning: No data item $idx defined -->" if(!defined($dxp)); SVG_pO "<!-- Warning: No data item $idx defined -->" if(!defined($dxp));
@ -1961,7 +1962,7 @@ SVG_render($$$$$$$$$$)
} elsif($lType eq "steps" || $lType eq "fsteps" ) { } elsif($lType eq "steps" || $lType eq "fsteps" ) {
$ret .= sprintf(" %d,%d", $x+$dxp->[0], $y+$h) if($isFill && @{$dxp}); $ret .= sprintf(" %d,%d", $x+$dxp->[0],$y+$hfill) if($isFill && @{$dxp});
if(@{$dxp} == 1) { if(@{$dxp} == 1) {
my $y1 = $y+$h-($dyp->[0]-$min)*$hmul; my $y1 = $y+$h-($dyp->[0]-$min)*$hmul;
$ret .= sprintf(" %d,%d %d,%d %d,%d %d,%d", $ret .= sprintf(" %d,%d %d,%d %d,%d %d,%d",
@ -1988,12 +1989,12 @@ SVG_render($$$$$$$$$$)
} }
} }
} }
$ret .= sprintf(" %d,%d", $lx, $y+$h) if($isFill && $lx > -1); $ret .= sprintf(" %d,%d", $lx, $y+$hfill) if($isFill && $lx > -1);
SVG_pO "<polyline $attributes $lStyle points=\"$ret\"/>"; SVG_pO "<polyline $attributes $lStyle points=\"$ret\"/>";
} elsif($lType eq "histeps" ) { } elsif($lType eq "histeps" ) {
$ret .= sprintf(" %d,%d", $x+$dxp->[0], $y+$h) if($isFill && @{$dxp}); $ret .= sprintf(" %d,%d", $x+$dxp->[0],$y+$hfill) if($isFill && @{$dxp});
if(@{$dxp} == 1) { if(@{$dxp} == 1) {
my $y1 = $y+$h-($dyp->[0]-$min)*$hmul; my $y1 = $y+$h-($dyp->[0]-$min)*$hmul;
$ret .= sprintf(" %d,%d %d,%d %d,%d %d,%d", $ret .= sprintf(" %d,%d %d,%d %d,%d %d,%d",
@ -2008,7 +2009,7 @@ SVG_render($$$$$$$$$$)
$x1,$y1, ($x1+$x2)/2,$y1, ($x1+$x2)/2,$y2, $x2,$y2); $x1,$y1, ($x1+$x2)/2,$y1, ($x1+$x2)/2,$y2, $x2,$y2);
} }
} }
$ret .= sprintf(" %d,%d", $lx, $y+$h) if($isFill && $lx > -1); $ret .= sprintf(" %d,%d", $lx, $y+$hfill) if($isFill && $lx > -1);
SVG_pO "<polyline $attributes $lStyle points=\"$ret\"/>"; SVG_pO "<polyline $attributes $lStyle points=\"$ret\"/>";
} elsif( $lType eq "bars" ) { } elsif( $lType eq "bars" ) {
@ -2143,7 +2144,7 @@ SVG_render($$$$$$$$$$)
if($i == 0) { if($i == 0) {
if($doClose) { if($doClose) {
$ret .= sprintf("M %d,%d L %d,%d $lt", $x1,$y+$h, $x1,$y1); $ret .= sprintf("M %d,%d L %d,%d $lt", $x1,$y+$hfill, $x1,$y1);
} else { } else {
$ret .= sprintf("M %d,%d $lt", $x1,$y1); $ret .= sprintf("M %d,%d $lt", $x1,$y1);
} }
@ -2170,7 +2171,7 @@ SVG_render($$$$$$$$$$)
#-- insert last point for filled line #-- insert last point for filled line
$ret .= sprintf(" %.1f,%.1f", $x1, $y1) if(($lt eq "T") && defined($x1)); $ret .= sprintf(" %.1f,%.1f", $x1, $y1) if(($lt eq "T") && defined($x1));
$ret .= sprintf(" L %d,%d Z", $x1, $y+$h) if($doClose && defined($x1)); $ret .= sprintf(" L %d,%d Z", $x1,$y+$hfill) if($doClose && defined($x1));
if($ret =~ m/^ (\d+),(\d+)/) { # just points, no M/L if($ret =~ m/^ (\d+),(\d+)/) { # just points, no M/L
$ret = sprintf("M %d,%d $lt ", $1, $2).$ret; $ret = sprintf("M %d,%d $lt ", $1, $2).$ret;