parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Вот пример рисования графиков

Dizatorr 23.09.2004 14:08

Функции передается таблица любого размера оформленная следующим образом: первый столбец обязательно несет названия строк
$tab[^table::create{name	2000	2001	2002	2003	2004
вова	1	10	30.3	30	40
лева	2	12.12	22	32	42
Леша	5	15	25	35	45}]
^grafik[$tab]
Далее сама функция. несколько сумбурно оформлена и валит все в одну кучу, но кому надо разберется
@grafik[tabname]
#константы и переменные
$x_size(200)
$y_size(200)
$spacer(3)
$color_bg(0xffffff)
$gif_img[^image::load[red.gif]]
#количество строк и столбцов
$columns_table[^tabname.columns[]]
$kol_strok[^tabname.count[]]
$kol_stolb[^columns_table.count[]]

#находим максимальное значение таблицы
^tabname.menu{
	$column[$columns_table.column]
	^for[stroka](0;$kol_strok+1){
		^columns_table.offset(1)
		$column[$columns_table.column]
		$image_w($mnozit*$tabname.$column)
		$valuer($tabname.$column)
		$sum_znac($sum_znac+$valuer)
		^if($valuer>$max){$max($valuer)}
	}
	^columns_table.offset(1)</ul></ul>
}

#еще парочка переменных
$mnozit($x_size/$max)

#рисуем таблицу
^tabname.menu{
	<ul>
	$column[$columns_table.column]
	<li>$tabname.$column</li>
	<ul>
	^for[stroka](0;$kol_strok+1){
		^columns_table.offset(1)
		$column[$columns_table.column]
		$image_w($mnozit*$tabname.$column)
		<li>$columns_table.column <img src="red.gif" width="$image_w" height="10" /> $tabname.$column</li>
	}
	^columns_table.offset(1)</ul></ul>
}

#рисуем сектора создаем картинку
$sector_img[^image::create($x_size;$y_size;$color_bg)]

#рисуем
$start_in(0)
$color_sec(0xff1111)
^tabname.menu{
	$sum_znacs(0)
	^for[stroka](0;$kol_strok+1){
		^columns_table.offset(1)
		$column[$columns_table.column]
		$sum_znacs($tabname.$column+$sum_znacs)
	}
	$uglov_mnoz(360/$sum_znacs)
	$sector_img[^image::create($x_size;$y_size;$color_bg)]
	$sector_img.line-width(1)
	^columns_table.offset(1)
	$start_in(0)
	^for[stroka](0;$kol_strok+1){
		^columns_table.offset(1)
		$column[$columns_table.column]
		$peremen($tabname.$column)
		$end_in($peremen*$uglov_mnoz+$start_in)
		^sector_img.sector($x_size/2;$y_size/2;$x_size-$spacer;$y_size-$spacer;$start_in;$end_in;$color_sec)
# X=R*cos(t), Y=R*sin(t), где R - радиус)
		$u_fill($start_in+$end_in)
		$r_fill(($x_size+$y_size)/4-$spacer-6)
		$x_fill((^math:cos(^math:radians($u_fill/2))*$r_fill)+$x_size/2)
		$y_fill((^math:sin(^math:radians($u_fill/2))*$r_fill)+$y_size/2)
		$color_sec2(^math:random(0xffffff))
		^sector_img.fill($x_fill;$y_fill;$color_sec2)
#^sector_img.bar($x_fill;$y_fill;$x_fill+2;$y_fill+2;$color_sec2)
		$start_in($end_in)
	}
	^columns_table.offset(1)
	$file_gif[^sector_img.gif[]]
	$i($i+1)
	^file_gif.save[binary;sectors+$i+.gif]    
	<img src="sectors+$i+.gif" />
}