int SkirtBrim::generatePrimarySkirtBrimLines(const coord_t start_distance, size_t primary_line_count, const coord_t primary_extruder_minimal_length, const Polygons& first_layer_outline, Polygons& skirt_brim_primary_extruder) { const Settings& adhesion_settings = Application::getInstance().current_slice->scene.current_mesh_group->settings.get<ExtruderTrain&>("adhesion_extruder_nr").settings; const coord_t primary_extruder_skirt_brim_line_width = adhesion_settings.get<coord_t>("skirt_brim_line_width") * adhesion_settings.get<Ratio>("initial_layer_line_width_factor"); coord_t offset_distance = start_distance - primary_extruder_skirt_brim_line_width / 2; for (unsigned int skirt_brim_number = 0; skirt_brim_number < primary_line_count; skirt_brim_number++) { offset_distance += primary_extruder_skirt_brim_line_width; Polygons outer_skirt_brim_line = first_layer_outline.offset(offset_distance, ClipperLib::jtRound); //Remove small inner skirt and brim holes. Holes have a negative area, remove anything smaller then 100x extrusion "area" for (unsigned int n = 0; n < outer_skirt_brim_line.size(); n++) { double area = outer_skirt_brim_line[n].area(); if (area < 0 && area > -primary_extruder_skirt_brim_line_width * primary_extruder_skirt_brim_line_width * 100) { outer_skirt_brim_line.remove(n--); } } skirt_brim_primary_extruder.add(outer_skirt_brim_line); int length = skirt_brim_primary_extruder.polygonLength(); if (skirt_brim_number + 1 >= primary_line_count && length > 0 && length < primary_extruder_minimal_length) //Make brim or skirt have more lines when total length is too small. { primary_line_count++; } } return offset_distance; }
int SkirtBrim::generatePrimarySkirtBrimLines(int start_distance, unsigned int primary_line_count, const int primary_extruder_skirt_brim_line_width, const int64_t primary_extruder_minimal_length, const Polygons& first_layer_outline, Polygons& skirt_brim_primary_extruder) { int offset_distance = start_distance - primary_extruder_skirt_brim_line_width / 2; for (unsigned int skirt_brim_number = 0; skirt_brim_number < primary_line_count; skirt_brim_number++) { offset_distance += primary_extruder_skirt_brim_line_width; Polygons outer_skirt_brim_line = first_layer_outline.offset(offset_distance, ClipperLib::jtRound); //Remove small inner skirt and brim holes. Holes have a negative area, remove anything smaller then 100x extrusion "area" for (unsigned int n = 0; n < outer_skirt_brim_line.size(); n++) { double area = outer_skirt_brim_line[n].area(); if (area < 0 && area > -primary_extruder_skirt_brim_line_width * primary_extruder_skirt_brim_line_width * 100) { outer_skirt_brim_line.remove(n--); } } skirt_brim_primary_extruder.add(outer_skirt_brim_line); int length = skirt_brim_primary_extruder.polygonLength(); if (skirt_brim_number + 1 >= primary_line_count && length > 0 && length < primary_extruder_minimal_length) //Make brim or skirt have more lines when total length is too small. { primary_line_count++; } } return offset_distance; }