Class RegionBSPTree3D.LinecastVisitor

java.lang.Object
org.apache.commons.geometry.euclidean.threed.RegionBSPTree3D.LinecastVisitor
All Implemented Interfaces:
BSPTreeVisitor<Vector3D, RegionBSPTree3D.RegionNode3D>
Enclosing class:
RegionBSPTree3D

private static final class RegionBSPTree3D.LinecastVisitor extends Object implements BSPTreeVisitor<Vector3D, RegionBSPTree3D.RegionNode3D>
BSP tree visitor that performs a linecast operation against the boundaries of the visited tree.
  • Field Details

    • linecastSubset

      private final LineConvexSubset3D linecastSubset
      The line subset to intersect with the boundaries of the BSP tree.
    • firstOnly

      private final boolean firstOnly
      If true, the visitor will stop visiting the tree once the first linecast point is determined.
    • minAbscissa

      private double minAbscissa
      The minimum abscissa found during the search.
    • results

      private final List<LinecastPoint3D> results
      List of results from the linecast operation.
  • Constructor Details

    • LinecastVisitor

      LinecastVisitor(LineConvexSubset3D linecastSubset, boolean firstOnly)
      Create a new instance with the given intersecting line convex subset.
      Parameters:
      linecastSubset - line subset to intersect with the BSP tree region boundary
      firstOnly - if true, the visitor will stop visiting the tree once the first linecast point is determined
  • Method Details

    • getFirstResult

      public LinecastPoint3D getFirstResult()
      Get the first LinecastPoint2D resulting from the linecast operation.
      Returns:
      the first linecast result point
    • getResults

      public List<LinecastPoint3D> getResults()
      Get a list containing the results of the linecast operation. The list is sorted and filtered.
      Returns:
      list of sorted and filtered results from the linecast operation
    • visitOrder

      public BSPTreeVisitor.Order visitOrder(RegionBSPTree3D.RegionNode3D internalNode)
      Determine the visit order for the given internal node. This is called for each internal node before BSPTreeVisitor.visit(BSPTree.Node) is called. Returning null or BSPTreeVisitor.Order.NONEfrom this method skips the subtree rooted at the given node. This method is not called on leaf nodes.
      Specified by:
      visitOrder in interface BSPTreeVisitor<Vector3D, RegionBSPTree3D.RegionNode3D>
      Parameters:
      internalNode - the internal node to determine the visit order for
      Returns:
      the order that the subtree rooted at the given node should be visited
    • visit

      Visit a node in a BSP tree. This method is called for both internal nodes and leaf nodes.
      Specified by:
      visit in interface BSPTreeVisitor<Vector3D, RegionBSPTree3D.RegionNode3D>
      Parameters:
      node - the node being visited
      Returns:
      the result of the visit operation
    • computeLinecastPoint

      private LinecastPoint3D computeLinecastPoint(Vector3D pt, RegionBSPTree3D.RegionNode3D node)
      Compute the linecast point for the given intersection point and tree node, returning null if the point does not actually lie on the region boundary.
      Parameters:
      pt - intersection point
      node - node containing the cut that the linecast line intersected with
      Returns:
      a new linecast point instance or null if the intersection point does not lie on the region boundary