private static List<BuildingPart> parseBuildingPart(Way primitive, Perspective pPerspective) { if (!primitive.isClosed()) { throw new RuntimeException("Way is not closed: " + primitive); } OsmPrimitive p = primitive; BuildingPart bp = parseBuildingPartAttributes(p); bp.setWall(parseWall((Way) p, pPerspective)); bp.setInlineWalls(null); bp.setRoof(RoofParser.parse(primitive, pPerspective)); List<BuildingPart> bpList = new ArrayList<BuildingPart>(); bpList.add(bp); bpList.addAll(parseRelationClone(primitive, bp)); return bpList; }
/** * Parse building model from multipolygon. * * @param pRelation * @param pPerspective * @return */ static List<BuildingPart> parseBuildingMultiPolygonPart(Relation pRelation, Perspective pPerspective) { List<AreaWithHoles> waysPolygon = PolygonWithHolesUtil.findAreaWithHoles(pRelation); List<BuildingPart> ret = new ArrayList<BuildingPart>(); for (AreaWithHoles waysPolygon2 : waysPolygon) { BuildingPart bp = parseBuildingPartAttributes(pRelation); // DormerRoofModel roofClosedWay = RoofParser.parse(p, // pPerspective); // bp.setRoof(marge(roof, roofClosedWay)); bp.setRoof(RoofParser.parse(pRelation, pPerspective)); bp.setWall(parseWall(waysPolygon2.getOuter(), pPerspective)); if (waysPolygon2.getInner() != null) { List<Wall> innerWall = new ArrayList<Wall>(); for (List<ReversableWay> rwList : waysPolygon2.getInner()) { innerWall.add(parseWall(rwList, pPerspective)); } bp.setInlineWalls(innerWall); } ret.add(bp); } return ret; }
private static BuildingPart cloneBuildingPart(BuildingPart bp, Double height) { BuildingPart ret = new BuildingPart(); if (bp.getMaxHeight() == null) { ret.setMaxHeight(bp.getDefaultMaxHeight() + height); } else { ret.setMaxHeight(bp.getMaxHeight() + height); } if (bp.getMinHeight() == null) { ret.setMinHeight(bp.getDefaultMinHeight() + height); } else { ret.setMinHeight(bp.getMinHeight() + height); } ret.setFacadeColor(bp.getFacadeColor()); ret.setFacadeMaterialType(bp.getFacadeMaterialType()); ret.setFloorColor(bp.getFloorColor()); ret.setFloorMaterialType(bp.getFloorMaterialType()); ret.setInlineWalls(bp.getInlineWalls()); ret.setLevelHeight(bp.getLevelHeight()); ret.setMaxLevel(bp.getMaxLevel()); ret.setMinLevel(bp.getMinLevel()); ret.setRoof(bp.getRoof()); ret.setRoofColor(bp.getRoofColor()); ret.setRoofLevels(bp.getRoofLevels()); ret.setRoofMaterialType(bp.getRoofMaterialType()); ret.setWall(bp.getWall()); return ret; }