Aquest exercici ens servirà per aprendre com dibuixar línies amb macros de OOoBasic.
Primer de tot, creo un nou document de Draw. I amb l'organitzador de macros creo un mòdul al document.
Faig servir aquest codi
Sub DibuixaLinia
const cMarge = 1000
Dim oPagina as Object
Dim oLinea as Object
Dim oPosition as Object
Dim oSize as Object
Dim iPagWidth as Integer
Dim iPagHeight as Integer
Dim iWidth as Integer
Dim iHeight as Integer
Dim v as Double
Dim w as Double
Dim x as Double
Dim xx as Integer
Dim y as Double
Dim yy as Integer
Dim iNumDecades as Integer
Dim iNumVerticals as Integer
iNumDecades = 7
iNumVerticals = 10
' obté la pàgina de dibuix actual
oPagina = ThisComponent.getDrawPages().getByName("page1")
' dimensions de la pàgina
iPagWidth = oPagina.Width
iPagHeight = oPagina.Height
' dimensions de l'àrea de dibuix, amb un marge de 1000px
iWidth = oPagina.Width - (2 * cMarge)
iHeight = oPagina.Height - (2 * cMarge)
' pinta escala logarítmica
for w = 0 to (iNumDecades - 1)
for v = 1 to 10
x = log(v * (10 ^ w)) / log(10)
xx = ((iWidth / iNumDecades) * x) + cMarge
oLinea = ThisComponent.createInstance("com.sun.star.drawing.LineShape")
oLinea.LineColor = RGB(0, 0, 255)
oLinea.LineWidth = 2
oPosition = oLinea.Position
oPosition.X = xx
oPosition.Y = cMarge
oLinea.Position = oPosition
oSize = oLinea.Size
oSize.Width = 0
oSize.Height = iHeight
oLinea.Size = oSize
oPagina.add(oLinea)
next
next
' dibuixa les divisions verticals
for w=0 to iNumVerticals
oLinea = ThisComponent.createInstance("com.sun.star.drawing.LineShape")
oLinea.LineColor = RGB(0, 0, 255)
oLinea.LineWidth = 2
yy = ((iHeight / iNumVerticals) * w) + cMarge
oPosition = oLinea.Position
oPosition.X = cMarge
oPosition.Y = yy
oLinea.Position = oPosition
oSize = oLinea.Size
oSize.Width = iWidth
oSize.Height = 0
oLinea.Size = oSize
oPagina.add(oLinea)
next
End Sub
Si executem aquesta macro, obtindrem el paper semi-logarítmic.
Una millora evident és factoritzar la funció que dibuixa la línia:
function Linea(int x, int y, int llarg, int ample, int vermell, int verd, int blau, int gruix)
dim oLinea as Object
dim oPosition as Object
dim oSize as Object
oLinea = ThisComponent.createInstance("com.sun.star.drawing.LineShape")
oLinea.LineColor = RGB(vermell, verd, blau)
oLinea.LineWidth = gruix
oPosition = oLinea.Position
oPosition.X = x
oPosition.Y = y
oLinea.Position = oPosition
oSize = oLinea.Size
oSize.Width = llarg
oSize.Height = ample
oLinea.Size = oSize
Linea = oLinea
end sub
El resultat del programa anterior és:
Cap comentari:
Publica un comentari a l'entrada