diff --git a/src/admesh/normals.cpp b/src/admesh/normals.cpp index a8faa44bd..0ad134360 100644 --- a/src/admesh/normals.cpp +++ b/src/admesh/normals.cpp @@ -108,6 +108,9 @@ stl_fix_normal_directions(stl_file *stl) { if (stl->error) return; + // this may happen for malformed models, see: https://github.com/prusa3d/Slic3r/issues/2209 + if (stl->stats.number_of_facets == 0) return; + /* Initialize linked list. */ head = (struct stl_normal*)malloc(sizeof(struct stl_normal)); if(head == NULL) perror("stl_fix_normal_directions"); diff --git a/src/libslic3r/ModelArrange.cpp b/src/libslic3r/ModelArrange.cpp index 50901da3a..c821eef77 100644 --- a/src/libslic3r/ModelArrange.cpp +++ b/src/libslic3r/ModelArrange.cpp @@ -567,8 +567,13 @@ ShapeData2D projectModelFromTop(const Slic3r::Model &model) { Transform3d trafo_instance = Geometry::assemble_transform(Vec3d::Zero(), rotation, finst->get_scaling_factor(), finst->get_mirror()); Polygon p = objptr->convex_hull_2d(trafo_instance); assert(! p.points.empty()); - p.reverse(); - assert(! p.is_counter_clockwise()); + + // this may happen for malformed models, see: https://github.com/prusa3d/Slic3r/issues/2209 + if (p.points.empty()) + continue; + + p.reverse(); + assert(!p.is_counter_clockwise()); p.append(p.first_point()); clpath = Slic3rMultiPoint_to_ClipperPath(p); } diff --git a/src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp b/src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp index 017c00143..1400bef5e 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp @@ -79,6 +79,8 @@ void GLGizmoSlaSupports::set_sla_support_data(ModelObject* model_object, const S m_parent.toggle_model_objects_visibility(false); m_parent.toggle_model_objects_visibility(true, m_model_object, m_active_instance); } + else + m_parent.toggle_model_objects_visibility(true, nullptr, -1); } } diff --git a/src/slic3r/GUI/wxExtensions.cpp b/src/slic3r/GUI/wxExtensions.cpp index a58881946..7485d6375 100644 --- a/src/slic3r/GUI/wxExtensions.cpp +++ b/src/slic3r/GUI/wxExtensions.cpp @@ -57,11 +57,6 @@ wxMenuItem* append_menu_item(wxMenu* menu, int id, const wxString& string, const auto *item = new wxMenuItem(menu, id, string, description); if (icon.IsOk()) { item->SetBitmap(icon); -#ifndef __WXMSW__ - wxImage imgGrey = icon.ConvertToImage().ConvertToGreyscale(); - if (imgGrey.IsOk()) - item->SetDisabledBitmap(wxBitmap(imgGrey)); -#endif /* __WXMSW__ */ } menu->Append(item); @@ -100,10 +95,6 @@ wxMenuItem* append_submenu(wxMenu* menu, wxMenu* sub_menu, int id, const wxStrin item->SetBitmap(create_scaled_bitmap(nullptr, icon)); // FIXME: pass window ptr #ifdef __WXMSW__ msw_menuitem_bitmaps[id] = icon; -#else /* __WXMSW__ */ - wxImage imgGrey = icon.ConvertToImage().ConvertToGreyscale(); - if (imgGrey.IsOk()) - item->SetDisabledBitmap(wxBitmap(imgGrey)); #endif /* __WXMSW__ */ }