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.txt;
18  
19  import org.apache.commons.geometry.io.core.GeometryFormat;
20  import org.apache.commons.geometry.io.core.output.GeometryOutput;
21  import org.apache.commons.geometry.io.euclidean.threed.GeometryFormat3D;
22  
23  /** {@link org.apache.commons.geometry.io.euclidean.threed.BoundaryWriteHandler3D BoundaryWriteHandler3D}
24   * implementation for the non-standard {@link GeometryFormat3D#TXT TXT} format. Output is
25   * written using the UTF-8 charset by default.
26   * @see org.apache.commons.geometry.io.euclidean.threed.BoundaryWriteHandler3D
27   * @see TextFacetDefinitionWriter
28   */
29  public class TextBoundaryWriteHandler3D extends AbstractTextBoundaryWriteHandler3D {
30  
31      /** String used to separate vertex components, ie, x, y, z values. */
32      private String vertexComponentSeparator = TextFacetDefinitionWriter.DEFAULT_VERTEX_COMPONENT_SEPARATOR;
33  
34      /** String used to separate vertices. */
35      private String vertexSeparator = TextFacetDefinitionWriter.DEFAULT_VERTEX_SEPARATOR;
36  
37      /** Number of vertices required per facet; will be -1 if disabled. */
38      private int facetVertexCount = TextFacetDefinitionWriter.DEFAULT_FACET_VERTEX_COUNT;
39  
40      /** Get the string used to separate vertex components (ie, individual x, y, z values).
41       * @return string used to separate vertex components
42       * @see TextFacetDefinitionWriter#getVertexComponentSeparator()
43       */
44      public String getVertexComponentSeparator() {
45          return vertexComponentSeparator;
46      }
47  
48      /** Set the string used to separate vertex components (ie, individual x, y, z values).
49       * @param sep string used to separate vertex components
50       * @see TextFacetDefinitionWriter#setVertexComponentSeparator(String)
51       */
52      public void setVertexComponentSeparator(final String sep) {
53          this.vertexComponentSeparator = sep;
54      }
55  
56      /** Get the string used to separate facet vertices.
57       * @return string used to separate facet vertices
58       * @see TextFacetDefinitionWriter#getVertexSeparator()
59       */
60      public String getVertexSeparator() {
61          return vertexSeparator;
62      }
63  
64      /** Set the string used to separate facet vertices.
65       * @param sep string used to separate facet vertices
66       * @see TextFacetDefinitionWriter#setVertexSeparator(String)
67       */
68      public void setVertexSeparator(final String sep) {
69          this.vertexSeparator = sep;
70      }
71  
72      /** Get the number of vertices required per facet or {@code -1} if no specific
73       * number is required.
74       * @return the number of vertices required per facet or {@code -1} if any geometricallly
75       *      valid number is allowed (ie, any number greater than or equal to 3)
76       * @see TextFacetDefinitionWriter#getFacetVertexCount()
77       */
78      public int getFacetVertexCount() {
79          return facetVertexCount;
80      }
81  
82      /** Set the number of vertices required per facet. This can be used to enforce a consistent
83       * format in the output. Set to {@code -1} to allow any geometrically valid number of vertices
84       * (ie, any number greater than or equal to 3).
85       * @param vertexCount number of vertices required per facet or {@code -1} to allow any number
86       * @see TextFacetDefinitionWriter#setFacetVertexCount(int)
87       */
88      public void setFacetVertexCount(final int vertexCount) {
89          this.facetVertexCount = vertexCount;
90      }
91  
92      /** {@inheritDoc} */
93      @Override
94      public GeometryFormat getFormat() {
95          return GeometryFormat3D.TXT;
96      }
97  
98      /** {@inheritDoc} */
99      @Override
100     protected TextFacetDefinitionWriter getFacetDefinitionWriter(final GeometryOutput out) {
101         final TextFacetDefinitionWriter facetWriter = super.getFacetDefinitionWriter(out);
102 
103         facetWriter.setVertexComponentSeparator(vertexComponentSeparator);
104         facetWriter.setVertexSeparator(vertexSeparator);
105         facetWriter.setFacetVertexCount(facetVertexCount);
106 
107         return facetWriter;
108     }
109 }