FHEM > Codeschnipsel

Linie zeichnen in RSS

(1/1)

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.


--- Code: ---
--- 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);

--- Ende Code ---


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.


--- Code: ---
rgb 7F7F7F
line 0 100 1 100

--- Ende Code ---


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

Viel Spaß damit :)

Navigation

[0] Themen-Index

Zur normalen Ansicht wechseln