Class BinaryStlFacetDefinitionReader

java.lang.Object
org.apache.commons.geometry.io.euclidean.threed.stl.BinaryStlFacetDefinitionReader
All Implemented Interfaces:
AutoCloseable, FacetDefinitionReader

public class BinaryStlFacetDefinitionReader extends Object implements FacetDefinitionReader
Class used to read the binary form of the STL file format.
See Also:
  • Field Details

    • in

      private final InputStream in
      Input stream to read from.
    • triangleBuffer

      private final ByteBuffer triangleBuffer
      Buffer used to read triangle definitions.
    • triangleTotal

      private long triangleTotal
      Total number of triangles declared to be present in the input.
    • trianglesRead

      private long trianglesRead
      Number of triangles read so far.
    • hasReadHeader

      private boolean hasReadHeader
      True when the header content has been read.
  • Constructor Details

    • BinaryStlFacetDefinitionReader

      public BinaryStlFacetDefinitionReader(InputStream in)
      Construct a new instance that reads from the given input stream.
      Parameters:
      in - input stream to read from.
  • Method Details

    • getHeader

      public ByteBuffer getHeader()
      Get a read-only buffer containing the 80 bytes of the STL header. The header does not include the 4-byte value indicating the total number of triangles in the STL file.
      Returns:
      the STL header content
      Throws:
      UncheckedIOException - if an I/O error occurs
    • getHeaderAsString

      public String getHeaderAsString()
      Return the header content as a string decoded using the UTF-8 charset. Control characters (such as '\0') are not included in the result.
      Returns:
      the header content decoded as a UTF-8 string
      Throws:
      UncheckedIOException - if an I/O error occurs
    • getHeaderAsString

      public String getHeaderAsString(Charset charset)
      Return the header content as a string decoded using the given charset. Control characters (such as '\0') are not included in the result.
      Parameters:
      charset - charset to decode the header with
      Returns:
      the header content decoded as a string
      Throws:
      UncheckedIOException - if an I/O error occurs
    • getNumTriangles

      public long getNumTriangles()
      Get the total number of triangles (i.e. facets) declared to be present in the input.
      Returns:
      total number of triangle in the input
      Throws:
      UncheckedIOException - if an I/O error occurs
    • readFacet

      public BinaryStlFacetDefinition readFacet()
      Return the next facet definition from the input source or null if no more facets are available.
      Specified by:
      readFacet in interface FacetDefinitionReader
      Returns:
      the next facet definition or null if no more facets are available
    • close

      public void close()
      Close this instance and release all associated resources.
      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface FacetDefinitionReader
    • beginRead

      private void beginRead()
      Read the file header content and triangle count.
      Throws:
      IllegalStateException - is a parse error occurs
      UncheckedIOException - if an I/O error occurs
    • readFacetInternal

      private BinaryStlFacetDefinition readFacetInternal()
      Internal method to read a single facet from the input.
      Returns:
      facet read from the input
    • fill

      private int fill(ByteBuffer buf)
      Fill the buffer with data from the input stream. The buffer is then flipped and made ready for reading.
      Parameters:
      buf - buffer to fill
      Returns:
      number of bytes read
      Throws:
      UncheckedIOException - if an I/O error occurs
    • readVector

      private Vector3D readVector(ByteBuffer buf)
      Read a vector from the given byte buffer.
      Parameters:
      buf - buffer to read from
      Returns:
      vector containing the next 3 double values from the given buffer
    • dataNotAvailable

      private static IllegalStateException dataNotAvailable(String name)
      Return an exception stating that data is not available for the file component with the given name.
      Parameters:
      name - name of the file component missing data
      Returns:
      exception instance