def create_ruler_in(x1, y1, x2, y2,title="",tick_dis=10):
ruler = pv.plotting._vtk.vtkAxisActor2D()
ruler.GetPositionCoordinate().SetCoordinateSystemToDisplay()
ruler.GetPosition2Coordinate().SetCoordinateSystemToDisplay()
ruler.GetPositionCoordinate().SetReferenceCoordinate(None)
ruler.GetPositionCoordinate().SetValue(x1, y1)
ruler.GetPosition2Coordinate().SetValue(x2, y2)
distance = np.linalg.norm(np.asarray([x1, y1]) - np.asarray([x2, y2]))
ruler.SetRange(0, distance)
if title != "":
ruler.SetTitle(title)
label_color = pv.plotting.Color('red')
ruler.SetFontFactor(0.6)
ruler.GetTitleTextProperty().SetColor(label_color.float_rgb)
ruler.GetTitleTextProperty().SetFontSize(12)
ruler.SetTitlePosition(0.5)
ruler.UseFontSizeFromPropertyOn()
ruler.GetProperty().SetColor(*tick_color.int_rgb)
ruler.SetLabelVisibility(False)
ruler.SetTickVisibility(True)
plotter.add_actor(ruler, reset_camera=False, pickable=False)
The above is function to draw lines of a cross-hair on pyvista 3d using vtkAxisActor2D(). The ticks are only on one side of the ruler can we make it to both sides And can we dynamically give distance between ticks