From 61d3e6e50fa7ff5f0868803efa62574ceb7f4762 Mon Sep 17 00:00:00 2001
From: Damian <>
Date: Sun, 21 Mar 2021 19:33:30 +0000
Subject: [PATCH] 98_DOIF.pm: svg funktion ring/icon_ring section color
definition
git-svn-id: https://svn.fhem.de/fhem/trunk@24046 2b470e98-0d58-463d-a4d8-8e2adae1ed80
---
fhem/FHEM/98_DOIF.pm | 62 ++++++++++++++++++++++++++++++++------------
1 file changed, 46 insertions(+), 16 deletions(-)
diff --git a/fhem/FHEM/98_DOIF.pm b/fhem/FHEM/98_DOIF.pm
index ef49d2a14..c09e1002b 100644
--- a/fhem/FHEM/98_DOIF.pm
+++ b/fhem/FHEM/98_DOIF.pm
@@ -4558,8 +4558,8 @@ sub icon_mbar {
sub polarToCartesian {
my ($centerX,$centerY,$radius,$angleInDegrees)=@_;
my $angleInRadians = ($angleInDegrees-230) * ::pi() / 180.0;
- my $x= sprintf('%1.1f',$centerX + ($radius * cos($angleInRadians)));
- my $y= sprintf('%1.1f',$centerY + ($radius * sin($angleInRadians)));
+ my $x= sprintf('%1.2f',$centerX + ($radius * cos($angleInRadians)));
+ my $y= sprintf('%1.2f',$centerY + ($radius * sin($angleInRadians)));
return($x,$y);
}
@@ -4690,6 +4690,7 @@ sub icon_ring2 {
return (ring2($val,$min,$max,$minColor,$maxColor,$unit,$size,$func,$dec,$val2,$min2,$max2,$minColor2,$maxColor2,$unit2,$func2,$dec2,$lr,$ln,$icon));
}
+
sub icon_temp_hum_ring {
my ($icon,$value,$value2,$min,$max,$size,$lightring,$lightnumber,$decfont1,$decfont2) = @_;
$min=-20 if (!defined $min);
@@ -4730,9 +4731,9 @@ sub ring
$ix=30;
};
if (defined ($iy)) {
- $iy+=8;
+ $iy+=8.5;
} else {
- $iy=8;
+ $iy=8.5;
};
$rotate=0 if (!defined $rotate);
$iscale=1 if (!defined $iscale);
@@ -4752,13 +4753,14 @@ sub ring
($format,$value,$val)=format_value($val,$min,$dec);
- if (defined $func) {
+ if (ref($func) eq "CODE") {
$minColor=&{$func}($min);
$maxColor=&{$func}($max);
} else {
$minColor=120 if (!defined $minColor);
$maxColor=0 if (!defined $maxColor);
}
+
$max=$value if($value>$max);
$min=$value if ($value<$min);
$size=100 if (!defined $size);
@@ -4767,21 +4769,33 @@ sub ring
($x1,$y1,$x2,$y2)=($prop*100,0,0,(1-$prop)*100);
my $val1=int($prop*100)+20;
my $currColor;
- if (defined $func) {
- if (defined($model)) {
- $minColor=&{$func}($value);
- }
+
+ if (ref($func) eq "CODE") {
+ $minColor=&{$func}($min);
+ $maxColor=&{$func}($max);
$currColor=&{$func}($value);
+ } elsif (ref($func) eq "ARRAY") {
+ $minColor=${$func}[0];
+ $maxColor=${$func}[-1];
+ for (my $i=0;$i<@{$func};$i+=2) {
+ if ($value <= ${$func}[$i]) {
+ $currColor=${$func}[$i+1];
+ last;
+ }
+ }
} else {
+ $minColor=120 if (!defined $minColor);
+ $maxColor=0 if (!defined $maxColor);
if ($minColor < $maxColor) {
$currColor=$prop*($maxColor-$minColor)+$minColor;
} else {
$currColor=(1-$prop)*($minColor-$maxColor)+$maxColor;
}
- if (defined($model)) {
+ }
+ if (defined($model)) {
$minColor=$currColor;
- }
- }
+ }
+
if (defined $icon and $icon ne "") {
$ic="$ic\@".color($currColor,$ln) if ($ic !~ /@/);
}
@@ -4800,9 +4814,25 @@ sub ring
$out.='';
$out.=describeArc(41, 30, 28, 0, 280);
$out.='';
- $out.=sprintf('',$currColor,$minColor,(defined $lr ? $lr:0));
- $out.=describeArc(41, 30, 27.5, 0, int($prop*280));
+ $out.=sprintf('',$currColor,$minColor,(defined $lr ? $lr:0));
+ $out.=describeArc(41, 30, 28, 0, int($prop*280));
$out.='';
+
+ if (ref($func) eq "ARRAY"){
+ my $from=0;
+ my $diff=$max-$min;
+ for (my $i=0;$i<@{$func};$i+=2) {
+ my $curr=${$func}[$i];
+ my $color=${$func}[$i+1];
+ my $to=int(($curr-$min)/$diff*280);
+ $out.='';
+ $out.=describeArc(41, 30, 25.5, $from, $to);
+ $out.='';
+ $from=$to+2;
+ }
+ }
+
+
if (defined $icon and $icon ne "" and $icon ne " ") {
my $svg_icon=::FW_makeImage($ic);
if(!($svg_icon =~ s/\sheight="[^"]*"/ height="22"/)) {
@@ -4818,11 +4848,11 @@ sub ring
my ($valInt,$valDec)=split(/\./,sprintf($format,$val));
if (defined $valDec) {
$out.= sprintf('%s.%s',
- ($icflag ? 43:34),color($currColor,$ln),(defined ($icon) ? 14:20),$fontformat,$valInt,$valDec);
+ ($icflag ? 43.5:34),color($currColor,$ln),(defined ($icon) ? 14:20),$fontformat,$valInt,$valDec);
} else {
$out.= sprintf('%s',
- ($icflag ? 43:34),color($currColor,$ln),(defined ($icon) ? 14:20),$fontformat,$valInt);
+ ($icflag ? 43.5:34),color($currColor,$ln),(defined ($icon) ? 14:20),$fontformat,$valInt);
}
$out.= sprintf('%s',
($icflag ? 53:47),color($currColor,$ln),($icflag ? 9:12),$unitformat,$unit) if (defined $unit);