Class LinePath.Builder
java.lang.Object
org.apache.commons.geometry.euclidean.twod.path.LinePath.Builder
- Enclosing class:
LinePath
Class used to build line paths.
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate List
<LineConvexSubset> Line subsets appended to the path.private Vector2D
The current vertex at the end of the path.private org.apache.commons.numbers.core.Precision.DoubleEquivalence
The precision context used when performing comparisons involving the current end vertex.private org.apache.commons.numbers.core.Precision.DoubleEquivalence
Precision context used when creating line segments directly from vertices.private List
<LineConvexSubset> Line subsets prepended to the path.private Vector2D
The current vertex at the start of the path. -
Constructor Summary
ConstructorsModifierConstructorDescriptionprivate
Builder
(org.apache.commons.numbers.core.Precision.DoubleEquivalence precision) Construct a new instance configured with the given precision context. -
Method Summary
Modifier and TypeMethodDescriptionappend
(LineConvexSubset subset) Append a line subset to the end of the path.Add a vertex to the end of this path.private void
appendInternal
(LineConvexSubset subset) Append the given, validated line subsets to the path.appendVertices
(Collection<? extends Vector2D> vertices) Convenience method for appending a collection of vertices to the path in a single method call.appendVertices
(Vector2D... vertices) Convenience method for appending multiple vertices to the path at once.build()
Build aLinePath
instance from the configured path.build
(boolean close) Build aLinePath
instance from the configured path.close()
Close the current path and build a newLinePath
instance.private void
Close the path by adding an end point equivalent to the path start point.private org.apache.commons.numbers.core.Precision.DoubleEquivalence
Get the precision context used when adding raw vertices to the path.getEnd()
Get the line subset at the end of the path or null if it does not exist.private LineConvexSubset
getFirst
(List<? extends LineConvexSubset> list) Get the first element in the list or null if the list is null or empty.private LineConvexSubset
getLast
(List<? extends LineConvexSubset> list) Get the last element in the list or null if the list is null or empty.getStart()
Get the line subset at the start of the path or null if it does not exist.prepend
(LineConvexSubset subset) Prepend a line subset to the beginning of the path.Add a vertex to the front of this path.private void
prependInternal
(LineConvexSubset subset) Prepend the given, validated line subset to the path.prependVertices
(Collection<Vector2D> vertices) Convenience method for prepending a collection of vertices to the path in a single method call.prependVertices
(Vector2D... vertices) Convenience method for prepending multiple vertices to the path in a single method call.setPrecision
(org.apache.commons.numbers.core.Precision.DoubleEquivalence builderPrecision) Set the precision context.private void
validateConnected
(LineConvexSubset previous, LineConvexSubset next) Validate that the given line subsets are connected, meaning that the end vertex ofprevious
is equivalent to the start vertex ofnext
.
-
Field Details
-
appended
Line subsets appended to the path. -
prepended
Line subsets prepended to the path. -
precision
private org.apache.commons.numbers.core.Precision.DoubleEquivalence precisionPrecision context used when creating line segments directly from vertices. -
startVertex
The current vertex at the start of the path. -
endVertex
The current vertex at the end of the path. -
endVertexPrecision
private org.apache.commons.numbers.core.Precision.DoubleEquivalence endVertexPrecisionThe precision context used when performing comparisons involving the current end vertex.
-
-
Constructor Details
-
Builder
private Builder(org.apache.commons.numbers.core.Precision.DoubleEquivalence precision) Construct a new instance configured with the given precision context. The precision context is used when building line segments from vertices and may be omitted if raw vertices are not used.- Parameters:
precision
- precision context to use when creating line segments from vertices
-
-
Method Details
-
setPrecision
public LinePath.Builder setPrecision(org.apache.commons.numbers.core.Precision.DoubleEquivalence builderPrecision) Set the precision context. This context is used only when creating line segments from appended or prepended vertices. It is not used when adding existingLineConvexSubset
instances since those contain their own precision contexts.- Parameters:
builderPrecision
- precision context to use when creating line segments from vertices- Returns:
- this instance
-
getStart
Get the line subset at the start of the path or null if it does not exist.- Returns:
- the line subset at the start of the path
-
getEnd
Get the line subset at the end of the path or null if it does not exist.- Returns:
- the line subset at the end of the path
-
append
Append a line subset to the end of the path.- Parameters:
subset
- line subset to append to the path- Returns:
- the current builder instance
- Throws:
IllegalStateException
- if the path contains a previous element and the end vertex of the previous element is not equivalent to the start vertex of the argument
-
append
Add a vertex to the end of this path. If the path already has an end vertex, then a line segment is added between the previous end vertex and this vertex, using the configured precision context.- Parameters:
vertex
- the vertex to add- Returns:
- this instance
- See Also:
-
appendVertices
Convenience method for appending a collection of vertices to the path in a single method call.- Parameters:
vertices
- the vertices to append- Returns:
- this instance
- See Also:
-
appendVertices
Convenience method for appending multiple vertices to the path at once.- Parameters:
vertices
- the vertices to append- Returns:
- this instance
- See Also:
-
prepend
Prepend a line subset to the beginning of the path.- Parameters:
subset
- line subset to prepend to the path- Returns:
- the current builder instance
- Throws:
IllegalStateException
- if the path contains a start element and the end vertex of the argument is not equivalent to the start vertex of the start element.
-
prepend
Add a vertex to the front of this path. If the path already has a start vertex, then a line segment is added between this vertex and the previous start vertex, using the configured precision context.- Parameters:
vertex
- the vertex to add- Returns:
- this instance
- See Also:
-
prependVertices
Convenience method for prepending a collection of vertices to the path in a single method call. The vertices are logically prepended as a single group, meaning that the first vertex in the given collection appears as the first vertex in the path after this method call. Internally, this means that the vertices are actually passed to theprepend(Vector2D)
method in reverse order.- Parameters:
vertices
- the vertices to prepend- Returns:
- this instance
- See Also:
-
prependVertices
Convenience method for prepending multiple vertices to the path in a single method call. The vertices are logically prepended as a single group, meaning that the first vertex in the given collection appears as the first vertex in the path after this method call. Internally, this means that the vertices are actually passed to theprepend(Vector2D)
method in reverse order.- Parameters:
vertices
- the vertices to prepend- Returns:
- this instance
- See Also:
-
close
Close the current path and build a newLinePath
instance. This method is equivalent tobuilder.build(true)
.- Returns:
- new closed path instance
- Throws:
IllegalStateException
- if the builder was given only a single unique vertex
-
build
Build aLinePath
instance from the configured path. This method is equivalent tobuilder.build(false)
.- Returns:
- new path instance
- Throws:
IllegalStateException
- if the builder was given only a single unique vertex
-
build
Build aLinePath
instance from the configured path.- Parameters:
close
- if true, the path will be closed by adding an end point equivalent to the start point- Returns:
- new path instance
- Throws:
IllegalStateException
- if the builder was given only a single unique vertex
-
closePath
private void closePath()Close the path by adding an end point equivalent to the path start point.- Throws:
IllegalStateException
- if the path cannot be closed
-
validateConnected
Validate that the given line subsets are connected, meaning that the end vertex ofprevious
is equivalent to the start vertex ofnext
. The line subsets are considered valid if either line subset is null.- Parameters:
previous
- previous line subsetnext
- next line subset- Throws:
IllegalStateException
- if previous and next are not null and the end vertex of previous is not equivalent the start vertex of next
-
getAddVertexPrecision
private org.apache.commons.numbers.core.Precision.DoubleEquivalence getAddVertexPrecision()Get the precision context used when adding raw vertices to the path. An exception is thrown if no precision has been specified.- Returns:
- the precision context used when creating working with raw vertices
- Throws:
IllegalStateException
- if no precision context is configured
-
appendInternal
Append the given, validated line subsets to the path.- Parameters:
subset
- validated line subset to append
-
prependInternal
Prepend the given, validated line subset to the path.- Parameters:
subset
- validated line subset to prepend
-
getFirst
Get the first element in the list or null if the list is null or empty.- Parameters:
list
- the list to return the first item from- Returns:
- the first item from the given list or null if it does not exist
-
getLast
Get the last element in the list or null if the list is null or empty.- Parameters:
list
- the list to return the last item from- Returns:
- the last item from the given list or null if it does not exist
-