diff --git a/src/GeometryEvaluator.cc b/src/GeometryEvaluator.cc index f950ce12..658c6d7f 100644 --- a/src/GeometryEvaluator.cc +++ b/src/GeometryEvaluator.cc @@ -123,7 +123,15 @@ GeometryEvaluator::ResultObject GeometryEvaluator::applyToChildren3D(const Abstr // Only one child -> this is a noop if (children.size() == 1) return ResultObject(children.front().second); - if (op == OPENSCAD_MINKOWSKI) return ResultObject(CGALUtils::applyMinkowski(children)); + if (op == OPENSCAD_MINKOWSKI) { + Geometry::ChildList actualchildren; + BOOST_FOREACH(const Geometry::ChildItem &item, children) { + if (!item.second->isEmpty()) actualchildren.push_back(item); + } + if (actualchildren.empty()) return ResultObject(); + if (actualchildren.size() == 1) return ResultObject(actualchildren.front().second); + return ResultObject(CGALUtils::applyMinkowski(actualchildren)); + } CGAL_Nef_polyhedron *N = CGALUtils::applyOperator(children, op); // FIXME: Clarify when we can return NULL and what that means diff --git a/src/cgalutils.cc b/src/cgalutils.cc index f8010f6a..c934ad4f 100644 --- a/src/cgalutils.cc +++ b/src/cgalutils.cc @@ -207,6 +207,9 @@ namespace CGALUtils { return visited.size() == p.size_of_facets(); } + /*! + children cannot contain NULL objects + */ Geometry const * applyMinkowski(const Geometry::ChildList &children) { CGAL::Timer t,t_tot; diff --git a/testdata/scad/bugs/issue1196.scad b/testdata/scad/bugs/issue1196.scad index 6fe6db45..4bc1149c 100644 --- a/testdata/scad/bugs/issue1196.scad +++ b/testdata/scad/bugs/issue1196.scad @@ -7,3 +7,14 @@ minkowski() { import("notfound.dxf"); } } + +minkowski() { + linear_extrude() { + import("notfound.dxf"); + } + linear_extrude() { + import("notfound.dxf"); + } + cube(); + cube(); +}