Показать сообщение отдельно
Старый 06.12.2011, 00:58   #12
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,355
Написано 2,471 полезных сообщений
(для 6,853 пользователей)
Ответ: Скруглённые уголки на BlitzMax

Воть :3

DrawPoly вызывается 1 раз!
Единственное косинусов/синусов много :C
Function DrawRoundedRect(x:Float, y:Float, width:Float, height:Float, r:Float = 30, segs:Int = 4)
	segs = Max(segs, 1)
	r = Max(r, 1)
	
	Local xy:Float[] = New Float[((segs * 4) + 8) * 2]
	
	Local fstep:Float = 90 / segs ' one step for draw corners
	
	Local wpos:Int = 0 ' writing position in xy:Float[] array
	
	' lt corner
	xy[wpos] = x
	xy[wpos + 1] = y + r
	wpos:+2
	
	For Local i:Int = 0 Until segs
		Local fang:Float = 180 + i * fstep
		xy[wpos] = (x + r) + Cos(fang) * r
		xy[wpos + 1] = (y + r) + Sin(fang) * r
		wpos:+2
	Next
		
	xy[wpos] = x + r
	xy[wpos + 1] = y
	wpos:+2
	
	' rt corner
	xy[wpos] = x + width - r
	xy[wpos + 1] = y
	wpos:+2
		
	For Local i:Int = 0 Until segs
		Local fang:Float = 270 + i * fstep
		xy[wpos] = (x + width - r) + Cos(fang) * r
		xy[wpos + 1] = (y + r) + Sin(fang) * r
		wpos:+2
	Next
	
	xy[wpos] = x + width
	xy[wpos + 1] = y + r
	wpos:+2	
	
	' rb corner
	xy[wpos] = x + width
	xy[wpos + 1] = y + height - r
	wpos:+2		
	
	For Local i:Int = 0 Until segs
		Local fang:Float = 0 + i * fstep
		xy[wpos] = (x + width - r) + Cos(fang) * r
		xy[wpos + 1] = (y + height - r) + Sin(fang) * r
		wpos:+2
	Next
	
	xy[wpos] = x + width - r
	xy[wpos + 1] = y + height
	wpos:+2		
	
	' lb corner
	xy[wpos] = x + r
	xy[wpos + 1] = y + height
	wpos:+2
	
	For Local i:Int = 0 Until segs
		Local fang:Float = 90 + i * fstep
		xy[wpos] = (x + r) + Cos(fang) * r
		xy[wpos + 1] = (y + height - r) + Sin(fang) * r
		wpos:+2
	Next
	
	xy[wpos] = x
	xy[wpos + 1] = y + height - r
	wpos:+2		
		
	DrawPoly(xy)
EndFunction
Семпл в аттаче
Вложения
Тип файла: 7z [BMX]RoundedRect(NEW).7z (53.4 Кб, 690 просмотров)
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
(Offline)
 
Ответить с цитированием