for (QuadLeaf leaf : mapQuadtree.getLeaves()) {
/* draw leaf boundary */
VectorXZ[] vs = new VectorXZ[5];
vs[0] = new VectorXZ(leaf.minX, leaf.minZ);
vs[1] = new VectorXZ(leaf.maxX, leaf.minZ);
vs[2] = new VectorXZ(leaf.maxX, leaf.maxZ);
vs[3] = new VectorXZ(leaf.minX, leaf.maxZ);
vs[4] = vs[0];
target.drawLineStrip(LEAF_BORDER_COLOR, 1,
listXYZ(Arrays.asList(vs),0));
if (arrowsEnabled) {
/* draw arrows from leaf center to elements */
VectorXZ leafCenter = new VectorXZ(
(leaf.minX + leaf.maxX)/2,
(leaf.minZ + leaf.maxZ)/2);
for (MapElement e : leaf) {
if (e instanceof MapNode) {
VectorXZ nodePos = ((MapNode)e).getPos();
drawArrow(target, NODE_ARROW_COLOR,
(float) min(1,
distance(leafCenter, nodePos) * 0.3),
leafCenter.xyz(0), nodePos.xyz(0));
} else if (e instanceof MapWaySegment) {
VectorXZ lineStart =
((MapWaySegment)e).getStartNode().getPos();
VectorXZ lineEnd =
((MapWaySegment)e).getEndNode().getPos();
VectorXZ lineCenter = lineStart.add(lineEnd).mult(0.5f);
float headLength = (float)
min(1, distance(leafCenter, lineCenter) * 0.3);
drawArrow(target,
LINE_ARROW_COLOR, headLength,
leafCenter.xyz(0), lineCenter.xyz(0));
} else if (e instanceof MapArea) {
VectorXZ areaCenter =
((MapArea)e).getOuterPolygon().getCenter();
float headLength = (float)
min(1, distance(leafCenter, areaCenter) * 0.3);
drawArrow(target,
AREA_ARROW_COLOR, headLength,
leafCenter.xyz(0), areaCenter.xyz(0));
}
}
}