Нубско
Вот мое решение...
ЗЫ Насчет констант не парьтесь, они для другой функции, и последний аргумент функции ни к чему не обязывает )))
ЗЗЫ Float2 - это вектор
Const ROUND_LEFT_UP:Int = 1
Const ROUND_LEFT_DOWN:Int = 2
Const ROUND_RIGHT_UP:Int = 4
Const ROUND_RIGHT_DOWN:Int = 8
Const ROUND_LEFT:Int = ROUND_LEFT_UP | ROUND_LEFT_DOWN
Const ROUND_RIGHT:Int = ROUND_RIGHT_UP | ROUND_RIGHT_DOWN
Const ROUND_UP:Int = ROUND_LEFT_UP | ROUND_RIGHT_UP
Const ROUND_DOWN:Int = ROUND_LEFT_DOWN | ROUND_RIGHT_DOWN
Const ROUND_ALL:Int = ROUND_LEFT | ROUND_RIGHT
Function DrawRectRound(x:Float, y:Float, w:Float, h:Float, radius:Float = 40.0, corner:Int = -1, flags:Int = ROUND_ALL)
radius = Abs(radius)
Select Sgn(corner)
Case - 1 corner = Int(radius / 10.0) + 1
Case 1 corner = Abs(corner)
Case 0
DrawRect(x, y, w, h)
Return
End Select
DrawRect(x + radius, y, w - (radius * 2.0), h)
DrawRect(x, y + radius, radius, h - (radius * 2.0))
DrawRect(x + w - radius, y + radius, radius, h - (radius * 2.0))
Local v1:Float2 = Null
Local v2:Float2 = Null
Local i:Int
For i = 0 To corner
Local ang:Float = 0.0 + ((90.0 / corner) * i)
v2 = New Float2.ForAngle(ang)
v2 = v2.MulS(radius)
If v1
DrawPoly([x + w - radius, y + h - radius, v1.x + x + w - radius, v1.y + y + h - radius, v2.x + x + w - radius, v2.y + y + h - radius])
End If
v1 = v2
v2 = Null
'DrawLine(x + w - radius, y + h - radius, v2.x + x + w - radius, v2.y + y + h - radius)
Next
v1 = Null
v2 = Null
For i = 0 To corner
Local ang2:Float = 90.0 + ((90.0 / corner) * i)
v2 = New Float2.ForAngle(ang2)
v2 = v2.MulS(radius)
If v1
'DrawLine(v1.x + x + radius, v1.y + y + h - radius, v2.x + x + radius, v2.y + y + h - radius)
DrawPoly([x + radius, y + h - radius, v1.x + x + radius, v1.y + y + h - radius, v2.x + x + radius, v2.y + y + h - radius])
End If
v1 = v2
v2 = Null
Next
v1 = Null
v2 = Null
For i = 0 To corner
Local ang3:Float = 180.0 + ((90.0 / corner) * i)
v2 = New Float2.ForAngle(ang3)
v2 = v2.MulS(radius)
If v1
'DrawLine(v1.x + x + radius, v1.y + y + radius, v2.x + x + radius, v2.y + y + radius)
DrawPoly([x + radius, y + radius, v1.x + x + radius, v1.y + y + radius, v2.x + x + radius, v2.y + y + radius])
End If
v1 = v2
v2 = Null
Next
v1 = Null
v2 = Null
For i = 0 To corner
Local ang4:Float = 270.0 + ((90.0 / corner) * i)
v2 = New Float2.ForAngle(ang4)
v2 = v2.MulS(radius)
If v1
'DrawLine(v1.x + x + w - radius, v1.y + y + radius, v2.x + x + w - radius, v2.y + y + radius)
DrawPoly([x + w - radius, y + radius, v1.x + x + w - radius, v1.y + y + radius, v2.x + x + w - radius, v2.y + y + radius])
End If
v1 = v2
v2 = Null
Next
End Function