Skip to content

ianmackenzie/elm-triangular-mesh

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

55 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

elm-triangular-mesh

This Elm package allows you to create and manipulate indexed triangular meshes. A mesh contains an array of vertices which contain the bulk of the mesh data; vertices can be of any type, so you can create meshes from 2D or 3D points or have complex vertices of your own custom type that include additional data such as colors, normal vectors, texture coordinates, unique IDs, etc.

Mesh faces are defined by triples of integer indices specifying which three vertices make up the face. This package has functionality for creating meshes in various ways, extracting faces as index triples or vertex triples, extracting edges as index pairs or vertex pairs, and combining multiple meshes.

For example, you might create a 2D mesh representing a single rectangle as:

import TriangularMesh exposing (TriangularMesh)
import Array

mesh : TriangularMesh ( Float, Float )
mesh =
    let
        vertices =
            Array.fromList
                [ ( 0, 0 )
                , ( 4, 0 )
                , ( 4, 3 )
                , ( 0, 3 )
                ]

        faceIndices =
            [ ( 0, 1, 2 )
            , ( 2, 3, 0 )
            ]
    in
    TriangularMesh.indexed vertices faceIndices

You could then do things like get the faces or edges of that mesh as tuples of vertices:

TriangularMesh.faceVertices mesh
--> [ ( ( 0, 0 ), ( 4, 0 ), ( 4, 3 ) )
--> , ( ( 4, 3 ), ( 0, 3 ), ( 0, 0 ) )
--> ]

TriangularMesh.edgeVertices mesh
--> [ ( ( 0, 0 ), ( 4, 0 ) )
--> , ( ( 0, 0 ), ( 4, 3 ) )
--> , ( ( 0, 0 ), ( 0, 3 ) )
--> , ( ( 4, 0 ), ( 4, 3 ) )
--> , ( ( 4, 3 ), ( 0, 3 ) )
--> ]

Documentation

Full API documentation is available.

Questions? Comments?

Please open a new issue if you run into a bug, if any documentation is missing/incorrect/confusing, or if there's a new feature that you would find useful. For general questions about using this package, try:

  • Sending me (@ianmackenzie) a message on the Elm Slack - even if you don't have any particular questions right now, just come say hello!
  • Posting to Elm Discourse
  • Posting to r/elm

You can also find me on Twitter (@ianemackenzie), where I occasionally post geometry-related stuff like demos or new package releases. Have fun, and don't be afraid to ask for help!

About

Generic indexed triangular mesh data structure for Elm

Topics

Resources

License

Code of conduct

Stars

Watchers

Forks

Languages