Merge branch 'dk_archive_db_rebased'

This commit is contained in:
Lukas Matena 2024-06-14 15:53:21 +02:00
commit b67683fa26
100 changed files with 43455 additions and 38377 deletions

View File

@ -42,6 +42,8 @@ option(SLIC3R_MSVC_PDB "Generate PDB files on MSVC in Release mode" 1)
option(SLIC3R_ASAN "Enable ASan on Clang and GCC" 0) option(SLIC3R_ASAN "Enable ASan on Clang and GCC" 0)
option(SLIC3R_UBSAN "Enable UBSan on Clang and GCC" 0) option(SLIC3R_UBSAN "Enable UBSan on Clang and GCC" 0)
option(SLIC3R_ENABLE_FORMAT_STEP "Enable compilation of STEP file support" ON) option(SLIC3R_ENABLE_FORMAT_STEP "Enable compilation of STEP file support" ON)
option(SLIC3R_LOG_TO_FILE "Enable logging into file")
option(SLIC3R_REPO_URL "Preset repo URL")
# SLIC3R_OPENGL_ES can be enabled only if SLIC3R_GUI is enabled. # SLIC3R_OPENGL_ES can be enabled only if SLIC3R_GUI is enabled.
CMAKE_DEPENDENT_OPTION(SLIC3R_OPENGL_ES "Compile PrusaSlicer targeting OpenGL ES" OFF "SLIC3R_GUI" OFF) CMAKE_DEPENDENT_OPTION(SLIC3R_OPENGL_ES "Compile PrusaSlicer targeting OpenGL ES" OFF "SLIC3R_GUI" OFF)
@ -98,6 +100,12 @@ foreach (_cache_var ${_cache_vars})
endif () endif ()
endforeach() endforeach()
if (SLIC3R_LOG_TO_FILE)
add_definitions(-DSLIC3R_LOG_TO_FILE)
endif ()
if (SLIC3R_REPO_URL)
add_definitions(-DSLIC3R_REPO_URL="${SLIC3R_REPO_URL}")
endif()
if (SLIC3R_GUI) if (SLIC3R_GUI)
add_definitions(-DSLIC3R_GUI) add_definitions(-DSLIC3R_GUI)
endif () endif ()

View File

@ -87,6 +87,7 @@ src/slic3r/GUI/Jobs/SLAImportDialog.hpp
src/slic3r/GUI/Jobs/SLAImportJob.cpp src/slic3r/GUI/Jobs/SLAImportJob.cpp
src/slic3r/GUI/KBShortcutsDialog.cpp src/slic3r/GUI/KBShortcutsDialog.cpp
src/slic3r/GUI/MainFrame.cpp src/slic3r/GUI/MainFrame.cpp
src/slic3r/GUI/UpdatesUIManager.cpp
src/slic3r/GUI/Mouse3DController.cpp src/slic3r/GUI/Mouse3DController.cpp
src/slic3r/GUI/MsgDialog.cpp src/slic3r/GUI/MsgDialog.cpp
src/slic3r/GUI/NotificationManager.hpp src/slic3r/GUI/NotificationManager.hpp

View File

@ -1,3 +1,6 @@
min_slic3r_version = 2.8.0-alpha0
2.0.0 Updated for PS2.8.0.
max_slic3r_version = 2.7.9
min_slic3r_version = 2.6.0-alpha4 min_slic3r_version = 2.6.0-alpha4
1.1.3 Fixed top solid infill extrusion width for M5C. 1.1.3 Fixed top solid infill extrusion width for M5C.
1.1.2 Added AnkerMake M5C. 1.1.2 Added AnkerMake M5C.

View File

@ -1,19 +1,21 @@
# Print profiles for the AnkerMake printers. # Print profiles for the AnkerMake printers.
[vendor] [vendor]
repo_id = non-prusa-fff
# Vendor name will be shown by the Config Wizard. # Vendor name will be shown by the Config Wizard.
name = AnkerMake name = AnkerMake
# Configuration version of this file. Config file will only be installed, if the config_version differs. # Configuration version of this file. Config file will only be installed, if the config_version differs.
# This means, the server may force the PrusaSlicer configuration to be downgraded. # This means, the server may force the PrusaSlicer configuration to be downgraded.
config_version = 1.1.3 config_version = 2.0.0
# Where to get the updates from? # Where to get the updates from?
config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/Anker/ config_update_url = https://preset-repo-api.prusa3d.com/v1/repos/non-prusa-fff/Anker/
# changelog_url = https://files.prusa3d.com/?latest=slicer-profiles&lng=%1% # changelog_url = https://files.prusa3d.com/?latest=slicer-profiles&lng=%1%
# The printer models will be shown by the Configuration Wizard in this order, # The printer models will be shown by the Configuration Wizard in this order,
# also the first model installed & the first nozzle installed will be activated after install. # also the first model installed & the first nozzle installed will be activated after install.
# Printer model name will be shown by the installation wizard. # Printer model name will be shown by the installation wizard.
config_url = https://preset-repo-api.prusa3d.com/v1/repos/non-prusa-fff/Anker/
[printer_model:M5] [printer_model:M5]
name = AnkerMake M5 name = AnkerMake M5
variants = 0.4 variants = 0.4
@ -673,4 +675,4 @@ printer_variant = 0.4
min_layer_height = 0.08 min_layer_height = 0.08
max_layer_height = 0.32 max_layer_height = 0.32
retract_lift_above = 0 retract_lift_above = 0
default_print_profile = 0.2 mm OPTIMAL (0.4 mm nozzle) @ANKER default_print_profile = 0.2 mm OPTIMAL (0.4 mm nozzle) @ANKER

View File

@ -1,3 +1,6 @@
min_slic3r_version = 2.8.0-alpha0
2.0.0 Updated for PS2.8.0.
max_slic3r_version = 2.7.9
min_slic3r_version = 2.6.0-beta1 min_slic3r_version = 2.6.0-beta1
0.2.8 Fixed compatible printer condition. 0.2.8 Fixed compatible printer condition.
0.2.7 Fixed compatible condition for MONO X. 0.2.7 Fixed compatible condition for MONO X.

View File

@ -1,19 +1,21 @@
# Print profiles for the Anycubic printers. # Print profiles for the Anycubic printers.
[vendor] [vendor]
repo_id = non-prusa-fff
# Vendor name will be shown by the Config Wizard. # Vendor name will be shown by the Config Wizard.
name = Anycubic name = Anycubic
# Configuration version of this file. Config file will only be installed, if the config_version differs. # Configuration version of this file. Config file will only be installed, if the config_version differs.
# This means, the server may force the PrusaSlicer configuration to be downgraded. # This means, the server may force the PrusaSlicer configuration to be downgraded.
config_version = 0.2.8 config_version = 2.0.0
# Where to get the updates from? # Where to get the updates from?
config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/Anycubic/ config_update_url = https://preset-repo-api.prusa3d.com/v1/repos/non-prusa-fff/Anycubic/
# changelog_url = https://files.prusa3d.com/?latest=slicer-profiles&lng=%1% # changelog_url = https://files.prusa3d.com/?latest=slicer-profiles&lng=%1%
# The printer models will be shown by the Configuration Wizard in this order, # The printer models will be shown by the Configuration Wizard in this order,
# also the first model installed & the first nozzle installed will be activated after install. # also the first model installed & the first nozzle installed will be activated after install.
# Printer model name will be shown by the installation wizard. # Printer model name will be shown by the installation wizard.
config_url = https://preset-repo-api.prusa3d.com/v1/repos/non-prusa-fff/Anycubic/
[printer_model:AKLP] [printer_model:AKLP]
name = Anycubic Kossel Linear Plus name = Anycubic Kossel Linear Plus
variants = 0.4 variants = 0.4
@ -23,6 +25,7 @@ bed_model = AKLP_Bed.stl
bed_texture = AK.svg bed_texture = AK.svg
default_materials = Generic PLA @AKOSSEL; Generic PETG @AKOSSEL; Generic ABS @AKOSSEL default_materials = Generic PLA @AKOSSEL; Generic PETG @AKOSSEL; Generic ABS @AKOSSEL
thumbnail = AKLP_thumbnail.png
[printer_model:AK] [printer_model:AK]
name = Anycubic Kossel Pulley (Linear) name = Anycubic Kossel Pulley (Linear)
variants = 0.4 variants = 0.4
@ -32,6 +35,7 @@ bed_model = AK_Bed.stl
bed_texture = AK.svg bed_texture = AK.svg
default_materials = Generic PLA @AKOSSEL; Generic PETG @AKOSSEL; Generic ABS @AKOSSEL default_materials = Generic PLA @AKOSSEL; Generic PETG @AKOSSEL; Generic ABS @AKOSSEL
thumbnail = AK_thumbnail.png
[printer_model:MEGA0] [printer_model:MEGA0]
name = Anycubic Mega Zero name = Anycubic Mega Zero
variants = 0.4 variants = 0.4
@ -41,6 +45,7 @@ bed_model = mega0_bed.stl
bed_texture = mega0.svg bed_texture = mega0.svg
default_materials = Generic PLA @MEGA0; Generic PETG @MEGA0; Anycubic PLA @MEGA0; Prusament PLA @MEGA0; Prusament PETG @MEGA0 default_materials = Generic PLA @MEGA0; Generic PETG @MEGA0; Anycubic PLA @MEGA0; Prusament PLA @MEGA0; Prusament PETG @MEGA0
thumbnail = MEGA0_thumbnail.png
[printer_model:I3MEGA] [printer_model:I3MEGA]
name = Anycubic i3 Mega name = Anycubic i3 Mega
variants = 0.4 variants = 0.4
@ -49,6 +54,7 @@ family = MEGA
bed_model = i3megas_bed.stl bed_model = i3megas_bed.stl
bed_texture = i3megas.svg bed_texture = i3megas.svg
thumbnail = I3MEGA_thumbnail.png
[printer_model:I3MEGAS] [printer_model:I3MEGAS]
name = Anycubic i3 Mega S name = Anycubic i3 Mega S
variants = 0.4 variants = 0.4
@ -57,6 +63,7 @@ family = MEGA
bed_model = i3megas_bed.stl bed_model = i3megas_bed.stl
bed_texture = i3megas.svg bed_texture = i3megas.svg
thumbnail = I3MEGAS_thumbnail.png
[printer_model:4MAXPRO20] [printer_model:4MAXPRO20]
name = Anycubic 4Max Pro 2.0 name = Anycubic 4Max Pro 2.0
variants = 0.4 variants = 0.4
@ -66,6 +73,7 @@ bed_model = 4MAXPRO20_bed.stl
bed_texture = 4MAXPRO20_texture.svg bed_texture = 4MAXPRO20_texture.svg
default_materials = Generic PLA @4Max Pro 2.0; Generic TPU @4Max Pro 2.0; Generic ABS @4Max Pro 2.0 default_materials = Generic PLA @4Max Pro 2.0; Generic TPU @4Max Pro 2.0; Generic ABS @4Max Pro 2.0
thumbnail = 4MAXPRO20_thumbnail.png
[printer_model:PREDATOR] [printer_model:PREDATOR]
name = Anycubic Predator name = Anycubic Predator
variants = 0.4; 0.6; 0.8 variants = 0.4; 0.6; 0.8
@ -73,34 +81,6 @@ technology = FFF
family = PREDATOR family = PREDATOR
default_materials = Generic PLA @PREDATOR; Generic PETG @PREDATOR; Generic ABS @PREDATOR default_materials = Generic PLA @PREDATOR; Generic PETG @PREDATOR; Generic ABS @PREDATOR
[printer_model:PHOTON MONO]
name = Photon Mono
variants = default
technology = SLA
family = PHOTON MONO
default_materials = Generic Blue Resin @MONO 0.05
[printer_model:PHOTON MONO X]
name = Photon Mono X
variants = default
technology = SLA
family = PHOTON MONO
default_materials = Generic Blue Resin @MONO 0.05
[printer_model:PHOTON MONO X 6K]
name = Photon Mono X 6K
variants = default
technology = SLA
family = PHOTON MONO
default_materials = Anycubic Plant-based UV Resin Grey 23 @MONO 0.05
[printer_model:PHOTON MONO SE]
name = Photon Mono SE
variants = default
technology = SLA
family = PHOTON MONO
default_materials = Generic Blue Resin @MONO 0.05
# All presets starting with asterisk, for example *common*, are intermediate and they will # All presets starting with asterisk, for example *common*, are intermediate and they will
# not make it into the user interface. # not make it into the user interface.
@ -109,6 +89,7 @@ default_materials = Generic Blue Resin @MONO 0.05
## Initial PR: https://github.com/prusa3d/PrusaSlicer/pull/4220 ## Initial PR: https://github.com/prusa3d/PrusaSlicer/pull/4220
# Common print preset # Common print preset
thumbnail = PREDATOR_thumbnail.png
[print:*common_akossel*] [print:*common_akossel*]
avoid_crossing_perimeters = 0 avoid_crossing_perimeters = 0
bottom_solid_min_thickness = 0.5 bottom_solid_min_thickness = 0.5
@ -2344,228 +2325,3 @@ use_volumetric_e = 0
variable_layer_height = 1 variable_layer_height = 1
wipe = 0 wipe = 0
z_offset = 0 z_offset = 0
## SLA printers
[sla_print:*common print ANYCUBIC SLA*]
compatible_printers_condition = printer_notes=~/.*VENDOR_ANYCUBIC.*/ and printer_notes=~/.*SLA.*/
layer_height = 0.05
pad_edge_radius = 0.5
pad_enable = 1
pad_max_merge_distance = 50
pad_wall_height = 0
pad_wall_thickness = 1
pad_wall_slope = 45
faded_layers = 8
slice_closing_radius = 0.005
support_base_diameter = 3
support_base_height = 1
support_critical_angle = 45
support_density_at_45 = 250
support_density_at_horizontal = 500
support_head_front_diameter = 0.4
support_head_penetration = 0.4
support_head_width = 3
support_max_bridge_length = 10
support_minimal_z = 0
support_object_elevation = 5
support_pillar_diameter = 1
support_pillar_connection_mode = zigzag
support_pillar_widening_factor = 0
supports_enable = 1
support_small_pillar_diameter_percent = 60%
[sla_print:0.05 Normal @ANYCUBIC ABSTRACT]
inherits = *common print ANYCUBIC SLA*
compatible_printers_condition = printer_notes=~/.*ABSTRACT_ONLY.*/
layer_height = 0.05
[sla_print:0.05 Normal @ANYCUBIC MONO]
inherits = 0.05 Normal @ANYCUBIC ABSTRACT
compatible_printers_condition = printer_notes=~/.*PHOTONMONO\n.*/
output_filename_format = [input_filename_base].pwmo
[sla_print:0.05 Normal @ANYCUBIC MONO X]
inherits = 0.05 Normal @ANYCUBIC ABSTRACT
compatible_printers_condition = printer_notes=~/.*PHOTONMONOX\n.*/
output_filename_format = [input_filename_base].pwmx
[sla_print:0.05 Normal @ANYCUBIC MONO X 6K]
inherits = 0.05 Normal @ANYCUBIC ABSTRACT
compatible_printers_condition = printer_notes=~/.*PHOTONMONOX6K\n.*/
output_filename_format = [input_filename_base].pwmx
[sla_print:0.05 Normal @ANYCUBIC MONO SE]
inherits = 0.05 Normal @ANYCUBIC ABSTRACT
compatible_printers_condition = printer_notes=~/.*PHOTONMONOSE\n.*/
output_filename_format = [input_filename_base].pwms
## SLA materials
#MONO series printer need a significantly reduced exposure time but are otherwise compatible
[sla_material:*common ANYCUBIC SLA*]
compatible_printers_condition = printer_notes=~/.*VENDOR_ANYCUBIC.*/ and printer_notes=~/.*SLA.*/
compatible_prints_condition = layer_height == 0.05
exposure_time = 7
initial_exposure_time = 40
initial_layer_height = 0.05
material_correction = 1,1,1
material_notes = #Distances are defined in mm, speeds are defined in mm/s.\n#Delay is defined in s.\nLIFT_DISTANCE=8.0\nLIFT_SPEED=2.5\nRETRACT_SPEED=3.0\nBOTTOM_LIFT_SPEED=2.0\nBOTTOM_LIFT_DISTANCE=9.0\nDELAY_BEFORE_EXPOSURE=0.5\nANTIALIASING=1
[sla_material:*common 0.05 ANYCUBIC SLA*]
inherits = *common ANYCUBIC SLA*
[sla_material:Generic Blue Resin @MONO 0.05]
inherits = *common 0.05 ANYCUBIC SLA*
exposure_time = 2.5
initial_exposure_time = 40
material_type = Tough
material_vendor = Generic
material_colour = #6080EC
compatible_printers_condition = printer_notes=~/.*MONO.*/ and printer_notes=~/.*VENDOR_ANYCUBIC.*/ and printer_notes=~/.*SLA.*/
[sla_material:Anycubic Plant-based UV Resin Grey 23 @MONO 0.05]
inherits = *common 0.05 ANYCUBIC SLA*
exposure_time = 2.3
initial_exposure_time = 23
material_type = Plant-Based
material_vendor = Anycubic
material_colour = #808080
compatible_printers_condition = printer_model=="PHOTON MONO X 6K"
material_notes = LIFT_SPEED=2
[sla_material:Anycubic Plant-based UV Resin Grey 28 @MONO 0.05]
inherits = *common 0.05 ANYCUBIC SLA*
exposure_time = 2
initial_exposure_time = 28
material_type = Plant-Based
material_vendor = Anycubic
material_colour = #808080
compatible_printers_condition = printer_model=="PHOTON MONO X"
material_notes = LIFT_SPEED=2
[sla_material:Anycubic Plant-based UV Resin Grey 30 @MONO 0.05]
inherits = *common 0.05 ANYCUBIC SLA*
exposure_time = 2
initial_exposure_time = 30
material_type = Plant-Based
material_vendor = Anycubic
material_colour = #808080
compatible_printers_condition = printer_model=="PHOTON MONO SE"
material_notes = LIFT_SPEED=2
## Printers
[printer:Anycubic Photon Mono]
printer_technology = SLA
printer_model = PHOTON MONO
printer_variant = default
default_sla_material_profile = Generic Blue Resin @MONO 0.05
default_sla_print_profile = 0.05 Normal @ANYCUBIC
thumbnails = 224x168
sla_archive_format = pwmo
bed_shape = 0x0,82.62x0,82.62x130.56,0x130.56
display_orientation = landscape
display_mirror_x = 1
display_mirror_y = 0
display_pixels_x = 1620
display_pixels_y = 2560
display_width = 82.62
display_height = 130.56
max_print_height = 165
elefant_foot_compensation = 0.2
elefant_foot_min_width = 0.2
min_exposure_time = 0.8
max_exposure_time = 120
min_initial_exposure_time = 0.8
max_initial_exposure_time = 300
printer_correction = 1,1,1
gamma_correction = 1
area_fill = 50
printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.'\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTONMONO\nPRINTER_TECHNOLOGY_SLA\n
[printer:Anycubic Photon Mono SE]
printer_technology = SLA
printer_model = PHOTON MONO SE
printer_variant = default
default_sla_material_profile = Generic Blue Resin @MONO 0.05
default_sla_print_profile = 0.05 Normal @ANYCUBIC
thumbnails = 224x168
sla_archive_format = pwms
bed_shape = 0x0,82.62x0,82.62x130.56,0x130.56
display_orientation = landscape
display_mirror_x = 1
display_mirror_y = 0
display_pixels_x = 1620
display_pixels_y = 2560
display_width = 82.62
display_height = 130.56
max_print_height = 160
elefant_foot_compensation = 0.2
elefant_foot_min_width = 0.2
min_exposure_time = 0.8
max_exposure_time = 120
min_initial_exposure_time = 0.8
max_initial_exposure_time = 300
printer_correction = 1,1,1
gamma_correction = 1
area_fill = 45
printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.'\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTONMONOSE\nPRINTER_TECHNOLOGY_SLA\n
[printer:Anycubic Photon Mono X]
printer_technology = SLA
printer_model = PHOTON MONO X
printer_variant = default
default_sla_material_profile = Generic Blue Resin @MONO 0.05
default_sla_print_profile = 0.05 Normal @ANYCUBIC
thumbnails = 224x168
sla_archive_format = pwmx
bed_shape = 1.48x1.02,193.48x1.02,193.48x121.02,1.48x121.02
display_height = 120
display_orientation = landscape
display_mirror_x = 1
display_mirror_y = 0
display_pixels_x = 3840
display_pixels_y = 2400
display_width = 192
max_print_height = 245
elefant_foot_compensation = 0.2
elefant_foot_min_width = 0.2
min_exposure_time = 1
max_exposure_time = 120
min_initial_exposure_time = 1
max_initial_exposure_time = 300
printer_correction = 1,1,1
gamma_correction = 1
area_fill = 45
printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.'\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTONMONOX\nPRINTER_TECHNOLOGY_SLA\n
[printer:Anycubic Photon Mono X 6K]
printer_technology = SLA
printer_model = PHOTON MONO X 6K
printer_variant = default
default_sla_material_profile = Anycubic Plant-based UV Resin Grey @MONO 0.05
default_sla_print_profile = 0.05 Normal @ANYCUBIC
thumbnails = 224x168
sla_archive_format = pwmx
bed_shape = 1.48x1.02,198.48x1.02,198.48x123.02,1.48x123.02
display_height = 122
display_orientation = landscape
display_mirror_x = 1
display_mirror_y = 0
display_pixels_x = 5760
display_pixels_y = 3600
display_width = 197
max_print_height = 245
elefant_foot_compensation = 0.2
elefant_foot_min_width = 0.2
min_exposure_time = 1
max_exposure_time = 120
min_initial_exposure_time = 1
max_initial_exposure_time = 300
printer_correction = 1,1,1
gamma_correction = 1
area_fill = 45
printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.'\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTONMONOX6K\n

View File

@ -0,0 +1,5 @@
min_slic3r_version = 2.8.0-alpha0
1.0.0 Initial bundle for PS2.8.0.
max_slic3r_version = 2.7.9
min_slic3r_version = 2.6.0
0.0.1 Initial version

View File

@ -0,0 +1,273 @@
# Print profiles for the Anycubic printers.
[vendor]
repo_id = non-prusa-sla
# Vendor name will be shown by the Config Wizard.
name = Anycubic SLA
# Configuration version of this file. Config file will only be installed, if the config_version differs.
# This means, the server may force the PrusaSlicer configuration to be downgraded.
config_version = 1.0.0
# Where to get the updates from?
config_update_url = http://10.24.3.3:8001/v1/repos/non-prusa-sla/AnycubicSLA/
# The printer models will be shown by the Configuration Wizard in this order,
# also the first model installed & the first nozzle installed will be activated after install.
# Printer model name will be shown by the installation wizard.
config_url = http://10.24.3.3:8001/v1/repos/non-prusa-sla/AnycubicSLA/
[printer_model:PHOTON MONO]
name = Photon Mono
variants = default
technology = SLA
family = PHOTON MONO
default_materials = Generic Blue Resin @MONO 0.05
thumbnail = PHOTON MONO_thumbnail.png
[printer_model:PHOTON MONO X]
name = Photon Mono X
variants = default
technology = SLA
family = PHOTON MONO
default_materials = Generic Blue Resin @MONO 0.05
thumbnail = PHOTON MONO X_thumbnail.png
[printer_model:PHOTON MONO X 6K]
name = Photon Mono X 6K
variants = default
technology = SLA
family = PHOTON MONO
default_materials = Anycubic Plant-based UV Resin Grey 23 @MONO 0.05
thumbnail = PHOTON MONO X 6K_thumbnail.png
[printer_model:PHOTON MONO SE]
name = Photon Mono SE
variants = default
technology = SLA
family = PHOTON MONO
default_materials = Generic Blue Resin @MONO 0.05
## SLA printers
thumbnail = PHOTON MONO SE_thumbnail.png
[sla_print:*common print ANYCUBIC SLA*]
compatible_printers_condition = printer_notes=~/.*VENDOR_ANYCUBIC.*/ and printer_notes=~/.*SLA.*/
layer_height = 0.05
pad_edge_radius = 0.5
pad_enable = 1
pad_max_merge_distance = 50
pad_wall_height = 0
pad_wall_thickness = 1
pad_wall_slope = 45
faded_layers = 8
slice_closing_radius = 0.005
support_base_diameter = 3
support_base_height = 1
support_critical_angle = 45
support_density_at_45 = 250
support_density_at_horizontal = 500
support_head_front_diameter = 0.4
support_head_penetration = 0.4
support_head_width = 3
support_max_bridge_length = 10
support_minimal_z = 0
support_object_elevation = 5
support_pillar_diameter = 1
support_pillar_connection_mode = zigzag
support_pillar_widening_factor = 0
supports_enable = 1
support_small_pillar_diameter_percent = 60%
[sla_print:0.05 Normal @ANYCUBIC ABSTRACT]
inherits = *common print ANYCUBIC SLA*
compatible_printers_condition = printer_notes=~/.*ABSTRACT_ONLY.*/
layer_height = 0.05
[sla_print:0.05 Normal @ANYCUBIC MONO]
inherits = 0.05 Normal @ANYCUBIC ABSTRACT
compatible_printers_condition = printer_notes=~/.*PHOTONMONO\n.*/
output_filename_format = [input_filename_base].pwmo
[sla_print:0.05 Normal @ANYCUBIC MONO X]
inherits = 0.05 Normal @ANYCUBIC ABSTRACT
compatible_printers_condition = printer_notes=~/.*PHOTONMONOX\n.*/
output_filename_format = [input_filename_base].pwmx
[sla_print:0.05 Normal @ANYCUBIC MONO X 6K]
inherits = 0.05 Normal @ANYCUBIC ABSTRACT
compatible_printers_condition = printer_notes=~/.*PHOTONMONOX6K\n.*/
output_filename_format = [input_filename_base].pwmx
[sla_print:0.05 Normal @ANYCUBIC MONO SE]
inherits = 0.05 Normal @ANYCUBIC ABSTRACT
compatible_printers_condition = printer_notes=~/.*PHOTONMONOSE\n.*/
output_filename_format = [input_filename_base].pwms
## SLA materials
#MONO series printer need a significantly reduced exposure time but are otherwise compatible
[sla_material:*common ANYCUBIC SLA*]
compatible_printers_condition = printer_notes=~/.*VENDOR_ANYCUBIC.*/ and printer_notes=~/.*SLA.*/
compatible_prints_condition = layer_height == 0.05
exposure_time = 7
initial_exposure_time = 40
initial_layer_height = 0.05
material_correction = 1,1,1
area_fill = 45
material_notes = #Distances are defined in mm, speeds are defined in mm/s.\n#Delay is defined in s.\nLIFT_DISTANCE=8.0\nLIFT_SPEED=2.5\nRETRACT_SPEED=3.0\nBOTTOM_LIFT_SPEED=2.0\nBOTTOM_LIFT_DISTANCE=9.0\nDELAY_BEFORE_EXPOSURE=0.5\nANTIALIASING=1
[sla_material:*common 0.05 ANYCUBIC SLA*]
inherits = *common ANYCUBIC SLA*
[sla_material:Generic Blue Resin @MONO 0.05]
inherits = *common 0.05 ANYCUBIC SLA*
exposure_time = 2.5
initial_exposure_time = 40
material_type = Tough
material_vendor = Generic
material_colour = #6080EC
compatible_printers_condition = printer_notes=~/.*MONO.*/ and printer_notes=~/.*VENDOR_ANYCUBIC.*/ and printer_notes=~/.*SLA.*/
[sla_material:Anycubic Plant-based UV Resin Grey 23 @MONO 0.05]
inherits = *common 0.05 ANYCUBIC SLA*
exposure_time = 2.3
initial_exposure_time = 23
material_type = Plant-Based
material_vendor = Anycubic
material_colour = #808080
compatible_printers_condition = printer_model=="PHOTON MONO X 6K"
material_notes = LIFT_SPEED=2
[sla_material:Anycubic Plant-based UV Resin Grey 28 @MONO 0.05]
inherits = *common 0.05 ANYCUBIC SLA*
exposure_time = 2
initial_exposure_time = 28
material_type = Plant-Based
material_vendor = Anycubic
material_colour = #808080
compatible_printers_condition = printer_model=="PHOTON MONO X"
material_notes = LIFT_SPEED=2
[sla_material:Anycubic Plant-based UV Resin Grey 30 @MONO 0.05]
inherits = *common 0.05 ANYCUBIC SLA*
exposure_time = 2
initial_exposure_time = 30
material_type = Plant-Based
material_vendor = Anycubic
material_colour = #808080
compatible_printers_condition = printer_model=="PHOTON MONO SE"
material_notes = LIFT_SPEED=2
## Printers
[printer:Anycubic Photon Mono]
printer_technology = SLA
printer_model = PHOTON MONO
printer_variant = default
default_sla_material_profile = Generic Blue Resin @MONO 0.05
default_sla_print_profile = 0.05 Normal @ANYCUBIC
thumbnails = 224x168
sla_archive_format = pwmo
bed_shape = 0x0,82.62x0,82.62x130.56,0x130.56
display_orientation = landscape
display_mirror_x = 1
display_mirror_y = 0
display_pixels_x = 1620
display_pixels_y = 2560
display_width = 82.62
display_height = 130.56
max_print_height = 165
elefant_foot_compensation = 0.2
elefant_foot_min_width = 0.2
min_exposure_time = 0.8
max_exposure_time = 120
min_initial_exposure_time = 0.8
max_initial_exposure_time = 300
printer_correction = 1,1,1
gamma_correction = 1
; area_fill = 50
printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.'\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTONMONO\nPRINTER_TECHNOLOGY_SLA\n
[printer:Anycubic Photon Mono SE]
printer_technology = SLA
printer_model = PHOTON MONO SE
printer_variant = default
default_sla_material_profile = Generic Blue Resin @MONO 0.05
default_sla_print_profile = 0.05 Normal @ANYCUBIC
thumbnails = 224x168
sla_archive_format = pwms
bed_shape = 0x0,82.62x0,82.62x130.56,0x130.56
display_orientation = landscape
display_mirror_x = 1
display_mirror_y = 0
display_pixels_x = 1620
display_pixels_y = 2560
display_width = 82.62
display_height = 130.56
max_print_height = 160
elefant_foot_compensation = 0.2
elefant_foot_min_width = 0.2
min_exposure_time = 0.8
max_exposure_time = 120
min_initial_exposure_time = 0.8
max_initial_exposure_time = 300
printer_correction = 1,1,1
gamma_correction = 1
; area_fill = 45
printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.'\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTONMONOSE\nPRINTER_TECHNOLOGY_SLA\n
[printer:Anycubic Photon Mono X]
printer_technology = SLA
printer_model = PHOTON MONO X
printer_variant = default
default_sla_material_profile = Generic Blue Resin @MONO 0.05
default_sla_print_profile = 0.05 Normal @ANYCUBIC
thumbnails = 224x168
sla_archive_format = pwmx
bed_shape = 1.48x1.02,193.48x1.02,193.48x121.02,1.48x121.02
display_height = 120
display_orientation = landscape
display_mirror_x = 1
display_mirror_y = 0
display_pixels_x = 3840
display_pixels_y = 2400
display_width = 192
max_print_height = 245
elefant_foot_compensation = 0.2
elefant_foot_min_width = 0.2
min_exposure_time = 1
max_exposure_time = 120
min_initial_exposure_time = 1
max_initial_exposure_time = 300
printer_correction = 1,1,1
gamma_correction = 1
; area_fill = 45
printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.'\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTONMONOX\nPRINTER_TECHNOLOGY_SLA\n
[printer:Anycubic Photon Mono X 6K]
printer_technology = SLA
printer_model = PHOTON MONO X 6K
printer_variant = default
default_sla_material_profile = Anycubic Plant-based UV Resin Grey @MONO 0.05
default_sla_print_profile = 0.05 Normal @ANYCUBIC
thumbnails = 224x168
sla_archive_format = pwmx
bed_shape = 1.48x1.02,198.48x1.02,198.48x123.02,1.48x123.02
display_height = 122
display_orientation = landscape
display_mirror_x = 1
display_mirror_y = 0
display_pixels_x = 5760
display_pixels_y = 3600
display_width = 197
max_print_height = 245
elefant_foot_compensation = 0.2
elefant_foot_min_width = 0.2
min_exposure_time = 1
max_exposure_time = 120
min_initial_exposure_time = 1
max_initial_exposure_time = 300
printer_correction = 1,1,1
gamma_correction = 1
; area_fill = 45
printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.'\nPRINTER_VENDOR_ANYCUBIC\nPRINTER_MODEL_PHOTONMONOX6K\n

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

View File

@ -0,0 +1,25 @@
[{
"name": "Prusa FFF",
"description": "Prusa FFF printers",
"visibility": "",
"id": "prusa-fff",
"url": "https://preset-repo-api.prusa3d.com/v1/repos/prusa-fff/",
"index_url": "https://preset-repo-api.prusa3d.com/v1/repos/prusa-fff/vendor_indices.zip",
"selected": 1
}, {
"name": "Prusa SLA",
"description": "Prusa SLA printers",
"visibility": "",
"id": "prusa-sla",
"url": "https://preset-repo-api.prusa3d.com/v1/repos/prusa-sla/",
"index_url": "https://preset-repo-api.prusa3d.com/v1/repos/prusa-sla/vendor_indices.zip",
"selected": 1
}, {
"name": "Non Prusa FFF",
"description": "FFF printers by other vendors",
"visibility": "",
"id": "non-prusa-fff",
"url": "https://preset-repo-api.prusa3d.com/v1/repos/non-prusa-fff/",
"index_url": "https://preset-repo-api.prusa3d.com/v1/repos/non-prusa-fff/vendor_indices.zip",
"selected": 1
}]

View File

@ -1,4 +1,8 @@
min_slic3r_version = 2.8.0-alpha0
1.0.0 Updated for PS2.8.0.
max_slic3r_version = 2.7.9
min_slic3r_version = 2.6.0 min_slic3r_version = 2.6.0
0.0.9 Updated first layer height value.
0.0.8 Support for the X3 and X4 series by porting settings from ArtillerySlicer V3.0. 0.0.8 Support for the X3 and X4 series by porting settings from ArtillerySlicer V3.0.
min_slic3r_version = 2.4.1-alpha0 min_slic3r_version = 2.4.1-alpha0
0.0.7 Added Eolas Prints filaments. 0.0.7 Added Eolas Prints filaments.

View File

@ -8,13 +8,14 @@
# Print profiles for the Artillery printers. # Print profiles for the Artillery printers.
[vendor] [vendor]
repo_id = non-prusa-fff
# Vendor name will be shown by the Config Wizard. # Vendor name will be shown by the Config Wizard.
name = Artillery name = Artillery
# Configuration version of this file. Config file will only be installed, if the config_version differs. # Configuration version of this file. Config file will only be installed, if the config_version differs.
# This means, the server may force the PrusaSlicer configuration to be downgraded. # This means, the server may force the PrusaSlicer configuration to be downgraded.
config_version = 0.0.8 config_version = 1.0.0
# Where to get the updates from? # Where to get the updates from?
config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/Artillery/ config_update_url = https://preset-repo-api.prusa3d.com/v1/repos/non-prusa-fff/Artillery/
# changelog_url = https://files.prusa3d.com/?latest=slicer-profiles&lng=%1% # changelog_url = https://files.prusa3d.com/?latest=slicer-profiles&lng=%1%
# The printer models will be shown by the Configuration Wizard in this order, # The printer models will be shown by the Configuration Wizard in this order,
@ -25,6 +26,7 @@ config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/Prus
## PRINTER ## ## PRINTER ##
############# #############
config_url = https://preset-repo-api.prusa3d.com/v1/repos/non-prusa-fff/Artillery/
[printer_model:X1] [printer_model:X1]
name = Artillery Sidewinder X1 name = Artillery Sidewinder X1
variants = 0.4 variants = 0.4
@ -33,6 +35,7 @@ bed_model = bed-x1.stl
bed_texture = bed-x1.png bed_texture = bed-x1.png
default_materials = Generic PLA @Artillery; Generic ABS @Artillery; Generic PETG @Artillery; Generic TPU @Artillery default_materials = Generic PLA @Artillery; Generic ABS @Artillery; Generic PETG @Artillery; Generic TPU @Artillery
thumbnail = X1_thumbnail.png
[printer_model:Genius] [printer_model:Genius]
name = Artillery Genius name = Artillery Genius
variants = 0.4 variants = 0.4
@ -41,6 +44,7 @@ bed_model = bed-genius.stl
bed_texture = bed-genius.png bed_texture = bed-genius.png
default_materials = Generic PLA @Artillery; Generic ABS @Artillery; Generic PETG @Artillery; Generic TPU @Artillery default_materials = Generic PLA @Artillery; Generic ABS @Artillery; Generic PETG @Artillery; Generic TPU @Artillery
thumbnail = Genius_thumbnail.png
[printer_model:Hornet] [printer_model:Hornet]
name = Artillery Hornet name = Artillery Hornet
variants = 0.4 variants = 0.4
@ -49,6 +53,7 @@ bed_model = bed-hornet.stl
bed_texture = bed-hornet.png bed_texture = bed-hornet.png
default_materials = Generic PLA @Artillery; Generic ABS @Artillery; Generic PETG @Artillery; Generic TPU @Artillery default_materials = Generic PLA @Artillery; Generic ABS @Artillery; Generic PETG @Artillery; Generic TPU @Artillery
thumbnail = Hornet_thumbnail.png
[printer_model:X3 Plus] [printer_model:X3 Plus]
name = Artillery Sidewinder X3 Plus name = Artillery Sidewinder X3 Plus
variants = 0.4 variants = 0.4
@ -57,6 +62,7 @@ bed_model = bed-x3-plus.stl
bed_texture = bed-x1.png bed_texture = bed-x1.png
default_materials = Artillery ABS @X3; Artillery PETG @X3; Artillery PLA @X3; Artillery PLA HS @X3; Artillery PLA Silk @X3; Artillery TPU @X3 default_materials = Artillery ABS @X3; Artillery PETG @X3; Artillery PLA @X3; Artillery PLA HS @X3; Artillery PLA Silk @X3; Artillery TPU @X3
thumbnail = X3 Plus_thumbnail.png
[printer_model:X3 Pro] [printer_model:X3 Pro]
name = Artillery Sidewinder X3 Pro name = Artillery Sidewinder X3 Pro
variants = 0.4 variants = 0.4
@ -65,6 +71,7 @@ bed_model = bed-x3-pro.stl
bed_texture = bed-x1.png bed_texture = bed-x1.png
default_materials = Artillery ABS @X3; Artillery PETG @X3; Artillery PLA @X3; Artillery PLA HS @X3; Artillery PLA Silk @X3; Artillery TPU @X3 default_materials = Artillery ABS @X3; Artillery PETG @X3; Artillery PLA @X3; Artillery PLA HS @X3; Artillery PLA Silk @X3; Artillery TPU @X3
thumbnail = X3 Pro_thumbnail.png
[printer_model:X4 Plus] [printer_model:X4 Plus]
name = Artillery Sidewinder X4 Plus name = Artillery Sidewinder X4 Plus
variants = 0.4 variants = 0.4
@ -73,6 +80,7 @@ bed_model = bed-x4-plus.stl
bed_texture = bed-x1.png bed_texture = bed-x1.png
default_materials = Artillery ABS @X4; Artillery PETG @X4; Artillery PLA & PLA HS @X4; Artillery PLA+ @X4; Artillery PLA Silk @X4; Artillery TPU @X4 default_materials = Artillery ABS @X4; Artillery PETG @X4; Artillery PLA & PLA HS @X4; Artillery PLA+ @X4; Artillery PLA Silk @X4; Artillery TPU @X4
thumbnail = X4 Plus_thumbnail.png
[printer_model:X4 Pro] [printer_model:X4 Pro]
name = Artillery Sidewinder X4 Pro name = Artillery Sidewinder X4 Pro
variants = 0.4 variants = 0.4
@ -81,6 +89,7 @@ bed_model = bed-x4-pro.stl
bed_texture = bed-x1.png bed_texture = bed-x1.png
default_materials = Artillery ABS @X4; Artillery PETG @X4; Artillery PLA & PLA HS @X4; Artillery PLA+ @X4; Artillery PLA Silk @X4; Artillery TPU @X4 default_materials = Artillery ABS @X4; Artillery PETG @X4; Artillery PLA & PLA HS @X4; Artillery PLA+ @X4; Artillery PLA Silk @X4; Artillery TPU @X4
thumbnail = X4 Pro_thumbnail.png
[printer_model:X4 Max] [printer_model:X4 Max]
name = Artillery Sidewinder X4 Max name = Artillery Sidewinder X4 Max
variants = 0.4 variants = 0.4
@ -90,6 +99,7 @@ bed_texture = bed-x1.png
default_materials = Artillery ABS @X4; Artillery PETG @X4; Artillery PLA & PLA HS @X4; Artillery PLA+ @X4; Artillery PLA Silk @X4; Artillery TPU @X4 default_materials = Artillery ABS @X4; Artillery PETG @X4; Artillery PLA & PLA HS @X4; Artillery PLA+ @X4; Artillery PLA Silk @X4; Artillery TPU @X4
# Common printer preset # Common printer preset
thumbnail = X4 Max_thumbnail.png
[printer:*common*] [printer:*common*]
before_layer_gcode = ;BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0 before_layer_gcode = ;BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0
between_objects_gcode = between_objects_gcode =
@ -401,7 +411,7 @@ fill_angle = 45
fill_density = 15% fill_density = 15%
first_layer_acceleration = 500 first_layer_acceleration = 500
first_layer_extrusion_width = 0.42 first_layer_extrusion_width = 0.42
first_layer_height = 150% first_layer_height = 0.25
first_layer_speed = 20 first_layer_speed = 20
gap_fill_speed = 30 gap_fill_speed = 30
gcode_comments = 1 gcode_comments = 1
@ -1235,4 +1245,4 @@ filament_retract_length = 1.5
filament_type = TPU filament_type = TPU
first_layer_bed_temperature = 70 first_layer_bed_temperature = 70
first_layer_temperature = 215 first_layer_temperature = 215
temperature = 215 temperature = 215

View File

@ -1,3 +1,6 @@
min_slic3r_version = 2.8.0-alpha0
1.0.0 Updated for PS2.8.0.
max_slic3r_version = 2.7.9
min_slic3r_version = 2.4.1-beta3 min_slic3r_version = 2.4.1-beta3
0.0.7 Correct missing profile improvement from 0.0.6 to set ensure_vertical_shell_thickness = 0 (off). 0.0.7 Correct missing profile improvement from 0.0.6 to set ensure_vertical_shell_thickness = 0 (off).
0.0.6 Correct start gcode, match profile and firmware settings, and other profile improvements. 0.0.6 Correct start gcode, match profile and firmware settings, and other profile improvements.

File diff suppressed because it is too large Load Diff

View File

@ -1,2 +1,5 @@
min_slic3r_version = 2.6.0-alpha1 min_slic3r_version = 2.6.0-alpha1
1.0.0 Updated for PS2.8.0.
max_slic3r_version = 2.7.9
min_slic3r_version = 2.6.0-alpha1
0.1.0 Initial version 0.1.0 Initial version

View File

@ -3,14 +3,16 @@
[vendor] [vendor]
repo_id = non-prusa-fff
name = BIQU name = BIQU
config_version = 0.1.0 config_version = 1.0.0
config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/BIQU/ config_update_url = https://preset-repo-api.prusa3d.com/v1/repos/non-prusa-fff/BIQU/
# The printer models will be shown by the Configuration Wizard in this order, # The printer models will be shown by the Configuration Wizard in this order,
# also the first model installed & the first nozzle installed will be activated after install. # also the first model installed & the first nozzle installed will be activated after install.
# Printer model name will be shown by the installation wizard. # Printer model name will be shown by the installation wizard.
config_url = https://preset-repo-api.prusa3d.com/v1/repos/non-prusa-fff/BIQU/
[printer_model:BIQUBX] [printer_model:BIQUBX]
name = BIQU BX name = BIQU BX
variants = 0.4 variants = 0.4
@ -23,6 +25,7 @@ default_materials = Generic PLA @BIQU; Generic PETG @BIQU; Generic ABS @BIQU
# not make it into the user interface. # not make it into the user interface.
# Common print preset # Common print preset
thumbnail = BIQUBX_thumbnail.png
[print:*common*] [print:*common*]
avoid_crossing_perimeters = 0 avoid_crossing_perimeters = 0
bottom_fill_pattern = monotonic bottom_fill_pattern = monotonic

View File

@ -1,4 +1,10 @@
min_slic3r_version = 2.8.0-alpha0
2.0.0 Updated for PS2.8.0.
min_slic3r_version = 2.7.9
min_slic3r_version = 2.6.0-alpha2 min_slic3r_version = 2.6.0-alpha2
1.0.5 Hotfix for 2.7.2 color change, as well as ramping prime line to reduce initial blob
1.0.4 Added proper pause and core change GCode that seems somewhat reliable.
1.0.3 Swap purge direction for 1.6 nozzle to reduce dwelling time.
1.0.2 Removed invalid compatible_print condition. 1.0.2 Removed invalid compatible_print condition.
1.0.1 Swapped Pause GCode, Fixed Chocolate Colors, Resolved Output Format issue from Inheriting Keyword Typo 1.0.1 Swapped Pause GCode, Fixed Chocolate Colors, Resolved Output Format issue from Inheriting Keyword Typo
1.0.0 Initial 1.0.0 Initial

View File

@ -1,13 +1,14 @@
# Print profiles for the Cocoa Press. # Print profiles for the Cocoa Press.
[vendor] [vendor]
repo_id = non-prusa-fff
# Vendor name will be shown by the Config Wizard. # Vendor name will be shown by the Config Wizard.
name = Cocoa Press name = Cocoa Press
# Configuration version of this file. Config file will only be installed, if the config_version differs. # Configuration version of this file. Config file will only be installed, if the config_version differs.
# This means, the server may force the PrusaSlicer configuration to be downgraded. # This means, the server may force the PrusaSlicer configuration to be downgraded.
config_version = 1.0.2 config_version = 2.0.0
# Where to get the updates from? # Where to get the updates from?
config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/CocoaPress/ config_update_url = https://preset-repo-api.prusa3d.com/v1/repos/non-prusa-fff/CocoaPress/
# changelog_url = https://files.prusa3d.com/?latest=slicer-profiles&lng=%1% # changelog_url = https://files.prusa3d.com/?latest=slicer-profiles&lng=%1%
# The printer models will be shown by the Configuration Wizard in this order, # The printer models will be shown by the Configuration Wizard in this order,
@ -17,6 +18,7 @@ config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/Prus
# All presets starting with asterisk, for example *common*, are intermediate and they will # All presets starting with asterisk, for example *common*, are intermediate and they will
# not make it into the user interface. # not make it into the user interface.
config_url = https://preset-repo-api.prusa3d.com/v1/repos/non-prusa-fff/CocoaPress/
[printer_model:Cocoa_Press] [printer_model:Cocoa_Press]
name = Cocoa Press name = Cocoa Press
variants = 0.8; 1.6 variants = 0.8; 1.6
@ -29,7 +31,7 @@ thumbnail = CocoaPress_MiniChef.png
[print:*common*] [print:*common*]
gcode_label_objects = 1 gcode_label_objects = 1
gcode_resolution = 0.0125 gcode_resolution = 0.0125
gcode_substitutions = "(;PAUSE_PRINT)(\\n|\\r\\n|\\r)(.*?)(M117)";$1$2M0;r;"Pause command allows you to get a full screen message." gcode_substitutions = "(;PAUSE_PRINT)(\\n|\\r\\n|\\r)(.*?)(M117)";"\\n;MOVE_BEFORE_PAUSE\\n;PAUSED_PRINT_MACRO\\n;END_MOVE_BEFORE_PAUSE\\n$1$2M0";r;"Pause command allows you to get a full screen message.";"(;PAUSED_PRINT_MACRO)(.*?)(\\n|\\r\\n|\\r)";"\\nM83;\\nG1 E-.2 F400;\\nG91;\\nG0 Z10;\\nG90;\\nM83;\\nG0 X70 Y135 F90000;\\nM17;\\n";r;"The second half of the \"manual pause\" is in the custom g-code box in Printer Settings."
notes = PRINTER_VENDOR_COCOA_PRESS\nPRINTER_MODEL_MINICHEF\nPRINTER_MATERIAL_PASTE notes = PRINTER_VENDOR_COCOA_PRESS\nPRINTER_MODEL_MINICHEF\nPRINTER_MATERIAL_PASTE
output_filename_format = {input_filename_base}_{nozzle_diameter[initial_tool]}n_{print_time}_{round(total_weight)}g.gcode output_filename_format = {input_filename_base}_{nozzle_diameter[initial_tool]}n_{print_time}_{round(total_weight)}g.gcode
@ -55,7 +57,7 @@ default_acceleration = 1500
dont_support_bridges = 1 dont_support_bridges = 1
draft_shield = disabled draft_shield = disabled
elefant_foot_compensation = 0 elefant_foot_compensation = 0
enable_dynamic_overhang_speeds = 0 enable_dynamic_overhang_speeds = 1
external_perimeter_acceleration = 0 external_perimeter_acceleration = 0
external_perimeter_extrusion_width = 0 external_perimeter_extrusion_width = 0
external_perimeter_speed = 25 external_perimeter_speed = 25
@ -106,7 +108,7 @@ min_skirt_length = 0
mmu_segmented_region_max_width = 0 mmu_segmented_region_max_width = 0
only_retract_when_crossing_perimeters = 0 only_retract_when_crossing_perimeters = 0
ooze_prevention = 0 ooze_prevention = 0
overhang_speed_0 = 15 overhang_speed_0 = 12
overhang_speed_1 = 15 overhang_speed_1 = 15
overhang_speed_2 = 20 overhang_speed_2 = 20
overhang_speed_3 = 25 overhang_speed_3 = 25
@ -226,7 +228,7 @@ default_acceleration = 1500
dont_support_bridges = 1 dont_support_bridges = 1
draft_shield = disabled draft_shield = disabled
elefant_foot_compensation = 0 elefant_foot_compensation = 0
enable_dynamic_overhang_speeds = 0 enable_dynamic_overhang_speeds = 1
external_perimeter_acceleration = 0 external_perimeter_acceleration = 0
external_perimeter_extrusion_width = 0 external_perimeter_extrusion_width = 0
external_perimeter_speed = 25 external_perimeter_speed = 25
@ -277,7 +279,7 @@ min_skirt_length = 0
mmu_segmented_region_max_width = 0 mmu_segmented_region_max_width = 0
only_retract_when_crossing_perimeters = 0 only_retract_when_crossing_perimeters = 0
ooze_prevention = 0 ooze_prevention = 0
overhang_speed_0 = 15 overhang_speed_0 = 12
overhang_speed_1 = 15 overhang_speed_1 = 15
overhang_speed_2 = 20 overhang_speed_2 = 20
overhang_speed_3 = 25 overhang_speed_3 = 25
@ -447,11 +449,11 @@ autoemit_temperature_commands = 0
bed_shape = 0x0,140x0,140x150,0x150 bed_shape = 0x0,140x0,140x150,0x150
before_layer_gcode = ;BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\n\n before_layer_gcode = ;BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\n\n
between_objects_gcode = between_objects_gcode =
color_change_gcode = ;G1 E-.05 F900\n;G1 X2.5 Y2.5 F4500 ;Move to the side\nM17; enable steppers so that the user can change cores without having the extruder or bed slip or move as easily.\nM25 load new chocolate ;pause for user\n;G1 E.06 F900\n;G1 X2.6 Y2.6 F4500 color_change_gcode = ;BEFORE_COLOR_CHANGE\n\nM83; use relative extrusion for extruder.\nG1 E-.2 F400 ;minor retraction to keep ooze contained.\n\nG60; save position\n\n;move the bed down 10mm\nG91; set to relative positioning\nG0 Z10;\nG90;\nM83; extruder relative motion.\n\nG0 X70 Y5; move to front for user to swap core.\nM17; enable steppers so that the user can change cores without having the extruder or bed slip or move as easily.\n\nM0 Perform core swap now. Press OK when loaded.;\n\n; pause message, lazy edition.\nM117 Preheating core. (waiting 15m);\nG4 S60; pause delay so it's on screen\nM117 Preheating core. (waiting 14m);\nG4 S60; pause delay so it's on screen\nM117 Preheating core. (waiting 13m);\nG4 S60; pause delay so it's on screen\nM117 Preheating core. (waiting 12m);\nG4 S60; pause delay so it's on screen\nM117 Preheating core. (waiting 11m);\nG4 S60; pause delay so it's on screen \nM117 Preheating core. (waiting 10m);\nG4 S60; pause delay so it's on screen \nM117 Preheating core. (waiting 9m);\nG4 S60; pause delay so it's on screen \nM117 Preheating core. (waiting 8m);\nG4 S60; pause delay so it's on screen \nM117 Preheating core. (waiting 7m);\nG4 S60; pause delay so it's on screen \nM117 Preheating core. (waiting 6m);\nG4 S60; pause delay so it's on screen \nM117 Preheating core. (waiting 5m);\nG4 S60; pause delay so it's on screen \nM117 Preheating core. (waiting 4m);\nG4 S60; pause delay so it's on screen \nM117 Preheating core. (waiting 3m);\nG4 S60; pause delay so it's on screen \nM117 Preheating core. (waiting 2m);\nG4 S60; pause delay so it's on screen \nM117 Preheating core. (waiting 1m);\nG4 S60; pause delay so it's on screen \nM0 Press "OK" to continue print. Have the spatula ready.;\n\n;move the bed up 10mm\nG91; set to relative positioning\nG0 Z10;\nG90;\nM83; extruder relative motion.\n\nG1 E.06 F900 ;extrude a lil bit.\nG92 E0 ; set extruder pos to zero\n\n; restore position\nG61; \n\n;AFTER_COLOR_CHANGE
cooling_tube_length = 5 cooling_tube_length = 5
cooling_tube_retraction = 91.5 cooling_tube_retraction = 91.5
deretract_speed = 15 deretract_speed = 15
end_gcode = print_end ;end script from macro\nG91 ; set to relative\nG0 Z15; ; move 15mm down\nG90 ; absolute positioning again\nG0 X70 Y145\nM84 end_gcode = print_end ;end script from macro\nG91 ; set to relative\nG0 Z15; ; move 15mm down\nG90 ; absolute positioning again\nG0 X70 Y135\nM84
extra_loading_move = -2 extra_loading_move = -2
extruder_colour = #FFE3CA extruder_colour = #FFE3CA
extruder_offset = 0x0 extruder_offset = 0x0
@ -481,7 +483,7 @@ max_print_height = 150
min_layer_height = 0.2 min_layer_height = 0.2
nozzle_diameter = 0.8 nozzle_diameter = 0.8
parking_pos_retraction = 92 parking_pos_retraction = 92
pause_print_gcode = ; end pause print pause_print_gcode = ; Start Pause Print\n; This pause GCode is changed in PrusaSlicer via the Print Settings -> Output Options -> G-Code Substititons\n; This is due to how PrusaSlicer inserts the M117 message for pause at the start of any custom GCode in this\n; box. As such, to soft-park the toolhead, handle retractions, and more, this is done in custom G-Code inj-\n; -ected before this message. Furthering this, due to a bug in how Marlin handles M117 messages on our di-\n; -splay, we use M0 instead, hence the use of the second G-Code substitution regex.\n; Thank you for understanding.\n\n\nG90; Set absolute coordinate moves\nM83; set extruder relative.\nG61 F15000 XY ; move to last XY position.\nM400; wait for move to finish.\nG4 P100; small delay (100ms) to get around desync issues.\n\nG1 E.6 F300; Purge small amount of Cocoa Core via extruder after pause.\n\nG61 F15000 Z; move to last Z position (10mm offset, probably)\nM400; wait for move to finish.\nG4 P100; small delay (100ms) to get around desync issues.\n\nG92 E0; Set extruder to "zero" so that it's not remembered.\nG1 E.00001 900; very small move to reset feedrate bug.\n
print_host = print_host =
printer_settings_id = cocoa_press_minichef_settings_0_8 printer_settings_id = cocoa_press_minichef_settings_0_8
printer_technology = FFF printer_technology = FFF
@ -502,7 +504,7 @@ retract_restart_extra_toolchange = 0
retract_speed = 15 retract_speed = 15
silent_mode = 0 silent_mode = 0
single_extruder_multi_material = 0 single_extruder_multi_material = 0
start_gcode = G21 ; set units to millimeters\nG90 ; use absolute coordinates\nM83 ; use relative distances for extrusion\n\nG28 ; home all axes\nM420 S1; turn back on mesh leveling\nG92 E0 ; set extruder pos to zero\n\n; homing + loading mesh\nG29 O V4 ; try to probe mesh, but skip if already done.\n\nG1 Z1.5 F4500\n\n; Purge Line 1\n\nG1 X131.75 Y148\nG1 Z.5\nG1 E1.25 F450\nG1 X8.25 Y148 E.25 F900\n\n; Purge Line 2\n\nG1 X8.25 Y145 F900\nG1 X131.25 Y145 E.10538\nG1 X141.75 Y145 start_gcode = M220 S100; set speed to 100%\nG21 ; set units to millimeters\nG90 ; use absolute coordinates\nM83 ; use relative distances for extrusion\n\nG28; home all axes\nM420 S1; turn back on mesh leveling\nG92 E0 ; set extruder pos to zero\n\n; homing + loading mesh\nG29 O V4 ; try to probe mesh, but skip if already done.\n\nG1 Z1.5 F4500\n\n; Purge Line 1\n\nG1 X131.75 Y148 Z3.2\nG1 X128.625 Y148 Z.5 E.15\nG1 X8.25 Y148 E.25 F900\n\n; Purge Line 2\n\nG1 X8.25 Y145 F900\nG1 X131.25 Y145 E.10538\nG1 X141.75 Y145
template_custom_gcode = template_custom_gcode =
thumbnails = 64x64,400x300 thumbnails = 64x64,400x300
thumbnails_format = PNG thumbnails_format = PNG
@ -520,12 +522,12 @@ autoemit_temperature_commands = 0
bed_shape = 0x0,140x0,140x150,0x150 bed_shape = 0x0,140x0,140x150,0x150
before_layer_gcode = ;BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\n\n before_layer_gcode = ;BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\n\n
between_objects_gcode = between_objects_gcode =
color_change_gcode = ;G1 E-.05 F900\n;G1 X2.5 Y2.5 F4500 ;Move to the side\nM17; enable steppers so that the user can change cores without having the extruder or bed slip or move as easily.\nM25 load new chocolate ;pause for user\n;G1 E.06 F900\n;G1 X2.6 Y2.6 F4500 color_change_gcode = ;BEFORE_COLOR_CHANGE\n\nM83; use relative extrusion for extruder.\nG1 E-.2 F400 ;minor retraction to keep ooze contained.\n\nG60; save position\n\n;move the bed down 10mm\nG91; set to relative positioning\nG0 Z10;\nG90;\nM83; extruder relative motion.\n\nG0 X70 Y5; move to front for user to swap core.\nM17; enable steppers so that the user can change cores without having the extruder or bed slip or move as easily.\n\nM0 Perform core swap now. Press OK when loaded.;\n\n; pause message, lazy edition.\nM117 Preheating core. (waiting 15m);\nG4 S60; pause delay so it's on screen\nM117 Preheating core. (waiting 14m);\nG4 S60; pause delay so it's on screen\nM117 Preheating core. (waiting 13m);\nG4 S60; pause delay so it's on screen\nM117 Preheating core. (waiting 12m);\nG4 S60; pause delay so it's on screen\nM117 Preheating core. (waiting 11m);\nG4 S60; pause delay so it's on screen \nM117 Preheating core. (waiting 10m);\nG4 S60; pause delay so it's on screen \nM117 Preheating core. (waiting 9m);\nG4 S60; pause delay so it's on screen \nM117 Preheating core. (waiting 8m);\nG4 S60; pause delay so it's on screen \nM117 Preheating core. (waiting 7m);\nG4 S60; pause delay so it's on screen \nM117 Preheating core. (waiting 6m);\nG4 S60; pause delay so it's on screen \nM117 Preheating core. (waiting 5m);\nG4 S60; pause delay so it's on screen \nM117 Preheating core. (waiting 4m);\nG4 S60; pause delay so it's on screen \nM117 Preheating core. (waiting 3m);\nG4 S60; pause delay so it's on screen \nM117 Preheating core. (waiting 2m);\nG4 S60; pause delay so it's on screen \nM117 Preheating core. (waiting 1m);\nG4 S60; pause delay so it's on screen \nM0 Press "OK" to continue print. Have the spatula ready.;\n\n;move the bed up 10mm\nG91; set to relative positioning\nG0 Z10;\nG90;\nM83; extruder relative motion.\n\nG1 E.06 F900 ;extrude a lil bit.\nG92 E0 ; set extruder pos to zero\n\nG61; restore start position\n;AFTER_COLOR_CHANGE
cooling_tube_length = 5 cooling_tube_length = 5
cooling_tube_retraction = 91.5 cooling_tube_retraction = 91.5
default_print_profile = 1.0 default_print_profile = 1.0
deretract_speed = 15 deretract_speed = 15
end_gcode = print_end ;end script from macro\nG91 ; set to relative\nG0 Z15; ; move 15mm down\nG90 ; absolute positioning again\nG0 X70 Y145\nM84 end_gcode = print_end ;end script from macro\nG91 ; set to relative\nG0 Z15; ; move 15mm down\nG90 ; absolute positioning again\nG0 X70 Y135\nM84
extra_loading_move = -2 extra_loading_move = -2
extruder_colour = #FFE3CA extruder_colour = #FFE3CA
extruder_offset = 0x0 extruder_offset = 0x0
@ -555,7 +557,7 @@ max_print_height = 150
min_layer_height = 0.2 min_layer_height = 0.2
nozzle_diameter = 1.6 nozzle_diameter = 1.6
parking_pos_retraction = 92 parking_pos_retraction = 92
pause_print_gcode = ; end pause gcode pause_print_gcode = ; Start Pause Print\n; This pause GCode is changed in PrusaSlicer via the Print Settings -> Output Options -> G-Code Substititons\n; This is due to how PrusaSlicer inserts the M117 message for pause at the start of any custom GCode in this\n; box. As such, to soft-park the toolhead, handle retractions, and more, this is done in custom G-Code inj-\n; -ected before this message. Furthering this, due to a bug in how Marlin handles M117 messages on our di-\n; -splay, we use M0 instead, hence the use of the second G-Code substitution regex.\n; Thank you for understanding.\n\n\nG90; Set absolute coordinate moves\nM83; set extruder relative.\nG61 F15000 XY ; move to last XY position.\nM400; wait for move to finish.\nG4 P100; small delay (100ms) to get around desync issues.\n\nG1 E.6 F300; Purge small amount of Cocoa Core via extruder after pause.\n\nG61 F15000 Z; move to last Z position (10mm offset, probably)\nM400; wait for move to finish.\nG4 P100; small delay (100ms) to get around desync issues.\n\nG92 E0; Set extruder to "zero" so that it's not remembered.\nG1 E.00001 900; very small move to reset feedrate bug.\n
print_host = print_host =
printer_settings_id = cocoa_press_minichef_settings_1_6 printer_settings_id = cocoa_press_minichef_settings_1_6
printer_technology = FFF printer_technology = FFF
@ -576,7 +578,7 @@ retract_restart_extra_toolchange = 0
retract_speed = 15 retract_speed = 15
silent_mode = 0 silent_mode = 0
single_extruder_multi_material = 0 single_extruder_multi_material = 0
start_gcode = G21 ; set units to millimeters\nG90 ; use absolute coordinates\nM83 ; use relative distances for extrusion\n\nG28 ; home all axes\nM420 S1; turn back on mesh leveling\nG92 E0 ; set extruder pos to zero\n\n; homing loading mesh\nG29 O V4; try to probe mesh, but skip if already done.\n\nG1 Z1.5 F4500\n\n; Purge Line\n\nG1 X5.8 Y 145\nG1 Z1 ; small z-hop to avoid potentially big purge getting caught.\nG1 E1.25 F450\nG1 X134.2 Y145 E.44109 F900 start_gcode = M220 S100; set speed to 100%\nG21 ; set units to millimeters\nG90 ; use absolute coordinates\nM83 ; use relative distances for extrusion\n\nG28; home all axes\nM420 S1; turn back on mesh leveling\nG92 E0 ; set extruder pos to zero\n\n; homing loading mesh\nG29 O V4; try to probe mesh, but skip if already done.\n\nG1 Z1.5 F4500\n\n; Purge Line\n\nG1 X145 Y 145\nG1 Z1 ; small z-hop to avoid potentially big purge getting caught.\nG1 E1.25 F450\nG1 X5 Y145 E.33109 F900
template_custom_gcode = template_custom_gcode =
thumbnails = 64x64,400x300 thumbnails = 64x64,400x300
thumbnails_format = PNG thumbnails_format = PNG
@ -599,4 +601,4 @@ printer_model = Cocoa_Press
[printer:*common*] [printer:*common*]
default_filament_profile = "Cocoa Press Chocolates" default_filament_profile = "Cocoa Press Chocolates"
printer_notes = PRINTER_VENDOR_COCOA_PRESS\nPRINTER_MODEL_MINICHEF\nPRINTER_MATERIAL_PASTE\nNO_TEMPLATES printer_notes = PRINTER_VENDOR_COCOA_PRESS\nPRINTER_MODEL_MINICHEF\nPRINTER_MATERIAL_PASTE\nNO_TEMPLATES
gcode_flavor = marlin2 gcode_flavor = marlin2

View File

@ -1,3 +1,8 @@
min_slic3r_version = 2.8.0-alpha0
1.0.0 Updated for PS2.8.0.
max_slic3r_version = 2.7.9
min_slic3r_version = 2.7.0
0.3.0 Finetune Ironing, Add Idle Temperatures in start_code's, Add PolyMaker PolyTerra PLA, Fix Ender-5 (Pro) Bed Size.
min_slic3r_version = 2.6.0-alpha0 min_slic3r_version = 2.6.0-alpha0
0.2.7 Added Eolas Prints filaments. 0.2.7 Added Eolas Prints filaments.
0.2.6 Add Ender-5 Pro, Ender-5 S1, Sermoon-V1, Sermoon-V1 Pro. Unlock HIGHSPEED/SUPERSPEED presets for Ender-5 S1/Ender-6/Ender-7. 0.2.6 Add Ender-5 Pro, Ender-5 S1, Sermoon-V1, Sermoon-V1 Pro. Unlock HIGHSPEED/SUPERSPEED presets for Ender-5 S1/Ender-6/Ender-7.

View File

@ -1,19 +1,21 @@
# Print profiles for the Creality printers. # Print profiles for the Creality printers.
[vendor] [vendor]
repo_id = non-prusa-fff
# Vendor name will be shown by the Config Wizard. # Vendor name will be shown by the Config Wizard.
name = Creality name = Creality
# Configuration version of this file. Config file will only be installed, if the config_version differs. # Configuration version of this file. Config file will only be installed, if the config_version differs.
# This means, the server may force the PrusaSlicer configuration to be downgraded. # This means, the server may force the PrusaSlicer configuration to be downgraded.
config_version = 0.2.7 config_version = 1.0.0
# Where to get the updates from? # Where to get the updates from?
config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/Creality/ config_update_url = https://preset-repo-api.prusa3d.com/v1/repos/non-prusa-fff/Creality/
# changelog_url = https://files.prusa3d.com/?latest=slicer-profiles&lng=%1% # changelog_url = https://files.prusa3d.com/?latest=slicer-profiles&lng=%1%
# The printer models will be shown by the Configuration Wizard in this order, # The printer models will be shown by the Configuration Wizard in this order,
# also the first model installed & the first nozzle installed will be activated after install. # also the first model installed & the first nozzle installed will be activated after install.
# Printer model name will be shown by the installation wizard. # Printer model name will be shown by the installation wizard.
config_url = https://preset-repo-api.prusa3d.com/v1/repos/non-prusa-fff/Creality/
[printer_model:ENDER3] [printer_model:ENDER3]
name = Creality Ender-3 name = Creality Ender-3
variants = 0.4; 0.3; 0.5; 0.6 variants = 0.4; 0.3; 0.5; 0.6
@ -23,6 +25,7 @@ bed_model = ender3_bed.stl
bed_texture = ender3.svg bed_texture = ender3.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
thumbnail = ENDER3_thumbnail.png
[printer_model:ENDER3BLTOUCH] [printer_model:ENDER3BLTOUCH]
name = Creality Ender-3 BLTouch name = Creality Ender-3 BLTouch
variants = 0.4; 0.3; 0.5; 0.6 variants = 0.4; 0.3; 0.5; 0.6
@ -32,6 +35,7 @@ bed_model = ender3_bed.stl
bed_texture = ender3.svg bed_texture = ender3.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
thumbnail = ENDER3BLTOUCH_thumbnail.png
[printer_model:ENDER3PRO] [printer_model:ENDER3PRO]
name = Creality Ender-3 Pro name = Creality Ender-3 Pro
variants = 0.4; 0.3; 0.5; 0.6 variants = 0.4; 0.3; 0.5; 0.6
@ -41,6 +45,7 @@ bed_model = ender3_bed.stl
bed_texture = ender3.svg bed_texture = ender3.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
thumbnail = ENDER3PRO_thumbnail.png
[printer_model:ENDER3NEO] [printer_model:ENDER3NEO]
name = Creality Ender-3 Neo name = Creality Ender-3 Neo
variants = 0.4; 0.3; 0.5; 0.6 variants = 0.4; 0.3; 0.5; 0.6
@ -50,6 +55,7 @@ bed_model = ender3_bed.stl
bed_texture = ender3.svg bed_texture = ender3.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
thumbnail = ENDER3NEO_thumbnail.png
[printer_model:ENDER3V2] [printer_model:ENDER3V2]
name = Creality Ender-3 V2 name = Creality Ender-3 V2
variants = 0.4; 0.3; 0.5; 0.6 variants = 0.4; 0.3; 0.5; 0.6
@ -59,6 +65,7 @@ bed_model = ender3v2_bed.stl
bed_texture = ender3v2.svg bed_texture = ender3v2.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
thumbnail = ENDER3V2_thumbnail.png
[printer_model:ENDER3V2NEO] [printer_model:ENDER3V2NEO]
name = Creality Ender-3 V2 Neo name = Creality Ender-3 V2 Neo
variants = 0.4; 0.3; 0.5; 0.6 variants = 0.4; 0.3; 0.5; 0.6
@ -68,6 +75,7 @@ bed_model = ender3v2_bed.stl
bed_texture = ender3v2.svg bed_texture = ender3v2.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
thumbnail = ENDER3V2NEO_thumbnail.png
[printer_model:ENDER3S1] [printer_model:ENDER3S1]
name = Creality Ender-3 S1 name = Creality Ender-3 S1
variants = 0.4; 0.3; 0.5; 0.6 variants = 0.4; 0.3; 0.5; 0.6
@ -77,6 +85,7 @@ bed_model = ender3v2_bed.stl
bed_texture = ender3v2.svg bed_texture = ender3v2.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
thumbnail = ENDER3S1_thumbnail.png
[printer_model:ENDER3S1PRO] [printer_model:ENDER3S1PRO]
name = Creality Ender-3 S1 Pro name = Creality Ender-3 S1 Pro
variants = 0.4; 0.3; 0.5; 0.6 variants = 0.4; 0.3; 0.5; 0.6
@ -86,6 +95,7 @@ bed_model = ender3v2_bed.stl
bed_texture = ender3v2.svg bed_texture = ender3v2.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
thumbnail = ENDER3S1PRO_thumbnail.png
[printer_model:ENDER3S1PLUS] [printer_model:ENDER3S1PLUS]
name = Creality Ender-3 S1 Plus name = Creality Ender-3 S1 Plus
variants = 0.4; 0.3; 0.5; 0.6 variants = 0.4; 0.3; 0.5; 0.6
@ -95,6 +105,7 @@ bed_model = cr10v2_bed.stl
bed_texture = cr10spro.svg bed_texture = cr10spro.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
thumbnail = ENDER3S1PLUS_thumbnail.png
[printer_model:ENDER3MAX] [printer_model:ENDER3MAX]
name = Creality Ender-3 Max name = Creality Ender-3 Max
variants = 0.4; 0.3; 0.5; 0.6 variants = 0.4; 0.3; 0.5; 0.6
@ -104,6 +115,7 @@ bed_model = cr10v2_bed.stl
bed_texture = cr10spro.svg bed_texture = cr10spro.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
thumbnail = ENDER3MAX_thumbnail.png
[printer_model:ENDER3MAXNEO] [printer_model:ENDER3MAXNEO]
name = Creality Ender-3 Max Neo name = Creality Ender-3 Max Neo
variants = 0.4; 0.3; 0.5; 0.6 variants = 0.4; 0.3; 0.5; 0.6
@ -113,6 +125,7 @@ bed_model = cr10v2_bed.stl
bed_texture = cr10spro.svg bed_texture = cr10spro.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
thumbnail = ENDER3MAXNEO_thumbnail.png
[printer_model:ENDER4] [printer_model:ENDER4]
name = Creality Ender-4 name = Creality Ender-4
variants = 0.4; 0.3; 0.5; 0.6 variants = 0.4; 0.3; 0.5; 0.6
@ -122,6 +135,7 @@ bed_model = ender3v2_bed.stl
bed_texture = ender3v2.svg bed_texture = ender3v2.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
thumbnail = ENDER4_thumbnail.png
[printer_model:ENDER5] [printer_model:ENDER5]
name = Creality Ender-5 name = Creality Ender-5
variants = 0.4; 0.3; 0.5; 0.6 variants = 0.4; 0.3; 0.5; 0.6
@ -131,6 +145,7 @@ bed_model = ender3_bed.stl
bed_texture = ender3.svg bed_texture = ender3.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
thumbnail = ENDER5_thumbnail.png
[printer_model:ENDER5PRO] [printer_model:ENDER5PRO]
name = Creality Ender-5 Pro name = Creality Ender-5 Pro
variants = 0.4; 0.3; 0.5; 0.6 variants = 0.4; 0.3; 0.5; 0.6
@ -140,6 +155,7 @@ bed_model = ender3_bed.stl
bed_texture = ender3.svg bed_texture = ender3.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
thumbnail = ENDER5PRO_thumbnail.png
[printer_model:ENDER5PLUS] [printer_model:ENDER5PLUS]
name = Creality Ender-5 Plus name = Creality Ender-5 Plus
variants = 0.4; 0.3; 0.5; 0.6 variants = 0.4; 0.3; 0.5; 0.6
@ -149,6 +165,7 @@ bed_model = ender5plus_bed.stl
bed_texture = ender5plus.svg bed_texture = ender5plus.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
thumbnail = ENDER5PLUS_thumbnail.png
[printer_model:ENDER5S1] [printer_model:ENDER5S1]
name = Creality Ender-5 S1 name = Creality Ender-5 S1
variants = 0.4; 0.3; 0.5; 0.6 variants = 0.4; 0.3; 0.5; 0.6
@ -158,6 +175,7 @@ bed_model = ender3_bed.stl
bed_texture = ender3.svg bed_texture = ender3.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
thumbnail = ENDER5S1_thumbnail.png
[printer_model:ENDER6] [printer_model:ENDER6]
name = Creality Ender-6 name = Creality Ender-6
variants = 0.4; 0.3; 0.5; 0.6 variants = 0.4; 0.3; 0.5; 0.6
@ -167,6 +185,7 @@ bed_model = ender6_bed.stl
bed_texture = ender6.svg bed_texture = ender6.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
thumbnail = ENDER6_thumbnail.png
[printer_model:ENDER7] [printer_model:ENDER7]
name = Creality Ender-7 name = Creality Ender-7
variants = 0.4; 0.3; 0.5; 0.6 variants = 0.4; 0.3; 0.5; 0.6
@ -176,6 +195,7 @@ bed_model = ender7_bed.stl
bed_texture = ender7.svg bed_texture = ender7.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
thumbnail = ENDER7_thumbnail.png
[printer_model:ENDER2] [printer_model:ENDER2]
name = Creality Ender-2 name = Creality Ender-2
variants = 0.4; 0.3; 0.5; 0.6 variants = 0.4; 0.3; 0.5; 0.6
@ -185,6 +205,7 @@ bed_model = ender2_bed.stl
bed_texture = ender2.svg bed_texture = ender2.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
thumbnail = ENDER2_thumbnail.png
[printer_model:ENDER2PRO] [printer_model:ENDER2PRO]
name = Creality Ender-2 Pro name = Creality Ender-2 Pro
variants = 0.4; 0.3; 0.5; 0.6 variants = 0.4; 0.3; 0.5; 0.6
@ -194,6 +215,7 @@ bed_model = ender2pro_bed.stl
bed_texture = ender2pro.svg bed_texture = ender2pro.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
thumbnail = ENDER2PRO_thumbnail.png
[printer_model:CR5PRO] [printer_model:CR5PRO]
name = Creality CR-5 Pro name = Creality CR-5 Pro
variants = 0.4; 0.3; 0.5; 0.6 variants = 0.4; 0.3; 0.5; 0.6
@ -203,6 +225,7 @@ bed_model = cr5pro_bed.stl
bed_texture = cr5pro.svg bed_texture = cr5pro.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
thumbnail = CR5PRO_thumbnail.png
[printer_model:CR5PROH] [printer_model:CR5PROH]
name = Creality CR-5 Pro H name = Creality CR-5 Pro H
variants = 0.4; 0.3; 0.5; 0.6 variants = 0.4; 0.3; 0.5; 0.6
@ -212,6 +235,7 @@ bed_model = cr5pro_bed.stl
bed_texture = cr5pro.svg bed_texture = cr5pro.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
thumbnail = CR5PROH_thumbnail.png
[printer_model:CR6SE] [printer_model:CR6SE]
name = Creality CR-6 SE name = Creality CR-6 SE
variants = 0.4; 0.3; 0.5; 0.6 variants = 0.4; 0.3; 0.5; 0.6
@ -221,6 +245,7 @@ bed_model = cr6se_bed.stl
bed_texture = cr6se.svg bed_texture = cr6se.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
thumbnail = CR6SE_thumbnail.png
[printer_model:CR6MAX] [printer_model:CR6MAX]
name = Creality CR-6 Max name = Creality CR-6 Max
variants = 0.4; 0.3; 0.5; 0.6 variants = 0.4; 0.3; 0.5; 0.6
@ -230,6 +255,7 @@ bed_model = cr10s4_bed.stl
bed_texture = cr10s4.svg bed_texture = cr10s4.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
thumbnail = CR6MAX_thumbnail.png
[printer_model:CR10SMART] [printer_model:CR10SMART]
name = Creality CR-10 SMART name = Creality CR-10 SMART
variants = 0.4; 0.3; 0.5; 0.6 variants = 0.4; 0.3; 0.5; 0.6
@ -239,6 +265,7 @@ bed_model = cr10v2_bed.stl
bed_texture = cr10spro.svg bed_texture = cr10spro.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
thumbnail = CR10SMART_thumbnail.png
[printer_model:CR10SMARTPRO] [printer_model:CR10SMARTPRO]
name = Creality CR-10 SMART Pro name = Creality CR-10 SMART Pro
variants = 0.4; 0.3; 0.5; 0.6 variants = 0.4; 0.3; 0.5; 0.6
@ -248,6 +275,7 @@ bed_model = cr10v2_bed.stl
bed_texture = cr10spro.svg bed_texture = cr10spro.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
thumbnail = CR10SMARTPRO_thumbnail.png
[printer_model:CR10MINI] [printer_model:CR10MINI]
name = Creality CR-10 Mini name = Creality CR-10 Mini
variants = 0.4; 0.3; 0.5; 0.6 variants = 0.4; 0.3; 0.5; 0.6
@ -257,6 +285,7 @@ bed_model = cr10mini_bed.stl
bed_texture = cr10mini.svg bed_texture = cr10mini.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
thumbnail = CR10MINI_thumbnail.png
[printer_model:CR10MAX] [printer_model:CR10MAX]
name = Creality CR-10 Max name = Creality CR-10 Max
variants = 0.4; 0.3; 0.5; 0.6 variants = 0.4; 0.3; 0.5; 0.6
@ -266,6 +295,7 @@ bed_model = cr10max_bed.stl
bed_texture = cr10max.svg bed_texture = cr10max.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
thumbnail = CR10MAX_thumbnail.png
[printer_model:CR10] [printer_model:CR10]
name = Creality CR-10 name = Creality CR-10
variants = 0.4; 0.3; 0.5; 0.6 variants = 0.4; 0.3; 0.5; 0.6
@ -275,6 +305,7 @@ bed_model = cr10_bed.stl
bed_texture = cr10.svg bed_texture = cr10.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
thumbnail = CR10_thumbnail.png
[printer_model:CR10V2] [printer_model:CR10V2]
name = Creality CR-10 V2 name = Creality CR-10 V2
variants = 0.4; 0.3; 0.5; 0.6 variants = 0.4; 0.3; 0.5; 0.6
@ -284,6 +315,7 @@ bed_model = cr10v2_bed.stl
bed_texture = cr10.svg bed_texture = cr10.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
thumbnail = CR10V2_thumbnail.png
[printer_model:CR10V3] [printer_model:CR10V3]
name = Creality CR-10 V3 name = Creality CR-10 V3
variants = 0.4; 0.3; 0.5; 0.6 variants = 0.4; 0.3; 0.5; 0.6
@ -293,6 +325,7 @@ bed_model = cr10v2_bed.stl
bed_texture = cr10.svg bed_texture = cr10.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
thumbnail = CR10V3_thumbnail.png
[printer_model:CR10S] [printer_model:CR10S]
name = Creality CR-10 S name = Creality CR-10 S
variants = 0.4; 0.3; 0.5; 0.6 variants = 0.4; 0.3; 0.5; 0.6
@ -302,6 +335,7 @@ bed_model = cr10_bed.stl
bed_texture = cr10.svg bed_texture = cr10.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
thumbnail = CR10S_thumbnail.png
[printer_model:CR10SPRO] [printer_model:CR10SPRO]
name = Creality CR-10 S Pro name = Creality CR-10 S Pro
variants = 0.4; 0.3; 0.5; 0.6 variants = 0.4; 0.3; 0.5; 0.6
@ -311,6 +345,7 @@ bed_model = cr10v2_bed.stl
bed_texture = cr10spro.svg bed_texture = cr10spro.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
thumbnail = CR10SPRO_thumbnail.png
[printer_model:CR10SPROV2] [printer_model:CR10SPROV2]
name = Creality CR-10 S Pro V2 name = Creality CR-10 S Pro V2
variants = 0.4; 0.3; 0.5; 0.6 variants = 0.4; 0.3; 0.5; 0.6
@ -320,6 +355,7 @@ bed_model = cr10v2_bed.stl
bed_texture = cr10.svg bed_texture = cr10.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
thumbnail = CR10SPROV2_thumbnail.png
[printer_model:CR10S4] [printer_model:CR10S4]
name = Creality CR-10 S4 name = Creality CR-10 S4
variants = 0.4; 0.3; 0.5; 0.6 variants = 0.4; 0.3; 0.5; 0.6
@ -329,6 +365,7 @@ bed_model = cr10s4_bed.stl
bed_texture = cr10s4.svg bed_texture = cr10s4.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
thumbnail = CR10S4_thumbnail.png
[printer_model:CR10S5] [printer_model:CR10S5]
name = Creality CR-10 S5 name = Creality CR-10 S5
variants = 0.4; 0.3; 0.5; 0.6 variants = 0.4; 0.3; 0.5; 0.6
@ -338,6 +375,7 @@ bed_model = cr10s5_bed.stl
bed_texture = cr10s5.svg bed_texture = cr10s5.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
thumbnail = CR10S5_thumbnail.png
[printer_model:CR20] [printer_model:CR20]
name = Creality CR-20 name = Creality CR-20
variants = 0.4; 0.3; 0.5; 0.6 variants = 0.4; 0.3; 0.5; 0.6
@ -347,6 +385,7 @@ bed_model = ender3_bed.stl
bed_texture = cr20.svg bed_texture = cr20.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
thumbnail = CR20_thumbnail.png
[printer_model:CR20PRO] [printer_model:CR20PRO]
name = Creality CR-20 Pro name = Creality CR-20 Pro
variants = 0.4; 0.3; 0.5; 0.6 variants = 0.4; 0.3; 0.5; 0.6
@ -356,6 +395,7 @@ bed_model = ender3_bed.stl
bed_texture = cr20.svg bed_texture = cr20.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
thumbnail = CR20PRO_thumbnail.png
[printer_model:CR200B] [printer_model:CR200B]
name = Creality CR-200B name = Creality CR-200B
variants = 0.4; 0.3; 0.5; 0.6 variants = 0.4; 0.3; 0.5; 0.6
@ -365,6 +405,7 @@ bed_model = cr200b_bed.stl
bed_texture = cr200b.svg bed_texture = cr200b.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
thumbnail = CR200B_thumbnail.png
[printer_model:CR8] [printer_model:CR8]
name = Creality CR-8 name = Creality CR-8
variants = 0.4; 0.3; 0.5; 0.6 variants = 0.4; 0.3; 0.5; 0.6
@ -374,24 +415,7 @@ bed_model = cr8_bed.stl
bed_texture = cr8.svg bed_texture = cr8.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
#[printer_model:CRX] thumbnail = CR8_thumbnail.png
#name = Creality CR-X
#variants = 0.4; 0.3; 0.5; 0.6
#technology = FFF
#family = CR-X
#bed_model = cr10v2_bed.stl
#bed_texture = cr10spro.svg
#default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
#[printer_model:CRXPRO]
#name = Creality CR-X Pro
#variants = 0.4; 0.3; 0.5; 0.6
#technology = FFF
#family = CR-X
#bed_model = cr10v2_bed.stl
#bed_texture = cr10spro.svg
#default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
[printer_model:SERMOOND1] [printer_model:SERMOOND1]
name = Creality Sermoon-D1 name = Creality Sermoon-D1
variants = 0.4; 0.3; 0.5; 0.6 variants = 0.4; 0.3; 0.5; 0.6
@ -401,8 +425,7 @@ bed_model = sermoond1_bed.stl
bed_texture = sermoond1.svg bed_texture = sermoond1.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
thumbnail = SERMOOND1_thumbnail.png
[printer_model:SERMOONV1] [printer_model:SERMOONV1]
name = Creality Sermoon-V1 name = Creality Sermoon-V1
variants = 0.4; 0.3; 0.5; 0.6 variants = 0.4; 0.3; 0.5; 0.6
@ -412,8 +435,7 @@ bed_model = sermoonv1_bed.stl
bed_texture = sermoonv1.svg bed_texture = sermoonv1.svg
default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @CREALITY; Creality PLA @CREALITY; Prusament PLA @CREALITY; Prusament PETG @CREALITY; AzureFilm PLA @CREALITY; Devil Design PLA @CREALITY; Devil Design PLA Matt @CREALITY; Devil Design PLA Galaxy @CREALITY; Extrudr PLA NX2 @CREALITY; Real Filament PLA @CREALITY; Velleman PLA @CREALITY; 3DJAKE ecoPLA @CREALITY; 3DJAKE ecoPLA Matt @CREALITY; 3DJAKE ecoPLA Tough @CREALITY; 123-3D Jupiter PLA @CREALITY; Verbatim PLA @CREALITY
thumbnail = SERMOONV1_thumbnail.png
[printer_model:SERMOONV1PRO] [printer_model:SERMOONV1PRO]
name = Creality Sermoon-V1 Pro name = Creality Sermoon-V1 Pro
variants = 0.4; 0.3; 0.5; 0.6 variants = 0.4; 0.3; 0.5; 0.6
@ -429,6 +451,7 @@ default_materials = Generic PLA @CREALITY; Generic PETG @CREALITY; Generic ABS @
# not make it into the user interface. # not make it into the user interface.
# Common print preset # Common print preset
thumbnail = SERMOONV1PRO_thumbnail.png
[print:*common*] [print:*common*]
avoid_crossing_perimeters = 0 avoid_crossing_perimeters = 0
bridge_acceleration = 250 bridge_acceleration = 250
@ -464,6 +487,10 @@ infill_only_where_needed = 0
infill_overlap = 23% infill_overlap = 23%
infill_speed = 50 infill_speed = 50
interface_shells = 0 interface_shells = 0
ironing_flowrate = 10%
ironing_spacing = 0.1
ironing_speed = 20
ironing_type = top
max_print_speed = 100 max_print_speed = 100
max_volumetric_extrusion_rate_slope_negative = 0 max_volumetric_extrusion_rate_slope_negative = 0
max_volumetric_extrusion_rate_slope_positive = 0 max_volumetric_extrusion_rate_slope_positive = 0
@ -531,7 +558,7 @@ top_solid_infill_speed = 30
support_material_speed = 40 support_material_speed = 40
support_material_interface_speed = 100% support_material_interface_speed = 100%
bridge_speed = 25 bridge_speed = 25
ironing_speed = 15 ironing_speed = 20
travel_speed = 150 travel_speed = 150
travel_speed_z = 0 travel_speed_z = 0
first_layer_speed = 20 first_layer_speed = 20
@ -1127,6 +1154,7 @@ min_fan_speed = 100
bridge_fan_speed = 100 bridge_fan_speed = 100
disable_fan_first_layers = 1 disable_fan_first_layers = 1
temperature = 205 temperature = 205
idle_temperature = 150
[filament:*PET*] [filament:*PET*]
inherits = *common* inherits = *common*
@ -1146,6 +1174,7 @@ max_fan_speed = 50
min_fan_speed = 20 min_fan_speed = 20
bridge_fan_speed = 100 bridge_fan_speed = 100
temperature = 240 temperature = 240
idle_temperature = 160
[filament:*ABS*] [filament:*ABS*]
inherits = *common* inherits = *common*
@ -1166,6 +1195,7 @@ min_fan_speed = 0
bridge_fan_speed = 30 bridge_fan_speed = 30
top_fan_speed = 0 top_fan_speed = 0
temperature = 245 temperature = 245
idle_temperature = 180
[filament:*TPU*] [filament:*TPU*]
inherits = *common* inherits = *common*
@ -1186,6 +1216,7 @@ min_fan_speed = 0
bridge_fan_speed = 30 bridge_fan_speed = 30
top_fan_speed = 0 top_fan_speed = 0
temperature = 245 temperature = 245
idle_temperature = 130
[filament:Generic PLA @CREALITY] [filament:Generic PLA @CREALITY]
inherits = *PLA* inherits = *PLA*
@ -1455,6 +1486,18 @@ filament_density = 1.37
filament_colour = #FF4640 filament_colour = #FF4640
filament_spool_weight = 180 filament_spool_weight = 180
[filament:Polymaker PolyTerra PLA @CREALITY]
inherits = *PLA*
filament_vendor = Polymaker
temperature = 205
bed_temperature = 45
first_layer_temperature = 205
first_layer_bed_temperature = 45
filament_cost = 20.99
filament_density = 1.31
filament_colour = #42B3C0
filament_spool_weight = 140
[filament:VOXELPLA PLA Plus @CREALITY] [filament:VOXELPLA PLA Plus @CREALITY]
inherits = *PLA* inherits = *PLA*
filament_vendor = VOXELPLA filament_vendor = VOXELPLA
@ -1625,7 +1668,7 @@ wipe = 1
z_offset = 0 z_offset = 0
printer_model = printer_model =
default_filament_profile = "Generic PLA @CREALITY" default_filament_profile = "Generic PLA @CREALITY"
start_gcode = G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing\nM140 S{first_layer_bed_temperature[0]} ; set final bed temp\nG4 S30 ; allow partial nozzle warmup\nG28 ; home all axis\nG1 Z50 F240\nG1 X2.0 Y10 F3000\nM104 S{first_layer_temperature[0]} ; set final nozzle temp\nM190 S{first_layer_bed_temperature[0]} ; wait for bed temp to stabilize\nM109 S{first_layer_temperature[0]} ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 X2.0 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 Y140 F5000\nG92 E0\nG1 X2.3 Y10 E10 F1200 ; prime the nozzle\nG92 E0 start_gcode = G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S{is_nil(idle_temperature[0]) ? 150 : idle_temperature[0]} ; set temporary nozzle temp to prevent oozing during homing\nM140 S{first_layer_bed_temperature[0]} ; set final bed temp\nG4 S30 ; allow partial nozzle warmup\nG28 ; home all axis\nG1 Z50 F240\nG1 X2.0 Y10 F3000\nM104 S{first_layer_temperature[0]} ; set final nozzle temp\nM190 S{first_layer_bed_temperature[0]} ; wait for bed temp to stabilize\nM109 S{first_layer_temperature[0]} ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 X2.0 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 Y140 F5000\nG92 E0\nG1 X2.3 Y10 E10 F1200 ; prime the nozzle\nG92 E0
end_gcode = {if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+2, max_print_height)} F600 ; Move print head up{endif}\nG1 X5 Y{print_bed_max[1]*0.85} F{travel_speed*60} ; present print\n{if max_layer_z < max_print_height-10}G1 Z{z_offset+min(max_layer_z+70, max_print_height-10)} F600 ; Move print head further up{endif}\n{if max_layer_z < max_print_height*0.6}G1 Z{max_print_height*0.6} F600 ; Move print head further up{endif}\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors end_gcode = {if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+2, max_print_height)} F600 ; Move print head up{endif}\nG1 X5 Y{print_bed_max[1]*0.85} F{travel_speed*60} ; present print\n{if max_layer_z < max_print_height-10}G1 Z{z_offset+min(max_layer_z+70, max_print_height-10)} F600 ; Move print head further up{endif}\n{if max_layer_z < max_print_height*0.6}G1 Z{max_print_height*0.6} F600 ; Move print head further up{endif}\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors
# Intended for printers that have exclusively shipped with a 32bit mainboard # Intended for printers that have exclusively shipped with a 32bit mainboard
@ -1634,19 +1677,19 @@ gcode_flavor = marlin2
# Intended for printers equipped with a strain gauge mechanism, like the CR-6 series # Intended for printers equipped with a strain gauge mechanism, like the CR-6 series
[printer:*straingauge*] [printer:*straingauge*]
start_gcode = G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM109 S{first_layer_temperature[0]-50} ; set temporary nozzle temp to prevent oozing during homing\nM190 S{first_layer_bed_temperature[0]} ; wait for bed temp to stabilize\nM140 S{first_layer_bed_temperature[0]} ; set final bed temp\nG28 ; home all axis\nG1 Z50 F240\nG1 X2.0 Y10 F3000\nM104 S{first_layer_temperature[0]} ; set final nozzle temp\nM109 S{first_layer_temperature[0]} ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 X2.0 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 Y140 F5000\nG92 E0\nG1 X2.3 Y10 E10 F1200 ; prime the nozzle\nG92 E0 start_gcode = G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM109 S{is_nil(idle_temperature[0]) ? 150 : idle_temperature[0]} ; set temporary nozzle temp to prevent oozing during homing\nM190 S{first_layer_bed_temperature[0]} ; wait for bed temp to stabilize\nM140 S{first_layer_bed_temperature[0]} ; set final bed temp\nG28 ; home all axis\nG1 Z50 F240\nG1 X2.0 Y10 F3000\nM104 S{first_layer_temperature[0]} ; set final nozzle temp\nM109 S{first_layer_temperature[0]} ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 X2.0 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 Y140 F5000\nG92 E0\nG1 X2.3 Y10 E10 F1200 ; prime the nozzle\nG92 E0
# Intended for printers with a smaller bed, like the Ender-3 series # Intended for printers with a smaller bed, like the Ender-3 series
[printer:*fastabl*] [printer:*fastabl*]
start_gcode = G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing and auto bed leveling\nM140 S{first_layer_bed_temperature[0]} ; set final bed temp\nG4 S30 ; allow partial nozzle warmup\nG28 ; home all axis\nG29 ; auto bed levelling\nG1 Z50 F240\nG1 X2.0 Y10 F3000\nM104 S{first_layer_temperature[0]} ; set final nozzle temp\nM190 S{first_layer_bed_temperature[0]} ; wait for bed temp to stabilize\nM109 S{first_layer_temperature[0]} ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 X2.0 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 Y140 F5000\nG92 E0\nG1 X2.3 Y10 E10 F1200 ; prime the nozzle\nG92 E0 start_gcode = G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S{is_nil(idle_temperature[0]) ? 150 : idle_temperature[0]} ; set temporary nozzle temp to prevent oozing during homing and auto bed leveling\nM140 S{first_layer_bed_temperature[0]} ; set final bed temp\nG4 S30 ; allow partial nozzle warmup\nG28 ; home all axis\nG29 ; auto bed levelling\nG1 Z50 F240\nG1 X2.0 Y10 F3000\nM104 S{first_layer_temperature[0]} ; set final nozzle temp\nM190 S{first_layer_bed_temperature[0]} ; wait for bed temp to stabilize\nM109 S{first_layer_temperature[0]} ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 X2.0 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 Y140 F5000\nG92 E0\nG1 X2.3 Y10 E10 F1200 ; prime the nozzle\nG92 E0
# Intended for printers with a larger bed, like the CR-10 series # Intended for printers with a larger bed, like the CR-10 series
[printer:*slowabl*] [printer:*slowabl*]
start_gcode = G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing and auto bed leveling\nM140 S{first_layer_bed_temperature[0]} ; set final bed temp\nM190 S{first_layer_bed_temperature[0]} ; wait for bed temp to stabilize\nG28 ; home all axis\nG29 ; auto bed levelling\nG1 Z50 F240\nG1 X2.0 Y10 F3000\nM104 S{first_layer_temperature[0]} ; set final nozzle temp\nM109 S{first_layer_temperature[0]} ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 X2.0 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 Y140 F5000\nG92 E0\nG1 X2.3 Y10 E10 F1200 ; prime the nozzle\nG92 E0 start_gcode = G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S{is_nil(idle_temperature[0]) ? 150 : idle_temperature[0]} ; set temporary nozzle temp to prevent oozing during homing and auto bed leveling\nM140 S{first_layer_bed_temperature[0]} ; set final bed temp\nM190 S{first_layer_bed_temperature[0]} ; wait for bed temp to stabilize\nG28 ; home all axis\nG29 ; auto bed levelling\nG1 Z50 F240\nG1 X2.0 Y10 F3000\nM104 S{first_layer_temperature[0]} ; set final nozzle temp\nM109 S{first_layer_temperature[0]} ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 X2.0 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 Y140 F5000\nG92 E0\nG1 X2.3 Y10 E10 F1200 ; prime the nozzle\nG92 E0
# intended for printers that have RESTORE_LEVELING_AFTER_G28 enabled in firmware # intended for printers that have RESTORE_LEVELING_AFTER_G28 enabled in firmware
[printer:*storedabl*] [printer:*storedabl*]
start_gcode = G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing\nM140 S{first_layer_bed_temperature[0]} ; set final bed temp\nG4 S30 ; allow partial nozzle warmup\nG28 ; home all axis and restore leveling\nG1 Z50 F240\nG1 X2.0 Y10 F3000\nM104 S{first_layer_temperature[0]} ; set final nozzle temp\nM190 S{first_layer_bed_temperature[0]} ; wait for bed temp to stabilize\nM109 S{first_layer_temperature[0]} ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 X2.0 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 Y140 F5000\nG92 E0\nG1 X2.3 Y10 E10 F1200 ; prime the nozzle\nG92 E0 start_gcode = G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S{is_nil(idle_temperature[0]) ? 150 : idle_temperature[0]} ; set temporary nozzle temp to prevent oozing during homing\nM140 S{first_layer_bed_temperature[0]} ; set final bed temp\nG4 S30 ; allow partial nozzle warmup\nG28 ; home all axis and restore leveling\nG1 Z50 F240\nG1 X2.0 Y10 F3000\nM104 S{first_layer_temperature[0]} ; set final nozzle temp\nM190 S{first_layer_bed_temperature[0]} ; wait for bed temp to stabilize\nM109 S{first_layer_temperature[0]} ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 X2.0 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 Y140 F5000\nG92 E0\nG1 X2.3 Y10 E10 F1200 ; prime the nozzle\nG92 E0
# Intended for printers with vendor official firmware verified to support M25 # Intended for printers with vendor official firmware verified to support M25
[printer:*pauseprint*] [printer:*pauseprint*]
@ -1992,7 +2035,7 @@ inherits = *ENDER4*; *0.6nozzle*
[printer:*ENDER5*] [printer:*ENDER5*]
inherits = *common*; *bowdenlong*; *descendingz* inherits = *common*; *bowdenlong*; *descendingz*
bed_shape = 5x2.5,225x2.5,225x222.5,5x222.5 bed_shape = 5x0,215x0,215x220,5x220
max_print_height = 300 max_print_height = 300
printer_model = ENDER5 printer_model = ENDER5
printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_CREALITY\nPRINTER_MODEL_ENDER5\nPRINTER_HAS_BOWDEN printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_CREALITY\nPRINTER_MODEL_ENDER5\nPRINTER_HAS_BOWDEN
@ -2016,7 +2059,7 @@ inherits = *ENDER5*; *0.6nozzle*
[printer:*ENDER5PRO*] [printer:*ENDER5PRO*]
inherits = *common*; *bowdencapricorn*; *descendingz* inherits = *common*; *bowdencapricorn*; *descendingz*
bed_shape = 5x2.5,225x2.5,225x222.5,5x222.5 bed_shape = 5x0,215x0,215x220,5x220
max_print_height = 300 max_print_height = 300
printer_model = ENDER5PRO printer_model = ENDER5PRO
printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_CREALITY\nPRINTER_MODEL_ENDER5PRO\nPRINTER_HAS_BOWDEN printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_CREALITY\nPRINTER_MODEL_ENDER5PRO\nPRINTER_HAS_BOWDEN
@ -2666,4 +2709,4 @@ inherits = *SERMOONV1PRO*; *0.4nozzle*
inherits = *SERMOONV1PRO*; *0.5nozzle* inherits = *SERMOONV1PRO*; *0.5nozzle*
[printer:Creality Sermoon-V1 Pro (0.6 mm nozzle)] [printer:Creality Sermoon-V1 Pro (0.6 mm nozzle)]
inherits = *SERMOONV1PRO*; *0.6nozzle* inherits = *SERMOONV1PRO*; *0.6nozzle*

View File

@ -1,3 +1,6 @@
min_slic3r_version = 2.8.0-alpha1
2.0.0 Updated for PS2.8.0.
max_slic3r_version = 2.7.9
min_slic3r_version = 2.6.0-alpha1 min_slic3r_version = 2.6.0-alpha1
1.0.3 Added Eolas Prints filaments. 1.0.3 Added Eolas Prints filaments.
1.0.2 Added new printer models. 1.0.2 Added new printer models.

File diff suppressed because it is too large Load Diff

View File

@ -1,2 +1,6 @@
min_slic3r_version = 2.8.0-alpha0
1.0.0 Updated for PS2.8.0.
max_slic3r_version = 2.7.9
min_slic3r_version = 2.3.0-rc2 min_slic3r_version = 2.3.0-rc2
0.0.2 Updated start g-code for QQ Pro.
0.0.1 Initial Version 0.0.1 Initial Version

File diff suppressed because it is too large Load Diff

View File

@ -1,3 +1,6 @@
min_slic3r_version = 2.8.0-alpha0
1.0.0 Updated for PS2.8.0.
max_slic3r_version = 2.7.9
min_slic3r_version = 2.6.0-alpha1 min_slic3r_version = 2.6.0-alpha1
0.1.0 Initial Geeetech bundle 0.1.0 Initial Geeetech bundle

View File

@ -3,18 +3,20 @@
# https://github.com/prusa3d/PrusaSlicer/pull/9221 by @alexwoo1900 # https://github.com/prusa3d/PrusaSlicer/pull/9221 by @alexwoo1900
[vendor] [vendor]
repo_id = non-prusa-fff
# Vendor name will be shown by the Config Wizard. # Vendor name will be shown by the Config Wizard.
name = Geeetech name = Geeetech
# Configuration version of this file. Config file will only be installed, if the config_version differs. # Configuration version of this file. Config file will only be installed, if the config_version differs.
# This means, the server may force the PrusaSlicer configuration to be downgraded. # This means, the server may force the PrusaSlicer configuration to be downgraded.
config_version = 0.1.0 config_version = 1.0.0
# Where to get the updates from? # Where to get the updates from?
config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/Geeetech/ config_update_url = https://preset-repo-api.prusa3d.com/v1/repos/non-prusa-fff/Geeetech/
# The printer models will be shown by the Configuration Wizard in this order, # The printer models will be shown by the Configuration Wizard in this order,
# also the first model installed & the first nozzle installed will be activated after install. # also the first model installed & the first nozzle installed will be activated after install.
# Printer model name will be shown by the installation wizard. # Printer model name will be shown by the installation wizard.
config_url = https://preset-repo-api.prusa3d.com/v1/repos/non-prusa-fff/Geeetech/
[printer_model:Thunder] [printer_model:Thunder]
name = Geeetech Thunder name = Geeetech Thunder
variants = 0.4; 0.2; 0.6; 0.8 variants = 0.4; 0.2; 0.6; 0.8
@ -24,6 +26,7 @@ bed_model = 250x250.stl
bed_texture = 250x250.svg bed_texture = 250x250.svg
default_materials = Thunder HS-PLA @Geeetech; Thunder PLA @Geeetech; Generic PLA @Geeetech; Generic PETG @Geeetech; Generic ABS @Geeetech; Generic TPU @Geeetech; Geeetech PLA @Geeetech; Geeetech PETG @Geeetech; Geeetech ABS @Geeetech default_materials = Thunder HS-PLA @Geeetech; Thunder PLA @Geeetech; Generic PLA @Geeetech; Generic PETG @Geeetech; Generic ABS @Geeetech; Generic TPU @Geeetech; Geeetech PLA @Geeetech; Geeetech PETG @Geeetech; Geeetech ABS @Geeetech
thumbnail = Thunder_thumbnail.png
[printer_model:ThunderPro] [printer_model:ThunderPro]
name = Geeetech Thunder Pro name = Geeetech Thunder Pro
variants = 0.4; 0.2; 0.6; 0.8 variants = 0.4; 0.2; 0.6; 0.8
@ -33,6 +36,7 @@ bed_model = 250x250.stl
bed_texture = 250x250.svg bed_texture = 250x250.svg
default_materials = Thunder HS-PLA @Geeetech; Thunder PLA @Geeetech; Generic PLA @Geeetech; Generic PETG @Geeetech; Generic ABS @Geeetech; Generic TPU @Geeetech; Geeetech PLA @Geeetech; Geeetech PETG @Geeetech; Geeetech ABS @Geeetech default_materials = Thunder HS-PLA @Geeetech; Thunder PLA @Geeetech; Generic PLA @Geeetech; Generic PETG @Geeetech; Generic ABS @Geeetech; Generic TPU @Geeetech; Geeetech PLA @Geeetech; Geeetech PETG @Geeetech; Geeetech ABS @Geeetech
thumbnail = ThunderPro_thumbnail.png
[printer_model:MizarS] [printer_model:MizarS]
name = Geeetech Mizar S name = Geeetech Mizar S
variants = 0.4; 0.2; 0.3; 0.5; 0.6; 0.8 variants = 0.4; 0.2; 0.3; 0.5; 0.6; 0.8
@ -42,6 +46,7 @@ bed_model = 255x255.stl
bed_texture = 255x255.svg bed_texture = 255x255.svg
default_materials = Generic PLA @Geeetech; Generic PETG @Geeetech; Generic ABS @Geeetech; Generic TPU @Geeetech; Geeetech PLA @Geeetech; Geeetech PETG @Geeetech; Geeetech ABS @Geeetech default_materials = Generic PLA @Geeetech; Generic PETG @Geeetech; Generic ABS @Geeetech; Generic TPU @Geeetech; Geeetech PLA @Geeetech; Geeetech PETG @Geeetech; Geeetech ABS @Geeetech
thumbnail = MizarS_thumbnail.png
[printer_model:MizarPro] [printer_model:MizarPro]
name = Geeetech Mizar Pro name = Geeetech Mizar Pro
variants = 0.4; 0.2; 0.3; 0.5; 0.6; 0.8 variants = 0.4; 0.2; 0.3; 0.5; 0.6; 0.8
@ -51,6 +56,7 @@ bed_model = 220x220.stl
bed_texture = 220x220.svg bed_texture = 220x220.svg
default_materials = Generic PLA @Geeetech; Generic PETG @Geeetech; Generic ABS @Geeetech; Generic TPU @Geeetech; Geeetech PLA @Geeetech; Geeetech PETG @Geeetech; Geeetech ABS @Geeetech default_materials = Generic PLA @Geeetech; Generic PETG @Geeetech; Generic ABS @Geeetech; Generic TPU @Geeetech; Geeetech PLA @Geeetech; Geeetech PETG @Geeetech; Geeetech ABS @Geeetech
thumbnail = MizarPro_thumbnail.png
[printer_model:Mizar] [printer_model:Mizar]
name = Geeetech Mizar name = Geeetech Mizar
variants = 0.4; 0.2; 0.3; 0.5; 0.6; 0.8 variants = 0.4; 0.2; 0.3; 0.5; 0.6; 0.8
@ -60,6 +66,7 @@ bed_model = 220x220.stl
bed_texture = 220x220.svg bed_texture = 220x220.svg
default_materials = Generic PLA @Geeetech; Generic PETG @Geeetech; Generic ABS @Geeetech; Generic TPU @Geeetech; Geeetech PLA @Geeetech; Geeetech PETG @Geeetech; Geeetech ABS @Geeetech default_materials = Generic PLA @Geeetech; Generic PETG @Geeetech; Generic ABS @Geeetech; Generic TPU @Geeetech; Geeetech PLA @Geeetech; Geeetech PETG @Geeetech; Geeetech ABS @Geeetech
thumbnail = Mizar_thumbnail.png
[printer_model:MizarMax] [printer_model:MizarMax]
name = Geeetech Mizar Max name = Geeetech Mizar Max
variants = 0.4; 0.2; 0.3; 0.5; 0.6; 0.8 variants = 0.4; 0.2; 0.3; 0.5; 0.6; 0.8
@ -69,6 +76,7 @@ bed_model = 320x320.stl
bed_texture = 320x320.svg bed_texture = 320x320.svg
default_materials = Generic PLA @Geeetech; Generic PETG @Geeetech; Generic ABS @Geeetech; Generic TPU @Geeetech; Geeetech PLA @Geeetech; Geeetech PETG @Geeetech; Geeetech ABS @Geeetech default_materials = Generic PLA @Geeetech; Generic PETG @Geeetech; Generic ABS @Geeetech; Generic TPU @Geeetech; Geeetech PLA @Geeetech; Geeetech PETG @Geeetech; Geeetech ABS @Geeetech
thumbnail = MizarMax_thumbnail.png
[printer_model:MizarM] [printer_model:MizarM]
name = Geeetech Mizar M name = Geeetech Mizar M
variants = 0.4 variants = 0.4
@ -87,6 +95,7 @@ default_materials = Generic PLA @Geeetech; Generic PETG @Geeetech; Generic ABS @
#bed_texture = 255x255.svg #bed_texture = 255x255.svg
#default_materials = Generic PLA @Geeetech; Generic PETG @Geeetech; Generic ABS @Geeetech; Generic TPU @Geeetech; Geeetech PLA @Geeetech; Geeetech PETG @Geeetech; Geeetech ABS @Geeetech #default_materials = Generic PLA @Geeetech; Generic PETG @Geeetech; Generic ABS @Geeetech; Generic TPU @Geeetech; Geeetech PLA @Geeetech; Geeetech PETG @Geeetech; Geeetech ABS @Geeetech
thumbnail = MizarM_thumbnail.png
[printer_model:A10Pro] [printer_model:A10Pro]
name = Geeetech A10 Pro name = Geeetech A10 Pro
variants = 0.4; 0.2; 0.3; 0.5; 0.6; 0.8 variants = 0.4; 0.2; 0.3; 0.5; 0.6; 0.8
@ -96,6 +105,7 @@ bed_model = 220x220.stl
bed_texture = 220x220.svg bed_texture = 220x220.svg
default_materials = Generic PLA @Geeetech; Generic PETG @Geeetech; Generic ABS @Geeetech; Generic TPU @Geeetech; Geeetech PLA @Geeetech; Geeetech PETG @Geeetech; Geeetech ABS @Geeetech default_materials = Generic PLA @Geeetech; Generic PETG @Geeetech; Generic ABS @Geeetech; Generic TPU @Geeetech; Geeetech PLA @Geeetech; Geeetech PETG @Geeetech; Geeetech ABS @Geeetech
thumbnail = A10Pro_thumbnail.png
[printer_model:A10M] [printer_model:A10M]
name = Geeetech A10 M name = Geeetech A10 M
variants = 0.4 variants = 0.4
@ -105,6 +115,7 @@ bed_model = 220x220.stl
bed_texture = 220x220.svg bed_texture = 220x220.svg
default_materials = Generic PLA @Geeetech; Generic PETG @Geeetech; Generic ABS @Geeetech; Generic TPU @Geeetech; Geeetech PLA @Geeetech; Geeetech PETG @Geeetech; Geeetech ABS @Geeetech default_materials = Generic PLA @Geeetech; Generic PETG @Geeetech; Generic ABS @Geeetech; Generic TPU @Geeetech; Geeetech PLA @Geeetech; Geeetech PETG @Geeetech; Geeetech ABS @Geeetech
thumbnail = A10M_thumbnail.png
[printer_model:A10T] [printer_model:A10T]
name = Geeetech A10 T name = Geeetech A10 T
variants = 0.4 variants = 0.4
@ -114,6 +125,7 @@ bed_model = 220x220.stl
bed_texture = 220x220.svg bed_texture = 220x220.svg
default_materials = Generic PLA @Geeetech; Generic PETG @Geeetech; Generic ABS @Geeetech; Generic TPU @Geeetech; Geeetech PLA @Geeetech; Geeetech PETG @Geeetech; Geeetech ABS @Geeetech default_materials = Generic PLA @Geeetech; Generic PETG @Geeetech; Generic ABS @Geeetech; Generic TPU @Geeetech; Geeetech PLA @Geeetech; Geeetech PETG @Geeetech; Geeetech ABS @Geeetech
thumbnail = A10T_thumbnail.png
[printer_model:A20] [printer_model:A20]
name = Geeetech A20 name = Geeetech A20
variants = 0.4; 0.2; 0.3; 0.5; 0.6; 0.8 variants = 0.4; 0.2; 0.3; 0.5; 0.6; 0.8
@ -123,6 +135,7 @@ bed_model = 250x250.stl
bed_texture = 250x250.svg bed_texture = 250x250.svg
default_materials = Generic PLA @Geeetech; Generic PETG @Geeetech; Generic ABS @Geeetech; Generic TPU @Geeetech; Geeetech PLA @Geeetech; Geeetech PETG @Geeetech; Geeetech ABS @Geeetech default_materials = Generic PLA @Geeetech; Generic PETG @Geeetech; Generic ABS @Geeetech; Generic TPU @Geeetech; Geeetech PLA @Geeetech; Geeetech PETG @Geeetech; Geeetech ABS @Geeetech
thumbnail = A20_thumbnail.png
[printer_model:A20M] [printer_model:A20M]
name = Geeetech A20 M name = Geeetech A20 M
variants = 0.4 variants = 0.4
@ -132,6 +145,7 @@ bed_model = 250x250.stl
bed_texture = 250x250.svg bed_texture = 250x250.svg
default_materials = Generic PLA @Geeetech; Generic PETG @Geeetech; Generic ABS @Geeetech; Generic TPU @Geeetech; Geeetech PLA @Geeetech; Geeetech PETG @Geeetech; Geeetech ABS @Geeetech default_materials = Generic PLA @Geeetech; Generic PETG @Geeetech; Generic ABS @Geeetech; Generic TPU @Geeetech; Geeetech PLA @Geeetech; Geeetech PETG @Geeetech; Geeetech ABS @Geeetech
thumbnail = A20M_thumbnail.png
[printer_model:A20T] [printer_model:A20T]
name = Geeetech A20 T name = Geeetech A20 T
variants = 0.4 variants = 0.4
@ -141,6 +155,7 @@ bed_model = 250x250.stl
bed_texture = 250x250.svg bed_texture = 250x250.svg
default_materials = Generic PLA @Geeetech; Generic PETG @Geeetech; Generic ABS @Geeetech; Generic TPU @Geeetech; Geeetech PLA @Geeetech; Geeetech PETG @Geeetech; Geeetech ABS @Geeetech default_materials = Generic PLA @Geeetech; Generic PETG @Geeetech; Generic ABS @Geeetech; Generic TPU @Geeetech; Geeetech PLA @Geeetech; Geeetech PETG @Geeetech; Geeetech ABS @Geeetech
thumbnail = A20T_thumbnail.png
[printer_model:A30Pro] [printer_model:A30Pro]
name = Geeetech A30 Pro name = Geeetech A30 Pro
variants = 0.4; 0.2; 0.3; 0.5; 0.6; 0.8 variants = 0.4; 0.2; 0.3; 0.5; 0.6; 0.8
@ -150,6 +165,7 @@ bed_model = 320x320.stl
bed_texture = 320x320.svg bed_texture = 320x320.svg
default_materials = Generic PLA @Geeetech; Generic PETG @Geeetech; Generic ABS @Geeetech; Generic TPU @Geeetech; Geeetech PLA @Geeetech; Geeetech PETG @Geeetech; Geeetech ABS @Geeetech default_materials = Generic PLA @Geeetech; Generic PETG @Geeetech; Generic ABS @Geeetech; Generic TPU @Geeetech; Geeetech PLA @Geeetech; Geeetech PETG @Geeetech; Geeetech ABS @Geeetech
thumbnail = A30Pro_thumbnail.png
[printer_model:A30M] [printer_model:A30M]
name = Geeetech A30 M name = Geeetech A30 M
variants = 0.4 variants = 0.4
@ -159,6 +175,7 @@ bed_model = 320x320.stl
bed_texture = 320x320.svg bed_texture = 320x320.svg
default_materials = Generic PLA @Geeetech; Generic PETG @Geeetech; Generic ABS @Geeetech; Generic TPU @Geeetech; Geeetech PLA @Geeetech; Geeetech PETG @Geeetech; Geeetech ABS @Geeetech default_materials = Generic PLA @Geeetech; Generic PETG @Geeetech; Generic ABS @Geeetech; Generic TPU @Geeetech; Geeetech PLA @Geeetech; Geeetech PETG @Geeetech; Geeetech ABS @Geeetech
thumbnail = A30M_thumbnail.png
[printer_model:A30T] [printer_model:A30T]
name = Geeetech A30 T name = Geeetech A30 T
variants = 0.4 variants = 0.4
@ -168,6 +185,7 @@ bed_model = 320x320.stl
bed_texture = 320x320.svg bed_texture = 320x320.svg
default_materials = Generic PLA @Geeetech; Generic PETG @Geeetech; Generic ABS @Geeetech; Generic TPU @Geeetech; Geeetech PLA @Geeetech; Geeetech PETG @Geeetech; Geeetech ABS @Geeetech default_materials = Generic PLA @Geeetech; Generic PETG @Geeetech; Generic ABS @Geeetech; Generic TPU @Geeetech; Geeetech PLA @Geeetech; Geeetech PETG @Geeetech; Geeetech ABS @Geeetech
thumbnail = A30T_thumbnail.png
[printer_model:E180] [printer_model:E180]
name = Geeetech E180 name = Geeetech E180
variants = 0.4; 0.2; 0.3; 0.5; 0.6; 0.8 variants = 0.4; 0.2; 0.3; 0.5; 0.6; 0.8
@ -177,6 +195,7 @@ bed_model = 125X130.stl
bed_texture = 125X130.svg bed_texture = 125X130.svg
default_materials = Generic PLA @Geeetech; Generic PETG @Geeetech; Generic ABS @Geeetech; Generic TPU @Geeetech; Geeetech PLA @Geeetech; Geeetech PETG @Geeetech; Geeetech ABS @Geeetech default_materials = Generic PLA @Geeetech; Generic PETG @Geeetech; Generic ABS @Geeetech; Generic TPU @Geeetech; Geeetech PLA @Geeetech; Geeetech PETG @Geeetech; Geeetech ABS @Geeetech
thumbnail = E180_thumbnail.png
[printer_model:MeDucer] [printer_model:MeDucer]
name = Geeetech Me Ducer name = Geeetech Me Ducer
variants = 0.4; 0.2; 0.3; 0.5; 0.6; 0.8 variants = 0.4; 0.2; 0.3; 0.5; 0.6; 0.8
@ -186,6 +205,7 @@ bed_model = 180X150.stl
bed_texture = 180X150.svg bed_texture = 180X150.svg
default_materials = Generic PLA @Geeetech; Generic PETG @Geeetech; Generic ABS @Geeetech; Generic TPU @Geeetech; Geeetech PLA @Geeetech; Geeetech PETG @Geeetech; Geeetech ABS @Geeetech default_materials = Generic PLA @Geeetech; Generic PETG @Geeetech; Generic ABS @Geeetech; Generic TPU @Geeetech; Geeetech PLA @Geeetech; Geeetech PETG @Geeetech; Geeetech ABS @Geeetech
thumbnail = MeDucer_thumbnail.png
[printer_model:MeCreator] [printer_model:MeCreator]
name = Geeetech Me Creator name = Geeetech Me Creator
variants = 0.4; 0.2; 0.3; 0.5; 0.6; 0.8 variants = 0.4; 0.2; 0.3; 0.5; 0.6; 0.8
@ -195,6 +215,7 @@ bed_model = 150x150.stl
bed_texture = 150x150.svg bed_texture = 150x150.svg
default_materials = Generic PLA @Geeetech; Generic PETG @Geeetech; Generic ABS @Geeetech; Generic TPU @Geeetech; Geeetech PLA @Geeetech; Geeetech PETG @Geeetech; Geeetech ABS @Geeetech default_materials = Generic PLA @Geeetech; Generic PETG @Geeetech; Generic ABS @Geeetech; Generic TPU @Geeetech; Geeetech PLA @Geeetech; Geeetech PETG @Geeetech; Geeetech ABS @Geeetech
thumbnail = MeCreator_thumbnail.png
[printer_model:MeCreator2] [printer_model:MeCreator2]
name = Geeetech Me Creator2 name = Geeetech Me Creator2
variants = 0.4; 0.2; 0.3; 0.5; 0.6; 0.8 variants = 0.4; 0.2; 0.3; 0.5; 0.6; 0.8
@ -204,6 +225,7 @@ bed_model = 160x160.stl
bed_texture = 160x160.svg bed_texture = 160x160.svg
default_materials = Generic PLA @Geeetech; Generic PETG @Geeetech; Generic ABS @Geeetech; Generic TPU @Geeetech; Geeetech PLA @Geeetech; Geeetech PETG @Geeetech; Geeetech ABS @Geeetech default_materials = Generic PLA @Geeetech; Generic PETG @Geeetech; Generic ABS @Geeetech; Generic TPU @Geeetech; Geeetech PLA @Geeetech; Geeetech PETG @Geeetech; Geeetech ABS @Geeetech
thumbnail = MeCreator2_thumbnail.png
[printer_model:GiantArmD200] [printer_model:GiantArmD200]
name = Geeetech GiantArmD200 name = Geeetech GiantArmD200
variants = 0.4; 0.2; 0.3; 0.5; 0.6; 0.8 variants = 0.4; 0.2; 0.3; 0.5; 0.6; 0.8
@ -213,6 +235,7 @@ bed_model = 300x180.stl
bed_texture = 300x180.svg bed_texture = 300x180.svg
default_materials = Generic PLA @Geeetech; Generic PETG @Geeetech; Generic ABS @Geeetech; Generic TPU @Geeetech; Geeetech PLA @Geeetech; Geeetech PETG @Geeetech; Geeetech ABS @Geeetech default_materials = Generic PLA @Geeetech; Generic PETG @Geeetech; Generic ABS @Geeetech; Generic TPU @Geeetech; Geeetech PLA @Geeetech; Geeetech PETG @Geeetech; Geeetech ABS @Geeetech
thumbnail = GiantArmD200_thumbnail.png
[printer_model:I3ProB] [printer_model:I3ProB]
name = Geeetech I3 ProB name = Geeetech I3 ProB
variants = 0.4; 0.2; 0.3; 0.5; 0.6; 0.8 variants = 0.4; 0.2; 0.3; 0.5; 0.6; 0.8
@ -222,6 +245,7 @@ bed_model = 200x200.stl
bed_texture = 200x200.svg bed_texture = 200x200.svg
default_materials = Generic PLA @Geeetech; Generic PETG @Geeetech; Generic ABS @Geeetech; Generic TPU @Geeetech; Geeetech PLA @Geeetech; Geeetech PETG @Geeetech; Geeetech ABS @Geeetech default_materials = Generic PLA @Geeetech; Generic PETG @Geeetech; Generic ABS @Geeetech; Generic TPU @Geeetech; Geeetech PLA @Geeetech; Geeetech PETG @Geeetech; Geeetech ABS @Geeetech
thumbnail = I3ProB_thumbnail.png
[printer_model:I3ProW] [printer_model:I3ProW]
name = Geeetech I3 ProW name = Geeetech I3 ProW
variants = 0.4; 0.2; 0.3; 0.5; 0.6; 0.8 variants = 0.4; 0.2; 0.3; 0.5; 0.6; 0.8
@ -231,6 +255,7 @@ bed_model = 200x200.stl
bed_texture = 200x200.svg bed_texture = 200x200.svg
default_materials = Generic PLA @Geeetech; Generic PETG @Geeetech; Generic ABS @Geeetech; Generic TPU @Geeetech; Geeetech PLA @Geeetech; Geeetech PETG @Geeetech; Geeetech ABS @Geeetech default_materials = Generic PLA @Geeetech; Generic PETG @Geeetech; Generic ABS @Geeetech; Generic TPU @Geeetech; Geeetech PLA @Geeetech; Geeetech PETG @Geeetech; Geeetech ABS @Geeetech
thumbnail = I3ProW_thumbnail.png
[printer_model:I3ProC] [printer_model:I3ProC]
name = Geeetech I3 ProC name = Geeetech I3 ProC
variants = 0.4 variants = 0.4
@ -246,6 +271,7 @@ default_materials = Generic PLA @Geeetech; Generic PETG @Geeetech; Generic ABS @
####### Start ###print presets ######## ####### Start ###print presets ########
######################################### #########################################
thumbnail = I3ProC_thumbnail.png
[print:*common*] [print:*common*]
# Print presets for common printers # Print presets for common printers
avoid_crossing_perimeters = 0 avoid_crossing_perimeters = 0

View File

@ -1,6 +1,9 @@
min_slic3r_version = 2.8.0-alpha0
1.0.0 Updated for PS2.8.0.
max_slic3r_version = 2.7.9
min_slic3r_version = 2.5.0-alpha0 min_slic3r_version = 2.5.0-alpha0
0.0.4 Improve Proton X profiles, Add Proton XE-750 printer 0.0.4 Improve Proton X profiles, Add Proton XE-750 printer
min_slic3r_version = 2.4.1 min_slic3r_version = 2.3.1-beta
0.0.3 Set default filament profile. 0.0.3 Set default filament profile.
0.0.2 Improved start gcode, changed filename format 0.0.2 Improved start gcode, changed filename format
0.0.1 Initial version 0.0.1 Initial version

View File

@ -1,15 +1,17 @@
# generated by PrusaSlicer 2.1.1+win64 on 2020-02-25 at 01:51:21 UTC # generated by PrusaSlicer 2.1.1+win64 on 2020-02-25 at 01:51:21 UTC
[vendor] [vendor]
repo_id = non-prusa-fff
# Vendor name will be shown by the Config Wizard. # Vendor name will be shown by the Config Wizard.
name = INAT name = INAT
config_version = 0.0.4 config_version = 1.0.0
config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/INAT/ config_update_url = https://preset-repo-api.prusa3d.com/v1/repos/non-prusa-fff/INAT/
### ###
### PRINTER LIST ### PRINTER LIST
### ###
config_url = https://preset-repo-api.prusa3d.com/v1/repos/non-prusa-fff/INAT/
[printer_model:PROTON_X_RAIL] [printer_model:PROTON_X_RAIL]
name = INAT Proton X Rail name = INAT Proton X Rail
variants = 0.4 variants = 0.4
@ -17,6 +19,7 @@ technology = FFF
family = Proton family = Proton
default_materials = PLA @PROTON_X default_materials = PLA @PROTON_X
thumbnail = PROTON_X_RAIL_thumbnail.png
[printer_model:PROTON_X_ROD] [printer_model:PROTON_X_ROD]
name = INAT Proton X Rod name = INAT Proton X Rod
variants = 0.4 variants = 0.4
@ -24,6 +27,7 @@ technology = FFF
family = Proton family = Proton
default_materials = PLA @PROTON_X default_materials = PLA @PROTON_X
thumbnail = PROTON_X_ROD_thumbnail.png
[printer_model:PROTON_XE750] [printer_model:PROTON_XE750]
name = INAT Proton XE-750 name = INAT Proton XE-750
variants = 0.4 variants = 0.4
@ -36,6 +40,7 @@ default_materials = PLA @PROTON_XE750
### COMMON QUALITY DEFINITIONS ### COMMON QUALITY DEFINITIONS
### ###
thumbnail = PROTON_XE750_thumbnail.png
[print:*common*] [print:*common*]
#layers #layers
layer_height = 0.2 layer_height = 0.2
@ -727,4 +732,4 @@ inherits =*common Polymaker PolyMide PA6-GF @INAT*; *start_end_gcode @PROTON_XE7
inherits =*common Devil Design PETG @INAT*; *start_end_gcode @PROTON_XE750* inherits =*common Devil Design PETG @INAT*; *start_end_gcode @PROTON_XE750*
[filament:Filament PM PETG FRJet @PROTON_XE750] [filament:Filament PM PETG FRJet @PROTON_XE750]
inherits =*common Filament PM PETG FRJet @INAT*; *start_end_gcode @PROTON_XE750* inherits =*common Filament PM PETG FRJet @INAT*; *start_end_gcode @PROTON_XE750*

View File

@ -1,2 +1,5 @@
min_slic3r_version = 2.8.0-alpha0
2.0.0 Updated for PS2.8.0.
max_slic3r_version = 2.7.9
min_slic3r_version = 2.5.0-alpha0 min_slic3r_version = 2.5.0-alpha0
1.0.0 Initial Infinity3D bundle 1.0.0 Initial Infinity3D bundle

View File

@ -1,15 +1,17 @@
# Infinity3D profiles # Infinity3D profiles
[vendor] [vendor]
repo_id = non-prusa-fff
# Vendor name will be shown by the Config Wizard. # Vendor name will be shown by the Config Wizard.
name = Infinity3D name = Infinity3D
# Configuration version of this file. Config file will only be installed, if the config_version differs. # Configuration version of this file. Config file will only be installed, if the config_version differs.
# This means, the server may force the Slic3r configuration to be downgraded. # This means, the server may force the Slic3r configuration to be downgraded.
config_version = 1.0.0 config_version = 2.0.0
# Where to get the updates from? # Where to get the updates from?
config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/Infinity3D/ config_update_url = https://preset-repo-api.prusa3d.com/v1/repos/non-prusa-fff/Infinity3D/
# The printer models will be shown by the Configuration Wizard in this order, # The printer models will be shown by the Configuration Wizard in this order,
config_url = https://preset-repo-api.prusa3d.com/v1/repos/non-prusa-fff/Infinity3D/
[printer_model:DEV-200] [printer_model:DEV-200]
name = Infinity3D DEV-200 name = Infinity3D DEV-200
variants = 0.4 variants = 0.4
@ -18,6 +20,7 @@ bed_model = DEV_200_bed.stl
bed_texture = DEV_200_texture.svg bed_texture = DEV_200_texture.svg
default_materials = Generic PLA @Infinity3D; Generic PETG @Infinity3D default_materials = Generic PLA @Infinity3D; Generic PETG @Infinity3D
thumbnail = DEV-200_thumbnail.png
[printer_model:DEV-350] [printer_model:DEV-350]
name = Infinity3D DEV-350 name = Infinity3D DEV-350
variants = 0.4 variants = 0.4
@ -26,6 +29,7 @@ bed_model = DEV_350_bed.stl
bed_texture = DEV_350_texture.svg bed_texture = DEV_350_texture.svg
default_materials = Generic PLA @Infinity3D; Generic PETG @Infinity3D default_materials = Generic PLA @Infinity3D; Generic PETG @Infinity3D
thumbnail = DEV-350_thumbnail.png
[print:*common*] [print:*common*]
avoid_crossing_perimeters = 1 avoid_crossing_perimeters = 1
avoid_crossing_perimeters_max_detour = 0 avoid_crossing_perimeters_max_detour = 0
@ -809,4 +813,4 @@ max_print_height = 235
start_gcode = Start GCode begin\nM140 S[first_layer_bed_temperature] ;Start Warming Bed\nM104 S[first_layer_temperature] ;Preheat\nG28 ;home\nG29 ;Auto Bed-level\nG90 ;absolute positioning\nG1 X-10 Y-10 F3000 ;Move to corner\nM190 S[first_layer_bed_temperature] ;Wait For Bed Temperature\nM109 S[first_layer_temperature] ;Wait for Hotend Temperature\nG92 E0 ;Zero set extruder position\nG1 E3 F200 ;Feed filament to clear nozzle\nG92 E0 ;Zero set extruder position start_gcode = Start GCode begin\nM140 S[first_layer_bed_temperature] ;Start Warming Bed\nM104 S[first_layer_temperature] ;Preheat\nG28 ;home\nG29 ;Auto Bed-level\nG90 ;absolute positioning\nG1 X-10 Y-10 F3000 ;Move to corner\nM190 S[first_layer_bed_temperature] ;Wait For Bed Temperature\nM109 S[first_layer_temperature] ;Wait for Hotend Temperature\nG92 E0 ;Zero set extruder position\nG1 E3 F200 ;Feed filament to clear nozzle\nG92 E0 ;Zero set extruder position
end_gcode = ;End GCode begin\nM140 S0 ;Heated bed heater off\nM104 S0 ;Extruder heater off\nG90 ;absolute positioning\nG92 E0 ;Retract the filament\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z240 E-1 F3000 ;move Z up a bit and retract filament even more\nG1 X0 F3000 ;move X to min endstops, so the head is out of the way\nG1 Y200 F3000 ;so the head is out of the way and Plate is moved forward\nM84 ;stepper off\nM107 ; fan off\nM82 ; absolute extrusion\n;End GCode end end_gcode = ;End GCode begin\nM140 S0 ;Heated bed heater off\nM104 S0 ;Extruder heater off\nG90 ;absolute positioning\nG92 E0 ;Retract the filament\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z240 E-1 F3000 ;move Z up a bit and retract filament even more\nG1 X0 F3000 ;move X to min endstops, so the head is out of the way\nG1 Y200 F3000 ;so the head is out of the way and Plate is moved forward\nM84 ;stepper off\nM107 ; fan off\nM82 ; absolute extrusion\n;End GCode end
default_filament_profile = Generic PLA @Infinity3D default_filament_profile = Generic PLA @Infinity3D
default_print_profile = 0.20mm GOOD @Infinity3D_DEV_200 default_print_profile = 0.20mm GOOD @Infinity3D_DEV_200

View File

@ -1,2 +1,5 @@
min_slic3r_version = 2.8.0-alpha0
2.0.0 Updated for PS2.8.0
max_slic3r_version = 2.7.9
min_slic3r_version = 2.4.1-alpha min_slic3r_version = 2.4.1-alpha
1.0.0 Initial Jubilee bundle 1.0.0 Initial Jubilee bundle

View File

@ -3,15 +3,17 @@
# Based on the profiles from: https://github.com/machineagency/jubilee/tree/main/software/slicer_settings/prusa_slic3r by yvessa # Based on the profiles from: https://github.com/machineagency/jubilee/tree/main/software/slicer_settings/prusa_slic3r by yvessa
[vendor] [vendor]
repo_id = non-prusa-fff
# Vendor name will be shown by the Config Wizard. # Vendor name will be shown by the Config Wizard.
name = Jubilee name = Jubilee
# Configuration version of this file. Config file will only be installed, if the config_version differs. # Configuration version of this file. Config file will only be installed, if the config_version differs.
# This means, the server may force the Slic3r configuration to be downgraded. # This means, the server may force the Slic3r configuration to be downgraded.
config_version = 1.0.0 config_version = 2.0.0
# Where to get the updates from? # Where to get the updates from?
config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/Jubilee/ config_update_url = https://preset-repo-api.prusa3d.com/v1/repos/non-prusa-fff/Jubilee/
# The printer models will be shown by the Configuration Wizard in this order, # The printer models will be shown by the Configuration Wizard in this order,
config_url = https://preset-repo-api.prusa3d.com/v1/repos/non-prusa-fff/Jubilee/
[printer_model:Jubilee] [printer_model:Jubilee]
name = Jubilee name = Jubilee
variants = 0.4; Volcano 0.4 variants = 0.4; Volcano 0.4
@ -20,6 +22,7 @@ bed_model = Jubilee_bed.stl
bed_texture = Jubilee_texture.svg bed_texture = Jubilee_texture.svg
default_materials = Generic PLA @Jubilee; Generic PETG @Jubilee default_materials = Generic PLA @Jubilee; Generic PETG @Jubilee
thumbnail = Jubilee_thumbnail.png
[print:*common*] [print:*common*]
avoid_crossing_perimeters = 0 avoid_crossing_perimeters = 0
bottom_fill_pattern = monotonic bottom_fill_pattern = monotonic
@ -513,4 +516,4 @@ inherits = *common*
printer_model = Jubilee printer_model = Jubilee
printer_variant = Volcano 0.4 printer_variant = Volcano 0.4
printer_notes = Volcano printer_notes = Volcano
default_print_profile = 0.2mm Volcano, aesthetic @Jubilee default_print_profile = 0.2mm Volcano, aesthetic @Jubilee

View File

@ -1,3 +1,6 @@
min_slic3r_version = 2.8.0-alpha0
1.0.0 Updated for PS2.8.0.
max_slic3r_version = 2.7.9
min_slic3r_version = 2.6.0 min_slic3r_version = 2.6.0
0.0.4 Updated Start G-Codes. 0.0.4 Updated Start G-Codes.
0.0.3 Added new printer profile. 0.0.3 Added new printer profile.

View File

@ -5,15 +5,16 @@
######################################## ########################################
[vendor] [vendor]
repo_id = non-prusa-fff
# Vendor name will be shown by the Config Wizard. # Vendor name will be shown by the Config Wizard.
name = LNL3D name = LNL3D
# Configuration version of this file. Config file will only be installed, if the config_version differs. # Configuration version of this file. Config file will only be installed, if the config_version differs.
# This means, the server may force the PrusaSlicer configuration to be downgraded. # This means, the server may force the PrusaSlicer configuration to be downgraded.
config_version = 0.0.4 config_version = 1.0.0
# Where to get the updates from? # Where to get the updates from?
config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/LNL3D/ config_update_url = https://preset-repo-api.prusa3d.com/v1/repos/non-prusa-fff/LNL3D/
######################################## ########################################
########## Printer models ########## ########## Printer models ##########
@ -23,6 +24,7 @@ config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/Prus
# also the first model installed & the first nozzle installed will be activated after install. # also the first model installed & the first nozzle installed will be activated after install.
# Printer model name will be shown by the installation wizard. # Printer model name will be shown by the installation wizard.
config_url = https://preset-repo-api.prusa3d.com/v1/repos/non-prusa-fff/LNL3D/
[printer_model:LNL3D_D3] [printer_model:LNL3D_D3]
name = LNL3D D3 name = LNL3D D3
variants = 0.4; 0.2; 0.6; 0.8 variants = 0.4; 0.2; 0.6; 0.8
@ -32,6 +34,7 @@ bed_model = LNL3D_D3_bed.stl
bed_texture = LNL3D_D3_texture.svg bed_texture = LNL3D_D3_texture.svg
default_materials = Generic PLA @LNL3D; Generic PETG @LNL3D; Generic TPU @LNL3D; default_materials = Generic PLA @LNL3D; Generic PETG @LNL3D; Generic TPU @LNL3D;
thumbnail = LNL3D_D3_thumbnail.png
[printer_model:LNL3D_D3_VULCAN] [printer_model:LNL3D_D3_VULCAN]
name = LNL3D D3 Vulcan name = LNL3D D3 Vulcan
variants = 0.4; 0.2; 0.6; 0.8 variants = 0.4; 0.2; 0.6; 0.8
@ -41,6 +44,7 @@ bed_model = LNL3D_D3_VULCAN_bed.stl
bed_texture = LNL3D_D3_VULCAN_texture.svg bed_texture = LNL3D_D3_VULCAN_texture.svg
default_materials = Generic PLA @LNL3D; Generic PETG @LNL3D; Generic TPU @LNL3D; default_materials = Generic PLA @LNL3D; Generic PETG @LNL3D; Generic TPU @LNL3D;
thumbnail = LNL3D_D3_VULCAN_thumbnail.png
[printer_model:LNL3D_D3_V2] [printer_model:LNL3D_D3_V2]
name = LNL3D D3 V2 name = LNL3D D3 V2
variants = 0.4; 0.2; 0.6; 0.8 variants = 0.4; 0.2; 0.6; 0.8
@ -50,6 +54,7 @@ bed_model = LNL3D_D3_V2_bed.stl
bed_texture = LNL3D_D3_V2_texture.svg bed_texture = LNL3D_D3_V2_texture.svg
default_materials = Generic PLA @LNL3D; Generic PETG @LNL3D; Generic TPU @LNL3D; default_materials = Generic PLA @LNL3D; Generic PETG @LNL3D; Generic TPU @LNL3D;
thumbnail = LNL3D_D3_V2_thumbnail.png
[printer_model:LNL3D_D5] [printer_model:LNL3D_D5]
name = LNL3D D5 name = LNL3D D5
variants = 0.4; 0.2; 0.6; 0.8 variants = 0.4; 0.2; 0.6; 0.8
@ -59,6 +64,7 @@ bed_model = LNL3D_D5_bed.stl
bed_texture = LNL3D_D5_texture.svg bed_texture = LNL3D_D5_texture.svg
default_materials = Generic PLA @LNL3D; Generic PETG @LNL3D; Generic TPU @LNL3D; default_materials = Generic PLA @LNL3D; Generic PETG @LNL3D; Generic TPU @LNL3D;
thumbnail = LNL3D_D5_thumbnail.png
[printer_model:LNL3D_D6] [printer_model:LNL3D_D6]
name = LNL3D D6 name = LNL3D D6
variants = 0.4; 0.2; 0.6; 0.8 variants = 0.4; 0.2; 0.6; 0.8
@ -76,6 +82,7 @@ default_materials = Generic PLA @LNL3D; Generic PETG @LNL3D; Generic TPU @LNL3D;
# not make it into the user interface. # not make it into the user interface.
# Common print presets # Common print presets
thumbnail = LNL3D_D6_thumbnail.png
[print:*common*] [print:*common*]
avoid_crossing_perimeters = 0 avoid_crossing_perimeters = 0
bridge_acceleration = 250 bridge_acceleration = 250
@ -1032,4 +1039,4 @@ inherits = *LNL3D_D6*; *0.4nozzle*
inherits = *LNL3D_D6*; *0.6nozzle* inherits = *LNL3D_D6*; *0.6nozzle*
[printer:LNL3D D6 (0.8 mm nozzle)] [printer:LNL3D D6 (0.8 mm nozzle)]
inherits = *LNL3D_D6*; *0.8nozzle* inherits = *LNL3D_D6*; *0.8nozzle*

View File

@ -1,3 +1,6 @@
min_slic3r_version = 2.8.0-alpha0
1.0.0 Updated for PS2.8.0.
max_slic3r_version = 2.7.9
min_slic3r_version = 2.3.0-beta2 min_slic3r_version = 2.3.0-beta2
0.1.0 General rework. Added new print and filament profiles. 0.1.0 General rework. Added new print and filament profiles.
0.0.2 Removed obsolete host keys 0.0.2 Removed obsolete host keys

View File

@ -2,11 +2,13 @@
# Based on community profiles and original profiles from Cura LulzBot Edition. # Based on community profiles and original profiles from Cura LulzBot Edition.
[vendor] [vendor]
repo_id = non-prusa-fff
# Vendor name will be shown by the Config Wizard. # Vendor name will be shown by the Config Wizard.
name = LulzBot name = LulzBot
config_version = 0.1.0 config_version = 1.0.0
config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/LulzBot/ config_update_url = https://preset-repo-api.prusa3d.com/v1/repos/non-prusa-fff/LulzBot/
config_url = https://preset-repo-api.prusa3d.com/v1/repos/non-prusa-fff/LulzBot/
[printer_model:MINI_AERO] [printer_model:MINI_AERO]
name = Mini Aero name = Mini Aero
variants = 0.5 variants = 0.5
@ -15,6 +17,7 @@ technology = FFF
#bed_texture = mini.svg #bed_texture = mini.svg
default_materials = Generic PLA @lulzbot; Generic PETG @lulzbot; Jessie PLA @lulzbot default_materials = Generic PLA @lulzbot; Generic PETG @lulzbot; Jessie PLA @lulzbot
thumbnail = MINI_AERO_thumbnail.png
[printer_model:TAZ6_AERO] [printer_model:TAZ6_AERO]
name = Taz6 Aero name = Taz6 Aero
variants = 0.5 variants = 0.5
@ -27,6 +30,7 @@ default_materials = Generic PLA @lulzbot; Generic PETG @lulzbot; Jessie PLA @lul
# technology = FFF # technology = FFF
# default_materials = Generic PLA @lulzbot; Generic PETG @lulzbot; Jessie PLA @lulzbot # default_materials = Generic PLA @lulzbot; Generic PETG @lulzbot; Jessie PLA @lulzbot
thumbnail = TAZ6_AERO_thumbnail.png
[print:*common*] [print:*common*]
avoid_crossing_perimeters = 0 avoid_crossing_perimeters = 0
bottom_fill_pattern = monotonic bottom_fill_pattern = monotonic
@ -420,4 +424,4 @@ z_offset = 0
# use_volumetric_e = 0 # use_volumetric_e = 0
# variable_layer_height = 1 # variable_layer_height = 1
# wipe = 1 # wipe = 1
# z_offset = 0 # z_offset = 0

View File

@ -1,2 +1,6 @@
min_slic3r_version = 2.8.0-alpha0
1.0.0 Updated for PS2.8.0
max_slic3r_version = 2.7.9
min_slic3r_version = 2.6.0-alpha1 min_slic3r_version = 2.6.0-alpha1
0.1.1 Adjusted M2, M2Dual and M3 starting scripts
0.1.0 Initial version 0.1.0 Initial version

File diff suppressed because it is too large Load Diff

View File

@ -1,2 +1,5 @@
min_slic3r_version = 2.8.0-alpha0
1.0.0 Updated for PS2.8.0
min_slic3r_version = 2.7.9
min_slic3r_version = 2.6.0-alpha1 min_slic3r_version = 2.6.0-alpha1
0.1.0 Initial version 0.1.0 Initial version

View File

@ -1,11 +1,13 @@
# Print profiles for Papapiu printers. # Print profiles for Papapiu printers.
[vendor] [vendor]
repo_id = non-prusa-fff
name = Papapiu name = Papapiu
config_version = 0.1.0 config_version = 1.0.0
config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/PapapiuLab/ config_update_url = https://preset-repo-api.prusa3d.com/v1/repos/non-prusa-fff/PapapiuLab/
config_url = https://preset-repo-api.prusa3d.com/v1/repos/non-prusa-fff/PapapiuLab/
[printer_model:Papapiu_N1S] [printer_model:Papapiu_N1S]
name = Papapiu N1S name = Papapiu N1S
variants = 0.4 variants = 0.4

View File

@ -1,2 +1,5 @@
min_slic3r_version = 2.8.0-alpha0
1.0.0 Updated for PS2.8.0.
max_slic3r_version = 2.7.9
min_slic3r_version = 2.6.0-alpha1 min_slic3r_version = 2.6.0-alpha1
0.0.1 Initial version 0.0.1 Initial version

View File

@ -2,19 +2,21 @@
# Created from scratch from default FFF # Created from scratch from default FFF
[vendor] [vendor]
repo_id = non-prusa-fff
# Vendor name will be shown by the Config Wizard. # Vendor name will be shown by the Config Wizard.
name = Print4Taste name = Print4Taste
# Configuration version of this file. Config file will only be installed, if the config_version differs. # Configuration version of this file. Config file will only be installed, if the config_version differs.
# This means, the server may force the PrusaSlicer configuration to be downgraded. # This means, the server may force the PrusaSlicer configuration to be downgraded.
config_version = 0.0.1 config_version = 1.0.0
# Where to get the updates from? # Where to get the updates from?
config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/Print4Taste/ config_update_url = https://preset-repo-api.prusa3d.com/v1/repos/non-prusa-fff/Print4Taste/
# The printer models will be shown by the Configuration Wizard in this order, # The printer models will be shown by the Configuration Wizard in this order,
# also the first model installed & the first nozzle installed will be activated after install. # also the first model installed & the first nozzle installed will be activated after install.
# Printer model name will be shown by the installation wizard. # Printer model name will be shown by the installation wizard.
config_url = https://preset-repo-api.prusa3d.com/v1/repos/non-prusa-fff/Print4Taste/
[printer_model:MC2.0] [printer_model:MC2.0]
name = mycusini 2.0 name = mycusini 2.0
variants = 1.0 variants = 1.0
@ -24,6 +26,7 @@ bed_model = MC2.0_bed.stl
bed_texture = MC2.0_texture.svg bed_texture = MC2.0_texture.svg
default_materials = mycusini 3D Choco @MC2.0 default_materials = mycusini 3D Choco @MC2.0
thumbnail = MC2.0_thumbnail.png
[print:*common_MC2.0*] [print:*common_MC2.0*]
bottom_solid_layers = 2 bottom_solid_layers = 2
bridge_speed = 30 bridge_speed = 30

View File

@ -1,7 +1,11 @@
min_slic3r_version = 2.8.0-alpha0
2.0.0-alpha1 Updated FW version notification. Added ROSA3D filaments. Updated print profiles.
2.0.0-alpha0 Initial bundle for PS2.8.0-alpha.
max_slic3r_version = 2.7.9
min_slic3r_version = 2.7.5-rc min_slic3r_version = 2.7.5-rc
1.14.0 Added new settings for SLA material profiles. 1.14.0 Added new settings for SLA material profiles.
min_slic3r_version = 2.7.3-beta1 min_slic3r_version = 2.7.3-beta1
1.13.4 Updated FW version notification (6.0.1). Added ROSA3D filaments. Updated print profiles for 0.6 nozzle. Updated perimeter speeds in "0.10mm FAST DETAIL" profile (MK4/XL). Slightly increased nozzle temperature for Generic PETG/Prusa PETG/Prusament PETG (0.6n). 1.13.4 Updated FW version notification. Added ROSA3D filaments. Updated print profiles.
1.13.3 Updated FW version notification. 1.13.3 Updated FW version notification.
1.13.2 Added material profiles for Prusament Resin Flex Anatomic Red and Prusament Resin Flex Gingiva Mask. 1.13.2 Added material profiles for Prusament Resin Flex Anatomic Red and Prusament Resin Flex Gingiva Mask.
1.13.1 Added material profile for Prusament Resin Model Transparent Clear. Enabled stealth mode support for MINI, XL, MK3.5, MK3.9, MK4 (this mode will be available in FW 6.0.0). 1.13.1 Added material profile for Prusament Resin Model Transparent Clear. Enabled stealth mode support for MINI, XL, MK3.5, MK3.9, MK4 (this mode will be available in FW 6.0.0).

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,5 @@
min_slic3r_version = 2.8.0-alpha0
1.0.0-alpha0 Initial bundle for PS2.8.0-alpha.
max_slic3r_version = 2.7.9
min_slic3r_version = 2.6.0
0.0.1 Initial version

File diff suppressed because it is too large Load Diff

View File

Before

Width:  |  Height:  |  Size: 84 KiB

After

Width:  |  Height:  |  Size: 84 KiB

View File

Before

Width:  |  Height:  |  Size: 77 KiB

After

Width:  |  Height:  |  Size: 77 KiB

View File

Before

Width:  |  Height:  |  Size: 9.2 KiB

After

Width:  |  Height:  |  Size: 9.2 KiB

View File

@ -1,54 +1,54 @@
<svg xmlns="http://www.w3.org/2000/svg" width="127mm" height="80mm" viewBox="0 0 360 226.8"> <svg xmlns="http://www.w3.org/2000/svg" width="127mm" height="80mm" viewBox="0 0 360 226.8">
<rect width="360" height="226.77" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 1.41732283464567px"/> <rect width="360" height="226.77" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 1.41732283464567px"/>
<path d="M210.4,162.2h6.2a5.3,5.3,0,0,1,2.5.4,3.6,3.6,0,0,1,1.4,1.1,2.7,2.7,0,0,1,.7,1.4,7.7,7.7,0,0,1,.2,1.5,7.8,7.8,0,0,1-.2,1.4,2.7,2.7,0,0,1-.7,1.4,4.9,4.9,0,0,1-1.4,1.1,6.9,6.9,0,0,1-2.5.4h-3.7v5.4h-2.5Zm2.5,6.6h4.4l.8-.4.6-.7a3.1,3.1,0,0,0,0-2.2,1.8,1.8,0,0,0-.5-.7l-.8-.4h-4.6Z" style="fill: #fff"/> <path d="M210.4,162.2h6.2a5.3,5.3,0,0,1,2.5.4,3.6,3.6,0,0,1,1.4,1.1,2.7,2.7,0,0,1,.7,1.4,7.7,7.7,0,0,1,.2,1.5,7.8,7.8,0,0,1-.2,1.4,2.7,2.7,0,0,1-.7,1.4,4.9,4.9,0,0,1-1.4,1.1,6.9,6.9,0,0,1-2.5.4h-3.7v5.4h-2.5Zm2.5,6.6h4.4l.8-.4.6-.7a3.1,3.1,0,0,0,0-2.2,1.8,1.8,0,0,0-.5-.7l-.8-.4h-4.6Z" style="fill: #fff"/>
<path d="M223.6,162.2h6.7a4.7,4.7,0,0,1,3.4,1,3.6,3.6,0,0,1,1.2,2.8,4.5,4.5,0,0,1-.3,1.6,4.1,4.1,0,0,1-.7,1.1,2.1,2.1,0,0,1-.8.6l-.6.3h0l.7.2a1.2,1.2,0,0,1,.7.5,1.9,1.9,0,0,1,.5.9,3,3,0,0,1,.2,1.3,17.9,17.9,0,0,0,.2,2.3,3.5,3.5,0,0,0,.6,1.4h-2.7a2.9,2.9,0,0,1-.3-1v-1.1a9.7,9.7,0,0,0-.1-1.7,4.9,4.9,0,0,0-.4-1.1l-.9-.7-1.4-.2H226v5.8h-2.4Zm2.4,6.4h4.1a3,3,0,0,0,1.8-.6,2.5,2.5,0,0,0,.6-1.7,4.3,4.3,0,0,0-.2-1.1,1.8,1.8,0,0,0-.5-.7l-.8-.3h-5Z" style="fill: #fff"/> <path d="M223.6,162.2h6.7a4.7,4.7,0,0,1,3.4,1,3.6,3.6,0,0,1,1.2,2.8,4.5,4.5,0,0,1-.3,1.6,4.1,4.1,0,0,1-.7,1.1,2.1,2.1,0,0,1-.8.6l-.6.3h0l.7.2a1.2,1.2,0,0,1,.7.5,1.9,1.9,0,0,1,.5.9,3,3,0,0,1,.2,1.3,17.9,17.9,0,0,0,.2,2.3,3.5,3.5,0,0,0,.6,1.4h-2.7a2.9,2.9,0,0,1-.3-1v-1.1a9.7,9.7,0,0,0-.1-1.7,4.9,4.9,0,0,0-.4-1.1l-.9-.7-1.4-.2H226v5.8h-2.4Zm2.4,6.4h4.1a3,3,0,0,0,1.8-.6,2.5,2.5,0,0,0,.6-1.7,4.3,4.3,0,0,0-.2-1.1,1.8,1.8,0,0,0-.5-.7l-.8-.3h-5Z" style="fill: #fff"/>
<path d="M237.3,162.2h2.5v8.2c0,.4.1.9.1,1.4a2.8,2.8,0,0,0,.4,1.3,2.4,2.4,0,0,0,1,1,3.9,3.9,0,0,0,1.8.4,4.1,4.1,0,0,0,1.9-.4,2.4,2.4,0,0,0,1-1,2.8,2.8,0,0,0,.4-1.3c0-.5.1-1,.1-1.4v-8.2h2.4v9a4.5,4.5,0,0,1-.4,2.3,3,3,0,0,1-1.2,1.7,4.2,4.2,0,0,1-1.8,1.1,9.4,9.4,0,0,1-4.7,0,7.2,7.2,0,0,1-1.9-1.1,5.6,5.6,0,0,1-1.1-1.7,5.9,5.9,0,0,1-.4-2.3Z" style="fill: #fff"/> <path d="M237.3,162.2h2.5v8.2c0,.4.1.9.1,1.4a2.8,2.8,0,0,0,.4,1.3,2.4,2.4,0,0,0,1,1,3.9,3.9,0,0,0,1.8.4,4.1,4.1,0,0,0,1.9-.4,2.4,2.4,0,0,0,1-1,2.8,2.8,0,0,0,.4-1.3c0-.5.1-1,.1-1.4v-8.2h2.4v9a4.5,4.5,0,0,1-.4,2.3,3,3,0,0,1-1.2,1.7,4.2,4.2,0,0,1-1.8,1.1,9.4,9.4,0,0,1-4.7,0,7.2,7.2,0,0,1-1.9-1.1,5.6,5.6,0,0,1-1.1-1.7,5.9,5.9,0,0,1-.4-2.3Z" style="fill: #fff"/>
<path d="M253.4,171.6a2,2,0,0,0,.2,1.3,3.9,3.9,0,0,0,.8,1l1.1.5,1.4.2,1.4-.2.9-.5a1.8,1.8,0,0,0,.5-.7,1.9,1.9,0,0,0,.2-.8,1.5,1.5,0,0,0-.4-1.1,1.6,1.6,0,0,0-.8-.6l-1.7-.5-2.5-.7-1.5-.6a3.9,3.9,0,0,1-1-.8,4.7,4.7,0,0,1-.5-1,4.9,4.9,0,0,1-.1-1.2,3.9,3.9,0,0,1,.4-1.8,3.7,3.7,0,0,1,1.2-1.3l1.7-.8,1.9-.2a6.4,6.4,0,0,1,2,.3,9.8,9.8,0,0,1,1.8.8,4.4,4.4,0,0,1,1.6,3.4h-2.5a2.2,2.2,0,0,0-.9-1.9,4.2,4.2,0,0,0-2.1-.6h-.9l-.9.3-.6.5a1.8,1.8,0,0,0,.2,2.1,3.4,3.4,0,0,0,1.2.6l.6.2,1.3.3,1.3.4.9.2,1.2.6.9.9a3.1,3.1,0,0,1,.5,1,4.5,4.5,0,0,1,.1,1.1,3.9,3.9,0,0,1-.4,2.1,5.3,5.3,0,0,1-1.3,1.3,4.8,4.8,0,0,1-1.8.8l-2.1.3a8.3,8.3,0,0,1-2.2-.3,6.6,6.6,0,0,1-1.9-.9,6.1,6.1,0,0,1-1.2-1.6,5.9,5.9,0,0,1-.5-2.2Z" style="fill: #fff"/> <path d="M253.4,171.6a2,2,0,0,0,.2,1.3,3.9,3.9,0,0,0,.8,1l1.1.5,1.4.2,1.4-.2.9-.5a1.8,1.8,0,0,0,.5-.7,1.9,1.9,0,0,0,.2-.8,1.5,1.5,0,0,0-.4-1.1,1.6,1.6,0,0,0-.8-.6l-1.7-.5-2.5-.7-1.5-.6a3.9,3.9,0,0,1-1-.8,4.7,4.7,0,0,1-.5-1,4.9,4.9,0,0,1-.1-1.2,3.9,3.9,0,0,1,.4-1.8,3.7,3.7,0,0,1,1.2-1.3l1.7-.8,1.9-.2a6.4,6.4,0,0,1,2,.3,9.8,9.8,0,0,1,1.8.8,4.4,4.4,0,0,1,1.6,3.4h-2.5a2.2,2.2,0,0,0-.9-1.9,4.2,4.2,0,0,0-2.1-.6h-.9l-.9.3-.6.5a1.8,1.8,0,0,0,.2,2.1,3.4,3.4,0,0,0,1.2.6l.6.2,1.3.3,1.3.4.9.2,1.2.6.9.9a3.1,3.1,0,0,1,.5,1,4.5,4.5,0,0,1,.1,1.1,3.9,3.9,0,0,1-.4,2.1,5.3,5.3,0,0,1-1.3,1.3,4.8,4.8,0,0,1-1.8.8l-2.1.3a8.3,8.3,0,0,1-2.2-.3,6.6,6.6,0,0,1-1.9-.9,6.1,6.1,0,0,1-1.2-1.6,5.9,5.9,0,0,1-.5-2.2Z" style="fill: #fff"/>
<path d="M268.3,162.2h2.6l5.5,14.1h-2.7l-1.3-3.8h-5.6l-1.4,3.8h-2.5Zm-.9,8.4h4.3l-2.1-6h0Z" style="fill: #fff"/> <path d="M268.3,162.2h2.6l5.5,14.1h-2.7l-1.3-3.8h-5.6l-1.4,3.8h-2.5Zm-.9,8.4h4.3l-2.1-6h0Z" style="fill: #fff"/>
<path d="M284.8,171.6a3.1,3.1,0,0,0,.3,1.3,2.5,2.5,0,0,0,.8,1l1.1.5,1.4.2,1.4-.2.9-.5a1.8,1.8,0,0,0,.5-.7,1.9,1.9,0,0,0,.2-.8,2,2,0,0,0-.3-1.1,2.1,2.1,0,0,0-.8-.6l-1.8-.5-2.5-.7-1.5-.6a3.4,3.4,0,0,1-.9-.8,2.4,2.4,0,0,1-.5-1,5,5,0,0,1-.2-1.2,4.1,4.1,0,0,1,.5-1.8,4.7,4.7,0,0,1,1.1-1.3l1.7-.8,1.9-.2,2.1.3a4.4,4.4,0,0,1,2.9,2.2,4.8,4.8,0,0,1,.4,2H291a2.2,2.2,0,0,0-.9-1.9,3.9,3.9,0,0,0-2.1-.6h-.9l-.8.3a1.3,1.3,0,0,0-.7.6,2,2,0,0,0-.2.9,1.6,1.6,0,0,0,.5,1.1,2.3,2.3,0,0,0,1.2.6l.6.2,1.2.3,1.3.3.9.3a2.3,2.3,0,0,1,1.2.6,2,2,0,0,1,.9.9,3.1,3.1,0,0,1,.5,1,3.6,3.6,0,0,1,.2,1.1,4.6,4.6,0,0,1-.5,2,3.5,3.5,0,0,1-1.3,1.4,4.9,4.9,0,0,1-1.8.8l-2,.2a7.8,7.8,0,0,1-2.2-.3,4.7,4.7,0,0,1-3.2-2.5,5.1,5.1,0,0,1-.5-2.2Z" style="fill: #fff"/> <path d="M284.8,171.6a3.1,3.1,0,0,0,.3,1.3,2.5,2.5,0,0,0,.8,1l1.1.5,1.4.2,1.4-.2.9-.5a1.8,1.8,0,0,0,.5-.7,1.9,1.9,0,0,0,.2-.8,2,2,0,0,0-.3-1.1,2.1,2.1,0,0,0-.8-.6l-1.8-.5-2.5-.7-1.5-.6a3.4,3.4,0,0,1-.9-.8,2.4,2.4,0,0,1-.5-1,5,5,0,0,1-.2-1.2,4.1,4.1,0,0,1,.5-1.8,4.7,4.7,0,0,1,1.1-1.3l1.7-.8,1.9-.2,2.1.3a4.4,4.4,0,0,1,2.9,2.2,4.8,4.8,0,0,1,.4,2H291a2.2,2.2,0,0,0-.9-1.9,3.9,3.9,0,0,0-2.1-.6h-.9l-.8.3a1.3,1.3,0,0,0-.7.6,2,2,0,0,0-.2.9,1.6,1.6,0,0,0,.5,1.1,2.3,2.3,0,0,0,1.2.6l.6.2,1.2.3,1.3.3.9.3a2.3,2.3,0,0,1,1.2.6,2,2,0,0,1,.9.9,3.1,3.1,0,0,1,.5,1,3.6,3.6,0,0,1,.2,1.1,4.6,4.6,0,0,1-.5,2,3.5,3.5,0,0,1-1.3,1.4,4.9,4.9,0,0,1-1.8.8l-2,.2a7.8,7.8,0,0,1-2.2-.3,4.7,4.7,0,0,1-3.2-2.5,5.1,5.1,0,0,1-.5-2.2Z" style="fill: #fff"/>
<path d="M296,162.2h2.5v11.9h7.1v2.2H296Z" style="fill: #fff"/> <path d="M296,162.2h2.5v11.9h7.1v2.2H296Z" style="fill: #fff"/>
<path d="M306.9,164.7h1.4l1.2-.4.9-.7a2.2,2.2,0,0,0,.5-1.1h1.8v13.9h-2.4v-9.8h-3.4Z" style="fill: #fff"/> <path d="M306.9,164.7h1.4l1.2-.4.9-.7a2.2,2.2,0,0,0,.5-1.1h1.8v13.9h-2.4v-9.8h-3.4Z" style="fill: #fff"/>
<path d="M214.8,149.6a4.4,4.4,0,0,1,3.5,1.5,5.6,5.6,0,0,1,.9,1.7,6.4,6.4,0,0,1,.3,2,7.5,7.5,0,0,1-.3,2,5.1,5.1,0,0,1-.9,1.6,4.8,4.8,0,0,1-1.5,1.1,5.3,5.3,0,0,1-2,.5,4.6,4.6,0,0,1-2-.5,3.3,3.3,0,0,1-1.5-1.1,5.4,5.4,0,0,1-1-1.6,7.5,7.5,0,0,1-.3-2,6.4,6.4,0,0,1,.3-2,5.9,5.9,0,0,1,1-1.7,4.1,4.1,0,0,1,3.5-1.5Zm0,1.4a3.2,3.2,0,0,0-1.4.3,2,2,0,0,0-.9.9,2.3,2.3,0,0,0-.6,1.2,6.1,6.1,0,0,0-.1,1.4,7.1,7.1,0,0,0,.1,1.4,3.4,3.4,0,0,0,.6,1.2,2.4,2.4,0,0,0,.9.8,2.2,2.2,0,0,0,1.4.3,2.1,2.1,0,0,0,1.3-.3,3.9,3.9,0,0,0,1-.8,6.1,6.1,0,0,0,.5-1.2,7.8,7.8,0,0,0,.2-1.4,5.9,5.9,0,0,0-.2-1.4,3.3,3.3,0,0,0-.5-1.2,2.8,2.8,0,0,0-1-.9A3.1,3.1,0,0,0,214.8,151Z" style="fill: #fff"/> <path d="M214.8,149.6a4.4,4.4,0,0,1,3.5,1.5,5.6,5.6,0,0,1,.9,1.7,6.4,6.4,0,0,1,.3,2,7.5,7.5,0,0,1-.3,2,5.1,5.1,0,0,1-.9,1.6,4.8,4.8,0,0,1-1.5,1.1,5.3,5.3,0,0,1-2,.5,4.6,4.6,0,0,1-2-.5,3.3,3.3,0,0,1-1.5-1.1,5.4,5.4,0,0,1-1-1.6,7.5,7.5,0,0,1-.3-2,6.4,6.4,0,0,1,.3-2,5.9,5.9,0,0,1,1-1.7,4.1,4.1,0,0,1,3.5-1.5Zm0,1.4a3.2,3.2,0,0,0-1.4.3,2,2,0,0,0-.9.9,2.3,2.3,0,0,0-.6,1.2,6.1,6.1,0,0,0-.1,1.4,7.1,7.1,0,0,0,.1,1.4,3.4,3.4,0,0,0,.6,1.2,2.4,2.4,0,0,0,.9.8,2.2,2.2,0,0,0,1.4.3,2.1,2.1,0,0,0,1.3-.3,3.9,3.9,0,0,0,1-.8,6.1,6.1,0,0,0,.5-1.2,7.8,7.8,0,0,0,.2-1.4,5.9,5.9,0,0,0-.2-1.4,3.3,3.3,0,0,0-.5-1.2,2.8,2.8,0,0,0-1-.9A3.1,3.1,0,0,0,214.8,151Z" style="fill: #fff"/>
<path d="M221.1,149.8h4.7a3.7,3.7,0,0,1,2.5.7,2.2,2.2,0,0,1,.8,2,4.3,4.3,0,0,1-.2,1.1,3.5,3.5,0,0,1-.5.8l-.5.4h-.4l.5.2.4.3a1.6,1.6,0,0,1,.4.7,1.4,1.4,0,0,1,.1.9,7.8,7.8,0,0,0,.2,1.6,1.8,1.8,0,0,0,.4,1h-1.9a1.4,1.4,0,0,1-.2-.7v-.7a4.9,4.9,0,0,0-.1-1.2,1.1,1.1,0,0,0-.3-.8,1,1,0,0,0-.6-.5h-3.6v4h-1.7Zm1.7,4.5h2.9a1.7,1.7,0,0,0,1.2-.4,1.5,1.5,0,0,0,.5-1.2,2.4,2.4,0,0,0-.2-.8c0-.2-.2-.3-.3-.5l-.6-.2h-3.5Z" style="fill: #fff"/> <path d="M221.1,149.8h4.7a3.7,3.7,0,0,1,2.5.7,2.2,2.2,0,0,1,.8,2,4.3,4.3,0,0,1-.2,1.1,3.5,3.5,0,0,1-.5.8l-.5.4h-.4l.5.2.4.3a1.6,1.6,0,0,1,.4.7,1.4,1.4,0,0,1,.1.9,7.8,7.8,0,0,0,.2,1.6,1.8,1.8,0,0,0,.4,1h-1.9a1.4,1.4,0,0,1-.2-.7v-.7a4.9,4.9,0,0,0-.1-1.2,1.1,1.1,0,0,0-.3-.8,1,1,0,0,0-.6-.5h-3.6v4h-1.7Zm1.7,4.5h2.9a1.7,1.7,0,0,0,1.2-.4,1.5,1.5,0,0,0,.5-1.2,2.4,2.4,0,0,0-.2-.8c0-.2-.2-.3-.3-.5l-.6-.2h-3.5Z" style="fill: #fff"/>
<path d="M230.9,149.8h1.8v9.9h-1.8Z" style="fill: #fff"/> <path d="M230.9,149.8h1.8v9.9h-1.8Z" style="fill: #fff"/>
<path d="M243.4,159.7h-1.1l-.2-1.1-1.4,1.1a4.5,4.5,0,0,1-1.6.3,4.5,4.5,0,0,1-2-.4,4.7,4.7,0,0,1-2.5-2.8,6.9,6.9,0,0,1-.3-2,6.4,6.4,0,0,1,.3-2,4.7,4.7,0,0,1,2.5-2.8,4.5,4.5,0,0,1,2-.4l1.5.2,1.3.7a2.2,2.2,0,0,1,.9,1,3,3,0,0,1,.5,1.5h-1.7a1.6,1.6,0,0,0-.3-.9l-.5-.6-.8-.4h-.9a3.2,3.2,0,0,0-1.4.3,2,2,0,0,0-.9.9,3.4,3.4,0,0,0-.6,1.2,9.9,9.9,0,0,0,0,2.8,3.4,3.4,0,0,0,.6,1.2,2,2,0,0,0,.9.9,3.2,3.2,0,0,0,1.4.3l1.2-.2.8-.5a4.7,4.7,0,0,0,.6-.9,4.1,4.1,0,0,0,.1-1.1h-2.6v-1.4h4.2Z" style="fill: #fff"/> <path d="M243.4,159.7h-1.1l-.2-1.1-1.4,1.1a4.5,4.5,0,0,1-1.6.3,4.5,4.5,0,0,1-2-.4,4.7,4.7,0,0,1-2.5-2.8,6.9,6.9,0,0,1-.3-2,6.4,6.4,0,0,1,.3-2,4.7,4.7,0,0,1,2.5-2.8,4.5,4.5,0,0,1,2-.4l1.5.2,1.3.7a2.2,2.2,0,0,1,.9,1,3,3,0,0,1,.5,1.5h-1.7a1.6,1.6,0,0,0-.3-.9l-.5-.6-.8-.4h-.9a3.2,3.2,0,0,0-1.4.3,2,2,0,0,0-.9.9,3.4,3.4,0,0,0-.6,1.2,9.9,9.9,0,0,0,0,2.8,3.4,3.4,0,0,0,.6,1.2,2,2,0,0,0,.9.9,3.2,3.2,0,0,0,1.4.3l1.2-.2.8-.5a4.7,4.7,0,0,0,.6-.9,4.1,4.1,0,0,0,.1-1.1h-2.6v-1.4h4.2Z" style="fill: #fff"/>
<path d="M245.3,149.8H247v9.9h-1.7Z" style="fill: #fff"/> <path d="M245.3,149.8H247v9.9h-1.7Z" style="fill: #fff"/>
<path d="M249.1,149.8H251l4.4,7.3h0v-7.3h1.7v9.9h-1.9l-4.4-7.3h0v7.3h-1.7Z" style="fill: #fff"/> <path d="M249.1,149.8H251l4.4,7.3h0v-7.3h1.7v9.9h-1.9l-4.4-7.3h0v7.3h-1.7Z" style="fill: #fff"/>
<path d="M261.8,149.8h1.9l3.8,9.9h-1.9l-.9-2.6h-4l-.9,2.6H258Zm-.6,6h3.1l-1.5-4.3h0Z" style="fill: #fff"/> <path d="M261.8,149.8h1.9l3.8,9.9h-1.9l-.9-2.6h-4l-.9,2.6H258Zm-.6,6h3.1l-1.5-4.3h0Z" style="fill: #fff"/>
<path d="M268.4,149.8h1.8v8.4h5v1.5h-6.8Z" style="fill: #fff"/> <path d="M268.4,149.8h1.8v8.4h5v1.5h-6.8Z" style="fill: #fff"/>
<path d="M317.2,171.5a2.9,2.9,0,0,0,.3,1.4,3.6,3.6,0,0,0,.7,1l1.2.5,1.4.2,1.4-.2a1.9,1.9,0,0,0,.9-.5,1.8,1.8,0,0,0,.5-.7,1.9,1.9,0,0,0,.2-.8,1.6,1.6,0,0,0-.4-1.2l-.8-.5-1.7-.5-2.5-.7a5.2,5.2,0,0,1-1.5-.6,4.5,4.5,0,0,1-1-.9,3.1,3.1,0,0,1-.5-1,3.7,3.7,0,0,1-.1-1.1,3.4,3.4,0,0,1,.4-1.8,3,3,0,0,1,1.2-1.3,4.8,4.8,0,0,1,1.6-.8,6.5,6.5,0,0,1,1.9-.2l2.1.2a4.6,4.6,0,0,1,1.7.9,5.3,5.3,0,0,1,1.2,1.4,4.2,4.2,0,0,1,.5,2h-2.5a2.6,2.6,0,0,0-1-2,4.1,4.1,0,0,0-2.1-.5h-.9a1.3,1.3,0,0,0-.8.3,1.5,1.5,0,0,0-.6.5,1.6,1.6,0,0,0-.3.9,1.7,1.7,0,0,0,.5,1.2,3.5,3.5,0,0,0,1.2.7h.6l1.3.3,1.3.4.9.2,1.2.6a7.6,7.6,0,0,1,.9.9l.5,1a5.2,5.2,0,0,1,.2,1.1,4.6,4.6,0,0,1-.5,2.1,8.6,8.6,0,0,1-1.3,1.4,4.8,4.8,0,0,1-1.8.7l-2.1.3a9.1,9.1,0,0,1-2.3-.3,4.8,4.8,0,0,1-3.1-2.5,5.2,5.2,0,0,1-.5-2.3Z" style="fill: #fff"/> <path d="M317.2,171.5a2.9,2.9,0,0,0,.3,1.4,3.6,3.6,0,0,0,.7,1l1.2.5,1.4.2,1.4-.2a1.9,1.9,0,0,0,.9-.5,1.8,1.8,0,0,0,.5-.7,1.9,1.9,0,0,0,.2-.8,1.6,1.6,0,0,0-.4-1.2l-.8-.5-1.7-.5-2.5-.7a5.2,5.2,0,0,1-1.5-.6,4.5,4.5,0,0,1-1-.9,3.1,3.1,0,0,1-.5-1,3.7,3.7,0,0,1-.1-1.1,3.4,3.4,0,0,1,.4-1.8,3,3,0,0,1,1.2-1.3,4.8,4.8,0,0,1,1.6-.8,6.5,6.5,0,0,1,1.9-.2l2.1.2a4.6,4.6,0,0,1,1.7.9,5.3,5.3,0,0,1,1.2,1.4,4.2,4.2,0,0,1,.5,2h-2.5a2.6,2.6,0,0,0-1-2,4.1,4.1,0,0,0-2.1-.5h-.9a1.3,1.3,0,0,0-.8.3,1.5,1.5,0,0,0-.6.5,1.6,1.6,0,0,0-.3.9,1.7,1.7,0,0,0,.5,1.2,3.5,3.5,0,0,0,1.2.7h.6l1.3.3,1.3.4.9.2,1.2.6a7.6,7.6,0,0,1,.9.9l.5,1a5.2,5.2,0,0,1,.2,1.1,4.6,4.6,0,0,1-.5,2.1,8.6,8.6,0,0,1-1.3,1.4,4.8,4.8,0,0,1-1.8.7l-2.1.3a9.1,9.1,0,0,1-2.3-.3,4.8,4.8,0,0,1-3.1-2.5,5.2,5.2,0,0,1-.5-2.3Z" style="fill: #fff"/>
<g> <g>
<path d="M211,186.2a3.7,3.7,0,0,0,.2,1.2,2.3,2.3,0,0,0,.7.7,1.9,1.9,0,0,0,.9.4h1.9a1.1,1.1,0,0,0,.8-.3.9.9,0,0,0,.6-.6,1.1,1.1,0,0,0,.3-.8,1.4,1.4,0,0,0-.2-.7l-.5-.4a.9.9,0,0,0-.6-.3l-.6-.2-2-.5-.8-.3-.6-.4a1.5,1.5,0,0,1-.5-.6,2.2,2.2,0,0,1-.1-.9,2.5,2.5,0,0,1,.1-.8,1.8,1.8,0,0,1,.5-.8,2.2,2.2,0,0,1,.9-.7l1.6-.2h1.2a3.9,3.9,0,0,1,1.1.6,1.6,1.6,0,0,1,.7.9,2.1,2.1,0,0,1,.3,1.2H216a2,2,0,0,0-.2-.9,1.8,1.8,0,0,0-.5-.7l-.8-.4h-1.8l-.7.3a1,1,0,0,0-.5.6,1.9,1.9,0,0,0-.2.8,4.3,4.3,0,0,0,.1.5l.3.4.5.3.5.2,2.2.5.9.3a1.8,1.8,0,0,1,.7.5l.5.6a1.6,1.6,0,0,1,.2,1v.4c0,.2-.1.3-.2.5s-.2.4-.3.6l-.6.5-1,.4-1.3.2-1.5-.2a2.3,2.3,0,0,1-1.2-.6,2.6,2.6,0,0,1-.7-1,2.1,2.1,0,0,1-.2-1.4Z" style="fill: #fff"/> <path d="M211,186.2a3.7,3.7,0,0,0,.2,1.2,2.3,2.3,0,0,0,.7.7,1.9,1.9,0,0,0,.9.4h1.9a1.1,1.1,0,0,0,.8-.3.9.9,0,0,0,.6-.6,1.1,1.1,0,0,0,.3-.8,1.4,1.4,0,0,0-.2-.7l-.5-.4a.9.9,0,0,0-.6-.3l-.6-.2-2-.5-.8-.3-.6-.4a1.5,1.5,0,0,1-.5-.6,2.2,2.2,0,0,1-.1-.9,2.5,2.5,0,0,1,.1-.8,1.8,1.8,0,0,1,.5-.8,2.2,2.2,0,0,1,.9-.7l1.6-.2h1.2a3.9,3.9,0,0,1,1.1.6,1.6,1.6,0,0,1,.7.9,2.1,2.1,0,0,1,.3,1.2H216a2,2,0,0,0-.2-.9,1.8,1.8,0,0,0-.5-.7l-.8-.4h-1.8l-.7.3a1,1,0,0,0-.5.6,1.9,1.9,0,0,0-.2.8,4.3,4.3,0,0,0,.1.5l.3.4.5.3.5.2,2.2.5.9.3a1.8,1.8,0,0,1,.7.5l.5.6a1.6,1.6,0,0,1,.2,1v.4c0,.2-.1.3-.2.5s-.2.4-.3.6l-.6.5-1,.4-1.3.2-1.5-.2a2.3,2.3,0,0,1-1.2-.6,2.6,2.6,0,0,1-.7-1,2.1,2.1,0,0,1-.2-1.4Z" style="fill: #fff"/>
<path d="M218.6,180.2h5.1l.8.5a2.8,2.8,0,0,1,.6.9,3,3,0,0,1,.2,1,3.6,3.6,0,0,1-.2,1.1,2.4,2.4,0,0,1-.6.8,1.4,1.4,0,0,1-.8.5,2,2,0,0,1-1.1.2h-3.2v3.9h-.8Zm.8,4.4h3a2,2,0,0,0,1.4-.5,1.6,1.6,0,0,0,.6-1.4,1.8,1.8,0,0,0-.6-1.4,2,2,0,0,0-1.4-.4h-3Z" style="fill: #fff"/> <path d="M218.6,180.2h5.1l.8.5a2.8,2.8,0,0,1,.6.9,3,3,0,0,1,.2,1,3.6,3.6,0,0,1-.2,1.1,2.4,2.4,0,0,1-.6.8,1.4,1.4,0,0,1-.8.5,2,2,0,0,1-1.1.2h-3.2v3.9h-.8Zm.8,4.4h3a2,2,0,0,0,1.4-.5,1.6,1.6,0,0,0,.6-1.4,1.8,1.8,0,0,0-.6-1.4,2,2,0,0,0-1.4-.4h-3Z" style="fill: #fff"/>
<path d="M226.5,180.2h6.3v.7h-5.4v3.3h5v.7h-5v3.5h5.4v.8h-6.3Z" style="fill: #fff"/> <path d="M226.5,180.2h6.3v.7h-5.4v3.3h5v.7h-5v3.5h5.4v.8h-6.3Z" style="fill: #fff"/>
<path d="M234,180.2h6.2v.7h-5.3v3.3h5v.7h-5v3.5h5.4v.8H234Z" style="fill: #fff"/> <path d="M234,180.2h6.2v.7h-5.3v3.3h5v.7h-5v3.5h5.4v.8H234Z" style="fill: #fff"/>
<path d="M241.5,180.2h3.1a4.2,4.2,0,0,1,3.1,1.1,5,5,0,0,1,1.1,3.4,4.5,4.5,0,0,1-1.1,3.3,4.2,4.2,0,0,1-3.1,1.2h-3.1Zm.9,8.2h1.8a4.7,4.7,0,0,0,1.7-.2,2.5,2.5,0,0,0,1.8-1.8,8.8,8.8,0,0,0,.2-1.7,9,9,0,0,0-.2-1.8,3,3,0,0,0-1.8-1.8l-1.7-.2h-1.8Z" style="fill: #fff"/> <path d="M241.5,180.2h3.1a4.2,4.2,0,0,1,3.1,1.1,5,5,0,0,1,1.1,3.4,4.5,4.5,0,0,1-1.1,3.3,4.2,4.2,0,0,1-3.1,1.2h-3.1Zm.9,8.2h1.8a4.7,4.7,0,0,0,1.7-.2,2.5,2.5,0,0,0,1.8-1.8,8.8,8.8,0,0,0,.2-1.7,9,9,0,0,0-.2-1.8,3,3,0,0,0-1.8-1.8l-1.7-.2h-1.8Z" style="fill: #fff"/>
</g> </g>
<g> <g>
<rect width="368.5" height="226.77" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.28346456692913385px"/> <rect width="368.5" height="226.77" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.28346456692913385px"/>
<line y1="198.4" x2="368.5" y2="198.4" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.28346456692913385px"/> <line y1="198.4" x2="368.5" y2="198.4" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.28346456692913385px"/>
<line y1="170.1" x2="198.4" y2="170.1" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.28346456692913385px"/> <line y1="170.1" x2="198.4" y2="170.1" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.28346456692913385px"/>
<line y1="141.7" x2="368.5" y2="141.7" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.28346456692913385px"/> <line y1="141.7" x2="368.5" y2="141.7" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.28346456692913385px"/>
<line y1="113.4" x2="368.5" y2="113.4" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.28346456692913385px"/> <line y1="113.4" x2="368.5" y2="113.4" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.28346456692913385px"/>
<line y1="85" x2="368.5" y2="85" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.28346456692913385px"/> <line y1="85" x2="368.5" y2="85" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.28346456692913385px"/>
<line y1="56.7" x2="368.5" y2="56.7" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.28346456692913385px"/> <line y1="56.7" x2="368.5" y2="56.7" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.28346456692913385px"/>
<line y1="28.3" x2="368.5" y2="28.3" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.28346456692913385px"/> <line y1="28.3" x2="368.5" y2="28.3" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.28346456692913385px"/>
<line x1="340.2" x2="340.2" y2="226.8" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.28346456692913385px"/> <line x1="340.2" x2="340.2" y2="226.8" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.28346456692913385px"/>
<line x1="311.8" x2="311.8" y2="141.7" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.28346456692913385px"/> <line x1="311.8" x2="311.8" y2="141.7" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.28346456692913385px"/>
<line x1="283.5" x2="283.5" y2="141.7" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.28346456692913385px"/> <line x1="283.5" x2="283.5" y2="141.7" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.28346456692913385px"/>
<line x1="311.8" y1="198.4" x2="311.8" y2="340.2" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.28346456692913385px"/> <line x1="311.8" y1="198.4" x2="311.8" y2="340.2" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.28346456692913385px"/>
<line x1="283.5" y1="198.4" x2="283.5" y2="340.2" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.28346456692913385px"/> <line x1="283.5" y1="198.4" x2="283.5" y2="340.2" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.28346456692913385px"/>
<line x1="255.1" x2="255.1" y2="141.7" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.28346456692913385px"/> <line x1="255.1" x2="255.1" y2="141.7" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.28346456692913385px"/>
<line x1="255.1" y1="198.4" x2="255.1" y2="340.2" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.28346456692913385px"/> <line x1="255.1" y1="198.4" x2="255.1" y2="340.2" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.28346456692913385px"/>
<line x1="226.8" x2="226.8" y2="141.7" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.28346456692913385px"/> <line x1="226.8" x2="226.8" y2="141.7" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.28346456692913385px"/>
<line x1="226.8" y1="198.4" x2="226.8" y2="340.2" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.28346456692913385px"/> <line x1="226.8" y1="198.4" x2="226.8" y2="340.2" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.28346456692913385px"/>
<line x1="198.4" x2="198.4" y2="226.8" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.28346456692913385px"/> <line x1="198.4" x2="198.4" y2="226.8" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.28346456692913385px"/>
<line x1="170.1" x2="170.1" y2="226.8" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.28346456692913385px"/> <line x1="170.1" x2="170.1" y2="226.8" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.28346456692913385px"/>
<line x1="141.7" x2="141.7" y2="226.8" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.28346456692913385px"/> <line x1="141.7" x2="141.7" y2="226.8" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.28346456692913385px"/>
<line x1="113.4" x2="113.4" y2="226.8" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.28346456692913385px"/> <line x1="113.4" x2="113.4" y2="226.8" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.28346456692913385px"/>
<line x1="85" x2="85" y2="226.8" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.28346456692913385px"/> <line x1="85" x2="85" y2="226.8" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.28346456692913385px"/>
<line x1="56.7" x2="56.7" y2="226.8" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.28346456692913385px"/> <line x1="56.7" x2="56.7" y2="226.8" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.28346456692913385px"/>
<line x1="28.3" x2="28.3" y2="226.8" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.28346456692913385px"/> <line x1="28.3" x2="28.3" y2="226.8" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.28346456692913385px"/>
<line x1="340.2" y1="170.1" x2="538.6" y2="170.1" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.28346456692913385px"/> <line x1="340.2" y1="170.1" x2="538.6" y2="170.1" style="fill: none;stroke: #fff;stroke-miterlimit: 10;stroke-width: 0.28346456692913385px"/>
</g> </g>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 10 KiB

View File

@ -1,3 +1,7 @@
min_slic3r_version = 2.8.0-alpha0
2.0.1 RatRig official update, V-Core 4 added, PunkFil filament line
2.0.0 Updated for PS2.8.0.
max_slic3r_version = 2.7.9
min_slic3r_version = 2.7.0 min_slic3r_version = 2.7.0
1.0.3 Updated flavor. Updated start g-code. 1.0.3 Updated flavor. Updated start g-code.
min_slic3r_version = 2.4.1-alpha0 min_slic3r_version = 2.4.1-alpha0

File diff suppressed because it is too large Load Diff

View File

@ -1,3 +1,6 @@
min_slic3r_version = 2.8.0-alpha0
2.0.0 Updated for PS2.8.0.
min_slic3r_version = 2.7.9
min_slic3r_version = 2.6.0-alpha5 min_slic3r_version = 2.6.0-alpha5
1.0.1 General rework. Fix start gcodes. 1.0.1 General rework. Fix start gcodes.
min_slic3r_version = 2.6.0-alpha0 min_slic3r_version = 2.6.0-alpha0

View File

@ -1,19 +1,21 @@
# Print profiles for the Rigid3D printers. # Print profiles for the Rigid3D printers.
[vendor] [vendor]
repo_id = non-prusa-fff
# Vendor name will be shown by the Config Wizard. # Vendor name will be shown by the Config Wizard.
name = Rigid3D name = Rigid3D
# Configuration version of this file. Config file will only be installed, if the config_version differs. # Configuration version of this file. Config file will only be installed, if the config_version differs.
# This means, the server may force the PrusaSlicer configuration to be downgraded. # This means, the server may force the PrusaSlicer configuration to be downgraded.
config_version = 1.0.1 config_version = 2.0.0
# Where to get the updates from? # Where to get the updates from?
config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/Rigid3D/ config_update_url = https://preset-repo-api.prusa3d.com/v1/repos/non-prusa-fff/Rigid3D/
# changelog_url = https://files.prusa3d.com/?latest=slicer-profiles&lng=%1% # changelog_url = https://files.prusa3d.com/?latest=slicer-profiles&lng=%1%
# The printer models will be shown by the Configuration Wizard in this order, # The printer models will be shown by the Configuration Wizard in this order,
# also the first model installed & the first nozzle installed will be activated after install. # also the first model installed & the first nozzle installed will be activated after install.
# Printer model name will be shown by the installation wizard. # Printer model name will be shown by the installation wizard.
config_url = https://preset-repo-api.prusa3d.com/v1/repos/non-prusa-fff/Rigid3D/
[printer_model:Zero2] [printer_model:Zero2]
name = Rigid3D Zero2 name = Rigid3D Zero2
variants = 0.4 variants = 0.4
@ -23,6 +25,7 @@ bed_model = zero_bed.stl
bed_texture = zero2_bed.png bed_texture = zero2_bed.png
default_materials = Generic PLA @Rigid3D; Generic PETG @Rigid3D; Generic ABS @Rigid3D; Rigid3D PLA @Rigid3D; Generic Nylon @Rigid3D; Generic FLEX @Rigid3D default_materials = Generic PLA @Rigid3D; Generic PETG @Rigid3D; Generic ABS @Rigid3D; Rigid3D PLA @Rigid3D; Generic Nylon @Rigid3D; Generic FLEX @Rigid3D
thumbnail = Zero2_thumbnail.png
[printer_model:Zero3] [printer_model:Zero3]
name = Rigid3D Zero3 name = Rigid3D Zero3
variants = 0.4 variants = 0.4
@ -32,6 +35,7 @@ bed_model = zero_bed.stl
bed_texture = zero3_bed.png bed_texture = zero3_bed.png
default_materials =Generic PLA @Rigid3D; Generic PETG @Rigid3D; Generic ABS @Rigid3D; Rigid3D PLA @Rigid3D; Generic Nylon @Rigid3D; Generic FLEX @Rigid3D default_materials =Generic PLA @Rigid3D; Generic PETG @Rigid3D; Generic ABS @Rigid3D; Rigid3D PLA @Rigid3D; Generic Nylon @Rigid3D; Generic FLEX @Rigid3D
thumbnail = Zero3_thumbnail.png
[printer_model:Mucit] [printer_model:Mucit]
name = Rigid3D Mucit name = Rigid3D Mucit
variants = 0.4 variants = 0.4
@ -41,6 +45,7 @@ bed_model = mucit_bed.stl
bed_texture = mucit_bed.png bed_texture = mucit_bed.png
default_materials = Generic PLA @Rigid3D; Rigid3D PLA @Rigid3D default_materials = Generic PLA @Rigid3D; Rigid3D PLA @Rigid3D
thumbnail = Mucit_thumbnail.png
[printer_model:Mucit2] [printer_model:Mucit2]
name = Rigid3D Mucit2 name = Rigid3D Mucit2
variants = 0.4 variants = 0.4
@ -54,6 +59,7 @@ default_materials = Generic PLA @Rigid3D; Generic PETG @Rigid3D; Generic ABS @Ri
# not make it into the user interface. # not make it into the user interface.
# Common print preset # Common print preset
thumbnail = Mucit2_thumbnail.png
[print:*common*] [print:*common*]
avoid_crossing_perimeters = 0 avoid_crossing_perimeters = 0
avoid_crossing_perimeters_max_detour = 0 avoid_crossing_perimeters_max_detour = 0
@ -466,4 +472,4 @@ max_print_height = 150
printer_model = Mucit2 printer_model = Mucit2
printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_RIGID3D\nPRINTER_MODEL_MUCIT2\nPRINTER_HAS_HEATEDBED\n printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_RIGID3D\nPRINTER_MODEL_MUCIT2\nPRINTER_HAS_HEATEDBED\n
start_gcode = G21\nG92 E0\nM140 S[first_layer_bed_temperature]\nM104 S[first_layer_temperature]\nG28\nM420 S1\nM107\nG90\nM190 S[first_layer_bed_temperature]\nM109 S[first_layer_temperature]\nG1 X10.0 Y0.1 Z0.3 F3000.0\nG1 X140.0 Y0.1 Z0.3 F1500.0 E10\nG1 X140 Y0.4 Z0.3 F3000.0\nG1 X10.0 Y0.4 Z0.3 F1500.0 E20\nG1 Z2.0 F1500.0\nG92 E0\n start_gcode = G21\nG92 E0\nM140 S[first_layer_bed_temperature]\nM104 S[first_layer_temperature]\nG28\nM420 S1\nM107\nG90\nM190 S[first_layer_bed_temperature]\nM109 S[first_layer_temperature]\nG1 X10.0 Y0.1 Z0.3 F3000.0\nG1 X140.0 Y0.1 Z0.3 F1500.0 E10\nG1 X140 Y0.4 Z0.3 F3000.0\nG1 X10.0 Y0.4 Z0.3 F1500.0 E20\nG1 Z2.0 F1500.0\nG92 E0\n
end_gcode = G92 E0\nT0\nG1 F1800 E-2\nG27 P2\nM107\nM104 T0 S0\nM140 S0\nG90\nG92 E0\nM18\n end_gcode = G92 E0\nT0\nG1 F1800 E-2\nG27 P2\nM107\nM104 T0 S0\nM140 S0\nG90\nG92 E0\nM18\n

View File

@ -1,4 +1,9 @@
min_slic3r_version = 2.8.0-alpha0
2.0.1 Add support BracingKit for Snapmaker 2. Add support Artisan.
2.0.0 Updated for PS2.8.0.
max_slic3r_version = 2.7.9
min_slic3r_version = 2.6.0 min_slic3r_version = 2.6.0
1.1.2 Add support BracingKit for Snapmaker 2. Add support Artisan.
1.1.1 Fixed overhang speeds. Fixed branch diameter angle for organic supports. 1.1.1 Fixed overhang speeds. Fixed branch diameter angle for organic supports.
1.1.0 Add more Snapmaker printers. 1.1.0 Add more Snapmaker printers.
min_slic3r_version = 2.4.1 min_slic3r_version = 2.4.1

File diff suppressed because it is too large Load Diff

View File

@ -1,2 +1,5 @@
min_slic3r_version = 2.8.0-alpha0
2.0.0 Updated for PS2.8.0.
max_slic3r_version = 2.7.9
min_slic3r_version = 2.6.0 min_slic3r_version = 2.6.0
1.0.0 Initial Sovol bundle 1.0.0 Initial Sovol bundle

File diff suppressed because it is too large Load Diff

View File

@ -1,3 +1,6 @@
min_slic3r_version = 2.8.0-alpha0
2.0.0 Updated for PS2.8.0.
max_slic3r_version = 2.7.9
min_slic3r_version = 2.6.0-alpha0 min_slic3r_version = 2.6.0-alpha0
1.0.5 Added Filament PM filaments. Added Prusament PETG V0. 1.0.5 Added Filament PM filaments. Added Prusament PETG V0.
1.0.4 Updated compatible printer condition. 1.0.4 Updated compatible printer condition.

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +1,11 @@
min_slic3r_version = 2.8.0-alpha0
2.0.0 Updated for PS2.8.0.
max_slic3r_version = 2.7.9
min_slic3r_version = 2.5.2-alpha0
1.0.5 Fixed chamber heating for AzteQ Industrial, Fixed material type for Polymaker PC, Fixed print area size
1.0.4 Added new printer AzteQ Dynamic, Added AzteQ Dynamic material profiles for Prusament ASA, Prusa EasyABS, Prusament PLA, Prusament PETG, Smartfil PLA, Prusament PETG Carbon Fiber, Added AzteQ Industrial material profiles for Prusa EasyABS, Filament PM PAJet 160, Prusament PLA, Prusament PETG, Prusament PA11 Carbon Fiber, Smartfil PLA, Prusament PETG Carbon Fiber, Added DeltiQ 2 material profiles for Prusament PA11 Carbon Fiber, Prusament PC Blend Carbon Fiber, Prusament PETG, Fiberlogy Nylon PA12+CF15, Fiberlogy Nylon PA12+GF15, Prusament PVB, Prusament PC Blend Carbon Fiber 0.6 nozzle, Fiberlogy Nylon PA12+CF15 0.6 nozzle, Fiberlogy Nylon PA12+GF15 0.6 nozzle, Added FlexPrint 2 material profiles for Fiberlogy PP, NinjaTek TPU 75D, Changing the names of materials, Some minor print styles improvements
min_slic3r_version = 2.5.0-alpha0 min_slic3r_version = 2.5.0-alpha0
1.0.3 Added DeltiQ 2 materials PETG (Prusa Polymers), PA11 Carbon Fiber (Prusa Polymers), PC Blend Carbon Fiber (Prusa Polymers), Improved DeltiQ 2 material PLA Prusament, Improved output filename template(added filament used weight, fixed timestamp, fixed invalid printhead code)
1.0.2 Added home to start gcode before heating bed, added DeltiQ 2 material PLA Prusament, fixed gcode for pause print, improved output filename template(added printhead code, added filament used length, truncated timestamp) 1.0.2 Added home to start gcode before heating bed, added DeltiQ 2 material PLA Prusament, fixed gcode for pause print, improved output filename template(added printhead code, added filament used length, truncated timestamp)
min_slic3r_version = 2.4.1-rc1 min_slic3r_version = 2.4.1-rc1
1.0.1 Fix missing AzteQ Industrial ABS material for 0.6, 0.8 nozzle, enabled elefant foot compensation 1.0.1 Fix missing AzteQ Industrial ABS material for 0.6, 0.8 nozzle, enabled elefant foot compensation

File diff suppressed because it is too large Load Diff

View File

@ -1,3 +1,7 @@
min_slic3r_version = 2.8.0-alpha0
2.0.0 Updated for PS2.8.0.
max_slic3r_version = 2.7.9
min_slic3r_version = 2.6.0-beta2 min_slic3r_version = 2.6.0-beta2
1.0.2 modification in start gcode and end gcode
1.0.1 Speed profile has been added 1.0.1 Speed profile has been added
1.0.0 Initial version 1.0.0 Initial version

View File

@ -1,19 +1,21 @@
# Print profiles for the Trimaker printers. # Print profiles for the Trimaker printers.
[vendor] [vendor]
repo_id = non-prusa-fff
# Vendor name will be shown by the Config Wizard. # Vendor name will be shown by the Config Wizard.
name = Trimaker name = Trimaker
# Configuration version of this file. Config file will only be installed, if the config_version differs. # Configuration version of this file. Config file will only be installed, if the config_version differs.
# This means, the server may force the PrusaSlicer configuration to be downgraded. # This means, the server may force the PrusaSlicer configuration to be downgraded.
config_version = 1.0.1 config_version = 2.0.0
# Where to get the updates from? # Where to get the updates from?
config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/Trimaker/ config_update_url = https://preset-repo-api.prusa3d.com/v1/repos/non-prusa-fff/Trimaker/
# changelog_url = # changelog_url =
# The printer models will be shown by the Configuration Wizard in this order, # The printer models will be shown by the Configuration Wizard in this order,
# also the first model installed & the first nozzle installed will be activated after install. # also the first model installed & the first nozzle installed will be activated after install.
# Printer model name will be shown by the installation wizard. # Printer model name will be shown by the installation wizard.
config_url = https://preset-repo-api.prusa3d.com/v1/repos/non-prusa-fff/Trimaker/
[printer_model:Trimaker Nebula Cloud] [printer_model:Trimaker Nebula Cloud]
name = Trimaker Nebula Cloud name = Trimaker Nebula Cloud
family = Nebula family = Nebula
@ -350,8 +352,8 @@ retract_speed = 35
serial_port = serial_port =
serial_speed = 250000 serial_speed = 250000
single_extruder_multi_material = 0 single_extruder_multi_material = 0
start_gcode = G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 ; home all\nG92 E0.0\nG29 ; bed leveling\nM500\nG1 F3000 X0.5 Y0.5\nG1 Z0.300\nG1 F900 X0.5 Y51.5 E2.56436 ; intro line\nG92 E0.0 start_gcode = G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 ; home all\nG92 E0.0\nG29 ; bed leveling\nM500\nG1 F3000 X0.5 Y0.5\nG1 F2000 Z0.300\nG1 F900 X0.5 Y51.5 E2.56436 ; intro line\nG92 E0.0
end_gcode =;printing object ENDGCODE\n M107; Apagamos fan\n G90\n G92 E0\n G1 X0 Y200\n G91\n G1 Z5\n G92 E0\n M140 S0; Enfriamos\n M104 S0; Enfriamos\n M84\n G90\n M117 Impresion finalizada\n M300 S440 P700\n end_gcode =;printing object ENDGCODE\n M107; Apagamos fan\n G90\n G92 E0\n G1 X200 Y200\n G91\n G1 Z5\n G92 E0\n M140 S0; Enfriamos\n M104 S0; Enfriamos\n M84\n G90\n M117 Impresion finalizada\n M300 S440 P700\n
toolchange_gcode = toolchange_gcode =
use_firmware_retraction = 0 use_firmware_retraction = 0
use_relative_e_distances = 1 use_relative_e_distances = 1
@ -371,7 +373,7 @@ printer_model = Trimaker Nebula Cloud
inherits = *common* inherits = *common*
bed_shape = 0x0,230x0,230x230,0x230 bed_shape = 0x0,230x0,230x230,0x230
max_print_height = 260 max_print_height = 260
start_gcode = G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 ; home all\nG92 E0.0\nG1 F3000 X0.5 Y0.5\nG1 Z0.300\nG1 F900 X0.5 Y51.5 E2.56436 ; intro line\nG92 E0.0 start_gcode = G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 ; home all\nG92 E0.0\nG1 F3000 X0.5 Y0.5\nG1 F2000 Z0.300\nG1 F900 X0.5 Y51.5 E2.56436 ; intro line\nG92 E0.0
printer_model = Trimaker Nebula printer_model = Trimaker Nebula
[printer:*Trimaker Cosmos II*] [printer:*Trimaker Cosmos II*]

View File

@ -1,3 +1,8 @@
min_slic3r_version = 2.8.0-alpha0
2.0.0 Updated for PS2.8.0.
max_slic3r_version = 2.7.9
min_slic3r_version = 2.6.0
1.1.0 Refactored code to have remove duplicate values and match some updated Cura values. Adds Ultimaker 2 DXUv2 mod. Adds Ultimaker S-line printers (S3, S5, S7)
min_slic3r_version = 2.4.0-beta0 min_slic3r_version = 2.4.0-beta0
1.0.2 Fixed start g-code. 1.0.2 Fixed start g-code.
1.0.1 Updated start g-code. 1.0.1 Updated start g-code.

View File

@ -1,400 +1,432 @@
# Print profiles for the Ultimaker printers. # Print profiles for the Ultimaker printers.
# https://github.com/prusa3d/PrusaSlicer-settings/issues/143 # https://github.com/prusa3d/PrusaSlicer-settings/issues/143
# author: https://github.com/foreachthing # author: https://github.com/foreachthing
# author: https://github.com/ansonl
[vendor] [vendor]
# Vendor name will be shown by the Config Wizard. repo_id = non-prusa-fff
name = Ultimaker # Vendor name will be shown by the Config Wizard.
name = Ultimaker
# Configuration version of this file. Config file will only be installed, if the config_version differs.
# This means, the server may force the PrusaSlicer configuration to be downgraded. # Configuration version of this file. Config file will only be installed, if the config_version differs.
config_version = 1.0.2 # This means, the server may force the PrusaSlicer configuration to be downgraded.
config_version = 2.0.0
# Where to get the updates from?
config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/Ultimaker/ # Where to get the updates from?
config_update_url = https://preset-repo-api.prusa3d.com/v1/repos/non-prusa-fff/Ultimaker/
# The printer models will be shown by the Configuration Wizard in this order,
# also the first model installed & the first nozzle installed will be activated after install. # The printer models will be shown by the Configuration Wizard in this order,
# Printer model name will be shown by the installation wizard. # also the first model installed & the first nozzle installed will be activated after install.
# Printer model name will be shown by the installation wizard.
[printer_model:ULTIMAKER2]
name = Ultimaker 2 config_url = https://preset-repo-api.prusa3d.com/v1/repos/non-prusa-fff/Ultimaker/
variants = 0.4 [printer_model:ULTIMAKER2]
technology = FFF name = Ultimaker 2
bed_model = ultimaker2_bed.stl variants = 0.4
bed_texture = ultimaker2.svg technology = FFF
default_materials = Generic PLA @ULTIMAKER2; Generic PETG @ULTIMAKER2; Generic ABS @ULTIMAKER2 bed_model = ultimaker2_bed.stl
bed_texture = ultimaker2.svg
# All presets starting with asterisk, for example *common*, are intermediate and they will thumbnail = ULTIMAKER2_thumbnail_v2.png
# not make it into the user interface. default_materials = Generic PLA; Generic PETG @ULTIMAKER; Generic ABS @ULTIMAKER
# Common print preset [printer_model:ULTIMAKERSline]
[print:*common*] name = Ultimaker S-line
avoid_crossing_perimeters = 1 variants = 0.4
avoid_crossing_perimeters_max_detour = 0 technology = FFF
bottom_fill_pattern = rectilinear bed_texture = ultimaker2.svg
bottom_solid_layers = 4 default_materials = Generic PLA
bottom_solid_min_thickness = 0
bridge_acceleration = 0 # All presets starting with asterisk, for example *common*, are intermediate and they will
bridge_angle = 0 # not make it into the user interface.
bridge_flow_ratio = 1
bridge_speed = 60 # Common print preset
brim_separation = 0 thumbnail = ULTIMAKERSline_thumbnail.png
brim_type = outer_only [print:*common*]
brim_width = 0 avoid_crossing_perimeters = 1
clip_multipart_objects = 0 avoid_crossing_perimeters_max_detour = 0
compatible_printers = bottom_fill_pattern = rectilinear
compatible_printers_condition = bottom_solid_layers = 4
complete_objects = 0 bottom_solid_min_thickness = 0
default_acceleration = 0 bridge_acceleration = 0
dont_support_bridges = 0 bridge_angle = 0
draft_shield = disabled bridge_flow_ratio = 1
elefant_foot_compensation = 0 bridge_speed = 35
ensure_vertical_shell_thickness = 0 brim_separation = 0
external_perimeter_extrusion_width = 0.45 brim_type = outer_only
external_perimeter_speed = 75% brim_width = 0
external_perimeters_first = 0 clip_multipart_objects = 0
extra_perimeters = 1 compatible_printers =
extruder_clearance_height = 50 compatible_printers_condition =
extruder_clearance_radius = 60 complete_objects = 0
extrusion_width = 0.45 default_acceleration = 0
fill_angle = 45 dont_support_bridges = 0
fill_density = 20% draft_shield = disabled
fill_pattern = grid elefant_foot_compensation = 0.08
first_layer_acceleration = 0 ensure_vertical_shell_thickness = 0
first_layer_acceleration_over_raft = 0 external_perimeter_extrusion_width = 0.4
first_layer_extrusion_width = 0.45 external_perimeter_speed = 50%
first_layer_height = 0.2 external_perimeters_first = 0
first_layer_speed = 30 extra_perimeters = 1
first_layer_speed_over_raft = 30 extruder_clearance_height = 50
fuzzy_skin = none extruder_clearance_radius = 60
fuzzy_skin_point_dist = 0.8 extrusion_width = 0.4
fuzzy_skin_thickness = 0.3 fill_angle = 45
gap_fill_enabled = 1 fill_density = 20%
gap_fill_speed = 20 fill_pattern = grid
gcode_comments = 1 first_layer_acceleration = 0
gcode_label_objects = 0 first_layer_acceleration_over_raft = 0
infill_acceleration = 0 first_layer_extrusion_width = 0.4
infill_anchor = 600% first_layer_height = 0.2
infill_anchor_max = 50 first_layer_speed = 25%
infill_every_layers = 1 first_layer_speed_over_raft = 25%
infill_extruder = 1 fuzzy_skin = none
infill_extrusion_width = 0.5 fuzzy_skin_point_dist = 0.8
infill_first = 1 fuzzy_skin_thickness = 0.3
infill_only_where_needed = 0 gap_fill_enabled = 1
infill_overlap = 35% gap_fill_speed = 20
infill_speed = 60 gcode_comments = 1
inherits = gcode_label_objects = 0
interface_shells = 0 infill_acceleration = 0
ironing = 0 infill_anchor = 600%
ironing_flowrate = 15% infill_anchor_max = 50
ironing_spacing = 0.1 infill_every_layers = 1
ironing_speed = 15 infill_extruder = 1
ironing_type = top infill_extrusion_width = 0.4
layer_height = 0.2 infill_first = 1
max_print_speed = 80 infill_only_where_needed = 0
max_volumetric_speed = 0 infill_overlap = 35%
min_skirt_length = 2 infill_speed = 70
mmu_segmented_region_max_width = 0 inherits =
notes = Ultimaker 2, 0.4 mm Nozzle interface_shells = 0
only_retract_when_crossing_perimeters = 1 ironing = 0
ooze_prevention = 0 ironing_flowrate = 15%
output_filename_format = {input_filename_base}_{layer_height}mm_{filament_type[0]}_{printer_model}_{print_time}.gcode ironing_spacing = 0.1
overhangs = 1 ironing_speed = 15
perimeter_acceleration = 0 ironing_type = top
perimeter_extruder = 1 layer_height = 0.2
perimeter_extrusion_width = 0.45 max_print_speed = 100
perimeter_speed = 50 max_volumetric_speed = 0
perimeters = 2 min_skirt_length = 2
post_process = mmu_segmented_region_max_width = 0
print_settings_id = notes = Ultimaker, 0.4 mm Nozzle
raft_contact_distance = 0.1 only_retract_when_crossing_perimeters = 1
raft_expansion = 1.5 ooze_prevention = 1
raft_first_layer_density = 90% output_filename_format = {input_filename_base}_{layer_height}mm_{filament_type[0]}_{printer_model}_{print_time}.gcode
raft_first_layer_expansion = 3 overhangs = 1
raft_layers = 0 perimeter_acceleration = 0
resolution = 0 perimeter_extruder = 1
seam_position = aligned perimeter_extrusion_width = 0.4
single_extruder_multi_material_priming = 1 perimeter_speed = 50
skirt_distance = 3 perimeters = 2
skirt_height = 1 post_process =
skirts = 1 print_settings_id =
slice_closing_radius = 0.049 raft_contact_distance = 0.1
slicing_mode = regular raft_expansion = 1.5
small_perimeter_speed = 75% raft_first_layer_density = 90%
solid_infill_below_area = 10 raft_first_layer_expansion = 3
solid_infill_every_layers = 0 raft_layers = 0
solid_infill_extruder = 1 resolution = 0
solid_infill_extrusion_width = 0.45 seam_position = aligned
solid_infill_speed = 40 single_extruder_multi_material_priming = 1
spiral_vase = 0 skirt_distance = 3
standby_temperature_delta = -5 skirt_height = 1
support_material = 0 skirts = 1
support_material_angle = 45 slice_closing_radius = 0.049
support_material_auto = 1 slicing_mode = regular
support_material_bottom_contact_distance = 0 small_perimeter_speed = 75%
support_material_bottom_interface_layers = -1 solid_infill_below_area = 10
support_material_buildplate_only = 1 solid_infill_every_layers = 0
support_material_closing_radius = 2 solid_infill_extruder = 1
support_material_contact_distance = 0.2 solid_infill_extrusion_width = 0.4
support_material_enforce_layers = 0 solid_infill_speed = 75%
support_material_extruder = 1 spiral_vase = 0
support_material_extrusion_width = 0.4 standby_temperature_delta = -30
support_material_interface_contact_loops = 0 support_material = 0
support_material_interface_extruder = 1 support_material_angle = 45
support_material_interface_layers = 2 support_material_auto = 1
support_material_interface_pattern = auto support_material_bottom_contact_distance = 0
support_material_interface_spacing = 0.2 support_material_bottom_interface_layers = -1
support_material_interface_speed = 100% support_material_buildplate_only = 1
support_material_pattern = rectilinear-grid support_material_closing_radius = 2
support_material_spacing = 4 support_material_contact_distance = 0.2
support_material_speed = 60 support_material_enforce_layers = 0
support_material_style = grid support_material_extruder = 1
support_material_synchronize_layers = 0 support_material_extrusion_width = 0.4
support_material_threshold = 0 support_material_interface_contact_loops = 0
support_material_with_sheath = 0 support_material_interface_extruder = 1
support_material_xy_spacing = 0.8 support_material_interface_layers = 2
thick_bridges = 1 support_material_interface_pattern = auto
thin_walls = 0 support_material_interface_spacing = 0.2
threads = 8 support_material_interface_speed = 100%
top_fill_pattern = rectilinear support_material_pattern = rectilinear-grid
top_infill_extrusion_width = 0.45 support_material_spacing = 4
top_solid_infill_speed = 40 support_material_speed = 60
top_solid_layers = 4 support_material_style = grid
top_solid_min_thickness = 0 support_material_synchronize_layers = 0
travel_speed = 120 support_material_threshold = 0
travel_speed_z = 0 support_material_with_sheath = 0
wipe_tower = 0 support_material_xy_spacing = 0.8
wipe_tower_bridging = 10 thick_bridges = 1
wipe_tower_brim_width = 2 thin_walls = 0
wipe_tower_no_sparse_layers = 0 threads = 8
wipe_tower_rotation_angle = 0 top_fill_pattern = rectilinear
wipe_tower_width = 60 top_infill_extrusion_width = 0.4
wipe_tower_x = 180 top_solid_infill_speed = 50%
wipe_tower_y = 140 top_solid_layers = 4
xy_size_compensation = 0 top_solid_min_thickness = 0
travel_speed = 150
travel_speed_z = 0
[print:*0.12mm*] wipe_tower = 0
inherits = *common* wipe_tower_bridging = 10
perimeter_speed = 40 wipe_tower_brim_width = 2
external_perimeter_speed = 25 wipe_tower_no_sparse_layers = 0
infill_speed = 50 wipe_tower_rotation_angle = 0
solid_infill_speed = 40 wipe_tower_width = 60
layer_height = 0.12 wipe_tower_x = 180
perimeters = 3 wipe_tower_y = 140
top_infill_extrusion_width = 0.4 xy_size_compensation = 0
bottom_solid_layers = 6
top_solid_layers = 7 [print:*0.10mm*]
inherits = *common*
[print:*0.20mm*] layer_height = 0.10
inherits = *common* bottom_solid_layers = 8
perimeter_speed = 40 top_solid_layers = 8
external_perimeter_speed = 25
infill_speed = 50 [print:*0.12mm*]
solid_infill_speed = 40 inherits = *common*
layer_height = 0.20 layer_height = 0.12
top_infill_extrusion_width = 0.4 perimeters = 3
bottom_solid_layers = 4 bottom_solid_layers = 6
top_solid_layers = 5 top_solid_layers = 7
[print:*0.25mm*] [print:*0.20mm*]
inherits = *common* inherits = *common*
perimeter_speed = 40 layer_height = 0.20
external_perimeter_speed = 25 bottom_solid_layers = 4
infill_speed = 50 top_solid_layers = 5
solid_infill_speed = 40
layer_height = 0.25 [print:*0.25mm*]
top_infill_extrusion_width = 0.45 inherits = *common*
bottom_solid_layers = 3 layer_height = 0.25
top_solid_layers = 4 bottom_solid_layers = 3
top_solid_layers = 4
[print:0.12mm DETAIL @ULTIMAKER2]
inherits = *0.12mm* [print:0.10mm FINE @ULTIMAKER]
travel_speed = 150 inherits = *0.10mm*
infill_speed = 50 compatible_printers_condition = printer_model=="ULTIMAKER2" or printer_model=="ULTIMAKERSline" and nozzle_diameter[0]==0.4
solid_infill_speed = 40
top_solid_infill_speed = 30 [print:0.12mm DETAIL @ULTIMAKER]
support_material_extrusion_width = 0.38 inherits = *0.12mm*
compatible_printers_condition = printer_model=="ULTIMAKER2" and nozzle_diameter[0]==0.4 support_material_extrusion_width = 0.38
compatible_printers_condition = printer_model=="ULTIMAKER2" or printer_model=="ULTIMAKERSline" and nozzle_diameter[0]==0.4
[print:0.20mm NORMAL @ULTIMAKER2]
inherits = *0.20mm* [print:0.20mm NORMAL @ULTIMAKER]
travel_speed = 150 inherits = *0.20mm*
infill_speed = 50 support_material_extrusion_width = 0.38
solid_infill_speed = 40 compatible_printers_condition = printer_model=="ULTIMAKER2" or printer_model=="ULTIMAKERSline" and nozzle_diameter[0]==0.4
top_solid_infill_speed = 30
support_material_extrusion_width = 0.38 [print:0.25mm DRAFT @ULTIMAKER]
compatible_printers_condition = printer_model=="ULTIMAKER2" and nozzle_diameter[0]==0.4 inherits = *0.25mm*
support_material_extrusion_width = 0.38
[print:0.25mm DRAFT @ULTIMAKER2] compatible_printers_condition = printer_model=="ULTIMAKER2" or printer_model=="ULTIMAKERSline" and nozzle_diameter[0]==0.4
inherits = *0.25mm*
travel_speed = 150 # Common filament preset
infill_speed = 50 [filament:*common*]
solid_infill_speed = 40 cooling = 0
top_solid_infill_speed = 30 compatible_printers =
support_material_extrusion_width = 0.38 extrusion_multiplier = 1
compatible_printers_condition = printer_model=="ULTIMAKER2" and nozzle_diameter[0]==0.4 filament_cost = 0
filament_density = 0
# Common filament preset filament_diameter = 2.85
[filament:*common*] filament_notes = ""
cooling = 0 filament_settings_id = ""
compatible_printers = filament_soluble = 0
extrusion_multiplier = 1 min_print_speed = 5
filament_cost = 0 slowdown_below_layer_time = 6
filament_density = 0 compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_ULTIMAKER.*/
filament_diameter = 2.85
filament_notes = "" [filament:*PLA*]
filament_settings_id = "" inherits = *common*
filament_soluble = 0 bed_temperature = 60
min_print_speed = 15 fan_below_layer_time = 100
slowdown_below_layer_time = 20 filament_colour = #C0C0C0
compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_ULTIMAKER.*/ filament_max_volumetric_speed = 0
filament_type = PLA
[filament:*PLA*] filament_density = 1.24
inherits = *common* first_layer_bed_temperature = 55
bed_temperature = 60 first_layer_temperature = 205
fan_below_layer_time = 100 fan_always_on = 1
filament_colour = #FFF0E0 cooling = 1
filament_max_volumetric_speed = 0 min_fan_speed = 100
filament_type = PLA max_fan_speed = 100
filament_density = 1.24 bridge_fan_speed = 100
first_layer_bed_temperature = 55 disable_fan_first_layers = 3
first_layer_temperature = 205 temperature = 210
fan_always_on = 1
cooling = 1 [filament:*PET*]
min_fan_speed = 100 inherits = *common*
max_fan_speed = 100 fan_below_layer_time = 15
bridge_fan_speed = 100 filament_colour = #C0C0C0
disable_fan_first_layers = 3 filament_max_volumetric_speed = 0
temperature = 210 filament_type = PETG
filament_density = 1.27
[filament:*PET*] first_layer_bed_temperature = 85
inherits = *common* bed_temperature = 85
fan_below_layer_time = 15 first_layer_temperature = 240
filament_colour = #FFF0E0 temperature = 235
filament_max_volumetric_speed = 0 fan_always_on = 1
filament_type = PETG cooling = 1
filament_density = 1.27 min_fan_speed = 20
first_layer_bed_temperature = 85 max_fan_speed = 40
bed_temperature = 85 bridge_fan_speed = 40
first_layer_temperature = 240 slowdown_below_layer_time = 15
temperature = 235 min_print_speed = 10
fan_always_on = 1 disable_fan_first_layers = 3
cooling = 1
min_fan_speed = 20 [filament:*ABS*]
max_fan_speed = 40 inherits = *common*
bridge_fan_speed = 40 fan_below_layer_time = 15
slowdown_below_layer_time = 15 filament_colour = #C0C0C0
min_print_speed = 10 filament_max_volumetric_speed = 0
disable_fan_first_layers = 3 filament_type = ABS
filament_density = 1.10
[filament:*ABS*] first_layer_bed_temperature = 80
inherits = *common* bed_temperature = 80
fan_below_layer_time = 15 first_layer_temperature = 240
filament_colour = #FFF0E0 temperature = 235
filament_max_volumetric_speed = 0 fan_always_on = 1
filament_type = ABS cooling = 1
filament_density = 1.10 min_fan_speed = 5
first_layer_bed_temperature = 80 max_fan_speed = 5
bed_temperature = 80 bridge_fan_speed = 10
first_layer_temperature = 240 slowdown_below_layer_time = 15
temperature = 235 min_print_speed = 10
fan_always_on = 1 disable_fan_first_layers = 3
cooling = 1
min_fan_speed = 5 [filament:Generic PLA @ULTIMAKER]
max_fan_speed = 5 inherits = *PLA*
bridge_fan_speed = 10 filament_vendor = Generic
slowdown_below_layer_time = 15 filament_cost =
min_print_speed = 10
disable_fan_first_layers = 3 [filament:Generic PETG @ULTIMAKER]
inherits = *PET*
[filament:Generic PLA @ULTIMAKER2] filament_vendor = Generic
inherits = *PLA* filament_cost =
filament_vendor = Generic
filament_cost = [filament:Generic ABS @ULTIMAKER]
inherits = *ABS*
[filament:Generic Black PLA @ULTIMAKER2] filament_vendor = Generic
inherits = *PLA* filament_cost =
filament_vendor = Generic
filament_colour = #0E3F3F # Common printer preset
filament_cost = [printer:*common*]
printer_technology = FFF
[filament:Generic PETG @ULTIMAKER2] before_layer_gcode = ;BEFORE_LAYER_CHANGE\n;M117 Layer [layer_num];\n;LAYER:[layer_num]
inherits = *PET* between_objects_gcode =
filament_vendor = Generic deretract_speed = 0
filament_cost = extruder_colour = #F9A800;#00387B
gcode_flavor = marlin
[filament:Generic ABS @ULTIMAKER2] silent_mode = 0
inherits = *ABS* remaining_times = 0
filament_vendor = Generic machine_max_acceleration_e = 10000
filament_cost = machine_max_acceleration_extruding = 3000
machine_max_acceleration_retracting = 3000
# Common printer preset machine_max_acceleration_x = 9000
[printer:*common*] machine_max_acceleration_y = 9000
printer_technology = FFF machine_max_acceleration_z = 100
before_layer_gcode = ;BEFORE_LAYER_CHANGE\n;layer:[layer_num];\nM117 Layer [layer_num];\n machine_max_feedrate_e = 120
between_objects_gcode = machine_max_feedrate_x = 300
deretract_speed = 0 machine_max_feedrate_y = 300
extruder_colour = #FFF0E0 machine_max_feedrate_z = 40
extruder_offset = 0x0 machine_max_jerk_e = 10
gcode_flavor = reprap machine_max_jerk_x = 20
silent_mode = 0 machine_max_jerk_y = 20
remaining_times = 0 machine_max_jerk_z = 0.4
machine_max_acceleration_e = 10000 machine_min_extruding_rate = 0
machine_max_acceleration_extruding = 1500 machine_min_travel_rate = 0
machine_max_acceleration_retracting = 1500 layer_gcode =
machine_max_acceleration_x = 3000 octoprint_apikey =
machine_max_acceleration_y = 3000 octoprint_host =
machine_max_acceleration_z = 500 printer_notes =
machine_max_feedrate_e = 120 printer_settings_id =
machine_max_feedrate_x = 500 retract_before_travel = 1.2,1.2
machine_max_feedrate_y = 500 retract_before_wipe = 0%,0%
machine_max_feedrate_z = 12 retract_layer_change = 1
machine_max_jerk_e = 2.5 retract_length = 6.5,6.5
machine_max_jerk_x = 20 retract_length_toolchange = 16,16
machine_max_jerk_y = 20 retract_lift = 0
machine_max_jerk_z = 0.4 retract_lift_above = 0
machine_min_extruding_rate = 0 retract_lift_below = 0
machine_min_travel_rate = 0 retract_restart_extra = 0
layer_gcode = retract_restart_extra_toolchange = 0
max_print_height = 212 retract_speed = 25,25
octoprint_apikey = serial_port =
octoprint_host = single_extruder_multi_material = 0
printer_notes = toolchange_gcode =
printer_settings_id = use_firmware_retraction = 0
retract_before_travel = 5 use_relative_e_distances = 0
retract_before_wipe = 0% use_volumetric_e = 0
retract_layer_change = 1 variable_layer_height = 0
retract_length = 6 wipe = 0
retract_length_toolchange = 10 z_offset = 0
retract_lift = 0
retract_lift_above = 0 [printer:Ultimaker 2]
retract_lift_below = 0 inherits = *common*
retract_restart_extra = 0 printer_model = ULTIMAKER2
retract_restart_extra_toolchange = 0 bed_shape = 0x0,224x0,224x225,0x225
retract_speed = 50 max_print_height = 212
serial_port = printer_variant = 0.4
single_extruder_multi_material = 0 printer_notes = Dont remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_ULTIMAKER\nPRINTER_MODEL_ULTIMAKER2
toolchange_gcode = nozzle_diameter = 0.4
use_firmware_retraction = 0 default_print_profile = 0.20mm NORMAL @ULTIMAKER
use_relative_e_distances = 0 default_filament_profile = Generic PLA @ULTIMAKER
use_volumetric_e = 0 start_gcode = ; Printer_Settings_ID: [printer_settings_id]\n\n; # # # # # # START Header\nG21 ; metric values\nG90 ; absolute positioning\nM82 ; set extruder to absolute mode\nM107 ; start with the fan off\n\nM140 S[first_layer_bed_temperature] ; start bed heating\n\nG28 X0 Y0 Z0 ; move X/Y/Z to endstops\nG1 X1 Y6 F15000 ; move X/Y to start position\nG1 Z35 F9000 ; move Z to start position\n\n; Wait for bed and nozzle temperatures\nM190 S{first_layer_bed_temperature[0] - 5} ; wait for bed temperature - 5\nM140 S[first_layer_bed_temperature] ; continue bed heating\nM109 S[first_layer_temperature] ; wait for nozzle temperature\n\n; Purge and prime\nM83 ; set extruder to relative mode\nG92 E0 ; reset extrusion distance\nG0 X0 Y1 F10000\nG1 F150 E20 ; compress the bowden tube\nG1 E-8 F1200\nG0 X30 Y1 F5000 \nG0 F1200 Z{first_layer_height/2} ; Cut the connection to priming blob\nG0 X100 F10000 ; disconnect with the prime blob\nG0 X50 ; Avoid the metal clip holding the Ultimaker glass plate\nG0 Z0.2 F720\nG1 E8 F1200\nG1 X80 E3 F1000 ; intro line 1\nG1 X110 E4 F1000 ; intro line 2\nG1 X140 F600 ; drag filament to decompress bowden tube\nG1 X100 F3200 ; wipe backwards a bit\nG1 X150 F3200 ; back to where there is no plastic: avoid dragging\nG92 E0 ; reset extruder reference\nM82 ; set extruder to absolute mode\n\n; # # # # # # END Header
variable_layer_height = 1 end_gcode = ; # # # # # # START Footer\nG91 ; relative coordinates\n;G1 E-1 F1200 ; retract the filament\nG1 Z+15 X-10 Y-10 E-7 F6000 ; move Z a bit\n; G1 X-10 Y-10 F6000 ; move XY a bit\nG1 E-5.5 F300 ; retract the filament\nG28 X0 Y0 ; move X/Y to min endstops, so the head is out of the way\nM104 S0 ; extruder heater off\nM140 S0 ; heated bed heater off (if you have it)\nM84 ; disable motors\n; # # # # # # END Footer\n
wipe = 0 max_layer_height = 0.3
z_offset = 0 min_layer_height = 0.06
[printer:Ultimaker 2] [printer:Ultimaker 2 DXUv2]
inherits = *common* inherits = Ultimaker 2
printer_model = ULTIMAKER2 printer_model = ULTIMAKER2
bed_shape = 0x0,224x0,224x225,0x225 bed_shape = 0x0,224x0,224x225,0x225
printer_variant = 0.4 extruder_offset = 0x0,0x0 ; stock DXUv2 offset is X18 Y0 but this should be applied in firmware and PS does not provide option to turn off extruder offset correction so we leave it at 0 in slicer
max_layer_height = 0.3 printer_variant = 0.4
min_layer_height = 0.08 nozzle_diameter = 0.4,0.4
printer_notes = Dont remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_ULTIMAKER\nPRINTER_MODEL_ULTIMAKER2 gcode_flavor = marlin2
nozzle_diameter = 0.4 default_print_profile = 0.20mm NORMAL @ULTIMAKER
default_print_profile = 0.20mm NORMAL @ULTIMAKER2 default_filament_profile = Generic PLA @ULTIMAKER
default_filament_profile = Generic PLA @ULTIMAKER2 toolchange_gcode = {if previous_extruder>= 0}\nM104 S{temperature[previous_extruder] + standby_temperature_delta}\n{endif}\n\nM104 T{next_extruder} S{temperature[next_extruder]}\n\nT{next_extruder}\nM109 S{temperature[next_extruder]}
start_gcode = ; Printer_Settings_ID: [printer_settings_id]\n\n; # # # # # # START Header\nG21 ; metric values\nG90 ; absolute positioning\nM82 ; set extruder to absolute mode\nM107 ; start with the fan off\n\nM140 S[first_layer_bed_temperature] ; start bed heating\n\nG28 X0 Y0 Z0 ; move X/Y/Z to endstops\nG1 X1 Y6 F15000 ; move X/Y to start position\nG1 Z35 F9000 ; move Z to start position\n\n; Wait for bed and nozzle temperatures\nM190 S{first_layer_bed_temperature[0] - 5} ; wait for bed temperature - 5\nM140 S[first_layer_bed_temperature] ; continue bed heating\nM109 S[first_layer_temperature] ; wait for nozzle temperature\n\n; Purge and prime\nM83 ; set extruder to relative mode\nG92 E0 ; reset extrusion distance\nG0 X0 Y1 F10000\nG1 F150 E20 ; compress the bowden tube\nG1 E-8 F1200\nG0 X30 Y1 F5000 \nG0 F1200 Z{first_layer_height/2} ; Cut the connection to priming blob\nG0 X100 F10000 ; disconnect with the prime blob\nG0 X50 ; Avoid the metal clip holding the Ultimaker glass plate\nG0 Z0.2 F720\nG1 E8 F1200\nG1 X80 E3 F1000 ; intro line 1\nG1 X110 E4 F1000 ; intro line 2\nG1 X140 F600 ; drag filament to decompress bowden tube\nG1 X100 F3200 ; wipe backwards a bit\nG1 X150 F3200 ; back to where there is no plastic: avoid dragging\nG92 E0 ; reset extruder reference\nM82 ; set extruder to absolute mode\n\n; # # # # # # END Header start_gcode = ; Printer_Settings_ID: [printer_settings_id]\n; DXUv2 improved PS start priming Gcode for dual nozzles for multi-material print\nM355 S1 P25 ; Turn on case light dim\nM190 S[first_layer_bed_temperature]\nG28 ; Home all\n;M420 S1 ; Enable and load bed mesh\nG29 ; Run automatic bed leveling. Comment this line out if auto bed leveling is not desired.\nM104 T0 S{temperature[0] + standby_temperature_delta} ; Preheat T0 to standby temp\nM104 T1 S{temperature[1] + standby_temperature_delta} ; Preheat T1 to standby temp\nG21 ; Metric values\nG90 ; Absolute positioning\nM82 ; Set extruder to absolute mode\nM107 ; Start with the fan off\nM200 D0 T0 ; Reset filament diameter\nM200 D0 T1 ; Reset filament diameter\nG0 X200 F7200 ; Move to safe X and Y location from right side after ending ABL homing. Move X before Y to avoid hitting switching lever.\nG1 Y150 F7200\n; Prime routine for T1 in normally \nT1 ; move to the nozzle 2\nM104 T1 S{temperature[1]} ; Start heating up T1\nG0 Z10 F2400 ; move the platform down to 10mm\nM109 T1 S{temperature[1]} ; Heat up and wait for T1\nG0 Y150 F7200 ; Move printhead to safe Y location to move right.\nG0 X50 Y1 F7200 ; Add HOTEND_OFFSET_Y index 1 to Y0 (or forward-most safe Y location when T1 is active) to get Gcode Y parameter\nG0 X95 Z0.3 F2400 ; lower nozzle\nG92 E0 ; reset E location\nG1 X225 Y1 Z0.3 E{retract_length_toolchange[1]} F1500 ; Add HOTEND_OFFSET_X index 1 to X217 (or right-most safe X location when T1 is active) to get actual Gcode X parameter.\nG3 X235 Y11 I0 J10 F7200\nG0 X235 Y11 Z0.3 F7200\nM104 T1 S{temperature[1] + standby_temperature_delta} ; Start cooling down nozzle to reduce oozing\nG92 E0\nG1 Y70 E3 F1000 ; intro line\nM104 T1 S{temperature[1] + standby_temperature_delta}\nG92 E0 \nG1 E-{retract_length_toolchange[1]} F1200 ; retract\nG0 Y105 F18000 ; break line\nG0 Y150 Z10 F2400 ; raise nozzle\n; Prime routine for T0\nT0 ; move to the nozzle 1\nM104 T0 S{temperature[0]} ; Start heating up T0\nG0 Z10 F2400\nM109 T0 S{temperature[0]}\nG0 Y150 F7200 ; Move printhead to safe Y location to move right.\nG0 X32 Y3 F7200\nG0 X77 Z0.3 F2400\nG92 E0 ; reset E location\nG1 X207 Y3 Z0.3 E{retract_length_toolchange[0]} F1500\nG3 X217 Y13 I0 J10 F7200\nG0 X217 Y13 Z0.3 F7200\nM104 T0 S{temperature[0] + standby_temperature_delta} ; Start cooling down nozzle to reduce oozing\nG92 E0 ; reset E location\nG1 Y72 E3 F1000 ; intro line\nM104 T0 S{temperature[0] + standby_temperature_delta}\nM104 T{initial_extruder} S{temperature[initial_extruder]} ; Start heating initial nozzle. Do not wait.\nG92 E0\nG1 E-{retract_length_toolchange[0]} F1200 ; retract\nG0 Y105 F18000 ; break line\nG0 Y150 Z10 F2400 ; raise nozzle\n; Final prime and wipe sequence for initial extruder (usually T0)\nT{initial_extruder} ; move to the initial nozzle used for print\nM400 ;finish all moves\nG0 Z20 F2400\nG0 X212 F7200\nG0 Y70 F7200\nM109 T{initial_extruder} S{temperature[initial_extruder]} ; Wait for initial nozzle to reach temp\nG92 E0\nG1 E{retract_length_toolchange[initial_extruder]} F1200 ; prime by switching length\nG0 X217 Y50 Z0.5 F7200\nG92 E0\nG0 Y9.4 Z0.5 E3 F7200\nG2 X212 Y3.4 Z0.4 I-6 J0 F7200\nM104 T{initial_extruder} S{first_layer_temperature[initial_extruder]} ; Start heating to first layer temp\nG0 X207 Y3.4 Z0.4 F7200\nG2 X205 Y5.4 Z0.3 I0 J2 F7200\nG0 X205 Y5.4 Z0.3 F7200\nG1 Y10 F18000 ; break line\nG92 E0\nG1 Y50 E2 F1000 ; extrude line\nG92 E0\nG1 E-0.5 F1500 ; retract slightly\nG1 Y100 F18000 ; break line\nG92 E0\nM355 S1 P255; Turn on case light brighter\n;end of startup sequence
end_gcode = ; # # # # # # START Footer\nG91 ; relative coordinates\n;G1 E-1 F1200 ; retract the filament\nG1 Z+15 X-10 Y-10 E-7 F6000 ; move Z a bit\n; G1 X-10 Y-10 F6000 ; move XY a bit\nG1 E-5.5 F300 ; retract the filament\nG28 X0 Y0 ; move X/Y to min endstops, so the head is out of the way\nM104 S0 ; extruder heater off\nM140 S0 ; heated bed heater off (if you have it)\nM84 ; disable motors\n; # # # # # # END Footer\n end_gcode = ;End G-code\nG91 ;Relative movement\nG0 X-8.0 Y-8.0 Z3.5 E-4.5 F18000 ;Wiping+material retraction ;increase bed lower 0.5>5.0 and add Y movement\nG0 F10000 Z1.5 E4.5 ;Compensation for the retraction\nG90 ;Disable relative movement\nM400 ;wait for all moves in planner to complete\nG90 ;absolute positioning\nM104 S0 T0 ;extruder heater off\nM104 S0 T1\nM140 S0 ;turn off bed\nT0 ; move to the first head\nG27; park toolhead\nM107 ;fan off\nM355 S0;turn off case light
max_layer_height = 0.3
min_layer_height = 0.06
[printer:*sline*]
printer_model = ULTIMAKERSline
extruder_offset = 0x0,22x0
printer_notes = Dont remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_ULTIMAKER\nPRINTER_MODEL_ULTIMAKERSline
toolchange_gcode = {if previous_extruder>= 0}\nM104 S{temperature[previous_extruder] + standby_temperature_delta}\n{endif}\n\nM104 T{next_extruder} S{temperature[next_extruder]}\n\nG91\nG0 Z2\nG90\nM82\n\nT{next_extruder}\nM109 S{temperature[next_extruder]}\n\nG91\nG0 Z-2\nG90\nM82\nG92 E0 ; reset extrusion distance
start_gcode = ; Delete the first 'generated by PrusaSlicer' line to make gcode printable on Ultimaker S-line\n\n;START_OF_HEADER\n; Printer_Settings_ID: [printer_settings_id]\n\n;ULTIMAKER GRIFFIN HEADER\n;HEADER_VERSION:0.1\n;FLAVOR:Griffin\n;GENERATOR.NAME:PrusaSlicer\n;GENERATOR.VERSION:5.4.0\n;GENERATOR.BUILD_DATE:{year}-{month}-{day}\n;TARGET_MACHINE.NAME:Ultimaker S7\n;EXTRUDER_TRAIN.0.INITIAL_TEMPERATURE:{first_layer_temperature[0]}\n;EXTRUDER_TRAIN.0.MATERIAL.VOLUME_USED:{extruded_volume[0]}\n;EXTRUDER_TRAIN.0.MATERIAL.GUID:0f12978a-8e3c-4147-b9ca-726d5ed59368\n;EXTRUDER_TRAIN.0.NOZZLE.DIAMETER:{nozzle_diameter[0]}\n;EXTRUDER_TRAIN.0.NOZZLE.NAME:AA {nozzle_diameter[0]}\n;EXTRUDER_TRAIN.1.INITIAL_TEMPERATURE:{temperature[1] + standby_temperature_delta}\n;EXTRUDER_TRAIN.1.MATERIAL.VOLUME_USED:{extruded_volume[1]}\n;EXTRUDER_TRAIN.1.MATERIAL.GUID:0f12978a-8e3c-4147-b9ca-726d5ed59368\n;EXTRUDER_TRAIN.1.NOZZLE.DIAMETER:{nozzle_diameter[0]}\n;EXTRUDER_TRAIN.1.NOZZLE.NAME:AA {nozzle_diameter[0]}\n;BUILD_PLATE.INITIAL_TEMPERATURE:[first_layer_bed_temperature]\n;BUILD_VOLUME.TEMPERATURE:28\n;PRINT.TIME:0\n;PRINT.GROUPS:1\n;PRINT.SIZE.MIN.X:{print_bed_min[0]}\n;PRINT.SIZE.MIN.Y:{print_bed_min[1]}\n;PRINT.SIZE.MIN.Z:0\n;PRINT.SIZE.MAX.X:{print_bed_max[0]}\n;PRINT.SIZE.MAX.Y:{print_bed_max[1]}\n;PRINT.SIZE.MAX.Z:{max_print_height}\n;SLICE_UUID:32daaf1d-f868-4a8e-ad06-8536b153e789\n;END_OF_HEADER\nT0\nM82 ;absolute extrusion mode\n\nG21 ; metric values\nG90 ; absolute positioning\nM107 ; start with the fan off\n\nM140 S{first_layer_bed_temperature[initial_extruder]} ; start bed heating\n\nG28 ; home if supported\nG1 X1 Y6 F15000 ; move X/Y to start position\nG1 Z35 F9000 ; move Z to start position\n\nM104 S{temperature[initial_extruder] + standby_temperature_delta} ; heat nozzle\n\nG280 S1 ; ultimaker home\n\n;To skip adaptive bed mesh probing uncomment G0 commands before ;LAYER:1\n;G0 X{print_bed_min[0]} Y{print_bed_max[1]}\n;G0 X{print_bed_min[0]} Y{print_bed_min[1]}\n;G0 X{print_bed_max[0]} Y{print_bed_min[1]}\n;G0 X{print_bed_max[0]} Y{print_bed_max[1]}\n;LAYER:1\n\n; purge retract_length_toolchange due to unknown state\n; prime extruders next to each other to verify extruder offset calibration\n\n; prime T0\nM104 S{first_layer_temperature[0]} T0 ; start heat nozzle temperature\nT0\nM109 S{first_layer_temperature[0]} T0 ; wait for nozzle temperature\nG90\nM82\nG0 X5 Y100 Z0.3 F7200\nG92 E0\nG1 X5 Y10 E1.9 F1000\nG0 X5 Y1 Z0.3 F7200\nG92 E0\nG1 X{print_bed_max[0]-30} Y1 E5.553 F1000\nG0 X{print_bed_max[0]-30} Y1.5 F7200\nG92 E0\nG1 X10 Y1.5 E5.458 F1000\nG0 X10 Y1.9 F7200\nM104 S{temperature[initial_extruder] + standby_temperature_delta} ; cool nozzle\nM104 S{first_layer_temperature[1]} T1 ; start heat next nozzle temperature\nG92 E0\nG1 X{print_bed_max[0]-28} Y1.9 E5.489 F1000\nG92 E0\nG1 E-3.5 F1200\nG0 X{print_bed_max[0]-20} Y3 F18000\nG0 X{print_bed_max[0]-15} Y10 Z3 F2400\n\nG0 X30 Y10 Z0.3 F7200\nG92 E0\nG1 E3.5 F1200\nG92 E0\nG0 Y110 E1.85 F1000\nG92 E0\nG1 E-{retract_length_toolchange[0]} F1200\nG0 Y150 F18000\nG0 Y{print_bed_max[1]} Z5 F18000\n\n; prime T1\nT1\nM109 S{first_layer_temperature[1]} T1 ; wait for nozzle temperature\nG90\nM82\nG0 X5 Y100 Z0.3 F7200\nG0 Y10 E1.9 F1000\nG0 Y2.5 F7200\nG92 E0\nG1 X{print_bed_max[0]-30} Y2.5 E5.553 F1000\nG0 X{print_bed_max[0]-30} Y2.9 F7200\nG92 E0\nG1 X10 Y2.9 E5.458 F1000\nG0 X10 Y3.3 F7200\nM104 S{temperature[1] + standby_temperature_delta} ; cool nozzle\nM104 S{first_layer_temperature[initial_extruder]} ; start heating initial nozzle\nG92 E0\nG1 X{print_bed_max[0]-28} Y3.3 E5.489 F1000\nG92 E0\nG1 E-3.5 F1200 ;retract just a little because we don't have a way to tell the slicer T1 filament position when it starts printing from E0\nG0 X{print_bed_max[0]-20} Y5 F18000\nG0 X{print_bed_max[0]-15} Y15 Z3 F2400\n\n;minus extruder1 offset X 22 which macro is not supported in start gcode\nG0 X{30+nozzle_diameter[1]-22} Y15 Z0.3 F7200\nG92 E0\nG1 E3.5 F1200\nG92 E0\nG0 Y115 E1.85 F1000\nG92 E0\nG1 E-3.5 F1200\nG0 Y150 F18000\nG0 Y{print_bed_max[1]} Z5 F18000\n\n; switch to initial nozzle\nT{initial_extruder}\nM109 S{first_layer_temperature[initial_extruder]} ; wait for nozzle temperature\nG0 X{print_bed_max[0]-30} Y5 Z10 F7200\nG0 X25 Y10 Z5\nG0 X25 Y20 Z0.3\nM82 ;absolute extrusion mode\nG92 E0\nG1 Y30 E{retract_length_toolchange[initial_extruder]} F1200 ;prime to set filament location for prusaslicer generated initial retract\nG92 E0\n\n;END Start-gcode
end_gcode = ;End-gcode\nM104 S0\nM104 S0 T0\nM104 S0 T1\nG0 X5 Y5 Z{max_print_height} F2000\nM140 S0\nM106 S0\nM84 ; disable motors\n
max_layer_height = 0.3
min_layer_height = 0.06
[printer:Ultimaker S3]
inherits = *common*; *sline*
printer_model = ULTIMAKERSline
bed_shape = 0x0,230x0,230x190,0x190
max_print_height = 200
printer_variant = 0.4
nozzle_diameter = 0.4,0.4
default_print_profile = 0.20mm NORMAL @ULTIMAKER
default_filament_profile = Generic PLA @ULTIMAKER
[printer:Ultimaker S5/S7]
inherits = *common*; *sline*
printer_model = ULTIMAKERSline
bed_shape = 0x0,330x0,330x240,0x240
max_print_height = 300
printer_variant = 0.4
nozzle_diameter = 0.4,0.4
default_print_profile = 0.20mm NORMAL @ULTIMAKER
default_filament_profile = Generic PLA @ULTIMAKER

View File

@ -1,3 +1,6 @@
min_slic3r_version = 2.8.0-alpha0
2.0.0 Updated for PS2.8.0.
max_slic3r_version = 2.7.9
min_slic3r_version = 2.6.0-alpha6 min_slic3r_version = 2.6.0-alpha6
1.0.4 Updated start g-code. Disabled autoemitting of temperature commands. 1.0.4 Updated start g-code. Disabled autoemitting of temperature commands.
1.0.3 Added Voron Switchwire. 1.0.3 Added Voron Switchwire.

File diff suppressed because it is too large Load Diff

View File

@ -1,2 +1,5 @@
min_slic3r_version = 2.8.0-alpha0
2.0.0 Updated for PS2.8.0.
max_slic3r_version = 2.7.9
min_slic3r_version = 2.4.1 min_slic3r_version = 2.4.1
1.0.0 Initial version 1.0.0 Initial version

View File

@ -3,18 +3,20 @@
# based on https://github.com/slic3r/slic3r-profiles/pull/19 by @ZONESTAR3D # based on https://github.com/slic3r/slic3r-profiles/pull/19 by @ZONESTAR3D
[vendor] [vendor]
repo_id = non-prusa-fff
# Vendor name will be shown by the Config Wizard. # Vendor name will be shown by the Config Wizard.
name = Zonestar name = Zonestar
# Configuration version of this file. Config file will only be installed, if the config_version differs. # Configuration version of this file. Config file will only be installed, if the config_version differs.
# This means, the server may force the PrusaSlicer configuration to be downgraded. # This means, the server may force the PrusaSlicer configuration to be downgraded.
config_version = 1.0.0 config_version = 2.0.0
# Where to get the updates from? # Where to get the updates from?
config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/Zonestar/ config_update_url = https://preset-repo-api.prusa3d.com/v1/repos/non-prusa-fff/Zonestar/
# The printer models will be shown by the Configuration Wizard in this order, # The printer models will be shown by the Configuration Wizard in this order,
# also the first model installed & the first nozzle installed will be activated after install. # also the first model installed & the first nozzle installed will be activated after install.
# Printer model name will be shown by the installation wizard. # Printer model name will be shown by the installation wizard.
config_url = https://preset-repo-api.prusa3d.com/v1/repos/non-prusa-fff/Zonestar/
[printer_model:Z5] [printer_model:Z5]
name = Zonestar Z5 name = Zonestar Z5
variants = 0.4 variants = 0.4
@ -23,6 +25,7 @@ bed_model = bed_220.stl
bed_texture = 220_texture.svg bed_texture = 220_texture.svg
default_materials = Generic PLA @Zonestar; Generic ABS @Zonestar; Generic PETG @Zonestar; Generic TPU @Zonestar default_materials = Generic PLA @Zonestar; Generic ABS @Zonestar; Generic PETG @Zonestar; Generic TPU @Zonestar
thumbnail = Z5_thumbnail.png
[printer_model:Z6] [printer_model:Z6]
name = Zonestar Z6 name = Zonestar Z6
variants = 0.4 variants = 0.4
@ -31,6 +34,7 @@ bed_model = bed_150.stl
bed_texture = 150_texture.svg bed_texture = 150_texture.svg
default_materials = Generic PLA @Zonestar; Generic ABS @Zonestar; Generic PETG @Zonestar; Generic TPU @Zonestar default_materials = Generic PLA @Zonestar; Generic ABS @Zonestar; Generic PETG @Zonestar; Generic TPU @Zonestar
thumbnail = Z6_thumbnail.png
[printer_model:Z5X] [printer_model:Z5X]
name = Zonestar Z5X name = Zonestar Z5X
variants = 0.4 variants = 0.4
@ -39,6 +43,7 @@ bed_model = bed_310.stl
bed_texture = 310_texture.svg bed_texture = 310_texture.svg
default_materials = Generic PLA @Zonestar; Generic ABS @Zonestar; Generic PETG @Zonestar; Generic TPU @Zonestar default_materials = Generic PLA @Zonestar; Generic ABS @Zonestar; Generic PETG @Zonestar; Generic TPU @Zonestar
thumbnail = Z5X_thumbnail.png
[printer_model:Z8] [printer_model:Z8]
name = Zonestar Z8 name = Zonestar Z8
variants = 0.4 variants = 0.4
@ -47,6 +52,7 @@ bed_model = bed_310.stl
bed_texture = 310_texture.svg bed_texture = 310_texture.svg
default_materials = Generic PLA @Zonestar; Generic ABS @Zonestar; Generic PETG @Zonestar; Generic TPU @Zonestar default_materials = Generic PLA @Zonestar; Generic ABS @Zonestar; Generic PETG @Zonestar; Generic TPU @Zonestar
thumbnail = Z8_thumbnail.png
[printer_model:Z9] [printer_model:Z9]
name = Zonestar Z9 name = Zonestar Z9
variants = 0.4 variants = 0.4
@ -59,6 +65,7 @@ default_materials = Generic PLA @Zonestar; Generic ABS @Zonestar; Generic PETG @
#### print #### #### print ####
################### ###################
thumbnail = Z9_thumbnail.png
[print:*common*] [print:*common*]
avoid_crossing_perimeters = 0 avoid_crossing_perimeters = 0
avoid_crossing_perimeters_max_detour = 0 avoid_crossing_perimeters_max_detour = 0
@ -741,4 +748,4 @@ retract_restart_extra = 0
retract_restart_extra_toolchange = 0 retract_restart_extra_toolchange = 0
retract_speed = 40 retract_speed = 40
start_gcode = M104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 ; home all axes\nG1 Z5 F3000 ; lift nozzle\nG1 X5 Y10 F1500 ; move to prime\nG1 Z0.2 F3000 ; get ready to prime\nG92 E0 ; reset extrusion distance\nG1 Y200 E15 F600 ; prime nozzle\nG1 Y100 F5000 ; quick wipe\nG92 E0 start_gcode = M104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 ; home all axes\nG1 Z5 F3000 ; lift nozzle\nG1 X5 Y10 F1500 ; move to prime\nG1 Z0.2 F3000 ; get ready to prime\nG92 E0 ; reset extrusion distance\nG1 Y200 E15 F600 ; prime nozzle\nG1 Y100 F5000 ; quick wipe\nG92 E0
use_relative_e_distances = 0 use_relative_e_distances = 0

View File

@ -1,3 +1,6 @@
min_slic3r_version = 2.8.0-alpha0
2.0.0 Updated for PS2.8.0.
max_slic3r_version = 2.7.9
min_slic3r_version = 2.4.0-alpha0 min_slic3r_version = 2.4.0-alpha0
1.0.1 Speed improvements, start gcode changes, added HIPS filament. 1.0.1 Speed improvements, start gcode changes, added HIPS filament.
1.0.0 Initial version 1.0.0 Initial version

File diff suppressed because it is too large Load Diff

View File

@ -342,7 +342,7 @@ template<class T>
struct NilValueTempl<T, std::enable_if_t<std::is_enum_v<T>, void>> struct NilValueTempl<T, std::enable_if_t<std::is_enum_v<T>, void>>
{ {
using NilType = T; using NilType = T;
static constexpr auto value = std::numeric_limits<std::underlying_type_t<T>>::max(); static constexpr auto value = static_cast<std::underlying_type_t<T>>(std::numeric_limits<std::underlying_type_t<T>>::max());
}; };
template<class T> struct NilValueTempl<T, std::enable_if_t<std::is_floating_point_v<T>, void>> { template<class T> struct NilValueTempl<T, std::enable_if_t<std::is_floating_point_v<T>, void>> {

View File

@ -156,6 +156,15 @@ VendorProfile VendorProfile::from_ini(const ptree &tree, const boost::filesystem
res.templates_profile = templates_profile->second.data() == "1"; res.templates_profile = templates_profile->second.data() == "1";
} }
const auto repo_id = vendor_section.find("repo_id");
if (repo_id != vendor_section.not_found()) {
res.repo_id = repo_id->second.data();
} else {
// For backward compatibility assume all profiles without repo_id are from "prod" repo
// DK: "No, dont!"
res.repo_id = "";
}
if (! load_all) { if (! load_all) {
return res; return res;
} }

View File

@ -39,6 +39,7 @@ public:
Semver config_version; Semver config_version;
std::string config_update_url; std::string config_update_url;
std::string changelog_url; std::string changelog_url;
std::string repo_id;
bool templates_profile { false }; bool templates_profile { false };
struct PrinterVariant { struct PrinterVariant {

View File

@ -126,6 +126,8 @@ set(SLIC3R_GUI_SOURCES
GUI/IconManager.hpp GUI/IconManager.hpp
GUI/MainFrame.cpp GUI/MainFrame.cpp
GUI/MainFrame.hpp GUI/MainFrame.hpp
GUI/UpdatesUIManager.cpp
GUI/UpdatesUIManager.hpp
GUI/FrequentlyChangedParameters.cpp GUI/FrequentlyChangedParameters.cpp
GUI/FrequentlyChangedParameters.hpp GUI/FrequentlyChangedParameters.hpp
GUI/Sidebar.cpp GUI/Sidebar.cpp
@ -315,6 +317,8 @@ set(SLIC3R_GUI_SOURCES
GUI/DownloaderFileGet.hpp GUI/DownloaderFileGet.hpp
GUI/LoginDialog.cpp GUI/LoginDialog.cpp
GUI/LoginDialog.hpp GUI/LoginDialog.hpp
GUI/PresetArchiveDatabase.cpp
GUI/PresetArchiveDatabase.hpp
Utils/AppUpdater.cpp Utils/AppUpdater.cpp
Utils/AppUpdater.hpp Utils/AppUpdater.hpp
Utils/Http.cpp Utils/Http.cpp

File diff suppressed because it is too large Load Diff

View File

@ -25,6 +25,12 @@ class PresetUpdater;
namespace GUI { namespace GUI {
class ConfigWizardLoadingDialog : public wxDialog
{
public:
ConfigWizardLoadingDialog(wxWindow* parent, const wxString& message);
};
namespace DownloaderUtils { namespace DownloaderUtils {
class Worker : public wxBoxSizer class Worker : public wxBoxSizer
{ {

View File

@ -97,7 +97,7 @@ struct BundleMap : std::map<std::string /* = vendor ID */, Bundle>
struct Materials; struct Materials;
class RepositoryUpdateUIManager;
struct PrinterPickerEvent; struct PrinterPickerEvent;
@ -120,6 +120,7 @@ struct PrinterPicker: wxPanel
}; };
const std::string vendor_id; const std::string vendor_id;
const std::string vendor_repo_id;
std::vector<Checkbox*> cboxes; std::vector<Checkbox*> cboxes;
std::vector<Checkbox*> cboxes_alt; std::vector<Checkbox*> cboxes_alt;
@ -183,6 +184,15 @@ struct PageWelcome: ConfigWizardPage
virtual void set_run_reason(ConfigWizard::RunReason run_reason) override; virtual void set_run_reason(ConfigWizard::RunReason run_reason) override;
}; };
struct PageUpdateManager : ConfigWizardPage
{
std::unique_ptr<RepositoryUpdateUIManager> manager;
wxStaticText* warning_text { nullptr };
bool is_active { false };
PageUpdateManager(ConfigWizard* parent);
};
struct PagePrinters: ConfigWizardPage struct PagePrinters: ConfigWizardPage
{ {
std::vector<PrinterPicker *> printer_pickers; std::vector<PrinterPicker *> printer_pickers;
@ -201,6 +211,10 @@ struct PagePrinters: ConfigWizardPage
std::set<std::string> get_selected_models(); std::set<std::string> get_selected_models();
std::string get_vendor_id() const { return printer_pickers.empty() ? "" : printer_pickers[0]->vendor_id; } std::string get_vendor_id() const { return printer_pickers.empty() ? "" : printer_pickers[0]->vendor_id; }
std::string get_vendor_repo_id() const { return printer_pickers.empty() ? "" : printer_pickers[0]->vendor_repo_id; }
// unselect all printers in appconfig_new and bundles
void unselect_all_presets();
virtual void set_run_reason(ConfigWizard::RunReason run_reason) override; virtual void set_run_reason(ConfigWizard::RunReason run_reason) override;
@ -472,7 +486,7 @@ struct PageMode: ConfigWizardPage
struct PageVendors: ConfigWizardPage struct PageVendors: ConfigWizardPage
{ {
PageVendors(ConfigWizard *parent); PageVendors(ConfigWizard *parent, std::string repos_id = std::string(), std::string name = std::string());
}; };
struct PageFirmware: ConfigWizardPage struct PageFirmware: ConfigWizardPage
@ -597,8 +611,8 @@ struct ConfigWizard::priv
PresetAliases aliases_fff; // Map of alias to material presets PresetAliases aliases_fff; // Map of alias to material presets
PresetAliases aliases_sla; // Map of alias to material presets PresetAliases aliases_sla; // Map of alias to material presets
std::unique_ptr<DynamicPrintConfig> custom_config; // Backing for custom printer definition std::unique_ptr<DynamicPrintConfig> custom_config; // Backing for custom printer definition
bool any_fff_selected; // Used to decide whether to display Filaments page bool any_fff_selected { false }; // Used to decide whether to display Filaments page
bool any_sla_selected; // Used to decide whether to display SLA Materials page bool any_sla_selected { false }; // Used to decide whether to display SLA Materials page
bool custom_printer_selected { false }; // New custom printer is requested bool custom_printer_selected { false }; // New custom printer is requested
bool custom_printer_in_bundle { false }; // Older custom printer already exists when wizard starts bool custom_printer_in_bundle { false }; // Older custom printer already exists when wizard starts
// Set to true if there are none FFF printers on the main FFF page. If true, only SLA printers are shown (not even custom printers) // Set to true if there are none FFF printers on the main FFF page. If true, only SLA printers are shown (not even custom printers)
@ -617,8 +631,7 @@ struct ConfigWizard::priv
wxButton *btn_cancel = nullptr; wxButton *btn_cancel = nullptr;
PageWelcome *page_welcome = nullptr; PageWelcome *page_welcome = nullptr;
PagePrinters *page_fff = nullptr; PageUpdateManager*page_update_manager = nullptr;
PagePrinters *page_msla = nullptr;
PageMaterials *page_filaments = nullptr; PageMaterials *page_filaments = nullptr;
PageMaterials *page_sla_materials = nullptr; PageMaterials *page_sla_materials = nullptr;
PageCustom *page_custom = nullptr; PageCustom *page_custom = nullptr;
@ -629,8 +642,6 @@ struct ConfigWizard::priv
PageFilesAssociation* page_files_association = nullptr; PageFilesAssociation* page_files_association = nullptr;
#endif // _WIN32 #endif // _WIN32
PageMode *page_mode = nullptr; PageMode *page_mode = nullptr;
PageVendors *page_vendors = nullptr;
Pages3rdparty pages_3rdparty;
// Custom setup pages // Custom setup pages
PageFirmware *page_firmware = nullptr; PageFirmware *page_firmware = nullptr;
@ -639,6 +650,22 @@ struct ConfigWizard::priv
PageTemperatures *page_temps = nullptr; PageTemperatures *page_temps = nullptr;
PageBuildVolume* page_bvolume = nullptr; PageBuildVolume* page_bvolume = nullptr;
std::vector<PagePrinters*> pages_fff;
std::vector<PagePrinters*> pages_msla;
struct Repository {
bool operator==(const std::string& other_id_name) const { return other_id_name == this->id_name; }
std::string id_name;
PageVendors* vendors_page{ nullptr };
Pages3rdparty printers_pages;
};
std::vector<Repository> repositories;
bool installed_multivendors_repos();
bool is_config_from_archive{ false };
// Pointers to all pages (regardless or whether currently part of the ConfigWizardIndex) // Pointers to all pages (regardless or whether currently part of the ConfigWizardIndex)
std::vector<ConfigWizardPage*> all_pages; std::vector<ConfigWizardPage*> all_pages;
@ -656,7 +683,7 @@ struct ConfigWizard::priv
void add_page(ConfigWizardPage *page); void add_page(ConfigWizardPage *page);
void enable_next(bool enable); void enable_next(bool enable);
void set_start_page(ConfigWizard::StartPage start_page); void set_start_page(ConfigWizard::StartPage start_page);
void create_3rdparty_pages(); void create_vendor_printers_page(const std::string& repo_id, const VendorProfile* vendor, bool install = false, bool from_single_vendor_repo = false);
void set_run_reason(RunReason run_reason); void set_run_reason(RunReason run_reason);
void update_materials(Technology technology); void update_materials(Technology technology);
@ -666,6 +693,10 @@ struct ConfigWizard::priv
void select_default_materials_for_printer_models(Technology technology, const std::set<const VendorProfile::PrinterModel*> &printer_models); void select_default_materials_for_printer_models(Technology technology, const std::set<const VendorProfile::PrinterModel*> &printer_models);
void on_3rdparty_install(const VendorProfile *vendor, bool install); void on_3rdparty_install(const VendorProfile *vendor, bool install);
bool can_finish();
bool can_go_next();
bool can_show_next();
bool can_select_all();
bool on_bnt_finish(); bool on_bnt_finish();
bool check_and_install_missing_materials(Technology technology, const std::string &only_for_model_id = std::string()); bool check_and_install_missing_materials(Technology technology, const std::string &only_for_model_id = std::string());
bool apply_config(AppConfig *app_config, PresetBundle *preset_bundle, const PresetUpdater *updater, bool& apply_keeped_changes); bool apply_config(AppConfig *app_config, PresetBundle *preset_bundle, const PresetUpdater *updater, bool& apply_keeped_changes);
@ -678,6 +709,17 @@ struct ConfigWizard::priv
bool check_sla_selected(); // Used to decide whether to display SLA Materials page bool check_sla_selected(); // Used to decide whether to display SLA Materials page
int em() const { return index->em(); } int em() const { return index->em(); }
void set_config_updated_from_archive(bool load_installed_printers, bool run_preset_updater);
Repository* get_repo(const std::string& repo_id);
// Fills vendors_for_repo in respect to repo_id
// and return true if any of vendors_for_repo is installed (is in app_config)
bool any_installed_vendor_for_repo(const std::string& repo_id, std::vector<const VendorProfile*>& );
bool can_clear_printer_pages();
void clear_printer_pages();
void load_pages_from_archive();
}; };
} }

View File

@ -13,6 +13,7 @@
#include "GUI_ObjectManipulation.hpp" #include "GUI_ObjectManipulation.hpp"
#include "GUI_Factories.hpp" #include "GUI_Factories.hpp"
#include "TopBar.hpp" #include "TopBar.hpp"
#include "UpdatesUIManager.hpp"
#include "format.hpp" #include "format.hpp"
// Localization headers: include libslic3r version first so everything in this file // Localization headers: include libslic3r version first so everything in this file
@ -102,6 +103,7 @@
#include "UserAccount.hpp" #include "UserAccount.hpp"
#include "WebViewDialog.hpp" #include "WebViewDialog.hpp"
#include "LoginDialog.hpp" #include "LoginDialog.hpp"
#include "PresetArchiveDatabase.hpp"
#include "BitmapCache.hpp" #include "BitmapCache.hpp"
//#include "Notebook.hpp" //#include "Notebook.hpp"
@ -832,9 +834,10 @@ void GUI_App::post_init()
return; return;
#endif #endif
CallAfter([this] { CallAfter([this] {
// preset_updater->sync downloads profile updates on background so it must begin after config wizard finished. // preset_updater->sync downloads profile updates and than via event checks updates and incompatible presets. We need to run it on startup.
// start before cw so it is canceled by cw if needed?
this->preset_updater->sync(preset_bundle, this, std::move(plater()->get_preset_archive_database()->get_selected_archive_repositories()));
bool cw_showed = this->config_wizard_startup(); bool cw_showed = this->config_wizard_startup();
this->preset_updater->sync(preset_bundle, this);
if (! cw_showed) { if (! cw_showed) {
// The CallAfter is needed as well, without it, GL extensions did not show. // The CallAfter is needed as well, without it, GL extensions did not show.
// Also, we only want to show this when the wizard does not, so the new user // Also, we only want to show this when the wizard does not, so the new user
@ -947,6 +950,113 @@ void GUI_App::init_app_config()
} }
} }
namespace {
// Copy ini file from resources to vendors if such file does not exists yet.
void copy_vendor_ini(const std::vector<std::string>& vendors)
{
for (const std::string &vendor : vendors) {
boost::system::error_code ec;
const boost::filesystem::path ini_in_resources = boost::filesystem::path( Slic3r::resources_dir() ) / "profiles" / (vendor + ".ini");
assert(boost::filesystem::exists(ini_in_resources));
const boost::filesystem::path ini_in_vendors = boost::filesystem::path(Slic3r::data_dir()) / "vendor" / (vendor + ".ini");
if (boost::filesystem::exists(ini_in_vendors, ec)) {
continue;
}
std::string message;
CopyFileResult cfr = copy_file(ini_in_resources.string(), ini_in_vendors.string(), message, false);
if (cfr != SUCCESS) {
BOOST_LOG_TRIVIAL(error) << "Failed to copy file " << ini_in_resources << " to " << ini_in_vendors << ": " << message;
}
}
}
}
void GUI_App::legacy_app_config_vendor_check()
{
// Expected state:
// User runs 2.8.0+ for the first time. They have Prusa SLA printers installed.
// Prusa SLA printers moved from PrusaResearch.ini to PrusaResearchSLA.ini
// We expect this is detected and fixed on the first run, when PrusaResearchSLA is not installed yet.
// Steps:
// Move the printers in appconfig to PrusaResearchSLA
// Moving the printers is not enough. The new ini PrusaResearchSLA needs to be installed.
// But we cannot install bundles without preset updater.
// So we just move it to the vendor folder. Since all profiles are named the same, it should not be a problem.
// Preset updater should be doing blocking update over PrusaResearch.ini. Then all should be ok.
std::map<std::string, std::vector<std::string>> moved_models;
moved_models["PrusaResearch"] = {"SL1", "SL1S"};
moved_models["Anycubic"] = {"PHOTON MONO", "PHOTON MONO SE", "PHOTON MONO X", "PHOTON MONO X 6K"};
std::map<std::string, std::string> vendors_from_to;
vendors_from_to["PrusaResearch"] = "PrusaResearchSLA";
vendors_from_to["Anycubic"] = "AnycubicSLA";
// resulting
std::vector<std::string> vendors_to_create;
const std::map<std::string, std::map<std::string, std::set<std::string>>>& vendor_map = app_config->vendors();
for (const auto& moved_models_of_vendor : moved_models) {
if (const auto &vendor_it = vendor_map.find(moved_models_of_vendor.first); vendor_it != vendor_map.end()) {
for (const std::string &model : moved_models_of_vendor.second) {
if (const auto &it = vendor_it->second.find(model); it != vendor_it->second.end()) {
vendors_to_create.emplace_back(vendors_from_to[moved_models_of_vendor.first]);
break;
}
}
}
}
if (vendors_to_create.empty()) {
// If there are no printers to move, also do check if "new" vendors really has ini file in vendor folder.
// In case of running older and current slicer back and forth, there might be vendors in appconfig without ini.
std::vector<std::string> vendors_to_check;
for (const auto &vendor_pair: vendors_from_to) {
if (vendor_map.find(vendor_pair.second) != vendor_map.end()) {
vendors_to_check.emplace_back(vendor_pair.second);
}
}
copy_vendor_ini(vendors_to_check);
return;
}
BOOST_LOG_TRIVIAL(warning) << "PrusaSlicer has found legacy SLA printers. The printers will be "
"moved to new vendor and its ini file will be installed. Configuration snapshot will be taken.";
// Take snapshot now, since creation of new vendors in appconfig, snapshots wont be compatible in older slicers.
// If any of the new vendors already is in appconfig, there is no reason to do a snapshot, it will fail or wont be compatible in previous version.
bool do_snapshot = true;
for (const std::string &vendor : vendors_to_create) {
if (vendor_map.find(vendor) != vendor_map.end()) {
do_snapshot = false;
break;
}
}
if (do_snapshot) {
GUI::Config::take_config_snapshot_report_error(*app_config, Config::Snapshot::SNAPSHOT_UPGRADE, "");
}
// make a deep copy of vendor map with moved printers
std::map<std::string, std::map<std::string, std::set<std::string>>> new_vendor_map;
for (const auto& vendor : vendor_map) {
for (const auto& model : vendor.second) {
if (vendors_from_to.find(vendor.first) != vendors_from_to.end() && std::find(moved_models[vendor.first].begin(), moved_models[vendor.first].end(), model.first) != moved_models[vendor.first].end()) {
// variants of models to be moved are placed under new vendor
for (const std::string& variant : model.second) {
new_vendor_map[vendors_from_to[vendor.first]][model.first].emplace(variant);
}
} else {
// rest is just copied
for (const std::string& variant : model.second) {
new_vendor_map[vendor.first][model.first].emplace(variant);
}
}
}
}
app_config->set_vendors(new_vendor_map);
// copy new vendors ini file to vendors
copy_vendor_ini(vendors_to_create);
}
// returns old config path to copy from if such exists, // returns old config path to copy from if such exists,
// returns an empty string if such config path does not exists or if it cannot be loaded. // returns an empty string if such config path does not exists or if it cannot be loaded.
std::string GUI_App::check_older_app_config(Semver current_version, bool backup) std::string GUI_App::check_older_app_config(Semver current_version, bool backup)
@ -1382,6 +1492,9 @@ bool GUI_App::on_init_inner()
if (is_editor()) if (is_editor())
mainframe->select_tab(size_t(0)); mainframe->select_tab(size_t(0));
// Call this check only after appconfig was loaded to mainframe, otherwise there will be duplicity error.
legacy_app_config_vendor_check();
sidebar().obj_list()->init_objects(); // propagate model objects to object list sidebar().obj_list()->init_objects(); // propagate model objects to object list
update_mode(); // mode sizer doesn't exist anymore, so we came update mode here, before load_current_presets update_mode(); // mode sizer doesn't exist anymore, so we came update mode here, before load_current_presets
SetTopWindow(mainframe); SetTopWindow(mainframe);
@ -2529,9 +2642,9 @@ wxMenu* GUI_App::get_config_menu()
case ConfigMenuWizard: case ConfigMenuWizard:
run_wizard(ConfigWizard::RR_USER); run_wizard(ConfigWizard::RR_USER);
break; break;
case ConfigMenuUpdateConf: case ConfigMenuUpdateConf:
check_updates(true); check_updates(true);
break; break;
case ConfigMenuUpdateApp: case ConfigMenuUpdateApp:
app_version_check(true); app_version_check(true);
break; break;
@ -2992,6 +3105,15 @@ void GUI_App::MacOpenURL(const wxString& url)
{ {
std::string narrow_url = into_u8(url); std::string narrow_url = into_u8(url);
if (boost::starts_with(narrow_url, "prusaslicer://open?file=")) { if (boost::starts_with(narrow_url, "prusaslicer://open?file=")) {
// This app config field applies only to downloading file
// (we need to handle login URL even if this flag is set off)
if (app_config && !app_config->get_bool("downloader_url_registered"))
{
notification_manager()->push_notification(NotificationType::URLNotRegistered);
BOOST_LOG_TRIVIAL(error) << "Recieved command to open URL, but it is not allowed in app configuration. URL: " << url;
return;
}
start_download(std::move(narrow_url)); start_download(std::move(narrow_url));
} else if (boost::starts_with(narrow_url, "prusaslicer://login")) { } else if (boost::starts_with(narrow_url, "prusaslicer://login")) {
plater()->get_user_account()->on_login_code_recieved(std::move(narrow_url)); plater()->get_user_account()->on_login_code_recieved(std::move(narrow_url));
@ -3127,27 +3249,48 @@ bool GUI_App::may_switch_to_SLA_preset(const wxString& caption)
bool GUI_App::run_wizard(ConfigWizard::RunReason reason, ConfigWizard::StartPage start_page) bool GUI_App::run_wizard(ConfigWizard::RunReason reason, ConfigWizard::StartPage start_page)
{ {
wxCHECK_MSG(mainframe != nullptr, false, "Internal error: Main frame not created / null"); wxCHECK_MSG(mainframe != nullptr, false, "Internal error: Main frame not created / null");
// Cancel sync before starting wizard to prevent two downloads at same time.
preset_updater->cancel_sync();
// Show login dialog before wizard.
#if 0 #if 0
if (!plater()->get_user_account()->is_logged()) { bool user_was_logged = plater()->get_user_account()->is_logged();
if (!user_was_logged) {
m_login_dialog = std::make_unique<LoginDialog>(mainframe, plater()->get_user_account()); m_login_dialog = std::make_unique<LoginDialog>(mainframe, plater()->get_user_account());
m_login_dialog->ShowModal(); m_login_dialog->ShowModal();
mainframe->RemoveChild(m_login_dialog.get()); mainframe->RemoveChild(m_login_dialog.get());
m_login_dialog->Destroy(); m_login_dialog->Destroy();
// Destructor does not call Destroy // Destructor does not call Destroy.
m_login_dialog.reset(); m_login_dialog.reset();
} }
#endif // 0 #endif // 0
if (reason == ConfigWizard::RR_USER) {
// Cancel sync before starting wizard to prevent two downloads at same time // ConfigWizard can take some time to start. Because it is a wxWidgets window, it has to be done
preset_updater->cancel_sync(); // in UI thread, so displaying a nice modal dialog and letting the CW start in a worker thread
// is not an option. Let's at least show a modeless dialog before the UI thread freezes.
auto cw_loading_dlg = new ConfigWizardLoadingDialog(mainframe, _L("Loading Configuration Wizard..."));
cw_loading_dlg->CenterOnParent();
cw_loading_dlg->Show();
wxYield();
// We have to update repos
plater()->get_preset_archive_database()->sync_blocking();
if (reason == ConfigWizard::RunReason::RR_USER) {
// Since there might be new repos, we need to sync preset updater
const SharedArchiveRepositoryVector &repos = plater()->get_preset_archive_database()->get_selected_archive_repositories();
preset_updater->sync_blocking(preset_bundle, this, repos);
preset_updater->update_index_db(); preset_updater->update_index_db();
if (preset_updater->config_update(app_config->orig_version(), PresetUpdater::UpdateParams::FORCED_BEFORE_WIZARD) == PresetUpdater::R_ALL_CANCELED) // Offer update installation.
return false; preset_updater->config_update(app_config->orig_version(), PresetUpdater::UpdateParams::SHOW_TEXT_BOX, repos);
} }
auto wizard = new ConfigWizard(mainframe); auto wizard = new ConfigWizard(mainframe);
cw_loading_dlg->Close();
const bool res = wizard->run(reason, start_page); const bool res = wizard->run(reason, start_page);
// !!! Deallocate memory after close ConfigWizard. // !!! Deallocate memory after close ConfigWizard.
// Note, that mainframe is a parent of ConfigWizard. // Note, that mainframe is a parent of ConfigWizard.
// So, wizard will be destroyed only during destroying of mainframe // So, wizard will be destroyed only during destroying of mainframe
@ -3162,7 +3305,6 @@ bool GUI_App::run_wizard(ConfigWizard::RunReason reason, ConfigWizard::StartPage
if (preset_bundle->printers.get_edited_preset().printer_technology() == ptSLA) if (preset_bundle->printers.get_edited_preset().printer_technology() == ptSLA)
may_switch_to_SLA_preset(_L("Configuration is editing from ConfigWizard")); may_switch_to_SLA_preset(_L("Configuration is editing from ConfigWizard"));
} }
return res; return res;
} }
@ -3367,12 +3509,27 @@ bool GUI_App::config_wizard_startup()
return false; return false;
} }
bool GUI_App::check_updates(const bool verbose) bool GUI_App::check_updates(const bool invoked_by_user)
{ {
if (invoked_by_user) {
// do preset_updater sync so if user runs slicer for a long time, check for updates actually delivers updates.
// for preset_updater sync we need to sync archive database first
plater()->get_preset_archive_database()->sync_blocking();
// Now re-extract offline repos
std::string extract_msg;
if (!plater()->get_preset_archive_database()->extract_archives_with_check(extract_msg)) {
extract_msg = GUI::format("%1%\n\n%2%", _L("Following repositories won't be updated:"), extract_msg);
show_error(nullptr, extract_msg);
}
// then its time for preset_updater sync
preset_updater->sync_blocking(preset_bundle, this, plater()->get_preset_archive_database()->get_selected_archive_repositories());
// and then we check updates
}
PresetUpdater::UpdateResult updater_result; PresetUpdater::UpdateResult updater_result;
try { try {
preset_updater->update_index_db(); preset_updater->update_index_db();
updater_result = preset_updater->config_update(app_config->orig_version(), verbose ? PresetUpdater::UpdateParams::SHOW_TEXT_BOX : PresetUpdater::UpdateParams::SHOW_NOTIFICATION); updater_result = preset_updater->config_update(app_config->orig_version(), invoked_by_user ? PresetUpdater::UpdateParams::SHOW_TEXT_BOX : PresetUpdater::UpdateParams::SHOW_NOTIFICATION, plater()->get_preset_archive_database()->get_selected_archive_repositories());
if (updater_result == PresetUpdater::R_INCOMPAT_EXIT) { if (updater_result == PresetUpdater::R_INCOMPAT_EXIT) {
mainframe->Close(); mainframe->Close();
// Applicaiton is closing. // Applicaiton is closing.
@ -3381,7 +3538,7 @@ bool GUI_App::check_updates(const bool verbose)
else if (updater_result == PresetUpdater::R_INCOMPAT_CONFIGURED) { else if (updater_result == PresetUpdater::R_INCOMPAT_CONFIGURED) {
m_app_conf_exists = true; m_app_conf_exists = true;
} }
else if (verbose && updater_result == PresetUpdater::R_NOOP) { else if (invoked_by_user && updater_result == PresetUpdater::R_NOOP) {
MsgNoUpdates dlg; MsgNoUpdates dlg;
dlg.ShowModal(); dlg.ShowModal();
} }

View File

@ -60,7 +60,7 @@ class Downloader;
struct GUI_InitParams; struct GUI_InitParams;
class GalleryDialog; class GalleryDialog;
class LoginDialog; class LoginDialog;
class PresetArchiveDatabase;
enum FileType enum FileType
{ {
@ -170,14 +170,14 @@ private:
OpenGLManager m_opengl_mgr; OpenGLManager m_opengl_mgr;
std::unique_ptr<RemovableDriveManager> m_removable_drive_manager; std::unique_ptr<RemovableDriveManager> m_removable_drive_manager;
std::unique_ptr<ImGuiWrapper> m_imgui;
std::unique_ptr<ImGuiWrapper> m_imgui; std::unique_ptr<PrintHostJobQueue> m_printhost_job_queue;
std::unique_ptr<PrintHostJobQueue> m_printhost_job_queue; std::unique_ptr<OtherInstanceMessageHandler> m_other_instance_message_handler;
std::unique_ptr <OtherInstanceMessageHandler> m_other_instance_message_handler; std::unique_ptr<AppUpdater> m_app_updater;
std::unique_ptr <AppUpdater> m_app_updater; std::unique_ptr<wxSingleInstanceChecker> m_single_instance_checker;
std::unique_ptr <wxSingleInstanceChecker> m_single_instance_checker; std::unique_ptr<Downloader> m_downloader;
std::unique_ptr <Downloader> m_downloader;
std::string m_instance_hash_string; std::string m_instance_hash_string;
size_t m_instance_hash_int; size_t m_instance_hash_int;
@ -433,6 +433,7 @@ private:
// returns old config path to copy from if such exists, // returns old config path to copy from if such exists,
// returns an empty string if such config path does not exists or if it cannot be loaded. // returns an empty string if such config path does not exists or if it cannot be loaded.
std::string check_older_app_config(Semver current_version, bool backup); std::string check_older_app_config(Semver current_version, bool backup);
void legacy_app_config_vendor_check();
void window_pos_save(wxTopLevelWindow* window, const std::string &name); void window_pos_save(wxTopLevelWindow* window, const std::string &name);
void window_pos_restore(wxTopLevelWindow* window, const std::string &name, bool default_maximized = false); void window_pos_restore(wxTopLevelWindow* window, const std::string &name, bool default_maximized = false);
void window_pos_sanitize(wxTopLevelWindow* window); void window_pos_sanitize(wxTopLevelWindow* window);
@ -441,7 +442,7 @@ private:
bool config_wizard_startup(); bool config_wizard_startup();
// Returns true if the configuration is fine. // Returns true if the configuration is fine.
// Returns true if the configuration is not compatible and the user decided to rather close the slicer instead of reconfiguring. // Returns true if the configuration is not compatible and the user decided to rather close the slicer instead of reconfiguring.
bool check_updates(const bool verbose); bool check_updates(const bool invoked_automatically);
void on_version_read(wxCommandEvent& evt); void on_version_read(wxCommandEvent& evt);
// if the data from version file are already downloaded, shows dialogs to start download of new version of app // if the data from version file are already downloaded, shows dialogs to start download of new version of app
void app_updater(bool from_user); void app_updater(bool from_user);

View File

@ -5,7 +5,8 @@
#include "libslic3r/Technologies.hpp" #include "libslic3r/Technologies.hpp"
#include "GUI_Init.hpp" #include "GUI_Init.hpp"
#include "libslic3r/AppConfig.hpp" #include "libslic3r/AppConfig.hpp"
#include "libslic3r/Utils/DirectoriesUtils.hpp"
#include "slic3r/GUI/GUI.hpp" #include "slic3r/GUI/GUI.hpp"
#include "slic3r/GUI/GUI_App.hpp" #include "slic3r/GUI/GUI_App.hpp"
@ -22,6 +23,9 @@
#include <boost/nowide/iostream.hpp> #include <boost/nowide/iostream.hpp>
#include <boost/nowide/convert.hpp> #include <boost/nowide/convert.hpp>
#include <boost/log/trivial.hpp>
#include <boost/log/expressions.hpp>
#include <boost/log/utility/setup/file.hpp>
#if __APPLE__ #if __APPLE__
#include <signal.h> #include <signal.h>
@ -45,6 +49,11 @@ int GUI_Run(GUI_InitParams &params)
signal(SIGCHLD, SIG_DFL); signal(SIGCHLD, SIG_DFL);
#endif // __APPLE__ #endif // __APPLE__
#ifdef SLIC3R_LOG_TO_FILE
auto sink = boost::log::add_file_log(get_default_datadir() + "/slicer.log");
sink->locked_backend()->auto_flush();
boost::log::core::get()->set_filter(boost::log::trivial::severity >= boost::log::trivial::info);
#endif // SLIC3R_LOG_TO_FILE
try { try {
GUI::GUI_App* gui = new GUI::GUI_App(params.start_as_gcodeviewer ? GUI::GUI_App::EAppMode::GCodeViewer : GUI::GUI_App::EAppMode::Editor); GUI::GUI_App* gui = new GUI::GUI_App(params.start_as_gcodeviewer ? GUI::GUI_App::EAppMode::GCodeViewer : GUI::GUI_App::EAppMode::Editor);
if (gui->get_app_mode() != GUI::GUI_App::EAppMode::GCodeViewer) { if (gui->get_app_mode() != GUI::GUI_App::EAppMode::GCodeViewer) {

View File

@ -124,6 +124,7 @@
#include "UserAccount.hpp" #include "UserAccount.hpp"
#include "DesktopIntegrationDialog.hpp" #include "DesktopIntegrationDialog.hpp"
#include "WebViewDialog.hpp" #include "WebViewDialog.hpp"
#include "PresetArchiveDatabase.hpp"
#ifdef __APPLE__ #ifdef __APPLE__
#include "Gizmos/GLGizmosManager.hpp" #include "Gizmos/GLGizmosManager.hpp"
@ -268,6 +269,7 @@ struct Plater::priv
Preview *preview; Preview *preview;
std::unique_ptr<NotificationManager> notification_manager; std::unique_ptr<NotificationManager> notification_manager;
std::unique_ptr<UserAccount> user_account; std::unique_ptr<UserAccount> user_account;
std::unique_ptr<PresetArchiveDatabase> preset_archive_database;
ProjectDirtyStateManager dirty_state; ProjectDirtyStateManager dirty_state;
@ -617,6 +619,7 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame)
, sidebar(new Sidebar(q)) , sidebar(new Sidebar(q))
, notification_manager(std::make_unique<NotificationManager>(q)) , notification_manager(std::make_unique<NotificationManager>(q))
, user_account(std::make_unique<UserAccount>(q, wxGetApp().app_config, wxGetApp().get_instance_hash_string())) , user_account(std::make_unique<UserAccount>(q, wxGetApp().app_config, wxGetApp().get_instance_hash_string()))
, preset_archive_database(std::make_unique<PresetArchiveDatabase>(wxGetApp().app_config, q))
, m_worker{q, std::make_unique<NotificationProgressIndicator>(notification_manager.get()), "ui_worker"} , m_worker{q, std::make_unique<NotificationProgressIndicator>(notification_manager.get()), "ui_worker"}
, m_sla_import_dlg{new SLAImportDialog{q}} , m_sla_import_dlg{new SLAImportDialog{q}}
, delayed_scene_refresh(false) , delayed_scene_refresh(false)
@ -780,7 +783,10 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame)
if (wxGetApp().is_editor()) { if (wxGetApp().is_editor()) {
this->q->Bind(EVT_EJECT_DRIVE_NOTIFICAION_CLICKED, [this](EjectDriveNotificationClickedEvent&) { this->q->eject_drive(); }); this->q->Bind(EVT_EJECT_DRIVE_NOTIFICAION_CLICKED, [this](EjectDriveNotificationClickedEvent&) { this->q->eject_drive(); });
this->q->Bind(EVT_EXPORT_GCODE_NOTIFICAION_CLICKED, [this](ExportGcodeNotificationClickedEvent&) { this->q->export_gcode(true); }); this->q->Bind(EVT_EXPORT_GCODE_NOTIFICAION_CLICKED, [this](ExportGcodeNotificationClickedEvent&) { this->q->export_gcode(true); });
this->q->Bind(EVT_PRESET_UPDATE_AVAILABLE_CLICKED, [](PresetUpdateAvailableClickedEvent&) { wxGetApp().get_preset_updater()->on_update_notification_confirm(); }); this->q->Bind(EVT_PRESET_UPDATE_AVAILABLE_CLICKED, [](PresetUpdateAvailableClickedEvent&) {
GUI_App &app = wxGetApp();
app.get_preset_updater()->on_update_notification_confirm(app.plater()->get_preset_archive_database()->get_selected_archive_repositories());
});
this->q->Bind(EVT_REMOVABLE_DRIVE_EJECTED, [this, q](RemovableDriveEjectEvent &evt) { this->q->Bind(EVT_REMOVABLE_DRIVE_EJECTED, [this, q](RemovableDriveEjectEvent &evt) {
if (evt.data.second) { if (evt.data.second) {
q->show_action_buttons(); q->show_action_buttons();
@ -895,11 +901,11 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame)
evt.Skip(); evt.Skip();
std::string username; std::string username;
if (user_account->on_user_id_success(evt.data, username)) { if (user_account->on_user_id_success(evt.data, username)) {
// login notification
std::string text = format(_u8L("Logged to Prusa Account as %1%."), username); std::string text = format(_u8L("Logged to Prusa Account as %1%."), username);
// login notification
this->notification_manager->close_notification_of_type(NotificationType::UserAccountID); this->notification_manager->close_notification_of_type(NotificationType::UserAccountID);
this->notification_manager->push_notification(NotificationType::UserAccountID, NotificationManager::NotificationLevel::ImportantNotificationLevel, text);
// show connect tab // show connect tab
this->notification_manager->push_notification(NotificationType::UserAccountID, NotificationManager::NotificationLevel::ImportantNotificationLevel, text);
this->main_frame->add_connect_webview_tab(); this->main_frame->add_connect_webview_tab();
// Update User name in TopBar // Update User name in TopBar
this->main_frame->refresh_account_menu(); this->main_frame->refresh_account_menu();
@ -907,6 +913,7 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame)
wxGetApp().update_login_dialog(); wxGetApp().update_login_dialog();
#endif // 0 #endif // 0
this->show_action_buttons(this->ready_to_slice); this->show_action_buttons(this->ready_to_slice);
} else { } else {
// data were corrupt and username was not retrieved // data were corrupt and username was not retrieved
// procced as if EVT_UA_RESET was recieved // procced as if EVT_UA_RESET was recieved
@ -932,7 +939,7 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame)
this->main_frame->refresh_account_menu(true); this->main_frame->refresh_account_menu(true);
// Update sidebar printer status // Update sidebar printer status
sidebar->update_printer_presets_combobox(); sidebar->update_printer_presets_combobox();
}); });
this->q->Bind(EVT_UA_FAIL, [this](UserAccountFailEvent& evt) { this->q->Bind(EVT_UA_FAIL, [this](UserAccountFailEvent& evt) {
BOOST_LOG_TRIVIAL(error) << "Failed communication with Prusa Account: " << evt.data; BOOST_LOG_TRIVIAL(error) << "Failed communication with Prusa Account: " << evt.data;
user_account->on_communication_fail(); user_account->on_communication_fail();
@ -6910,6 +6917,16 @@ const NotificationManager * Plater::get_notification_manager() const
return p->notification_manager.get(); return p->notification_manager.get();
} }
PresetArchiveDatabase* Plater::get_preset_archive_database()
{
return p->preset_archive_database.get();
}
const PresetArchiveDatabase* Plater::get_preset_archive_database() const
{
return p->preset_archive_database.get();
}
UserAccount* Plater::get_user_account() UserAccount* Plater::get_user_account()
{ {
return p->user_account.get(); return p->user_account.get();

View File

@ -63,6 +63,7 @@ class NotificationManager;
struct Camera; struct Camera;
class GLToolbar; class GLToolbar;
class UserAccount; class UserAccount;
class PresetArchiveDatabase;
class Plater: public wxPanel class Plater: public wxPanel
{ {
@ -358,6 +359,9 @@ public:
NotificationManager* get_notification_manager(); NotificationManager* get_notification_manager();
const NotificationManager* get_notification_manager() const; const NotificationManager* get_notification_manager() const;
PresetArchiveDatabase* get_preset_archive_database();
const PresetArchiveDatabase* get_preset_archive_database() const;
UserAccount* get_user_account(); UserAccount* get_user_account();
const UserAccount* get_user_account() const; const UserAccount* get_user_account() const;

View File

@ -0,0 +1,903 @@
#include "PresetArchiveDatabase.hpp"
#include "slic3r/Utils/Http.hpp"
#include "slic3r/GUI/format.hpp"
#include "slic3r/GUI/GUI_App.hpp"
#include "slic3r/GUI/Plater.hpp"
#include "slic3r/GUI/UserAccount.hpp"
#include "libslic3r/Utils.hpp"
#include "libslic3r/AppConfig.hpp"
#include "libslic3r/miniz_extension.hpp"
#include <boost/log/trivial.hpp>
#include <boost/filesystem/fstream.hpp>
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/json_parser.hpp>
#include <boost/uuid/uuid.hpp>
#include <boost/uuid/uuid_io.hpp>
#include <cctype>
#include <curl/curl.h>
#include <iostream>
#include <fstream>
namespace pt = boost::property_tree;
namespace fs = boost::filesystem;
namespace Slic3r {
namespace GUI {
static const char* TMP_EXTENSION = ".download";
namespace {
bool unzip_repository(const fs::path& source_path, const fs::path& target_path)
{
mz_zip_archive archive;
mz_zip_zero_struct(&archive);
if (!open_zip_reader(&archive, source_path.string())) {
BOOST_LOG_TRIVIAL(error) << "Couldn't open zipped Archive Repository. " << source_path;
return false;
}
size_t num_files = mz_zip_reader_get_num_files(&archive);
for (size_t i = 0; i < num_files; ++i) {
mz_zip_archive_file_stat file_stat;
if (!mz_zip_reader_file_stat(&archive, i, &file_stat)) {
BOOST_LOG_TRIVIAL(error) << "Failed to get file stat for file #" << i << " in the zip archive. Ending Unzipping.";
close_zip_reader(&archive);
return false;
}
fs::path extracted_path = target_path / file_stat.m_filename;
if (file_stat.m_is_directory) {
// Create directory if it doesn't exist
fs::create_directories(extracted_path);
continue;
}
// Create parent directory if it doesn't exist
fs::create_directories(extracted_path.parent_path());
// Extract file
if (!mz_zip_reader_extract_to_file(&archive, i, extracted_path.string().c_str(), 0)) {
BOOST_LOG_TRIVIAL(error) << "Failed to extract file #" << i << " from the zip archive. Ending Unzipping.";
close_zip_reader(&archive);
return false;
}
}
close_zip_reader(&archive);
return true;
}
bool extract_repository_header(const pt::ptree& ptree, ArchiveRepository::RepositoryManifest& data)
{
// mandatory atributes
if (const auto name = ptree.get_optional<std::string>("name"); name){
data.name = *name;
} else {
BOOST_LOG_TRIVIAL(error) << "Failed to find \"name\" parameter in repository manifest. Repository is invalid.";
return false;
}
if (const auto id = ptree.get_optional<std::string>("id"); id) {
data.id = *id;
}
else {
BOOST_LOG_TRIVIAL(error) << "Failed to find \"id\" parameter in repository manifest. Repository is invalid.";
return false;
}
if (const auto url = ptree.get_optional<std::string>("url"); url) {
data.url = *url;
}
else {
BOOST_LOG_TRIVIAL(error) << "Failed to find \"url\" parameter in repository manifest. Repository is invalid.";
return false;
}
// optional atributes
if (const auto index_url = ptree.get_optional<std::string>("index_url"); index_url) {
data.index_url = *index_url;
}
if (const auto description = ptree.get_optional<std::string>("description"); description) {
data.description = *description;
}
if (const auto visibility = ptree.get_optional<std::string>("visibility"); visibility) {
data.visibility = *visibility;
}
return true;
}
void delete_path_recursive(const fs::path& path)
{
try {
boost::system::error_code ec;
if (fs::exists(path, ec) && !ec) {
for (fs::directory_iterator it(path); it != fs::directory_iterator(); ++it) {
const fs::path subpath = it->path();
if (fs::is_directory(subpath)) {
delete_path_recursive(subpath);
} else {
fs::remove(subpath);
}
}
fs::remove(path);
}
}
catch (const std::exception& e) {
BOOST_LOG_TRIVIAL(error) << "Failed to delete files at: " << path;
}
}
bool extract_local_archive_repository( ArchiveRepository::RepositoryManifest& manifest_data)
{
assert(!manifest_data.tmp_path.empty());
assert(!manifest_data.source_path.empty());
// Delete previous data before unzip.
// We have unique path in temp set for whole run of slicer and in it folder for each repo.
delete_path_recursive(manifest_data.tmp_path);
fs::create_directories(manifest_data.tmp_path);
// Unzip repository zip to unique path in temp directory.
if (!unzip_repository(manifest_data.source_path, manifest_data.tmp_path)) {
return false;
}
// Read the manifest file.
fs::path manifest_path = manifest_data.tmp_path / "manifest.json";
try
{
pt::ptree ptree;
pt::read_json(manifest_path.string(), ptree);
if (!extract_repository_header(ptree, manifest_data)) {
BOOST_LOG_TRIVIAL(error) << "Failed to load repository: " << manifest_data.tmp_path;
return false;
}
}
catch (const std::exception& e)
{
BOOST_LOG_TRIVIAL(error) << "Failed to read repository manifest JSON " << manifest_path << ". reason: " << e.what();
return false;
}
return true;
}
void deserialize_string(const std::string& opt, std::vector<std::string>& result)
{
std::string val;
for (size_t i = 0; i < opt.length(); i++) {
if (std::isspace(opt[i])) {
continue;
}
if (opt[i] != ';') {
val += opt[i];
}
else {
result.emplace_back(std::move(val));
}
}
if (!val.empty()) {
result.emplace_back(std::move(val));
}
}
std::string escape_string(const std::string& unescaped)
{
std::string ret_val;
CURL* curl = curl_easy_init();
if (curl) {
char* decoded = curl_easy_escape(curl, unescaped.c_str(), unescaped.size());
if (decoded) {
ret_val = std::string(decoded);
curl_free(decoded);
}
curl_easy_cleanup(curl);
}
return ret_val;
}
std::string escape_path_by_element(const std::string& path_string)
{
const boost::filesystem::path path(path_string);
std::string ret_val = escape_string(path.filename().string());
boost::filesystem::path parent(path.parent_path());
while (!parent.empty() && parent.string() != "/") // "/" check is for case "/file.gcode" was inserted. Then boost takes "/" as parent_path.
{
ret_val = escape_string(parent.filename().string()) + "/" + ret_val;
parent = parent.parent_path();
}
return ret_val;
}
void add_authorization_header(Http& http)
{
const std::string access_token = GUI::wxGetApp().plater()->get_user_account()->get_access_token();
if (!access_token.empty()) {
http.header("Authorization", "Bearer " + access_token);
}
}
}
bool OnlineArchiveRepository::get_file_inner(const std::string& url, const fs::path& target_path) const
{
bool res = false;
fs::path tmp_path = target_path;
tmp_path += format(".%1%%2%", get_current_pid(), TMP_EXTENSION);
BOOST_LOG_TRIVIAL(info) << format("Get: `%1%`\n\t-> `%2%`\n\tvia tmp path `%3%`",
url,
target_path.string(),
tmp_path.string());
auto http = Http::get(url);
add_authorization_header(http);
http
.timeout_max(30)
.on_progress([](Http::Progress, bool& cancel) {
//if (cancel) { cancel = true; }
})
.on_error([&](std::string body, std::string error, unsigned http_status) {
BOOST_LOG_TRIVIAL(error) << format("Error getting: `%1%`: HTTP %2%, %3%",
url,
http_status,
body);
})
.on_complete([&](std::string body, unsigned /* http_status */) {
if (body.empty()) {
return;
}
fs::fstream file(tmp_path, std::ios::out | std::ios::binary | std::ios::trunc);
file.write(body.c_str(), body.size());
file.close();
fs::rename(tmp_path, target_path);
res = true;
})
.perform_sync();
return res;
}
bool OnlineArchiveRepository::get_archive(const fs::path& target_path) const
{
return get_file_inner(m_data.index_url.empty() ? m_data.url + "vendor_indices.zip" : m_data.index_url, target_path);
}
bool OnlineArchiveRepository::get_file(const std::string& source_subpath, const fs::path& target_path, const std::string& repository_id) const
{
if (repository_id != m_data.id) {
BOOST_LOG_TRIVIAL(error) << "Error getting file " << source_subpath << ". The repository_id was not matching.";
return false;
}
const std::string escaped_source_subpath = escape_path_by_element(source_subpath);
return get_file_inner(m_data.url + escaped_source_subpath, target_path);
}
bool OnlineArchiveRepository::get_ini_no_id(const std::string& source_subpath, const fs::path& target_path) const
{
const std::string escaped_source_subpath = escape_path_by_element(source_subpath);
return get_file_inner(m_data.url + escaped_source_subpath, target_path);
}
bool LocalArchiveRepository::get_file_inner(const fs::path& source_path, const fs::path& target_path) const
{
BOOST_LOG_TRIVIAL(debug) << format("Copying %1% to %2%", source_path, target_path);
std::string error_message;
CopyFileResult cfr = Slic3r::copy_file(source_path.string(), target_path.string(), error_message, false);
if (cfr != CopyFileResult::SUCCESS) {
BOOST_LOG_TRIVIAL(error) << "Copying of " << source_path << " to " << target_path << " has failed (" << cfr << "): " << error_message;
// remove target file, even if it was there before
boost::system::error_code ec;
if (fs::exists(target_path, ec) && !ec) {
ec.clear();
fs::remove(target_path, ec);
if (ec) {
BOOST_LOG_TRIVIAL(error) << format("Failed to delete file: %1%", ec.message());
}
}
return false;
}
// Permissions should be copied from the source file by copy_file(). We are not sure about the source
// permissions, let's rewrite them with 644.
static constexpr const auto perms = fs::owner_read | fs::owner_write | fs::group_read | fs::others_read;
fs::permissions(target_path, perms);
return true;
}
bool LocalArchiveRepository::get_file(const std::string& source_subpath, const fs::path& target_path, const std::string& repository_id) const
{
if (repository_id != m_data.id) {
BOOST_LOG_TRIVIAL(error) << "Error getting file " << source_subpath << ". The repository_id was not matching.";
return false;
}
return get_file_inner(m_data.tmp_path / source_subpath, target_path);
}
bool LocalArchiveRepository::get_ini_no_id(const std::string& source_subpath, const fs::path& target_path) const
{
return get_file_inner(m_data.tmp_path / source_subpath, target_path);
}
bool LocalArchiveRepository::get_archive(const fs::path& target_path) const
{
fs::path source_path = fs::path(m_data.tmp_path) / "vendor_indices.zip";
return get_file_inner(std::move(source_path), target_path);
}
void LocalArchiveRepository::do_extract()
{
RepositoryManifest new_manifest;
new_manifest.source_path = this->get_manifest().source_path;
new_manifest.tmp_path = this->get_manifest().tmp_path;
m_extracted = extract_local_archive_repository(new_manifest);
set_manifest(std::move(new_manifest));
}
//-------------------------------------PresetArchiveDatabase-------------------------------------------------------------------------------------------------------------------------
PresetArchiveDatabase::PresetArchiveDatabase(AppConfig* app_config, wxEvtHandler* evt_handler)
: p_evt_handler(evt_handler)
{
//
boost::system::error_code ec;
m_unq_tmp_path = fs::temp_directory_path() / fs::unique_path();
fs::create_directories(m_unq_tmp_path, ec);
assert(!ec);
load_app_manifest_json();
}
bool PresetArchiveDatabase::set_selected_repositories(const std::vector<std::string>& selected_uuids, std::string& msg)
{
// First re-extract locals, this will set is_extracted flag
extract_local_archives();
// Check if some uuids leads to the same id (online vs local conflict)
std::map<std::string, std::string> used_set;
for (const std::string& uuid : selected_uuids) {
std::string id;
std::string name;
for (const auto& archive : m_archive_repositories) {
if (archive->get_uuid() != uuid) {
continue;
}
id = archive->get_manifest().id;
name = archive->get_manifest().name;
if (!archive->is_extracted()) {
// non existent local repo since start selected
msg = GUI::format(
_L("Cannot select offline repository from path: %1%. It was not extracted."),
archive->get_manifest().source_path
);
return false;
}
break;
}
assert(!id.empty());
if (auto it = used_set.find(id); it != used_set.end()) {
msg = GUI::format(_L("Cannot select two repositories with the same id: %1% and %2%"), it->second, name);
return false;
}
used_set.emplace(id, name);
}
// deselect all first
for (auto& pair : m_selected_repositories_uuid) {
pair.second = false;
}
for (const std::string& uuid : selected_uuids) {
m_selected_repositories_uuid[uuid] = true;
}
save_app_manifest_json();
return true;
}
bool PresetArchiveDatabase::extract_archives_with_check(std::string &msg)
{
extract_local_archives();
for (auto &pair : m_selected_repositories_uuid) {
if (!pair.second) {
continue;
}
std::string uuid = pair.first;
auto compare_repo = [uuid](const std::unique_ptr<ArchiveRepository> &repo) {
return repo->get_uuid() == uuid;
};
const auto& archives_it =std::find_if(m_archive_repositories.begin(), m_archive_repositories.end(), compare_repo);
assert(archives_it != m_archive_repositories.end());
if (!archives_it->get()->is_extracted()) {
// non existent local repo since start selected
msg += GUI::format(
_L("Offline repository from path: %1% was not extracted.\n"),
archives_it->get()->get_manifest().source_path
);
}
}
return msg.empty();
}
void PresetArchiveDatabase::set_installed_printer_repositories(const std::vector<std::string> &used_ids)
{
// set all uuids as not having installed printer
m_has_installed_printer_repositories_uuid.clear();
for (const auto &archive : m_archive_repositories) {
m_has_installed_printer_repositories_uuid.emplace(archive->get_uuid(), false);
}
// set correct repos as having installed printer
for (const std::string &used_id : used_ids) {
// find archive with id and is used
for (const auto &archive : m_archive_repositories) {
if (archive->get_manifest().id != used_id) {
continue;
}
const std::string uuid = archive->get_uuid();
const auto& it = m_selected_repositories_uuid.find(uuid);
assert(it != m_selected_repositories_uuid.end());
if (it->second == false) {
continue;
}
// set archive as has installed printer
m_has_installed_printer_repositories_uuid[uuid] = true;
}
}
save_app_manifest_json();
}
std::string PresetArchiveDatabase::add_local_archive(const boost::filesystem::path path, std::string& msg)
{
if (auto it = std::find_if(m_archive_repositories.begin(), m_archive_repositories.end(), [path](const std::unique_ptr<ArchiveRepository>& ptr) {
return ptr->get_manifest().source_path == path;
}); it != m_archive_repositories.end())
{
msg = GUI::format(_L("Failed to add local archive %1%. Path already used."), path);
BOOST_LOG_TRIVIAL(error) << msg;
return std::string();
}
std::string uuid = get_next_uuid();
ArchiveRepository::RepositoryManifest header_data;
header_data.source_path = path;
header_data.tmp_path = m_unq_tmp_path / uuid;
if (!extract_local_archive_repository(header_data)) {
msg = GUI::format(_L("Failed to extract local archive %1%."), path);
BOOST_LOG_TRIVIAL(error) << msg;
return std::string();
}
// Solve if it can be set true first.
m_selected_repositories_uuid[uuid] = false;
m_has_installed_printer_repositories_uuid[uuid] = false;
m_archive_repositories.emplace_back(std::make_unique<LocalArchiveRepository>(uuid, std::move(header_data), true));
save_app_manifest_json();
return uuid;
}
void PresetArchiveDatabase::remove_local_archive(const std::string& uuid)
{
auto compare_repo = [uuid](const std::unique_ptr<ArchiveRepository>& repo) {
return repo->get_uuid() == uuid;
};
auto archives_it = std::find_if(m_archive_repositories.begin(), m_archive_repositories.end(), compare_repo);
assert(archives_it != m_archive_repositories.end());
std::string removed_uuid = archives_it->get()->get_uuid();
m_archive_repositories.erase(archives_it);
auto used_it = m_selected_repositories_uuid.find(removed_uuid);
assert(used_it != m_selected_repositories_uuid.end());
m_selected_repositories_uuid.erase(used_it);
auto inst_it = m_has_installed_printer_repositories_uuid.find(removed_uuid);
assert(inst_it != m_has_installed_printer_repositories_uuid.end());
m_has_installed_printer_repositories_uuid.erase(inst_it);
save_app_manifest_json();
}
void PresetArchiveDatabase::extract_local_archives()
{
for (auto &archive : m_archive_repositories) {
archive->do_extract();
}
}
void PresetArchiveDatabase::load_app_manifest_json()
{
const fs::path path = get_stored_manifest_path();
boost::system::error_code ec;
if (!fs::exists(path, ec) || ec) {
copy_initial_manifest();
}
std::ifstream file(path.string());
std::string data;
if (file.is_open()) {
std::string line;
while (getline(file, line)) {
data += line;
}
file.close();
}
else {
assert(true);
BOOST_LOG_TRIVIAL(error) << "Failed to read Archive Repository Manifest at " << path;
}
if (data.empty()) {
return;
}
m_archive_repositories.clear();
m_selected_repositories_uuid.clear();
m_has_installed_printer_repositories_uuid.clear();
try
{
std::stringstream ss(data);
pt::ptree ptree;
pt::read_json(ss, ptree);
for (const auto& subtree : ptree) {
// if has tmp_path its local repo else its online repo (manifest is written in its zip, not in our json)
if (const auto source_path = subtree.second.get_optional<std::string>("source_path"); source_path) {
ArchiveRepository::RepositoryManifest manifest;
std::string uuid = get_next_uuid();
manifest.source_path = boost::filesystem::path(*source_path);
manifest.tmp_path = m_unq_tmp_path / uuid;
bool extracted = extract_local_archive_repository(manifest);
// "selected" flag
if(const auto used = subtree.second.get_optional<bool>("selected"); used) {
m_selected_repositories_uuid[uuid] = extracted && *used;
} else {
assert(true);
m_selected_repositories_uuid[uuid] = extracted;
}
// "has_installed_printers" flag
if (const auto used = subtree.second.get_optional<bool>("has_installed_printers"); used) {
m_has_installed_printer_repositories_uuid[uuid] = extracted && *used;
} else {
assert(true);
m_has_installed_printer_repositories_uuid[uuid] = false;
}
m_archive_repositories.emplace_back(std::make_unique<LocalArchiveRepository>(std::move(uuid), std::move(manifest), extracted));
continue;
}
// online repo
ArchiveRepository::RepositoryManifest manifest;
std::string uuid = get_next_uuid();
if (!extract_repository_header(subtree.second, manifest)) {
assert(true);
BOOST_LOG_TRIVIAL(error) << "Failed to read one of repository headers.";
continue;
}
// "selected" flag
if (const auto used = subtree.second.get_optional<bool>("selected"); used) {
m_selected_repositories_uuid[uuid] = *used;
} else {
assert(true);
m_selected_repositories_uuid[uuid] = true;
}
// "has_installed_printers" flag
if (const auto used = subtree.second.get_optional<bool>("has_installed_printers"); used) {
m_has_installed_printer_repositories_uuid[uuid] = *used;
} else {
assert(true);
m_has_installed_printer_repositories_uuid[uuid] = false;
}
m_archive_repositories.emplace_back(std::make_unique<OnlineArchiveRepository>(std::move(uuid), std::move(manifest)));
}
}
catch (const std::exception& e)
{
BOOST_LOG_TRIVIAL(error) << "Failed to read archives JSON. " << e.what();
}
}
void PresetArchiveDatabase::copy_initial_manifest()
{
const fs::path target_path = get_stored_manifest_path();
const fs::path source_path = fs::path(resources_dir()) / "profiles" / "ArchiveRepositoryManifest.json";
assert(fs::exists(source_path));
std::string error_message;
CopyFileResult cfr = Slic3r::copy_file(source_path.string(), target_path.string(), error_message, false);
assert(cfr == CopyFileResult::SUCCESS);
if (cfr != CopyFileResult::SUCCESS) {
BOOST_LOG_TRIVIAL(error) << "Failed to copy ArchiveRepositoryManifest.json from resources.";
return;
}
static constexpr const auto perms = fs::owner_read | fs::owner_write | fs::group_read | fs::others_read;
fs::permissions(target_path, perms);
}
void PresetArchiveDatabase::save_app_manifest_json() const
{
/*
[{
"name": "Production",
"description": "Production repository",
"visibility": null,
"id": "prod",
"url": "http://10.24.3.3:8001/v1/repos/prod",
"index_url": "http://10.24.3.3:8001/v1/repos/prod/vendor_indices.zip"
"selected": 1
"has_installed_printers": 1
}, {
"name": "Development",
"description": "Production repository",
"visibility": "developers only",
"id": "dev",
"url": "http://10.24.3.3:8001/v1/repos/dev",
"index_url": "http://10.24.3.3:8001/v1/repos/dev/vendor_indices.zip"
"selected": 0
"has_installed_printers": 0
}]
*/
std::string data = "[";
for (const auto& archive : m_archive_repositories) {
// local writes only source_path and "selected". Rest is read from zip on source_path.
if (!archive->get_manifest().tmp_path.empty()) {
const ArchiveRepository::RepositoryManifest& man = archive->get_manifest();
std::string line = archive == m_archive_repositories.front() ? std::string() : ",";
line += GUI::format(
"{"
"\"source_path\": \"%1%\","
"\"selected\": %2%,"
"\"has_installed_printers\": %3%"
"}",
man.source_path.generic_string()
, is_selected(archive->get_uuid()) ? "1" : "0"
, has_installed_printers(archive->get_uuid()) ? "1" : "0"
);
data += line;
continue;
}
// online repo writes whole manifest - in case of offline run, this info is load from here
const ArchiveRepository::RepositoryManifest& man = archive->get_manifest();
std::string line = archive == m_archive_repositories.front() ? std::string() : ",";
line += GUI::format(
"{\"name\": \"%1%\","
"\"description\": \"%2%\","
"\"visibility\": \"%3%\","
"\"id\": \"%4%\","
"\"url\": \"%5%\","
"\"index_url\": \"%6%\","
"\"selected\": %7%,"
"\"has_installed_printers\": %8%"
"}"
, man.name, man.description
, man. visibility
, man.id
, man.url
, man.index_url
, is_selected(archive->get_uuid()) ? "1" : "0"
, has_installed_printers(archive->get_uuid()) ? "1" : "0"
);
data += line;
}
data += "]";
std::string path = get_stored_manifest_path().string();
std::ofstream file(path);
if (file.is_open()) {
file << data;
file.close();
} else {
assert(true);
BOOST_LOG_TRIVIAL(error) << "Failed to write Archive Repository Manifest to " << path;
}
}
fs::path PresetArchiveDatabase::get_stored_manifest_path() const
{
return (boost::filesystem::path(Slic3r::data_dir()) / "ArchiveRepositoryManifest.json").make_preferred();
}
bool PresetArchiveDatabase::is_selected(const std::string& uuid) const
{
auto search = m_selected_repositories_uuid.find(uuid);
assert(search != m_selected_repositories_uuid.end());
return search->second;
}
bool PresetArchiveDatabase::has_installed_printers(const std::string &uuid) const
{
auto search = m_has_installed_printer_repositories_uuid.find(uuid);
assert(search != m_has_installed_printer_repositories_uuid.end());
return search->second;
}
void PresetArchiveDatabase::clear_online_repos()
{
auto it = m_archive_repositories.begin();
while (it != m_archive_repositories.end()) {
// Do not clean repos with local path (local repo) and with visibility filled (secret repo)
if ((*it)->get_manifest().tmp_path.empty()) {
it = m_archive_repositories.erase(it);
} else {
++it;
}
}
}
void PresetArchiveDatabase::read_server_manifest(const std::string& json_body)
{
pt::ptree ptree;
try
{
std::stringstream ss(json_body);
pt::read_json(ss, ptree);
}
catch (const std::exception& e)
{
BOOST_LOG_TRIVIAL(error) << "Failed to read archives JSON. " << e.what();
}
// Online repo manifests are in json_body. We already have read local manifest and online manifest from last run.
// Keep the local ones and replace the online ones but keep uuid for same id so the selected map is correct.
// Solution: Create id - uuid translate table for online repos.
std::map<std::string, std::string> id_to_uuid;
for (const auto& repo_ptr : m_archive_repositories) {
if (repo_ptr->get_manifest().source_path.empty()){
id_to_uuid[repo_ptr->get_manifest().id] = repo_ptr->get_uuid();
}
}
// Make a stash of secret repos that are online and has installed printers.
// If some of these will be missing afer reading the json tree, it needs to be added back to main population.
PrivateArchiveRepositoryVector secret_online_used_repos_cache;
for (const auto &repo_ptr : m_archive_repositories) {
if (repo_ptr->get_manifest().visibility.empty() || !repo_ptr->get_manifest().tmp_path.empty()) {
continue;
}
const auto &it = m_has_installed_printer_repositories_uuid.find(repo_ptr->get_uuid());
assert(it != m_has_installed_printer_repositories_uuid.end());
if (it->second) {
ArchiveRepository::RepositoryManifest manifest(repo_ptr->get_manifest());
secret_online_used_repos_cache.emplace_back(std::make_unique<OnlineArchiveRepository>(repo_ptr->get_uuid(), std::move(manifest)));
}
}
clear_online_repos();
for (const auto& subtree : ptree) {
ArchiveRepository::RepositoryManifest manifest;
if (!extract_repository_header(subtree.second, manifest)) {
assert(true);
BOOST_LOG_TRIVIAL(error) << "Failed to read one of repository headers.";
continue;
}
auto id_it = id_to_uuid.find(manifest.id);
std::string uuid = (id_it == id_to_uuid.end() ? get_next_uuid() : id_it->second);
// Set default selected value to true - its a never before seen repository
if (auto search = m_selected_repositories_uuid.find(uuid); search == m_selected_repositories_uuid.end()) {
m_selected_repositories_uuid[uuid] = true;
}
// Set default "has installed printers" value to false - its a never before seen repository
if (auto search = m_has_installed_printer_repositories_uuid.find(uuid);
search == m_has_installed_printer_repositories_uuid.end()) {
m_has_installed_printer_repositories_uuid[uuid] = false;
}
m_archive_repositories.emplace_back(std::make_unique<OnlineArchiveRepository>(uuid, std::move(manifest)));
}
// return missing secret online repos with installed printers to the vector
for (const auto &repo_ptr : secret_online_used_repos_cache) {
std::string uuid = repo_ptr->get_uuid();
if (std::find_if(
m_archive_repositories.begin(), m_archive_repositories.end(),
[uuid](const std::unique_ptr<ArchiveRepository> &ptr) {
return ptr->get_uuid() == uuid;
}
) == m_archive_repositories.end())
{
ArchiveRepository::RepositoryManifest manifest(repo_ptr->get_manifest());
m_archive_repositories.emplace_back(std::make_unique<OnlineArchiveRepository>(repo_ptr->get_uuid(), std::move(manifest)));
}
}
consolidate_uuid_maps();
save_app_manifest_json();
}
SharedArchiveRepositoryVector PresetArchiveDatabase::get_all_archive_repositories() const
{
SharedArchiveRepositoryVector result;
result.reserve(m_archive_repositories.size());
for (const auto &repo_ptr : m_archive_repositories)
{
result.emplace_back(repo_ptr.get());
}
return result;
}
SharedArchiveRepositoryVector PresetArchiveDatabase::get_selected_archive_repositories() const
{
SharedArchiveRepositoryVector result;
result.reserve(m_archive_repositories.size());
for (const auto &repo_ptr : m_archive_repositories)
{
auto it = m_selected_repositories_uuid.find(repo_ptr->get_uuid());
assert(it != m_selected_repositories_uuid.end());
if (it->second) {
result.emplace_back(repo_ptr.get());
}
}
return result;
}
bool PresetArchiveDatabase::is_selected_repository_by_uuid(const std::string& uuid) const
{
auto selected_it = m_selected_repositories_uuid.find(uuid);
assert(selected_it != m_selected_repositories_uuid.end());
return selected_it->second;
}
bool PresetArchiveDatabase::is_selected_repository_by_id(const std::string& repo_id) const
{
assert(!repo_id.empty());
for (const auto& repo_ptr : m_archive_repositories) {
if (repo_ptr->get_manifest().id == repo_id) {
return true;
}
}
return false;
}
void PresetArchiveDatabase::consolidate_uuid_maps()
{
//std::vector<std::unique_ptr<ArchiveRepository>> m_archive_repositories;
//std::map<std::string, bool> m_selected_repositories_uuid;
auto selected_it = m_selected_repositories_uuid.begin();
while (selected_it != m_selected_repositories_uuid.end()) {
bool found = false;
for (const auto& repo_ptr : m_archive_repositories) {
if (repo_ptr->get_uuid() == selected_it->first) {
found = true;
break;
}
}
if (!found) {
selected_it = m_selected_repositories_uuid.erase(selected_it);
} else {
++selected_it;
}
}
// Do the same for m_has_installed_printer_repositories_uuid
auto installed_it = m_has_installed_printer_repositories_uuid.begin();
while (installed_it != m_has_installed_printer_repositories_uuid.end()) {
bool found = false;
for (const auto &repo_ptr : m_archive_repositories) {
if (repo_ptr->get_uuid() == installed_it->first) {
found = true;
break;
}
}
if (!found) {
installed_it = m_has_installed_printer_repositories_uuid.erase(installed_it);
} else {
++installed_it;
}
}
}
std::string PresetArchiveDatabase::get_next_uuid()
{
boost::uuids::uuid uuid = m_uuid_generator();
return boost::uuids::to_string(uuid);
}
namespace {
bool sync_inner(std::string& manifest)
{
bool ret = false;
#ifdef SLIC3R_REPO_URL
std::string url = SLIC3R_REPO_URL;
#else
std::string url = "https://preset-repo-api.prusa3d.com/v1/repos";
#endif
auto http = Http::get(std::move(url));
add_authorization_header(http);
http
.timeout_max(30)
.on_error([&](std::string body, std::string error, unsigned http_status) {
BOOST_LOG_TRIVIAL(error) << "Failed to get online archive repository manifests: "<< body << " ; " << error << " ; " << http_status;
ret = false;
})
.on_complete([&](std::string body, unsigned /* http_status */) {
manifest = body;
ret = true;
})
.perform_sync();
return ret;
}
}
void PresetArchiveDatabase::sync_blocking()
{
BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << " " << std::this_thread::get_id();
std::string manifest;
if (!sync_inner(manifest))
return;
read_server_manifest(std::move(manifest));
}
}} // Slic3r::GUI

View File

@ -0,0 +1,185 @@
#ifndef slic3r_PresetArchiveDatabase_hpp_
#define slic3r_PresetArchiveDatabase_hpp_
#include "Event.hpp"
#include <boost/uuid/uuid_generators.hpp>
#include <boost/filesystem.hpp>
#include <string>
#include <vector>
#include <map>
#include <memory>
namespace Slic3r {
class AppConfig;
namespace GUI {
struct ArchiveRepositoryGetFileArgs {
boost::filesystem::path target_path;
std::string repository_id;
};
class ArchiveRepository
{
public:
struct RepositoryManifest {
// mandatory
std::string id;
std::string name;
std::string url;
// optional
std::string index_url;
std::string description;
std::string visibility;
// not read from manifest json
boost::filesystem::path tmp_path; // Where archive is unzziped. Created each app run.
boost::filesystem::path source_path; // Path given by user. Stored between app runs.
RepositoryManifest() = default;
RepositoryManifest(
const std::string &id,
const std::string &name,
const std::string &url,
const std::string &index_url = "",
const std::string &description = "",
const std::string &visibility = "",
const boost::filesystem::path &tmp_path = "",
const boost::filesystem::path &source_path = ""
)
: id(id)
, name(name)
, url(url)
, index_url(index_url)
, description(description)
, visibility(visibility)
, tmp_path(tmp_path)
, source_path(source_path)
{}
RepositoryManifest(const RepositoryManifest &other)
: id(other.id)
, name(other.name)
, url(other.url)
, index_url(other.index_url)
, description(other.description)
, visibility(other.visibility)
, tmp_path(other.tmp_path)
, source_path(other.source_path)
{}
};
// Use std::move when calling constructor.
ArchiveRepository(const std::string& uuid, RepositoryManifest&& data)
: m_data(std::move(data))
, m_uuid(uuid)
{}
virtual ~ArchiveRepository() {}
// Gets vendor_indices.zip to target_path
virtual bool get_archive(const boost::filesystem::path& target_path) const = 0;
// Gets file if repository_id arg matches m_id.
// Should be used to get the most recent ini file and every missing resource.
virtual bool get_file(const std::string& source_subpath, const boost::filesystem::path& target_path, const std::string& repository_id) const = 0;
// Gets file without id check - for not yet encountered vendors only!
virtual bool get_ini_no_id(const std::string& source_subpath, const boost::filesystem::path& target_path) const = 0;
const RepositoryManifest& get_manifest() const { return m_data; }
std::string get_uuid() const { return m_uuid; }
// Only local archvies can return false
virtual bool is_extracted() const { return true; }
virtual void do_extract() {}
void set_manifest(RepositoryManifest &&manifest) { m_data = std::move(manifest); }
protected:
RepositoryManifest m_data;
std::string m_uuid;
};
class OnlineArchiveRepository : public ArchiveRepository
{
public:
OnlineArchiveRepository(const std::string& uuid, RepositoryManifest&& data) : ArchiveRepository(uuid, std::move(data))
{
if (m_data.url.back() != '/') {
m_data.url += "/";
}
}
// Gets vendor_indices.zip to target_path.
bool get_archive(const boost::filesystem::path& target_path) const override;
// Gets file if repository_id arg matches m_id.
// Should be used to get the most recent ini file and every missing resource.
bool get_file(const std::string& source_subpath, const boost::filesystem::path& target_path, const std::string& repository_id) const override;
// Gets file without checking id.
// Should be used only if no previous ini file exists.
bool get_ini_no_id(const std::string& source_subpath, const boost::filesystem::path& target_path) const override;
private:
bool get_file_inner(const std::string& url, const boost::filesystem::path& target_path) const;
};
class LocalArchiveRepository : public ArchiveRepository
{
public:
LocalArchiveRepository(const std::string& uuid, RepositoryManifest&& data, bool extracted) : ArchiveRepository(uuid, std::move(data)), m_extracted(extracted)
{}
// Gets vendor_indices.zip to target_path.
bool get_archive(const boost::filesystem::path& target_path) const override;
// Gets file if repository_id arg matches m_id.
// Should be used to get the most recent ini file and every missing resource.
bool get_file(const std::string& source_subpath, const boost::filesystem::path& target_path, const std::string& repository_id) const override;
// Gets file without checking id.
// Should be used only if no previous ini file exists.
bool get_ini_no_id(const std::string& source_subpath, const boost::filesystem::path& target_path) const override;
bool is_extracted() const override { return m_extracted; }
void do_extract() override;
private:
bool get_file_inner(const boost::filesystem::path& source_path, const boost::filesystem::path& target_path) const;
bool m_extracted;
};
typedef std::vector<std::unique_ptr<ArchiveRepository>> PrivateArchiveRepositoryVector;
typedef std::vector<const ArchiveRepository*> SharedArchiveRepositoryVector;
class PresetArchiveDatabase
{
public:
PresetArchiveDatabase(AppConfig* app_config, wxEvtHandler* evt_handler);
~PresetArchiveDatabase() {}
void sync_blocking();
// Do not use get_all_archive_repositories to perform any GET calls. Use get_selected_archive_repositories instead.
SharedArchiveRepositoryVector get_all_archive_repositories() const;
// Creates copy of m_archive_repositories of shared pointers that are selected in m_selected_repositories_uuid.
SharedArchiveRepositoryVector get_selected_archive_repositories() const;
bool is_selected_repository_by_uuid(const std::string& uuid) const;
bool is_selected_repository_by_id(const std::string& repo_id) const;
const std::map<std::string, bool>& get_selected_repositories_uuid() const { assert(m_selected_repositories_uuid.size() == m_archive_repositories.size()); return m_selected_repositories_uuid; }
// Does re-extract all local archives
bool set_selected_repositories(const std::vector<std::string>& used_uuids, std::string& msg);
void set_installed_printer_repositories(const std::vector<std::string> &used_ids);
std::string add_local_archive(const boost::filesystem::path path, std::string& msg);
void remove_local_archive(const std::string& uuid);
bool extract_archives_with_check(std::string &msg);
private:
void load_app_manifest_json();
void copy_initial_manifest();
void read_server_manifest(const std::string& json_body);
void save_app_manifest_json() const;
void clear_online_repos();
bool is_selected(const std::string& uuid) const;
bool has_installed_printers(const std::string &uuid) const;
boost::filesystem::path get_stored_manifest_path() const;
void consolidate_uuid_maps();
void extract_local_archives();
std::string get_next_uuid();
wxEvtHandler* p_evt_handler;
boost::filesystem::path m_unq_tmp_path;
PrivateArchiveRepositoryVector m_archive_repositories;
std::map<std::string, bool> m_selected_repositories_uuid;
std::map<std::string, bool> m_has_installed_printer_repositories_uuid;
boost::uuids::random_generator m_uuid_generator;
};
}} // Slic3r::GUI
#endif // PresetArchiveDatabase

View File

@ -139,8 +139,9 @@ SavePresetDialog::Item::Item(Preset::Type type, const std::string& suffix, wxBox
update(); update();
} }
SavePresetDialog::Item::Item(wxWindow* parent, wxBoxSizer* sizer, const std::string& def_name, PrinterTechnology pt /*= ptFFF*/): SavePresetDialog::Item::Item(wxWindow* parent, wxBoxSizer* sizer, const std::string& def_name, PresetCollection* presets, PrinterTechnology pt /*= ptFFF*/):
m_preset_name(def_name), m_preset_name(def_name),
m_presets(presets),
m_printer_technology(pt), m_printer_technology(pt),
m_parent(parent), m_parent(parent),
m_valid_bmp(new wxStaticBitmap(m_parent, wxID_ANY, *get_bmp_bundle("tick_mark"))), m_valid_bmp(new wxStaticBitmap(m_parent, wxID_ANY, *get_bmp_bundle("tick_mark"))),
@ -152,6 +153,8 @@ SavePresetDialog::Item::Item(wxWindow* parent, wxBoxSizer* sizer, const std::str
input_name_sizer->Add(m_valid_bmp, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, BORDER_W); input_name_sizer->Add(m_valid_bmp, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, BORDER_W);
init_input_name_ctrl(input_name_sizer, m_preset_name); init_input_name_ctrl(input_name_sizer, m_preset_name);
init_casei_preset_names();
sizer->Add(input_name_sizer,0, wxEXPAND | wxBOTTOM, BORDER_W); sizer->Add(input_name_sizer,0, wxEXPAND | wxBOTTOM, BORDER_W);
sizer->Add(m_valid_label, 0, wxEXPAND | wxLEFT, 3*BORDER_W); sizer->Add(m_valid_label, 0, wxEXPAND | wxLEFT, 3*BORDER_W);

View File

@ -41,7 +41,7 @@ public:
}; };
Item(Preset::Type type, const std::string& suffix, wxBoxSizer* sizer, SavePresetDialog* parent, bool is_for_multiple_save); Item(Preset::Type type, const std::string& suffix, wxBoxSizer* sizer, SavePresetDialog* parent, bool is_for_multiple_save);
Item(wxWindow* parent, wxBoxSizer* sizer, const std::string& def_name, PrinterTechnology pt = ptFFF); Item(wxWindow* parent, wxBoxSizer* sizer, const std::string& def_name, PresetCollection* presets, PrinterTechnology pt = ptFFF);
void update_valid_bmp(); void update_valid_bmp();
void accept(); void accept();

View File

@ -0,0 +1,354 @@
///|/ Copyright (c) Prusa Research 2018 - 2023 Oleksandra Iushchenko @YuSanka
///|/
///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher
///|/
#include "UpdatesUIManager.hpp"
#include "I18N.hpp"
#include "wxExtensions.hpp"
#include "PresetArchiveDatabase.hpp"
#include "GUI.hpp"
#include "GUI_App.hpp"
#include "MainFrame.hpp"
#include "MsgDialog.hpp"
#include "format.hpp"
#include "Widgets/CheckBox.hpp"
#include <wx/wupdlock.h>
namespace fs = boost::filesystem;
namespace Slic3r {
namespace GUI {
RepositoryUpdateUIManager::RepositoryUpdateUIManager(wxWindow* parent, PresetArchiveDatabase* pad, int em) :
m_parent(parent)
,m_pad(pad)
,m_main_sizer(new wxBoxSizer(wxVERTICAL))
{
auto online_label = new wxStaticText(m_parent, wxID_ANY, _L("Online Repositories"));
online_label->SetFont(wxGetApp().bold_font());
m_main_sizer->Add(online_label, 0, wxTOP | wxLEFT, 2 * em);
m_online_sizer = new wxFlexGridSizer(4, 0.75 * em, 1.5 * em);
m_online_sizer->AddGrowableCol(2);
m_online_sizer->AddGrowableCol(3);
m_online_sizer->SetFlexibleDirection(/*wxHORIZONTAL*/wxBOTH);
m_main_sizer->Add(m_online_sizer, 0, wxALL, 2 * em);
m_main_sizer->AddSpacer(em);
auto offline_label = new wxStaticText(m_parent, wxID_ANY, _L("Offline Repositories"));
offline_label->SetFont(wxGetApp().bold_font());
m_main_sizer->Add(offline_label, 0, wxTOP | wxLEFT, 2 * em);
m_offline_sizer = new wxFlexGridSizer(7, 0.75 * em, 1.5 * em);
m_offline_sizer->AddGrowableCol(1);
m_offline_sizer->AddGrowableCol(2);
m_offline_sizer->AddGrowableCol(4);
m_offline_sizer->SetFlexibleDirection(wxHORIZONTAL);
m_main_sizer->Add(m_offline_sizer, 0, wxALL, 2 * em);
fill_entries(true);
fill_grids();
}
void RepositoryUpdateUIManager::fill_entries(bool init_selection/* = false*/)
{
m_online_entries.clear();
m_offline_entries.clear();
const SharedArchiveRepositoryVector& archs = m_pad->get_all_archive_repositories();
for (const auto* archive : archs) {
const std::string& uuid = archive->get_uuid();
if (init_selection && m_pad->is_selected_repository_by_uuid(uuid))
m_selected_uuids.emplace(uuid);
const bool is_selected = m_selected_uuids.find(uuid) != m_selected_uuids.end();
const auto& data = archive->get_manifest();
if (data.source_path.empty()) {
// online repo
m_online_entries.push_back({ is_selected, uuid, data.name, data.description, data.visibility });
}
else {
// offline repo
m_offline_entries.push_back({ is_selected, uuid, data.name, data.description, data.source_path.filename().string(), fs::exists(data.source_path), data.source_path });
}
}
}
void RepositoryUpdateUIManager::fill_grids()
{
// clear grids
m_online_sizer->Clear(true);
m_offline_sizer->Clear(true);
// Fill Online repository
if (!m_online_entries.empty()) {
auto add = [this](wxWindow* win) { m_online_sizer->Add(win, 0, wxALIGN_CENTER_VERTICAL); };
// header
for (const wxString& l : std::initializer_list<wxString>{ _L("Use"), "", _L("Name"), _L("Descrition") }) {
auto text = new wxStaticText(m_parent, wxID_ANY, l);
text->SetFont(wxGetApp().bold_font());
add(text);
}
// data
for (const auto& entry : m_online_entries)
{
auto chb = CheckBox::GetNewWin(m_parent, "");
CheckBox::SetValue(chb, entry.use);
chb->Bind(wxEVT_CHECKBOX, [this, chb, &entry](wxCommandEvent e) {
if (CheckBox::GetValue(chb))
m_selected_uuids.emplace(entry.id);
else
m_selected_uuids.erase(entry.id);
check_selection();
});
add(chb);
if (entry.visibility.empty())
add(new wxStaticText(m_parent, wxID_ANY, ""));
else {
wxStaticBitmap* bmp = new wxStaticBitmap(m_parent, wxID_ANY, *get_bmp_bundle("info"));
bmp->SetToolTip(from_u8(entry.visibility));
add(bmp);
}
add(new wxStaticText(m_parent, wxID_ANY, from_u8(entry.name)));
add(new wxStaticText(m_parent, wxID_ANY, from_u8(entry.description)));
}
}
if (!m_offline_entries.empty()) {
auto add = [this](wxWindow* win) { m_offline_sizer->Add(win, 0, wxALIGN_CENTER_VERTICAL); };
// header
for (const wxString& l : std::initializer_list<wxString>{ _L("Use"), _L("Name"), _L("Descrition"), "", _L("Source file"), "", "" }) {
auto text = new wxStaticText(m_parent, wxID_ANY, l);
text->SetFont(wxGetApp().bold_font());
add(text);
}
// data1
for (const auto& entry : m_offline_entries)
{
auto chb = CheckBox::GetNewWin(m_parent, "");
CheckBox::SetValue(chb, entry.use);
chb->Bind(wxEVT_CHECKBOX, [this, chb, &entry](wxCommandEvent e) {
if (CheckBox::GetValue(chb))
m_selected_uuids.emplace(entry.id);
else
m_selected_uuids.erase(entry.id);
check_selection();
});
add(chb);
add(new wxStaticText(m_parent, wxID_ANY, from_u8(entry.name)));
add(new wxStaticText(m_parent, wxID_ANY, from_u8(entry.description)));
{
wxStaticBitmap* bmp = new wxStaticBitmap(m_parent, wxID_ANY, *get_bmp_bundle(entry.is_ok ? "tick_mark" : "exclamation"));
bmp->SetToolTip(entry.is_ok ? _L("Exists") : _L("Doesn't exist"));
add(bmp);
}
{
auto path_str = new wxStaticText(m_parent, wxID_ANY, from_u8(entry.source));
path_str->SetToolTip(from_u8(entry.source_path.string()));
add(path_str);
}
{
ScalableButton* btn = new ScalableButton(m_parent, wxID_ANY, "open");
btn->SetToolTip(_L("Open folder"));
btn->Bind(wxEVT_BUTTON, [&entry](wxCommandEvent& event) {
GUI::desktop_open_folder(entry.source_path.parent_path().make_preferred());
});
add(btn);
}
{
wxButton* btn = new wxButton(m_parent, wxID_ANY, " " + _L("Remove") + " ");
wxGetApp().UpdateDarkUI(btn, true);
btn->Bind(wxEVT_BUTTON, [this, &entry](wxCommandEvent& event) { remove_offline_repos(entry.id); });
add(btn);
}
}
}
{
wxButton* btn = new wxButton(m_parent, wxID_ANY, " " + _L("Load") + "... ");
wxGetApp().UpdateDarkUI(btn, true);
btn->Bind(wxEVT_BUTTON, [this](wxCommandEvent& event) { load_offline_repos(); });
m_offline_sizer->Add(btn);
}
}
void RepositoryUpdateUIManager::update()
{
fill_entries();
wxWindowUpdateLocker freeze_guard(m_parent);
fill_grids();
m_parent->GetSizer()->Layout();
if (wxDialog* dlg = dynamic_cast<wxDialog*>(m_parent)) {
m_parent->Layout();
m_parent->Refresh();
dlg->Fit();
}
else if (wxWindow* top_parent = m_parent->GetParent()) {
top_parent->Layout();
top_parent->Refresh();
}
}
void RepositoryUpdateUIManager::remove_offline_repos(const std::string& id)
{
m_pad->remove_local_archive(id);
m_selected_uuids.erase(id);
check_selection();
if (wxDialog* dlg = dynamic_cast<wxDialog*>(m_parent)) {
// Invalidate min_size for correct next Layout()
dlg->SetMinSize(wxDefaultSize);
}
update();
}
void RepositoryUpdateUIManager::load_offline_repos()
{
wxArrayString input_files;
wxFileDialog dialog(m_parent, _L("Choose one or more ZIP-files") + ":",
from_u8(wxGetApp().app_config->get_last_dir()), "",
file_wildcards(FT_ZIP), wxFD_OPEN | /*wxFD_MULTIPLE | */wxFD_FILE_MUST_EXIST);
if (dialog.ShowModal() == wxID_OK)
dialog.GetPaths(input_files);
if (input_files.IsEmpty())
return;
// Iterate through the input files
for (size_t i = 0; i < input_files.size(); ++i) {
std::string input_file = into_u8(input_files.Item(i));
try {
fs::path input_path = fs::path(input_file);
std::string msg;
std::string uuid = m_pad->add_local_archive(input_path, msg);
if (uuid.empty()) {
ErrorDialog(m_parent, msg, false).ShowModal();
}
else {
m_selected_uuids.emplace(uuid);
check_selection();
update();
}
}
catch (fs::filesystem_error const& e) {
std::cerr << e.what() << '\n';
}
}
}
bool RepositoryUpdateUIManager::set_selected_repositories()
{
std::vector<std::string> used_ids;
std::copy(m_selected_uuids.begin(), m_selected_uuids.end(), std::back_inserter(used_ids));
std::string msg;
if (m_pad->set_selected_repositories(used_ids, msg)) {
check_selection();
return true;
}
ErrorDialog(m_parent, msg, false).ShowModal();
// update selection on UI
update();
check_selection();
return false;
}
void RepositoryUpdateUIManager::check_selection()
{
for (const auto& [uuid, is_selected] : m_pad->get_selected_repositories_uuid() )
if ((is_selected && m_selected_uuids.find(uuid) == m_selected_uuids.end() )||
(!is_selected && m_selected_uuids.find(uuid) != m_selected_uuids.end())) {
m_is_selection_changed = true;
return;
}
m_is_selection_changed = false;
}
ManagePresetRepositoriesDialog::ManagePresetRepositoriesDialog(PresetArchiveDatabase* pad)
: DPIDialog(static_cast<wxWindow*>(wxGetApp().mainframe), wxID_ANY,
format_wxstr("%1% - %2%", SLIC3R_APP_NAME, _L("Manage Updates")),
wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER)
{
this->SetFont(wxGetApp().normal_font());
const int em = em_unit();
m_manager = std::make_unique<RepositoryUpdateUIManager>(this, pad, em);
auto sizer = m_manager->get_sizer();
wxStdDialogButtonSizer* buttons = this->CreateStdDialogButtonSizer(wxOK | wxCLOSE);
wxGetApp().SetWindowVariantForButton(buttons->GetCancelButton());
wxGetApp().UpdateDlgDarkUI(this, true);
this->SetEscapeId(wxID_CLOSE);
this->Bind(wxEVT_BUTTON, &ManagePresetRepositoriesDialog::onCloseDialog, this, wxID_CLOSE);
this->Bind(wxEVT_BUTTON, &ManagePresetRepositoriesDialog::onOkDialog, this, wxID_OK);
sizer->Add(buttons, 0, wxALIGN_CENTER_HORIZONTAL | wxBOTTOM, em);
buttons->GetAffirmativeButton()->Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& event) {
event.Enable(m_manager->has_selections());
});
SetSizer(sizer);
sizer->SetSizeHints(this);
}
void ManagePresetRepositoriesDialog::on_dpi_changed(const wxRect &suggested_rect)
{
SetMinSize(GetBestSize());
Fit();
Refresh();
}
void ManagePresetRepositoriesDialog::onCloseDialog(wxEvent &)
{
this->EndModal(wxID_CLOSE);
}
void ManagePresetRepositoriesDialog::onOkDialog(wxEvent&)
{
if (m_manager->set_selected_repositories())
this->EndModal(wxID_OK);
}
} // namespace GUI
} // namespace Slic3r

View File

@ -0,0 +1,101 @@
///|/ Copyright (c) Prusa Research 2018 - 2020 Oleksandra Iushchenko @YuSanka
///|/
#ifndef slic3r_GUI_UpdatesUIManager_hpp_
#define slic3r_GUI_UpdatesUIManager_hpp_
#include "GUI_Utils.hpp"
#include <boost/filesystem.hpp>
#include <set>
#include <vector>
class wxWindow;
class wxEvent;
class wxSizer;
class wxFlexGridSizer;
namespace Slic3r {
namespace GUI {
class PresetArchiveDatabase;
class RepositoryUpdateUIManager
{
struct OnlineEntry {
OnlineEntry(bool use, const std::string &id, const std::string &name, const std::string &description, const std::string &visibility) :
use(use), id(id), name(name), description(description), visibility(visibility) {}
bool use;
std::string id;
std::string name;
std::string description;
std::string visibility;
};
struct OfflineEntry {
OfflineEntry(bool use, const std::string &id, const std::string &name, const std::string &description, const std::string &source, bool is_ok, boost::filesystem::path source_path) :
use(use), id(id), name(name), description(description), source(source), is_ok(is_ok), source_path(source_path) {}
bool use;
std::string id;
std::string name;
std::string description;
std::string source;
bool is_ok;
boost::filesystem::path source_path;
};
PresetArchiveDatabase* m_pad { nullptr };
wxWindow* m_parent { nullptr };
wxSizer* m_main_sizer { nullptr };
wxFlexGridSizer* m_online_sizer { nullptr };
wxFlexGridSizer* m_offline_sizer { nullptr };
std::vector<OnlineEntry> m_online_entries;
std::vector<OfflineEntry> m_offline_entries;
std::set<std::string> m_selected_uuids;
bool m_is_selection_changed{false};
void fill_entries(bool init_selection = false);
void fill_grids();
void update();
void remove_offline_repos(const std::string& id);
void load_offline_repos();
void check_selection();
public:
RepositoryUpdateUIManager() {}
RepositoryUpdateUIManager(wxWindow* parent, PresetArchiveDatabase* pad, int em);
~RepositoryUpdateUIManager() {}
wxSizer* get_sizer() { return m_main_sizer; }
bool set_selected_repositories();
bool is_selection_changed() const { return m_is_selection_changed; }
bool has_selections() const { return !m_selected_uuids.empty(); }
const std::set<std::string>& get_selected_uuids() const { return m_selected_uuids; }
};
class ManagePresetRepositoriesDialog : public DPIDialog
{
public:
ManagePresetRepositoriesDialog(PresetArchiveDatabase* pad);
~ManagePresetRepositoriesDialog() {}
protected:
void on_dpi_changed(const wxRect &suggested_rect) override;
private:
std::unique_ptr<RepositoryUpdateUIManager> m_manager { nullptr };
void onCloseDialog(wxEvent &);
void onOkDialog(wxEvent &);
};
} // namespace GUI
} // namespace Slic3r
#endif

View File

@ -20,7 +20,8 @@ namespace GUI {
UserAccount::UserAccount(wxEvtHandler* evt_handler, AppConfig* app_config, const std::string& instance_hash) UserAccount::UserAccount(wxEvtHandler* evt_handler, AppConfig* app_config, const std::string& instance_hash)
: m_communication(std::make_unique<UserAccountCommunication>(evt_handler, app_config)) : m_communication(std::make_unique<UserAccountCommunication>(evt_handler, app_config))
, m_instance_hash(instance_hash) , m_instance_hash(instance_hash)
{} {
}
UserAccount::~UserAccount() UserAccount::~UserAccount()
{} {}
@ -135,7 +136,7 @@ bool UserAccount::on_user_id_success(const std::string data, std::string& out_us
std::string public_username = m_account_user_data["public_username"]; std::string public_username = m_account_user_data["public_username"];
set_username(public_username); set_username(public_username);
out_username = public_username; out_username = public_username;
// equeue GET with avatar url // enqueue GET with avatar url
if (m_account_user_data.find("avatar") != m_account_user_data.end()) { if (m_account_user_data.find("avatar") != m_account_user_data.end()) {
const boost::filesystem::path server_file(m_account_user_data["avatar"]); const boost::filesystem::path server_file(m_account_user_data["avatar"]);
m_avatar_extension = server_file.extension().string(); m_avatar_extension = server_file.extension().string();

View File

@ -45,6 +45,7 @@ namespace fs = boost::filesystem;
namespace Slic3r { namespace Slic3r {
namespace GUI { namespace GUI {
namespace { namespace {
std::string get_code_from_message(const std::string& url_message) std::string get_code_from_message(const std::string& url_message)
@ -176,8 +177,9 @@ UserAccountCommunication::UserAccountCommunication(wxEvtHandler* evt_handler, Ap
m_session = std::make_unique<UserAccountSession>(evt_handler, access_token, refresh_token, shared_session_key, m_app_config->get_bool("connect_polling")); m_session = std::make_unique<UserAccountSession>(evt_handler, access_token, refresh_token, shared_session_key, m_app_config->get_bool("connect_polling"));
init_session_thread(); init_session_thread();
// perform login at the start, but only with tokens // perform login at the start, but only with tokens
if (has_token) if (has_token) {
do_login(); do_login();
}
} }
UserAccountCommunication::~UserAccountCommunication() UserAccountCommunication::~UserAccountCommunication()

View File

@ -91,7 +91,7 @@ public:
struct ActionQueueData struct ActionQueueData
{ {
UserAccountActionID action_id; UserAccountActionID action_id;
UserActionSuccessFn success_callback; UserActionSuccessFn success_callback;
UserActionFailFn fail_callback; UserActionFailFn fail_callback;
std::string input; std::string input;
@ -176,8 +176,8 @@ private:
std::string m_shared_session_key; std::string m_shared_session_key;
long long m_next_token_timeout; long long m_next_token_timeout;
std::queue<ActionQueueData> m_action_queue; std::queue<ActionQueueData> m_action_queue;
std::queue<ActionQueueData> m_priority_action_queue; std::queue<ActionQueueData> m_priority_action_queue;
std::map<UserAccountActionID, std::unique_ptr<UserAction>> m_actions; std::map<UserAccountActionID, std::unique_ptr<UserAction>> m_actions;
wxEvtHandler* p_evt_handler; wxEvtHandler* p_evt_handler;

View File

@ -118,6 +118,10 @@ struct Update
void install() const void install() const
{ {
copy_file_fix(source, target); copy_file_fix(source, target);
// Since 2.8.0 and introduction of Preset Repositories also install index to vendor folder.
// Thanks to that, the index will always be found f.e. by BundleMap::load(),
// which makes the ini file accessible even if recent version was not downloaded (due to repo shenanigans)
copy_file_fix(fs::path(source).replace_extension(".idx"), fs::path(target).replace_extension(".idx"));
} }
friend std::ostream& operator<<(std::ostream& os, const Update &self) friend std::ostream& operator<<(std::ostream& os, const Update &self)
@ -184,18 +188,18 @@ struct PresetUpdater::priv
priv(); priv();
void set_download_prefs(const AppConfig *app_config); void set_download_prefs(const AppConfig *app_config);
bool get_file(const std::string &url, const fs::path &target_path) const;
void prune_tmps() const; void prune_tmps() const;
void sync_config(const VendorMap vendors, const std::string& index_archive_url); void clear_cache_vendor() const;
void sync_config(const VendorMap& vendors, const GUI::ArchiveRepository* archive);
void check_install_indices() const; void check_install_indices() const;
Updates get_config_updates(const Semver& old_slic3r_version) const; Updates get_config_updates(const Semver& old_slic3r_version) const;
bool perform_updates(Updates &&updates, bool snapshot = true) const; bool perform_updates(Updates &&updates, const SharedArchiveRepositoryVector& repositories, bool snapshot = true) const;
void set_waiting_updates(Updates u); void set_waiting_updates(Updates u);
// checks existence and downloads resource to cache // checks existence and downloads resource to cache
void get_missing_resource(const std::string& vendor, const std::string& filename, const std::string& url) const; void get_missing_resource(const GUI::ArchiveRepository* archive, const std::string& vendor, const std::string& filename, const std::string& repository_id_from_ini) const;
// checks existence and downloads resource to vendor or copy from cache to vendor // checks existence and downloads resource to vendor or copy from cache to vendor
void get_or_copy_missing_resource(const std::string& vendor, const std::string& filename, const std::string& url) const; void get_or_copy_missing_resource(const GUI::ArchiveRepository* archive, const std::string& vendor, const std::string& filename, const std::string& repository_id_from_ini) const;
void update_index_db(); void update_index_db();
}; };
@ -226,41 +230,6 @@ void PresetUpdater::priv::set_download_prefs(const AppConfig *app_config)
enabled_config_update = app_config->get_bool("preset_update") && !app_config->legacy_datadir(); enabled_config_update = app_config->get_bool("preset_update") && !app_config->legacy_datadir();
} }
// Downloads a file (http get operation). Cancels if the Updater is being destroyed.
bool PresetUpdater::priv::get_file(const std::string &url, const fs::path &target_path) const
{
bool res = false;
fs::path tmp_path = target_path;
tmp_path += format(".%1%%2%", get_current_pid(), TMP_EXTENSION);
BOOST_LOG_TRIVIAL(info) << format("Get: `%1%`\n\t-> `%2%`\n\tvia tmp path `%3%`",
url,
target_path.string(),
tmp_path.string());
Http::get(url)
.on_progress([](Http::Progress, bool &cancel) {
if (cancel) { cancel = true; }
})
.on_error([&](std::string body, std::string error, unsigned http_status) {
(void)body;
BOOST_LOG_TRIVIAL(error) << format("Error getting: `%1%`: HTTP %2%, %3%",
url,
http_status,
error);
})
.on_complete([&](std::string body, unsigned /* http_status */) {
fs::fstream file(tmp_path, std::ios::out | std::ios::binary | std::ios::trunc);
file.write(body.c_str(), body.size());
file.close();
fs::rename(tmp_path, target_path);
res = true;
})
.perform_sync();
return res;
}
// Remove leftover paritally downloaded files, if any. // Remove leftover paritally downloaded files, if any.
void PresetUpdater::priv::prune_tmps() const void PresetUpdater::priv::prune_tmps() const
{ {
@ -270,19 +239,28 @@ void PresetUpdater::priv::prune_tmps() const
fs::remove(dir_entry.path()); fs::remove(dir_entry.path());
} }
} }
// Remove all files in cache/vendor
void PresetUpdater::priv::get_missing_resource(const std::string& vendor, const std::string& filename, const std::string& url) const void PresetUpdater::priv::clear_cache_vendor() const
{ {
if (filename.empty() || vendor.empty()) boost::system::error_code ec;
return; for (auto& dir_entry : boost::filesystem::directory_iterator(cache_vendor_path)) {
fs::remove(dir_entry.path(), ec);
if (!boost::starts_with(url, "http://files.prusa3d.com/wp-content/uploads/repository/") && if (ec) {
!boost::starts_with(url, "https://files.prusa3d.com/wp-content/uploads/repository/")) BOOST_LOG_TRIVIAL(error) << "Failed to remove " << dir_entry << " during cache cleanup. Reason: " << ec.what();
{ ec.clear();
throw Slic3r::CriticalException(GUI::format("URL outside prusa3d.com network: %1%", url)); }
} }
}
// gets resource to cache/<vendor_name>/
void PresetUpdater::priv::get_missing_resource(const GUI::ArchiveRepository* archive, const std::string& vendor, const std::string& filename, const std::string& repository_id_from_ini) const
{
assert(!filename.empty() && !vendor.empty());
//if (filename.empty() || vendor.empty()) {
// BOOST_LOG_TRIVIAL(error) << "PresetUpdater::get_missing_resource - wrong input. vendor: "<< vendor << " filename: " << filename;
// return;
//}
std::string escaped_filename = escape_string_url(filename);
const fs::path file_in_vendor(vendor_path / (vendor + "/" + filename)); const fs::path file_in_vendor(vendor_path / (vendor + "/" + filename));
const fs::path file_in_rsrc(rsrc_path / (vendor + "/" + filename)); const fs::path file_in_rsrc(rsrc_path / (vendor + "/" + filename));
const fs::path file_in_cache(cache_path / (vendor + "/" + filename)); const fs::path file_in_cache(cache_path / (vendor + "/" + filename));
@ -299,98 +277,76 @@ void PresetUpdater::priv::get_missing_resource(const std::string& vendor, const
BOOST_LOG_TRIVIAL(info) << "Resource " << vendor << " / " << filename << " found in cache folder. No need to download."; BOOST_LOG_TRIVIAL(info) << "Resource " << vendor << " / " << filename << " found in cache folder. No need to download.";
return; return;
} }
BOOST_LOG_TRIVIAL(info) << "Resources check could not find " << vendor << " / " << filename << " bed texture. Downloading."; BOOST_LOG_TRIVIAL(info) << "Resources check could not find " << vendor << " / " << filename << " bed texture. Downloading.";
const auto resource_url = format("%1%%2%%3%", url, url.back() == '/' ? "" : "/", escaped_filename); // vendor should already be in url
if (!fs::exists(file_in_cache.parent_path())) if (!fs::exists(file_in_cache.parent_path()))
fs::create_directory(file_in_cache.parent_path()); fs::create_directory(file_in_cache.parent_path());
get_file(resource_url, file_in_cache); //std::string escaped_filename = escape_string_url(filename);
const std::string resource_subpath = GUI::format("%1%/%2%",vendor, filename);
archive->get_file(resource_subpath, file_in_cache, repository_id_from_ini);
return; return;
} }
// gets resource to vendor/<vendor_name>/
void PresetUpdater::priv::get_or_copy_missing_resource(const std::string& vendor, const std::string& filename, const std::string& url) const void PresetUpdater::priv::get_or_copy_missing_resource(const GUI::ArchiveRepository* archive, const std::string& vendor, const std::string& filename, const std::string& repository_id_from_ini) const
{ {
if (filename.empty() || vendor.empty()) assert(!filename.empty() && !vendor.empty());
return;
std::string escaped_filename = escape_string_url(filename);
const fs::path file_in_vendor(vendor_path / (vendor + "/" + filename)); const fs::path file_in_vendor(vendor_path / (vendor + "/" + filename));
const fs::path file_in_rsrc(rsrc_path / (vendor + "/" + filename)); const fs::path file_in_rsrc(rsrc_path / (vendor + "/" + filename));
const fs::path file_in_cache(cache_path / (vendor + "/" + filename)); const fs::path file_in_cache(cache_path / (vendor + "/" + filename));
// Already in vendor. No need to do anything.
if (fs::exists(file_in_vendor)) { // Already in vendor. No need to do anything. if (fs::exists(file_in_vendor)) {
BOOST_LOG_TRIVIAL(info) << "Resource " << vendor << " / " << filename << " found in vendor folder. No need to download."; BOOST_LOG_TRIVIAL(info) << "Resource " << vendor << " / " << filename << " found in vendor folder. No need to download.";
return; return;
} }
if (fs::exists(file_in_rsrc)) { // In resources dir since installation. No need to do anything. // In resources dir since installation. No need to do anything.
if (fs::exists(file_in_rsrc)) {
BOOST_LOG_TRIVIAL(info) << "Resource " << vendor << " / " << filename << " found in resources folder. No need to download."; BOOST_LOG_TRIVIAL(info) << "Resource " << vendor << " / " << filename << " found in resources folder. No need to download.";
return; return;
} }
if (!fs::exists(file_in_cache)) { // No file to copy. Download it to straight to the vendor dir. // Create vendor_name dir in vendor.
if (!boost::starts_with(url, "http://files.prusa3d.com/wp-content/uploads/repository/") && if (!fs::exists(file_in_vendor.parent_path())) {
!boost::starts_with(url, "https://files.prusa3d.com/wp-content/uploads/repository/")) fs::create_directory(file_in_vendor.parent_path());
{ }
throw Slic3r::CriticalException(GUI::format("URL outside prusa3d.com network: %1%", url)); // No file to copy. Download it to straight to the vendor dir.
} if (!fs::exists(file_in_cache)) {
BOOST_LOG_TRIVIAL(info) << "Downloading resources missing in cache directory: " << vendor << " / " << filename; BOOST_LOG_TRIVIAL(info) << "Downloading resources missing in cache directory: " << vendor << " / " << filename;
const auto resource_url = format("%1%%2%%3%", url, url.back() == '/' ? "" : "/", escaped_filename); // vendor should already be in url //std::string escaped_filename = escape_string_url(filename);
const std::string resource_subpath = GUI::format("%1%/%2%", vendor, filename);
if (!fs::exists(file_in_vendor.parent_path())) archive->get_file(resource_subpath, file_in_vendor, repository_id_from_ini);
fs::create_directory(file_in_vendor.parent_path());
get_file(resource_url, file_in_vendor);
return; return;
} }
if (!fs::exists(file_in_vendor.parent_path())) // create vendor_name dir in vendor
fs::create_directory(file_in_vendor.parent_path());
BOOST_LOG_TRIVIAL(debug) << "Copiing: " << file_in_cache << " to " << file_in_vendor; BOOST_LOG_TRIVIAL(debug) << "Copiing: " << file_in_cache << " to " << file_in_vendor;
copy_file_fix(file_in_cache, file_in_vendor); copy_file_fix(file_in_cache, file_in_vendor);
} }
// Download vendor indices. Also download new bundles if an index indicates there's a new one available. // Download vendor indices. Also download new bundles if an index indicates there's a new one available.
// Both are saved in cache. // Both are saved in cache.
void PresetUpdater::priv::sync_config(const VendorMap vendors, const std::string& index_archive_url) void PresetUpdater::priv::sync_config(const VendorMap& vendors, const GUI::ArchiveRepository* archive_repository)
{ {
BOOST_LOG_TRIVIAL(info) << "Syncing configuration cache"; BOOST_LOG_TRIVIAL(info) << "Syncing configuration cache";
if (!enabled_config_update) { return; } if (!enabled_config_update) { return; }
// Download profiles archive zip // Download profiles archive zip
// dk: Do we want to return here on error? Or skip archive dwnld and unzip and work with previous run state cache / vendor? I think return.
// Any error here also doesnt show any info in UI. Do we want maybe notification?
fs::path archive_path(cache_path / "vendor_indices.zip"); fs::path archive_path(cache_path / "vendor_indices.zip");
if (index_archive_url.empty()) { if (!archive_repository->get_archive(archive_path)) {
BOOST_LOG_TRIVIAL(error) << "Downloading profile archive failed - url has no value.";
return;
}
BOOST_LOG_TRIVIAL(info) << "Downloading vedor profiles archive zip from " << index_archive_url;
//check if idx_url is leading to our site
if (!boost::starts_with(index_archive_url, "http://files.prusa3d.com/wp-content/uploads/repository/") &&
!boost::starts_with(index_archive_url, "https://files.prusa3d.com/wp-content/uploads/repository/"))
{
BOOST_LOG_TRIVIAL(error) << "Unsafe url path for vedor profiles archive zip. Download is rejected.";
return;
}
if (!get_file(index_archive_url, archive_path)) {
BOOST_LOG_TRIVIAL(error) << "Download of vedor profiles archive zip failed."; BOOST_LOG_TRIVIAL(error) << "Download of vedor profiles archive zip failed.";
return; return;
} }
if (cancel) { if (cancel) {
return; return;
} }
enum class VendorStatus enum class VendorStatus
{ {
IN_ARCHIVE, IN_ARCHIVE, // index was unzipped from archive to /cache/vendors/
IN_CACHE, IN_CACHE, // vendor does exists in index_db, probably bc its ini is in resources and idx was copied to /cache/. It is not istalled, so new version of ini would be in /cache/vendors/
NEW_VERSION, INSTALLED, // vendor is installed, ini is in /vendors/ folder, no new version is available.
INSTALLED NEW_VERSION, // vendor is installed, in /cache/ is new ini version waiting for installation.
}; };
std::vector<std::pair<std::string, VendorStatus>> vendors_with_status; std::vector<std::pair<std::string, VendorStatus>> vendors_with_status;
@ -455,19 +411,18 @@ void PresetUpdater::priv::sync_config(const VendorMap vendors, const std::string
} }
auto archive_it = std::find_if(vendors_with_status.begin(), vendors_with_status.end(), auto archive_it = std::find_if(vendors_with_status.begin(), vendors_with_status.end(),
[&index](const std::pair<std::string, VendorStatus>& element) { return element.first == index.vendor(); }); [&index](const std::pair<std::string, VendorStatus>& element) { return element.first == index.vendor(); });
//assert(archive_it != vendors_with_status.end()); // this would mean there is a index for vendor that is missing in recently downloaded archive if (archive_it == vendors_with_status.end()) {
// index for vendor that is missing in recently downloaded archive
const auto vendor_it = vendors.find(index.vendor());
if (vendor_it == vendors.end()) {
// Not installed vendor yet we need to check missing thumbnails (of new printers)
BOOST_LOG_TRIVIAL(debug) << "No such vendor: " << index.vendor();
if (archive_it != vendors_with_status.end())
archive_it->second = VendorStatus::IN_CACHE;
continue; continue;
} }
const auto vendor_it = vendors.find(index.vendor());
if (archive_it != vendors_with_status.end()) if (vendor_it == vendors.end()) {
archive_it->second = VendorStatus::INSTALLED; // Not installed vendor yet - later new version and missing resources will be checked.
BOOST_LOG_TRIVIAL(debug) << "No such vendor: " << index.vendor();
archive_it->second = VendorStatus::IN_CACHE;
continue;
}
archive_it->second = VendorStatus::INSTALLED;
const VendorProfile &vendor = vendor_it->second; const VendorProfile &vendor = vendor_it->second;
const std::string idx_path = (cache_path / (vendor.id + ".idx")).string(); const std::string idx_path = (cache_path / (vendor.id + ".idx")).string();
@ -518,15 +473,14 @@ void PresetUpdater::priv::sync_config(const VendorMap vendors, const std::string
if (vendor.config_version >= recommended) { continue; } if (vendor.config_version >= recommended) { continue; }
// vendors that are checked here, doesnt need to be checked again later // vendors that are checked here, doesnt need to be checked again later
if (archive_it != vendors_with_status.end()) archive_it->second = VendorStatus::NEW_VERSION;
archive_it->second = VendorStatus::NEW_VERSION;
// Download recomended ini to cache // Download recomended ini to cache
const auto path_in_cache = cache_path / (vendor.id + ".ini"); const auto path_in_cache = cache_path / (vendor.id + ".ini");
BOOST_LOG_TRIVIAL(info) << "Downloading new bundle for vendor: " << vendor.name; BOOST_LOG_TRIVIAL(info) << "Downloading new bundle for vendor: " << vendor.name;
const auto bundle_url = format("%1%/%2%.ini", vendor.config_update_url, recommended.to_string()); const std::string source_subpath = GUI::format("%1%/%2%.ini", vendor.id, recommended.to_string());
const auto bundle_path = cache_path / (vendor.id + ".ini"); const fs::path bundle_path = cache_path / (vendor.id + ".ini");
if (!get_file(bundle_url, bundle_path)) if (!archive_repository->get_file(source_subpath, bundle_path, vendor.repo_id))
continue; continue;
if (cancel) if (cancel)
return; return;
@ -545,7 +499,7 @@ void PresetUpdater::priv::sync_config(const VendorMap vendors, const std::string
if (! res.empty()) { if (! res.empty()) {
try try
{ {
get_missing_resource(vp.id, res, vendor.config_update_url); get_missing_resource(archive_repository, vp.id, res, vendor.repo_id);
} }
catch (const std::exception& e) catch (const std::exception& e)
{ {
@ -558,8 +512,8 @@ void PresetUpdater::priv::sync_config(const VendorMap vendors, const std::string
} }
} }
} }
// Download missing thumbnails for not-installed vendors. // Now status of each vendor is already decided.
//for (const std::string& vendor : vendors_only_in_archive) // Download missing for non-installed vendors.
for (const std::pair<std::string, VendorStatus >& vendor : vendors_with_status) { for (const std::pair<std::string, VendorStatus >& vendor : vendors_with_status) {
if (vendor.second == VendorStatus::IN_ARCHIVE) { if (vendor.second == VendorStatus::IN_ARCHIVE) {
// index in archive and not in cache and not installed vendor // index in archive and not in cache and not installed vendor
@ -583,25 +537,30 @@ void PresetUpdater::priv::sync_config(const VendorMap vendors, const std::string
} }
const auto recommended = recommended_it->config_version; const auto recommended = recommended_it->config_version;
if (!fs::exists(ini_path_in_archive)){ if (!fs::exists(ini_path_in_archive)){
// Download recommneded to vendor - we do not have any existing ini file so we have to use hardcoded url. // Download recommneded to vendor - we do not have any existing ini file so we have to use archive url.
const std::string fixed_url = GUI::wxGetApp().app_config->profile_folder_url(); const std::string source_subpath = GUI::format("%1%/%2%.ini", vendor.first, recommended.to_string());
const auto bundle_url = format("%1%/%2%/%3%.ini", fixed_url, vendor.first, recommended.to_string()); if (!archive_repository->get_ini_no_id(source_subpath, ini_path_in_archive))
if (!get_file(bundle_url, ini_path_in_archive))
continue; continue;
} else { } else {
// check existing ini version // check existing ini version
// then download recommneded to vendor if needed // then download recommended to vendor if needed
VendorProfile vp; VendorProfile vp;
try { try {
vp = VendorProfile::from_ini(ini_path_in_archive, true); vp = VendorProfile::from_ini(ini_path_in_archive, true);
} catch (const std::exception& e) { } catch (const std::exception& e) {
BOOST_LOG_TRIVIAL(error) << format("Corrupted profile file for vendor %1% at %2%, message: %3%", vendor.first, ini_path_in_archive, e.what()); BOOST_LOG_TRIVIAL(error) << format("Corrupted profile file for vendor %1% at %2%, message: %3%", vendor.first, ini_path_in_archive, e.what());
// Delete the file
boost::system::error_code ec;
fs::remove(ini_path_in_archive, ec);
if (ec) {
BOOST_LOG_TRIVIAL(error) << format("Failed to delete file: %1%", ec.message());
}
continue; continue;
} }
if (vp.config_version != recommended) { if (vp.config_version != recommended) {
const std::string fixed_url = GUI::wxGetApp().app_config->profile_folder_url(); // Take url from existing ini. This way we prevent downloading files from multiple sources.
const auto bundle_url = format("%1%/%2%/%3%.ini", fixed_url, vendor.first, recommended.to_string()); const std::string source_subpath = GUI::format("%1%/%2%.ini", vp.id, recommended.to_string());
if (!get_file(bundle_url, ini_path_in_archive)) if (!archive_repository->get_file(source_subpath, ini_path_in_archive, vp.repo_id))
continue; continue;
} }
} }
@ -618,7 +577,7 @@ void PresetUpdater::priv::sync_config(const VendorMap vendors, const std::string
if (!model.thumbnail.empty()) { if (!model.thumbnail.empty()) {
try try
{ {
get_missing_resource(vp.id, model.thumbnail, vp.config_update_url); get_missing_resource(archive_repository, vp.id, model.thumbnail, vp.repo_id);
} }
catch (const std::exception& e) catch (const std::exception& e)
{ {
@ -690,11 +649,12 @@ void PresetUpdater::priv::sync_config(const VendorMap vendors, const std::string
} }
catch (const std::exception& e) { catch (const std::exception& e) {
BOOST_LOG_TRIVIAL(error) << format("Corrupted profile file for vendor %1% at %2%, message: %3%", vendor.first, ini_path_in_rsrc, e.what()); BOOST_LOG_TRIVIAL(error) << format("Corrupted profile file for vendor %1% at %2%, message: %3%", vendor.first, ini_path_in_rsrc, e.what());
// This means resources are corrupted.
continue; continue;
} }
const auto bundle_url = format("%1%/%2%.ini", vp.config_update_url, recommended_archive.to_string()); const std::string source_subpath = GUI::format("%1%/%2%.ini", vp.id, recommended_archive.to_string());
if (!get_file(bundle_url, ini_path_in_archive)) { if (!archive_repository->get_file(source_subpath, ini_path_in_archive, vp.repo_id)) {
BOOST_LOG_TRIVIAL(error) << format("Failed to open vendor .ini file when checking missing resources: %1%", ini_path_in_rsrc); BOOST_LOG_TRIVIAL(error) << format("Failed to get new vendor .ini file when checking missing resources: %1%", ini_path_in_archive.string());
continue; continue;
} }
} else { } else {
@ -709,8 +669,8 @@ void PresetUpdater::priv::sync_config(const VendorMap vendors, const std::string
continue; continue;
} }
if (vp.config_version != recommended_archive) { if (vp.config_version != recommended_archive) {
const auto bundle_url = format("%1%/%2%.ini", vp.config_update_url, recommended_archive.to_string()); const std::string source_subpath = GUI::format("%1%/%2%.ini", vp.id, recommended_archive.to_string());
if (!get_file(bundle_url, ini_path_in_archive)) { if (!archive_repository->get_file(source_subpath, ini_path_in_archive, vp.repo_id)) {
BOOST_LOG_TRIVIAL(error) << format("Failed to open vendor .ini file when checking missing resources: %1%", ini_path_in_archive); BOOST_LOG_TRIVIAL(error) << format("Failed to open vendor .ini file when checking missing resources: %1%", ini_path_in_archive);
continue; continue;
} }
@ -734,7 +694,7 @@ void PresetUpdater::priv::sync_config(const VendorMap vendors, const std::string
if (!model.thumbnail.empty()) { if (!model.thumbnail.empty()) {
try try
{ {
get_missing_resource(vp.id, model.thumbnail, vp.config_update_url); get_missing_resource(archive_repository, vp.id, model.thumbnail, vp.repo_id);
} }
catch (const std::exception& e) catch (const std::exception& e)
{ {
@ -761,14 +721,14 @@ void PresetUpdater::priv::sync_config(const VendorMap vendors, const std::string
} }
for (const auto& model : vp.models) { for (const auto& model : vp.models) {
for (const std::string& res : { model.bed_texture, model.bed_model, model.thumbnail }) { for (const std::string& res : { model.bed_texture, model.bed_model, model.thumbnail }) {
if (!model.thumbnail.empty()) { if (!res.empty()) {
try try
{ {
get_or_copy_missing_resource(vp.id, res, vp.config_update_url); get_or_copy_missing_resource(archive_repository, vp.id, res, vp.repo_id);
} }
catch (const std::exception& e) catch (const std::exception& e)
{ {
BOOST_LOG_TRIVIAL(error) << "Failed to get " << model.thumbnail << " for " << vp.id << " " << model.id << ": " << e.what(); BOOST_LOG_TRIVIAL(error) << "Failed to get " << res << " for " << vp.id << " " << model.id << ": " << e.what();
} }
} }
if (cancel) if (cancel)
@ -1002,7 +962,7 @@ Updates PresetUpdater::priv::get_config_updates(const Semver &old_slic3r_version
return updates; return updates;
} }
bool PresetUpdater::priv::perform_updates(Updates &&updates, bool snapshot) const bool PresetUpdater::priv::perform_updates(Updates &&updates, const SharedArchiveRepositoryVector& repositories, bool snapshot) const
{ {
if (updates.incompats.size() > 0) { if (updates.incompats.size() > 0) {
if (snapshot) { if (snapshot) {
@ -1089,7 +1049,12 @@ bool PresetUpdater::priv::perform_updates(Updates &&updates, bool snapshot) cons
continue; continue;
try try
{ {
get_or_copy_missing_resource(vp.id, resource, vp.config_update_url); auto it = std::find_if(repositories.begin(), repositories.end(), [&vp](const auto* i){ return vp.repo_id == i->get_manifest().id; });
if (it != repositories.end())
get_or_copy_missing_resource((*it), vp.id, resource, vp.repo_id);
else {
BOOST_LOG_TRIVIAL(error) << "Failed to prepare " << resource << " for " << vp.id << " " << model.id << ": Missing record for repository with repo_id " << vp.repo_id;
}
} }
catch (const std::exception& e) catch (const std::exception& e)
{ {
@ -1128,20 +1093,17 @@ PresetUpdater::~PresetUpdater()
} }
} }
void PresetUpdater::sync(const PresetBundle *preset_bundle, wxEvtHandler* evt_handler) void PresetUpdater::sync(const PresetBundle *preset_bundle, wxEvtHandler* evt_handler,SharedArchiveRepositoryVector&& repositories)
{ {
p->set_download_prefs(GUI::wxGetApp().app_config); p->set_download_prefs(GUI::wxGetApp().app_config);
if (!p->enabled_version_check && !p->enabled_config_update) { return; } if (!p->enabled_config_update) { return; }
// Copy the whole vendors data for use in the background thread p->thread = std::thread([this, &vendors = preset_bundle->vendors, repositories = std::move(repositories), evt_handler]() {
// Unfortunatelly as of C++11, it needs to be copied again this->p->clear_cache_vendor();
// into the closure (but perhaps the compiler can elide this).
VendorMap vendors = preset_bundle->vendors;
std::string index_archive_url = GUI::wxGetApp().app_config->index_archive_url();
p->thread = std::thread([this, vendors, index_archive_url, evt_handler]() {
this->p->prune_tmps(); this->p->prune_tmps();
this->p->sync_config(std::move(vendors), index_archive_url); for (const GUI::ArchiveRepository* archive : repositories) {
this->p->sync_config(vendors, archive);
}
wxCommandEvent* evt = new wxCommandEvent(EVT_CONFIG_UPDATER_SYNC_DONE); wxCommandEvent* evt = new wxCommandEvent(EVT_CONFIG_UPDATER_SYNC_DONE);
evt_handler->QueueEvent(evt); evt_handler->QueueEvent(evt);
}); });
@ -1155,6 +1117,19 @@ void PresetUpdater::cancel_sync()
p->cancel = true; p->cancel = true;
p->thread.join(); p->thread.join();
} }
p->cancel = false;
}
void PresetUpdater::sync_blocking(const PresetBundle* preset_bundle, wxEvtHandler* evt_handler, const SharedArchiveRepositoryVector& repositories)
{
p->set_download_prefs(GUI::wxGetApp().app_config);
if (!p->enabled_config_update) { return; }
this->p->clear_cache_vendor();
this->p->prune_tmps();
for (const GUI::ArchiveRepository* archive : repositories) {
this->p->sync_config(preset_bundle->vendors, archive);
}
} }
void PresetUpdater::slic3r_update_notify() void PresetUpdater::slic3r_update_notify()
@ -1200,7 +1175,7 @@ static bool reload_configs_update_gui()
return true; return true;
} }
PresetUpdater::UpdateResult PresetUpdater::config_update(const Semver& old_slic3r_version, UpdateParams params) const PresetUpdater::UpdateResult PresetUpdater::config_update(const Semver& old_slic3r_version, UpdateParams params, const SharedArchiveRepositoryVector& repositories) const
{ {
if (! p->enabled_config_update) { return R_NOOP; } if (! p->enabled_config_update) { return R_NOOP; }
@ -1234,7 +1209,7 @@ PresetUpdater::UpdateResult PresetUpdater::config_update(const Semver& old_slic3
// This effectively removes the incompatible bundles: // This effectively removes the incompatible bundles:
// (snapshot is taken beforehand) // (snapshot is taken beforehand)
if (! p->perform_updates(std::move(updates)) || if (! p->perform_updates(std::move(updates), repositories) ||
! GUI::wxGetApp().run_wizard(GUI::ConfigWizard::RR_DATA_INCOMPAT)) ! GUI::wxGetApp().run_wizard(GUI::ConfigWizard::RR_DATA_INCOMPAT))
return R_INCOMPAT_EXIT; return R_INCOMPAT_EXIT;
@ -1276,7 +1251,7 @@ PresetUpdater::UpdateResult PresetUpdater::config_update(const Semver& old_slic3
const auto res = dlg.ShowModal(); const auto res = dlg.ShowModal();
if (res == wxID_OK) { if (res == wxID_OK) {
BOOST_LOG_TRIVIAL(info) << "User wants to update..."; BOOST_LOG_TRIVIAL(info) << "User wants to update...";
if (! p->perform_updates(std::move(updates)) || if (! p->perform_updates(std::move(updates), repositories) ||
! reload_configs_update_gui()) ! reload_configs_update_gui())
return R_INCOMPAT_EXIT; return R_INCOMPAT_EXIT;
return R_UPDATE_INSTALLED; return R_UPDATE_INSTALLED;
@ -1319,7 +1294,7 @@ PresetUpdater::UpdateResult PresetUpdater::config_update(const Semver& old_slic3
const auto res = dlg.ShowModal(); const auto res = dlg.ShowModal();
if (res == wxID_OK) { if (res == wxID_OK) {
BOOST_LOG_TRIVIAL(debug) << "User agreed to perform the update"; BOOST_LOG_TRIVIAL(debug) << "User agreed to perform the update";
if (! p->perform_updates(std::move(updates)) || if (! p->perform_updates(std::move(updates), repositories) ||
! reload_configs_update_gui()) ! reload_configs_update_gui())
return R_ALL_CANCELED; return R_ALL_CANCELED;
return R_UPDATE_INSTALLED; return R_UPDATE_INSTALLED;
@ -1340,7 +1315,7 @@ PresetUpdater::UpdateResult PresetUpdater::config_update(const Semver& old_slic3
return R_NOOP; return R_NOOP;
} }
bool PresetUpdater::install_bundles_rsrc_or_cache_vendor(std::vector<std::string> bundles, bool snapshot) const bool PresetUpdater::install_bundles_rsrc_or_cache_vendor(std::vector<std::string> bundles, const SharedArchiveRepositoryVector& repositories, bool snapshot) const
{ {
Updates updates; Updates updates;
@ -1443,10 +1418,10 @@ bool PresetUpdater::install_bundles_rsrc_or_cache_vendor(std::vector<std::string
} }
} }
return p->perform_updates(std::move(updates), snapshot); return p->perform_updates(std::move(updates), repositories, snapshot);
} }
void PresetUpdater::on_update_notification_confirm() void PresetUpdater::on_update_notification_confirm(const SharedArchiveRepositoryVector& repositories)
{ {
if (!p->has_waiting_updates) if (!p->has_waiting_updates)
return; return;
@ -1469,7 +1444,7 @@ void PresetUpdater::on_update_notification_confirm()
const auto res = dlg.ShowModal(); const auto res = dlg.ShowModal();
if (res == wxID_OK) { if (res == wxID_OK) {
BOOST_LOG_TRIVIAL(debug) << "User agreed to perform the update"; BOOST_LOG_TRIVIAL(debug) << "User agreed to perform the update";
if (p->perform_updates(std::move(p->waiting_updates)) && if (p->perform_updates(std::move(p->waiting_updates), repositories) &&
reload_configs_update_gui()) { reload_configs_update_gui()) {
p->has_waiting_updates = false; p->has_waiting_updates = false;
} }
@ -1488,5 +1463,19 @@ void PresetUpdater::update_index_db()
{ {
p->update_index_db(); p->update_index_db();
} }
void PresetUpdater::add_additional_archive(const std::string& archive_url, const std::string& download_url)
{
if (std::find_if(m_additional_archives.begin(), m_additional_archives.end(), [archive_url](const std::pair<std::string, std::string>& it) { return it.first == archive_url; }) == m_additional_archives.end()) {
m_additional_archives.emplace_back(archive_url, download_url);
}
}
void PresetUpdater::add_additional_archives(const std::vector<std::pair<std::string, std::string>>& archives)
{
for (const auto& pair : archives) {
add_additional_archive(pair.first, pair.second);
}
}
} }

View File

@ -5,6 +5,8 @@
#ifndef slic3r_PresetUpdate_hpp_ #ifndef slic3r_PresetUpdate_hpp_
#define slic3r_PresetUpdate_hpp_ #define slic3r_PresetUpdate_hpp_
#include "slic3r/GUI/PresetArchiveDatabase.hpp"
#include <memory> #include <memory>
#include <vector> #include <vector>
@ -17,6 +19,8 @@ class AppConfig;
class PresetBundle; class PresetBundle;
class Semver; class Semver;
typedef std::vector<const GUI::ArchiveRepository*> SharedArchiveRepositoryVector;
static constexpr const int SLIC3R_VERSION_BODY_MAX = 256; static constexpr const int SLIC3R_VERSION_BODY_MAX = 256;
class PresetUpdater class PresetUpdater
@ -30,9 +34,11 @@ public:
~PresetUpdater(); ~PresetUpdater();
// If either version check or config updating is enabled, get the appropriate data in the background and cache it. // If either version check or config updating is enabled, get the appropriate data in the background and cache it.
void sync(const PresetBundle *preset_bundle, wxEvtHandler* evt_handler); void sync(const PresetBundle *preset_bundle, wxEvtHandler* evt_handler, SharedArchiveRepositoryVector&& repositories);
void cancel_sync(); void cancel_sync();
void sync_blocking(const PresetBundle* preset_bundle, wxEvtHandler* evt_handler, const SharedArchiveRepositoryVector& repositories);
// If version check is enabled, check if chaced online slic3r version is newer, notify if so. // If version check is enabled, check if chaced online slic3r version is newer, notify if so.
void slic3r_update_notify(); void slic3r_update_notify();
@ -56,20 +62,24 @@ public:
// A false return value implies Slic3r should exit due to incompatibility of configuration. // A false return value implies Slic3r should exit due to incompatibility of configuration.
// Providing old slic3r version upgrade profiles on upgrade of an application even in case // Providing old slic3r version upgrade profiles on upgrade of an application even in case
// that the config index installed from the Internet is equal to the index contained in the installation package. // that the config index installed from the Internet is equal to the index contained in the installation package.
UpdateResult config_update(const Semver &old_slic3r_version, UpdateParams params) const; UpdateResult config_update(const Semver &old_slic3r_version, UpdateParams params, const SharedArchiveRepositoryVector& repositories) const;
void update_index_db(); void update_index_db();
// "Update" a list of bundles from resources or cache/vendor (behaves like an online update). // "Update" a list of bundles from resources or cache/vendor (behaves like an online update).
bool install_bundles_rsrc_or_cache_vendor(std::vector<std::string> bundles, bool snapshot = true) const; bool install_bundles_rsrc_or_cache_vendor(std::vector<std::string> bundles, const SharedArchiveRepositoryVector& repositories, bool snapshot = true) const;
void on_update_notification_confirm(); void on_update_notification_confirm(const SharedArchiveRepositoryVector& repositories);
bool version_check_enabled() const; bool version_check_enabled() const;
void add_additional_archive(const std::string& archive_url, const std::string& download_url);
void add_additional_archives(const std::vector<std::pair<std::string, std::string>>& archives);
private: private:
struct priv; struct priv;
std::unique_ptr<priv> p; std::unique_ptr<priv> p;
std::vector<std::pair<std::string, std::string>> m_additional_archives;
}; };
//wxDECLARE_EVENT(EVT_SLIC3R_VERSION_ONLINE, wxCommandEvent); //wxDECLARE_EVENT(EVT_SLIC3R_VERSION_ONLINE, wxCommandEvent);