Linie zeichnen in RSS

Begonnen von betateilchen, 12 Mai 2013, 14:48:30

Vorheriges Thema - Nächstes Thema

betateilchen

Nachdem ich gestern den ganzen Abend (letztendlich erfolglos, da die Fehlermeldungen nicht verschwanden) damit zugebracht habe, das Modul 02_RSS.pm in FHEM 5.4 zu benutzen, habe ich mir eine ältere Version (aus 5.3) kopiert und siehe da - plötzlich konnte ich mit dem ersten RSS experimentieren.

Dann war ich ziemlich schnell etwas darüber frustriert, dass man keine einfache Linien zeichnen kann, um die Darstellung im Ergebnisbild zu unterteilen oder zu gestalten. Also habe ich mich hingesetzt und die 02_RSS.pm ein bisschen angepasst. Für alle, die es interessiert, hier die durchgeführten Änderungen - viel wars nicht.


--- 02_RSS.pm.ok 2013-05-12 03:59:21.308254114 +0200
+++ ../fhem/FHEM/02_RSS.pm 2013-05-12 14:21:55.363576009 +0200
@@ -201,8 +201,8 @@
 sub
 RSS_xy($$$) {
   my ($S,$x,$y)= @_;
-  if($x<1) { $x*= $S->width; }
-  if($y<1) { $y*= $S->height; }
+  if($x<=1) { $x*= $S->width; }
+  if($y<=1) { $y*= $S->height; }
   return($x,$y);
 }
 
@@ -285,6 +285,13 @@
   $S->copyResampled($I,$x,$y,0,0,$swidth,$sheight,$width,$height);
 }  
 
+sub
+RSS_itemLine {
+  my ($S,$x1,$y1,$x2,$y2,%params)= @_;
+  ($x1,$y1)= RSS_xy($S,$x1,$y1);
+  ($x2,$y2)= RSS_xy($S,$x2,$y2);
+  $S->line($x1,$y1,$x2,$y2,RSS_color($S,$params{rgb}));  
+}
 
 ##################
 sub
@@ -298,7 +305,7 @@
   $params{pt}= 12;
   $params{rgb}= "ffffff";
 
-  my ($x,$y,$scale,$text,$imgtype,$srctype,$arg,$format);
+  my ($x,$y,,$x1,$y1,$x2,$y2,$scale,$text,$imgtype,$srctype,$arg,$format);
   
   my $cont= "";
   foreach my $line (@layout) {
@@ -326,6 +333,9 @@
             my $txt= AnalyzePerlCommand(undef, $text);
             #Log 5, "$name: ($x,$y) $txt";
             RSS_itemText($S,$x,$y,$txt,%params);
+          } elsif($cmd eq "line") {
+            ($x1,$y1,$x2,$y2)= split("[ \t]+", $def, 4);
+            RSS_itemLine($S,$x1,$y1,$x2,$y2,%params);
           } elsif($cmd eq "time") {
             ($x,$y)= split("[ \t]+", $def, 2);
             RSS_itemTime($S,$x,$y,%params);


Die Änderung in RSS_xy() war notwendig, da mit der Abfrage nach "<=1" anstatt "<1" jetzt ganz einfach eine Linie über die gesamte Breite oder Höhe gezeichnet werden kann.

In der Layout-Datei ist das Einfügen einer Linie ganz einfach zu bewerkstelligen. Die Syntax ist

line <x1> <y1> <x2> <y2>

x1/y1 definiert den Starpunkt der Linie, x2/y2 definieren den Endpunkt. Es sind sowohl die absoluten Pixelangaben als auch die relativen Angaben möglich. Die Information zur Farbe kann wie bei Texten über den Layoutparameter rgb definiert werden.


rgb 7F7F7F
line 0 100 1 100


Das Beispiel zeichnet eine graue Linie über die gesamte Bildschirmbreite im Abstand von 100px vom oberen Bildrand.

Viel Spaß damit :)

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!