View Javadoc

    1   /*
    2    * Licensed to the Apache Software Foundation (ASF) under one or more
    3    * contributor license agreements.  See the NOTICE file distributed with
    4    * this work for additional information regarding copyright ownership.
    5    * The ASF licenses this file to You under the Apache License, Version 2.0
    6    * (the "License"); you may not use this file except in compliance with
    7    * the License.  You may obtain a copy of the License at
    8    *
    9    *      http://www.apache.org/licenses/LICENSE-2.0
    10   *
    11   * Unless required by applicable law or agreed to in writing, software
    12   * distributed under the License is distributed on an "AS IS" BASIS,
    13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    14   * See the License for the specific language governing permissions and
    15   * limitations under the License.
    16   */
    17  package org.apache.commons.geometry.io.euclidean.threed.stl;
    18
    19  import java.nio.charset.Charset;
    20
    21  import org.apache.commons.geometry.io.core.GeometryFormat;
    22  import org.apache.commons.geometry.io.core.input.GeometryInput;
    23  import org.apache.commons.geometry.io.core.internal.GeometryIOUtils;
    24  import org.apache.commons.geometry.io.euclidean.threed.AbstractBoundaryReadHandler3D;
    25  import org.apache.commons.geometry.io.euclidean.threed.FacetDefinitionReader;
    26  import org.apache.commons.geometry.io.euclidean.threed.GeometryFormat3D;
    27
    28  /** {@link org.apache.commons.geometry.io.euclidean.threed.BoundaryReadHandler3D BoundaryReadHandler3D}
    29   * implementation for reading STL data. Text input is read using the UTF-8 charset by default.
    30   */
    31  public class StlBoundaryReadHandler3D extends AbstractBoundaryReadHandler3D {
    32
    33      /** Default charset for reading text input. */
    34      private Charset defaultCharset = StlConstants.DEFAULT_CHARSET;
    35
    36      /** {@inheritDoc} */
    37      @Override
    38      public GeometryFormat getFormat() {
    39          return GeometryFormat3D.STL;
    40      }
    41
    42      /** Get the input default charset, used if text input does not
    43       * specify a charset.
    44       * @return text input default charset
    45       */
    46      public Charset getDefaultCharset() {
    47          return defaultCharset;
    48      }
    49
    50      /** Set the input default charset, used if text input does not
    51       * specify a charset.
    52       * @param charset text input default charset
    53       */
    54      public void setDefaultCharset(final Charset charset) {
    55          this.defaultCharset = charset;
    56      }
    57
    58      /** {@inheritDoc} */
    59      @Override
    60      public FacetDefinitionReader facetDefinitionReader(final GeometryInput in) {
    61          final Charset inputCharset = in.getCharset() != null ?
    62                  in.getCharset() :
    63                  defaultCharset;
    64
    65          return GeometryIOUtils.tryApplyCloseable(
    66                  inputStream -> StlFacetDefinitionReaders.create(inputStream, inputCharset),
    67                  in::getInputStream);
    68      }
    69  }