From ae1477cb2c914c921febaf283d75780d8e0b37bf Mon Sep 17 00:00:00 2001 From: znkim Date: Fri, 30 Aug 2024 15:28:59 +0900 Subject: [PATCH] hotfix : Change to add attributes when converting pipes, Handling nulls on ASCII conversion failures --- .../java/com/gaia3d/util/StringUtils.java | 3 ++ .../geometry/pipe/GaiaPipeLineString.java | 8 +++-- .../geometry/shape/ShapeConverter.java | 35 +++++++++++-------- 3 files changed, 29 insertions(+), 17 deletions(-) diff --git a/common/src/main/java/com/gaia3d/util/StringUtils.java b/common/src/main/java/com/gaia3d/util/StringUtils.java index 01e10c06..8781f6a8 100644 --- a/common/src/main/java/com/gaia3d/util/StringUtils.java +++ b/common/src/main/java/com/gaia3d/util/StringUtils.java @@ -53,6 +53,9 @@ public static Optional getExtensionByStringHandling(String filename) { } public static String convertUTF8(String ascii) { + if (ascii == null) { + return ""; + } return ascii.chars() .mapToObj(c -> (char) c) .map(c -> c < 128 ? c : '_') diff --git a/tiler/src/main/java/com/gaia3d/converter/geometry/pipe/GaiaPipeLineString.java b/tiler/src/main/java/com/gaia3d/converter/geometry/pipe/GaiaPipeLineString.java index 054d20d0..eb8d0a8d 100644 --- a/tiler/src/main/java/com/gaia3d/converter/geometry/pipe/GaiaPipeLineString.java +++ b/tiler/src/main/java/com/gaia3d/converter/geometry/pipe/GaiaPipeLineString.java @@ -7,6 +7,7 @@ import org.joml.Vector3d; import java.util.List; +import java.util.Map; @Builder @Getter @@ -15,14 +16,17 @@ public class GaiaPipeLineString { private String id; private String name; - private double diameter; // mm + /* only millimeter */ + private double diameter; private float[] rectangularSize; private GaiaBoundingBox boundingBox; - private PipeType profileType; // 0 = unknown, 1 = circular, 2 = rectangular, 3 = oval, 4 = irregular, etc. + private PipeType profileType; private String originalFilePath; private List positions; + private Map properties; + public boolean isSameProfile(GaiaPipeLineString pipeLineString) { if (profileType != pipeLineString.profileType) { return false; diff --git a/tiler/src/main/java/com/gaia3d/converter/geometry/shape/ShapeConverter.java b/tiler/src/main/java/com/gaia3d/converter/geometry/shape/ShapeConverter.java index c9685080..4b3d639d 100644 --- a/tiler/src/main/java/com/gaia3d/converter/geometry/shape/ShapeConverter.java +++ b/tiler/src/main/java/com/gaia3d/converter/geometry/shape/ShapeConverter.java @@ -134,6 +134,19 @@ protected List convert(File file) { continue; } + Map attributes = new HashMap<>(); + FeatureType featureType = feature.getFeatureType(); + Collection featureDescriptors = featureType.getDescriptors(); + AtomicInteger index = new AtomicInteger(0); + featureDescriptors.forEach(attributeDescriptor -> { + Object attribute = feature.getAttribute(index.getAndIncrement()); + if (attribute instanceof Geometry) { + return; + } + String attributeString = castStringFromObject(attribute, "null"); + attributes.put(attributeDescriptor.getName().getLocalPart(), attributeString); + }); + for (LineString lineString : LineStrings) { Coordinate[] coordinates = lineString.getCoordinates(); List positions = new ArrayList<>(); @@ -163,26 +176,12 @@ protected List convert(File file) { .id(feature.getID()) .profileType(PipeType.CIRCULAR) .diameter(diameter) + .properties(attributes) .positions(positions).build(); pipeLineString.setOriginalFilePath(file.getPath()); pipeLineStrings.add(pipeLineString); } - - Map attributes = new HashMap<>(); - FeatureType featureType = feature.getFeatureType(); - Collection featureDescriptors = featureType.getDescriptors(); - AtomicInteger index = new AtomicInteger(0); - featureDescriptors.forEach(attributeDescriptor -> { - Object attribute = feature.getAttribute(index.getAndIncrement()); - if (attribute instanceof Geometry) { - return; - } - String attributeString = castStringFromObject(attribute, "null"); - //log.debug("{} : {}", attributeDescriptor.getName(), attributeString); - attributes.put(attributeDescriptor.getName().getLocalPart(), attributeString); - }); - for (Polygon polygon : polygons) { if (!polygon.isValid()) { log.warn("{} Is Invalid Polygon.", feature.getID()); @@ -370,6 +369,12 @@ private void convertPipeLineStrings(List pipeLineStrings, Li GaiaNode rootNode = scene.getNodes().get(0); rootNode.setName("PipeLineStrings"); + GaiaAttribute gaiaAttribute = scene.getAttribute(); + gaiaAttribute.setAttributes(pipeLineString.getProperties()); + Map attributes = gaiaAttribute.getAttributes(); + gaiaAttribute.setNodeName(rootNode.getName()); + attributes.put("name", pipeLineString.getName()); + GaiaBoundingBox boundingBox = pipeLineString.getBoundingBox(); Vector3d bboxCenter = boundingBox.getCenter();