I programmed a paintable canvas to do this. Didn’t have time to do an arrow. Here you go:
Paste this code into a paintable canvas repaint script and then setup the custom properties to match.
from java.awt import Color
from java.awt import BasicStroke
from java.awt.geom import Rectangle2D
import math
g = event.graphics
armAngle = event.source.armAngle
circleStartAngle = event.source.boundaryStartAngle
circleArcSize = event.source.boundaryArcSize
rotation = event.source.rotationAdjustment
clockwise = event.source.degreesDirectionCW
diameter = min([event.width,event.height])
dx = event.width - diameter
dy = event.height - diameter
area = Rectangle2D.Float(0+dx/2.,0+dy/2.,diameter,diameter)
if clockwise:
c1_startAngle = -(circleStartAngle + rotation)
c1_arcAngle = -(armAngle-circleStartAngle)
c2_startAngle = -circleStartAngle-(armAngle-circleStartAngle)-rotation
c2_arcAngle = -(circleArcSize-(armAngle-circleStartAngle))
theta = -circleStartAngle-(armAngle-circleStartAngle)-rotation
else:
c1_startAngle = circleStartAngle + rotation
c1_arcAngle = armAngle-circleStartAngle
c2_startAngle = circleStartAngle+armAngle-circleStartAngle + rotation
c2_arcAngle = circleArcSize-(armAngle-circleStartAngle)
theta = circleStartAngle+armAngle-circleStartAngle + rotation
# Draw Arcs
g.setColor(event.source.primaryColor)
g.fillArc(int(area.x), int(area.y), int(area.width), int(area.height), int(c1_startAngle), int(c1_arcAngle))
g.setColor(event.source.secondaryColor)
g.fillArc(int(area.x), int(area.y), int(area.width), int(area.height), int(c2_startAngle), int(c2_arcAngle))
# Draw Arm
centerX = event.width/2.
centerY = event.height/2.
x = centerX + diameter/2. * math.cos(-theta * math.pi / 180.0)
y = centerY + diameter/2. * math.sin(-theta * math.pi / 180.0)
g.setStroke(BasicStroke(diameter*0.01,BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER))
g.setColor(event.source.armColor)
g.drawLine(int(centerX),int(centerY), int(x), int(y))
Custom Properties:


