pixilang 3.7

Pixilang по русски
Post Reply
pserg
Posts: 2
Joined: Sun Sep 16, 2018 2:23 am

pixilang 3.7

Post by pserg »

Добрый день

Разбираюсь с языком.
Поставил новую версию 3.7. Похоже, что перестало работать событие EVT_SCREENRESIZE. В 3.6 работает, а сейчас при изменении размера окна никакого события не происходит.

Или что-то изменилось в новой версии при работе с изменением размера экрана?
User avatar
NightRadio
Site Admin
Posts: 3941
Joined: Fri Jan 23, 2004 12:28 am
Location: Ekaterinburg. Russia
Contact:

Re: pixilang 3.7

Post by NightRadio »

Добрый день!
Действительно, это баг в новой версии. Постараюсь исправить в ближайшие дни.
Спасибо!
User avatar
NightRadio
Site Admin
Posts: 3941
Joined: Fri Jan 23, 2004 12:28 am
Location: Ekaterinburg. Russia
Contact:

Re: pixilang 3.7

Post by NightRadio »

Исправил. Обновление 3.7b для Windows, Linux и macOS:
http://warmplace.ru/soft/pixilang/pixilang3.7b.zip
pserg
Posts: 2
Joined: Sun Sep 16, 2018 2:23 am

Re: pixilang 3.7

Post by pserg »

Благодарю!
User avatar
Borg
Posts: 2
Joined: Fri Feb 15, 2019 10:55 pm

Re: pixilang 3.7

Post by Borg »

Добрый день
Надеюсь проект ещё жив.
При рисовании пиксельной матрицы в v3.7b (Oct 4 2018), заметил что функции box() и fbox(), при равных координатах, размерах сторон и цвете, рисуют квадраты разного размера. Функция box() отрисовывает квадрат по X и по Y на один пиксел больше, чем функция fbox().
Это ошибка билда Pixilang или я чего то не понимаю?
User avatar
NightRadio
Site Admin
Posts: 3941
Joined: Fri Jan 23, 2004 12:28 am
Location: Ekaterinburg. Russia
Contact:

Re: pixilang 3.7

Post by NightRadio »

Добрый день!
Это особенность работы функций box и fbox.
Размер в fbox указывает на количество закрашенных пикселей.
Размер в box указывает на расстояние между крайними линиями.
User avatar
Borg
Posts: 2
Joined: Fri Feb 15, 2019 10:55 pm

Re: pixilang 3.7

Post by Borg »

Благодарю.
Заметил ещё в языке отсутствует встроенная функция рисования кругов.
Накопал неплохой алгоритм Брезенхэма (Bresenham), возможно пригодится для будущих билдов pixi. Преимущества: отрисовавыет идеальные круги любых размеров, ровной формы без разрывов, без увеличения толщины линии, каждая точка отрисовывается только один раз, тем самым затрачивая минимальное количество ресурсов.

Code: Select all

fn circleBrez($xPos, $yPos, $radius, $color){	//Окружность Брезенхэма
	$x = 0;
	$y = $radius;
	$delta = 3 - 2 * $radius;
	
	while($x <= $y){
		dot($xPos + $x, $yPos + $y, $color);
		dot($xPos - $x, $yPos + $y, $color);
		dot($xPos + $x, $yPos - $y, $color);
		dot($xPos - $x, $yPos - $y, $color);
		dot($xPos + $y, $yPos + $x, $color);
		dot($xPos - $y, $yPos + $x, $color);
		dot($xPos + $y, $yPos - $x, $color);
		dot($xPos - $y, $yPos - $x, $color);
		
		if($delta < 0){
			$delta = $delta + 4 * $x + 6;
		}else{
			if($delta >= 0){
				$delta = $delta + 4 * ($x - $y) + 10;
				$y = $y - 1;
			}
		}
		$x = $x + 1;
	}
}
Так же есть версия для закрашенной окружности

Code: Select all

fn fcircleBrez($xPos, $yPos, $radius, $color){	//Закрашенная окружность Брезенхэма
	$x = 0;
	$y = $radius;
	$delta = 3 - 2 * $radius;
	
	while($x <= $y){
		line($xPos + $x, $yPos + $y, $xPos - $x, $yPos + $y, $color);
		line($xPos + $x, $yPos - $y, $xPos - $x, $yPos - $y, $color);
		line($xPos + $y, $yPos + $x, $xPos - $y, $yPos + $x, $color);
		line($xPos + $y, $yPos - $x, $xPos - $y, $yPos - $x, $color);
		
		if($delta < 0){
			$delta = $delta + 4 * $x + 6;
		}else{
			if($delta >= 0){
				$delta = $delta + 4 * ($x - $y) + 10;
				$y = $y - 1;
			}
		}
		$x = $x + 1;
	}
}
У закрашенной есть небольшой недостаток, первая линия пикселей на полюсах круга не оптимально использует "закраску", но по логике можно оптимизировать, хотя не критично, и скорее всего не будет заметно вообще.
User avatar
NightRadio
Site Admin
Posts: 3941
Joined: Fri Jan 23, 2004 12:28 am
Location: Ekaterinburg. Russia
Contact:

Re: pixilang 3.7

Post by NightRadio »

Спасибо за интересные примеры!
Кругов в комплекте нет, т.к. эту функцию можно реализовать множеством способов имеющимися средствами Pixilang. Два способа вы привели. Другие варианты вы можете найти в библиотеках lib/gfx_primitives.pixi и lib/gl_primitives.pixi
Пример - examples/graphics/primitives.pixi
Post Reply