Merge branch 'main' into CURA-11482_sentry

This commit is contained in:
Jelle Spijker 2024-01-10 19:53:19 +01:00
commit 26b1a3de56
No known key found for this signature in database
GPG Key ID: 034D1C0527888B65
63 changed files with 165 additions and 80 deletions

View File

@ -0,0 +1,95 @@
# Copyright (c) 2024 UltiMaker
# Cura is released under the terms of the LGPLv3 or higher.
import configparser
from typing import Tuple, List
import io
from UM.VersionUpgrade import VersionUpgrade
_REMOVED_SETTINGS = {
"support_interface_skip_height",
}
_NEW_SETTING_VERSION = "23"
class VersionUpgrade56to57(VersionUpgrade):
def upgradePreferences(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]:
"""
Upgrades preferences to remove from the visibility list the settings that were removed in this version.
It also changes the preferences to have the new version number.
This removes any settings that were removed in the new Cura version.
:param serialized: The original contents of the preferences file.
:param filename: The file name of the preferences file.
:return: A list of new file names, and a list of the new contents for
those files.
"""
parser = configparser.ConfigParser(interpolation = None)
parser.read_string(serialized)
# Update version number.
parser["metadata"]["setting_version"] = _NEW_SETTING_VERSION
# Remove deleted settings from the visible settings list.
if "general" in parser and "visible_settings" in parser["general"]:
visible_settings = set(parser["general"]["visible_settings"].split(";"))
for removed in _REMOVED_SETTINGS:
if removed in visible_settings:
visible_settings.remove(removed)
parser["general"]["visible_settings"] = ";".join(visible_settings)
result = io.StringIO()
parser.write(result)
return [filename], [result.getvalue()]
def upgradeInstanceContainer(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]:
"""
Upgrades instance containers to remove the settings that were removed in this version.
It also changes the instance containers to have the new version number.
This removes any settings that were removed in the new Cura version and updates settings that need to be updated
with a new value.
:param serialized: The original contents of the instance container.
:param filename: The original file name of the instance container.
:return: A list of new file names, and a list of the new contents for
those files.
"""
parser = configparser.ConfigParser(interpolation = None, comment_prefixes = ())
parser.read_string(serialized)
# Update version number.
parser["metadata"]["setting_version"] = _NEW_SETTING_VERSION
if "values" in parser:
# Remove deleted settings from the instance containers.
for removed in _REMOVED_SETTINGS:
if removed in parser["values"]:
del parser["values"][removed]
result = io.StringIO()
parser.write(result)
return [filename], [result.getvalue()]
def upgradeStack(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]:
"""
Upgrades stacks to have the new version number.
:param serialized: The original contents of the stack.
:param filename: The original file name of the stack.
:return: A list of new file names, and a list of the new contents for
those files.
"""
parser = configparser.ConfigParser(interpolation = None)
parser.read_string(serialized)
# Update version number.
if "metadata" not in parser:
parser["metadata"] = {}
parser["metadata"]["setting_version"] = _NEW_SETTING_VERSION
result = io.StringIO()
parser.write(result)
return [filename], [result.getvalue()]

View File

@ -0,0 +1,61 @@
# Copyright (c) 2024 UltiMaker
# Cura is released under the terms of the LGPLv3 or higher.
from typing import Any, Dict, TYPE_CHECKING
from . import VersionUpgrade56to57
if TYPE_CHECKING:
from UM.Application import Application
upgrade = VersionUpgrade56to57.VersionUpgrade56to57()
def getMetaData() -> Dict[str, Any]:
return {
"version_upgrade": {
# From To Upgrade function
("preferences", 7000022): ("preferences", 7000023, upgrade.upgradePreferences),
("machine_stack", 6000022): ("machine_stack", 6000023, upgrade.upgradeStack),
("extruder_train", 6000022): ("extruder_train", 6000023, upgrade.upgradeStack),
("definition_changes", 4000022): ("definition_changes", 4000023, upgrade.upgradeInstanceContainer),
("quality_changes", 4000022): ("quality_changes", 4000023, upgrade.upgradeInstanceContainer),
("quality", 4000022): ("quality", 4000023, upgrade.upgradeInstanceContainer),
("user", 4000022): ("user", 4000023, upgrade.upgradeInstanceContainer),
("intent", 4000022): ("intent", 4000023, upgrade.upgradeInstanceContainer),
},
"sources": {
"preferences": {
"get_version": upgrade.getCfgVersion,
"location": {"."}
},
"machine_stack": {
"get_version": upgrade.getCfgVersion,
"location": {"./machine_instances"}
},
"extruder_train": {
"get_version": upgrade.getCfgVersion,
"location": {"./extruders"}
},
"definition_changes": {
"get_version": upgrade.getCfgVersion,
"location": {"./definition_changes"}
},
"quality_changes": {
"get_version": upgrade.getCfgVersion,
"location": {"./quality_changes"}
},
"quality": {
"get_version": upgrade.getCfgVersion,
"location": {"./quality"}
},
"user": {
"get_version": upgrade.getCfgVersion,
"location": {"./user"}
}
}
}
def register(app: "Application") -> Dict[str, Any]:
return {"version_upgrade": upgrade}

View File

@ -0,0 +1,8 @@
{
"name": "Version Upgrade 5.6 to 5.7",
"author": "UltiMaker",
"version": "1.0.0",
"description": "Upgrades configurations from Cura 5.6 to Cura 5.7.",
"api": 8,
"i18n-catalog": "cura"
}

View File

@ -112,7 +112,6 @@
"support_interface_density": { "value": 33.333 },
"support_interface_enable": { "value": true },
"support_interface_pattern": { "value": "'grid'" },
"support_interface_skip_height": { "value": 0.2 },
"support_roof_enable": { "value": true },
"support_xy_distance": { "value": "wall_line_width_0 * 2" },
"support_xy_distance_overhang": { "value": "wall_line_width_0" },

View File

@ -114,7 +114,6 @@
"support_interface_enable": { "value": true },
"support_interface_height": { "value": "layer_height * 4" },
"support_interface_pattern": { "value": "'grid'" },
"support_interface_skip_height": { "value": 0.2 },
"support_xy_distance": { "value": "wall_line_width_0 * 2" },
"support_xy_distance_overhang": { "value": "wall_line_width_0" },
"support_xy_overrides_z": { "value": "'xy_overrides_z'" },

View File

@ -154,7 +154,6 @@
"support_infill_rate": { "value": "20" },
"support_interface_enable": { "value": "True" },
"support_interface_height": { "value": "1" },
"support_interface_skip_height": { "value": "layer_height" },
"support_join_distance": { "value": "1" },
"support_offset": { "value": "1.5" },
"support_pattern": { "default_value": "zigzag" },

View File

@ -108,7 +108,6 @@
"support_interface_enable": { "value": true },
"support_interface_height": { "value": "layer_height * 4" },
"support_interface_pattern": { "value": "'grid'" },
"support_interface_skip_height": { "value": 0.2 },
"support_pattern": { "value": "'zigzag'" },
"support_wall_count": { "value": 1 },
"support_xy_distance": { "value": "wall_line_width_0 * 2" },

View File

@ -97,7 +97,6 @@
"support_interface_enable": { "value": true },
"support_interface_height": { "value": "layer_height * 4" },
"support_interface_pattern": { "value": "'grid'" },
"support_interface_skip_height": { "value": 0.2 },
"support_pattern": { "value": "'zigzag'" },
"support_xy_distance": { "value": "wall_line_width_0 * 2" },
"support_xy_distance_overhang": { "value": "wall_line_width_0" },

View File

@ -5423,20 +5423,6 @@
}
}
},
"support_interface_skip_height":
{
"label": "Support Interface Resolution",
"description": "When checking where there's model above and below the support, take steps of the given height. Lower values will slice slower, while higher values may cause normal support to be printed in some places where there should have been support interface.",
"unit": "mm",
"type": "float",
"default_value": 0.2,
"value": "layer_height",
"minimum_value": "0",
"maximum_value_warning": "support_interface_height",
"limit_to_extruder": "support_interface_extruder_nr",
"enabled": "support_interface_enable and (support_enable or support_meshes_present)",
"settable_per_mesh": true
},
"support_interface_density":
{
"label": "Support Interface Density",

View File

@ -92,7 +92,6 @@
"support_interface_height": { "value": "layer_height * 4" },
"support_interface_line_width": { "value": "line_width - 0.1" },
"support_interface_pattern": { "value": "'grid'" },
"support_interface_skip_height": { "value": 0.2 },
"support_pattern": { "value": "'zigzag'" },
"support_wall_count": { "value": 1 },
"support_xy_distance": { "value": "wall_line_width_0 * 2" },

View File

@ -112,7 +112,6 @@
"support_interface_density": { "value": 33.333 },
"support_interface_height": { "value": "layer_height * 4" },
"support_interface_pattern": { "value": "'grid'" },
"support_interface_skip_height": { "value": 0.2 },
"support_pattern": { "value": "'zigzag'" },
"support_wall_count": { "value": 0 },
"support_xy_distance": { "value": "wall_line_width_0 * 3" },

View File

@ -133,7 +133,6 @@
"support_interface_enable": { "value": true },
"support_interface_height": { "value": "layer_height * 4" },
"support_interface_pattern": { "value": "'grid'" },
"support_interface_skip_height": { "value": 0.2 },
"support_pattern": { "value": "'zigzag'" },
"support_wall_count": { "value": 1 },
"support_xy_distance": { "value": "wall_line_width_0 * 2" },

View File

@ -70,7 +70,6 @@
"support_interface_enable": { "value": true },
"support_interface_height": { "value": "layer_height * 4" },
"support_interface_pattern": { "value": "'grid'" },
"support_interface_skip_height": { "value": 0.2 },
"support_pattern": { "value": "'zigzag'" },
"support_wall_count": { "value": 1 },
"support_xy_distance": { "value": "wall_line_width_0 * 2" },

View File

@ -88,7 +88,6 @@
"support_interface_enable": { "value": true },
"support_interface_height": { "value": "layer_height * 4" },
"support_interface_pattern": { "value": "'grid'" },
"support_interface_skip_height": { "value": 0.2 },
"support_pattern": { "value": "'zigzag'" },
"support_wall_count": { "value": 1 },
"support_xy_distance": { "value": "wall_line_width_0 * 2" },

View File

@ -88,7 +88,6 @@
"support_interface_enable": { "value": true },
"support_interface_height": { "value": "layer_height * 4" },
"support_interface_pattern": { "value": "'grid'" },
"support_interface_skip_height": { "value": 0.2 },
"support_pattern": { "value": "'zigzag'" },
"support_wall_count": { "value": 1 },
"support_xy_distance": { "value": "wall_line_width_0 * 2" },

View File

@ -109,7 +109,6 @@
"support_interface_enable": { "value": true },
"support_interface_height": { "value": "layer_height * 4" },
"support_interface_pattern": { "value": "'grid'" },
"support_interface_skip_height": { "value": 0.2 },
"support_pattern": { "value": "'zigzag'" },
"support_wall_count": { "value": 1 },
"support_xy_distance": { "value": "wall_line_width_0 * 2" },

View File

@ -119,7 +119,6 @@
"support_interface_enable": { "value": true },
"support_interface_height": { "value": "layer_height * 4" },
"support_interface_pattern": { "value": "'grid'" },
"support_interface_skip_height": { "value": 0.2 },
"support_pattern": { "value": "'zigzag'" },
"support_wall_count": { "value": 1 },
"support_xy_distance": { "value": "wall_line_width_0 * 2" },

View File

@ -70,7 +70,6 @@
"support_interface_enable": { "value": true },
"support_interface_height": { "value": "layer_height * 4" },
"support_interface_pattern": { "value": "'grid'" },
"support_interface_skip_height": { "value": 0.2 },
"support_pattern": { "value": "'zigzag'" },
"support_wall_count": { "value": 1 },
"support_xy_distance": { "value": "wall_line_width_0 * 2" },

View File

@ -111,7 +111,6 @@
"support_interface_density": { "value": 33.333 },
"support_interface_height": { "value": "layer_height * 4" },
"support_interface_pattern": { "value": "'grid'" },
"support_interface_skip_height": { "value": 0.2 },
"support_pattern": { "value": "'zigzag'" },
"support_wall_count": { "value": "1 if (support_structure == 'tree') else 0" },
"support_xy_distance": { "value": "wall_line_width_0 * 3" },

View File

@ -68,7 +68,6 @@
"support_interface_density": { "value": 33.333 },
"support_interface_height": { "value": "layer_height * 4" },
"support_interface_pattern": { "value": "'grid'" },
"support_interface_skip_height": { "value": 0.2 },
"support_pattern": { "value": "'zigzag'" },
"support_wall_count": { "value": "1 if (support_structure == 'tree') else 0" },
"support_xy_distance": { "value": "wall_line_width_0 * 2" },

View File

@ -99,7 +99,6 @@
"support_interface_enable": { "value": true },
"support_interface_height": { "value": "layer_height * 4" },
"support_interface_pattern": { "value": "'grid'" },
"support_interface_skip_height": { "value": 0.2 },
"support_pattern": { "value": "'zigzag'" },
"support_wall_count": { "value": 1 },
"support_xy_distance": { "value": "wall_line_width_0 * 2" },

View File

@ -3548,14 +3548,6 @@ msgctxt "support_bottom_height description"
msgid "The thickness of the support floors. This controls the number of dense layers that are printed on top of places of a model on which support rests."
msgstr ""
msgctxt "support_interface_skip_height label"
msgid "Support Interface Resolution"
msgstr ""
msgctxt "support_interface_skip_height description"
msgid "When checking where there's model above and below the support, take steps of the given height. Lower values will slice slower, while higher values may cause normal support to be printed in some places where there should have been support interface."
msgstr ""
msgctxt "support_interface_density label"
msgid "Support Interface Density"
msgstr ""

View File

@ -79,7 +79,7 @@ Rectangle
anchors.verticalCenter: extruderIcon.verticalCenter
anchors.left: extruderIcon.right
anchors.leftMargin: UM.Theme.getSize("default_margin").width
text: modelData.core
text: modelData ? (modelData.core ? modelData.core : "" ) : ""
font: UM.Theme.getFont("default_bold")
}

View File

@ -33,7 +33,6 @@ support_infill_rate = 20
support_interface_enable = True
support_interface_height = 0.60
support_interface_pattern = zigzag
support_interface_skip_height = 0.30
support_offset = 0.8
support_z_distance = 0.4
wall_thickness = 1.6

View File

@ -33,7 +33,6 @@ support_infill_rate = 20
support_interface_enable = True
support_interface_height = 0.60
support_interface_pattern = zigzag
support_interface_skip_height = 0.20
support_offset = 0.8
support_z_distance = 0.3
wall_thickness = 1.6

View File

@ -33,7 +33,6 @@ support_infill_rate = 20
support_interface_enable = True
support_interface_height = 0.30
support_interface_pattern = zigzag
support_interface_skip_height = 0.06
support_offset = 0.8
support_z_distance = 0.12
wall_thickness = 1.6

View File

@ -33,7 +33,6 @@ support_infill_rate = 20
support_interface_enable = True
support_interface_height = 0.30
support_interface_pattern = zigzag
support_interface_skip_height = 0.10
support_offset = 0.8
support_z_distance = 0.2
wall_thickness = 1.6

View File

@ -33,7 +33,6 @@ support_infill_rate = 20
support_interface_enable = True
support_interface_height = 0.45
support_interface_pattern = zigzag
support_interface_skip_height = 0.15
support_offset = 0.8
support_z_distance = 0.25
wall_thickness = 1.6

View File

@ -33,7 +33,6 @@ support_infill_rate = 20
support_interface_enable = True
support_interface_height = 0.60
support_interface_pattern = zigzag
support_interface_skip_height = 0.30
support_offset = 0.8
support_z_distance = 0.2
wall_thickness = 0.8

View File

@ -33,7 +33,6 @@ support_infill_rate = 20
support_interface_enable = True
support_interface_height = 0.40
support_interface_pattern = zigzag
support_interface_skip_height = 0.20
support_offset = 0.8
support_z_distance = 0.2
wall_thickness = 0.8

View File

@ -33,7 +33,6 @@ support_infill_rate = 20
support_interface_enable = True
support_interface_height = 0.30
support_interface_pattern = zigzag
support_interface_skip_height = 0.06
support_offset = 0.8
support_z_distance = 0.2
wall_thickness = 0.8

View File

@ -33,7 +33,6 @@ support_infill_rate = 20
support_interface_enable = True
support_interface_height = 0.30
support_interface_pattern = zigzag
support_interface_skip_height = 0.10
support_offset = 0.8
support_z_distance = 0.2
wall_thickness = 0.8

View File

@ -33,7 +33,6 @@ support_infill_rate = 20
support_interface_enable = True
support_interface_height = 0.45
support_interface_pattern = zigzag
support_interface_skip_height = 0.15
support_offset = 0.8
support_z_distance = 0.2
wall_thickness = 0.8

View File

@ -65,7 +65,6 @@ support_interface_density = 60
support_interface_enable = True
support_interface_height = 0.96
support_interface_pattern = grid
support_interface_skip_height = 0.12
support_roof_density = 60
support_type = everywhere
support_wall_count = 1

View File

@ -65,7 +65,6 @@ support_interface_density = 60
support_interface_enable = True
support_interface_height = 0.6
support_interface_pattern = grid
support_interface_skip_height = 0.2
support_roof_density = 60
support_type = everywhere
support_wall_count = 1

View File

@ -100,7 +100,6 @@ support_interface_density = 70
support_interface_enable = True
support_interface_height = 0.6
support_interface_pattern = lines
support_interface_skip_height = 0.2
support_pattern = zigzag
support_roof_density = 70
support_type = everywhere

View File

@ -65,7 +65,6 @@ support_interface_density = 70
support_interface_enable = True
support_interface_height = 2
support_interface_pattern = concentric
support_interface_skip_height = 0.1
support_type = everywhere
support_use_towers = False
support_xy_distance = 0.8

View File

@ -65,7 +65,6 @@ support_interface_density = 70
support_interface_enable = True
support_interface_height = 2
support_interface_pattern = concentric
support_interface_skip_height = 0.1
support_type = everywhere
support_use_towers = False
support_xy_distance = 0.8

View File

@ -65,7 +65,6 @@ support_interface_density = 70
support_interface_enable = True
support_interface_height = 2
support_interface_pattern = concentric
support_interface_skip_height = 0.1
support_type = everywhere
support_use_towers = False
support_xy_distance = 0.8

View File

@ -65,7 +65,6 @@ support_interface_density = 70
support_interface_enable = True
support_interface_height = 2
support_interface_pattern = concentric
support_interface_skip_height = 0.1
support_type = everywhere
support_use_towers = False
support_xy_distance = 0.8

View File

@ -65,7 +65,6 @@ support_interface_density = 70
support_interface_enable = True
support_interface_height = 2
support_interface_pattern = concentric
support_interface_skip_height = 0.1
support_type = everywhere
support_use_towers = False
support_xy_distance = 0.8

View File

@ -65,7 +65,6 @@ support_interface_density = 70
support_interface_enable = True
support_interface_height = 2
support_interface_pattern = concentric
support_interface_skip_height = 0.1
support_type = everywhere
support_use_towers = False
support_xy_distance = 0.8

View File

@ -65,7 +65,6 @@ support_interface_density = 70
support_interface_enable = True
support_interface_height = 2
support_interface_pattern = concentric
support_interface_skip_height = 0.1
support_type = everywhere
support_use_towers = False
support_xy_distance = 0.8

View File

@ -65,7 +65,6 @@ support_interface_density = 70
support_interface_enable = True
support_interface_height = 2
support_interface_pattern = concentric
support_interface_skip_height = 0.1
support_type = everywhere
support_use_towers = False
support_xy_distance = 0.8

View File

@ -293,7 +293,6 @@ support_bottom_wall_count
support_interface_height
support_roof_height
support_bottom_height
support_interface_skip_height
support_interface_density
support_roof_density
support_bottom_density

View File

@ -21,7 +21,6 @@ support_interface_density = 100
support_interface_enable = True
support_interface_height = =layer_height * 5
support_interface_pattern = concentric
support_interface_skip_height = =layer_height
support_join_distance = 3
support_offset = 3
support_pattern = triangles

View File

@ -21,7 +21,6 @@ support_interface_density = 100
support_interface_enable = True
support_interface_height = =layer_height * 5
support_interface_pattern = concentric
support_interface_skip_height = =layer_height
support_join_distance = 3
support_offset = 3
support_pattern = triangles

View File

@ -21,7 +21,6 @@ support_interface_density = 100
support_interface_enable = True
support_interface_height = =layer_height * 5
support_interface_pattern = concentric
support_interface_skip_height = =layer_height
support_join_distance = 3
support_offset = 3
support_pattern = triangles

View File

@ -21,7 +21,6 @@ support_interface_density = 100
support_interface_enable = True
support_interface_height = =layer_height * 5
support_interface_pattern = concentric
support_interface_skip_height = =layer_height
support_join_distance = 3
support_offset = 3
support_pattern = triangles

View File

@ -21,7 +21,6 @@ support_interface_density = 100
support_interface_enable = True
support_interface_height = =layer_height * 5
support_interface_pattern = concentric
support_interface_skip_height = =layer_height
support_join_distance = 3
support_offset = 3
support_pattern = triangles

View File

@ -21,7 +21,6 @@ support_interface_density = 100
support_interface_enable = True
support_interface_height = =layer_height * 5
support_interface_pattern = concentric
support_interface_skip_height = =layer_height
support_join_distance = 3
support_offset = 3
support_pattern = triangles

View File

@ -21,7 +21,6 @@ support_interface_density = 100
support_interface_enable = True
support_interface_height = =layer_height * 5
support_interface_pattern = concentric
support_interface_skip_height = =layer_height
support_join_distance = 3
support_offset = 3
support_pattern = triangles

View File

@ -21,7 +21,6 @@ support_interface_density = 100
support_interface_enable = True
support_interface_height = =layer_height * 5
support_interface_pattern = concentric
support_interface_skip_height = =layer_height
support_join_distance = 3
support_offset = 3
support_pattern = triangles

View File

@ -21,7 +21,6 @@ support_interface_density = 100
support_interface_enable = True
support_interface_height = =layer_height * 5
support_interface_pattern = concentric
support_interface_skip_height = =layer_height
support_join_distance = 3
support_offset = 3
support_pattern = triangles

View File

@ -21,7 +21,6 @@ support_interface_density = 100
support_interface_enable = True
support_interface_height = =layer_height * 5
support_interface_pattern = concentric
support_interface_skip_height = =layer_height
support_join_distance = 3
support_offset = 3
support_pattern = triangles

View File

@ -21,7 +21,6 @@ support_interface_density = 100
support_interface_enable = True
support_interface_height = =layer_height * 5
support_interface_pattern = concentric
support_interface_skip_height = =layer_height
support_join_distance = 3
support_offset = 3
support_pattern = triangles

View File

@ -21,7 +21,6 @@ support_interface_density = 100
support_interface_enable = True
support_interface_height = =layer_height * 5
support_interface_pattern = concentric
support_interface_skip_height = =layer_height
support_join_distance = 3
support_offset = 3
support_pattern = triangles

View File

@ -21,7 +21,6 @@ support_interface_density = 100
support_interface_enable = True
support_interface_height = =layer_height * 5
support_interface_pattern = concentric
support_interface_skip_height = =layer_height
support_join_distance = 3
support_offset = 3
support_pattern = triangles

View File

@ -21,7 +21,6 @@ support_interface_density = 100
support_interface_enable = True
support_interface_height = =layer_height * 5
support_interface_pattern = concentric
support_interface_skip_height = =layer_height
support_join_distance = 3
support_offset = 3
support_pattern = triangles

View File

@ -21,7 +21,6 @@ support_interface_density = 100
support_interface_enable = True
support_interface_height = =layer_height * 5
support_interface_pattern = concentric
support_interface_skip_height = =layer_height
support_join_distance = 3
support_offset = 3
support_pattern = triangles

View File

@ -21,7 +21,6 @@ support_interface_density = 100
support_interface_enable = True
support_interface_height = =layer_height * 5
support_interface_pattern = concentric
support_interface_skip_height = =layer_height
support_join_distance = 3
support_offset = 3
support_pattern = triangles

View File

@ -21,7 +21,6 @@ support_interface_density = 100
support_interface_enable = True
support_interface_height = =layer_height * 5
support_interface_pattern = concentric
support_interface_skip_height = =layer_height
support_join_distance = 3
support_offset = 3
support_pattern = triangles

View File

@ -21,7 +21,6 @@ support_interface_density = 100
support_interface_enable = True
support_interface_height = =layer_height * 5
support_interface_pattern = concentric
support_interface_skip_height = =layer_height
support_join_distance = 3
support_offset = 3
support_pattern = triangles