Y aquí tenemos otra entrega más sobre el maravilloso lenguaje Small Basic, que es cierto que no es la panacea precisamente, pero sigo pensando que tiene su encanto. El caso es que ahora vamos a hablar de la librería Shapes que sirve para pintar formas geométricas e imágenes en una ventana y poder aplicarle operaciones un tanto complejas, como rotar o mover de sitio estas formas. Las operaciones que tiene la librería son:
- AddLine(x1, y1, x2, y2): Añade una línea y devuelve un identificador de la forma.
- AddEllipse(ancho, alto): Añade una elipse y devuelve un identificador de la forma.
- AddTriangle(x1, y1, x2, y2, x3, y3): Añade un triángulo y devuelve un identificador de la forma.
- AddRectangle(ancho, alto): Añade un rectángulo y devuelve un identificador de la forma.
- AddImage(nombreImagen): Añade una imagen y devuelve un identificador de la forma.
- GetLeft(nombreForma): Devuelve la coordenada X de la forma. Hay que tener en cuenta que al ser creadas las formas, la coordenada X será siempre 0 y da igual que sea una línea o un triángulo al que le hayamos indicado unas coordenadas para darle forma.
- GetTop(nombreForma): Devuelve la coordenada Y de la forma. Hay que tener en cuenta que al ser creadas las formas, la coordenada Y será siempre 0 y da igual que sea una línea o un triángulo al que le hayamos indicado unas coordenadas para darle forma.
- Animate(nombreForma, x, y, duración): Mueve una forma desde su punto actual a uno que le indiquemos. Además no lo hará de forma inmediata, sino que lo irá moviendo con una velocidad que calculará en base al tiempo en milisegundos que le hayamos asignado para realizar el movimiento.
- Move(nombreForma, x, y): Mueve una forma desde su punto actual a uno que le indiquemos de forma inmediata.
- Rotate(nombreForma, ángulo): Rota una forma el ángulo indicado en grados.
- Remove(nombreForma): Borra una forma de la ventana.
Y que mejor para ilustrar lo que acabamos de exponer que un bonito ejemplo de como funciona todo esto:
'----------------------------------------------------
' Prueba con formas
'----------------------------------------------------
GraphicsWindow.Title = "Prueba con formas"
GraphicsWindow.BackgroundColor = "White"
path = Program.Directory + "\"
path = path + "image.jpg"
img = ImageList.LoadImage(path)
angle = 0
GraphicsWindow.KeyDown = OnKeyDown
GraphicsWindow.MouseMove = OnMouseMove
'----------------------------------------------------
GraphicsWindow.PenColor = "Red"
GraphicsWindow.BrushColor = "LightGray"
triang = Shapes.AddTriangle(0, -10, -10, 10, 10, 10)
Shapes.Move(triang, 100, 50)
'----------------------------------------------------
GraphicsWindow.PenColor = "Green"
GraphicsWindow.BrushColor = "LightGray"
square = Shapes.AddRectangle(42, 42)
Shapes.Move(square, 20, 100)
'----------------------------------------------------
surface = Shapes.AddImage(img)
Shapes.Move(surface, 50, 200)
'----------------------------------------------------
GraphicsWindow.PenColor = "Blue"
GraphicsWindow.BrushColor = "LightGray"
circle = Shapes.AddEllipse(42, 42)
Shapes.Move(circle, 299, 219)
'----------------------------------------------------
GraphicsWindow.PenColor = "Black"
GraphicsWindow.BrushColor = "Black"
index = 0
line = Shapes.AddLine(0, 0, 100, 0)
Array.SetValue("lines", index, line)
Shapes.Move(line, 400, 10)
'----------------------------------------------------
Sub OnKeyDown
If GraphicsWindow.LastKey = "R" Then
Shapes.Rotate(triang, angle)
Shapes.Rotate(square, angle)
Shapes.Rotate(surface, angle)
angle = angle + 5
ElseIf GraphicsWindow.LastKey = "M" Then
index = index + 1
left = Shapes.GetLeft(line)
top = Shapes.GetTop(line) + index * 10
id = Shapes.AddLine(left, top, left + 100, top)
Array.SetValue("lines", index, id)
ElseIf GraphicsWindow.LastKey = "L" Then
If index > 0 Then
id = Array.GetValue("lines", index)
Shapes.Remove(id)
index = index - 1
EndIf
EndIf
EndSub
'----------------------------------------------------
Sub OnMouseMove
x = GraphicsWindow.MouseX - 21
y = GraphicsWindow.MouseY - 21
Shapes.Animate(circle, x, y, 500)
EndSub
Vista ya la librería, con ejemplo incluido, ya nos queda poco para terminar con la API de Small Basic, tan solo hablar sobre las dos librerías que quedan del modo ventana y comentar un poco sobre las que faltan que son curiosas, pero realmente no son demasiado útiles. De todos modos eso será a partir de la próxima semana seguramente.
