Interface TriangleMesh

All Superinterfaces:
Iterable<Triangle3d>

public interface TriangleMesh extends Iterable<Triangle3d>
Represents a mesh made of triangles. TriangleMesh is also an Iterable of triangles. Since this is an iterable, using iterating over it from multi threads at the same time is not safe, since the iterations conflict with each other. For multi-threaded access, be sure to call toTriangleCollection() or toPointCollection() and use those collections.
Since:
9.10.2
  • Method Details

    • createEmpty

      static TriangleMesh createEmpty()
      Returns a new instance of an empty TriangleMesh.
      Returns:
      the empty TriangleMesh
      Since:
      9.10.2
    • fromTriangles

      static TriangleMesh fromTriangles(Collection<? extends Triangle3d> triangles)
      Returns a new instance of a TriangleMesh given the triangles it contains.
      Parameters:
      triangles - the triangles of the new mesh
      Returns:
      the TriangleMesh
      Since:
      9.10.2
    • fromPolygons

      static TriangleMesh fromPolygons(Collection<? extends Polygon3d> polygons)
      Returns a new instance of a TriangleMesh given the polygons that form it. The polygons will be triangulated.
      Parameters:
      polygons - the polygons forming the mesh that will be triangulated
      Returns:
      the TriangleMesh
      Since:
      9.10.2
    • toTriangleCollection

      Collection<Triangle3d> toTriangleCollection()
      Returns a new collection containing the triangles in this TriangleMesh. If an iterable to the mesh's triangles is enough, use directly TriangleMesh as an Iterable.
      Returns:
      a new collection containing the triangles in this TriangleMesh
      Since:
      9.10.2
    • toPointCollection

      Collection<Vector3d> toPointCollection()
      Returns a new collection containing all the vertices of all the triangles in this TriangleMesh. If an iterable to the mesh's points is enough, use the faster getPoints().
      Returns:
      a new collection containing all the vertices of all the triangles in this TriangleMesh.
      Since:
      9.10.2
    • withTriangle

      TriangleMesh withTriangle(Triangle3d triangle)
      Returns a new TriangleMesh composed of this TriangleMesh and an additional triangle.
      Parameters:
      triangle - the triangle to add to the TriangleMesh
      Returns:
      the new TriangleMesh
      Since:
      9.10.2
    • withPolygon

      TriangleMesh withPolygon(Polygon3d polygon)
      Returns a new TriangleMesh composed of this TriangleMesh and an additional polygon.
      Parameters:
      polygon - the polygon to add to the TriangleMesh
      Returns:
      the new TriangleMesh
      Since:
      9.10.2
    • withTriangles

      TriangleMesh withTriangles(Collection<? extends Triangle3d> triangles)
      Returns a new TriangleMesh composed of this TriangleMesh and additional triangles.
      Parameters:
      triangles - the triangles to add to the TriangleMesh
      Returns:
      the new TriangleMesh
      Since:
      9.10.2
    • withPolygons

      TriangleMesh withPolygons(Collection<? extends Polygon3d> polygons)
      Returns a new TriangleMesh composed of this TriangleMesh and additional polygons.
      Parameters:
      polygons - the polygons to add to the TriangleMesh
      Returns:
      the new TriangleMesh
      Since:
      9.10.2
    • mergedWith

      TriangleMesh mergedWith(TriangleMesh other)
      Returns a new TriangleMesh composed of all the triangles of this TriangleMesh and another TriangleMesh.
      Parameters:
      other - the triangles to add to the TriangleMesh
      Returns:
      the new TriangleMesh
      Since:
      9.10.2
    • filter

      TriangleMesh filter(Predicate<Triangle3d> filter)
      Returns a new TriangleMesh composed of all the triangles of this TriangleMesh that satisfy the given Predicate.
      Parameters:
      filter - the given Predicate
      Returns:
      the new TriangleMesh
      Since:
      9.10.2
    • transform

      TriangleMesh transform(Function<Triangle3d,​Triangle3d> mapping)
      Returns a new TriangleMesh composed of all the triangles of this TriangleMesh transformed according to the given mapping function.
      Parameters:
      mapping - the given mapping function, describing how a Triangle3d is transformed
      Returns:
      the new TriangleMesh
      Since:
      9.10.2
    • transform

      TriangleMesh transform(Matrix4d transformation)
      Returns a new TriangleMesh composed of all the triangles of this TriangleMesh transformed by the given transformation matrix.
      Parameters:
      transformation - the given transformation matrix, describing how this TriangleMesh is transformed
      Returns:
      the new TriangleMesh
      Since:
      9.12.1
    • getBoundingBox

      Optional<AABB3d> getBoundingBox()
      Returns the axis aligned bounding box of the TriangleMesh.
      Returns:
      the bounding box if it exists
      Since:
      9.10.2
    • getPoints

      Iterable<Vector3d> getPoints()
      Returns an iterable of all the vertices of all the triangles in the TriangleMesh.
      Returns:
      an iterable of all the vertices in this TriangleMesh
      Since:
      9.10.2
    • intersects

      boolean intersects(TriangleMesh other)
      Returns true if this TriangleMesh intersects the given TriangleMesh.
      Parameters:
      other - the other TriangleMesh
      Returns:
      true if this TriangleMesh and the given TriangleMesh intersects, false otherwise
      Since:
      9.10.2
    • intersection

      TriangleMesh intersection(TriangleMesh other)
      Returns the intersection of this triangle mesh and the given triangle mesh.
      Parameters:
      other - the other mesh
      Returns:
      the intersection
      Since:
      9.12.3
    • union

      TriangleMesh union(TriangleMesh other)
      Returns the union of this triangle mesh and the given triangle mesh.
      Parameters:
      other - the other mesh
      Returns:
      the union
      Since:
      9.12.3
    • difference

      TriangleMesh difference(TriangleMesh other)
      Returns the difference of this triangle mesh and the given triangle mesh.
      Parameters:
      other - the other mesh
      Returns:
      the difference
      Since:
      9.12.3
    • encloses

      boolean encloses(Vector3d point)
      Returns true if the TriangleMesh is closed and the given point is inside this TriangleMesh.
      Parameters:
      point - the given point
      Returns:
      true if the point is inside the TriangleMesh
      Since:
      9.10.2
    • isInsideOut

      boolean isInsideOut()
      Returns true if the closed TriangleMesh is inside-out, meaning that the normals of the surface triangles point inwards instead of outwards. An inside-out mesh is produced when its triangles are oriented clockwise when looking from the outside, instead of being oriented counter-clockwise. When a clockwise mesh is joined to a counter-clockwise mesh, their volume is subtracted instead of added, and some of the mesh algorithms may return unintuitive or incorrect results. The result of this method is meaningful only for closed meshes that have self-consistent triangle orientation.
      Returns:
      true if the TriangleMesh surface is oriented inside-out
      Since:
      9.10.2
    • flipped

      TriangleMesh flipped()
      Returns a version of this TriangleMesh where all the triangles have flipped normals, with the effect of exchanging the external faces with the internal faces if the mesh is closed. This method can be used to retrieve a corrected version of an inside-out mesh resulting from a transformation that did not preserve the orientation of the triangles in the mesh.
      Returns:
      the flipped version of this TriangleMesh
      Since:
      9.10.2
    • getArea

      double getArea()
      Returns the total area of the triangles in this TriangleMesh.
      Returns:
      the total area of the triangles in this TriangleMesh
      Since:
      9.10.2
    • getVolume

      double getVolume()
      Returns the total volume enclosed by this TriangleMesh. This method will produce a meaningful result only if the TriangleMesh is closed and does not contain intersecting solids.
      Returns:
      the total volume enclosed by this TriangleMesh
      Since:
      9.10.2
    • shortestPathTo

      Optional<Segment3d> shortestPathTo(Vector3d point)
      Returns the shortest path from this TriangleMesh to a given point, if such path exists.
      Parameters:
      point - the point as Vector3d
      Returns:
      the shortest path connecting this TriangleMesh to the given point, if it exists
      Since:
      9.10.2
    • shortestPathTo

      Optional<Segment3d> shortestPathTo(TriangleMesh other)
      Returns the shortest path from this TriangleMesh to another, if such path exists.
      Parameters:
      other - the other TriangleMesh
      Returns:
      the shortest path connecting this TriangleMesh to the other, if it exists
      Since:
      9.10.2
    • shortestVerticalPathTo

      Optional<Segment3d> shortestVerticalPathTo(Vector3d point)
      Returns the shortest vertical path from this TriangleMesh to a point, if such path exists.
      Parameters:
      point - the point as Vector3d
      Returns:
      the shortest vertical path connecting this TriangleMesh to the point, if it exists
      Since:
      9.10.2
    • shortestVerticalPathTo

      Optional<Segment3d> shortestVerticalPathTo(TriangleMesh other)
      Returns the shortest vertical path from this TriangleMesh to another, if such path exists.
      Parameters:
      other - the other TriangleMesh
      Returns:
      the shortest vertical path connecting this TriangleMesh to the other, if it exists
      Since:
      9.10.2
    • shortestHorizontalPathTo

      Optional<Segment3d> shortestHorizontalPathTo(Vector3d point)
      Returns the shortest horizontal path from this TriangleMesh to a point, if such path exists.
      Parameters:
      point - the point as Vector3d
      Returns:
      the shortest horizontal path connecting this TriangleMesh to the point, if it exists
      Since:
      9.10.2
    • shortestHorizontalPathTo

      Optional<Segment3d> shortestHorizontalPathTo(TriangleMesh other)
      Returns the shortest horizontal path from this TriangleMesh to another, if such path exists.
      Parameters:
      other - the other TriangleMesh
      Returns:
      the shortest horizontal path connecting this TriangleMesh to the other, if it exists
      Since:
      9.10.2
    • shortest2dPathInXYPlaneProjectionTo

      Optional<Segment2d> shortest2dPathInXYPlaneProjectionTo(Vector3d point)
      Returns the shortest 2D path from the projection of this TriangleMesh to the projection of a point in the XY-plane, if such path exists.
      Parameters:
      point - the point as Vector3d
      Returns:
      the shortest 2D path between the projection of the TriangleMesh and the point, if it exists
      Since:
      9.10.2
    • shortest2dPathInXYPlaneProjectionTo

      Optional<Segment2d> shortest2dPathInXYPlaneProjectionTo(TriangleMesh other)
      Returns the shortest 2D path from the projection of this TriangleMesh to the projection of another TriangleMesh in the XY-plane, if such path exists.
      Parameters:
      other - the other TriangleMesh
      Returns:
      the shortest 2D path between the projections of the two TriangleMeshes, if it exists
      Since:
      9.10.2