Browse Source

Use gravity kernel for non rectangular beds

Also change sorting of outlines based on convex hull area and
tamasmeszaros 1 year ago
parent
commit
44d91ec353
1 changed files with 6 additions and 2 deletions
  1. 6 2
      src/libslic3r/Arrange/ArrangeImpl.hpp

+ 6 - 2
src/libslic3r/Arrange/ArrangeImpl.hpp

@@ -272,7 +272,7 @@ class DefaultArranger: public Arranger<ArrItem> {
             int pa = get_priority(itm1);
             int pb = get_priority(itm2);
 
-            return pa == pb ? envelope_area(itm1) > envelope_area(itm2) :
+            return pa == pb ? area(envelope_convex_hull(itm1)) > area(envelope_convex_hull(itm2)) :
                               pa > pb;
         };
 
@@ -295,7 +295,11 @@ class DefaultArranger: public Arranger<ArrItem> {
         default:
             [[fallthrough]];
         case ArrangeSettingsView::asAuto:
-            basekernel = TMArrangeKernel{items.size(), area(bed)};
+            if constexpr (std::is_convertible_v<Bed, RectangleBed>){
+                basekernel = TMArrangeKernel{items.size(), area(bed)};
+            } else {
+                basekernel = GravityKernel{};
+            }
             break;
         case ArrangeSettingsView::asPullToCenter:
             basekernel = GravityKernel{};