From 17011c7bcce48130566e06f75ca25d99cdd53a88 Mon Sep 17 00:00:00 2001 From: Petru Conduraru Date: Wed, 22 Jul 2026 12:46:38 +0300 Subject: [PATCH] Fix --no-normals ignored by CGAL kernel for OBJ output (#8861) CgalShape::Triangulate() unconditionally computed and emitted vertex normals via t->addNormal(), never checking the DontEmitNormals ("--no-normals") setting. The OpenCascade kernel already gates its equivalent addNormal() call on this setting, so the CGAL kernel is brought in line with it: normals are only added when settings::DontEmitNormals is not set, matching the OCC behavior and the documented CLI flag. Generated with the assistance of an AI coding tool. --- src/ifcgeom/kernels/cgal/CgalConversionResult.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/ifcgeom/kernels/cgal/CgalConversionResult.cpp b/src/ifcgeom/kernels/cgal/CgalConversionResult.cpp index 2fbdb0a307..dfdb962fd3 100644 --- a/src/ifcgeom/kernels/cgal/CgalConversionResult.cpp +++ b/src/ifcgeom/kernels/cgal/CgalConversionResult.cpp @@ -382,6 +382,7 @@ void ifcopenshell::geometry::CgalShape::Triangulate(ifcopenshell::geometry::Sett } const bool setting_use_original_edges = settings.get().get(); + const bool calculate_normals = !settings.get().get(); std::set> original_edges; if (setting_use_original_edges) { @@ -541,11 +542,13 @@ void ifcopenshell::geometry::CgalShape::Triangulate(ifcopenshell::geometry::Sett ); welds.insert({ pn, vidx }); - auto nx = CGAL::to_double(face_normals_map[face].cartesian(0)); - auto ny = CGAL::to_double(face_normals_map[face].cartesian(1)); - auto nz = CGAL::to_double(face_normals_map[face].cartesian(2)); + if (calculate_normals) { + auto nx = CGAL::to_double(face_normals_map[face].cartesian(0)); + auto ny = CGAL::to_double(face_normals_map[face].cartesian(1)); + auto nz = CGAL::to_double(face_normals_map[face].cartesian(2)); - t->addNormal(nx, ny, nz); + t->addNormal(nx, ny, nz); + } } else { vidx = it->second; }