# SBoundary PT¶

scene.spad line 3329 [edit on github]

PT: SPointCategory

SBoundary implements boundaries for use in scene graph This defines the outer extent of the scene, or of an element in the scene, or of some branch in the scene. The difference between this boundary and an `n`

-dimensional surface, such as IFS, is that boundary must always have a well defined inside and an outside. SBoundary does not necessarily follow the exact outer contours of the shape but just constructs a simple boundary shape where all points of the shape are guaranteed to be inside the boundary. Currently there are the following boundary forms: Simple types: “box”::Symbol which is a `n`

-dimensional axis-aligned rectangle. “ellipoid”::Symbol which is a `n`

-dimensional axis-aligned ellipse. Compound types: This is a combination of simple and other compound types such as union or intersection. “union”::Symbol represents union of supplied list “intersection”::Symbol represents intersection of supplied list Null types: “none” is used for a node which does not have a boundary in space, for example, when the boundary of a material node is requested. The uses of SBoundary are: 1) So we know how much to scale a given scene to fit in a given size. 2) So that we know where to terminate arrows going in out out of of the shape. 3) To detect if objects intersect (collision detect), or if one object is contained completely inside another.

- boxBoundary: (PT, PT) -> %
`boxBoundary(c1, c2)`

constructs a box boundary (`n`

-dimensional axis-aligned rectangle) with given parameters`c1:`

`PT`

holds minimum coordinates`c2:`

`PT`

holds maximum coordinates

- coerce: % -> OutputForm
`coerce(bd)`

outputs description of`bd`

as formatted text

- containsPoint?: (%, PT) -> Boolean
`containsPoint?(n, p)`

returns`true`

if the point is inside the boundary.`n`

is the boundary`p`

is the point

- ellipseBoundary: (PT, PT) -> %
`ellipseBoundary(c1, c2)`

constructs an ellipse boundary`n`

-dimensional axis-aligned ellipoid with given parameters`c1:`

`PT`

holds centre point`c2:`

`PT`

holds extent (radius for each coordinate)

- extendToPoint: (%, PT) -> %
`extendToPoint(n, p)`

creates a boundary that is the union of a boundary and a point.`n`

is the boundary`p`

is the point

- getCentre: % -> PT
`getCentre(n)`

returns centre coordinate of the boundary.`n:`

% is the boundary

- getMax: % -> PT
`getMax(n)`

returns maximum coordinate of the boundary.`n`

is the boundary

- getMin: % -> PT
`getMin(n)`

returns minimum coordinate of the boundary.`n`

is the boundary

- intersection: List % -> %
`intersection(x)`

constructs a compound boundary from the intersection of`x`

`x:`

List % is supplied list of boundaries to form intersection.

- isBox?: % -> Boolean
`isBox?(n)`

returns`true`

if this is a rectangular boundary.

- isEllipse?: % -> Boolean
`isEllipse?(n)`

returns`true`

if this is a ellipsoid boundary.

- isNull?: % -> Boolean
`isNull?(n)`

returns`true`

if this is a null boundary, that is no boundary

- lineIntersect: (%, PT) -> PT
`lineIntersect(n, p)`

returns the point where a line, from the centre of the boundary to the point`p`

, intersects with the boundary.`n:`

% is the boundary`p:`

`PT`

is the point at the end of the line (outside boundary)

- link: (%, %) -> List PT
`link(m, n)`

returns a line which is the shortest distance between the two boundaries. The line is represented by its two endpoints.`m:`

% is the first boundary to be linked`n:`

% is the second boundary to be linked

- nullBoundary: () -> %
`nullBoundary()`

constructs a null boundary, for example, when the boundary of a material node is requested.

- sunion: (%, %) -> %
`sunion(x, y)`

gives the union of two boundaries as a box, that is it gives a box that is external to both.`x:`

% is first boundary to be combined`y:`

% is second boundary to be combined

- union: List % -> %
`union(x)`

constructs a compound boundary from the union of`x`

`x:`

List % is supplied list of boundaries to form union