Commit 1b84e3e5 authored by Luna Riegel's avatar Luna Riegel
Browse files

Feat: Add highlight functions for TopoErrors

parent 766e173e
...@@ -6,7 +6,10 @@ import java.util.Map; ...@@ -6,7 +6,10 @@ import java.util.Map;
import java.util.Set; import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import de.hft.stuttgart.citydoctor2.check.CheckableUtilsVisitor;
import de.hft.stuttgart.citydoctor2.datastructure.CityObject;
import de.hft.stuttgart.citydoctor2.datastructure.Edge; import de.hft.stuttgart.citydoctor2.datastructure.Edge;
import de.hft.stuttgart.citydoctor2.datastructure.Geometry;
import de.hft.stuttgart.citydoctor2.datastructure.LinearRing; import de.hft.stuttgart.citydoctor2.datastructure.LinearRing;
import de.hft.stuttgart.citydoctor2.datastructure.Polygon; import de.hft.stuttgart.citydoctor2.datastructure.Polygon;
import de.hft.stuttgart.citydoctor2.datastructure.Vertex; import de.hft.stuttgart.citydoctor2.datastructure.Vertex;
...@@ -120,6 +123,13 @@ public class HighlightController { ...@@ -120,6 +123,13 @@ public class HighlightController {
} }
} }
public void highlightPolygons(Collection<Polygon> polygons, TriangulatedGeometry currentTriGeom) {
clearHighlights();
for (Polygon p : polygons) {
addPolygonHighlight(p, currentTriGeom);
}
}
public void highlightPolygonClusters(List<List<Polygon>> components, TriangulatedGeometry currentTriGeom) { public void highlightPolygonClusters(List<List<Polygon>> components, TriangulatedGeometry currentTriGeom) {
clearHighlights(); clearHighlights();
for (int i = 0; i < components.size(); i++) { for (int i = 0; i < components.size(); i++) {
...@@ -229,25 +239,46 @@ public class HighlightController { ...@@ -229,25 +239,46 @@ public class HighlightController {
edges.getChildren().add(cy); edges.getChildren().add(cy);
} }
public void addCandidateSkeletonHighlight(CityObject candidate, TriangulatedGeometry currentTriGeom) {
candidate.accept(new CheckableUtilsVisitor() {
@Override
public void check(Geometry geom) {
geom.getPolygons().forEach(p -> {
addPolygonHighlight(p, currentTriGeom, Color.GRAY, Color.GRAY, Color.DARKGRAY);
});
}
});
}
public void addPolygonHighlight(Polygon p, TriangulatedGeometry currentTriGeom) { public void addPolygonHighlight(Polygon p, TriangulatedGeometry currentTriGeom) {
addPolygonHighlight(p, currentTriGeom, Color.RED, Color.BLUE, Color.ORANGE); addPolygonHighlight(p, currentTriGeom, Color.RED, Color.BLUE, Color.ORANGE);
} }
public void addCandidateHighlight(Polygon p, TriangulatedGeometry currentTriGeom) { public void addCandidateHighlight(Polygon p, TriangulatedGeometry currentTriGeom) {
addPolygonHighlight(p, currentTriGeom, Color.DARKRED, Color.NAVY, Color.ROSYBROWN);
}
public void addCandidateHighlight(Collection<Polygon> polys, TriangulatedGeometry currentTriGeom) {
for (Polygon p : polys) {
addCandidateHighlight(p, currentTriGeom);
}
} }
public void highlightGeometryCollisions(CollisionRecord collRecord, TriangulatedGeometry currentTriGeom) { public void highlightGeometryCollisions(CollisionRecord collRecord, TriangulatedGeometry currentTriGeom) {
Map<Polygon, List<Polygon>> collisionMap = collRecord.collisionMap(); Map<Polygon, List<Polygon>> collisionMap = collRecord.collisionMap();
collisionMap.keySet().forEach(subject -> addPolygonHighlight(subject, currentTriGeom, Color.RED, Color.BLUE, Color.ORANGE));
Set<Polygon> collidingPolys = collisionMap.values().stream().flatMap(List::stream).collect(Collectors.toSet()); Set<Polygon> collidingPolys = collisionMap.values().stream().flatMap(List::stream).collect(Collectors.toSet());
collidingPolys.forEach(poly -> addPolygonHighlight(poly, currentTriGeom, Color.DARKRED, Color.NAVY, Color.DARKORANGE)); highlightTopoPolygonGroups(collisionMap.keySet(), collidingPolys, currentTriGeom);
}
public void highlightTopoPolygonPair(Polygon subject, Polygon candidate,TriangulatedGeometry currentTriGeom) {
highlight(subject, currentTriGeom);
addCandidateHighlight(candidate, currentTriGeom);
} }
public void highlightTopoPolygonGroups(Collection<Polygon> subjectPolys, Collection<Polygon> candidatePolys, public void highlightTopoPolygonGroups(Collection<Polygon> subjectPolys, Collection<Polygon> candidatePolys,
TriangulatedGeometry currentTriGeom) { TriangulatedGeometry currentTriGeom) {
subjectPolys.forEach(subject -> addPolygonHighlight(subject, currentTriGeom, Color.RED, Color.BLUE, Color.ORANGE)); highlightPolygons(subjectPolys, currentTriGeom);
candidatePolys.forEach(subject -> addPolygonHighlight(subject, currentTriGeom, Color.RED, Color.BLUE, Color.DARKORANGE)); addCandidateHighlight(candidatePolys, currentTriGeom);
} }
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment