1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.geometry.examples.io.threed.obj;
18
19 import java.io.BufferedWriter;
20 import java.io.IOException;
21 import java.io.InputStream;
22 import java.io.InputStreamReader;
23 import java.io.OutputStream;
24 import java.io.OutputStreamWriter;
25 import java.nio.charset.Charset;
26 import java.nio.charset.StandardCharsets;
27
28 import org.apache.commons.geometry.core.precision.DoublePrecisionContext;
29 import org.apache.commons.geometry.euclidean.threed.BoundarySource3D;
30 import org.apache.commons.geometry.euclidean.threed.mesh.TriangleMesh;
31 import org.apache.commons.geometry.examples.io.threed.AbstractModelIOHandler;
32 import org.apache.commons.geometry.examples.io.threed.ModelIO;
33
34
35
36
37 public class OBJModelIOHandler extends AbstractModelIOHandler {
38
39
40 private static final Charset DEFAULT_CHARSET = StandardCharsets.UTF_8;
41
42
43 @Override
44 public boolean handlesType(final String type) {
45 return ModelIO.OBJ.equalsIgnoreCase(type);
46 }
47
48
49 @Override
50 protected TriangleMesh readInternal(final String type, final InputStream in,
51 final DoublePrecisionContext precision) throws IOException {
52 try (InputStreamReader reader = new InputStreamReader(in, DEFAULT_CHARSET)) {
53 final OBJReader objReader = new OBJReader();
54 return objReader.readTriangleMesh(reader, precision);
55 }
56 }
57
58
59 @Override
60 protected void writeInternal(final BoundarySource3D model, final String type, final OutputStream out)
61 throws IOException {
62 try (OBJWriter objWriter = new OBJWriter(new BufferedWriter(
63 new OutputStreamWriter(out, DEFAULT_CHARSET)))) {
64 objWriter.writeBoundaries(model);
65 }
66 }
67 }