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 java.lang.Object implements BSPTreeVisitor<Vector3D,RegionBSPTree3D.RegionNode3D>
BSP tree visitor that performs a linecast operation against the boundaries of the visited tree.
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from interface org.apache.commons.geometry.core.partitioning.bsp.BSPTreeVisitor
BSPTreeVisitor.ClosestFirstVisitor<P extends Point<P>,N extends BSPTree.Node<P,N>>, BSPTreeVisitor.FarthestFirstVisitor<P extends Point<P>,N extends BSPTree.Node<P,N>>, BSPTreeVisitor.Order, BSPTreeVisitor.Result, BSPTreeVisitor.TargetPointVisitor<P extends Point<P>,N extends BSPTree.Node<P,N>>
-
-
Field Summary
Fields Modifier and Type Field Description private boolean
firstOnly
If true, the visitor will stop visiting the tree once the first linecast point is determined.private LineConvexSubset3D
linecastSubset
The line subset to intersect with the boundaries of the BSP tree.private double
minAbscissa
The minimum abscissa found during the search.private java.util.List<LinecastPoint3D>
results
List of results from the linecast operation.
-
Constructor Summary
Constructors Constructor Description LinecastVisitor(LineConvexSubset3D linecastSubset, boolean firstOnly)
Create a new instance with the given intersecting line convex subset.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description 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.LinecastPoint3D
getFirstResult()
Get the firstLinecastPoint2D
resulting from the linecast operation.java.util.List<LinecastPoint3D>
getResults()
Get a list containing the results of the linecast operation.BSPTreeVisitor.Result
visit(RegionBSPTree3D.RegionNode3D node)
Visit a node in a BSP tree.BSPTreeVisitor.Order
visitOrder(RegionBSPTree3D.RegionNode3D internalNode)
Determine the visit order for the given internal node.
-
-
-
Field Detail
-
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 java.util.List<LinecastPoint3D> results
List of results from the linecast operation.
-
-
Constructor Detail
-
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 boundaryfirstOnly
- if true, the visitor will stop visiting the tree once the first linecast point is determined
-
-
Method Detail
-
getFirstResult
public LinecastPoint3D getFirstResult()
Get the firstLinecastPoint2D
resulting from the linecast operation.- Returns:
- the first linecast result point
-
getResults
public java.util.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 beforeBSPTreeVisitor.visit(BSPTree.Node)
is called. Returning null orBSPTreeVisitor.Order.NONE
from this method skips the subtree rooted at the given node. This method is not called on leaf nodes.- Specified by:
visitOrder
in interfaceBSPTreeVisitor<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
public BSPTreeVisitor.Result visit(RegionBSPTree3D.RegionNode3D node)
Visit a node in a BSP tree. This method is called for both internal nodes and leaf nodes.- Specified by:
visit
in interfaceBSPTreeVisitor<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 pointnode
- 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
-
-