Страница 1 из 2

Как изменить цвет

Добавлено: Вс окт 28, 2012 11:28 am
Alex
Можно как нибудь сделать, чтобы цвет значения температуры менялся с коричневого (при плюсовой температуре) на синий при (минусовой)?

Код: Выделить всё

<font size="3" color="gray" face="Arial"><b>На улице: </b><font size="3" color="brown"><b>%tempStreet.temp%</b></font><b> °C</b><br>

Re: Как изменить цвет

Добавлено: Пн окт 29, 2012 12:59 pm
sergejey
Ну и задачки у вас :) Так сходу и не соображу как можно...

На сценах можно было бы сделать два состояний разных цветов и показывать либо одно либо второе, в зависимости от условий...

Есть вариант -- посмотреть метод, который срабатывает при изменении температуры и в него добавить код, который будет брать значение температуры и записывать уже отформатированное значение в отдельное свойство. Как-то в таком виде (приблизительно):

Код: Выделить всё

$temp=$this->getProperty('temp');
if ($temp>0) {
 $this->setProperty('tempFormatted','<font color="red">'.$temp.'</font>');
} else {
 $this->setProperty('tempFormatted','<font color="blue">'.$temp.'</font>');
}
ну а потом tempFormatted уже использовать вместо temp при выводе

Re: Как изменить цвет

Добавлено: Пн окт 29, 2012 3:56 pm
Alex
Это работает! Отлично. Таким макаром можно выводить различные графики для разных условий. Например, всегда выводится график за сутки, а в случае инцидента начинает выводится более детальный график за последние полчаса.

Ещё вопрос. Все графики имеют один тип и стиль. Невозможно вывести одновременно три графика обычных и один из столбиков. Для решения этой проблемы создал папку pChart2 (копию pChart) и всё в ней поменял. Обращаюсь к другому типу графиков как /pChart2/?p=... Правильно ли это? Есть ли более изящные способы вывести разные типы графиков на одной странице?

Re: Как изменить цвет

Добавлено: Пн окт 29, 2012 5:26 pm
sergejey
А почему нельзя разные типы графиков на одной странице? Там же вроде передаётся тип графика через параметр gtype (может быть curve, bar или ничего не задавать и будет обычный линейный). Или я что-то не очень понимаю?

По оформлению да, сейчас оно не задаётся через параметры, я просто пока не разбирался как в pchart это оформление вообще задать -- взял параметры цветов из примеров, да так и остались. Но если разобрался, как их менять, то можно тоже внести в параметры вызова.

Re: Как изменить цвет

Добавлено: Пн окт 29, 2012 7:42 pm
Alex
Всё понятно.

Сейчас примерно понял как pChart рисует графики и открылось большое поле для креатива. :)

Re: Как изменить цвет

Добавлено: Пн окт 29, 2012 8:37 pm
sergejey
а как сейчас задано для светлых графиков? я внесу в дефолные значения для светлой темы -- симпатично смотрятся.

Re: Как изменить цвет

Добавлено: Вт окт 30, 2012 10:07 am
Alex
Папка pChart. Файл index.php. Изменена нижняя часть файла, начиная с "$Test = new pChart($w,$h);".

Код: Выделить всё

 $Test = new pChart($w,$h);  

  
  if ($_GET['gcolor']=='red') {
   $Test->setColorPalette(0,220,50,50);
  } elseif ($_GET['gcolor']=='brown') {
   $Test->setColorPalette(0,220,140,100);
  } elseif ($_GET['gcolor']=='blue') {
   $Test->setColorPalette(0,100,140,220);
  } elseif ($_GET['gcolor']=='green') {
   $Test->setColorPalette(0,100,220,140);
  } elseif ($_GET['gcolor']=='orange') {
   $Test->setColorPalette(0,220,190,50);
  } else {
   $Test->setColorPalette(0,150,150,150);  
  }
  

 // $Test->drawGraphAreaGradient(132,153,172,50,TARGET_BACKGROUND);  

  $Test->setFontProperties("./pChart/Fonts/tahoma.ttf",10);  
  if ($_GET['title']) {
   $Test->drawTitle(60,15,$_GET['title'],250,250,250);
  } else {
   $Test->drawTitle(60,15,$p,250,250,250);
  }


  $Test->setFontProperties("./pChart/Fonts/tahoma.ttf",8);  
  $Test->setGraphArea(60,20,$w-25,$h-30);  
  //$Test->drawGraphArea(213,217,221,FALSE);  
  $Test->drawScale($DataSet->GetData(),$DataSet->GetDataDescription(),SCALE_START0,100,100,100,TRUE,0,2);
  $Test->drawGraphAreaGradient(240,240,240,5);
  
  //$Test->drawGrid(4,TRUE,230,230,230,50); 


  // Draw the line chart  
  $Test->drawPlotGraph($DataSet->GetData(),$DataSet->GetDataDescription(),2);  

  if ($_GET['gtype']=='curve') {
   $Test->drawCubicCurve($DataSet->GetData(),$DataSet->GetDataDescription());
  } elseif ($_GET['gtype']=='bar') {
   $Test->drawBarGraph($DataSet->GetData(),$DataSet->GetDataDescription(),TRUE);
  } else {
   $Test->drawLineGraph($DataSet->GetData(),$DataSet->GetDataDescription());  
  }


   
  // Render the picture  
  $Test->AddBorder(1, 200,200,200); 
  Header("Content-type:image/png");
 imagepng($Test->Picture);
 //$Test->Render();


 $db->Disconnect(); // closing database connection
Добавил свойство gcolor, значение (по умолчанию) серый или можно изменить на red, blue, green, brown, orange. Вызов &gcolor=red. Теперь графики можно делать разноцветными. Если использовать трюк с tempFormatted, то можно менять цвет графика динамически.

Можно сделать ещё один фокус. Менять цвет фона графика в зависимости от значения контролируемого параметра. Например, если температура котла больше определённого значения, то фон графика станет розовый или красный.

Чтобы включить тень нужно в файле pChart.class изменить:

Код: Выделить всё

  /* Shadow settings */
   var $ShadowActive    = TRUE;
   var $ShadowXDistance = 2;
   var $ShadowYDistance = 2;
   var $ShadowRColor    = 120;
   var $ShadowGColor    = 120;
   var $ShadowBColor    = 120;
   var $ShadowAlpha     = 50;
   var $ShadowBlur      = 0;

Re: Как изменить цвет

Добавлено: Вт окт 30, 2012 11:34 am
Vit
классно смотрятся))

выложите еще примеры реализации разных цветов для разных условий

еще для темной темы если можно варианты скинуть и как файл подправить...

и примеры условий, если температура такая то то как поменять цвет графика или фона...

Re: Как изменить цвет

Добавлено: Вт окт 30, 2012 3:35 pm
Alex
Ввёл новые параметры вызова bcolor – цвет фона и bgcolor – цвет зоны графика.

&gcolor=red – цвет графика
&bcolor=red – цвет фона
&bgcolor=red – цвет зоны графика


Общий код выглядит так.

Код: Выделить всё

 $Test = new pChart($w,$h);  

  
  if ($_GET['gcolor']=='red') {
   $Test->setColorPalette(0,220,50,50);
  } elseif ($_GET['gcolor']=='brown') {
   $Test->setColorPalette(0,220,140,100);
  } elseif ($_GET['gcolor']=='blue') {
   $Test->setColorPalette(0,100,140,220);
  } elseif ($_GET['gcolor']=='green') {
   $Test->setColorPalette(0,100,220,140);
  } elseif ($_GET['gcolor']=='orange') {
   $Test->setColorPalette(0,220,190,50);
  } else {
   $Test->setColorPalette(0,150,150,150);  
  }
  
  if ($_GET['bcolor']=='red') {
   $Test->drawGraphAreaGradient(250,210,210,50,TARGET_BACKGROUND);// red
  } elseif ($_GET['bcolor']=='blue') {
   $Test->drawGraphAreaGradient(170,220,250,50,TARGET_BACKGROUND);// blue
  } elseif ($_GET['bcolor']=='green') {
   $Test->drawGraphAreaGradient(210,250,210,50,TARGET_BACKGROUND);// green
  } else {
   // empty
  }
 
  $Test->setFontProperties("./pChart/Fonts/tahoma.ttf",10);  
  if ($_GET['title']) {
   $Test->drawTitle(60,15,$_GET['title'],250,250,250);
  } else {
   $Test->drawTitle(60,15,$p,250,250,250);
  }


  $Test->setFontProperties("./pChart/Fonts/tahoma.ttf",8);  
  $Test->setGraphArea(60,20,$w-25,$h-30);  

  //$Test->drawScale($DataSet->GetData(),$DataSet->GetDataDescription(),SCALE_START0,213,217,221,TRUE,0,2); 

  $Test->drawScale($DataSet->GetData(),$DataSet->GetDataDescription(),SCALE_START0,100,100,100,TRUE,0,2);
  
  // background of gr.
  //$Test->drawGraphAreaGradient(162,183,202,50);  
  
  if ($_GET['bgcolor']=='red') {
   $Test->drawGraphAreaGradient(250,210,210,5);
  } elseif ($_GET['bgcolor']=='blue') {
   $Test->drawGraphAreaGradient(170,220,250,5);
  } elseif ($_GET['bgcolor']=='green') {
   $Test->drawGraphAreaGradient(220,250,220,5);
  } else {
   $Test->drawGraphAreaGradient(240,240,240,5);
  }  

  
  //$Test->drawGrid(4,TRUE,230,230,230,50); 


  // Draw the line chart  
  $Test->drawPlotGraph($DataSet->GetData(),$DataSet->GetDataDescription(),2);  

  if ($_GET['gtype']=='curve') {
   $Test->drawCubicCurve($DataSet->GetData(),$DataSet->GetDataDescription());
  } elseif ($_GET['gtype']=='bar') {
   $Test->drawBarGraph($DataSet->GetData(),$DataSet->GetDataDescription(),TRUE);
  } else {
   $Test->drawLineGraph($DataSet->GetData(),$DataSet->GetDataDescription());  
  }

  
  // Render the picture  
  $Test->AddBorder(1, 200,200,200); 
  Header("Content-type:image/png");
 imagepng($Test->Picture);
 //$Test->Render();


 $db->Disconnect(); // closing database connection


Способ, как динамически менять цвета описан Сергеем несколькими постами выше. Посмотрите, там всё просто, если что конкретно не понятно — спрашивайте.

Re: Как изменить цвет

Добавлено: Вт окт 30, 2012 4:55 pm
Vit
шрифт у меня почемуто плывет

Изображение

что подправить можно?

и как привязать изменение например фона к значению температуры...не могу до конца доехать где именно это вызывать нужно?