## Range3d Class

Axis aligned range in 3D.

• member `low` contains minimum coordinate of range box
• member `high` contains maximum coordinate of range box
• The range is considered null (empty) if any low member is larger than its high counterpart.

### Methods

Name Description
constructor(lowX: numberRangeBase._EXTREME_POSITIVE, lowY: numberRangeBase._EXTREME_POSITIVE, lowZ: numberRangeBase._EXTREME_POSITIVE, highX: numberRangeBase._EXTREME_NEGATIVE, highY: numberRangeBase._EXTREME_NEGATIVE, highZ: numberRangeBase._EXTREME_NEGATIVE):
clone(result?: this): this Return a copy
cloneTranslated(shift: Readonly<WritableXYAndZ>, result?: this): this Return a copy, translated by adding `shift` components in all directions.
containsPoint(point: Point3d): boolean Test if a point is within the range.
containsPointXY(point: Point3d): boolean Test if the x,y coordinates of a point are within the range.
containsRange(other: Range3d): boolean Test of other range is within this range
containsXY(x: number, y: number): boolean Test if a point given as x,y is within the range (ignoring z of range).
containsXYZ(x: number, y: number, z: number): boolean Test if a point given as x,y,z is within the range.
corners(result?: Point3d[]): Point3d[] Return an array with the 8 corners on order wth "x varies fastest, then y, then z"
diagonal(result?: Vector3d): Return the diagonal vector.
diagonalFractionToPoint(fraction: number, result?: Point3d): Return the diagonal vector.
distanceToPoint(point: Readonly<WritableXYAndZ>): number Return 0 if the point is within the range, otherwise the distance to the closest face or corner
distanceToRange(other: Range3d): number Returns 0 if the ranges have any overlap, otherwise the shortest absolute distance from one to the other.
ensureMinLengths(min: number.001): void Ensure that the length of each dimension of this Range3d is at least a minimum size.
expandInPlace(delta: number): void Move all limits by a fixed amount.
extend(...point: Point3d[]): void Extend (modify in place) so that the range is large enough to include the supplied points.
extendArray(points: Point3d[] | GrowableXYZArray, transform?: Transform): void Extend a range around an array of points (optionally transformed)
extendInterpolated(xyz0: Point3d, fraction: number, xyz1: Point3d): void Expand this range by a point interpolated between given points.
extendInverseTransformedArray(points: Point3d[] | GrowableXYZArray, transform: Transform): void Extend a range around an array of points (optionally transformed)
extendInverseTransformedXYZ(transform: Transform, x: number, y: number, z: number): boolean Multiply the point x,y,z by the inverse of the transform and use the coordinate to extend this range.
extendPoint(point: Point3d, transform?: Transform): void Expand this range to include a point.
extendRange(other: Readonly<WritableLowAndHighXYZ>): void Expand this range to include a range.
extendSingleAxis(a: number, axisIndex: AxisIndex): void Expand one component of this range
extendTransformTransformedXYZ(transformA: Transform, transformB: Transform, x: number, y: number, z: number): void Extend the range by the two transforms applied to xyz
extendTransformedPoint(transform: Transform, point: Point3d): void Expand this range to include a transformed point.
extendTransformedXYZ(transform: Transform, x: number, y: number, z: number): void Multiply the point x,y,z by transform and use the coordinate to extend this range.
extendTransformedXYZW(transform: Transform, x: number, y: number, z: number, w: number): void Multiply the point x,y,z,w by transform and use the coordinate to extend this range.
extendWhenLarger(other: Readonly<WritableLowAndHighXYZ>, extrapolationFactor: number): void In each direction look at the difference between this range limit and that of interiorRange.
extendXOnly(x: number): void Expand this range by distances a in only the x direction.
extendXYZ(x: number, y: number, z: number): void Expand this range by distances a (possibly signed) in all directions
extendXYZW(x: number, y: number, z: number, w: number): void Expand this range by distances a (weighted and possibly signed) in all directions
extendYOnly(y: number): void Expand this range by distances a in only the x direction.
extendZOnly(z: number): void Expand this range by distances a in only the x direction.
fractionToPoint(fractionX: number, fractionY: number, fractionZ: number0, result?: Point3d): Return a point given by fractional positions on the XYZ axes.
freeze(): Readonly<Range3d> Freeze this instance (and its members) so it is read-only
getLocalToWorldTransform(result?: Transform): Create a local to world transform from this range.
getNpcToWorldRangeTransform(result?: Transform): Creates an NPC to world transformation to go from 000...111 to the globally aligned cube with diagonally
intersect(other: Range3d, result?: Range3d): Return the intersection of ranges.
intersectsRange(other: Range3d): boolean Test if there is any intersection with other range
intersectsRangeXY(other: Range3d): boolean Test if there is any intersection with other range, ignoring z.
isAlmostEqual(other: Readonly<Range3d>, tol?: number): boolean Returns true if this and other have equal low and high parts, or both are null ranges.
localToWorld(xyz: Readonly<WritableXYAndZ>, result?: Point3d): undefined | Point3d Return a point given by fractional positions on the XYZ axes.
localToWorldArrayInPlace(points: Point3d[]): boolean Replace fractional coordinates by world coordinates.
localXYZToWorld(fractionX: number, fractionY: number, fractionZ: number, result?: Point3d): undefined | Point3d Return a point given by fractional positions on the XYZ axes.
maxAbs(): number Return the largest absolute value among any coordinates in the box corners.
maxLength(): number Return the largest of the x,y, z lengths of the range.
rectangleXY(zFraction: number0.0, upwardNormal: booleantrue, addClosure: booleantrue): undefined | Point3d[] Return a rectangle that is the cross section as viewed from above (z direction) and at zFraction
scaleAboutCenterInPlace(scaleFactor: number): void Move low and high points by scaleFactor around the center point.
setFrom(other: Range3d): void Copy low and high values from other.
setFromJSON(json?: Range3dProps): void Set this range (in place) from json such as
setNull(): void Set this transform to values that indicate it has no geometric contents.
setXYZ(x: number, y: number, z: number): void Set the range to be a single point supplied as x,y,z values
toFloat64Array(): Float64Array Flatten the low and high coordinates of this into an array of 6 doubles
toJSON(): Return a JSON object `{low: ...
union(other: Range3d, result?: Range3d): Return the union of ranges.
worldToLocal(point: Point3d, result?: Point3d): undefined | Point3d Return fractional coordinates of point within the range.
worldToLocalArrayInPlace(point: Point3d[]): boolean Return fractional coordinates of point within the range.
xLength(): number Return the length of the box in the x direction
yLength(): number Return the length of the box in the y direction
zLength(): number Return the length of the box in the z direction
create(...point: Point3d[]): Static Return a range large enough to include the supplied points.
createArray<T extends Range3d>(points: Point3d[], result?: T): T Static Create a range around an array of points.
createFrom<T extends Range3d>(other: Range3d, result?: T): T Static Return a new Range3d copied from a range or derived type
createFromVariantData(): Static Create a range from freely structured MultiLineStringDataVariant.
createInverseTransformedArray<T extends Range3d>(transform: Transform, points: Point3d[] | GrowableXYZArray): T Static Create a Range3d enclosing the points after inverse transform.
createNull<T extends Range3d>(result?: T): T Static Return a range initialized to have no content.
createRange2d<T extends Range3d>(range: Range2d, z: number0, result?: T): T Static Creates a 3d range from a 2d range's low and high members, setting the corresponding z values to the value given.
createTransformed<T extends Range3d>(transform: Transform, ...point: Point3d[]): T Static Create a Range3d enclosing the transformed points.
createTransformedArray<T extends Range3d>(transform: Transform, points: Point3d[] | GrowableXYZArray): T Static Create a Range3d enclosing the transformed points.
createXYZ<T extends Range3d>(x: number, y: number, z: number, result?: T): T Static Create a single point range
createXYZXYZ<T extends Range3d>(xA: number, yA: number, zA: number, xB: number, yB: number, zB: number, result?: T): T Static Create a box with 2 pairs of xyz candidates.
createXYZXYZOrCorrectToNull<T extends Range3d>(xA: number, yA: number, zA: number, xB: number, yB: number, zB: number, result?: T): T Static Create a box with 2 pairs of xyz candidates.
faceCornerIndices(index: number): number[] Static Return an array with indices of the corners of a face
fromArrayBuffer<T extends Range3d>(buffer: ArrayBuffer): T Static Construct a Range3d from an un-typed array.
fromFloat64Array<T extends Range3d>(f64: Float64Array): T Static Construct a Range3d from an array of double-precision values
fromJSON<T extends Range3d>(json?: Range3dProps): T Static Use `setFromJSON` to parse `json` into a new Range3d instance.
isNull(data: Readonly<WritableLowAndHighXYZ>): boolean Static Test if data has high<low for any of x,y,z, condition.
toFloat64Array(val: Readonly<WritableLowAndHighXYZ>): Float64Array Static Flatten the low and high coordinates of any json object with low.x ..

### Inherited methods

Name Inherited from Description
coordinateToRangeAbsoluteDistance(x: number, low: number, high: number): number Static RangeBase Given a coordinate and pair of range limits, return the smallest distance to the range.
isExtremePoint2d(xy: Point2d): boolean Static RangeBase Return true if either of x,y is outside the range `[_EXTREME_NEGATIVE, _EXTREME_POSITIVE]'
isExtremePoint3d(xyz: Point3d): boolean Static RangeBase Return true if any x or y or z is outside the range `[_EXTREME_NEGATIVE, _EXTREME_POSITIVE]'
isExtremeValue(x: number): boolean Static RangeBase Return true if x is outside the range `[_EXTREME_NEGATIVE, _EXTREME_POSITIVE]'
multiplyIfPositive(q: number, factor: number, defaultValue: number0.0): number Static RangeBase If a > 0, return (extrapolationFactor * a); otherwise return defaultValue
npcScaleFactor(low: number, high: number): number Protected Static RangeBase Return 0 if high<= low, otherwise `1/(high-low)` for use in fractionalizing
rangeToRangeAbsoluteDistance(lowA: number, highA: number, lowB: number, highB: number): number Static RangeBase Return the min absolute distance from any point of `[lowA,highA]' to any point of `[lowB,highB]'.

### Properties

Name Type Description
center Accessor ReadOnly Return the midpoint of the diagonal.
high Point3d High point coordinates
isAlmostZeroX Accessor ReadOnly boolean Returns true if the x direction size is nearly zero
isAlmostZeroY Accessor ReadOnly boolean Returns true if the y direction size is nearly zero
isAlmostZeroZ Accessor ReadOnly boolean Returns true if the z direction size is nearly zero
isNull Accessor ReadOnly boolean Test if the box has high<low for any of x,y,z, condition.
isSinglePoint Accessor ReadOnly boolean Test of the range contains a single point.
low Point3d Low point coordinates
xHigh Accessor ReadOnly number Return the high x coordinate
xLow Accessor ReadOnly number Return the low x coordinate
yHigh Accessor ReadOnly number Return the high y coordinate
yLow Accessor ReadOnly number Return the low y coordinate
zHigh Accessor ReadOnly number Return the high z coordinate
zLow Accessor ReadOnly number Return the low z coordinate

### Inherited properties

Name Type Inherited from Description
_EXTREME_NEGATIVE Protected Static Readonly number RangeBase Number considered to be impossibly negative for a coordinate in a range.
_EXTREME_POSITIVE Protected Static Readonly number RangeBase Number considered impossibly large possibly for a coordinate in a range.

### Defined in

Last Updated: 13 June, 2024