code: def ray_trace(self, origin, end_point, first_point=False, plot=False,
                    off_screen=False):
          
          points = vtk.vtkPoints()
          cell_ids = vtk.vtkIdList()
          code = self.obbTree.IntersectWithLine(np.array(origin),
                                                np.array(end_point),
                                                points, cell_ids)
  
          intersection_points = vtk_to_numpy(points.GetData())
          if first_point and intersection_points.shape[0] >= 1:
              intersection_points = intersection_points[0]
  
          intersection_cells = []
          if intersection_points.any():
              if first_point:
                  ncells = 1
              else:
                  ncells = cell_ids.GetNumberOfIds()
              for i in range(ncells):
                  intersection_cells.append(cell_ids.GetId(i))
          intersection_cells = np.array(intersection_cells)
  
          if plot:
              plotter = vtki.Plotter(off_screen=off_screen)
              plotter.add_mesh(self, label='Test Mesh')
              segment = np.array([origin, end_point])
              plotter.add_lines(segment, 'b', label='Ray Segment')
              plotter.add_mesh(intersection_points, 'r', point_size=10,
                               label='Intersection Points')
              plotter.add_legend()
              plotter.add_axes()
              plotter.show()
  
          return intersection_points, intersection_cells
docs: Performs a single ray trace calculation given a mesh and a line segment
          defined by an origin and end_point.
  
          Parameters
          ----------
          origin : np.ndarray or list
              Start of the line segment.
  
          end_point : np.ndarray or list
              End of the line segment.
  
          first_point : bool, optional
              Returns intersection of first point only.
  
          plot : bool, optional
              Plots ray trace results
  
          off_screen : bool, optional
              Plots off screen.  Used for unit testing.
  
          Returns
          -------
          intersection_points : np.ndarray
              Location of the intersection points.  Empty array if no
              intersections.
  
          intersection_cells : np.ndarray
              Indices of the intersection cells.  Empty array if no
              intersections.