mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2026-02-14 20:49:28 -07:00
FIX: find the first layer with enough space to extrude
1. Sometimes the first layer is too small and does not have enough space to extrude.That will make first layer extruders empty jira: STUDIO-13030 Signed-off-by: xun.zhang <xun.zhang@bambulab.com> Change-Id: I69b99ab74101c772f4c91e955060e403988bb91c (cherry picked from commit 9699397858c6d52d027e79e91041a9dac7280bba)
This commit is contained in:
parent
e389072544
commit
a092c48642
1 changed files with 40 additions and 4 deletions
|
|
@ -479,8 +479,26 @@ std::vector<unsigned int> ToolOrdering::generate_first_layer_tool_order(const Pr
|
|||
std::map<int, double> min_areas_per_extruder;
|
||||
|
||||
for (auto object : print.objects()) {
|
||||
auto first_layer = object->get_layer(0);
|
||||
for (auto layerm : first_layer->regions()) {
|
||||
const Layer* target_layer = nullptr;
|
||||
for(auto layer : object->layers()){
|
||||
for(auto layerm : layer->regions()){
|
||||
for(auto& expoly : layerm->raw_slices){
|
||||
if (!offset_ex(expoly, -0.2 * scale_(print.config().initial_layer_line_width)).empty()) {
|
||||
target_layer = layer;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(target_layer)
|
||||
break;
|
||||
}
|
||||
if(target_layer)
|
||||
break;
|
||||
}
|
||||
|
||||
if(!target_layer)
|
||||
return tool_order;
|
||||
|
||||
for (auto layerm : target_layer->regions()) {
|
||||
int extruder_id = layerm->region().config().option("wall_filament")->getInt();
|
||||
|
||||
for (auto expoly : layerm->raw_slices) {
|
||||
|
|
@ -525,8 +543,26 @@ std::vector<unsigned int> ToolOrdering::generate_first_layer_tool_order(const Pr
|
|||
std::vector<unsigned int> tool_order;
|
||||
int initial_extruder_id = -1;
|
||||
std::map<int, double> min_areas_per_extruder;
|
||||
auto first_layer = object.get_layer(0);
|
||||
for (auto layerm : first_layer->regions()) {
|
||||
const Layer* target_layer = nullptr;
|
||||
for(auto layer : object.layers()){
|
||||
for(auto layerm : layer->regions()){
|
||||
for(auto& expoly : layerm->raw_slices){
|
||||
if (!offset_ex(expoly, -0.2 * scale_(object.config().line_width)).empty()) {
|
||||
target_layer = layer;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(target_layer)
|
||||
break;
|
||||
}
|
||||
if(target_layer)
|
||||
break;
|
||||
}
|
||||
|
||||
if(!target_layer)
|
||||
return tool_order;
|
||||
|
||||
for (auto layerm : target_layer->regions()) {
|
||||
int extruder_id = layerm->region().config().option("wall_filament")->getInt();
|
||||
for (auto expoly : layerm->raw_slices) {
|
||||
const double nozzle_diameter = object.print()->config().nozzle_diameter.get_at(0);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue