/**
   * 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);
  }
  private void processLightObject(OsmPolygon poly) {
    if (XplaneOptionsHelper.getOptions().isGenerateLights()) {
      XplaneDsfObject object = dsfObjectsProvider.getRandomDsfLightObject(poly);
      if (object != null) {
        object.setPolygon(poly);
        try {
          writeObjectToDsf(object);

        } catch (Osm2xpBusinessException e) {
        }
      }
    }
  }
  /**
   * choose and write a 3D object in the dsf file.
   *
   * @param polygon osm polygon.
   * @return true if a 3D object has been written in the dsf file.
   */
  private boolean process3dObject(OsmPolygon osmPolygon) {
    Boolean result = false;

    if (XplaneOptionsHelper.getOptions().isGenerateObj()) {
      // simplify shape if checked and if necessary
      if (GuiOptionsHelper.getOptions().isSimplifyShapes() && !osmPolygon.isSimplePolygon()) {
        osmPolygon.simplifyPolygon();
      }
      XplaneDsfObject object = dsfObjectsProvider.getRandomDsfObject(osmPolygon);
      if (object != null) {
        object.setPolygon(osmPolygon);
        try {
          writeObjectToDsf(object);
          result = true;
        } catch (Osm2xpBusinessException e) {
          result = false;
        }
      }
    }
    return result;
  }