I took the advice here and tried to take it one step further by drawing polygons. However, it ALWAYS throws a BASIC runtime error. Object variable not set.
error on this line:
oShape.PolyPolygon = Array(ecken)
However, the shape is actually drawn but again I fail to understand what could be wrong. The full code:
REM ***** BASIC *****
Sub GloKuVielecke
Dim daten(11,2)
daten(0, 0) = "E-Fahrrad" : daten(0, 1) = 1
daten(1, 0) = "Moped" : daten(1, 1) = 4
daten(2, 0) = "Motorrad" : daten(2, 1) = 6
daten(3, 0) = "Kleines E-Auto" : daten(3, 1) = 14
daten(4, 0) = "Kleinwagen" : daten(4, 1) = 12
daten(5, 0) = "Mittelklasse" : daten(5, 1) = 17
daten(6, 0) = "Großer Van, SUV oder großes E-Auto" : daten(6, 1) = 21
daten(7, 0) = "Luxuswagen oder Wohnmobil" : daten(7, 1) = 26
daten(8, 0) = "Wohnwagen oder Motorboot <6m" : daten(8, 1) = 15
daten(9, 0) = "Yacht" : daten(9, 1) = 17
daten(10, 0) = "Privatjet" : daten(10, 1) = 341
Dim oPage 'Page on which to draw
Dim oDrawDoc 'Temporary draw document.
Dim oShape
'oDrawDoc = LoadEmptyDocument("sdraw")
'oPage = createDrawPage(oDrawDoc, "GloKu", True)
oPage = ThisComponent.getDrawPages().getByIndex(0)
Dim ecken()
' Anzahl twips pro Zentimeter
einheit% = 1000
For i = LBound(daten()) To UBound(daten())
' Anzahl Ecken bestimmen
ecken = Array()
If daten(i, 1) MOD 10 = 0 OR daten(i, 1) <= 10 Then
ReDim ecken(4)
Else
ReDim ecken(6)
End If
' 1. Ecke
ecken(0)=CreatePoint(0, 0)
' 2. Ecke
If daten(i, 1) < 10 Then
ecken(1)=CreatePoint(daten(i, 1) * einheit%, 0)
Else
ecken(1)=CreatePoint(10 * einheit%, 0)
End If
' 3. Ecke
If daten(i, 1) <= 10 Then
ecken(2)=CreatePoint(daten(i, 1) * einheit%, einheit%)
Else
ecken(2)=CreatePoint(10 * einheit%, einheit% * daten(i, 1) \ 10)
End If
' 4. Ecke
If daten(i, 1) <= 10 Then
ecken(3)=CreatePoint(0, einheit%)
Else
ecken(3)=CreatePoint(daten(i, 1) MOD 10 * einheit%, einheit% * daten(i, 1) \ 10)
End If
' 5. & 6. Ecke
If daten(i, 1) MOD 10 <> 0 AND daten(i, 1) > 10 Then
ecken(4)=CreatePoint(daten(i, 1) MOD 10 * einheit%, einheit% * daten(i, 1) \ 10 + einheit%)
ecken(5)=CreatePoint(0, einheit% * daten(i, 1) \ 10 + einheit%)
End If
oShape = ThisComponent.createInstance("com.sun.star.drawing.PolyPolygonShape")
oPage.add(oShape)
oShape.PolyPolygon = Array(ecken)
oShape.Text = daten(i, 0)
oShape.LineWidth = 10
' Position versetzen
If i MOD 2 = 0 Then
oShape.setPosition(CreatePoint(einheit%, i * einheit%))
Else
oShape.setPosition(CreatePoint(einheit% * 11.5, i * einheit%))
End If
Next i
End Sub
Function CreatePoint(ByVal x As Long, ByVal y As Long) As com.sun.star.awt.Point
Dim oPoint
oPoint=createUnoStruct( "com.sun.star.awt.Point" )
oPoint.X=x : oPoint.Y=y
CreatePoint=oPoint
End Function
I run LibreOffice 7.1.5 on macOS 11.5.1 Big Sur