From ce9d3d88e0cb8b93341c1e42d2146faf147aba59 Mon Sep 17 00:00:00 2001 From: rinkk <karsten.rink@ufz.de> Date: Thu, 28 May 2020 14:49:44 +0200 Subject: [PATCH] [geolib] copy geometrical object names when duplicating geometries --- GeoLib/DuplicateGeometry.cpp | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/GeoLib/DuplicateGeometry.cpp b/GeoLib/DuplicateGeometry.cpp index fe7d1c5a1cc..1d84a42a92a 100644 --- a/GeoLib/DuplicateGeometry.cpp +++ b/GeoLib/DuplicateGeometry.cpp @@ -10,6 +10,7 @@ #include "DuplicateGeometry.h" +#include <map> #include <utility> #include "BaseLib/Logging.h" @@ -43,20 +44,38 @@ void DuplicateGeometry::duplicate(std::string const& input_name) new_pnts->reserve(pnts->size()); std::transform(pnts->cbegin(), pnts->cend(), std::back_inserter(*new_pnts), [](GeoLib::Point* point) { return new GeoLib::Point(*point); }); - _geo_objects.addPointVec(std::move(new_pnts), _output_name); + auto pnt_name_id_map = + std::make_unique<std::map<std::string, std::size_t>>(); + pnt_name_id_map->insert( + _geo_objects.getPointVecObj(input_name)->getNameIDMapBegin(), + _geo_objects.getPointVecObj(input_name)->getNameIDMapEnd()); + _geo_objects.addPointVec(std::move(new_pnts), _output_name, + std::move(pnt_name_id_map)); std::vector<GeoLib::Polyline*> const* plys (_geo_objects.getPolylineVec(input_name)); if (plys) { auto new_plys = copyPolylinesVector(*plys); - _geo_objects.addPolylineVec(std::move(new_plys), _output_name); + auto ply_name_id_map = + std::make_unique<std::map<std::string, std::size_t>>(); + ply_name_id_map->insert( + _geo_objects.getPolylineVecObj(input_name)->getNameIDMapBegin(), + _geo_objects.getPolylineVecObj(input_name)->getNameIDMapEnd()); + _geo_objects.addPolylineVec(std::move(new_plys), _output_name, + std::move(ply_name_id_map)); } std::vector<GeoLib::Surface*> const* sfcs (_geo_objects.getSurfaceVec(input_name)); if (sfcs) { auto new_sfcs = copySurfacesVector(*sfcs); - _geo_objects.addSurfaceVec(std::move(new_sfcs), _output_name); + auto sfc_name_id_map = + std::make_unique<std::map<std::string, std::size_t>>(); + sfc_name_id_map->insert( + _geo_objects.getSurfaceVecObj(input_name)->getNameIDMapBegin(), + _geo_objects.getSurfaceVecObj(input_name)->getNameIDMapEnd()); + _geo_objects.addSurfaceVec(std::move(new_sfcs), _output_name, + std::move(sfc_name_id_map)); } } -- GitLab