Fix of weird double extrusions with multiple regions and their
parameters being changed between slicing runs.
This commit is contained in:
parent
38d06d57a0
commit
a9fc39491e
1 changed files with 75 additions and 65 deletions
|
@ -112,7 +112,12 @@ void Layer::make_perimeters()
|
||||||
// keep track of regions whose perimeters we have already generated
|
// keep track of regions whose perimeters we have already generated
|
||||||
std::vector<unsigned char> done(m_regions.size(), false);
|
std::vector<unsigned char> done(m_regions.size(), false);
|
||||||
|
|
||||||
for (LayerRegionPtrs::iterator layerm = m_regions.begin(); layerm != m_regions.end(); ++ layerm) {
|
for (LayerRegionPtrs::iterator layerm = m_regions.begin(); layerm != m_regions.end(); ++ layerm)
|
||||||
|
if ((*layerm)->slices.empty()) {
|
||||||
|
(*layerm)->perimeters.clear();
|
||||||
|
(*layerm)->fills.clear();
|
||||||
|
(*layerm)->thin_fills.clear();
|
||||||
|
} else {
|
||||||
size_t region_id = layerm - m_regions.begin();
|
size_t region_id = layerm - m_regions.begin();
|
||||||
if (done[region_id])
|
if (done[region_id])
|
||||||
continue;
|
continue;
|
||||||
|
@ -123,7 +128,8 @@ void Layer::make_perimeters()
|
||||||
// find compatible regions
|
// find compatible regions
|
||||||
LayerRegionPtrs layerms;
|
LayerRegionPtrs layerms;
|
||||||
layerms.push_back(*layerm);
|
layerms.push_back(*layerm);
|
||||||
for (LayerRegionPtrs::const_iterator it = layerm + 1; it != m_regions.end(); ++it) {
|
for (LayerRegionPtrs::const_iterator it = layerm + 1; it != m_regions.end(); ++it)
|
||||||
|
if (! (*it)->slices.empty()) {
|
||||||
LayerRegion* other_layerm = *it;
|
LayerRegion* other_layerm = *it;
|
||||||
const PrintRegionConfig &other_config = other_layerm->region()->config();
|
const PrintRegionConfig &other_config = other_layerm->region()->config();
|
||||||
if (config.perimeter_extruder == other_config.perimeter_extruder
|
if (config.perimeter_extruder == other_config.perimeter_extruder
|
||||||
|
@ -135,7 +141,11 @@ void Layer::make_perimeters()
|
||||||
&& config.opt_serialize("perimeter_extrusion_width") == other_config.opt_serialize("perimeter_extrusion_width")
|
&& config.opt_serialize("perimeter_extrusion_width") == other_config.opt_serialize("perimeter_extrusion_width")
|
||||||
&& config.thin_walls == other_config.thin_walls
|
&& config.thin_walls == other_config.thin_walls
|
||||||
&& config.external_perimeters_first == other_config.external_perimeters_first
|
&& config.external_perimeters_first == other_config.external_perimeters_first
|
||||||
&& config.infill_overlap == other_config.infill_overlap) {
|
&& config.infill_overlap == other_config.infill_overlap)
|
||||||
|
{
|
||||||
|
other_layerm->perimeters.clear();
|
||||||
|
other_layerm->fills.clear();
|
||||||
|
other_layerm->thin_fills.clear();
|
||||||
layerms.push_back(other_layerm);
|
layerms.push_back(other_layerm);
|
||||||
done[it - m_regions.begin()] = true;
|
done[it - m_regions.begin()] = true;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue