From c8b3899c5e492d1751ad1aca054e6e7df638f1dd Mon Sep 17 00:00:00 2001 From: Ian Bassi Date: Mon, 21 Jul 2025 12:08:43 -0300 Subject: [PATCH] New Fill & Patterns Order (#10055) * New Fill Order Co-Authored-By: Rodrigo <162915171+RF47@users.noreply.github.com> * Reorder Wiki * Support infills grouped * Update old rectilinear profiles into new ZigZag algorithm. Co-Authored-By: dewi-ny-je <2866139+dewi-ny-je@users.noreply.github.com> * Renaming compatibility fix + Rename Wiki Co-Authored-By: SoftFever --------- Co-authored-by: Rodrigo <162915171+RF47@users.noreply.github.com> Co-authored-by: dewi-ny-je <2866139+dewi-ny-je@users.noreply.github.com> Co-authored-by: SoftFever --- .../strength/infill_desc_calculator.xlsx | Bin 29740 -> 34771 bytes .../strength/strength_settings_infill.md | 406 +++++++++--------- src/libslic3r/PrintConfig.cpp | 158 +++---- src/libslic3r/PrintConfig.hpp | 11 +- 4 files changed, 291 insertions(+), 284 deletions(-) diff --git a/doc/print_settings/strength/infill_desc_calculator.xlsx b/doc/print_settings/strength/infill_desc_calculator.xlsx index cbe000af60b37f495bd0da0645402cd3dec5ccd9..655784b1a5eef55329e69163fd094001a5d2413a 100644 GIT binary patch delta 26391 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 [!NOTE] > You can download [infill_desc_calculator.xlsx](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/print_settings/strength/infill_desc_calculator.xlsx?raw=true) used to calculate the values above. -### Concentric - -Fills the area with progressively smaller versions of the outer contour, creating a concentric pattern. Ideal for 100% infill or flexible prints. - -- **Horizontal Strength (X-Y):** Low -- **Vertical Strength (Z):** Normal -- **Density Calculation:** % of total infill volume -- **Material Usage:** Normal -- **Print Time:** Normal -- **Material/Time (Higher better):** Normal-High - -![infill-top-concentric](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-concentric.png?raw=true) - ### Rectilinear Parallel lines spaced according to infill density. Each layer is printed perpendicular to the previous, resulting in low vertical bonding. Consider using new [Zig Zag](#zig-zag) infill instead. @@ -224,31 +211,58 @@ Parallel lines spaced according to infill density. Each layer is printed perpend ![infill-top-rectilinear](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-rectilinear.png?raw=true) -### Grid +### Aligned Rectilinear -Two-layer pattern of perpendicular lines, forming a grid. Overlapping points may cause noise or artifacts. +Parallel lines spaced by the infill spacing, each layer printed in the same direction as the previous layer. Good horizontal strength perpendicular to the lines, but terrible in parallel direction. +Recommended with layer anchoring to improve not perpendicular strength. -- **Horizontal Strength (X-Y):** High -- **Vertical Strength (Z):** High +- **Horizontal Strength (X-Y):** Normal-Low +- **Vertical Strength (Z):** Normal - **Density Calculation:** % of total infill volume - **Material Usage:** Normal - **Print Time:** Normal-Low - **Material/Time (Higher better):** Normal -![infill-top-grid](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-grid.png?raw=true) +![infill-top-aligned-rectilinear](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-aligned-rectilinear.png?raw=true) -### 2D Lattice +### Zig Zag -Low-strength pattern with good flexibility. You can adjust **Angle 1** and **Angle 2** to optimize the infill for your specific model. Each angle adjusts the plane of each layer generated by the pattern. 0° is vertical. +Similar to [rectilinear](#rectilinear) with consistent pattern between layers. Allows you to add a Symmetric infill Y axis for models with two symmetric parts. - **Horizontal Strength (X-Y):** Normal-Low - **Vertical Strength (Z):** Low - **Density Calculation:** % of total infill volume - **Material Usage:** Normal -- **Print Time:** Normal-Low +- **Print Time:** Normal - **Material/Time (Higher better):** Normal -![infill-top-2d-lattice](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-2d-lattice.png?raw=true) +![infill-top-zig-zag](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-zig-zag.png?raw=true) + +### Cross Zag + +Similar to [Zig Zag](#zig-zag) but displacing each layer with Infill shift step parameter. + +- **Horizontal Strength (X-Y):** Normal +- **Vertical Strength (Z):** Low +- **Density Calculation:** % of total infill volume +- **Material Usage:** Normal +- **Print Time:** Normal +- **Material/Time (Higher better):** Normal + +![infill-top-cross-zag](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-cross-zag.png?raw=true) + +### Locked Zag + +Adaptive version of [Zig Zag](#zig-zag) adding an external skin texture to interlock layers and a low material skeleton. + +- **Horizontal Strength (X-Y):** Normal-Low +- **Vertical Strength (Z):** Normal-Low +- **Density Calculation:** Same as [Zig Zag](#zig-zag) but increasing near walls +- **Material Usage:** Normal-High +- **Print Time:** Extra-High +- **Material/Time (Higher better):** Low + +![infill-top-locked-zag](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-locked-zag.png?raw=true) ### Line @@ -263,18 +277,18 @@ Similar to [rectilinear](#rectilinear), but each line is slightly rotated to imp ![infill-top-line](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-line.png?raw=true) -### Cubic +### Grid -3D cube pattern with corners facing down, distributing force in all directions. Triangles in the horizontal plane provide good X-Y strength. +Two-layer pattern of perpendicular lines, forming a grid. Overlapping points may cause noise or artifacts. - **Horizontal Strength (X-Y):** High - **Vertical Strength (Z):** High - **Density Calculation:** % of total infill volume - **Material Usage:** Normal - **Print Time:** Normal-Low -- **Material/Time (Higher better):** Normal-High +- **Material/Time (Higher better):** Normal -![infill-top-cubic](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-cubic.png?raw=true) +![infill-top-grid](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-grid.png?raw=true) ### Triangles @@ -302,44 +316,18 @@ Similar to the [triangles](#triangles) pattern but offset to prevent triple over ![infill-top-tri-hexagon](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-tri-hexagon.png?raw=true) -### Gyroid +### Cubic -Mathematical, isotropic surface providing equal strength in all directions. Excellent for strong, flexible prints and resin filling due to its interconnected structure. This pattern may require more time to slice because of all the points needed to generate each curve. If your model has complex geometry, consider using a simpler infill pattern like [TPMS-D](#tpms-d) or [Cross Hatch](#cross-hatch). +3D cube pattern with corners facing down, distributing force in all directions. Triangles in the horizontal plane provide good X-Y strength. - **Horizontal Strength (X-Y):** High - **Vertical Strength (Z):** High - **Density Calculation:** % of total infill volume - **Material Usage:** Normal -- **Print Time:** Normal-High -- **Material/Time (Higher better):** Normal-Low +- **Print Time:** Normal-Low +- **Material/Time (Higher better):** Normal-High -![infill-top-gyroid](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-gyroid.png?raw=true) - -### TPMS-D - -Triply Periodic Minimal Surface (Schwarz Diamond). Hybrid between [Cross Hatch](#cross-hatch) and [Gyroid](#gyroid), combining rigidity and smooth transitions. Isotropic and strong in all directions. This geometry is faster to slice than Gyroid, but slower than Cross Hatch. - -- **Horizontal Strength (X-Y):** High -- **Vertical Strength (Z):** High -- **Density Calculation:** % of total infill volume -- **Material Usage:** Normal -- **Print Time:** High -- **Material/Time (Higher better):** Normal-Low - -![infill-top-tpms-d](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-tpms-d.png?raw=true) - -### Honeycomb - -Hexagonal pattern balancing strength and material use. Double walls in each hexagon increase material consumption. - -- **Horizontal Strength (X-Y):** High -- **Vertical Strength (Z):** High -- **Density Calculation:** % of total infill volume -- **Material Usage:** High -- **Print Time:** Ultra-High -- **Material/Time (Higher better):** Low - -![infill-top-honeycomb](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-honeycomb.png?raw=true) +![infill-top-cubic](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-cubic.png?raw=true) ### Adaptive Cubic @@ -354,19 +342,70 @@ Hexagonal pattern balancing strength and material use. Double walls in each hexa ![infill-top-adaptive-cubic](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-adaptive-cubic.png?raw=true) -### Aligned Rectilinear +### Quarter Cubic -Parallel lines spaced by the infill spacing, each layer printed in the same direction as the previous layer. Good horizontal strength perpendicular to the lines, but terrible in parallel direction. -Recommended with layer anchoring to improve not perpendicular strength. +[Cubic](#cubic) pattern with extra internal divisions, improving X-Y strength. -- **Horizontal Strength (X-Y):** Normal-Low -- **Vertical Strength (Z):** Normal +- **Horizontal Strength (X-Y):** High +- **Vertical Strength (Z):** High - **Density Calculation:** % of total infill volume - **Material Usage:** Normal - **Print Time:** Normal-Low - **Material/Time (Higher better):** Normal -![infill-top-aligned-rectilinear](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-aligned-rectilinear.png?raw=true) +![infill-top-quarter-cubic](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-quarter-cubic.png?raw=true) + +### Support Cubic + +Support |Cubic is a variation of the [Cubic](#cubic) infill pattern that is specifically designed for support top layers. Will use more material than Lightning infill but will provide better strength. Nevertheless, it is still a low-density infill pattern. + +- **Horizontal Strength (X-Y):** Low +- **Vertical Strength (Z):** Low +- **Density Calculation:** % of layer before top shell layers +- **Material Usage:** Extra-Low +- **Print Time:** Extra-Low +- **Material/Time (Higher better):** Normal + +![infill-top-support-cubic](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-support-cubic.png?raw=true) + +### Lightning + +Ultra-fast, ultra-low material infill. Designed for speed and efficiency, ideal for quick prints or non-structural prototypes. + +- **Horizontal Strength (X-Y):** Low +- **Vertical Strength (Z):** Low +- **Density Calculation:** % of layer before top shell layers +- **Material Usage:** Ultra-Low +- **Print Time:** Ultra-Low +- **Material/Time (Higher better):** Low + +![infill-top-lightning](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-lightning.png?raw=true) + +### Honeycomb + +Hexagonal pattern balancing strength and material use. Double walls in each hexagon increase material consumption. + +- **Horizontal Strength (X-Y):** High +- **Vertical Strength (Z):** High +- **Density Calculation:** % of total infill volume +- **Material Usage:** High +- **Print Time:** Ultra-High +- **Material/Time (Higher better):** Low + +![infill-top-honeycomb](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-honeycomb.png?raw=true) + +### 3D Honeycomb + +This infill tries to generate a printable honeycomb structure by printing squares and octagons maintaining a vertical angle high enough to maintain contact with the previous layer. + +- **Horizontal Strength (X-Y):** Normal-High +- **Vertical Strength (Z):** Normal-High +- **Density Calculation:** Unknown +- **Material Usage:** Normal-Low +- **Print Time:** High +- **Material/Time (Higher better):** Low + +![infill-top-3d-honeycomb](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-3d-honeycomb.png?raw=true) ### 2D Honeycomb @@ -381,18 +420,71 @@ Vertical Honeycomb pattern. Acceptable torsional stiffness. Developed for low de ![infill-top-2d-honeycomb](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-2d-honeycomb.png?raw=true) -### 3D Honeycomb +### 2D Lattice -This infill tries to generate a printable honeycomb structure by printing squares and octagons maintaining a vertical angle high enough to maintain contact with the previous layer. +Low-strength pattern with good flexibility. You can adjust **Angle 1** and **Angle 2** to optimize the infill for your specific model. Each angle adjusts the plane of each layer generated by the pattern. 0° is vertical. + +- **Horizontal Strength (X-Y):** Normal-Low +- **Vertical Strength (Z):** Low +- **Density Calculation:** % of total infill volume +- **Material Usage:** Normal +- **Print Time:** Normal-Low +- **Material/Time (Higher better):** Normal + +![infill-top-2d-lattice](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-2d-lattice.png?raw=true) + +### Cross Hatch + +Similar to [Gyroid](#gyroid) but with linear patterns, creating weak points at internal corners. +Easier to slice but consider using [TPMS-D](#tpms-d) or [Gyroid](#gyroid) for better strength and flexibility. - **Horizontal Strength (X-Y):** Normal-High - **Vertical Strength (Z):** Normal-High -- **Density Calculation:** Unknown -- **Material Usage:** Normal-Low -- **Print Time:** High -- **Material/Time (Higher better):** Low +- **Density Calculation:** % of total infill volume +- **Material Usage:** Normal +- **Print Time:** Normal-High +- **Material/Time (Higher better):** Normal-Low -![infill-top-3d-honeycomb](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-3d-honeycomb.png?raw=true) +![infill-top-cross-hatch](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-cross-hatch.png?raw=true) + +### TPMS-D + +Triply Periodic Minimal Surface (Schwarz Diamond). Hybrid between [Cross Hatch](#cross-hatch) and [Gyroid](#gyroid), combining rigidity and smooth transitions. Isotropic and strong in all directions. This geometry is faster to slice than Gyroid, but slower than Cross Hatch. + +- **Horizontal Strength (X-Y):** High +- **Vertical Strength (Z):** High +- **Density Calculation:** % of total infill volume +- **Material Usage:** Normal +- **Print Time:** High +- **Material/Time (Higher better):** Normal-Low + +![infill-top-tpms-d](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-tpms-d.png?raw=true) + +### Gyroid + +Mathematical, isotropic surface providing equal strength in all directions. Excellent for strong, flexible prints and resin filling due to its interconnected structure. This pattern may require more time to slice because of all the points needed to generate each curve. If your model has complex geometry, consider using a simpler infill pattern like [TPMS-D](#tpms-d) or [Cross Hatch](#cross-hatch). + +- **Horizontal Strength (X-Y):** High +- **Vertical Strength (Z):** High +- **Density Calculation:** % of total infill volume +- **Material Usage:** Normal +- **Print Time:** Normal-High +- **Material/Time (Higher better):** Normal-Low + +![infill-top-gyroid](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-gyroid.png?raw=true) + +### Concentric + +Fills the area with progressively smaller versions of the outer contour, creating a concentric pattern. Ideal for 100% infill or flexible prints. + +- **Horizontal Strength (X-Y):** Low +- **Vertical Strength (Z):** Normal +- **Density Calculation:** % of total infill volume +- **Material Usage:** Normal +- **Print Time:** Normal +- **Material/Time (Higher better):** Normal-High + +![infill-top-concentric](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-concentric.png?raw=true) ### Hilbert Curve @@ -433,95 +525,3 @@ Esthetic pattern with low strength and high print time. - **Material/Time (Higher better):** Normal-Low ![infill-top-octagram-spiral](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-octagram-spiral.png?raw=true) - -### Support Cubic - -Support |Cubic is a variation of the [Cubic](#cubic) infill pattern that is specifically designed for support top layers. Will use more material than Lightning infill but will provide better strength. Nevertheless, it is still a low-density infill pattern. - -- **Horizontal Strength (X-Y):** Low -- **Vertical Strength (Z):** Low -- **Density Calculation:** % of layer before top shell layers -- **Material Usage:** Extra-Low -- **Print Time:** Extra-Low -- **Material/Time (Higher better):** Normal - -![infill-top-support-cubic](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-support-cubic.png?raw=true) - -### Lightning - -Ultra-fast, ultra-low material infill. Designed for speed and efficiency, ideal for quick prints or non-structural prototypes. - -- **Horizontal Strength (X-Y):** Low -- **Vertical Strength (Z):** Low -- **Density Calculation:** % of layer before top shell layers -- **Material Usage:** Ultra-Low -- **Print Time:** Ultra-Low -- **Material/Time (Higher better):** Low - -![infill-top-lightning](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-lightning.png?raw=true) - -### Cross Hatch - -Similar to [Gyroid](#gyroid) but with linear patterns, creating weak points at internal corners. -Easier to slice but consider using [TPMS-D](#tpms-d) or [Gyroid](#gyroid) for better strength and flexibility. - -- **Horizontal Strength (X-Y):** Normal-High -- **Vertical Strength (Z):** Normal-High -- **Density Calculation:** % of total infill volume -- **Material Usage:** Normal -- **Print Time:** Normal-High -- **Material/Time (Higher better):** Normal-Low - -![infill-top-cross-hatch](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-cross-hatch.png?raw=true) - -### Quarter Cubic - -[Cubic](#cubic) pattern with extra internal divisions, improving X-Y strength. - -- **Horizontal Strength (X-Y):** High -- **Vertical Strength (Z):** High -- **Density Calculation:** % of total infill volume -- **Material Usage:** Normal -- **Print Time:** Normal-Low -- **Material/Time (Higher better):** Normal - -![infill-top-quarter-cubic](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-quarter-cubic.png?raw=true) - -### Zig Zag - -Similar to [rectilinear](#rectilinear) with consistent pattern between layers. Allows you to add a Symmetric infill Y axis for models with two symmetric parts. - -- **Horizontal Strength (X-Y):** Normal-Low -- **Vertical Strength (Z):** Low -- **Density Calculation:** % of total infill volume -- **Material Usage:** Normal -- **Print Time:** Normal -- **Material/Time (Higher better):** Normal - -![infill-top-zig-zag](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-zig-zag.png?raw=true) - -### Cross Zag - -Similar to [Zig Zag](#zig-zag) but displacing each layer with Infill shift step parameter. - -- **Horizontal Strength (X-Y):** Normal -- **Vertical Strength (Z):** Low -- **Density Calculation:** % of total infill volume -- **Material Usage:** Normal -- **Print Time:** Normal -- **Material/Time (Higher better):** Normal - -![infill-top-cross-zag](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-cross-zag.png?raw=true) - -### Locked Zag - -Adaptive version of [Zig Zag](#zig-zag) adding an external skin texture to interlock layers and a low material skeleton. - -- **Horizontal Strength (X-Y):** Normal-Low -- **Vertical Strength (Z):** Normal-Low -- **Density Calculation:** Same as [Zig Zag](#zig-zag) but increasing near walls -- **Material Usage:** Normal-High -- **Print Time:** Extra-High -- **Material/Time (Higher better):** Low - -![infill-top-locked-zag](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/images/fill/infill-top-locked-zag.png?raw=true) diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index 2b4f53af69..036980d042 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -137,33 +137,33 @@ static t_config_enum_values s_keys_map_NoiseType { CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(NoiseType) static t_config_enum_values s_keys_map_InfillPattern { - { "concentric", ipConcentric }, - { "zig-zag", ipRectilinear }, - { "grid", ipGrid }, - { "2dlattice", ip2DLattice }, - { "line", ipLine }, - { "cubic", ipCubic }, - { "triangles", ipTriangles }, - { "tri-hexagon", ipStars }, - { "gyroid", ipGyroid }, - { "tpmsd", ipTpmsD },//TpmsD from CrealityPrint - { "honeycomb", ipHoneycomb }, - { "adaptivecubic", ipAdaptiveCubic }, - { "monotonic", ipMonotonic }, - { "monotonicline", ipMonotonicLine }, + { "monotonic", ipMonotonic }, + { "monotonicline", ipMonotonicLine }, + { "rectilinear", ipRectilinear }, { "alignedrectilinear", ipAlignedRectilinear }, - { "2dhoneycomb", ip2DHoneycomb }, - { "3dhoneycomb", ip3DHoneycomb }, - { "hilbertcurve", ipHilbertCurve }, - { "archimedeanchords", ipArchimedeanChords }, - { "octagramspiral", ipOctagramSpiral }, - { "supportcubic", ipSupportCubic }, - { "lightning", ipLightning }, - { "crosshatch", ipCrossHatch}, - { "quartercubic", ipQuarterCubic}, - { "zigzag", ipZigZag }, - { "crosszag", ipCrossZag }, - { "lockedzag", ipLockedZag } + { "zigzag", ipZigZag }, + { "crosszag", ipCrossZag }, + { "lockedzag", ipLockedZag }, + { "line", ipLine }, + { "grid", ipGrid }, + { "triangles", ipTriangles }, + { "tri-hexagon", ipStars }, + { "cubic", ipCubic }, + { "adaptivecubic", ipAdaptiveCubic }, + { "quartercubic", ipQuarterCubic }, + { "supportcubic", ipSupportCubic }, + { "lightning", ipLightning }, + { "honeycomb", ipHoneycomb }, + { "3dhoneycomb", ip3DHoneycomb }, + { "2dhoneycomb", ip2DHoneycomb }, + { "2dlattice", ip2DLattice }, + { "crosshatch", ipCrossHatch }, + { "tpmsd", ipTpmsD }, + { "gyroid", ipGyroid }, + { "concentric", ipConcentric }, + { "hilbertcurve", ipHilbertCurve }, + { "archimedeanchords", ipArchimedeanChords }, + { "octagramspiral", ipOctagramSpiral } }; CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(InfillPattern) @@ -226,8 +226,8 @@ CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(SlicingMode) static t_config_enum_values s_keys_map_SupportMaterialPattern { { "rectilinear", smpRectilinear }, { "rectilinear-grid", smpRectilinearGrid }, - { "honeycomb", smpHoneycomb }, { "lightning", smpLightning }, + { "honeycomb", smpHoneycomb }, { "default", smpDefault}, { "hollow", smpNone}, }; @@ -1610,19 +1610,19 @@ void PrintConfigDef::init_fff_params() def->category = L("Strength"); def->tooltip = L("Line pattern of top surface infill."); def->enum_keys_map = &ConfigOptionEnum::get_enum_values(); - def->enum_values.push_back("concentric"); - def->enum_values.push_back("zig-zag"); def->enum_values.push_back("monotonic"); def->enum_values.push_back("monotonicline"); + def->enum_values.push_back("rectilinear"); def->enum_values.push_back("alignedrectilinear"); + def->enum_values.push_back("concentric"); def->enum_values.push_back("hilbertcurve"); def->enum_values.push_back("archimedeanchords"); def->enum_values.push_back("octagramspiral"); - def->enum_labels.push_back(L("Concentric")); - def->enum_labels.push_back(L("Rectilinear")); def->enum_labels.push_back(L("Monotonic")); def->enum_labels.push_back(L("Monotonic line")); + def->enum_labels.push_back(L("Rectilinear")); def->enum_labels.push_back(L("Aligned Rectilinear")); + def->enum_labels.push_back(L("Concentric")); def->enum_labels.push_back(L("Hilbert Curve")); def->enum_labels.push_back(L("Archimedean Chords")); def->enum_labels.push_back(L("Octagram Spiral")); @@ -2374,56 +2374,56 @@ void PrintConfigDef::init_fff_params() def->category = L("Strength"); def->tooltip = L("Line pattern for internal sparse infill."); def->enum_keys_map = &ConfigOptionEnum::get_enum_values(); - def->enum_values.push_back("concentric"); - def->enum_values.push_back("zig-zag"); - def->enum_values.push_back("grid"); - def->enum_values.push_back("2dlattice"); - def->enum_values.push_back("line"); - def->enum_values.push_back("cubic"); - def->enum_values.push_back("triangles"); - def->enum_values.push_back("tri-hexagon"); - def->enum_values.push_back("gyroid"); - def->enum_values.push_back("tpmsd"); - def->enum_values.push_back("honeycomb"); - def->enum_values.push_back("adaptivecubic"); + def->enum_values.push_back("rectilinear"); def->enum_values.push_back("alignedrectilinear"); - def->enum_values.push_back("2dhoneycomb"); - def->enum_values.push_back("3dhoneycomb"); - def->enum_values.push_back("hilbertcurve"); - def->enum_values.push_back("archimedeanchords"); - def->enum_values.push_back("octagramspiral"); - def->enum_values.push_back("supportcubic"); - def->enum_values.push_back("lightning"); - def->enum_values.push_back("crosshatch"); - def->enum_values.push_back("quartercubic"); def->enum_values.push_back("zigzag"); def->enum_values.push_back("crosszag"); def->enum_values.push_back("lockedzag"); - def->enum_labels.push_back(L("Concentric")); + def->enum_values.push_back("line"); + def->enum_values.push_back("grid"); + def->enum_values.push_back("triangles"); + def->enum_values.push_back("tri-hexagon"); + def->enum_values.push_back("cubic"); + def->enum_values.push_back("adaptivecubic"); + def->enum_values.push_back("quartercubic"); + def->enum_values.push_back("supportcubic"); + def->enum_values.push_back("lightning"); + def->enum_values.push_back("honeycomb"); + def->enum_values.push_back("3dhoneycomb"); + def->enum_values.push_back("2dhoneycomb"); + def->enum_values.push_back("2dlattice"); + def->enum_values.push_back("crosshatch"); + def->enum_values.push_back("tpmsd"); + def->enum_values.push_back("gyroid"); + def->enum_values.push_back("concentric"); + def->enum_values.push_back("hilbertcurve"); + def->enum_values.push_back("archimedeanchords"); + def->enum_values.push_back("octagramspiral"); def->enum_labels.push_back(L("Rectilinear")); - def->enum_labels.push_back(L("Grid")); - def->enum_labels.push_back(L("2D Lattice")); - def->enum_labels.push_back(L("Line")); - def->enum_labels.push_back(L("Cubic")); - def->enum_labels.push_back(L("Triangles")); - def->enum_labels.push_back(L("Tri-hexagon")); - def->enum_labels.push_back(L("Gyroid")); - def->enum_labels.push_back(L("TPMS-D")); - def->enum_labels.push_back(L("Honeycomb")); - def->enum_labels.push_back(L("Adaptive Cubic")); def->enum_labels.push_back(L("Aligned Rectilinear")); - def->enum_labels.push_back(L("2D Honeycomb")); - def->enum_labels.push_back(L("3D Honeycomb")); - def->enum_labels.push_back(L("Hilbert Curve")); - def->enum_labels.push_back(L("Archimedean Chords")); - def->enum_labels.push_back(L("Octagram Spiral")); - def->enum_labels.push_back(L("Support Cubic")); - def->enum_labels.push_back(L("Lightning")); - def->enum_labels.push_back(L("Cross Hatch")); - def->enum_labels.push_back(L("Quarter Cubic")); def->enum_labels.push_back(L("Zig Zag")); def->enum_labels.push_back(L("Cross Zag")); def->enum_labels.push_back(L("Locked Zag")); + def->enum_labels.push_back(L("Line")); + def->enum_labels.push_back(L("Grid")); + def->enum_labels.push_back(L("Triangles")); + def->enum_labels.push_back(L("Tri-hexagon")); + def->enum_labels.push_back(L("Cubic")); + def->enum_labels.push_back(L("Adaptive Cubic")); + def->enum_labels.push_back(L("Quarter Cubic")); + def->enum_labels.push_back(L("Support Cubic")); + def->enum_labels.push_back(L("Lightning")); + def->enum_labels.push_back(L("Honeycomb")); + def->enum_labels.push_back(L("3D Honeycomb")); + def->enum_labels.push_back(L("2D Honeycomb")); + def->enum_labels.push_back(L("2D Lattice")); + def->enum_labels.push_back(L("Cross Hatch")); + def->enum_labels.push_back(L("TPMS-D")); + def->enum_labels.push_back(L("Gyroid")); + def->enum_labels.push_back(L("Concentric")); + def->enum_labels.push_back(L("Hilbert Curve")); + def->enum_labels.push_back(L("Archimedean Chords")); + def->enum_labels.push_back(L("Octagram Spiral")); def->set_default_value(new ConfigOptionEnum(ipCrossHatch)); def = this->add("lattice_angle_1", coFloat); @@ -3418,10 +3418,10 @@ void PrintConfigDef::init_fff_params() def->tooltip = L("The pattern that will be used when ironing."); def->category = L("Quality"); def->enum_keys_map = &ConfigOptionEnum::get_enum_values(); + def->enum_values.push_back("rectilinear"); def->enum_values.push_back("concentric"); - def->enum_values.push_back("zig-zag"); - def->enum_labels.push_back(L("Concentric")); def->enum_labels.push_back(L("Rectilinear")); + def->enum_labels.push_back(L("Concentric")); def->mode = comAdvanced; def->set_default_value(new ConfigOptionEnum(ipRectilinear)); @@ -5051,14 +5051,14 @@ void PrintConfigDef::init_fff_params() def->enum_values.push_back("default"); def->enum_values.push_back("rectilinear"); def->enum_values.push_back("rectilinear-grid"); - def->enum_values.push_back("honeycomb"); def->enum_values.push_back("lightning"); + def->enum_values.push_back("honeycomb"); def->enum_values.push_back("hollow"); def->enum_labels.push_back(L("Default")); def->enum_labels.push_back(L("Rectilinear")); def->enum_labels.push_back(L("Rectilinear grid")); - def->enum_labels.push_back(L("Honeycomb")); def->enum_labels.push_back(L("Lightning")); + def->enum_labels.push_back(L("Honeycomb")); def->enum_labels.push_back(L("Hollow")); def->mode = comAdvanced; def->set_default_value(new ConfigOptionEnum(smpDefault)); @@ -5327,10 +5327,10 @@ void PrintConfigDef::init_fff_params() def->tooltip = L("The pattern that will be used when ironing."); def->category = L("Support"); def->enum_keys_map = &ConfigOptionEnum::get_enum_values(); + def->enum_values.push_back("rectilinear"); def->enum_values.push_back("concentric"); - def->enum_values.push_back("zig-zag"); - def->enum_labels.push_back(L("Concentric")); def->enum_labels.push_back(L("Rectilinear")); + def->enum_labels.push_back(L("Concentric")); def->mode = comAdvanced; def->set_default_value(new ConfigOptionEnum(ipRectilinear)); @@ -6835,6 +6835,8 @@ void PrintConfigDef::handle_legacy(t_config_option_key &opt_key, std::string &va opt_key = "counterbore_hole_bridging"; } else if (opt_key == "draft_shield" && value == "limited") { value = "disabled"; + } else if (opt_key == "sparse_infill_pattern" && value == "zig-zag") { + value = "rectilinear"; } // Ignore the following obsolete configuration keys: diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp index f09a1b5e49..4a1f5fb420 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -58,9 +58,14 @@ enum AuthorizationType { }; enum InfillPattern : int { - ipConcentric, ipRectilinear, ipGrid, ip2DLattice, ipLine, ipCubic, ipTriangles, ipStars, ipGyroid, ipTpmsD, ipHoneycomb, ipAdaptiveCubic, ipMonotonic, ipMonotonicLine, ipAlignedRectilinear, ip2DHoneycomb, ip3DHoneycomb, - ipHilbertCurve, ipArchimedeanChords, ipOctagramSpiral, ipSupportCubic, ipSupportBase, ipConcentricInternal, - ipLightning, ipCrossHatch, ipQuarterCubic, ipZigZag, ipCrossZag, ipLockedZag, + ipRectilinear, ipAlignedRectilinear, ipZigZag, ipCrossZag, ipLockedZag, + ipLine, ipGrid, ipMonotonic, ipMonotonicLine, + ipTriangles, ipStars, + ipCubic, ipAdaptiveCubic, ipQuarterCubic, ipSupportCubic, ipLightning, + ipHoneycomb, ip3DHoneycomb, ip2DHoneycomb, ip2DLattice, + ipCrossHatch, ipTpmsD, ipGyroid, + ipConcentric, ipHilbertCurve, ipArchimedeanChords, ipOctagramSpiral, + ipSupportBase, ipConcentricInternal, ipCount, };