Crate euclid [] [src]

A collection of strongly typed math tools for computer graphics with an inclination towards 2d graphics and layout.

All types are generic over the scalar type of their component (f32, i32, etc.), and tagged with a generic Unit parameter which is useful to prevent mixing values from different spaces. For example it should not be legal to translate a screen-space position by a world-space vector and this can be expressed using the generic Unit parameter.

This unit system is not mandatory and all Typed* structures have an alias with the default unit: UnknownUnit. for example Point2D<T> is equivalent to TypedPoint2D<T, UnknownUnit>. Client code typically creates a set of aliases for each type and doesn't need to deal with the specifics of typed units further. For example:

All euclid types are marked #[repr(C)] in order to facilitate exposing them to foreign function interfaces (provided the underlying scalar type is also repr(C)).

use euclid::*;
pub struct ScreenSpace;
pub type ScreenPoint = TypedPoint2D<f32, ScreenSpace>;
pub type ScreenSize = TypedSize2D<f32, ScreenSpace>;
pub struct WorldSpace;
pub type WorldPoint = TypedPoint3D<f32, WorldSpace>;
pub type ProjectionMatrix = TypedMatrix4D<f32, WorldSpace, ScreenSpace>;
// etc...

Components are accessed in their scalar form by default for convenience, and most types additionally implement strongly typed accessors which return typed Length wrappers. For example:

let p = WorldPoint::new(0.0, 1.0, 1.0);
// p.x is an f32.
println!("p.x = {:?} ", p.x);
// p.x is a Length<f32, WorldSpace>.
println!("p.x_typed() = {:?} ", p.x_typed());
// Length::get returns the scalar value (f32).
assert_eq!(p.x, p.x_typed().get());

Modules

approxeq
num

A one-dimensional length, tagged with its units.

Structs

Deg

Unit for angles in degrees.

Length

A one-dimensional distance, with value represented by T and unit of measurement Unit.

Rad

Unit for angles in radians.

ScaleFactor

A scaling factor between two different units of measurement.

TypedPoint2D

A 2d Point tagged with a unit.

TypedPoint3D

A 3d Point tagged with a unit.

TypedRect

A 2d Rectangle optionally tagged with a unit.

TypedSideOffsets2D
TypedSize2D
TypedTransform2D

A 2d transform stored as a 2 by 3 matrix in row-major order in memory.

TypedTransform3D

A 3d transform stored as a 4 by 4 matrix in row-major order in memory.

TypedVector2D

A 2d Vector tagged with a unit.

TypedVector3D

A 3d Vector tagged with a unit.

UnknownUnit

The default unit.

Traits

Trig

Trait for basic trigonometry functions, so they can be used on generic numeric types

Functions

point2
point3
rect

Shorthand for TypedRect::new(TypedPoint2D::new(x, y), TypedSize2D::new(w, h)).

size2

Shorthand for TypedSize2D::new(w, h).

vec2

Convenience constructor.

vec3

Convenience constructor.

Type Definitions

Degrees

A value in Degrees.

Matrix2D [
Deprecated
]

Temporary alias to facilitate the transition to the new naming scheme

Matrix4D [
Deprecated
]

Temporary alias to facilitate the transition to the new naming scheme

Point2D

Default 2d point type with no unit.

Point3D

Default 3d point type with no unit.

Radians

A value in radians.

Rect

The default rectangle type with no unit.

SideOffsets2D

The default side offset type with no unit.

Size2D

Default 2d size type with no unit.

Transform2D

The default 2d transform type with no units.

Transform3D

The default 4d transform type with no units.

TypedMatrix2D [
Deprecated
]

Temporary alias to facilitate the transition to the new naming scheme

TypedMatrix4D [
Deprecated
]

Temporary alias to facilitate the transition to the new naming scheme

Vector2D

Default 2d vector type with no unit.

Vector3D

Default 3d vector type with no unit.