ianmackenzie/elm-geometry-test/2.0.0

NOTE: the latest version is 2.0.1

Geometry.Random

Random generators for lots of different geometric types, intended for use in tests. 10 meters is (arbitrarily) used as the basic scale for generated values, so for example the point3d generator will generate points where each coordinate value is in the range -10 meters to +10 meters.

This is only to have values be roughly the same scale (which helps to ensure that random tests actually do trigger things like intersections between objects) but do not rely on geometry being strictly contained within the -10...+10 meter bounds. For example, the circle2d generator will create circles where the center point is within those bounds, and the radius is up to 10 meters, meaning that the circle may well extend to larger or smaller coordinate values.

Most of the higher-level generators in this module are built pretty directly from lower-level generators - for example the axis3d generator is implemented as:

axis3d : Generator (Axis3d Meters coordinates)
axis3d =
    Random.map2 Axis3d.through point3d direction3d

Scalars

parameterValue : Generator Float

Generate a parameter value between 0 and 1.

scale : Generator Float

Generate a value between -10 and +10 to use for scaling geometry. (Note that this includes 0.)

length : Generator Length

Generate a random length between -10 meters and +10 meters.

positiveLength : Generator Length

Generate a random length between 0 and 10 meters.

angle : Generator Angle

Generate a random angle between -360 and +360 degrees.

unitlessQuantity : Generator (Quantity Float Unitless)

Generate a random unitless quantity between -10 and +10.

unitlessInterval : Generator (Interval Float Unitless)

Generate a random unitless interval with endpoints between -10 and +10.

Primitives

direction2d : Generator (Direction2d coordinates)

Generate a random 2D direction.

direction3d : Generator (Direction3d coordinates)

Generate a random 3D direction.

vector2d : Generator (Vector2d Meters coordinates)

Generate a random 2D vector with components in the range -10 to +10 meters.

vector3d : Generator (Vector3d Meters coordinates)

Generate a random 3D vector with components in the range -10 to +10 meters.

point2d : Generator (Point2d Meters coordinates)

Generate a random 2D point with components in the range -10 to +10 meters.

point3d : Generator (Point3d Meters coordinates)

Generate a random 3D point with components in the range -10 to +10 meters.

Bounding boxes

boundingBox2d : Generator (BoundingBox2d Meters coordinates)
boundingBox3d : Generator (BoundingBox3d Meters coordinates)
vectorBoundingBox2d : Generator (VectorBoundingBox2d Meters coordinates)
vectorBoundingBox3d : Generator (VectorBoundingBox3d Meters coordinates)

Datums

axis2d : Generator (Axis2d Meters coordinates)
axis3d : Generator (Axis3d Meters coordinates)
plane3d : Generator (Plane3d Meters coordinates)
Generator
(SketchPlane3d
Meters
coordinates
{ defines : sketchCoordinates }
)
Generator
(Frame2d Meters coordinates { defines : localCoordinates })
Generator
(Frame3d Meters coordinates { defines : localCoordinates })

Geometry

lineSegment2d : Generator (LineSegment2d Meters coordinates)
lineSegment3d : Generator (LineSegment3d Meters coordinates)
triangle2d : Generator (Triangle2d Meters coordinates)
triangle3d : Generator (Triangle3d Meters coordinates)
rectangle2d : Generator (Rectangle2d Meters coordinates)
rectangle3d : Generator (Rectangle3d Meters coordinates)
polygon2d : Generator (Polygon2d Meters coordinates)

The polygon2d generator is a bit special. Since randomly generating vertices and then connecting them would almost always result in useless self-intersecting polygons, this instead generates polygons of a few different types that are non-self-intersecting by construction:

  • A donut-shaped polygon with a hole in the middle
  • An L-shaped polygon
  • A roughly square-shaped polygon
  • A few variations on square-ish polygons with one or two holes

All the polygons will be roughly centered on the origin.

block3d : Generator (Block3d Meters coordinates)

Arcs, circles, ellipses

arc2d : Generator (Arc2d Meters coordinates)
arc3d : Generator (Arc3d Meters coordinates)
circle2d : Generator (Circle2d Meters coordinates)
circle3d : Generator (Circle3d Meters coordinates)
ellipticalArc2d : Generator (EllipticalArc2d Meters coordinates)
ellipticalArc3d : Generator (EllipticalArc3d Meters coordinates)
ellipse2d : Generator (Ellipse2d Meters coordinates)

Spline curves

quadraticSpline2d : Generator (QuadraticSpline2d Meters coordinates)
quadraticSpline3d : Generator (QuadraticSpline3d Meters coordinates)
cubicSpline2d : Generator (CubicSpline2d Meters coordinates)
cubicSpline3d : Generator (CubicSpline3d Meters coordinates)
rationalQuadraticSpline2d : Generator (RationalQuadraticSpline2d Meters coordinates)
rationalQuadraticSpline3d : Generator (RationalQuadraticSpline3d Meters coordinates)
rationalCubicSpline2d : Generator (RationalCubicSpline2d Meters coordinates)
rationalCubicSpline3d : Generator (RationalCubicSpline3d Meters coordinates)
spline2d : Generator (Spline2d Meters coordinates)
spline3d : Generator (Spline3d Meters coordinates)

3D solids

sphere3d : Generator (Sphere3d Meters coordinates)
cylinder3d : Generator (Cylinder3d Meters coordinates)
cone3d : Generator (Cone3d Meters coordinates)
ellipsoid3d : Generator (Ellipsoid3d Meters coordinates)

Utilities

smallList : Generator a -> Generator (List a)

Generate a list of 0 to 32 elements, using the given generator for items.