diff --git a/src/ifcgeom/Iterator.h b/src/ifcgeom/Iterator.h index 9aba57dec3..5a2a4dfca0 100644 --- a/src/ifcgeom/Iterator.h +++ b/src/ifcgeom/Iterator.h @@ -198,7 +198,11 @@ namespace IfcGeom { // @todo this shouldn't be necessary with properly immutable taxonomy items converter_->mapping()->use_caching() = false; } - converter_->mapping()->get_representations(reps, filters_); + try { + converter_->mapping()->get_representations(reps, filters_); + } catch (const std::exception& e) { + Logger::Error(e); + } time_points[1] = high_resolution_clock::now(); for (auto& task : reps) { diff --git a/src/ifcgeom/mapping/mapping.cpp b/src/ifcgeom/mapping/mapping.cpp index e295f6da60..127393dbbb 100644 --- a/src/ifcgeom/mapping/mapping.cpp +++ b/src/ifcgeom/mapping/mapping.cpp @@ -76,7 +76,13 @@ IfcSchema::IfcProduct::list::ptr mapping::products_represented_by(const IfcSchem IfcSchema::IfcMappedItem* item = *it; if (item->StyledByItem()->size() != 0) continue; - taxonomy::matrix4::ptr target = taxonomy::cast(map(item->MappingTarget())); + taxonomy::matrix4::ptr target; + try { + target = taxonomy::cast(map(item->MappingTarget())); + } catch (const std::exception& e) { + Logger::Error(e); + continue; + } if (!target->is_identity()) { continue; } @@ -361,8 +367,13 @@ IfcSchema::IfcRepresentation* mapping::representation_mapped_to(const IfcSchema: if (item->declaration().is(IfcSchema::IfcMappedItem::Class())) { if (item->StyledByItem()->size() == 0) { IfcSchema::IfcMappedItem* mapped_item = item->as(); - taxonomy::matrix4::ptr target = taxonomy::cast(map(mapped_item->MappingTarget())); - if (target->is_identity()) { + taxonomy::matrix4::ptr target; + try { + target = taxonomy::cast(map(mapped_item->MappingTarget())); + } catch (const std::exception& e) { + Logger::Error(e); + } + if (target && target->is_identity()) { IfcSchema::IfcRepresentationMap* rmap = mapped_item->MappingSource(); taxonomy::matrix4::ptr origin = taxonomy::cast(map(rmap->MappingOrigin())); if (origin->is_identity()) {