Class PVolumesI
public final class PVolumesI
extends java.lang.Object
Functions over volumes.
These functions operate using the concepts of minimum-x, maximum-x, minimum-y, maximum-y, minimum-z, maximum-z, edges. It is up to individual applications to assign meaning to these edges such as "left" for minimum-x, "top" for minimum-y, or "far" for minimum-z.
-
Method Summary
Modifier and Type Method Description static <S, T> PVolumeI<T>cast(PVolumeI<S> volume)Brand a given volume as belonging to a different coordinate space.static <S> PVolumeI<S>containing(PVolumeI<S> a, PVolumeI<S> b)Construct a volume that will contain bothaandb.static <S> booleancontains(PVolumeI<S> a, PVolumeI<S> b)Determine whether or not one volume contains another.static <S> booleancontainsPoint(PVolumeI<S> a, int x, int y, int z)Determine whether or not a volume contains a given point.static <S> booleancouldFitInside(PVolumeI<S> a, PVolumeI<S> b)Determine whether or not one volume could fit inside another.static <S> PVolumeI<S>create(int x, int y, int z, int size_x, int size_y, int size_z)Create a volume of size (size_x,size_y,size_z) placing the minimum corner at(x, y, z).static <S> PVolumeI<S>moveAbsolute(PVolumeI<S> volume, int x, int y, int z)Move the given volume to(x, y, z).static <S> PVolumeI<S>moveRelative(PVolumeI<S> volume, int x, int y, int z)Move the given volume by(x, y, z).static <S> PVolumeI<S>moveRelativeClamped(PVolumeI<S> container, PVolumeI<S> volume, int x, int y, int z)Move the given volume by(x, y, z), without allowingvolumeto leavecontainer.static <S> PVolumeI<S>moveRelativeClampedX(PVolumeI<S> container, PVolumeI<S> volume, int x)Move the given volume byx, without allowingvolumeto leavecontainer.static <S> PVolumeI<S>moveRelativeClampedY(PVolumeI<S> container, PVolumeI<S> volume, int y)Move the given volume byy, without allowingvolumeto leavecontainer.static <S> PVolumeI<S>moveRelativeClampedZ(PVolumeI<S> container, PVolumeI<S> volume, int z)Move the given volume byz, without allowingvolumeto leavecontainer.static <S> PVolumeI<S>moveToOrigin(PVolumeI<S> volume)Move the given volume to(0, 0, 0).static <S> booleanoverlaps(PVolumeI<S> a, PVolumeI<S> b)Determine whether or not two volumes overlap.static <S> java.lang.Stringshow(PVolumeI<S> volume)static <S> java.lang.StringshowToBuilder(PVolumeI<S> volume, java.lang.StringBuilder sb)static <S> PVolumeSizeI<S>size(PVolumeI<S> volume)static <S> PVolumeXYZSplitI<S,PVolumeI<S>>splitAtXYZ(PVolumeI<S> v, int x, int y, int z)Split the given volume at point(x, y, z).
-
Method Details
-
create
Create a volume of size (size_x,size_y,size_z) placing the minimum corner at(x, y, z).- Type Parameters:
S- The coordinate space of the volume- Parameters:
x- The X value of the minimum cornery- The Y value of the minimum cornerz- The Z value of the minimum cornersize_x- The size of the volume on the X axissize_y- The size of the volume on the Y axissize_z- The size of the volume on the Z axis- Returns:
- A volume
-
contains
Determine whether or not one volume contains another.
Containing is reflexive:
contains(a, a) == true.Containing is transitive:
contains(a, b) → contains(b, c) → contains(a, c).Containing is not necessarily symmetric.
- Type Parameters:
S- The coordinate space of the volumes- Parameters:
a- Volume Ab- Volume B- Returns:
trueiffacontainsb
-
moveRelative
Move the given volume by(x, y, z).- Type Parameters:
S- The coordinate space of the volume- Parameters:
volume- The volumex- The amount to move on the X axisy- The amount to move on the Y axisz- The amount to move on the Z axis- Returns:
- A moved volume
-
moveRelativeClampedX
public static <S> PVolumeI<S> moveRelativeClampedX(PVolumeI<S> container, PVolumeI<S> volume, int x)Move the given volume byx, without allowingvolumeto leavecontainer.- Type Parameters:
S- The coordinate space of the volume- Parameters:
container- The container volumevolume- The volumex- The amount to move on the X axis- Returns:
- A moved volume
- Since:
- 3.0.0
-
moveRelativeClampedY
public static <S> PVolumeI<S> moveRelativeClampedY(PVolumeI<S> container, PVolumeI<S> volume, int y)Move the given volume byy, without allowingvolumeto leavecontainer.- Type Parameters:
S- The coordinate space of the volume- Parameters:
container- The container volumevolume- The volumey- The amount to move on the Y axis- Returns:
- A moved volume
- Since:
- 3.0.0
-
moveRelativeClampedZ
public static <S> PVolumeI<S> moveRelativeClampedZ(PVolumeI<S> container, PVolumeI<S> volume, int z)Move the given volume byz, without allowingvolumeto leavecontainer.- Type Parameters:
S- The coordinate space of the volume- Parameters:
container- The container volumevolume- The volumez- The amount to move on the Z axis- Returns:
- A moved volume
- Since:
- 3.0.0
-
moveRelativeClamped
public static <S> PVolumeI<S> moveRelativeClamped(PVolumeI<S> container, PVolumeI<S> volume, int x, int y, int z)Move the given volume by(x, y, z), without allowingvolumeto leavecontainer.- Type Parameters:
S- The coordinate space of the volume- Parameters:
container- The container volumevolume- The volumex- The amount to move on the X axisy- The amount to move on the Y axisz- The amount to move on the Z axis- Returns:
- A moved volume
- Since:
- 3.0.0
-
moveAbsolute
Move the given volume to(x, y, z).- Type Parameters:
S- The coordinate space of the volume- Parameters:
volume- The volumex- The position to which to move on the X axisy- The position to which to move on the Y axisz- The position to which to move on the Z axis- Returns:
- A moved volume
-
moveToOrigin
Move the given volume to(0, 0, 0).- Type Parameters:
S- The coordinate space of the volume- Parameters:
volume- The volume- Returns:
- A moved volume
-
cast
Brand a given volume as belonging to a different coordinate space. Mixing up coordinate spaces is a common source of difficult-to-locate bugs. Use at your own risk.- Type Parameters:
S- The starting coordinate spaceT- The resulting coordinate space- Parameters:
volume- A volume- Returns:
volume
-
overlaps
Determine whether or not two volumes overlap.
Overlapping is reflexive:
overlaps(a, a) == true.Overlapping is symmetric:
overlaps(a, b) == overlaps(b, a).Overlapping is not necessarily transitive.
- Type Parameters:
S- The coordinate space of the volumes- Parameters:
a- A volumeb- A volume- Returns:
trueiffaoverlapsb
-
couldFitInside
Determine whether or not one volume could fit inside another.
Fitting is reflexive:
couldFitInside(a, a) == true.Fitting is transitive:
couldFitInside(a, b) → couldFitInside(b, c) → couldFitInside(a, c).Fitting is not necessarily symmetric.
- Type Parameters:
S- The coordinate space of the volumes- Parameters:
a- A volumeb- A volume- Returns:
trueiffacould fit insideb
-
containing
Construct a volume that will contain bothaandb.- Type Parameters:
S- The coordinate space of the volumes- Parameters:
a- A volumeb- A volume- Returns:
- A volume containing
aandb
-
containsPoint
Determine whether or not a volume contains a given point.
- Type Parameters:
S- The coordinate space of the volume- Parameters:
a- A volumex- The X coordinate of the pointy- The Y coordinate of the pointz- The Z coordinate of the point- Returns:
trueiffacontains(x, y, z)
-
splitAtXYZ
Split the given volume at point
(x, y, z).- Type Parameters:
S- The coordinate space of the volume- Parameters:
v- A volumex- The X coordinate of the pointy- The Y coordinate of the pointz- The Z coordinate of the point- Returns:
trueiffacontains(x, y, z)
-
show
- Type Parameters:
S- The coordinate space of the volume- Parameters:
volume- The volume- Returns:
- A terse string describing the position and size of the volume
-
size
- Type Parameters:
S- The coordinate space of the volume- Parameters:
volume- The volume- Returns:
- The size of the volume
-
showToBuilder
- Type Parameters:
S- The coordinate space of the volume- Parameters:
volume- The volumesb- A string builder- Returns:
- A terse string describing the position and size of the volume
-