/** * write a 3D object in the dsf file * * @param object a xplane dsf object * @throws Osm2xpBusinessException */ private void writeObjectToDsf(XplaneDsfObject object) throws Osm2xpBusinessException { String objectDsfText = object.asObjDsfText(); writer.write(objectDsfText, GeomUtils.cleanCoordinatePoint(object.getOsmPolygon().getCenter())); // stats StatsHelper.addObjectType(dsfObjectsProvider.getObjectsList().get(object.getDsfIndex()), stats); }
/** * write a building in the dsf file. * * @param polygon * @param facade * @param size */ private void writeBuildingToDsf(OsmPolygon osmPolygon, Integer facade) { if (facade != null && osmPolygon.getHeight() != null) { StringBuffer sb = new StringBuffer(); osmPolygon.setPolygon(GeomUtils.setClockwise(osmPolygon.getPolygon())); if (osmPolygon.getPolygon().getArea() * 100000000 > 0.1 && osmPolygon.getPolygon().getVertexNumber() > 3) { sb.append("BEGIN_POLYGON " + facade + " " + osmPolygon.getHeight() + " 2"); sb.append(System.getProperty("line.separator")); sb.append("BEGIN_WINDING"); sb.append(System.getProperty("line.separator")); // on supprime le dernier point pour ne pas boucler osmPolygon.getPolygon().removePoint(osmPolygon.getPolygon().getLastPoint()); for (Point2D loc : osmPolygon.getPolygon().getVertices()) { sb.append("POLYGON_POINT " + loc.y + " " + loc.x); sb.append(System.getProperty("line.separator")); } sb.append("END_WINDING"); sb.append(System.getProperty("line.separator")); sb.append("END_POLYGON"); sb.append(System.getProperty("line.separator")); // stats TODO not working anymore since v2 facades new features. if (dsfObjectsProvider.getPolygonsList().get(facade).toLowerCase().contains("building") || dsfObjectsProvider.getPolygonsList().get(facade).toLowerCase().contains("shape")) { StatsHelper.addBuildingType("Building", stats); } else { if (dsfObjectsProvider.getPolygonsList().get(facade).toLowerCase().contains("house") || dsfObjectsProvider .getPolygonsList() .get(facade) .toLowerCase() .contains("common")) { StatsHelper.addBuildingType("Residential", stats); } else { StatsHelper.addBuildingType("Facade rule", stats); } } writer.write( sb.toString(), GeomUtils.cleanCoordinatePoint(osmPolygon.getPolygon().getFirstPoint())); } } }
/** * @param polygon the forest polygon * @param forestIndexAndDensity index and density of the forest rule */ private void writeForestToDsf(OsmPolygon osmPolygon, Integer[] forestIndexAndDensity) { StringBuffer sb = new StringBuffer(); sb.append("BEGIN_POLYGON " + forestIndexAndDensity[0] + " " + forestIndexAndDensity[1] + " 2"); sb.append(System.getProperty("line.separator")); sb.append("BEGIN_WINDING"); sb.append(System.getProperty("line.separator")); for (Point2D loc : osmPolygon.getPolygon().getVertices()) { sb.append("POLYGON_POINT " + loc.y + " " + loc.x); sb.append(System.getProperty("line.separator")); } sb.append("END_WINDING"); sb.append(System.getProperty("line.separator")); sb.append("END_POLYGON"); sb.append(System.getProperty("line.separator")); // stats StatsHelper.addForestType( dsfObjectsProvider.getPolygonsList().get(forestIndexAndDensity[0]), stats); writer.write( sb.toString(), GeomUtils.cleanCoordinatePoint(osmPolygon.getPolygon().getFirstPoint())); }