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 }