FIX: too slow slice in brim generate
1.Cache extruder_brim_areas jira: STUDIO-11478 Signed-off-by: xun.zhang <xun.zhang@bambulab.com> Change-Id: I370aad43b043e72a674da79271a806d3b3d97ffa
This commit is contained in:
parent
e7c94ed79e
commit
b48c8c3547
|
@ -1067,6 +1067,16 @@ static ExPolygons outer_inner_brim_area(const Print& print,
|
||||||
expolygons_append(no_brim_area, expolyFromLines);
|
expolygons_append(no_brim_area, expolyFromLines);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::vector<ExPolygons> extruder_no_brim_area_cache(extruder_nums, no_brim_area);
|
||||||
|
for (int extruder_id = 0; extruder_id < extruder_nums; ++extruder_id) {
|
||||||
|
auto bedPoly = extruder_unprintable_area[extruder_id];
|
||||||
|
auto bedExPoly = diff_ex((offset(bedPoly, scale_(30.), jtRound, SCALED_RESOLUTION)), {bedPoly});
|
||||||
|
if (!bedExPoly.empty()) {
|
||||||
|
extruder_no_brim_area_cache[extruder_id].push_back(bedExPoly.front());
|
||||||
|
}
|
||||||
|
extruder_no_brim_area_cache[extruder_id] = offset2_ex(extruder_no_brim_area_cache[extruder_id], scaled_flow_width, -scaled_flow_width); // connect scattered small areas to prevent generating very small brims
|
||||||
|
}
|
||||||
|
|
||||||
for (const PrintObject* object : print.objects()) {
|
for (const PrintObject* object : print.objects()) {
|
||||||
ExPolygons extruder_no_brim_area = no_brim_area;
|
ExPolygons extruder_no_brim_area = no_brim_area;
|
||||||
auto iter = std::find_if(objPrintVec.begin(), objPrintVec.end(), [object](const std::pair<ObjectID, unsigned int>& item) {
|
auto iter = std::find_if(objPrintVec.begin(), objPrintVec.end(), [object](const std::pair<ObjectID, unsigned int>& item) {
|
||||||
|
@ -1075,13 +1085,7 @@ static ExPolygons outer_inner_brim_area(const Print& print,
|
||||||
|
|
||||||
if (iter != objPrintVec.end()) {
|
if (iter != objPrintVec.end()) {
|
||||||
int extruder_id = filament_map[iter->second - 1] - 1;
|
int extruder_id = filament_map[iter->second - 1] - 1;
|
||||||
auto bedPoly = extruder_unprintable_area[extruder_id];
|
extruder_no_brim_area = extruder_no_brim_area_cache[extruder_id];
|
||||||
auto bedExPoly = diff_ex((offset(bedPoly, scale_(30.), jtRound, SCALED_RESOLUTION)), {bedPoly});
|
|
||||||
if (!bedExPoly.empty()) {
|
|
||||||
extruder_no_brim_area.push_back(bedExPoly.front());
|
|
||||||
}
|
|
||||||
extruder_no_brim_area = offset2_ex(extruder_no_brim_area, scaled_flow_width, -scaled_flow_width); // connect scattered small areas to prevent generating very small brims
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (brimAreaMap.find(object->id()) != brimAreaMap.end()) {
|
if (brimAreaMap.find(object->id()) != brimAreaMap.end()) {
|
||||||
|
|
Loading…
Reference in New Issue