mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-10-21 15:51:10 -06:00
FIX: auto-arrange may crash due to clipper
1. Use nlopt and clipper offset togather seems not stable, very easy to crash. We do the offset outside nlopt now. 2. Fix a bug with finalAlign where objects may be translated to overlap with excluded region. 3. change the words of support_expansion Change-Id: I22e37b20e4ae16f47bde206de90845616e4cefad (cherry picked from commit 1c26e5d2862fd3f3292971b5c749420bfb2cdf0e)
This commit is contained in:
parent
95ed039879
commit
4eba8a2a2d
6 changed files with 47 additions and 55 deletions
|
@ -540,15 +540,15 @@ void ArrangeJob::process()
|
|||
// 屏蔽区域只需要膨胀brim宽度,防止brim长过去;挤出标定区域不需要膨胀,brim可以长过去。
|
||||
// 以前我们认为还需要膨胀clearance_radius/2,这其实是不需要的,因为这些区域并不会真的摆放物体,
|
||||
// 其他物体的膨胀轮廓是可以跟它们重叠的。
|
||||
double scaled_exclusion_gap = scale_(1);
|
||||
std::for_each(m_unselected.begin(), m_unselected.end(), [&](auto &ap) {
|
||||
ap.inflation = !ap.is_virt_object ?
|
||||
params.min_obj_distance / 2 :
|
||||
(ap.is_extrusion_cali_object ? 0 : scaled(params.brim_skirt_distance));
|
||||
(ap.is_extrusion_cali_object ? 0 : scaled_exclusion_gap);
|
||||
});
|
||||
|
||||
|
||||
partplate_list.preprocess_exclude_areas(params.excluded_regions, 1);
|
||||
partplate_list.preprocess_exclude_areas(params.nonprefered_regions, 1);
|
||||
partplate_list.preprocess_exclude_areas(params.excluded_regions, 1, scaled_exclusion_gap);
|
||||
|
||||
// shrink bed by moving to center by dist
|
||||
Points bedpts = get_bed_shape(*m_plater->config());
|
||||
|
|
|
@ -3557,7 +3557,7 @@ bool PartPlateList::preprocess_arrange_polygon_other_locked(int obj_index, int i
|
|||
return locked;
|
||||
}
|
||||
|
||||
bool PartPlateList::preprocess_exclude_areas(arrangement::ArrangePolygons& unselected, int num_plates)
|
||||
bool PartPlateList::preprocess_exclude_areas(arrangement::ArrangePolygons& unselected, int num_plates, float inflation)
|
||||
{
|
||||
bool added = false;
|
||||
|
||||
|
@ -3585,6 +3585,7 @@ bool PartPlateList::preprocess_exclude_areas(arrangement::ArrangePolygons& unsel
|
|||
ret.bed_idx = j;
|
||||
ret.height = 1;
|
||||
ret.name = "ExcludedRegion" + std::to_string(index);
|
||||
ret.inflation = inflation;
|
||||
|
||||
unselected.emplace_back(std::move(ret));
|
||||
}
|
||||
|
@ -3595,7 +3596,7 @@ bool PartPlateList::preprocess_exclude_areas(arrangement::ArrangePolygons& unsel
|
|||
return added;
|
||||
}
|
||||
|
||||
bool PartPlateList::preprocess_nonprefered_areas(arrangement::ArrangePolygons& regions, int num_plates)
|
||||
bool PartPlateList::preprocess_nonprefered_areas(arrangement::ArrangePolygons& regions, int num_plates, float inflation)
|
||||
{
|
||||
bool added = false;
|
||||
|
||||
|
@ -3619,6 +3620,7 @@ bool PartPlateList::preprocess_nonprefered_areas(arrangement::ArrangePolygons& r
|
|||
ret.bed_idx = j;
|
||||
ret.height = 1;
|
||||
ret.name = "NonpreferedRegion" + std::to_string(index);
|
||||
ret.inflation = inflation;
|
||||
|
||||
regions.emplace_back(std::move(ret));
|
||||
}
|
||||
|
|
|
@ -625,8 +625,8 @@ public:
|
|||
//preprocess an arrangement::ArrangePolygon, return true if it is in a locked plate
|
||||
bool preprocess_arrange_polygon(int obj_index, int instance_index, arrangement::ArrangePolygon& arrange_polygon, bool selected);
|
||||
bool preprocess_arrange_polygon_other_locked(int obj_index, int instance_index, arrangement::ArrangePolygon& arrange_polygon, bool selected);
|
||||
bool preprocess_exclude_areas(arrangement::ArrangePolygons& unselected, int num_plates = 16);
|
||||
bool preprocess_nonprefered_areas(arrangement::ArrangePolygons& regions, int num_plates = 1);
|
||||
bool preprocess_exclude_areas(arrangement::ArrangePolygons& unselected, int num_plates = 16, float inflation = 0);
|
||||
bool preprocess_nonprefered_areas(arrangement::ArrangePolygons& regions, int num_plates = 1, float inflation=0);
|
||||
|
||||
void postprocess_bed_index_for_selected(arrangement::ArrangePolygon& arrange_polygon);
|
||||
void postprocess_bed_index_for_unselected(arrangement::ArrangePolygon& arrange_polygon);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue