'Parameters: Points as int, InnerRadius Factor, 1 or more buttons
'Designer Script : DSE_Nodes.StarButton(5,"0.5",Button1)
Public Sub StarButton(DesignerArgs As DesignerArgs)
If DesignerArgs.FirstRun Then
Dim Points As Int = DesignerArgs.Arguments.Get(0)
Dim InnerRadiusFactor As Double = DesignerArgs.Arguments.Get(1)
' Dim AlignText As String = DesignerArgs.Arguments.Get(2)
For i = 2 To DesignerArgs.Arguments.Size - 1
Dim Btn As B4XView = DesignerArgs.GetViewFromArgs(i)
Dim W As Double = Btn.Width
Dim H As Double = Btn.Height
Dim OuterRadius As Double = Min(H,W) / 2
Dim InnerRadius As Double = OuterRadius * InnerRadiusFactor
Dim Path(Points * 4) As Double
Dim ThetaInc As Double = cPI / Points
Dim Theta As Double = IIf(Points Mod 2 = 0,ThetaInc , -cPI / 2)
Dim X,Y As Double
For j = 0 To Points * 2 - 1
' Dim AndgleRad As Double = j * DeltaAngleRad
If j Mod 2 <> 0 Then
X = W / 2 + InnerRadius * Cos(Theta)
Y = H / 2 + InnerRadius * Sin(Theta)
Else
X = W / 2 + OuterRadius * Cos(Theta)
Y = H / 2 + OuterRadius * Sin(Theta)
End If
Path(j * 2) = X
Path(j * 2 + 1) = Y
Theta = Theta + ThetaInc
Next
Dim Poly As JavaObject
Poly.InitializeNewInstance("javafx.scene.shape.Polygon",Array(Path))
Btn.As(JavaObject).RunMethod("setShape",Array(Poly))
Btn.As(JavaObject).RunMethod("setPickOnBounds",Array(False))
Dim TA As String = Btn.As(Button).Alignment
Btn.As(JavaObject).RunMethod("setAlignment",Array(TA))
Dim Pos As Int = TA.IndexOf("_")
If Pos > -1 Then TA = TA.SubString(Pos+1)
Btn.As(JavaObject).RunMethod("setTextAlignment",Array(TA))
Next
End If
End Sub