@Override public void renderTo(Target<?> target) { /* render fence */ List<VectorXYZ> pointsWithEle = line.getElevationProfile().getPointsWithEle(); List<VectorXYZ> vsFence = createVerticalTriangleStrip(pointsWithEle, 0, height); List<List<VectorXZ>> texCoordListsFence = wallTexCoordLists(vsFence, CHAIN_LINK_FENCE); target.drawTriangleStrip(CHAIN_LINK_FENCE, vsFence, texCoordListsFence); List<VectorXYZ> pointsWithEleBack = new ArrayList<VectorXYZ>(pointsWithEle); Collections.reverse(pointsWithEleBack); List<VectorXYZ> vsFenceBack = createVerticalTriangleStrip(pointsWithEleBack, 0, height); List<List<VectorXZ>> texCoordListsFenceBack = wallTexCoordLists(vsFenceBack, CHAIN_LINK_FENCE); target.drawTriangleStrip(CHAIN_LINK_FENCE, vsFenceBack, texCoordListsFenceBack); /* render poles */ List<VectorXZ> polePositions = GeometryUtil.equallyDistributePointsAlong( 2f, false, line.getStartNode().getPos(), line.getEndNode().getPos()); for (VectorXZ polePosition : polePositions) { VectorXYZ base = polePosition.xyz(line.getElevationProfile().getEleAt(polePosition)); target.drawColumn(CHAIN_LINK_FENCE_POST, null, base, height, width, width, false, true); } }
@Override public void renderTo(Target<?> target) { float width = parseWidth(node.getTags(), 1.5f); /* determine material */ Material material = null; // TODO parse color if (material == null) { material = Materials.getSurfaceMaterial(node.getTags().getValue("material")); } if (material == null) { material = Materials.getSurfaceMaterial(node.getTags().getValue("surface"), Materials.WOOD); } /* calculate vectors and corners */ double directionAngle = parseDirection(node.getTags(), PI); VectorXZ faceVector = VectorXZ.fromAngle(directionAngle); VectorXZ boardVector = faceVector.rightNormal(); List<VectorXZ> cornerOffsets = new ArrayList<VectorXZ>(4); cornerOffsets.add(faceVector.mult(+0.25).add(boardVector.mult(+width / 2))); cornerOffsets.add(faceVector.mult(+0.25).add(boardVector.mult(-width / 2))); cornerOffsets.add(faceVector.mult(-0.25).add(boardVector.mult(+width / 2))); cornerOffsets.add(faceVector.mult(-0.25).add(boardVector.mult(-width / 2))); /* draw seat and backrest */ target.drawBox(material, getBase().addY(0.5), faceVector, 0.05, width, 0.5); if (!node.getTags().contains("backrest", "no")) { target.drawBox( material, getBase().add(faceVector.mult(-0.23)).addY(0.5), faceVector, 0.5, width, 0.04); } /* draw poles */ for (VectorXZ cornerOffset : cornerOffsets) { VectorXZ polePos = node.getPos().add(cornerOffset.mult(0.8)); target.drawBox(material, polePos.xyz(getBase().y), faceVector, 0.5, 0.08, 0.08); } }
@Override public void renderTo(Target<?> target) { float width = parseWidth(node.getTags(), 4); float height = parseHeight(node.getTags(), 3.5f); float minHeight = height / 5; double directionAngle = parseDirection(node.getTags(), PI); VectorXZ faceVector = VectorXZ.fromAngle(directionAngle); VectorXZ boardVector = faceVector.rightNormal(); /* draw board */ VectorXYZ[] vsPoster = { getBase().add(boardVector.mult(width / 2)).addY(height), getBase().add(boardVector.mult(width / 2)).addY(minHeight), getBase().add(boardVector.mult(-width / 2)).addY(height), getBase().add(boardVector.mult(-width / 2)).addY(minHeight) }; List<VectorXYZ> vsListPoster = asList(vsPoster); target.drawTriangleStrip( ADVERTISING_POSTER, vsListPoster, texCoordLists(vsListPoster, ADVERTISING_POSTER, STRIP_FIT)); VectorXYZ[] vsBoard = {vsPoster[2], vsPoster[3], vsPoster[0], vsPoster[1]}; List<VectorXYZ> vsListBoard = asList(vsBoard); target.drawTriangleStrip( CONCRETE, vsListBoard, texCoordLists(vsListBoard, CONCRETE, STRIP_WALL)); /* draw poles */ VectorXZ[] poles = { node.getPos().add(boardVector.mult(-width / 4)), node.getPos().add(boardVector.mult(+width / 4)) }; for (VectorXZ pole : poles) { target.drawBox(CONCRETE, pole.xyz(getBase().y), faceVector, minHeight, 0.2, 0.1); } }
@Override public void renderTo(Target<?> target) { /* render bars */ List<VectorXYZ> vsLowFront = createVerticalTriangleStrip( line.getElevationProfile().getPointsWithEle(), 0.2f * height, 0.5f * height); List<VectorXYZ> vsLowBack = createVerticalTriangleStrip( line.getElevationProfile().getPointsWithEle(), 0.5f * height, 0.2f * height); target.drawTriangleStrip(material, vsLowFront, null); target.drawTriangleStrip(material, vsLowBack, null); List<VectorXYZ> vsHighFront = createVerticalTriangleStrip( line.getElevationProfile().getPointsWithEle(), 0.65f * height, 0.95f * height); List<VectorXYZ> vsHighBack = createVerticalTriangleStrip( line.getElevationProfile().getPointsWithEle(), 0.95f * height, 0.65f * height); target.drawTriangleStrip(material, vsHighFront, null); target.drawTriangleStrip(material, vsHighBack, null); /* render poles */ List<VectorXZ> polePositions = GeometryUtil.equallyDistributePointsAlong( 1f, false, line.getStartNode().getPos(), line.getEndNode().getPos()); for (VectorXZ polePosition : polePositions) { VectorXYZ base = polePosition.xyz(line.getElevationProfile().getEleAt(polePosition)); target.drawColumn(material, null, base, height, width, width, false, true); } }