diff --git a/.github/workflows/printer-linter-format.yml b/.github/workflows/printer-linter-format.yml
index df4e049755..e5e1b5b1d6 100644
--- a/.github/workflows/printer-linter-format.yml
+++ b/.github/workflows/printer-linter-format.yml
@@ -3,7 +3,11 @@ name: printer-linter-format
on:
push:
paths:
- - 'resources/**'
+ - 'resources/definitions/**'
+ - 'resources/extruders/**'
+ - 'resources/intent/**'
+ - 'resources/quality/**'
+ - 'resources/variants/**'
jobs:
printer-linter-format:
diff --git a/UltiMaker-Cura.spec.jinja b/UltiMaker-Cura.spec.jinja
index 74e4fd098b..5eb01845c1 100644
--- a/UltiMaker-Cura.spec.jinja
+++ b/UltiMaker-Cura.spec.jinja
@@ -16,9 +16,9 @@ datas += tmp_ret[0]; binaries += tmp_ret[1]; hiddenimports += tmp_ret[2]
# Add dynamic libs in the venv bin/Script Path. This is needed because we might copy some additional libs
# e.q.: OpenSSL 1.1.1l in that directory with a separate:
# `conan install openssl@1.1.1l -g deploy && cp openssl/bin/*.so cura_inst/bin`
-binaries.extend([(str(bin), ".") for bin in Path("{{ venv_script_path }}").glob("*.so*")])
-binaries.extend([(str(bin), ".") for bin in Path("{{ venv_script_path }}").glob("*.dll")])
-binaries.extend([(str(bin), ".") for bin in Path("{{ venv_script_path }}").glob("*.dylib")])
+binaries.extend([(str(bin), ".") for bin in Path(r"{{ venv_script_path }}").glob("*.so*")])
+binaries.extend([(str(bin), ".") for bin in Path(r"{{ venv_script_path }}").glob("*.dll")])
+binaries.extend([(str(bin), ".") for bin in Path(r"{{ venv_script_path }}").glob("*.dylib")])
block_cipher = None
diff --git a/packaging/msi/CustomizeCuraDlg.wxs b/packaging/msi/CustomizeCuraDlg.wxs
index aed5af8055..a9f1d7c462 100644
--- a/packaging/msi/CustomizeCuraDlg.wxs
+++ b/packaging/msi/CustomizeCuraDlg.wxs
@@ -27,7 +27,6 @@
1
-
@@ -41,6 +40,7 @@
+
diff --git a/packaging/msi/ExcludeComponents.xslt b/packaging/msi/ExcludeComponents.xslt
new file mode 100644
index 0000000000..b964484922
--- /dev/null
+++ b/packaging/msi/ExcludeComponents.xslt
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/packaging/msi/UltiMaker-Cura.wxs.jinja b/packaging/msi/UltiMaker-Cura.wxs.jinja
index 56b0458257..44a45297c2 100644
--- a/packaging/msi/UltiMaker-Cura.wxs.jinja
+++ b/packaging/msi/UltiMaker-Cura.wxs.jinja
@@ -1,5 +1,5 @@
-
+
+ Comments="Copyright (c) {{ year }} UltiMaker B.V." />
@@ -28,6 +28,8 @@
IncludeMinimum="no" IncludeMaximum="no"
/>
+
+
{% if "Enterpise" in app_name %}
@@ -84,13 +86,51 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packaging/msi/create_windows_msi.py b/packaging/msi/create_windows_msi.py
index f7c9e19450..d2d3a7bfd5 100644
--- a/packaging/msi/create_windows_msi.py
+++ b/packaging/msi/create_windows_msi.py
@@ -57,26 +57,47 @@ def generate_wxs(source_path: Path, dist_path: Path, filename: Path, app_name: s
except shutil.SameFileError:
pass
+ try:
+ shutil.copy(source_loc.joinpath("packaging", "msi", "ExcludeComponents.xslt"),
+ work_loc.joinpath("ExcludeComponents.xslt"))
+ except shutil.SameFileError:
+ pass
+
+
+def cleanup_artifacts(dist_path: Path):
+ dist_loc = Path(os.getcwd(), dist_path)
+ dirt = [d for d in dist_loc.rglob("__pycache__") if d.is_dir()]
+ dirt += [d for d in dist_loc.rglob("*.dist-info") if d.is_dir()]
+ for d in dirt:
+ if d.exists():
+ shutil.rmtree(d, ignore_errors=True)
+
def build(dist_path: Path, filename: str):
dist_loc = Path(os.getcwd(), dist_path)
work_loc = work_path(filename)
wxs_loc = work_loc.joinpath("UltiMaker-Cura.wxs")
heat_loc = work_loc.joinpath("HeatFile.wxs")
+ exclude_components_loc = work_loc.joinpath("ExcludeComponents.xslt")
manageoldcuradlg_loc = work_loc.joinpath("CustomizeCuraDlg.wxs")
build_loc = work_loc.joinpath("build_msi")
heat_command = ["heat", "dir", f"{dist_loc.as_posix()}\\", "-dr", "APPLICATIONFOLDER", "-cg", "NewFilesGroup",
- "-gg", "-g1", "-sf", "-srd", "-var", "var.CuraDir", "-out", f"{heat_loc.as_posix()}"]
+ "-gg", "-g1", "-sf", "-srd", "-var", "var.CuraDir", "-t", f"{exclude_components_loc.as_posix()}",
+ "-out", f"{heat_loc.as_posix()}"]
subprocess.call(heat_command)
- build_command = ["candle", "-arch", "x64", f"-dCuraDir={dist_loc}\\", "-out", f"{build_loc.as_posix()}\\",
+ build_command = ["candle", "-arch", "x64", f"-dCuraDir={dist_loc}\\",
+ "-ext", "WixFirewallExtension",
+ "-out", f"{build_loc.as_posix()}\\",
f"{wxs_loc.as_posix()}", f"{heat_loc.as_posix()}", f"{manageoldcuradlg_loc.as_posix()}"]
subprocess.call(build_command)
link_command = ["light", f"{build_loc.joinpath(wxs_loc.name).with_suffix('.wixobj')}",
f"{build_loc.joinpath(heat_loc.name).with_suffix('.wixobj')}",
- f"{build_loc.joinpath(manageoldcuradlg_loc.name).with_suffix('.wixobj')}", "-ext", "WixUIExtension",
+ f"{build_loc.joinpath(manageoldcuradlg_loc.name).with_suffix('.wixobj')}",
+ "-ext", "WixUIExtension",
+ "-ext", "WixFirewallExtension",
"-out", f"{work_loc.joinpath(filename.name)}"]
subprocess.call(link_command)
@@ -89,5 +110,6 @@ if __name__ == "__main__":
help="Filename of the exe (e.g. 'UltiMaker-Cura-5.1.0-beta-Windows-X64.msi')")
parser.add_argument("name", type=str, help="App name (e.g. 'UltiMaker Cura')")
args = parser.parse_args()
- generate_wxs(args.source_path, args.dist_path, args.filename, args.name)
- build(args.dist_path, args.filename)
+ generate_wxs(args.source_path.resolve(), args.dist_path.resolve(), args.filename.resolve(), args.name)
+ cleanup_artifacts(args.dist_path.resolve())
+ build(args.dist_path.resolve(), args.filename)
diff --git a/plugins/PostProcessingPlugin/scripts/FilamentChange.py b/plugins/PostProcessingPlugin/scripts/FilamentChange.py
index ff62e1949c..ef85d5ae36 100644
--- a/plugins/PostProcessingPlugin/scripts/FilamentChange.py
+++ b/plugins/PostProcessingPlugin/scripts/FilamentChange.py
@@ -24,20 +24,29 @@ class FilamentChange(Script):
"version": 2,
"settings":
{
+ "enabled":
+ {
+ "label": "Enable",
+ "description": "Uncheck to temporarily disable this feature.",
+ "type": "bool",
+ "default_value": true
+ },
"layer_number":
{
"label": "Layer",
"description": "At what layer should color change occur. This will be before the layer starts printing. Specify multiple color changes with a comma.",
"unit": "",
"type": "str",
- "default_value": "1"
+ "default_value": "1",
+ "enabled": "enabled"
},
"firmware_config":
{
"label": "Use Firmware Configuration",
"description": "Use the settings in your firmware, or customise the parameters of the filament change here.",
"type": "bool",
- "default_value": false
+ "default_value": false,
+ "enabled": "enabled"
},
"initial_retract":
{
@@ -46,7 +55,7 @@ class FilamentChange(Script):
"unit": "mm",
"type": "float",
"default_value": 30.0,
- "enabled": "not firmware_config"
+ "enabled": "enabled and not firmware_config"
},
"later_retract":
{
@@ -55,7 +64,7 @@ class FilamentChange(Script):
"unit": "mm",
"type": "float",
"default_value": 300.0,
- "enabled": "not firmware_config"
+ "enabled": "enabled and not firmware_config"
},
"x_position":
{
@@ -64,7 +73,7 @@ class FilamentChange(Script):
"unit": "mm",
"type": "float",
"default_value": 0,
- "enabled": "not firmware_config"
+ "enabled": "enabled and not firmware_config"
},
"y_position":
{
@@ -73,7 +82,7 @@ class FilamentChange(Script):
"unit": "mm",
"type": "float",
"default_value": 0,
- "enabled": "not firmware_config"
+ "enabled": "enabled and not firmware_config"
},
"z_position":
{
@@ -82,7 +91,8 @@ class FilamentChange(Script):
"unit": "mm",
"type": "float",
"default_value": 0,
- "minimum_value": 0
+ "minimum_value": 0,
+ "enabled": "enabled"
},
"retract_method":
{
@@ -92,7 +102,7 @@ class FilamentChange(Script):
"options": {"U": "Marlin (M600 U)", "L": "Reprap (M600 L)"},
"default_value": "U",
"value": "\\\"L\\\" if machine_gcode_flavor==\\\"RepRap (RepRap)\\\" else \\\"U\\\"",
- "enabled": "not firmware_config"
+ "enabled": "enabled and not firmware_config"
},
"machine_gcode_flavor":
{
@@ -113,6 +123,40 @@ class FilamentChange(Script):
},
"default_value": "RepRap (Marlin/Sprinter)",
"enabled": "false"
+ },
+ "enable_before_macro":
+ {
+ "label": "Enable G-code Before",
+ "description": "Use this to insert a custom G-code macro before the filament change happens",
+ "type": "bool",
+ "default_value": false,
+ "enabled": "enabled"
+ },
+ "before_macro":
+ {
+ "label": "G-code Before",
+ "description": "Any custom G-code to run before the filament change happens, for example, M300 S1000 P10000 for a long beep.",
+ "unit": "",
+ "type": "str",
+ "default_value": "M300 S1000 P10000",
+ "enabled": "enabled and enable_before_macro"
+ },
+ "enable_after_macro":
+ {
+ "label": "Enable G-code After",
+ "description": "Use this to insert a custom G-code macro after the filament change",
+ "type": "bool",
+ "default_value": false,
+ "enabled": "enabled"
+ },
+ "after_macro":
+ {
+ "label": "G-code After",
+ "description": "Any custom G-code to run after the filament has been changed right before continuing the print, for example, you can add a sequence to purge filament and wipe the nozzle.",
+ "unit": "",
+ "type": "str",
+ "default_value": "M300 S440 P500",
+ "enabled": "enabled and enable_after_macro"
}
}
}"""
@@ -134,6 +178,7 @@ class FilamentChange(Script):
:param data: A list of layers of g-code.
:return: A similar list, with filament change commands inserted.
"""
+ enabled = self.getSettingValueByKey("enabled")
layer_nums = self.getSettingValueByKey("layer_number")
initial_retract = self.getSettingValueByKey("initial_retract")
later_retract = self.getSettingValueByKey("later_retract")
@@ -141,8 +186,20 @@ class FilamentChange(Script):
y_pos = self.getSettingValueByKey("y_position")
z_pos = self.getSettingValueByKey("z_position")
firmware_config = self.getSettingValueByKey("firmware_config")
+ enable_before_macro = self.getSettingValueByKey("enable_before_macro")
+ before_macro = self.getSettingValueByKey("before_macro")
+ enable_after_macro = self.getSettingValueByKey("enable_after_macro")
+ after_macro = self.getSettingValueByKey("after_macro")
- color_change = "M600"
+ if not enabled:
+ return data
+
+ color_change = ";BEGIN FilamentChange plugin\n"
+
+ if enable_before_macro:
+ color_change = color_change + before_macro + "\n"
+
+ color_change = color_change + "M600\n"
if not firmware_config:
if initial_retract is not None and initial_retract > 0.:
@@ -163,7 +220,10 @@ class FilamentChange(Script):
if z_pos is not None and z_pos > 0.:
color_change = color_change + (" Z%.2f" % z_pos)
- color_change = color_change + " ; Generated by FilamentChange plugin\n"
+ if enable_after_macro:
+ color_change = color_change + after_macro + "\n"
+
+ color_change = color_change + ";END FilamentChange plugin\n"
layer_targets = layer_nums.split(",")
if len(layer_targets) > 0:
diff --git a/requirements-dev.txt b/requirements-dev.txt
index b1e52571ca..cd7b19e389 100644
--- a/requirements-dev.txt
+++ b/requirements-dev.txt
@@ -1,5 +1,5 @@
pytest
-pyinstaller
+pyinstaller==5.6.2
pyinstaller-hooks-contrib
pyyaml
sip==6.5.1
diff --git a/resources/definitions/modix_v3_base.def.json b/resources/definitions/modix_v3_base.def.json
new file mode 100644
index 0000000000..52763c2e98
--- /dev/null
+++ b/resources/definitions/modix_v3_base.def.json
@@ -0,0 +1,88 @@
+{
+ "version": 2,
+ "name": "Modix Base Printer",
+ "inherits": "fdmprinter",
+ "metadata":
+ {
+ "author": "Modix",
+ "manufacturer": "Modix",
+ "file_formats": "text/x-gcode",
+ "has_variants": true,
+ "machine_extruder_trains":
+ {
+ "0": "modix_v3_extruder_0",
+ "1": "modix_v3_extruder_1"
+ },
+ "preferred_variant_name": "0.4 mm Nozzle",
+ "variants_name": "Nozzle Size"
+ },
+ "overrides":
+ {
+ "adhesion_type": { "default_value": "skirt" },
+ "cool_fan_full_at_height": { "value": "layer_height_0 + 2 * layer_height" },
+ "fill_outline_gaps": { "value": false },
+ "gantry_height": { "value": "90.0" },
+ "infill_before_walls": { "value": false },
+ "infill_overlap": { "value": 30.0 },
+ "infill_pattern": { "value": "'cubic'" },
+ "infill_sparse_density": { "value": "15" },
+ "layer_height_0": { "value": "round(machine_nozzle_size / 2, 1)" },
+ "line_width": { "value": "machine_nozzle_size * 1.05" },
+ "machine_end_gcode": { "default_value": "M83 ; extruder relative moves \nG1 E-5 F2700 ;retract a bit \nG10 P0 S0 R0 ; turn off extruder 0 \nG10 P1 S0 R0 ; turn off extruder 1 \nM106 S0 ; turn off fans \nT-1 P0 ; deselect any tools \nG4 P1 ; dwell 1ms \nG91 ;relative positioning \nG1 Z2 F500 ; Move print head up 2mm \nG90 ; absolute positioning \nG1 X{move.axes[0].min+2} Y{move.axes[1].max-2} F6000 ; move to the back left \nM84 ; disable motors" },
+ "machine_gcode_flavor": { "default_value": "RepRap (RepRap)" },
+ "machine_head_with_fans_polygon":
+ {
+ "default_value": [
+ [-100, 30],
+ [-100, 65],
+ [30, -105],
+ [-31, -100]
+ ]
+ },
+ "machine_name": { "default_value": "Modix Base Printer" },
+ "machine_start_gcode": { "default_value": "G28 ; home all axes" },
+ "material_diameter": { "default_value": 1.75 },
+ "material_final_print_temperature": { "value": "material_print_temperature" },
+ "material_initial_print_temperature": { "value": "material_print_temperature" },
+ "minimum_interface_area": { "value": 10 },
+ "minimum_support_area": { "value": 2 },
+ "optimize_wall_printing_order": { "value": "True" },
+ "retraction_amount": { "value": 1 },
+ "retraction_combing": { "value": "'off' if retraction_hop_enabled else 'infill'" },
+ "retraction_combing_max_distance": { "value": 5 },
+ "retraction_count_max": { "value": 50 },
+ "retraction_extrusion_window": { "value": 1 },
+ "retraction_hop": { "value": "layer_height*4" },
+ "retraction_hop_enabled": { "value": "support_enable" },
+ "retraction_prime_speed": { "value": 40 },
+ "retraction_retract_speed": { "value": 40 },
+ "retraction_speed": { "default_value": 40 },
+ "skin_overlap": { "value": 10.0 },
+ "skirt_brim_minimal_length": { "default_value": 200 },
+ "skirt_gap": { "value": 5.0 },
+ "skirt_line_count": { "value": 3 },
+ "speed_layer_0": { "value": 20.0 },
+ "speed_prime_tower": { "value": "speed_topbottom" },
+ "speed_support": { "value": "speed_wall_0" },
+ "speed_support_interface": { "value": "speed_topbottom" },
+ "speed_travel": { "value": 110.0 },
+ "speed_wall_x": { "value": "speed_wall" },
+ "speed_z_hop": { "value": 5 },
+ "support_angle": { "value": 55 },
+ "support_brim_enable": { "value": true },
+ "support_brim_width": { "value": 5 },
+ "support_infill_rate": { "value": "0 if support_enable and support_structure == 'tree' else 15" },
+ "support_interface_density": { "value": 40 },
+ "support_interface_enable": { "value": true },
+ "support_interface_height": { "value": "layer_height * 3" },
+ "support_use_towers": { "value": false },
+ "support_xy_distance": { "value": "wall_line_width_0 * 2" },
+ "support_xy_distance_overhang": { "value": "wall_line_width_0" },
+ "support_z_distance": { "value": "layer_height if layer_height >= 0.2 else layer_height * 2" },
+ "top_bottom_thickness": { "value": "layer_height_0 + layer_height * 3" },
+ "travel_avoid_supports": { "value": true },
+ "travel_retract_before_outer_wall": { "value": true },
+ "wall_thickness": { "value": "line_width * 2" },
+ "z_seam_corner": { "value": "z_seam_corner_weighted" }
+ }
+}
\ No newline at end of file
diff --git a/resources/definitions/modix_v3_big120X.def.json b/resources/definitions/modix_v3_big120X.def.json
new file mode 100644
index 0000000000..9501ca96e1
--- /dev/null
+++ b/resources/definitions/modix_v3_big120X.def.json
@@ -0,0 +1,13 @@
+{
+ "version": 2,
+ "name": "Modix V3 BIG-120X",
+ "inherits": "modix_v3_base",
+ "metadata": { "visible": true },
+ "overrides":
+ {
+ "machine_depth": { "default_value": 600 },
+ "machine_height": { "default_value": 640 },
+ "machine_name": { "default_value": "Modix BIG-120X V3" },
+ "machine_width": { "default_value": 1200 }
+ }
+}
\ No newline at end of file
diff --git a/resources/definitions/modix_v3_big120Z.def.json b/resources/definitions/modix_v3_big120Z.def.json
new file mode 100644
index 0000000000..132ca0cd5f
--- /dev/null
+++ b/resources/definitions/modix_v3_big120Z.def.json
@@ -0,0 +1,13 @@
+{
+ "version": 2,
+ "name": "Modix V3 BIG-120Z",
+ "inherits": "modix_v3_base",
+ "metadata": { "visible": true },
+ "overrides":
+ {
+ "machine_depth": { "default_value": 600 },
+ "machine_height": { "default_value": 1200 },
+ "machine_name": { "default_value": "Modix BIG-120Z V3" },
+ "machine_width": { "default_value": 600 }
+ }
+}
\ No newline at end of file
diff --git a/resources/definitions/modix_v3_big180X.def.json b/resources/definitions/modix_v3_big180X.def.json
new file mode 100644
index 0000000000..18f3d0521f
--- /dev/null
+++ b/resources/definitions/modix_v3_big180X.def.json
@@ -0,0 +1,13 @@
+{
+ "version": 2,
+ "name": "Modix V3 BIG-180X",
+ "inherits": "modix_v3_base",
+ "metadata": { "visible": true },
+ "overrides":
+ {
+ "machine_depth": { "default_value": 600 },
+ "machine_height": { "default_value": 600 },
+ "machine_name": { "default_value": "Modix BIG-180X V3" },
+ "machine_width": { "default_value": 1800 }
+ }
+}
\ No newline at end of file
diff --git a/resources/definitions/modix_v3_big40.def.json b/resources/definitions/modix_v3_big40.def.json
new file mode 100644
index 0000000000..8a44d919c2
--- /dev/null
+++ b/resources/definitions/modix_v3_big40.def.json
@@ -0,0 +1,13 @@
+{
+ "version": 2,
+ "name": "Modix V3 BIG-40",
+ "inherits": "modix_v3_base",
+ "metadata": { "visible": true },
+ "overrides":
+ {
+ "machine_depth": { "default_value": 400 },
+ "machine_height": { "default_value": 800 },
+ "machine_name": { "default_value": "Modix BIG-40 V3" },
+ "machine_width": { "default_value": 400 }
+ }
+}
\ No newline at end of file
diff --git a/resources/definitions/modix_v3_big60.def.json b/resources/definitions/modix_v3_big60.def.json
new file mode 100644
index 0000000000..3db8825e61
--- /dev/null
+++ b/resources/definitions/modix_v3_big60.def.json
@@ -0,0 +1,13 @@
+{
+ "version": 2,
+ "name": "Modix V3 BIG-60",
+ "inherits": "modix_v3_base",
+ "metadata": { "visible": true },
+ "overrides":
+ {
+ "machine_depth": { "default_value": 600 },
+ "machine_height": { "default_value": 660 },
+ "machine_name": { "default_value": "Modix BIG-60 V3" },
+ "machine_width": { "default_value": 600 }
+ }
+}
\ No newline at end of file
diff --git a/resources/definitions/modix_v3_big_meter.def.json b/resources/definitions/modix_v3_big_meter.def.json
new file mode 100644
index 0000000000..d6d2c968b9
--- /dev/null
+++ b/resources/definitions/modix_v3_big_meter.def.json
@@ -0,0 +1,13 @@
+{
+ "version": 2,
+ "name": "Modix V3 BIG-Meter",
+ "inherits": "modix_v3_base",
+ "metadata": { "visible": true },
+ "overrides":
+ {
+ "machine_depth": { "default_value": 1000 },
+ "machine_height": { "default_value": 1000 },
+ "machine_name": { "default_value": "Modix BIG-METER V3" },
+ "machine_width": { "default_value": 1000 }
+ }
+}
\ No newline at end of file
diff --git a/resources/definitions/modix_v4_base.def.json b/resources/definitions/modix_v4_base.def.json
new file mode 100644
index 0000000000..7f02674355
--- /dev/null
+++ b/resources/definitions/modix_v4_base.def.json
@@ -0,0 +1,88 @@
+{
+ "version": 2,
+ "name": "Modix Base Printer",
+ "inherits": "fdmprinter",
+ "metadata":
+ {
+ "author": "Modix",
+ "manufacturer": "Modix",
+ "file_formats": "text/x-gcode",
+ "has_variants": true,
+ "machine_extruder_trains":
+ {
+ "0": "modix_v4_extruder_0",
+ "1": "modix_v4_extruder_1"
+ },
+ "preferred_variant_name": "0.4 mm Nozzle",
+ "variants_name": "Nozzle Size"
+ },
+ "overrides":
+ {
+ "adhesion_type": { "default_value": "skirt" },
+ "cool_fan_full_at_height": { "value": "layer_height_0 + 2 * layer_height" },
+ "fill_outline_gaps": { "value": false },
+ "gantry_height": { "value": "90.0" },
+ "infill_before_walls": { "value": false },
+ "infill_overlap": { "value": 30.0 },
+ "infill_pattern": { "value": "'cubic'" },
+ "infill_sparse_density": { "value": "15" },
+ "layer_height_0": { "value": "round(machine_nozzle_size / 2, 1)" },
+ "line_width": { "value": "machine_nozzle_size * 1.05" },
+ "machine_end_gcode": { "default_value": "M83 ; extruder relative moves \nG1 E-5 F2700 ;retract a bit \nG10 P0 S0 R0 ; turn off extruder 0 \nM106 S0 ; turn off fans \nT-1 P0 ; deselect any tools \nG4 P1 ; dwell 1ms \nG91 ;relative positioning \nG1 Z2 F500 ; Move print head up 2mm \nG90 ; absolute positioning \nG1 X{move.axes[0].min+2} Y{move.axes[1].max-2} F6000 ; move to the back left \nM84 ; disable motors" },
+ "machine_gcode_flavor": { "default_value": "RepRap (RepRap)" },
+ "machine_head_with_fans_polygon":
+ {
+ "default_value": [
+ [-100, 30],
+ [-100, 65],
+ [30, -105],
+ [-31, -100]
+ ]
+ },
+ "machine_name": { "default_value": "Modix Base Printer" },
+ "machine_start_gcode": { "default_value": "G28 ; home all axes" },
+ "material_diameter": { "default_value": 1.75 },
+ "material_final_print_temperature": { "value": "material_print_temperature" },
+ "material_initial_print_temperature": { "value": "material_print_temperature" },
+ "minimum_interface_area": { "value": 10 },
+ "minimum_support_area": { "value": 2 },
+ "optimize_wall_printing_order": { "value": "True" },
+ "retraction_amount": { "value": 1 },
+ "retraction_combing": { "value": "'off' if retraction_hop_enabled else 'infill'" },
+ "retraction_combing_max_distance": { "value": 5 },
+ "retraction_count_max": { "value": 50 },
+ "retraction_extrusion_window": { "value": 1 },
+ "retraction_hop": { "value": 2 },
+ "retraction_hop_enabled": { "value": "support_enable" },
+ "retraction_prime_speed": { "value": 40 },
+ "retraction_retract_speed": { "value": 40 },
+ "retraction_speed": { "default_value": 40 },
+ "skin_overlap": { "value": 10.0 },
+ "skirt_brim_minimal_length": { "default_value": 200 },
+ "skirt_gap": { "value": 5.0 },
+ "skirt_line_count": { "value": 3 },
+ "speed_layer_0": { "value": 20.0 },
+ "speed_prime_tower": { "value": "speed_topbottom" },
+ "speed_support": { "value": "speed_wall_0" },
+ "speed_support_interface": { "value": "speed_topbottom" },
+ "speed_travel": { "value": 250.0 },
+ "speed_wall_x": { "value": "speed_wall" },
+ "speed_z_hop": { "value": 5 },
+ "support_angle": { "value": 55 },
+ "support_brim_enable": { "value": true },
+ "support_brim_width": { "value": 5 },
+ "support_infill_rate": { "value": "0 if support_enable and support_structure == 'tree' else 15" },
+ "support_interface_density": { "value": 40 },
+ "support_interface_enable": { "value": true },
+ "support_interface_height": { "value": "layer_height * 3" },
+ "support_use_towers": { "value": false },
+ "support_xy_distance": { "value": "wall_line_width_0 * 2" },
+ "support_xy_distance_overhang": { "value": "wall_line_width_0" },
+ "support_z_distance": { "value": "layer_height if layer_height >= 0.2 else layer_height * 2" },
+ "top_bottom_thickness": { "value": "layer_height_0 + layer_height * 3" },
+ "travel_avoid_supports": { "value": true },
+ "travel_retract_before_outer_wall": { "value": true },
+ "wall_thickness": { "value": "line_width * 2" },
+ "z_seam_corner": { "value": "z_seam_corner_weighted" }
+ }
+}
\ No newline at end of file
diff --git a/resources/definitions/modix_v4_big120X.def.json b/resources/definitions/modix_v4_big120X.def.json
new file mode 100644
index 0000000000..792d158ba4
--- /dev/null
+++ b/resources/definitions/modix_v4_big120X.def.json
@@ -0,0 +1,13 @@
+{
+ "version": 2,
+ "name": "Modix V4 BIG-120X",
+ "inherits": "modix_v4_base",
+ "metadata": { "visible": true },
+ "overrides":
+ {
+ "machine_depth": { "default_value": 600 },
+ "machine_height": { "default_value": 640 },
+ "machine_name": { "default_value": "Modix BIG-120X V4" },
+ "machine_width": { "default_value": 1200 }
+ }
+}
\ No newline at end of file
diff --git a/resources/definitions/modix_v4_big120Z.def.json b/resources/definitions/modix_v4_big120Z.def.json
new file mode 100644
index 0000000000..fa568f0423
--- /dev/null
+++ b/resources/definitions/modix_v4_big120Z.def.json
@@ -0,0 +1,13 @@
+{
+ "version": 2,
+ "name": "Modix V4 BIG-120Z",
+ "inherits": "modix_v4_base",
+ "metadata": { "visible": true },
+ "overrides":
+ {
+ "machine_depth": { "default_value": 600 },
+ "machine_height": { "default_value": 1200 },
+ "machine_name": { "default_value": "Modix BIG-120Z V4" },
+ "machine_width": { "default_value": 600 }
+ }
+}
\ No newline at end of file
diff --git a/resources/definitions/modix_v4_big180X.def.json b/resources/definitions/modix_v4_big180X.def.json
new file mode 100644
index 0000000000..52b8d7a1c4
--- /dev/null
+++ b/resources/definitions/modix_v4_big180X.def.json
@@ -0,0 +1,13 @@
+{
+ "version": 2,
+ "name": "Modix V4 BIG-180X",
+ "inherits": "modix_v4_base",
+ "metadata": { "visible": true },
+ "overrides":
+ {
+ "machine_depth": { "default_value": 600 },
+ "machine_height": { "default_value": 600 },
+ "machine_name": { "default_value": "Modix BIG-180X V4" },
+ "machine_width": { "default_value": 1800 }
+ }
+}
\ No newline at end of file
diff --git a/resources/definitions/modix_v4_big60.def.json b/resources/definitions/modix_v4_big60.def.json
new file mode 100644
index 0000000000..6ff69ce1bf
--- /dev/null
+++ b/resources/definitions/modix_v4_big60.def.json
@@ -0,0 +1,13 @@
+{
+ "version": 2,
+ "name": "Modix V4 BIG-60",
+ "inherits": "modix_v4_base",
+ "metadata": { "visible": true },
+ "overrides":
+ {
+ "machine_depth": { "default_value": 600 },
+ "machine_height": { "default_value": 660 },
+ "machine_name": { "default_value": "Modix BIG-60 V4" },
+ "machine_width": { "default_value": 600 }
+ }
+}
\ No newline at end of file
diff --git a/resources/definitions/modix_v4_big_meter.def.json b/resources/definitions/modix_v4_big_meter.def.json
new file mode 100644
index 0000000000..849807c27f
--- /dev/null
+++ b/resources/definitions/modix_v4_big_meter.def.json
@@ -0,0 +1,13 @@
+{
+ "version": 2,
+ "name": "Modix V4 BIG-Meter",
+ "inherits": "modix_v4_base",
+ "metadata": { "visible": true },
+ "overrides":
+ {
+ "machine_depth": { "default_value": 1000 },
+ "machine_height": { "default_value": 1000 },
+ "machine_name": { "default_value": "Modix BIG-METER V4" },
+ "machine_width": { "default_value": 1000 }
+ }
+}
\ No newline at end of file
diff --git a/resources/extruders/modix_v3_extruder_0.def.json b/resources/extruders/modix_v3_extruder_0.def.json
new file mode 100644
index 0000000000..7b983e06b2
--- /dev/null
+++ b/resources/extruders/modix_v3_extruder_0.def.json
@@ -0,0 +1,19 @@
+{
+ "version": 2,
+ "name": "Left Extruder",
+ "inherits": "fdmextruder",
+ "metadata":
+ {
+ "machine": "modix_v3_base",
+ "position": "0"
+ },
+ "overrides":
+ {
+ "extruder_nr":
+ {
+ "default_value": 0,
+ "maximum_value": "1"
+ },
+ "material_diameter": { "default_value": 1.75 }
+ }
+}
\ No newline at end of file
diff --git a/resources/extruders/modix_v3_extruder_1.def.json b/resources/extruders/modix_v3_extruder_1.def.json
new file mode 100644
index 0000000000..0d218e8168
--- /dev/null
+++ b/resources/extruders/modix_v3_extruder_1.def.json
@@ -0,0 +1,19 @@
+{
+ "version": 2,
+ "name": "Right Extruder",
+ "inherits": "fdmextruder",
+ "metadata":
+ {
+ "machine": "modix_v3_base",
+ "position": "1"
+ },
+ "overrides":
+ {
+ "extruder_nr":
+ {
+ "default_value": 1,
+ "maximum_value": "1"
+ },
+ "material_diameter": { "default_value": 1.75 }
+ }
+}
\ No newline at end of file
diff --git a/resources/extruders/modix_v4_extruder_0.def.json b/resources/extruders/modix_v4_extruder_0.def.json
new file mode 100644
index 0000000000..bce44abe0f
--- /dev/null
+++ b/resources/extruders/modix_v4_extruder_0.def.json
@@ -0,0 +1,19 @@
+{
+ "version": 2,
+ "name": "Left Extruder",
+ "inherits": "fdmextruder",
+ "metadata":
+ {
+ "machine": "modix_v4_base",
+ "position": "0"
+ },
+ "overrides":
+ {
+ "extruder_nr":
+ {
+ "default_value": 0,
+ "maximum_value": "1"
+ },
+ "material_diameter": { "default_value": 1.75 }
+ }
+}
\ No newline at end of file
diff --git a/resources/extruders/modix_v4_extruder_1.def.json b/resources/extruders/modix_v4_extruder_1.def.json
new file mode 100644
index 0000000000..bae7499c45
--- /dev/null
+++ b/resources/extruders/modix_v4_extruder_1.def.json
@@ -0,0 +1,19 @@
+{
+ "version": 2,
+ "name": "Right Extruder",
+ "inherits": "fdmextruder",
+ "metadata":
+ {
+ "machine": "modix_v4_base",
+ "position": "1"
+ },
+ "overrides":
+ {
+ "extruder_nr":
+ {
+ "default_value": 1,
+ "maximum_value": "1"
+ },
+ "material_diameter": { "default_value": 1.75 }
+ }
+}
\ No newline at end of file
diff --git a/resources/qml/Cura.qml b/resources/qml/Cura.qml
index 6e36587b23..669fd1041e 100644
--- a/resources/qml/Cura.qml
+++ b/resources/qml/Cura.qml
@@ -17,6 +17,12 @@ UM.MainWindow
{
id: base
+ Item
+ {
+ id: mainWindow
+ anchors.fill: parent
+ }
+
// Cura application window title
title:
{
diff --git a/resources/qml/ExtruderIcon.qml b/resources/qml/ExtruderIcon.qml
index c59521cdc3..3231d924ee 100644
--- a/resources/qml/ExtruderIcon.qml
+++ b/resources/qml/ExtruderIcon.qml
@@ -1,4 +1,4 @@
-// Copyright (c) 2021 Ultimaker B.V.
+// Copyright (c) 2022 UltiMaker
// Cura is released under the terms of the LGPLv3 or higher.
import QtQuick 2.11
@@ -12,7 +12,7 @@ Item
property color materialColor
property alias textColor: extruderNumberText.color
property bool extruderEnabled: true
- property var iconSize: UM.Theme.getSize("extruder_icon").width
+ property int iconSize: UM.Theme.getSize("extruder_icon").width
property string iconVariant: "medium"
property alias font: extruderNumberText.font
@@ -36,7 +36,6 @@ Item
}
UM.ColorImage
{
- id: mainIcon
anchors.fill: parent
width: iconSize
height: iconSize
@@ -48,12 +47,14 @@ Item
UM.Label
{
id: extruderNumberText
- anchors.centerIn: parent
- text: index + 1
- font: UM.Theme.getFont("small_emphasis")
width: contentWidth
height: contentHeight
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.left: parent.left
+ anchors.right: parent.right
horizontalAlignment: Text.AlignHCenter
+ text: (index + 1).toString()
+ font: UM.Theme.getFont("small_emphasis")
}
}
}
diff --git a/resources/qml/Menus/MaterialBrandMenu.qml b/resources/qml/Menus/MaterialBrandMenu.qml
index e256e75904..83a6959183 100644
--- a/resources/qml/Menus/MaterialBrandMenu.qml
+++ b/resources/qml/Menus/MaterialBrandMenu.qml
@@ -1,4 +1,4 @@
-// Copyright (c) 2022 Ultimaker B.V.
+// Copyright (c) 2022 UltiMaker
// Cura is released under the terms of the LGPLv3 or higher.
import QtQuick 2.7
@@ -36,6 +36,7 @@ Cura.MenuItem
UM.Label
{
+ id: brandLabelText
text: replaceText(materialBrandMenu.text)
Layout.fillWidth: true
Layout.fillHeight:true
@@ -84,33 +85,15 @@ Cura.MenuItem
onTriggered: menuPopup.close()
}
- Popup
+ MaterialBrandSubMenu
{
id: menuPopup
- width: materialTypesList.width + padding * 2
- height: materialTypesList.height + padding * 2
- property var flipped: false
-
- x: parent.width - UM.Theme.getSize("default_lining").width
- y: {
- // Checks if popup is more than halfway down the screen AND further than 400 down (this avoids popup going off the top of screen)
- // If it is then the popup will push up instead of down
- // This fixes the popups appearing bellow the bottom of the screen.
-
- if (materialBrandMenu.parent.height / 2 < parent.y && parent.y > 400) {
- flipped = true
- return -UM.Theme.getSize("default_lining").width - height + UM.Theme.getSize("menu").height
- }
- flipped = false
- return -UM.Theme.getSize("default_lining").width
- }
-
- padding: background.border.width
// Nasty hack to ensure that we can keep track if the popup contains the mouse.
// Since we also want a hover for the sub items (and these events are sent async)
// We have to keep a count of itemHovered (instead of just a bool)
property int itemHovered: 0
+
MouseArea
{
id: submenuArea
@@ -120,16 +103,11 @@ Cura.MenuItem
onEntered: hideTimer.restartTimer()
}
- background: Rectangle
- {
- color: UM.Theme.getColor("main_background")
- border.color: UM.Theme.getColor("lining")
- border.width: UM.Theme.getSize("default_lining").width
- }
-
Column
{
id: materialTypesList
+ width: UM.Theme.getSize("menu").width
+ height: childrenRect.height
spacing: 0
property var brandMaterials: materialTypesModel.material_types
@@ -146,9 +124,7 @@ Cura.MenuItem
height: UM.Theme.getSize("menu").height
width: UM.Theme.getSize("menu").width
- color: materialTypeButton.containsMouse ? UM.Theme.getColor("background_2") : UM.Theme.getColor("background_1")
-
- property var isFlipped: menuPopup.flipped
+ color: materialTypeButton.containsMouse ? UM.Theme.getColor("background_2") : "transparent"
RowLayout
{
@@ -185,7 +161,7 @@ Cura.MenuItem
source: UM.Theme.getIcon("ChevronSingleRight")
}
- Item
+ Item
{
// Right side margin
width: UM.Theme.getSize("default_margin").width
@@ -236,34 +212,17 @@ Cura.MenuItem
onTriggered: colorPopup.close()
}
- Popup
+ MaterialBrandSubMenu
{
id: colorPopup
- width: materialColorsList.width + padding * 2
- height: materialColorsList.height + padding * 2
- x: parent.width
- y: {
- // If flipped the popup should push up rather than down from the parent
- if (brandMaterialBase.isFlipped) {
- return -height + UM.Theme.getSize("menu").height + UM.Theme.getSize("default_lining").width
- }
- return -UM.Theme.getSize("default_lining").width
- }
-
property int itemHovered: 0
- padding: background.border.width
-
- background: Rectangle
- {
- color: UM.Theme.getColor("main_background")
- border.color: UM.Theme.getColor("lining")
- border.width: UM.Theme.getSize("default_lining").width
- }
Column
{
id: materialColorsList
property var brandColors: model.colors
+ width: UM.Theme.getSize("menu").width
+ height: childrenRect.height
spacing: 0
Repeater
@@ -273,12 +232,38 @@ Cura.MenuItem
delegate: Rectangle
{
height: UM.Theme.getSize("menu").height
- width: UM.Theme.getSize("menu").width
+ width: parent.width
- color: materialColorButton.containsMouse ? UM.Theme.getColor("background_2") : UM.Theme.getColor("background_1")
+ color: materialColorButton.containsMouse ? UM.Theme.getColor("background_2") : UM.Theme.getColor("main_background")
+
+ MouseArea
+ {
+ id: materialColorButton
+ anchors.fill: parent
+ hoverEnabled: true
+ onClicked:
+ {
+ Cura.MachineManager.setMaterial(extruderIndex, model.container_node);
+ menuPopup.close();
+ colorPopup.close();
+ materialMenu.close();
+ }
+ onEntered:
+ {
+ menuPopup.itemHovered += 1;
+ colorPopup.itemHovered += 1;
+ }
+ onExited:
+ {
+ menuPopup.itemHovered -= 1;
+ colorPopup.itemHovered -= 1;
+ }
+ }
Item
{
+ height: parent.height
+ width: parent.width
opacity: materialBrandMenu.enabled ? 1 : 0.5
anchors.fill: parent
@@ -309,31 +294,6 @@ Cura.MenuItem
wrapMode: Text.NoWrap
}
}
-
- MouseArea
- {
- id: materialColorButton
- anchors.fill: parent
-
- hoverEnabled: true
- onClicked:
- {
- Cura.MachineManager.setMaterial(extruderIndex, model.container_node);
- menuPopup.close();
- colorPopup.close();
- materialMenu.close();
- }
- onEntered:
- {
- menuPopup.itemHovered += 1;
- colorPopup.itemHovered += 1;
- }
- onExited:
- {
- menuPopup.itemHovered -= 1;
- colorPopup.itemHovered -= 1;
- }
- }
}
}
}
diff --git a/resources/qml/Menus/MaterialBrandSubMenu.qml b/resources/qml/Menus/MaterialBrandSubMenu.qml
new file mode 100644
index 0000000000..af7e6cfb0e
--- /dev/null
+++ b/resources/qml/Menus/MaterialBrandSubMenu.qml
@@ -0,0 +1,118 @@
+// Copyright (c) 2022 UltiMaker
+// Cura is released under the terms of the LGPLv3 or higher.
+
+import QtQuick 2.7
+import QtQuick.Controls 2.4
+import QtQuick.Layouts 2.7
+
+import UM 1.5 as UM
+import Cura 1.7 as Cura
+
+Popup
+{
+ id: materialBrandSubMenu
+
+ bottomPadding: UM.Theme.getSize("thin_margin").height
+ topPadding: UM.Theme.getSize("thin_margin").height
+
+ implicitWidth: scrollViewContent.width + scrollbar.width + leftPadding + rightPadding
+ implicitHeight: scrollViewContent.height + bottomPadding + topPadding
+
+ // offset position relative to the parent
+ property int implicitX: parent.width
+ property int implicitY: -UM.Theme.getSize("thin_margin").height
+
+ default property alias contents: scrollViewContent.children
+
+ x: implicitX
+ y: implicitY
+
+ // needed for the `mapToItem` function to work; apparently a Popup is not an Item
+ Item
+ {
+ id: materialBrandSubMenuItem
+ anchors.fill: parent
+ }
+
+ onOpened:
+ {
+ // we want to make sure here that the popup never goes out side the window so we adjust the x and y position
+ // based on the width/height of the mainWindow/popup. QML is a bit weird here though, as the globalPosition
+ // is in absolute coordinates relative to the origin of the mainWindow while setting the x and y coordinates
+ // of the popup only changes the position relative to the parent.
+
+ // reset position, the remainder of the function asumes this position and size
+ materialBrandSubMenu.x = implicitX;
+ materialBrandSubMenu.y = implicitY;
+ materialBrandSubMenu.width = implicitWidth;
+ materialBrandSubMenu.height = implicitHeight;
+
+ const globalPosition = materialBrandSubMenuItem.mapToItem(null, 0, 0);
+
+ if (globalPosition.y > mainWindow.height - materialBrandSubMenu.height)
+ {
+ if (mainWindow.height > materialBrandSubMenu.height)
+ {
+ const targetY = mainWindow.height - materialBrandSubMenu.height;
+ const deltaY = globalPosition.y - targetY;
+ materialBrandSubMenu.y = implicitY - deltaY;
+ }
+ else
+ {
+ // if popup is taller then the the component, limit
+ // the components height and set the position to
+ // y = 0 (in absolute coordinates)
+ materialBrandSubMenu.y = implicitY - globalPosition.y;
+ materialBrandSubMenu.height = mainWindow.height;
+ }
+ }
+
+ if (globalPosition.x > mainWindow.width - materialBrandSubMenu.width)
+ {
+ if (mainWindow.width > materialBrandSubMenu.width)
+ {
+ const targetX = mainWindow.width - materialBrandSubMenu.width;
+ const deltaX = globalPosition.x - targetX;
+ materialBrandSubMenu.x = implicitX - deltaX;
+ }
+ else
+ {
+ materialBrandSubMenu.x = implicitX - globalPosition.x;
+ materialBrandSubMenu.width = mainWindow.width;
+ }
+ }
+ }
+
+ padding: background.border.width
+
+ background: Rectangle
+ {
+ color: UM.Theme.getColor("main_background")
+ border.color: UM.Theme.getColor("lining")
+ border.width: UM.Theme.getSize("default_lining").width
+ }
+
+ ScrollView
+ {
+ id: scrollView
+ anchors.fill: parent
+ contentHeight: scrollViewContent.height
+ clip: true
+
+ ScrollBar.vertical: UM.ScrollBar
+ {
+ id: scrollbar
+ anchors.right: parent.right
+ anchors.top: parent.top
+ anchors.bottom: parent.bottom
+ }
+
+ Rectangle
+ {
+ id: scrollViewContent
+ width: childrenRect.width
+ height: childrenRect.height
+ color: UM.Theme.getColor("main_background")
+ }
+ }
+}
\ No newline at end of file
diff --git a/resources/qml/PrintSetupSelector/PrintSetupSelectorContents.qml b/resources/qml/PrintSetupSelector/PrintSetupSelectorContents.qml
index 9d3da51356..05407e6e0e 100644
--- a/resources/qml/PrintSetupSelector/PrintSetupSelectorContents.qml
+++ b/resources/qml/PrintSetupSelector/PrintSetupSelectorContents.qml
@@ -67,6 +67,11 @@ Item
top: parent.top
}
visible: currentModeIndex == PrintSetupSelectorContents.Mode.Recommended
+ height: {
+ const height = base.height - (customPrintSetup.mapToItem(null, 0, 0).y + buttonRow.height + UM.Theme.getSize("default_margin").height);
+ const maxHeight = UM.Preferences.getValue("view/settings_list_height");
+ return Math.min(implicitHeight, height, maxHeight);
+ }
function onModeChanged()
{
diff --git a/resources/qml/PrintSetupSelector/Recommended/RecommendedPrintSetup.qml b/resources/qml/PrintSetupSelector/Recommended/RecommendedPrintSetup.qml
index f78ae38dce..80e171bed4 100644
--- a/resources/qml/PrintSetupSelector/Recommended/RecommendedPrintSetup.qml
+++ b/resources/qml/PrintSetupSelector/Recommended/RecommendedPrintSetup.qml
@@ -2,34 +2,41 @@
//Cura is released under the terms of the LGPLv3 or higher.
import QtQuick 2.10
+import QtQuick.Controls 2.15
import QtQuick.Layouts 1.1
import UM 1.6 as UM
import Cura 1.6 as Cura
import ".."
-Item
+ScrollView
{
id: recommendedPrintSetup
- height: childrenRect.height + 2 * padding
+ implicitHeight: settingsColumn.height + 2 * padding
property bool settingsEnabled: Cura.ExtruderManager.activeExtruderStackId || extrudersEnabledCount.properties.value == 1
- property real padding: UM.Theme.getSize("default_margin").width
+
+ padding: UM.Theme.getSize("default_margin").width
function onModeChanged() {}
- Column
- {
- spacing: UM.Theme.getSize("default_margin").height
-
+ ScrollBar.vertical: UM.ScrollBar {
+ id: scroll
anchors
{
- left: parent.left
- right: parent.right
top: parent.top
- margins: parent.padding
+ right: parent.right
+ bottom: parent.bottom
}
+ }
+
+ Column
+ {
+ id: settingsColumn
+ spacing: UM.Theme.getSize("default_margin").height
+
+ width: recommendedPrintSetup.width - 2 * recommendedPrintSetup.padding - (scroll.visible ? scroll.width : 0)
// TODO
property real firstColumnWidth: Math.round(width / 3)
diff --git a/resources/qml/Widgets/SingleSettingTextField.qml b/resources/qml/Widgets/SingleSettingTextField.qml
index 5bff7fdb5a..12d24d285d 100644
--- a/resources/qml/Widgets/SingleSettingTextField.qml
+++ b/resources/qml/Widgets/SingleSettingTextField.qml
@@ -87,15 +87,17 @@ UM.TextField
function parseValueUpdateSetting()
{
- if (propertyProvider.properties.value === text || (parseFloat(propertyProvider.properties.value) === parseFloat(text)))
+ // User convenience. We use dots for decimal values
+ const modified_text = text.replace(",", ".");
+ if (propertyProvider.properties.value === modified_text || (parseFloat(propertyProvider.properties.value) === parseFloat(modified_text)))
{
// Don't set the property value from the control. It already has the same value
return
}
- if (propertyProvider && text !== propertyProvider.properties.value)
+ if (propertyProvider && modified_text !== propertyProvider.properties.value)
{
- updateSetting(text);
+ updateSetting(modified_text);
}
}
@@ -138,7 +140,7 @@ UM.TextField
color: UM.Theme.getColor("setting_validation_warning_background")
}
},
- State
+ State
{
name: "disabled"
when: !control.enabled
diff --git a/resources/variants/modix_v3_base_0.4.inst.cfg b/resources/variants/modix_v3_base_0.4.inst.cfg
new file mode 100644
index 0000000000..c3d64518ae
--- /dev/null
+++ b/resources/variants/modix_v3_base_0.4.inst.cfg
@@ -0,0 +1,13 @@
+[general]
+definition = modix_v3_base
+name = 0.4 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+machine_nozzle_size = 0.4
+
diff --git a/resources/variants/modix_v3_base_0.6.inst.cfg b/resources/variants/modix_v3_base_0.6.inst.cfg
new file mode 100644
index 0000000000..8d2cffa3e9
--- /dev/null
+++ b/resources/variants/modix_v3_base_0.6.inst.cfg
@@ -0,0 +1,13 @@
+[general]
+definition = modix_v3_base
+name = 0.6 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+machine_nozzle_size = 0.6
+
diff --git a/resources/variants/modix_v3_base_0.8.inst.cfg b/resources/variants/modix_v3_base_0.8.inst.cfg
new file mode 100644
index 0000000000..81b5130473
--- /dev/null
+++ b/resources/variants/modix_v3_base_0.8.inst.cfg
@@ -0,0 +1,13 @@
+[general]
+definition = modix_v3_base
+name = 0.8 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+machine_nozzle_size = 0.8
+
diff --git a/resources/variants/modix_v3_base_1.0.inst.cfg b/resources/variants/modix_v3_base_1.0.inst.cfg
new file mode 100644
index 0000000000..1de772e569
--- /dev/null
+++ b/resources/variants/modix_v3_base_1.0.inst.cfg
@@ -0,0 +1,15 @@
+[general]
+definition = modix_v3_base
+name = 1.0 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+infill_pattern = lines
+machine_nozzle_size = 1.0
+support_angle = 45
+
diff --git a/resources/variants/modix_v3_base_1.2.inst.cfg b/resources/variants/modix_v3_base_1.2.inst.cfg
new file mode 100644
index 0000000000..e443d2f939
--- /dev/null
+++ b/resources/variants/modix_v3_base_1.2.inst.cfg
@@ -0,0 +1,15 @@
+[general]
+definition = modix_v3_base
+name = 1.2 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+infill_pattern = lines
+machine_nozzle_size = 1.2
+support_angle = 45
+
diff --git a/resources/variants/modix_v3_base_1.4.inst.cfg b/resources/variants/modix_v3_base_1.4.inst.cfg
new file mode 100644
index 0000000000..a6ba9fc306
--- /dev/null
+++ b/resources/variants/modix_v3_base_1.4.inst.cfg
@@ -0,0 +1,15 @@
+[general]
+definition = modix_v3_base
+name = 1.4 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+infill_pattern = lines
+machine_nozzle_size = 1.4
+support_angle = 45
+
diff --git a/resources/variants/modix_v3_big120X_0.4.inst.cfg b/resources/variants/modix_v3_big120X_0.4.inst.cfg
new file mode 100644
index 0000000000..f0106a2af4
--- /dev/null
+++ b/resources/variants/modix_v3_big120X_0.4.inst.cfg
@@ -0,0 +1,13 @@
+[general]
+definition = modix_v3_big120x
+name = 0.4 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+machine_nozzle_size = 0.4
+
diff --git a/resources/variants/modix_v3_big120X_0.6.inst.cfg b/resources/variants/modix_v3_big120X_0.6.inst.cfg
new file mode 100644
index 0000000000..5bd0b38b89
--- /dev/null
+++ b/resources/variants/modix_v3_big120X_0.6.inst.cfg
@@ -0,0 +1,13 @@
+[general]
+definition = modix_v3_big120x
+name = 0.6 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+machine_nozzle_size = 0.6
+
diff --git a/resources/variants/modix_v3_big120X_0.8.inst.cfg b/resources/variants/modix_v3_big120X_0.8.inst.cfg
new file mode 100644
index 0000000000..77374c5a37
--- /dev/null
+++ b/resources/variants/modix_v3_big120X_0.8.inst.cfg
@@ -0,0 +1,13 @@
+[general]
+definition = modix_v3_big120x
+name = 0.8 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+machine_nozzle_size = 0.8
+
diff --git a/resources/variants/modix_v3_big120X_1.0.inst.cfg b/resources/variants/modix_v3_big120X_1.0.inst.cfg
new file mode 100644
index 0000000000..ce1b67ed45
--- /dev/null
+++ b/resources/variants/modix_v3_big120X_1.0.inst.cfg
@@ -0,0 +1,15 @@
+[general]
+definition = modix_v3_big120x
+name = 1.0 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+infill_pattern = lines
+machine_nozzle_size = 1.0
+support_angle = 45
+
diff --git a/resources/variants/modix_v3_big120X_1.2.inst.cfg b/resources/variants/modix_v3_big120X_1.2.inst.cfg
new file mode 100644
index 0000000000..0ef8207a03
--- /dev/null
+++ b/resources/variants/modix_v3_big120X_1.2.inst.cfg
@@ -0,0 +1,15 @@
+[general]
+definition = modix_v3_big120x
+name = 1.2 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+infill_pattern = lines
+machine_nozzle_size = 1.2
+support_angle = 45
+
diff --git a/resources/variants/modix_v3_big120X_1.4.inst.cfg b/resources/variants/modix_v3_big120X_1.4.inst.cfg
new file mode 100644
index 0000000000..88b6f3a27f
--- /dev/null
+++ b/resources/variants/modix_v3_big120X_1.4.inst.cfg
@@ -0,0 +1,15 @@
+[general]
+definition = modix_v3_big120x
+name = 1.4 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+infill_pattern = lines
+machine_nozzle_size = 1.4
+support_angle = 45
+
diff --git a/resources/variants/modix_v3_big120Z_0.4.inst.cfg b/resources/variants/modix_v3_big120Z_0.4.inst.cfg
new file mode 100644
index 0000000000..767a2b847c
--- /dev/null
+++ b/resources/variants/modix_v3_big120Z_0.4.inst.cfg
@@ -0,0 +1,13 @@
+[general]
+definition = modix_v3_big120Z
+name = 0.4 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+machine_nozzle_size = 0.4
+
diff --git a/resources/variants/modix_v3_big120Z_0.6.inst.cfg b/resources/variants/modix_v3_big120Z_0.6.inst.cfg
new file mode 100644
index 0000000000..36d16e134d
--- /dev/null
+++ b/resources/variants/modix_v3_big120Z_0.6.inst.cfg
@@ -0,0 +1,13 @@
+[general]
+definition = modix_v3_big120Z
+name = 0.6 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+machine_nozzle_size = 0.6
+
diff --git a/resources/variants/modix_v3_big120Z_0.8.inst.cfg b/resources/variants/modix_v3_big120Z_0.8.inst.cfg
new file mode 100644
index 0000000000..cbcacf34db
--- /dev/null
+++ b/resources/variants/modix_v3_big120Z_0.8.inst.cfg
@@ -0,0 +1,13 @@
+[general]
+definition = modix_v3_big120Z
+name = 0.8 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+machine_nozzle_size = 0.8
+
diff --git a/resources/variants/modix_v3_big120Z_1.0.inst.cfg b/resources/variants/modix_v3_big120Z_1.0.inst.cfg
new file mode 100644
index 0000000000..9bd5de9303
--- /dev/null
+++ b/resources/variants/modix_v3_big120Z_1.0.inst.cfg
@@ -0,0 +1,15 @@
+[general]
+definition = modix_v3_big120Z
+name = 1.0 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+infill_pattern = lines
+machine_nozzle_size = 1.0
+support_angle = 45
+
diff --git a/resources/variants/modix_v3_big120Z_1.2.inst.cfg b/resources/variants/modix_v3_big120Z_1.2.inst.cfg
new file mode 100644
index 0000000000..bafce85a76
--- /dev/null
+++ b/resources/variants/modix_v3_big120Z_1.2.inst.cfg
@@ -0,0 +1,15 @@
+[general]
+definition = modix_v3_big120Z
+name = 1.2 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+infill_pattern = lines
+machine_nozzle_size = 1.2
+support_angle = 45
+
diff --git a/resources/variants/modix_v3_big120Z_1.4.inst.cfg b/resources/variants/modix_v3_big120Z_1.4.inst.cfg
new file mode 100644
index 0000000000..ac36bec80a
--- /dev/null
+++ b/resources/variants/modix_v3_big120Z_1.4.inst.cfg
@@ -0,0 +1,15 @@
+[general]
+definition = modix_v3_big120Z
+name = 1.4 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+infill_pattern = lines
+machine_nozzle_size = 1.4
+support_angle = 45
+
diff --git a/resources/variants/modix_v3_big180X_0.4.inst.cfg b/resources/variants/modix_v3_big180X_0.4.inst.cfg
new file mode 100644
index 0000000000..dd1b3cec3f
--- /dev/null
+++ b/resources/variants/modix_v3_big180X_0.4.inst.cfg
@@ -0,0 +1,13 @@
+[general]
+definition = modix_v3_big180X
+name = 0.4 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+machine_nozzle_size = 0.4
+
diff --git a/resources/variants/modix_v3_big180X_0.6.inst.cfg b/resources/variants/modix_v3_big180X_0.6.inst.cfg
new file mode 100644
index 0000000000..32f5de45bb
--- /dev/null
+++ b/resources/variants/modix_v3_big180X_0.6.inst.cfg
@@ -0,0 +1,13 @@
+[general]
+definition = modix_v3_big180X
+name = 0.6 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+machine_nozzle_size = 0.6
+
diff --git a/resources/variants/modix_v3_big180X_0.8.inst.cfg b/resources/variants/modix_v3_big180X_0.8.inst.cfg
new file mode 100644
index 0000000000..39595cd641
--- /dev/null
+++ b/resources/variants/modix_v3_big180X_0.8.inst.cfg
@@ -0,0 +1,13 @@
+[general]
+definition = modix_v3_big180X
+name = 0.8 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+machine_nozzle_size = 0.8
+
diff --git a/resources/variants/modix_v3_big180X_1.0.inst.cfg b/resources/variants/modix_v3_big180X_1.0.inst.cfg
new file mode 100644
index 0000000000..0e8e40f43e
--- /dev/null
+++ b/resources/variants/modix_v3_big180X_1.0.inst.cfg
@@ -0,0 +1,15 @@
+[general]
+definition = modix_v3_big180X
+name = 1.0 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+infill_pattern = lines
+machine_nozzle_size = 1.0
+support_angle = 45
+
diff --git a/resources/variants/modix_v3_big180X_1.2.inst.cfg b/resources/variants/modix_v3_big180X_1.2.inst.cfg
new file mode 100644
index 0000000000..50595149f6
--- /dev/null
+++ b/resources/variants/modix_v3_big180X_1.2.inst.cfg
@@ -0,0 +1,15 @@
+[general]
+definition = modix_v3_big180X
+name = 1.2 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+infill_pattern = lines
+machine_nozzle_size = 1.2
+support_angle = 45
+
diff --git a/resources/variants/modix_v3_big180X_1.4.inst.cfg b/resources/variants/modix_v3_big180X_1.4.inst.cfg
new file mode 100644
index 0000000000..3dae827b02
--- /dev/null
+++ b/resources/variants/modix_v3_big180X_1.4.inst.cfg
@@ -0,0 +1,15 @@
+[general]
+definition = modix_v3_big180X
+name = 1.4 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+infill_pattern = lines
+machine_nozzle_size = 1.4
+support_angle = 45
+
diff --git a/resources/variants/modix_v3_big40_0.4.inst.cfg b/resources/variants/modix_v3_big40_0.4.inst.cfg
new file mode 100644
index 0000000000..a46f582ec4
--- /dev/null
+++ b/resources/variants/modix_v3_big40_0.4.inst.cfg
@@ -0,0 +1,13 @@
+[general]
+definition = modix_v3_big40
+name = 0.4 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+machine_nozzle_size = 0.4
+
diff --git a/resources/variants/modix_v3_big40_0.6.inst.cfg b/resources/variants/modix_v3_big40_0.6.inst.cfg
new file mode 100644
index 0000000000..ce758510cf
--- /dev/null
+++ b/resources/variants/modix_v3_big40_0.6.inst.cfg
@@ -0,0 +1,13 @@
+[general]
+definition = modix_v3_big40
+name = 0.6 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+machine_nozzle_size = 0.6
+
diff --git a/resources/variants/modix_v3_big40_0.8.inst.cfg b/resources/variants/modix_v3_big40_0.8.inst.cfg
new file mode 100644
index 0000000000..31d8a6f980
--- /dev/null
+++ b/resources/variants/modix_v3_big40_0.8.inst.cfg
@@ -0,0 +1,13 @@
+[general]
+definition = modix_v3_big40
+name = 0.8 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+machine_nozzle_size = 0.8
+
diff --git a/resources/variants/modix_v3_big40_1.0.inst.cfg b/resources/variants/modix_v3_big40_1.0.inst.cfg
new file mode 100644
index 0000000000..fb1499278a
--- /dev/null
+++ b/resources/variants/modix_v3_big40_1.0.inst.cfg
@@ -0,0 +1,15 @@
+[general]
+definition = modix_v3_big40
+name = 1.0 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+infill_pattern = lines
+machine_nozzle_size = 1.0
+support_angle = 45
+
diff --git a/resources/variants/modix_v3_big40_1.2.inst.cfg b/resources/variants/modix_v3_big40_1.2.inst.cfg
new file mode 100644
index 0000000000..30ff80e4a2
--- /dev/null
+++ b/resources/variants/modix_v3_big40_1.2.inst.cfg
@@ -0,0 +1,15 @@
+[general]
+definition = modix_v3_big40
+name = 1.2 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+infill_pattern = lines
+machine_nozzle_size = 1.2
+support_angle = 45
+
diff --git a/resources/variants/modix_v3_big40_1.4.inst.cfg b/resources/variants/modix_v3_big40_1.4.inst.cfg
new file mode 100644
index 0000000000..610bd97e2b
--- /dev/null
+++ b/resources/variants/modix_v3_big40_1.4.inst.cfg
@@ -0,0 +1,15 @@
+[general]
+definition = modix_v3_big40
+name = 1.4 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+infill_pattern = lines
+machine_nozzle_size = 1.4
+support_angle = 45
+
diff --git a/resources/variants/modix_v3_big60_0.4.inst.cfg b/resources/variants/modix_v3_big60_0.4.inst.cfg
new file mode 100644
index 0000000000..00aa2ca553
--- /dev/null
+++ b/resources/variants/modix_v3_big60_0.4.inst.cfg
@@ -0,0 +1,13 @@
+[general]
+definition = modix_v3_big60
+name = 0.4 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+machine_nozzle_size = 0.4
+
diff --git a/resources/variants/modix_v3_big60_0.6.inst.cfg b/resources/variants/modix_v3_big60_0.6.inst.cfg
new file mode 100644
index 0000000000..b73d7a8fa6
--- /dev/null
+++ b/resources/variants/modix_v3_big60_0.6.inst.cfg
@@ -0,0 +1,13 @@
+[general]
+definition = modix_v3_big60
+name = 0.6 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+machine_nozzle_size = 0.6
+
diff --git a/resources/variants/modix_v3_big60_0.8.inst.cfg b/resources/variants/modix_v3_big60_0.8.inst.cfg
new file mode 100644
index 0000000000..2cf72ab654
--- /dev/null
+++ b/resources/variants/modix_v3_big60_0.8.inst.cfg
@@ -0,0 +1,13 @@
+[general]
+definition = modix_v3_big60
+name = 0.8 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+machine_nozzle_size = 0.8
+
diff --git a/resources/variants/modix_v3_big60_1.0.inst.cfg b/resources/variants/modix_v3_big60_1.0.inst.cfg
new file mode 100644
index 0000000000..015ebe249b
--- /dev/null
+++ b/resources/variants/modix_v3_big60_1.0.inst.cfg
@@ -0,0 +1,15 @@
+[general]
+definition = modix_v3_big60
+name = 1.0 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+infill_pattern = lines
+machine_nozzle_size = 1.0
+support_angle = 45
+
diff --git a/resources/variants/modix_v3_big60_1.2.inst.cfg b/resources/variants/modix_v3_big60_1.2.inst.cfg
new file mode 100644
index 0000000000..e6c5b153df
--- /dev/null
+++ b/resources/variants/modix_v3_big60_1.2.inst.cfg
@@ -0,0 +1,15 @@
+[general]
+definition = modix_v3_big60
+name = 1.2 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+infill_pattern = lines
+machine_nozzle_size = 1.2
+support_angle = 45
+
diff --git a/resources/variants/modix_v3_big60_1.4.inst.cfg b/resources/variants/modix_v3_big60_1.4.inst.cfg
new file mode 100644
index 0000000000..87847c148a
--- /dev/null
+++ b/resources/variants/modix_v3_big60_1.4.inst.cfg
@@ -0,0 +1,15 @@
+[general]
+definition = modix_v3_big60
+name = 1.4 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+infill_pattern = lines
+machine_nozzle_size = 1.4
+support_angle = 45
+
diff --git a/resources/variants/modix_v3_bigmeter_0.4.inst.cfg b/resources/variants/modix_v3_bigmeter_0.4.inst.cfg
new file mode 100644
index 0000000000..9243e88bb5
--- /dev/null
+++ b/resources/variants/modix_v3_bigmeter_0.4.inst.cfg
@@ -0,0 +1,13 @@
+[general]
+definition = modix_v3_big_meter
+name = 0.4 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+machine_nozzle_size = 0.4
+
diff --git a/resources/variants/modix_v3_bigmeter_0.6.inst.cfg b/resources/variants/modix_v3_bigmeter_0.6.inst.cfg
new file mode 100644
index 0000000000..a273e97a96
--- /dev/null
+++ b/resources/variants/modix_v3_bigmeter_0.6.inst.cfg
@@ -0,0 +1,13 @@
+[general]
+definition = modix_v3_big_meter
+name = 0.6 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+machine_nozzle_size = 0.6
+
diff --git a/resources/variants/modix_v3_bigmeter_0.8.inst.cfg b/resources/variants/modix_v3_bigmeter_0.8.inst.cfg
new file mode 100644
index 0000000000..a1e90ed4a6
--- /dev/null
+++ b/resources/variants/modix_v3_bigmeter_0.8.inst.cfg
@@ -0,0 +1,13 @@
+[general]
+definition = modix_v3_big_meter
+name = 0.8 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+machine_nozzle_size = 0.8
+
diff --git a/resources/variants/modix_v3_bigmeter_1.0.inst.cfg b/resources/variants/modix_v3_bigmeter_1.0.inst.cfg
new file mode 100644
index 0000000000..82b427b201
--- /dev/null
+++ b/resources/variants/modix_v3_bigmeter_1.0.inst.cfg
@@ -0,0 +1,15 @@
+[general]
+definition = modix_v3_big_meter
+name = 1.0 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+infill_pattern = lines
+machine_nozzle_size = 1.0
+support_angle = 45
+
diff --git a/resources/variants/modix_v3_bigmeter_1.2.inst.cfg b/resources/variants/modix_v3_bigmeter_1.2.inst.cfg
new file mode 100644
index 0000000000..a7cc386632
--- /dev/null
+++ b/resources/variants/modix_v3_bigmeter_1.2.inst.cfg
@@ -0,0 +1,15 @@
+[general]
+definition = modix_v3_big_meter
+name = 1.2 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+infill_pattern = lines
+machine_nozzle_size = 1.2
+support_angle = 45
+
diff --git a/resources/variants/modix_v3_bigmeter_1.4.inst.cfg b/resources/variants/modix_v3_bigmeter_1.4.inst.cfg
new file mode 100644
index 0000000000..22d2cfaeb3
--- /dev/null
+++ b/resources/variants/modix_v3_bigmeter_1.4.inst.cfg
@@ -0,0 +1,15 @@
+[general]
+definition = modix_v3_big_meter
+name = 1.4 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+infill_pattern = lines
+machine_nozzle_size = 1.4
+support_angle = 45
+
diff --git a/resources/variants/modix_v4_base_0.4.inst.cfg b/resources/variants/modix_v4_base_0.4.inst.cfg
new file mode 100644
index 0000000000..26311b47e6
--- /dev/null
+++ b/resources/variants/modix_v4_base_0.4.inst.cfg
@@ -0,0 +1,13 @@
+[general]
+definition = modix_v4_base
+name = 0.4 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+machine_nozzle_size = 0.4
+
diff --git a/resources/variants/modix_v4_base_0.6.inst.cfg b/resources/variants/modix_v4_base_0.6.inst.cfg
new file mode 100644
index 0000000000..8c27750903
--- /dev/null
+++ b/resources/variants/modix_v4_base_0.6.inst.cfg
@@ -0,0 +1,13 @@
+[general]
+definition = modix_v4_base
+name = 0.6 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+machine_nozzle_size = 0.6
+
diff --git a/resources/variants/modix_v4_base_0.8.inst.cfg b/resources/variants/modix_v4_base_0.8.inst.cfg
new file mode 100644
index 0000000000..d6e64d55b0
--- /dev/null
+++ b/resources/variants/modix_v4_base_0.8.inst.cfg
@@ -0,0 +1,13 @@
+[general]
+definition = modix_v4_base
+name = 0.8 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+machine_nozzle_size = 0.8
+
diff --git a/resources/variants/modix_v4_base_1.0.inst.cfg b/resources/variants/modix_v4_base_1.0.inst.cfg
new file mode 100644
index 0000000000..804142f9c4
--- /dev/null
+++ b/resources/variants/modix_v4_base_1.0.inst.cfg
@@ -0,0 +1,15 @@
+[general]
+definition = modix_v4_base
+name = 1.0 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+infill_pattern = lines
+machine_nozzle_size = 1.0
+support_angle = 45
+
diff --git a/resources/variants/modix_v4_base_1.2.inst.cfg b/resources/variants/modix_v4_base_1.2.inst.cfg
new file mode 100644
index 0000000000..96fdaaa6e5
--- /dev/null
+++ b/resources/variants/modix_v4_base_1.2.inst.cfg
@@ -0,0 +1,15 @@
+[general]
+definition = modix_v4_base
+name = 1.2 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+infill_pattern = lines
+machine_nozzle_size = 1.2
+support_angle = 45
+
diff --git a/resources/variants/modix_v4_base_1.4.inst.cfg b/resources/variants/modix_v4_base_1.4.inst.cfg
new file mode 100644
index 0000000000..2447145e74
--- /dev/null
+++ b/resources/variants/modix_v4_base_1.4.inst.cfg
@@ -0,0 +1,15 @@
+[general]
+definition = modix_v4_base
+name = 1.4 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+infill_pattern = lines
+machine_nozzle_size = 1.4
+support_angle = 45
+
diff --git a/resources/variants/modix_v4_big120X_0.4.inst.cfg b/resources/variants/modix_v4_big120X_0.4.inst.cfg
new file mode 100644
index 0000000000..3b42a17b5b
--- /dev/null
+++ b/resources/variants/modix_v4_big120X_0.4.inst.cfg
@@ -0,0 +1,13 @@
+[general]
+definition = modix_v4_big120x
+name = 0.4 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+machine_nozzle_size = 0.4
+
diff --git a/resources/variants/modix_v4_big120X_0.6.inst.cfg b/resources/variants/modix_v4_big120X_0.6.inst.cfg
new file mode 100644
index 0000000000..ad38973676
--- /dev/null
+++ b/resources/variants/modix_v4_big120X_0.6.inst.cfg
@@ -0,0 +1,13 @@
+[general]
+definition = modix_v4_big120x
+name = 0.6 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+machine_nozzle_size = 0.6
+
diff --git a/resources/variants/modix_v4_big120X_0.8.inst.cfg b/resources/variants/modix_v4_big120X_0.8.inst.cfg
new file mode 100644
index 0000000000..9ba46481db
--- /dev/null
+++ b/resources/variants/modix_v4_big120X_0.8.inst.cfg
@@ -0,0 +1,13 @@
+[general]
+definition = modix_v4_big120x
+name = 0.8 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+machine_nozzle_size = 0.8
+
diff --git a/resources/variants/modix_v4_big120X_1.0.inst.cfg b/resources/variants/modix_v4_big120X_1.0.inst.cfg
new file mode 100644
index 0000000000..1236595c6b
--- /dev/null
+++ b/resources/variants/modix_v4_big120X_1.0.inst.cfg
@@ -0,0 +1,15 @@
+[general]
+definition = modix_v4_big120x
+name = 1.0 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+infill_pattern = lines
+machine_nozzle_size = 1.0
+support_angle = 45
+
diff --git a/resources/variants/modix_v4_big120X_1.2.inst.cfg b/resources/variants/modix_v4_big120X_1.2.inst.cfg
new file mode 100644
index 0000000000..e973474b57
--- /dev/null
+++ b/resources/variants/modix_v4_big120X_1.2.inst.cfg
@@ -0,0 +1,15 @@
+[general]
+definition = modix_v4_big120x
+name = 1.2 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+infill_pattern = lines
+machine_nozzle_size = 1.2
+support_angle = 45
+
diff --git a/resources/variants/modix_v4_big120X_1.4.inst.cfg b/resources/variants/modix_v4_big120X_1.4.inst.cfg
new file mode 100644
index 0000000000..95d6d10b75
--- /dev/null
+++ b/resources/variants/modix_v4_big120X_1.4.inst.cfg
@@ -0,0 +1,15 @@
+[general]
+definition = modix_v4_big120x
+name = 1.4 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+infill_pattern = lines
+machine_nozzle_size = 1.4
+support_angle = 45
+
diff --git a/resources/variants/modix_v4_big120Z_0.4.inst.cfg b/resources/variants/modix_v4_big120Z_0.4.inst.cfg
new file mode 100644
index 0000000000..90523aa600
--- /dev/null
+++ b/resources/variants/modix_v4_big120Z_0.4.inst.cfg
@@ -0,0 +1,13 @@
+[general]
+definition = modix_v4_big120Z
+name = 0.4 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+machine_nozzle_size = 0.4
+
diff --git a/resources/variants/modix_v4_big120Z_0.6.inst.cfg b/resources/variants/modix_v4_big120Z_0.6.inst.cfg
new file mode 100644
index 0000000000..2b205295cf
--- /dev/null
+++ b/resources/variants/modix_v4_big120Z_0.6.inst.cfg
@@ -0,0 +1,13 @@
+[general]
+definition = modix_v4_big120Z
+name = 0.6 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+machine_nozzle_size = 0.6
+
diff --git a/resources/variants/modix_v4_big120Z_0.8.inst.cfg b/resources/variants/modix_v4_big120Z_0.8.inst.cfg
new file mode 100644
index 0000000000..bb9a916124
--- /dev/null
+++ b/resources/variants/modix_v4_big120Z_0.8.inst.cfg
@@ -0,0 +1,13 @@
+[general]
+definition = modix_v4_big120Z
+name = 0.8 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+machine_nozzle_size = 0.8
+
diff --git a/resources/variants/modix_v4_big120Z_1.0.inst.cfg b/resources/variants/modix_v4_big120Z_1.0.inst.cfg
new file mode 100644
index 0000000000..cf4fe66ce0
--- /dev/null
+++ b/resources/variants/modix_v4_big120Z_1.0.inst.cfg
@@ -0,0 +1,15 @@
+[general]
+definition = modix_v4_big120Z
+name = 1.0 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+infill_pattern = lines
+machine_nozzle_size = 1.0
+support_angle = 45
+
diff --git a/resources/variants/modix_v4_big120Z_1.2.inst.cfg b/resources/variants/modix_v4_big120Z_1.2.inst.cfg
new file mode 100644
index 0000000000..19354e1716
--- /dev/null
+++ b/resources/variants/modix_v4_big120Z_1.2.inst.cfg
@@ -0,0 +1,15 @@
+[general]
+definition = modix_v4_big120Z
+name = 1.2 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+infill_pattern = lines
+machine_nozzle_size = 1.2
+support_angle = 45
+
diff --git a/resources/variants/modix_v4_big120Z_1.4.inst.cfg b/resources/variants/modix_v4_big120Z_1.4.inst.cfg
new file mode 100644
index 0000000000..7141146b3a
--- /dev/null
+++ b/resources/variants/modix_v4_big120Z_1.4.inst.cfg
@@ -0,0 +1,15 @@
+[general]
+definition = modix_v4_big120Z
+name = 1.4 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+infill_pattern = lines
+machine_nozzle_size = 1.4
+support_angle = 45
+
diff --git a/resources/variants/modix_v4_big180X_0.4.inst.cfg b/resources/variants/modix_v4_big180X_0.4.inst.cfg
new file mode 100644
index 0000000000..8fe2f953ee
--- /dev/null
+++ b/resources/variants/modix_v4_big180X_0.4.inst.cfg
@@ -0,0 +1,13 @@
+[general]
+definition = modix_v4_big180X
+name = 0.4 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+machine_nozzle_size = 0.4
+
diff --git a/resources/variants/modix_v4_big180X_0.6.inst.cfg b/resources/variants/modix_v4_big180X_0.6.inst.cfg
new file mode 100644
index 0000000000..43b870a7d0
--- /dev/null
+++ b/resources/variants/modix_v4_big180X_0.6.inst.cfg
@@ -0,0 +1,13 @@
+[general]
+definition = modix_v4_big180X
+name = 0.6 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+machine_nozzle_size = 0.6
+
diff --git a/resources/variants/modix_v4_big180X_0.8.inst.cfg b/resources/variants/modix_v4_big180X_0.8.inst.cfg
new file mode 100644
index 0000000000..0e115b685b
--- /dev/null
+++ b/resources/variants/modix_v4_big180X_0.8.inst.cfg
@@ -0,0 +1,13 @@
+[general]
+definition = modix_v4_big180X
+name = 0.8 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+machine_nozzle_size = 0.8
+
diff --git a/resources/variants/modix_v4_big180X_1.0.inst.cfg b/resources/variants/modix_v4_big180X_1.0.inst.cfg
new file mode 100644
index 0000000000..9446851bd5
--- /dev/null
+++ b/resources/variants/modix_v4_big180X_1.0.inst.cfg
@@ -0,0 +1,15 @@
+[general]
+definition = modix_v4_big180X
+name = 1.0 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+infill_pattern = lines
+machine_nozzle_size = 1.0
+support_angle = 45
+
diff --git a/resources/variants/modix_v4_big180X_1.2.inst.cfg b/resources/variants/modix_v4_big180X_1.2.inst.cfg
new file mode 100644
index 0000000000..1bf1ae098a
--- /dev/null
+++ b/resources/variants/modix_v4_big180X_1.2.inst.cfg
@@ -0,0 +1,15 @@
+[general]
+definition = modix_v4_big180X
+name = 1.2 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+infill_pattern = lines
+machine_nozzle_size = 1.2
+support_angle = 45
+
diff --git a/resources/variants/modix_v4_big180X_1.4.inst.cfg b/resources/variants/modix_v4_big180X_1.4.inst.cfg
new file mode 100644
index 0000000000..225a180590
--- /dev/null
+++ b/resources/variants/modix_v4_big180X_1.4.inst.cfg
@@ -0,0 +1,15 @@
+[general]
+definition = modix_v4_big180X
+name = 1.4 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+infill_pattern = lines
+machine_nozzle_size = 1.4
+support_angle = 45
+
diff --git a/resources/variants/modix_v4_big60_0.4.inst.cfg b/resources/variants/modix_v4_big60_0.4.inst.cfg
new file mode 100644
index 0000000000..95403b5bd5
--- /dev/null
+++ b/resources/variants/modix_v4_big60_0.4.inst.cfg
@@ -0,0 +1,13 @@
+[general]
+definition = modix_v4_big60
+name = 0.4 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+machine_nozzle_size = 0.4
+
diff --git a/resources/variants/modix_v4_big60_0.6.inst.cfg b/resources/variants/modix_v4_big60_0.6.inst.cfg
new file mode 100644
index 0000000000..aad7e77c99
--- /dev/null
+++ b/resources/variants/modix_v4_big60_0.6.inst.cfg
@@ -0,0 +1,13 @@
+[general]
+definition = modix_v4_big60
+name = 0.6 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+machine_nozzle_size = 0.6
+
diff --git a/resources/variants/modix_v4_big60_0.8.inst.cfg b/resources/variants/modix_v4_big60_0.8.inst.cfg
new file mode 100644
index 0000000000..85e77e1f53
--- /dev/null
+++ b/resources/variants/modix_v4_big60_0.8.inst.cfg
@@ -0,0 +1,13 @@
+[general]
+definition = modix_v4_big60
+name = 0.8 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+machine_nozzle_size = 0.8
+
diff --git a/resources/variants/modix_v4_big60_1.0.inst.cfg b/resources/variants/modix_v4_big60_1.0.inst.cfg
new file mode 100644
index 0000000000..90b463f276
--- /dev/null
+++ b/resources/variants/modix_v4_big60_1.0.inst.cfg
@@ -0,0 +1,15 @@
+[general]
+definition = modix_v4_big60
+name = 1.0 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+infill_pattern = lines
+machine_nozzle_size = 1.0
+support_angle = 45
+
diff --git a/resources/variants/modix_v4_big60_1.2.inst.cfg b/resources/variants/modix_v4_big60_1.2.inst.cfg
new file mode 100644
index 0000000000..c4eb13e57d
--- /dev/null
+++ b/resources/variants/modix_v4_big60_1.2.inst.cfg
@@ -0,0 +1,15 @@
+[general]
+definition = modix_v4_big60
+name = 1.2 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+infill_pattern = lines
+machine_nozzle_size = 1.2
+support_angle = 45
+
diff --git a/resources/variants/modix_v4_big60_1.4.inst.cfg b/resources/variants/modix_v4_big60_1.4.inst.cfg
new file mode 100644
index 0000000000..468b858b0a
--- /dev/null
+++ b/resources/variants/modix_v4_big60_1.4.inst.cfg
@@ -0,0 +1,15 @@
+[general]
+definition = modix_v4_big60
+name = 1.4 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+infill_pattern = lines
+machine_nozzle_size = 1.4
+support_angle = 45
+
diff --git a/resources/variants/modix_v4_bigmeter_0.4.inst.cfg b/resources/variants/modix_v4_bigmeter_0.4.inst.cfg
new file mode 100644
index 0000000000..69a45b9374
--- /dev/null
+++ b/resources/variants/modix_v4_bigmeter_0.4.inst.cfg
@@ -0,0 +1,13 @@
+[general]
+definition = modix_v4_big_meter
+name = 0.4 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+machine_nozzle_size = 0.4
+
diff --git a/resources/variants/modix_v4_bigmeter_0.6.inst.cfg b/resources/variants/modix_v4_bigmeter_0.6.inst.cfg
new file mode 100644
index 0000000000..38dc736a26
--- /dev/null
+++ b/resources/variants/modix_v4_bigmeter_0.6.inst.cfg
@@ -0,0 +1,13 @@
+[general]
+definition = modix_v4_big_meter
+name = 0.6 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+machine_nozzle_size = 0.6
+
diff --git a/resources/variants/modix_v4_bigmeter_0.8.inst.cfg b/resources/variants/modix_v4_bigmeter_0.8.inst.cfg
new file mode 100644
index 0000000000..fc57926c7b
--- /dev/null
+++ b/resources/variants/modix_v4_bigmeter_0.8.inst.cfg
@@ -0,0 +1,13 @@
+[general]
+definition = modix_v4_big_meter
+name = 0.8 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+machine_nozzle_size = 0.8
+
diff --git a/resources/variants/modix_v4_bigmeter_1.0.inst.cfg b/resources/variants/modix_v4_bigmeter_1.0.inst.cfg
new file mode 100644
index 0000000000..10404efd72
--- /dev/null
+++ b/resources/variants/modix_v4_bigmeter_1.0.inst.cfg
@@ -0,0 +1,15 @@
+[general]
+definition = modix_v4_big_meter
+name = 1.0 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+infill_pattern = lines
+machine_nozzle_size = 1.0
+support_angle = 45
+
diff --git a/resources/variants/modix_v4_bigmeter_1.2.inst.cfg b/resources/variants/modix_v4_bigmeter_1.2.inst.cfg
new file mode 100644
index 0000000000..42b0d6a324
--- /dev/null
+++ b/resources/variants/modix_v4_bigmeter_1.2.inst.cfg
@@ -0,0 +1,15 @@
+[general]
+definition = modix_v4_big_meter
+name = 1.2 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+infill_pattern = lines
+machine_nozzle_size = 1.2
+support_angle = 45
+
diff --git a/resources/variants/modix_v4_bigmeter_1.4.inst.cfg b/resources/variants/modix_v4_bigmeter_1.4.inst.cfg
new file mode 100644
index 0000000000..a9844fb8a5
--- /dev/null
+++ b/resources/variants/modix_v4_bigmeter_1.4.inst.cfg
@@ -0,0 +1,15 @@
+[general]
+definition = modix_v4_big_meter
+name = 1.4 mm Nozzle
+version = 4
+
+[metadata]
+hardware_type = nozzle
+setting_version = 19
+type = variant
+
+[values]
+infill_pattern = lines
+machine_nozzle_size = 1.4
+support_angle = 45
+