Don't arrange items if the bed has negative area
Also interpret a bounding box with maxCorner lower then minCorner as a negative area box
This commit is contained in:
parent
3e53abf9bd
commit
6197acf576
2 changed files with 13 additions and 6 deletions
|
@ -198,9 +198,10 @@ public:
|
|||
|
||||
inline P center() const BP2D_NOEXCEPT;
|
||||
|
||||
template<class Unit = TCompute<P>>
|
||||
template<class Unit = TCompute<P>>
|
||||
inline Unit area() const BP2D_NOEXCEPT {
|
||||
return Unit(width())*height();
|
||||
Unit s = std::signbit(width()) || std::signbit(height()) ? Unit(-1) : Unit(1);
|
||||
return s * libnest2d::abs(width() * height());
|
||||
}
|
||||
|
||||
static inline _Box infinite(const P ¢er = {TCoord<P>(0), TCoord<P>(0)});
|
||||
|
|
|
@ -497,11 +497,11 @@ void _arrange(
|
|||
mod_params.min_obj_distance = 0;
|
||||
|
||||
AutoArranger<BinT> arranger{corrected_bin, mod_params, progressfn, stopfn};
|
||||
|
||||
|
||||
auto infl = coord_t(std::ceil(params.min_obj_distance / 2.0));
|
||||
for (Item& itm : shapes) itm.inflate(infl);
|
||||
for (Item& itm : excludes) itm.inflate(infl);
|
||||
|
||||
|
||||
remove_large_items(excludes, corrected_bin);
|
||||
|
||||
// If there is something on the plate
|
||||
|
@ -511,7 +511,7 @@ void _arrange(
|
|||
inp.reserve(shapes.size() + excludes.size());
|
||||
for (auto &itm : shapes ) inp.emplace_back(itm);
|
||||
for (auto &itm : excludes) inp.emplace_back(itm);
|
||||
|
||||
|
||||
// Use the minimum bounding box rotation as a starting point.
|
||||
// TODO: This only works for convex hull. If we ever switch to concave
|
||||
// polygon nesting, a convex hull needs to be calculated.
|
||||
|
@ -528,7 +528,13 @@ void _arrange(
|
|||
}
|
||||
}
|
||||
|
||||
arranger(inp.begin(), inp.end());
|
||||
if (sl::area(corrected_bin) > 0)
|
||||
arranger(inp.begin(), inp.end());
|
||||
else {
|
||||
for (Item &itm : inp)
|
||||
itm.binId(BIN_ID_UNSET);
|
||||
}
|
||||
|
||||
for (Item &itm : inp) itm.inflate(-infl);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue