void Infill::generate(Polygons& result_polygons, Polygons& result_lines, Polygons* in_between) { if (in_outline.size() == 0) return; if (line_distance == 0) return; const Polygons* outline = &in_outline; Polygons outline_offsetted; switch(pattern) { case EFillMethod::GRID: generateGridInfill(in_outline, outlineOffset, result_lines, extrusion_width, line_distance * 2, infill_overlap, fill_angle); break; case EFillMethod::LINES: generateLineInfill(in_outline, outlineOffset, result_lines, extrusion_width, line_distance, infill_overlap, fill_angle); break; case EFillMethod::TRIANGLES: generateTriangleInfill(in_outline, outlineOffset, result_lines, extrusion_width, line_distance * 3, infill_overlap, fill_angle); break; case EFillMethod::CONCENTRIC: if (outlineOffset != 0) { PolygonUtils::offsetSafe(in_outline, outlineOffset, extrusion_width, outline_offsetted, avoidOverlappingPerimeters); outline = &outline_offsetted; } if (abs(extrusion_width - line_distance) < 10) { generateConcentricInfillDense(*outline, result_polygons, in_between, extrusion_width, avoidOverlappingPerimeters); } else { generateConcentricInfill(*outline, result_polygons, line_distance); } break; case EFillMethod::ZIG_ZAG: if (outlineOffset != 0) { PolygonUtils::offsetSafe(in_outline, outlineOffset, extrusion_width, outline_offsetted, avoidOverlappingPerimeters); outline = &outline_offsetted; } generateZigZagInfill(*outline, result_lines, extrusion_width, line_distance, infill_overlap, fill_angle, connect_zigzags, use_endPieces); break; default: logError("Fill pattern has unknown value.\n"); break; } }
void Infill::generate(Polygons& result_polygons, Polygons& result_lines, SliceMeshStorage* mesh) { if (in_outline.size() == 0) return; if (line_distance == 0) return; Polygons outline_offsetted; switch(pattern) { case EFillMethod::GRID: generateGridInfill(result_lines); break; case EFillMethod::LINES: generateLineInfill(result_lines, line_distance, fill_angle, 0); break; case EFillMethod::CUBIC: generateCubicInfill(result_lines); break; case EFillMethod::TETRAHEDRAL: generateTetrahedralInfill(result_lines); break; case EFillMethod::TRIANGLES: generateTriangleInfill(result_lines); break; case EFillMethod::CONCENTRIC: generateConcentricInfill(result_polygons, line_distance); break; case EFillMethod::CONCENTRIC_3D: generateConcentric3DInfill(result_polygons); break; case EFillMethod::ZIG_ZAG: generateZigZagInfill(result_lines, line_distance, fill_angle, connected_zigzags, use_endpieces); break; case EFillMethod::CUBICSUBDIV: if (!mesh) { logError("Cannot generate Cubic Subdivision infill without a mesh!\n"); break; } generateCubicSubDivInfill(result_lines, *mesh); break; default: logError("Fill pattern has unknown value.\n"); break; } }