TINMAN 3D / REALTIME TERRAIN
Software Development Kit - User Manual

class ShapeBase in Tinman.Terrain.Shapes

Abstract base class for IShape implementations.

abstract class ShapeBase implements IShape
  extends SerializableBase
  base of CompositeShapeOne
  CompositeShapeTwo
  Shape
  ShapeGroup

Configuration

ToConfig

Returns the configuration value that describes this object.

public abstract method ToConfig ()
type ConfigValue
returns [not-null] The configuration value.
implements IConfigurable.ToConfig

Remarks:

All configurable objects need to implement this interface. For simple types, it is preferable to delegate to ToValue.

The returned value may be of type Invalid, which means that this object in its current state cannot be described with the configuration API.

Before returning the resulting configuration value, Cache must be called on it, passing this IConfigurable object as parameter.

Public / Attributes

Bounds

Returns the axis-aligned bounding box of this shape.

public abstract property Bounds { get }
type Box2D
value The axis-aligned bounding box.
implements IShape.Bounds

Remarks:

The bounding box is defined as the smallest possible rectangle that contains all points which have a shape distance of zero or less.

EdgeCount

Returns the number of shape edges.

public virtual property EdgeCount { get }
type int32
value [>=0] The number of shape edges.
implements IShapeInfo.EdgeCount

See also:

IShape.EdgeAt

EdgeParity

Defines how the vertex winding of polygon contours is interpreted (outer rings vs. holes).

public virtual property EdgeParity { get }
type int32
value The parity value: +/- 1 for polygons, 0 for non-polygon shapes.
implements IShapeInfo.EdgeParity

Remarks:

A polygon contour is classified as an outer ring or a hole according to the sign of its signed area:

outer := sign(Area(contour)) == Parity
hole  := sign(Area(contour)) != Parity
The default value is -1 (i.e. clockwise orientation in a standard Cartesian coordinate system).

Georef

The coordinate system of the shape.

public virtual property Georef { get }
type CoordinateSystem
value [not-null] The coordinate system.
implements IShapeInfo.Georef

Remarks:

The default coordinate system is a local one (see IsLocal) in metres (see Metre).

IsCubemap

Is this a cubemap shape?

public virtual property IsCubemap { get }
type bool
value true if this is a cubemap shape, false if not.
implements IShapeInfo.IsCubemap

Remarks:

Cubemap shapes have a geographic coordinate system (see IsGeographic) and six separate sub-shapes, one for each cubemap face (see Cubemap)).

See also:

IShape.TransformCubemap
IShape.Face

IsGeometry

Does this shape consist of plain geometry only?

public virtual property IsGeometry { get }
type bool
value true if this shape has plain geometry only, false if not.
implements IShape.IsGeometry

Remarks:

Shapes with plain geometry can be rebuilt via Geometry.

SerialType

Returns the serial type of this object.

public property SerialType { get }
type ISerialTypeInfo
value [not-null] The serial type.
inherited SerializableBase.SerialType

SerialVersion

Returns the serial data version.

public virtual property SerialVersion { get }
type int32
value [>=1] The serial data version tag.
inherited SerializableBase.SerialVersion

Remarks:

An ISerializable implementation is required to support all versions up to the one returned by SerialVersion.

See also:

ISerializable.Serialize
ISerializable.Deserialize

TriangleCount

Returns the number of shape triangles.

public virtual property TriangleCount { get }
type int32
value [>=0] The number of shape triangles.
implements IShapeInfo.TriangleCount

Type

The shape type.

public virtual property Type { get }
type ShapeType
value The shape type.
implements IShapeInfo.Type

VertexCount

Returns the number of shape vertices.

public virtual property VertexCount { get }
type int32
value [>=0] The number of shape vertices.
implements IShapeInfo.VertexCount

Remarks:

When the vertex count is zero, the shape is defined implicitly. If the vertex count is greater than zero, the shape is explicitly defined by its vertices.

See also:

IShape.VertexAt

Public / Methods

Absolute

Returns a shape that returns the absolute distance value (i.e. the outline of this shape).

public virtual method Absolute ()
type IShape
returns [not-null] The resulting shape.
implements IShape.Absolute

Accept

Accepts the given IShapeVisitor object.

public virtual method Accept (IShapeVisitor visitor, object userData = null)
params visitor [not-null] The shape visitor object.
  userData Optional user data. Defaults to null.
implements IShape.Accept

CheckIntersection

Checks the intersection between this shape and the given bounds.

[ThreadSafe]
public virtual method CheckIntersection (Box2D box, float64 offset = 0)
type int32
params box The box bounds.
  offset Optional distance offset to apply to this shape for the intersection test. Defaults to 0.
returns -1 if this shape and box are disjoint.
0 if this shape and box intersect.
1 if box fully contains this shape.
2 if this shape fully contains box.
implements IShape.CheckIntersection

Compile

Compiles this shape into the most compact form.

public virtual method Compile ()
type IShape
returns [not-null] The resulting shape.
implements IShape.Compile

Remarks:

Calling this method will not modify the geometry of a shape, only the object model structure.

Deserialize

Initializes the state of this object from the given data stream.

public virtual method Deserialize (int32 serialVersion, ISerializer data)
type ISerializable
params serialVersion [>=1] The serial data version.
  data [not-null] The serial data stream.
returns [not-null] The deserialized object. This will typically be this, but in some circumstances, another instance may be returned (e.g. singletons).
inherited SerializableBase.Deserialize

Remarks:

The Deserialize method will be called immediately after the object has been instantiated via its default constructor.

The provided serialVersion number is guaranteed to be equal to or less than the SerialVersion returned by this object (i.e. ISerializable object must provide backwards compatibility).

See also:

ISerializable.Serialize
ISerializable.SerialVersion

DistanceTo

Computes the smallest distance from the given point to the shape.

[ThreadSafe]
public abstract method DistanceTo (float64 x, float64 y, float64 maximum = Maths.MaxDouble)
type float64
params x X-coordinate of point.
  y Y-coordinate of point.
  maximum The maximum relevant distance. This is a hint for the implementing class which can be exploited in order to optimize performance.
returns Smallest distance to the shape.
implements IShape.DistanceTo

Remarks:

If the point lies outside of the shape, the returned distance will be greater than zero. If the point is inside of the shape, the returned distance will be negative. The returned distance will be zero if the point exactly lies on the shape boundary.


Computes the smallest distance from the given point to the shape, additionally returning the corresponding nearest feature point on the shape.

[ThreadSafe]
public virtual method DistanceTo (float64 x, float64 y, out Vec3I vertices, out Vec3D weights, float64 maximum = Maths.MaxDouble)
type float64
params x X-coordinate of point.
  y Y-coordinate of point.
  vertices Shape vertex indices (see VertexAt) that describe the location of the nearest shape feature.
  weights Location of the nearest shape feature, given as relative weights (i.e. the weight sum is 1) of vertices. The weights are sorted in descending order, i.e. X always holds the greatest weight and Z always holds the smallest weight.
  maximum The maximum relevant distance. This is a hint for the implementing class which can be exploited in order to optimize performance.
returns Smallest distance to the shape. All results greater than maximum are considered irrelevant. Implementing methods are free to discard those results.
implements IShape.DistanceTo

Remarks:

If the point lies outside of the shape, the returned distance will be greater than zero. If the point is inside of the shape, the returned distance will be negative. The returned distance will be zero if the point exactly lies on the shape boundary.

EdgeAt

Returns a shape edge.

public virtual method EdgeAt (int32 index)
type Vec2I
params index [0..EdgeCount-1] The edge index.
returns The shape edge.
implements IShape.EdgeAt

Remarks:

Each edge connects two vertices (see VertexAt), in the direction from X to Y.

All points that lie on an edge have a shape distance of zero.

See also:

IShapeInfo.EdgeCount

EdgeWalk

Returns the neighbouring edges for walking along a polygon contour.

public virtual method EdgeWalk (int32 index)
type Vec2I
params index [0..EdgeCount-1] The edge index.
returns Index of neighbouring edge (see IShape):
X points to previous edge, Y points to next edge. The component will be -1 if there is no neighbouring edge (i.e. the contour is not closed). Both components will be -1 for non-polygon shapes.
implements IShape.EdgeWalk

Face

Returns the shape on the given cubemap face.

public virtual method Face (CubemapFace face)
type IShape
params face The cubemap face.
returns The shape or null if there are no shape parts on the given cubemap face.
implements IShape.Face

Remarks:

Passing NegZ to an ordinary shape will return this. Cubemap shapes (see TransformCubemap) will return an aggregated shape for each cubemap face, or null.

Cubemap shapes are used by IHeightmapShape and IPixelPyramidShape objects.

Invert

Inverts this shape.

public virtual method Invert ()
type IShape
returns [not-null] The inverted shape.
implements IShape.Invert

Maximum

Returns a composite shape that returns the maximum distance value (i.e. intersection of this shape and the given one).

public virtual method Maximum (IShape shape)
type IShape
params shape [not-null] The other shape.
returns [not-null] The resulting shape.
implements IShape.Maximum

Minimum

Returns a composite shape that returns the minimum distance value (i.e. the union of this shape and the given one).

public virtual method Minimum (IShape shape)
type IShape
params shape [not-null] The other shape.
returns [not-null] The resulting shape.
implements IShape.Minimum

Offset

Applies a distance offset to this shape.

public virtual method Offset (float64 offset)
type IShape
params offset The distance offset to apply.
returns [not-null] The resulting shape.
implements IShape.Offset

Serialize

Serializes the current state of this object to the given data stream.

public virtual method Serialize (ISerializer data)
params data [not-null] The serial data stream.
inherited SerializableBase.Serialize

See also:

ISerializable.Deserialize
ISerializable.SerialVersion

TransformCoordinates

Transforms this shape using the given 2D homogeneous matrix.

public virtual method TransformCoordinates (Mat3D matrix)
type IShape
params matrix The 2D homogeneous matrix.
returns [not-null] The transforming shape.
implements IShape.TransformCoordinates

Remarks:

Shape coordinates of this shape are multiplied with matrix using Mul2 (w = 1) in order to produce shape coordinates of the returned shape.

TransformCoordinateSystem

Transforms this shape to the given coordinate system.

public virtual method TransformCoordinateSystem (CoordinateSystem target, float64 accuracy = 0)
type IShape
params target [not-null] The target coordinate system.
  accuracy [>=0] Optional accuracy to use for subdivision of edges. Given as a maximum error in the target coordinate system (see target. HorizontalUnit). Set to 0 to disable edge subdivision. Defaults to 0.
returns [not-null] The transforming shape.
implements IShape.TransformCoordinateSystem

Remarks:

Transformation cannot be performed from resp. to a local coordinate system (see IsLocal). A transformation between two local coordinate system is possible, but only a conversion regarding unit of measure (see LocalUnit) and coordinate system flags (see CoordinateSystemFlags) is done.

Implicit shapes cannot be transformed (see IShape).

TransformCubemap

Transforms this shape to a geographic cubemap coordinate system.

public virtual method TransformCubemap (float64 accuracy = 0)
type IShape
params accuracy [>=0] Optional accuracy to use for subdivision of edges. Given as a maximum error in the target coordinate system (see Face). Set to 0 to disable edge subdivision. Defaults to 0.
returns [not-null] The transforming cubemap shape.
implements IShape.TransformCubemap

See also:

CoordinateSystem.ToCubemapFace

TransformGeometry

Transforms this shape to the given coordinate system.

public virtual method TransformGeometry (CoordinateSystemTransform transform, float64 accuracy = 0)
type IShape
params transform [not-null] The coordinate system transformation to apply.
  accuracy [>=0] Optional accuracy to use for subdivision of edges. Given as a maximum error in the target coordinate system (see transform. Target. HorizontalUnit). Set to 0 to disable edge subdivision. Defaults to 0.
returns The transformed shape or null if the transformed shape is empty or if the transformation is not possible (see remarks).
implements IShape.TransformGeometry

Remarks:

Transformation cannot be performed from resp. to a local coordinate system (see IsLocal). A transformation between two local coordinate system is possible, but only a conversion regarding unit of measure (see LocalUnit) and coordinate system flags (see CoordinateSystemFlags) is done.

Implicit shapes cannot be transformed (see IShape).

TriangleAt

Returns a shape triangle.

public virtual method TriangleAt (int32 index)
type Vec3I
params index [0..TriangleCount-1] The triangle index.
returns The shape triangle.
implements IShape.TriangleAt

Remarks:

Each triangle connects three vertices (see IShape), in the order X, Y, Z, where X <Y and X < Z. The vertex winding is chosen so that the signed triangle area is positive (see Area).

VertexAt

Returns a shape vertex.

public virtual method VertexAt (int32 index)
type Vec2D
params index [0..VertexCount-1] The vertex index.
returns The shape vertex.
implements IShape.VertexAt

Remarks:

All vertices have a shape distance of zero.

See also:

IShapeInfo.VertexCount

Protected / Constructors

ShapeBase

Creates a new instance of Shape.

protected constructor ShapeBase (ISerialTypeInfo serialId)
params serialId [not-null] The serial type ID.