DreamSeeker gif
Webclient gif
The line is built by adding a line-segment appearance to mob.overlays when you draw.
// m is a /matrix
m.Translate((width - 1)/2, (height - 1)/2)
m.Scale((1 + 2 * radius) / width, distance / height)
m.Translate(-radius, 0)
m.Turn(angle)
m.Translate(startPoint.x - (width + 1)/2, startPoint.y - (height + 1)/2)
temporaryObj.transform = m
return temporaryObj.appearance