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

Использование системы в различных ситуациях, вопросы программирования сценариев.

Модератор: immortal

Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

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

Сообщение Alex » Вс окт 28, 2012 11:28 am

Можно как нибудь сделать, чтобы цвет значения температуры менялся с коричневого (при плюсовой температуре) на синий при (минусовой)?

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

<font size="3" color="gray" face="Arial"><b>На улице: </b><font size="3" color="brown"><b>%tempStreet.temp%</b></font><b> °C</b><br>
Вложения
c1_1.jpg
1.4 коричневый -> синий
c1_1.jpg (13.67 КБ) 12710 просмотров
Аватара пользователя
sergejey
Site Admin
Сообщения: 4286
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 76 раз
Поблагодарили: 1559 раз
Контактная информация:

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

Сообщение sergejey » Пн окт 29, 2012 12:59 pm

Ну и задачки у вас :) Так сходу и не соображу как можно...

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

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

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

$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 при выводе

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

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

Сообщение Alex » Пн окт 29, 2012 3:56 pm

Это работает! Отлично. Таким макаром можно выводить различные графики для разных условий. Например, всегда выводится график за сутки, а в случае инцидента начинает выводится более детальный график за последние полчаса.

Ещё вопрос. Все графики имеют один тип и стиль. Невозможно вывести одновременно три графика обычных и один из столбиков. Для решения этой проблемы создал папку pChart2 (копию pChart) и всё в ней поменял. Обращаюсь к другому типу графиков как /pChart2/?p=... Правильно ли это? Есть ли более изящные способы вывести разные типы графиков на одной странице?
Аватара пользователя
sergejey
Site Admin
Сообщения: 4286
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 76 раз
Поблагодарили: 1559 раз
Контактная информация:

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

Сообщение sergejey » Пн окт 29, 2012 5:26 pm

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

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

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

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

Сообщение Alex » Пн окт 29, 2012 7:42 pm

Всё понятно.

Сейчас примерно понял как pChart рисует графики и открылось большое поле для креатива. :)
Вложения
d2.jpg
Кратив
d2.jpg (61.67 КБ) 12670 просмотров
Аватара пользователя
sergejey
Site Admin
Сообщения: 4286
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 76 раз
Поблагодарили: 1559 раз
Контактная информация:

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

Сообщение sergejey » Пн окт 29, 2012 8:37 pm

а как сейчас задано для светлых графиков? я внесу в дефолные значения для светлой темы -- симпатично смотрятся.

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

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

Сообщение Alex » Вт окт 30, 2012 10:07 am

Папка 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;
Вложения
g2.jpg
Пример2
g2.jpg (23.53 КБ) 12661 просмотр
g1.jpg
Пример1
g1.jpg (25.3 КБ) 12661 просмотр
Vit
Сообщения: 867
Зарегистрирован: Вт янв 17, 2012 12:31 pm
Благодарил (а): 121 раз
Поблагодарили: 78 раз

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

Сообщение Vit » Вт окт 30, 2012 11:34 am

классно смотрятся))

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

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

и примеры условий, если температура такая то то как поменять цвет графика или фона...
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

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

Сообщение Alex » Вт окт 30, 2012 3:35 pm

Ввёл новые параметры вызова 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


Способ, как динамически менять цвета описан Сергеем несколькими постами выше. Посмотрите, там всё просто, если что конкретно не понятно — спрашивайте.
Вложения
g21.jpg
1
g21.jpg (25.51 КБ) 12649 просмотров
g22.jpg
2
g22.jpg (24.68 КБ) 12649 просмотров
Vit
Сообщения: 867
Зарегистрирован: Вт янв 17, 2012 12:31 pm
Благодарил (а): 121 раз
Поблагодарили: 78 раз

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

Сообщение Vit » Вт окт 30, 2012 4:55 pm

шрифт у меня почемуто плывет

Изображение

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

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