package org.osm2world.viewer.view.debug;
import java.awt.Color;
import java.util.List;
import org.osm2world.core.math.VectorXYZ;
import org.osm2world.core.target.common.rendering.Camera;
import org.osm2world.core.target.common.rendering.OrthoTilesUtil;
import org.osm2world.core.target.common.rendering.OrthoTilesUtil.CardinalDirection;
import org.osm2world.core.target.jogl.JOGLTarget;
import org.osm2world.viewer.control.actions.OrthoBoundsAction;
/**
* illustrates the construction of the orthogonal perspective
* as set by {@link OrthoBoundsAction}
*/
public class OrthoBoundsDebugView extends DebugView {
@Override
public String getDescription() {
return "illustrates the construction of the orthogonal perspective";
}
private static final Color LINE_COLOR = Color.YELLOW;
private static final Color POINT_COLOR = Color.RED;
private static final float HALF_POINT_WIDTH = 0.4f;
@Override
public boolean canBeUsed() {
return map != null;
}
@Override
public void fillTarget(JOGLTarget target) {
Camera orthoCam = OrthoTilesUtil.cameraForBounds(
map.getDataBoundary(), 30, CardinalDirection.S);
List<VectorXYZ> boundVertices = map.getDataBoundary().polygonXZ().xyz(0).getVertices();
target.drawLineLoop(LINE_COLOR, 1, boundVertices);
target.drawLineStrip(LINE_COLOR, 1, boundVertices.get(0), boundVertices.get(2));
target.drawLineStrip(LINE_COLOR, 1, boundVertices.get(1), boundVertices.get(3));
drawBoxAround(target, orthoCam.getPos(), POINT_COLOR, HALF_POINT_WIDTH);
drawBoxAround(target, orthoCam.getLookAt(), POINT_COLOR, HALF_POINT_WIDTH);
target.drawLineStrip(LINE_COLOR, 1, orthoCam.getPos(), orthoCam.getLookAt());
}
}