package org.osm2world.viewer.view.debug; import java.awt.Color; import org.osm2world.core.math.LineSegmentXZ; import org.osm2world.core.math.PolygonXZ; import org.osm2world.core.math.VectorXZ; import org.osm2world.core.target.jogl.JOGLTarget; import org.osm2world.core.world.modules.BuildingModule.Building; import org.osm2world.core.world.modules.BuildingModule.BuildingPart; import org.osm2world.core.world.modules.BuildingModule.BuildingPart.HeightfieldRoof; public class RoofDataDebugView extends DebugView { private static final Color INNER_POINT_COLOR = Color.YELLOW; private static final Color INNER_SEGMENT_COLOR = Color.GREEN; private static final Color POLYGON_COLOR = Color.BLUE; @Override public boolean canBeUsed() { return map != null; } @Override public void fillTarget(JOGLTarget target) { for (Building building : map.getWorldObjects(Building.class)) { for (BuildingPart part : building.getParts()) { if (!(part.getRoof() instanceof HeightfieldRoof)) return; HeightfieldRoof roofData = (HeightfieldRoof)part.getRoof(); for (PolygonXZ polygon : roofData.getPolygon().getPolygons()) { for (VectorXZ v : polygon.getVertices()) { drawBoxAround(target, v, POLYGON_COLOR, 0.3f); } for (LineSegmentXZ s : polygon.getSegments()) { target.drawLineStrip(POLYGON_COLOR, 1, s.p1.xyz(0), s.p2.xyz(0)); } } for (VectorXZ v : roofData.getInnerPoints()) { drawBoxAround(target, v, INNER_POINT_COLOR, 0.5f); } for (LineSegmentXZ s : roofData.getInnerSegments()) { target.drawLineStrip(INNER_SEGMENT_COLOR, 1, s.p1.xyz(0), s.p2.xyz(0)); } } } } }