Skip to content

Commit 1614f73

Browse files
committed
レビュー対応
1 parent 3f35536 commit 1614f73

File tree

1 file changed

+13
-9
lines changed

1 file changed

+13
-9
lines changed

src/polygon_mesh/area_mesh_factory.cpp

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ namespace {
1515
*/
1616
using GridIDToObjectsMap = std::map<unsigned, std::list<const citygml::CityObject*>>;
1717
using GroupGridIDToObjectsMap = std::map<std::pair<unsigned, unsigned>, std::list<const citygml::CityObject*>>;
18+
using GroupGridIDToObjectsWithPathMap = std::map<std::pair<unsigned, unsigned>, std::list<std::pair<const citygml::CityObject*, std::string>>>;
1819

1920
bool shouldSkipCityObj(const citygml::CityObject& city_obj, const MeshExtractOptions& options, const std::vector<geometry::Extent>& extents) {
2021
if (!options.exclude_city_object_outside_extent)
@@ -169,27 +170,30 @@ namespace plateau::polygonMesh {
169170
AreaMeshFactory::combine(const CityModelVector& city_models, const MeshExtractOptions& options, unsigned lod,
170171
const plateau::geometry::GeoReference& geo_reference, const std::vector<plateau::geometry::Extent>& extents) {
171172

172-
const auto& gmlPath = city_models->empty() || city_models->front().expired() ? "" : city_models->front().lock()->getGmlPath();
173-
std::shared_ptr <std::vector<const CityObject*>> all_primary_city_objects = std::make_shared<std::vector<const CityObject*>>();
173+
// 各CityObjectとそのソースのgmlPathをペアで保持
174+
std::shared_ptr<std::vector<std::pair<const CityObject*, std::string>>> all_primary_city_objects =
175+
std::make_shared<std::vector<std::pair<const CityObject*, std::string>>>();
174176

175177
const auto& _city_models = *city_models;
176178
for (const auto& city_model : _city_models) {
177179

178180
if (city_model.expired()) continue; // 参照が切れている場合はスキップ
179181

182+
const auto& gmlPath = city_model.lock()->getGmlPath();
180183
auto city_objects =
181184
city_model.lock()->getAllCityObjectsOfType(PrimaryCityObjectTypes::getPrimaryTypeMask());
182185

183-
all_primary_city_objects->insert(all_primary_city_objects->end(),
184-
city_objects.begin(), city_objects.end());
186+
for (const auto& city_obj : city_objects) {
187+
all_primary_city_objects->emplace_back(city_obj, gmlPath);
188+
}
185189
}
186190

187191
// LODレベルでグループ分けします。
188192
// グループIDとグリッドIDのペアをキーとし、グリッドIDは常に0(グリッド分割なし)
189-
auto group_id_to_primary_objects_map = GroupGridIDToObjectsMap();
193+
auto group_id_to_primary_objects_map = GroupGridIDToObjectsWithPathMap();
190194
const auto& all_primary_city_objects_in_model = *all_primary_city_objects;
191195

192-
for (const auto& primary_object : all_primary_city_objects_in_model) {
196+
for (const auto& [primary_object, gmlPath] : all_primary_city_objects_in_model) {
193197
// この CityObject について、最大でどのLODまで存在するか確認します。
194198
unsigned max_lod_in_obj = PolygonMeshUtils::max_lod_in_specification_;
195199
for (unsigned target_lod = lod + 1; target_lod <= PolygonMeshUtils::max_lod_in_specification_; ++target_lod) {
@@ -216,9 +220,9 @@ namespace plateau::polygonMesh {
216220
const auto group_grid_id = std::make_pair(group_id, grid_id);
217221

218222
if (group_id_to_primary_objects_map.find(group_grid_id) == group_id_to_primary_objects_map.end())
219-
group_id_to_primary_objects_map[group_grid_id] = std::list<const CityObject*>();
223+
group_id_to_primary_objects_map[group_grid_id] = std::list<std::pair<const CityObject*, std::string>>();
220224

221-
group_id_to_primary_objects_map.at(group_grid_id).push_back(primary_object);
225+
group_id_to_primary_objects_map.at(group_grid_id).emplace_back(primary_object, gmlPath);
222226
}
223227

224228
// グループごとにメッシュを結合します。
@@ -230,7 +234,7 @@ namespace plateau::polygonMesh {
230234
MeshFactory mesh_factory(nullptr, options, extents, geo_reference);
231235

232236
// グループ内の各主要地物のループ
233-
for (const auto& primary_object : primary_objects) {
237+
for (const auto& [primary_object, gmlPath] : primary_objects) {
234238
if(MeshExtractor::isTypeToSkip(primary_object->getType())) continue;
235239
if (MeshExtractor::shouldContainPrimaryMesh(lod, *primary_object)) {
236240
mesh_factory.addPolygonsInPrimaryCityObject(*primary_object, lod, gmlPath);

0 commit comments

Comments
 (0)