I’ve just released elm-geometry 1.0; it is effectively a new major version of the existing opensolid/geometry package, but I’m hoping that the new name more effectively conveys that the package is really intended to be a great general-purpose geometry library for Elm (not tied to any particular product/brand or framework). The new release also comes with several new features and improvements:
- Polygon convex hull computation (thanks @gampleman!)
- Polygon triangulation (useful for WebGL rendering):
- Improved curve evaluation/sampling functions:
pointsOnSpline =
cubicSpline |> CubicSpline3d.pointsAt (ParameterValue.steps 24)
(Note that it’s also possible to get nice evenly-spaced points if desired, it’s just a bit more computationally expensive.)
- Streamlined, partial-application-friendly constructors such as
Vectord3d.withLength 3 Direction3d.y
instead ofVector3d.with { length = 3, direction = Direction3d.y }
- A new and very convenient way to construct circular arcs:
cornerArc =
Arc2d.from startPoint endPoint (degrees 90)
- No more module prefixes;
import OpenSolid.Point3d as Point3d exposing (Point3d)
is now simplyimport Point3d exposing (Point3d)
And much more! Full release notes are here.
I’ve also updated and re-released opensolid/linear-algebra-interop as elm-geometry-linear-algebra-interop and opensolid/svg as elm-geometry-svg.
Any feedback, questions, comments are welcome either here, in Slack (#geometry or @ianmackenzie), or on GitHub. Many of the recent additions to elm-geometry (polygon triangulation and convex hull, arc length parameterization of curves, improved bounding box overlap/separation checking) were in response to requests from members of the Elm community, so if there’s something missing that’s preventing you from using the package, let me know!