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

class Shape in Tinman.Terrain.Shapes

Abstract base class for implementation of the IShape interface.

abstract class Shape extends ShapeBase
  base of ShapeVertices

Configuration

Config

The configurator object for this type.

public static property Config { get }
type IConfigurator<IShape>
value [not-null] The configurator object.

ToConfig

Returns the configuration value that describes this object.

public abstract method ToConfig ()
type ConfigValue
returns [not-null] The configuration value.
inherited ShapeBase.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.
inherited ShapeBase.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.
inherited ShapeBase.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.
inherited ShapeBase.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 override property Georef { get }
type CoordinateSystem
value [not-null] The coordinate system.
overrides ShapeBase.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.
inherited ShapeBase.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.
inherited ShapeBase.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.
inherited ShapeBase.TriangleCount

Type

The shape type.

public virtual property Type { get }
type ShapeType
value The shape type.
inherited ShapeBase.Type

VertexCount

Returns the number of shape vertices.

public virtual property VertexCount { get }
type int32
value [>=0] The number of shape vertices.
inherited ShapeBase.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 / Constructors

Box

Creates a new box shape.

public static method Box (Box2D bounds, CoordinateSystem georef = null)
type IShape
params bounds The bounds of the box.
  georef The coordinate system or null.
returns [not-null] The shape.

CheckerBoard

Creates a new checkerboard shape.

public static method CheckerBoard (float64 size = 1, Vec2D offset = default(Vec2D), CoordinateSystem georef = null)
type IShape
params size [>0] Edge length of checkerboard tiles.
  offset Tile corner offset. Defaults to Zero.
  georef The coordinate system or null.
returns [not-null] The shape.

Circle

Creates a new circle shape.

public static method Circle (Vec2D center, float64 radius = 0, CoordinateSystem georef = null)
type IShape
params center Coordinates of center of circle.
  radius [>=0] Radius of circle. Set to 0 to create a point shape.
  georef The coordinate system or null.
returns [not-null] The shape.

File

Reads the given shape file.

[Pure]
public static method File (Path file, ShapeFormat format = null, ReadShapeFlags flags = ReadShapeFlags.Geo)
type IShape
params file [not-null] The file path.
  format The file format or null if not known. Defaults to null.
  flags The reader flags to use. Defaults to Geo.
returns [not-null] The shape.

Reads the given shape file.

[Pure]
public static method File (IFileData file, ShapeFormat format = null, ReadShapeFlags flags = ReadShapeFlags.Geo)
type IShape
params file [not-null] The file data.
  format The file format or null if not known. Defaults to null.
  flags The reader flags to use. Defaults to Geo.
returns [not-null] The shape.

Geometry

Returns a ShapeBuilder object for creating geometry based shapes (i.e. vertices, edges and/or triangles).

public static method Geometry (int32 vertices = 0, int32 edges = 0, int32 triangles = 0)
type ShapeBuilder
params vertices [>=0] Initial vertex capacity. Defaults to 0.
  edges [>=0] Initial edge capacity. Defaults to 0.
  triangles [>=0] Initial triangle capacity. Defaults to 0.
returns [not-null] The shape builder object.

See also:

IShape

RasterizerFactory

Returns a IShapeRasterizerFactory object that rasterizes distance values into a sample buffer.

public static method RasterizerFactory ()
type IShapeRasterizerFactory<DistanceBuffer>
returns [not-null] The shape rasterizer.

Remarks:

The distance value range (see ScanlineRange) of the target sample buffer is used to optimize the rasterization process.

See also:

DistanceBuffer

Returns a IShapeRasterizerFactory object that rasterizes distance values into the given sample buffer.

public static method RasterizerFactory (IColorRamp colorRamp)
type IShapeRasterizerFactory<ColorBuffer>
params colorRamp [not-null] The color ramp to use.
returns [not-null] The shape rasterizer.

Remarks:

Distance values are converted into color values by performing a color ramp lookup.

See also:

IColorRamp
ColorBuffer

Returns a IShapeRasterizerFactory object that rasterizes distance values into the given sample buffer.

public static method RasterizerFactory (HeightmapSample sample, float64 falloff)
type IShapeRasterizerFactory<HeightmapRegion>
params sample The uniform heightmap sample data to use.
  falloff [>=0] Distance falloff value (see remarks).
returns [not-null] The shape rasterizer.

Remarks:

Distance values are converted into heightmap samples by computing weighted vertex sums. Distance values of zero or less will produce heightmap samples that have full coverage; values greater than or equal to falloff will produce void heightmap samples (i.e. zero coverage). Values in-between create have a smooth transition.


Returns a IShapeRasterizerFactory object that rasterizes distance values into the given sample buffer.

public static method RasterizerFactory (HeightmapSamples samples, float64 falloff)
type IShapeRasterizerFactory<HeightmapRegion>
params samples [not-null] Heightmap sample data for each vertex of the input shape (see VertexAt).
  falloff [>=0] Distance falloff value (see remarks).
returns [not-null] The shape rasterizer.

Remarks:

Distance values are converted into heightmap samples by computing weighted vertex sums. Distance values of zero or less will produce heightmap samples that have full coverage; values greater than or equal to falloff will produce void heightmap samples (i.e. zero coverage). Values in-between create have a smooth transition.

Per-vertex heightmap sample values can only be used for explicit shapes that have an edge parity of zero. See IShape for details.

ReadCSH

Reads a shape from a CSH file.

public static method ReadCSH (string path)
type IShape
params path [not-null] The file path.
returns [not-null] The resulting shape.

Reads a shape from a CSH file.

public static method ReadCSH (Path path)
type IShape
params path [not-null] The file path.
returns [not-null] The resulting shape.

Reads a shape from a CSH file.

public static method ReadCSH ([Owner] IDataStream stream)
type IShape
params stream [not-null] The input data stream.
returns [not-null] The resulting shape.

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.
inherited ShapeBase.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.
inherited ShapeBase.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.
inherited ShapeBase.CheckIntersection

Compile

Compiles this shape into the most compact form.

public virtual method Compile ()
type IShape
returns [not-null] The resulting shape.
inherited ShapeBase.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 override 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).
overrides 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.
inherited ShapeBase.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.
inherited ShapeBase.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.
inherited ShapeBase.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.
inherited ShapeBase.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.
inherited ShapeBase.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.
inherited ShapeBase.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.
inherited ShapeBase.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.
inherited ShapeBase.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.
inherited ShapeBase.Offset

Serialize

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

public override method Serialize (ISerializer data)
params data [not-null] The serial data stream.
overrides 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.
inherited ShapeBase.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.
inherited ShapeBase.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.
inherited ShapeBase.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).
inherited ShapeBase.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.
inherited ShapeBase.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.
inherited ShapeBase.VertexAt

Remarks:

All vertices have a shape distance of zero.

See also:

IShapeInfo.VertexCount

Protected / Constructors

Shape

Creates a new instance of Shape.

protected constructor Shape (ISerialTypeInfo serialId, CoordinateSystem georef = null)
params serialId [not-null] The serial type ID.
  georef Georef object or null.