Class TextFacetDefinitionReader

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

Facet definition reader implementation that reads an extremely simple text format. The format simply consists of sequences of decimal numbers defining the vertices of each facet, with one facet defined per line. Facet vertices are defined by listing their x, y, and z components in that order. The format can be described as follows:

p1x p1y p1z p2x p2y p2z p3x p3y p3z ...

where the p1 elements contain the coordinates of the first facet vertex, p2 those of the second, and so on. At least 3 vertices are required for each facet but more can be specified as long as all x, y, z components are provided for each vertex. The facet normal is defined implicitly from the facet vertices using the right-hand rule (i.e. vertices are arranged counter-clockwise).

Delimiters

Vertex coordinate values may be separated by any character that is not a digit, alphabetic, '-' (minus), or '+' (plus). The character does not need to be consistent between (or even within) lines and does not need to be configured in the reader. This design provides configuration-free support for common formats such as CSV as well as other formats designed for human readability.

Comments

Comments are supported through use of the comment token property. Characters from the comment token through the end of the current line are discarded. Setting the comment token to null or the empty string disables comment parsing. The default comment token is "#"

Examples

The following examples demonstrate the definition of two facets, one with 3 vertices and one with 4 vertices, in different formats.

CSV

  0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0
  1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0
 

Whitespace and semicolons

  # line comment
  0 0 0; 1 0 0; 1 1 0 # 3 vertices
  1 0 0; 1 1 0; 1 1 1; 1 0 1 # 4 vertices
 
See Also:
  • Field Details

  • Constructor Details

    • TextFacetDefinitionReader

      Construct a new instance that reads characters from the argument and uses the default comment token value of "#".
      Parameters:
      reader - reader to read characters from
    • TextFacetDefinitionReader

      public TextFacetDefinitionReader(Reader reader, String commentToken)
      Construct a new instance with the given reader and comment token.
      Parameters:
      reader - reader to read characters from
      commentToken - comment token string; set to null to disable comment parsing
      Throws:
      IllegalArgumentException - if commentToken is non-null and contains whitespace
  • Method Details

    • getCommentToken

      Get the comment token string. If not null or empty, any characters from this token to the end of the current line are discarded during parsing.
      Returns:
      comment token string; may be null
    • setCommentToken

      public void setCommentToken(String commentToken)
      Set the comment token string. If not null or empty, any characters from this token to the end of the current line are discarded during parsing. Set to null or the empty string to disable comment parsing. Comment tokens may not contain whitespace.
      Parameters:
      commentToken - token to set
      Throws:
      IllegalArgumentException - if the argument is non-null and contains whitespace
    • 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