Skip to content

File layer_renderer.cpp

File List > gui > layer_renderer.cpp

Go to the documentation of this file

#include "gui/layer_renderer.hpp"

std::unique_ptr<LayerRenderer> LayerRenderer::create(std::shared_ptr<Layer> layer,
                                                     const Coordinate3D<double>& offset) {
  if (auto las_layer = std::dynamic_pointer_cast<LASLayer>(layer)) {
    return std::make_unique<OctreeLASLayerRenderer>(las_layer, offset);
  }
  if (auto dem_layer = std::dynamic_pointer_cast<DemLayer>(layer)) {
    return std::make_unique<MeshLayerRenderer>(
        dem_layer, [dem_layer]() -> const AsyncRasterData* { return &dem_layer->raster(); },
        offset);
  }
  if (auto slope_layer = std::dynamic_pointer_cast<SlopeLayer>(layer)) {
    return std::make_unique<MeshLayerRenderer>(
        slope_layer, [slope_layer]() -> const AsyncRasterData* { return &slope_layer->raster(); },
        offset);
  }
  if (auto textured_layer = std::dynamic_pointer_cast<TexturedDemLayer>(layer)) {
    return std::make_unique<MeshLayerRenderer>(
        textured_layer,
        [textured_layer]() -> const AsyncRasterData* { return &textured_layer->raster(); }, offset,
        true);
  }
  if (auto contour_layer = std::dynamic_pointer_cast<ContourLayer>(layer)) {
    return std::make_unique<ContourLayerRenderer>(contour_layer, offset);
  }
  return nullptr;
}