Merge branch 'dk_archive_db_rebased'
@ -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_UBSAN "Enable UBSan on Clang and GCC" 0)
|
||||
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.
|
||||
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 ()
|
||||
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)
|
||||
add_definitions(-DSLIC3R_GUI)
|
||||
endif ()
|
||||
|
@ -87,6 +87,7 @@ src/slic3r/GUI/Jobs/SLAImportDialog.hpp
|
||||
src/slic3r/GUI/Jobs/SLAImportJob.cpp
|
||||
src/slic3r/GUI/KBShortcutsDialog.cpp
|
||||
src/slic3r/GUI/MainFrame.cpp
|
||||
src/slic3r/GUI/UpdatesUIManager.cpp
|
||||
src/slic3r/GUI/Mouse3DController.cpp
|
||||
src/slic3r/GUI/MsgDialog.cpp
|
||||
src/slic3r/GUI/NotificationManager.hpp
|
||||
|
@ -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
|
||||
1.1.3 Fixed top solid infill extrusion width for M5C.
|
||||
1.1.2 Added AnkerMake M5C.
|
||||
|
@ -1,19 +1,21 @@
|
||||
# Print profiles for the AnkerMake printers.
|
||||
|
||||
[vendor]
|
||||
repo_id = non-prusa-fff
|
||||
# Vendor name will be shown by the Config Wizard.
|
||||
name = AnkerMake
|
||||
# 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.1.3
|
||||
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/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%
|
||||
|
||||
# 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 = https://preset-repo-api.prusa3d.com/v1/repos/non-prusa-fff/Anker/
|
||||
[printer_model:M5]
|
||||
name = AnkerMake M5
|
||||
variants = 0.4
|
||||
|
@ -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
|
||||
0.2.8 Fixed compatible printer condition.
|
||||
0.2.7 Fixed compatible condition for MONO X.
|
||||
|
@ -1,19 +1,21 @@
|
||||
# Print profiles for the Anycubic printers.
|
||||
|
||||
[vendor]
|
||||
repo_id = non-prusa-fff
|
||||
# Vendor name will be shown by the Config Wizard.
|
||||
name = Anycubic
|
||||
# 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 = 0.2.8
|
||||
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/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%
|
||||
|
||||
# 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 = https://preset-repo-api.prusa3d.com/v1/repos/non-prusa-fff/Anycubic/
|
||||
[printer_model:AKLP]
|
||||
name = Anycubic Kossel Linear Plus
|
||||
variants = 0.4
|
||||
@ -23,6 +25,7 @@ bed_model = AKLP_Bed.stl
|
||||
bed_texture = AK.svg
|
||||
default_materials = Generic PLA @AKOSSEL; Generic PETG @AKOSSEL; Generic ABS @AKOSSEL
|
||||
|
||||
thumbnail = AKLP_thumbnail.png
|
||||
[printer_model:AK]
|
||||
name = Anycubic Kossel Pulley (Linear)
|
||||
variants = 0.4
|
||||
@ -32,6 +35,7 @@ bed_model = AK_Bed.stl
|
||||
bed_texture = AK.svg
|
||||
default_materials = Generic PLA @AKOSSEL; Generic PETG @AKOSSEL; Generic ABS @AKOSSEL
|
||||
|
||||
thumbnail = AK_thumbnail.png
|
||||
[printer_model:MEGA0]
|
||||
name = Anycubic Mega Zero
|
||||
variants = 0.4
|
||||
@ -41,6 +45,7 @@ bed_model = mega0_bed.stl
|
||||
bed_texture = mega0.svg
|
||||
default_materials = Generic PLA @MEGA0; Generic PETG @MEGA0; Anycubic PLA @MEGA0; Prusament PLA @MEGA0; Prusament PETG @MEGA0
|
||||
|
||||
thumbnail = MEGA0_thumbnail.png
|
||||
[printer_model:I3MEGA]
|
||||
name = Anycubic i3 Mega
|
||||
variants = 0.4
|
||||
@ -49,6 +54,7 @@ family = MEGA
|
||||
bed_model = i3megas_bed.stl
|
||||
bed_texture = i3megas.svg
|
||||
|
||||
thumbnail = I3MEGA_thumbnail.png
|
||||
[printer_model:I3MEGAS]
|
||||
name = Anycubic i3 Mega S
|
||||
variants = 0.4
|
||||
@ -57,6 +63,7 @@ family = MEGA
|
||||
bed_model = i3megas_bed.stl
|
||||
bed_texture = i3megas.svg
|
||||
|
||||
thumbnail = I3MEGAS_thumbnail.png
|
||||
[printer_model:4MAXPRO20]
|
||||
name = Anycubic 4Max Pro 2.0
|
||||
variants = 0.4
|
||||
@ -66,6 +73,7 @@ bed_model = 4MAXPRO20_bed.stl
|
||||
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
|
||||
|
||||
thumbnail = 4MAXPRO20_thumbnail.png
|
||||
[printer_model:PREDATOR]
|
||||
name = Anycubic Predator
|
||||
variants = 0.4; 0.6; 0.8
|
||||
@ -73,34 +81,6 @@ technology = FFF
|
||||
family = 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
|
||||
# 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
|
||||
|
||||
# Common print preset
|
||||
thumbnail = PREDATOR_thumbnail.png
|
||||
[print:*common_akossel*]
|
||||
avoid_crossing_perimeters = 0
|
||||
bottom_solid_min_thickness = 0.5
|
||||
@ -2344,228 +2325,3 @@ use_volumetric_e = 0
|
||||
variable_layer_height = 1
|
||||
wipe = 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
|
||||
|
||||
|
5
resources/profiles/AnycubicSLA.idx
Normal 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
|
273
resources/profiles/AnycubicSLA.ini
Normal 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
|
BIN
resources/profiles/AnycubicSLA/PHOTON MONO SE_thumbnail.png
Normal file
After Width: | Height: | Size: 45 KiB |
BIN
resources/profiles/AnycubicSLA/PHOTON MONO X 6K_thumbnail.png
Normal file
After Width: | Height: | Size: 41 KiB |
BIN
resources/profiles/AnycubicSLA/PHOTON MONO X_thumbnail.png
Normal file
After Width: | Height: | Size: 45 KiB |
BIN
resources/profiles/AnycubicSLA/PHOTON MONO_thumbnail.png
Normal file
After Width: | Height: | Size: 37 KiB |
25
resources/profiles/ArchiveRepositoryManifest.json
Normal 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
|
||||
}]
|
@ -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
|
||||
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.
|
||||
min_slic3r_version = 2.4.1-alpha0
|
||||
0.0.7 Added Eolas Prints filaments.
|
||||
|
@ -8,13 +8,14 @@
|
||||
# Print profiles for the Artillery printers.
|
||||
|
||||
[vendor]
|
||||
repo_id = non-prusa-fff
|
||||
# Vendor name will be shown by the Config Wizard.
|
||||
name = Artillery
|
||||
# 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 = 0.0.8
|
||||
config_version = 1.0.0
|
||||
# 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%
|
||||
|
||||
# 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 ##
|
||||
#############
|
||||
|
||||
config_url = https://preset-repo-api.prusa3d.com/v1/repos/non-prusa-fff/Artillery/
|
||||
[printer_model:X1]
|
||||
name = Artillery Sidewinder X1
|
||||
variants = 0.4
|
||||
@ -33,6 +35,7 @@ bed_model = bed-x1.stl
|
||||
bed_texture = bed-x1.png
|
||||
default_materials = Generic PLA @Artillery; Generic ABS @Artillery; Generic PETG @Artillery; Generic TPU @Artillery
|
||||
|
||||
thumbnail = X1_thumbnail.png
|
||||
[printer_model:Genius]
|
||||
name = Artillery Genius
|
||||
variants = 0.4
|
||||
@ -41,6 +44,7 @@ bed_model = bed-genius.stl
|
||||
bed_texture = bed-genius.png
|
||||
default_materials = Generic PLA @Artillery; Generic ABS @Artillery; Generic PETG @Artillery; Generic TPU @Artillery
|
||||
|
||||
thumbnail = Genius_thumbnail.png
|
||||
[printer_model:Hornet]
|
||||
name = Artillery Hornet
|
||||
variants = 0.4
|
||||
@ -49,6 +53,7 @@ bed_model = bed-hornet.stl
|
||||
bed_texture = bed-hornet.png
|
||||
default_materials = Generic PLA @Artillery; Generic ABS @Artillery; Generic PETG @Artillery; Generic TPU @Artillery
|
||||
|
||||
thumbnail = Hornet_thumbnail.png
|
||||
[printer_model:X3 Plus]
|
||||
name = Artillery Sidewinder X3 Plus
|
||||
variants = 0.4
|
||||
@ -57,6 +62,7 @@ bed_model = bed-x3-plus.stl
|
||||
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
|
||||
|
||||
thumbnail = X3 Plus_thumbnail.png
|
||||
[printer_model:X3 Pro]
|
||||
name = Artillery Sidewinder X3 Pro
|
||||
variants = 0.4
|
||||
@ -65,6 +71,7 @@ bed_model = bed-x3-pro.stl
|
||||
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
|
||||
|
||||
thumbnail = X3 Pro_thumbnail.png
|
||||
[printer_model:X4 Plus]
|
||||
name = Artillery Sidewinder X4 Plus
|
||||
variants = 0.4
|
||||
@ -73,6 +80,7 @@ bed_model = bed-x4-plus.stl
|
||||
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
|
||||
|
||||
thumbnail = X4 Plus_thumbnail.png
|
||||
[printer_model:X4 Pro]
|
||||
name = Artillery Sidewinder X4 Pro
|
||||
variants = 0.4
|
||||
@ -81,6 +89,7 @@ bed_model = bed-x4-pro.stl
|
||||
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
|
||||
|
||||
thumbnail = X4 Pro_thumbnail.png
|
||||
[printer_model:X4 Max]
|
||||
name = Artillery Sidewinder X4 Max
|
||||
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
|
||||
|
||||
# Common printer preset
|
||||
thumbnail = X4 Max_thumbnail.png
|
||||
[printer:*common*]
|
||||
before_layer_gcode = ;BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0
|
||||
between_objects_gcode =
|
||||
@ -401,7 +411,7 @@ fill_angle = 45
|
||||
fill_density = 15%
|
||||
first_layer_acceleration = 500
|
||||
first_layer_extrusion_width = 0.42
|
||||
first_layer_height = 150%
|
||||
first_layer_height = 0.25
|
||||
first_layer_speed = 20
|
||||
gap_fill_speed = 30
|
||||
gcode_comments = 1
|
||||
|
@ -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
|
||||
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.
|
||||
|
@ -1,18 +1,20 @@
|
||||
# Print profiles for the BIBO printers.
|
||||
|
||||
[vendor]
|
||||
repo_id = non-prusa-fff
|
||||
# Vendor name will be shown by the Config Wizard.
|
||||
name = BIBO
|
||||
# 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 = 0.0.7
|
||||
config_version = 1.0.0
|
||||
# Where to get the updates from?
|
||||
config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/BIBO/
|
||||
config_update_url = https://preset-repo-api.prusa3d.com/v1/repos/non-prusa-fff/BIBO/
|
||||
|
||||
# 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 = https://preset-repo-api.prusa3d.com/v1/repos/non-prusa-fff/BIBO/
|
||||
[printer_model:BIBO2]
|
||||
name = BIBO2 Touch
|
||||
variants = 0.4
|
||||
@ -26,6 +28,7 @@ default_materials = Generic PLA @BIBO2; Generic PETG @BIBO2; Generic ABS @BIBO2;
|
||||
# not make it into the user interface.
|
||||
|
||||
# Common print preset
|
||||
thumbnail = BIBO2_thumbnail.png
|
||||
[print:*common*]
|
||||
avoid_crossing_perimeters = 0
|
||||
bottom_fill_pattern = rectilinear
|
||||
|
@ -1,2 +1,5 @@
|
||||
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
|
||||
|
@ -3,14 +3,16 @@
|
||||
|
||||
|
||||
[vendor]
|
||||
repo_id = non-prusa-fff
|
||||
name = BIQU
|
||||
config_version = 0.1.0
|
||||
config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/BIQU/
|
||||
config_version = 1.0.0
|
||||
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,
|
||||
# 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 = https://preset-repo-api.prusa3d.com/v1/repos/non-prusa-fff/BIQU/
|
||||
[printer_model:BIQUBX]
|
||||
name = BIQU BX
|
||||
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.
|
||||
|
||||
# Common print preset
|
||||
thumbnail = BIQUBX_thumbnail.png
|
||||
[print:*common*]
|
||||
avoid_crossing_perimeters = 0
|
||||
bottom_fill_pattern = monotonic
|
||||
|
@ -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
|
||||
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.1 Swapped Pause GCode, Fixed Chocolate Colors, Resolved Output Format issue from Inheriting Keyword Typo
|
||||
1.0.0 Initial
|
||||
|
@ -1,13 +1,14 @@
|
||||
# Print profiles for the Cocoa Press.
|
||||
|
||||
[vendor]
|
||||
repo_id = non-prusa-fff
|
||||
# Vendor name will be shown by the Config Wizard.
|
||||
name = Cocoa Press
|
||||
# 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.2
|
||||
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/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%
|
||||
|
||||
# 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
|
||||
# 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]
|
||||
name = Cocoa Press
|
||||
variants = 0.8; 1.6
|
||||
@ -29,7 +31,7 @@ thumbnail = CocoaPress_MiniChef.png
|
||||
[print:*common*]
|
||||
gcode_label_objects = 1
|
||||
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
|
||||
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
|
||||
draft_shield = disabled
|
||||
elefant_foot_compensation = 0
|
||||
enable_dynamic_overhang_speeds = 0
|
||||
enable_dynamic_overhang_speeds = 1
|
||||
external_perimeter_acceleration = 0
|
||||
external_perimeter_extrusion_width = 0
|
||||
external_perimeter_speed = 25
|
||||
@ -106,7 +108,7 @@ min_skirt_length = 0
|
||||
mmu_segmented_region_max_width = 0
|
||||
only_retract_when_crossing_perimeters = 0
|
||||
ooze_prevention = 0
|
||||
overhang_speed_0 = 15
|
||||
overhang_speed_0 = 12
|
||||
overhang_speed_1 = 15
|
||||
overhang_speed_2 = 20
|
||||
overhang_speed_3 = 25
|
||||
@ -226,7 +228,7 @@ default_acceleration = 1500
|
||||
dont_support_bridges = 1
|
||||
draft_shield = disabled
|
||||
elefant_foot_compensation = 0
|
||||
enable_dynamic_overhang_speeds = 0
|
||||
enable_dynamic_overhang_speeds = 1
|
||||
external_perimeter_acceleration = 0
|
||||
external_perimeter_extrusion_width = 0
|
||||
external_perimeter_speed = 25
|
||||
@ -277,7 +279,7 @@ min_skirt_length = 0
|
||||
mmu_segmented_region_max_width = 0
|
||||
only_retract_when_crossing_perimeters = 0
|
||||
ooze_prevention = 0
|
||||
overhang_speed_0 = 15
|
||||
overhang_speed_0 = 12
|
||||
overhang_speed_1 = 15
|
||||
overhang_speed_2 = 20
|
||||
overhang_speed_3 = 25
|
||||
@ -447,11 +449,11 @@ autoemit_temperature_commands = 0
|
||||
bed_shape = 0x0,140x0,140x150,0x150
|
||||
before_layer_gcode = ;BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\n\n
|
||||
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_retraction = 91.5
|
||||
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
|
||||
extruder_colour = #FFE3CA
|
||||
extruder_offset = 0x0
|
||||
@ -481,7 +483,7 @@ max_print_height = 150
|
||||
min_layer_height = 0.2
|
||||
nozzle_diameter = 0.8
|
||||
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 =
|
||||
printer_settings_id = cocoa_press_minichef_settings_0_8
|
||||
printer_technology = FFF
|
||||
@ -502,7 +504,7 @@ retract_restart_extra_toolchange = 0
|
||||
retract_speed = 15
|
||||
silent_mode = 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 =
|
||||
thumbnails = 64x64,400x300
|
||||
thumbnails_format = PNG
|
||||
@ -520,12 +522,12 @@ autoemit_temperature_commands = 0
|
||||
bed_shape = 0x0,140x0,140x150,0x150
|
||||
before_layer_gcode = ;BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\n\n
|
||||
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_retraction = 91.5
|
||||
default_print_profile = 1.0
|
||||
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
|
||||
extruder_colour = #FFE3CA
|
||||
extruder_offset = 0x0
|
||||
@ -555,7 +557,7 @@ max_print_height = 150
|
||||
min_layer_height = 0.2
|
||||
nozzle_diameter = 1.6
|
||||
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 =
|
||||
printer_settings_id = cocoa_press_minichef_settings_1_6
|
||||
printer_technology = FFF
|
||||
@ -576,7 +578,7 @@ retract_restart_extra_toolchange = 0
|
||||
retract_speed = 15
|
||||
silent_mode = 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 =
|
||||
thumbnails = 64x64,400x300
|
||||
thumbnails_format = PNG
|
||||
|
@ -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
|
||||
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.
|
||||
|
@ -1,19 +1,21 @@
|
||||
# Print profiles for the Creality printers.
|
||||
|
||||
[vendor]
|
||||
repo_id = non-prusa-fff
|
||||
# Vendor name will be shown by the Config Wizard.
|
||||
name = Creality
|
||||
# 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 = 0.2.7
|
||||
config_version = 1.0.0
|
||||
# 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%
|
||||
|
||||
# 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 = https://preset-repo-api.prusa3d.com/v1/repos/non-prusa-fff/Creality/
|
||||
[printer_model:ENDER3]
|
||||
name = Creality Ender-3
|
||||
variants = 0.4; 0.3; 0.5; 0.6
|
||||
@ -23,6 +25,7 @@ bed_model = ender3_bed.stl
|
||||
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
|
||||
|
||||
thumbnail = ENDER3_thumbnail.png
|
||||
[printer_model:ENDER3BLTOUCH]
|
||||
name = Creality Ender-3 BLTouch
|
||||
variants = 0.4; 0.3; 0.5; 0.6
|
||||
@ -32,6 +35,7 @@ bed_model = ender3_bed.stl
|
||||
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
|
||||
|
||||
thumbnail = ENDER3BLTOUCH_thumbnail.png
|
||||
[printer_model:ENDER3PRO]
|
||||
name = Creality Ender-3 Pro
|
||||
variants = 0.4; 0.3; 0.5; 0.6
|
||||
@ -41,6 +45,7 @@ bed_model = ender3_bed.stl
|
||||
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
|
||||
|
||||
thumbnail = ENDER3PRO_thumbnail.png
|
||||
[printer_model:ENDER3NEO]
|
||||
name = Creality Ender-3 Neo
|
||||
variants = 0.4; 0.3; 0.5; 0.6
|
||||
@ -50,6 +55,7 @@ bed_model = ender3_bed.stl
|
||||
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
|
||||
|
||||
thumbnail = ENDER3NEO_thumbnail.png
|
||||
[printer_model:ENDER3V2]
|
||||
name = Creality Ender-3 V2
|
||||
variants = 0.4; 0.3; 0.5; 0.6
|
||||
@ -59,6 +65,7 @@ bed_model = ender3v2_bed.stl
|
||||
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
|
||||
|
||||
thumbnail = ENDER3V2_thumbnail.png
|
||||
[printer_model:ENDER3V2NEO]
|
||||
name = Creality Ender-3 V2 Neo
|
||||
variants = 0.4; 0.3; 0.5; 0.6
|
||||
@ -68,6 +75,7 @@ bed_model = ender3v2_bed.stl
|
||||
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
|
||||
|
||||
thumbnail = ENDER3V2NEO_thumbnail.png
|
||||
[printer_model:ENDER3S1]
|
||||
name = Creality Ender-3 S1
|
||||
variants = 0.4; 0.3; 0.5; 0.6
|
||||
@ -77,6 +85,7 @@ bed_model = ender3v2_bed.stl
|
||||
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
|
||||
|
||||
thumbnail = ENDER3S1_thumbnail.png
|
||||
[printer_model:ENDER3S1PRO]
|
||||
name = Creality Ender-3 S1 Pro
|
||||
variants = 0.4; 0.3; 0.5; 0.6
|
||||
@ -86,6 +95,7 @@ bed_model = ender3v2_bed.stl
|
||||
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
|
||||
|
||||
thumbnail = ENDER3S1PRO_thumbnail.png
|
||||
[printer_model:ENDER3S1PLUS]
|
||||
name = Creality Ender-3 S1 Plus
|
||||
variants = 0.4; 0.3; 0.5; 0.6
|
||||
@ -95,6 +105,7 @@ 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
|
||||
|
||||
thumbnail = ENDER3S1PLUS_thumbnail.png
|
||||
[printer_model:ENDER3MAX]
|
||||
name = Creality Ender-3 Max
|
||||
variants = 0.4; 0.3; 0.5; 0.6
|
||||
@ -104,6 +115,7 @@ 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
|
||||
|
||||
thumbnail = ENDER3MAX_thumbnail.png
|
||||
[printer_model:ENDER3MAXNEO]
|
||||
name = Creality Ender-3 Max Neo
|
||||
variants = 0.4; 0.3; 0.5; 0.6
|
||||
@ -113,6 +125,7 @@ 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
|
||||
|
||||
thumbnail = ENDER3MAXNEO_thumbnail.png
|
||||
[printer_model:ENDER4]
|
||||
name = Creality Ender-4
|
||||
variants = 0.4; 0.3; 0.5; 0.6
|
||||
@ -122,6 +135,7 @@ bed_model = ender3v2_bed.stl
|
||||
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
|
||||
|
||||
thumbnail = ENDER4_thumbnail.png
|
||||
[printer_model:ENDER5]
|
||||
name = Creality Ender-5
|
||||
variants = 0.4; 0.3; 0.5; 0.6
|
||||
@ -131,6 +145,7 @@ bed_model = ender3_bed.stl
|
||||
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
|
||||
|
||||
thumbnail = ENDER5_thumbnail.png
|
||||
[printer_model:ENDER5PRO]
|
||||
name = Creality Ender-5 Pro
|
||||
variants = 0.4; 0.3; 0.5; 0.6
|
||||
@ -140,6 +155,7 @@ bed_model = ender3_bed.stl
|
||||
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
|
||||
|
||||
thumbnail = ENDER5PRO_thumbnail.png
|
||||
[printer_model:ENDER5PLUS]
|
||||
name = Creality Ender-5 Plus
|
||||
variants = 0.4; 0.3; 0.5; 0.6
|
||||
@ -149,6 +165,7 @@ bed_model = ender5plus_bed.stl
|
||||
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
|
||||
|
||||
thumbnail = ENDER5PLUS_thumbnail.png
|
||||
[printer_model:ENDER5S1]
|
||||
name = Creality Ender-5 S1
|
||||
variants = 0.4; 0.3; 0.5; 0.6
|
||||
@ -158,6 +175,7 @@ bed_model = ender3_bed.stl
|
||||
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
|
||||
|
||||
thumbnail = ENDER5S1_thumbnail.png
|
||||
[printer_model:ENDER6]
|
||||
name = Creality Ender-6
|
||||
variants = 0.4; 0.3; 0.5; 0.6
|
||||
@ -167,6 +185,7 @@ bed_model = ender6_bed.stl
|
||||
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
|
||||
|
||||
thumbnail = ENDER6_thumbnail.png
|
||||
[printer_model:ENDER7]
|
||||
name = Creality Ender-7
|
||||
variants = 0.4; 0.3; 0.5; 0.6
|
||||
@ -176,6 +195,7 @@ bed_model = ender7_bed.stl
|
||||
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
|
||||
|
||||
thumbnail = ENDER7_thumbnail.png
|
||||
[printer_model:ENDER2]
|
||||
name = Creality Ender-2
|
||||
variants = 0.4; 0.3; 0.5; 0.6
|
||||
@ -185,6 +205,7 @@ bed_model = ender2_bed.stl
|
||||
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
|
||||
|
||||
thumbnail = ENDER2_thumbnail.png
|
||||
[printer_model:ENDER2PRO]
|
||||
name = Creality Ender-2 Pro
|
||||
variants = 0.4; 0.3; 0.5; 0.6
|
||||
@ -194,6 +215,7 @@ bed_model = ender2pro_bed.stl
|
||||
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
|
||||
|
||||
thumbnail = ENDER2PRO_thumbnail.png
|
||||
[printer_model:CR5PRO]
|
||||
name = Creality CR-5 Pro
|
||||
variants = 0.4; 0.3; 0.5; 0.6
|
||||
@ -203,6 +225,7 @@ bed_model = cr5pro_bed.stl
|
||||
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
|
||||
|
||||
thumbnail = CR5PRO_thumbnail.png
|
||||
[printer_model:CR5PROH]
|
||||
name = Creality CR-5 Pro H
|
||||
variants = 0.4; 0.3; 0.5; 0.6
|
||||
@ -212,6 +235,7 @@ bed_model = cr5pro_bed.stl
|
||||
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
|
||||
|
||||
thumbnail = CR5PROH_thumbnail.png
|
||||
[printer_model:CR6SE]
|
||||
name = Creality CR-6 SE
|
||||
variants = 0.4; 0.3; 0.5; 0.6
|
||||
@ -221,6 +245,7 @@ bed_model = cr6se_bed.stl
|
||||
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
|
||||
|
||||
thumbnail = CR6SE_thumbnail.png
|
||||
[printer_model:CR6MAX]
|
||||
name = Creality CR-6 Max
|
||||
variants = 0.4; 0.3; 0.5; 0.6
|
||||
@ -230,6 +255,7 @@ bed_model = cr10s4_bed.stl
|
||||
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
|
||||
|
||||
thumbnail = CR6MAX_thumbnail.png
|
||||
[printer_model:CR10SMART]
|
||||
name = Creality CR-10 SMART
|
||||
variants = 0.4; 0.3; 0.5; 0.6
|
||||
@ -239,6 +265,7 @@ 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
|
||||
|
||||
thumbnail = CR10SMART_thumbnail.png
|
||||
[printer_model:CR10SMARTPRO]
|
||||
name = Creality CR-10 SMART Pro
|
||||
variants = 0.4; 0.3; 0.5; 0.6
|
||||
@ -248,6 +275,7 @@ 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
|
||||
|
||||
thumbnail = CR10SMARTPRO_thumbnail.png
|
||||
[printer_model:CR10MINI]
|
||||
name = Creality CR-10 Mini
|
||||
variants = 0.4; 0.3; 0.5; 0.6
|
||||
@ -257,6 +285,7 @@ bed_model = cr10mini_bed.stl
|
||||
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
|
||||
|
||||
thumbnail = CR10MINI_thumbnail.png
|
||||
[printer_model:CR10MAX]
|
||||
name = Creality CR-10 Max
|
||||
variants = 0.4; 0.3; 0.5; 0.6
|
||||
@ -266,6 +295,7 @@ bed_model = cr10max_bed.stl
|
||||
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
|
||||
|
||||
thumbnail = CR10MAX_thumbnail.png
|
||||
[printer_model:CR10]
|
||||
name = Creality CR-10
|
||||
variants = 0.4; 0.3; 0.5; 0.6
|
||||
@ -275,6 +305,7 @@ bed_model = cr10_bed.stl
|
||||
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
|
||||
|
||||
thumbnail = CR10_thumbnail.png
|
||||
[printer_model:CR10V2]
|
||||
name = Creality CR-10 V2
|
||||
variants = 0.4; 0.3; 0.5; 0.6
|
||||
@ -284,6 +315,7 @@ bed_model = cr10v2_bed.stl
|
||||
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
|
||||
|
||||
thumbnail = CR10V2_thumbnail.png
|
||||
[printer_model:CR10V3]
|
||||
name = Creality CR-10 V3
|
||||
variants = 0.4; 0.3; 0.5; 0.6
|
||||
@ -293,6 +325,7 @@ bed_model = cr10v2_bed.stl
|
||||
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
|
||||
|
||||
thumbnail = CR10V3_thumbnail.png
|
||||
[printer_model:CR10S]
|
||||
name = Creality CR-10 S
|
||||
variants = 0.4; 0.3; 0.5; 0.6
|
||||
@ -302,6 +335,7 @@ bed_model = cr10_bed.stl
|
||||
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
|
||||
|
||||
thumbnail = CR10S_thumbnail.png
|
||||
[printer_model:CR10SPRO]
|
||||
name = Creality CR-10 S Pro
|
||||
variants = 0.4; 0.3; 0.5; 0.6
|
||||
@ -311,6 +345,7 @@ 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
|
||||
|
||||
thumbnail = CR10SPRO_thumbnail.png
|
||||
[printer_model:CR10SPROV2]
|
||||
name = Creality CR-10 S Pro V2
|
||||
variants = 0.4; 0.3; 0.5; 0.6
|
||||
@ -320,6 +355,7 @@ bed_model = cr10v2_bed.stl
|
||||
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
|
||||
|
||||
thumbnail = CR10SPROV2_thumbnail.png
|
||||
[printer_model:CR10S4]
|
||||
name = Creality CR-10 S4
|
||||
variants = 0.4; 0.3; 0.5; 0.6
|
||||
@ -329,6 +365,7 @@ bed_model = cr10s4_bed.stl
|
||||
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
|
||||
|
||||
thumbnail = CR10S4_thumbnail.png
|
||||
[printer_model:CR10S5]
|
||||
name = Creality CR-10 S5
|
||||
variants = 0.4; 0.3; 0.5; 0.6
|
||||
@ -338,6 +375,7 @@ bed_model = cr10s5_bed.stl
|
||||
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
|
||||
|
||||
thumbnail = CR10S5_thumbnail.png
|
||||
[printer_model:CR20]
|
||||
name = Creality CR-20
|
||||
variants = 0.4; 0.3; 0.5; 0.6
|
||||
@ -347,6 +385,7 @@ bed_model = ender3_bed.stl
|
||||
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
|
||||
|
||||
thumbnail = CR20_thumbnail.png
|
||||
[printer_model:CR20PRO]
|
||||
name = Creality CR-20 Pro
|
||||
variants = 0.4; 0.3; 0.5; 0.6
|
||||
@ -356,6 +395,7 @@ bed_model = ender3_bed.stl
|
||||
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
|
||||
|
||||
thumbnail = CR20PRO_thumbnail.png
|
||||
[printer_model:CR200B]
|
||||
name = Creality CR-200B
|
||||
variants = 0.4; 0.3; 0.5; 0.6
|
||||
@ -365,6 +405,7 @@ bed_model = cr200b_bed.stl
|
||||
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
|
||||
|
||||
thumbnail = CR200B_thumbnail.png
|
||||
[printer_model:CR8]
|
||||
name = Creality CR-8
|
||||
variants = 0.4; 0.3; 0.5; 0.6
|
||||
@ -374,24 +415,7 @@ bed_model = cr8_bed.stl
|
||||
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
|
||||
|
||||
#[printer_model:CRX]
|
||||
#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
|
||||
|
||||
thumbnail = CR8_thumbnail.png
|
||||
[printer_model:SERMOOND1]
|
||||
name = Creality Sermoon-D1
|
||||
variants = 0.4; 0.3; 0.5; 0.6
|
||||
@ -401,8 +425,7 @@ bed_model = sermoond1_bed.stl
|
||||
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
|
||||
|
||||
|
||||
|
||||
thumbnail = SERMOOND1_thumbnail.png
|
||||
[printer_model:SERMOONV1]
|
||||
name = Creality Sermoon-V1
|
||||
variants = 0.4; 0.3; 0.5; 0.6
|
||||
@ -412,8 +435,7 @@ bed_model = sermoonv1_bed.stl
|
||||
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
|
||||
|
||||
|
||||
|
||||
thumbnail = SERMOONV1_thumbnail.png
|
||||
[printer_model:SERMOONV1PRO]
|
||||
name = Creality Sermoon-V1 Pro
|
||||
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.
|
||||
|
||||
# Common print preset
|
||||
thumbnail = SERMOONV1PRO_thumbnail.png
|
||||
[print:*common*]
|
||||
avoid_crossing_perimeters = 0
|
||||
bridge_acceleration = 250
|
||||
@ -464,6 +487,10 @@ infill_only_where_needed = 0
|
||||
infill_overlap = 23%
|
||||
infill_speed = 50
|
||||
interface_shells = 0
|
||||
ironing_flowrate = 10%
|
||||
ironing_spacing = 0.1
|
||||
ironing_speed = 20
|
||||
ironing_type = top
|
||||
max_print_speed = 100
|
||||
max_volumetric_extrusion_rate_slope_negative = 0
|
||||
max_volumetric_extrusion_rate_slope_positive = 0
|
||||
@ -531,7 +558,7 @@ top_solid_infill_speed = 30
|
||||
support_material_speed = 40
|
||||
support_material_interface_speed = 100%
|
||||
bridge_speed = 25
|
||||
ironing_speed = 15
|
||||
ironing_speed = 20
|
||||
travel_speed = 150
|
||||
travel_speed_z = 0
|
||||
first_layer_speed = 20
|
||||
@ -1127,6 +1154,7 @@ min_fan_speed = 100
|
||||
bridge_fan_speed = 100
|
||||
disable_fan_first_layers = 1
|
||||
temperature = 205
|
||||
idle_temperature = 150
|
||||
|
||||
[filament:*PET*]
|
||||
inherits = *common*
|
||||
@ -1146,6 +1174,7 @@ max_fan_speed = 50
|
||||
min_fan_speed = 20
|
||||
bridge_fan_speed = 100
|
||||
temperature = 240
|
||||
idle_temperature = 160
|
||||
|
||||
[filament:*ABS*]
|
||||
inherits = *common*
|
||||
@ -1166,6 +1195,7 @@ min_fan_speed = 0
|
||||
bridge_fan_speed = 30
|
||||
top_fan_speed = 0
|
||||
temperature = 245
|
||||
idle_temperature = 180
|
||||
|
||||
[filament:*TPU*]
|
||||
inherits = *common*
|
||||
@ -1186,6 +1216,7 @@ min_fan_speed = 0
|
||||
bridge_fan_speed = 30
|
||||
top_fan_speed = 0
|
||||
temperature = 245
|
||||
idle_temperature = 130
|
||||
|
||||
[filament:Generic PLA @CREALITY]
|
||||
inherits = *PLA*
|
||||
@ -1455,6 +1486,18 @@ filament_density = 1.37
|
||||
filament_colour = #FF4640
|
||||
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]
|
||||
inherits = *PLA*
|
||||
filament_vendor = VOXELPLA
|
||||
@ -1625,7 +1668,7 @@ wipe = 1
|
||||
z_offset = 0
|
||||
printer_model =
|
||||
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
|
||||
|
||||
# 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
|
||||
[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
|
||||
[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
|
||||
[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
|
||||
[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
|
||||
[printer:*pauseprint*]
|
||||
@ -1992,7 +2035,7 @@ inherits = *ENDER4*; *0.6nozzle*
|
||||
|
||||
[printer:*ENDER5*]
|
||||
inherits = *common*; *bowdenlong*; *descendingz*
|
||||
bed_shape = 5x2.5,225x2.5,225x222.5,5x222.5
|
||||
bed_shape = 5x0,215x0,215x220,5x220
|
||||
max_print_height = 300
|
||||
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
|
||||
@ -2016,7 +2059,7 @@ inherits = *ENDER5*; *0.6nozzle*
|
||||
|
||||
[printer:*ENDER5PRO*]
|
||||
inherits = *common*; *bowdencapricorn*; *descendingz*
|
||||
bed_shape = 5x2.5,225x2.5,225x222.5,5x222.5
|
||||
bed_shape = 5x0,215x0,215x220,5x220
|
||||
max_print_height = 300
|
||||
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
|
||||
|
@ -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
|
||||
1.0.3 Added Eolas Prints filaments.
|
||||
1.0.2 Added new printer models.
|
||||
|
@ -2,17 +2,19 @@
|
||||
# By Andrew Suzuki (andrewsuzuki.com), adapted from Creality.ini
|
||||
|
||||
[vendor]
|
||||
repo_id = non-prusa-fff
|
||||
# Vendor name will be shown by the Config Wizard.
|
||||
name = Elegoo
|
||||
# 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.3
|
||||
config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/Elegoo/
|
||||
config_version = 2.0.0
|
||||
config_update_url = https://preset-repo-api.prusa3d.com/v1/repos/non-prusa-fff/Elegoo/
|
||||
|
||||
# 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 = https://preset-repo-api.prusa3d.com/v1/repos/non-prusa-fff/Elegoo/
|
||||
[printer_model:NEPTUNE1]
|
||||
name = Elegoo Neptune-1
|
||||
variants = 0.4
|
||||
@ -22,6 +24,7 @@ bed_model =
|
||||
bed_texture =
|
||||
default_materials = Generic PLA @ELEGOO; Generic PETG @ELEGOO; Generic ABS @ELEGOO
|
||||
|
||||
thumbnail = NEPTUNE1_thumbnail.png
|
||||
[printer_model:NEPTUNE2]
|
||||
name = Elegoo Neptune-2
|
||||
variants = 0.4
|
||||
@ -31,6 +34,7 @@ bed_model =
|
||||
bed_texture =
|
||||
default_materials = Generic PLA @ELEGOO; Generic PETG @ELEGOO; Generic ABS @ELEGOO
|
||||
|
||||
thumbnail = NEPTUNE2_thumbnail.png
|
||||
[printer_model:NEPTUNE2D]
|
||||
name = Elegoo Neptune-2D
|
||||
variants = 0.4
|
||||
@ -40,6 +44,7 @@ bed_model =
|
||||
bed_texture =
|
||||
default_materials = Generic PLA @ELEGOO; Generic PETG @ELEGOO; Generic ABS @ELEGOO
|
||||
|
||||
thumbnail = NEPTUNE2D_thumbnail.png
|
||||
[printer_model:NEPTUNE2S]
|
||||
name = Elegoo Neptune-2S
|
||||
variants = 0.4
|
||||
@ -49,6 +54,7 @@ bed_model =
|
||||
bed_texture =
|
||||
default_materials = Generic PLA @ELEGOO; Generic PETG @ELEGOO; Generic ABS @ELEGOO
|
||||
|
||||
thumbnail = NEPTUNE2S_thumbnail.png
|
||||
[printer_model:NEPTUNE3]
|
||||
name = Elegoo Neptune-3
|
||||
variants = 0.4
|
||||
@ -58,6 +64,7 @@ bed_model =
|
||||
bed_texture =
|
||||
default_materials = Generic PLA @ELEGOO; Generic PETG @ELEGOO; Generic ABS @ELEGOO
|
||||
|
||||
thumbnail = NEPTUNE3_thumbnail.png
|
||||
[printer_model:NEPTUNE3MAX]
|
||||
name = Elegoo Neptune-3 Max
|
||||
variants = 0.4
|
||||
@ -67,6 +74,7 @@ bed_model =
|
||||
bed_texture =
|
||||
default_materials = Generic PLA @ELEGOO; Generic PETG @ELEGOO; Generic ABS @ELEGOO
|
||||
|
||||
thumbnail = NEPTUNE3MAX_thumbnail.png
|
||||
[printer_model:NEPTUNE3PLUS]
|
||||
name = Elegoo Neptune-3 Plus
|
||||
variants = 0.4
|
||||
@ -76,6 +84,7 @@ bed_model =
|
||||
bed_texture =
|
||||
default_materials = Generic PLA @ELEGOO; Generic PETG @ELEGOO; Generic ABS @ELEGOO
|
||||
|
||||
thumbnail = NEPTUNE3PLUS_thumbnail.png
|
||||
[printer_model:NEPTUNE3PRO]
|
||||
name = Elegoo Neptune-3 Pro
|
||||
variants = 0.4
|
||||
@ -85,6 +94,7 @@ bed_model =
|
||||
bed_texture =
|
||||
default_materials = Generic PLA @ELEGOO; Generic PETG @ELEGOO; Generic ABS @ELEGOO
|
||||
|
||||
thumbnail = NEPTUNE3PRO_thumbnail.png
|
||||
[printer_model:NEPTUNEX]
|
||||
name = Elegoo Neptune-X
|
||||
variants = 0.4
|
||||
@ -98,6 +108,7 @@ default_materials = Generic PLA @ELEGOO; Generic PETG @ELEGOO; Generic ABS @ELEG
|
||||
# not make it into the user interface.
|
||||
|
||||
# Common print preset
|
||||
thumbnail = NEPTUNEX_thumbnail.png
|
||||
[print:*common*]
|
||||
avoid_crossing_perimeters = 0
|
||||
bridge_angle = 0
|
||||
@ -593,4 +604,3 @@ retract_length = 2.5
|
||||
retract_speed = 25
|
||||
printer_model = NEPTUNE3PRO
|
||||
printer_notes = Do not 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_ELEGOO\nPRINTER_MODEL_NEPTUNE3PRO
|
||||
|
||||
|
@ -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
|
||||
0.0.2 Updated start g-code for QQ Pro.
|
||||
0.0.1 Initial Version
|
||||
|
@ -3,19 +3,21 @@
|
||||
# Author: https://github.com/Foxies-CSTL/PrusaSlicer
|
||||
## Initial PR: https://github.com/prusa3d/PrusaSlicer/pull/5582
|
||||
[vendor]
|
||||
repo_id = non-prusa-fff
|
||||
# Vendor name will be shown by the Config Wizard.
|
||||
name = FLSun
|
||||
# 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 = 0.0.1
|
||||
config_version = 1.0.0
|
||||
# Where to get the updates from?
|
||||
config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/FLSun/
|
||||
config_update_url = https://preset-repo-api.prusa3d.com/v1/repos/non-prusa-fff/FLSun/
|
||||
# changelog_url = https://files.prusa3d.com/?latest=slicer-profiles&lng=%1%
|
||||
|
||||
# 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 = https://preset-repo-api.prusa3d.com/v1/repos/non-prusa-fff/FLSun/
|
||||
[printer_model:QQSP]
|
||||
name = FLSun QQS Pro
|
||||
variants = 0.4; 0.6
|
||||
@ -24,6 +26,7 @@ bed_model = QQSP_bed.stl
|
||||
bed_texture = QQSP.svg
|
||||
default_materials = Generic PLA @FLSUN; Generic PETG @FLSUN; Generic ABS @FLSUN; Generic SPLA @FLSUN; Generic FLEX @FLSUN
|
||||
|
||||
thumbnail = QQSP_thumbnail.png
|
||||
[printer_model:Q5]
|
||||
name = FLSun Q5
|
||||
variants = 0.4; 0.6
|
||||
@ -37,6 +40,7 @@ default_materials = Generic PLA @FLSUN; Generic PETG @FLSUN; Generic ABS @FLSUN;
|
||||
#########################################
|
||||
|
||||
# Common print preset
|
||||
thumbnail = Q5_thumbnail.png
|
||||
[print:*common_flsunq*]
|
||||
avoid_crossing_perimeters = 1
|
||||
avoid_crossing_perimeters_max_detour = 0
|
||||
@ -774,7 +778,7 @@ retract_length = 5
|
||||
retract_speed = 30
|
||||
retract_lift = 0.4
|
||||
silent_mode = 1
|
||||
start_gcode = ;STARTGCODE\nM117 Initializing\n; Set coordinate modes\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n; Reset speed and extrusion rates\nM200 D0 ; disable volumetric E\nM220 S100 ; reset speed\n; Set initial warmup temps\nM117 Nozzle preheat\nM104 S100 ; preheat extruder to no ooze temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed final temp\nM300 S40 P10 ; Bip\n; Home\nM117 Homing\nG28 ; home all with default mesh bed level\n; For ABL users put G29 for a leveling request\n; Final warmup routine\nM117 Final warmup\nM104 S[first_layer_temperature] ; set extruder final temp\nM109 S[first_layer_temperature] ; wait for extruder final temp\nM190 S[first_layer_bed_temperature] ; wait for bed final temp\nM300 S440 P200 ; 1st beep for printer ready and allow some time to clean nozzle\nM300 S0 P250 ; wait between dual beep\nM300 S440 P200 ; 2nd beep for printer ready\nG4 S10 ; wait to clean the nozzle\nM300 S440 P200 ; 3rd beep for ready to start printing\n; Prime line routine\nM117 Printing prime line\n;M900 K0; Disable Linear Advance (Marlin) for prime line\nG92 E0.0; reset extrusion distance\nG1 X-54.672 Y-95.203 Z0.3 F4000; go outside print area\nG92 E0.0; reset extrusion distance\nG1 E2 F1000 ; de-retract and push ooze\nG3 X38.904 Y-102.668 I54.672 J95.105 E20.999\nG3 X54.671 Y-95.203 I-38.815 J102.373 E5.45800\nG92 E0.0\nG1 E-5 F3000 ; retract 5mm\nG1 X52.931 Y-96.185 F1000 ; wipe\nG1 X50.985 Y-97.231 F1000 ; wipe\nG1 X49.018 Y-98.238 F1000 ; wipe\nG1 X0 Y-109.798 F1000\nG1 E4.8 F1500; de-retract\nG92 E0.0 ; reset extrusion distance\n; Final print adjustments\nM117 Preparing to print\n;M82 ; extruder absolute mode\nM221 S{if layer_height<0.075}100{else}95{endif}\nM300 S40 P10 ; chirp\nM117 Print [input_filename]; Display: Printing started...
|
||||
start_gcode = ;STARTGCODE\nM117 Initializing\n; Set coordinate modes\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n; Reset speed and extrusion rates\nM200 D0 ; disable volumetric E\nM220 S100 ; reset speed\n; Set initial warmup temps\nM117 Nozzle preheat\nM104 S100 ; preheat extruder to no ooze temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed final temp\nM300 S40 P10 ; Bip\n; Home\nM117 Homing\nG28 ; home all with default mesh bed level\n; For ABL users put G29 for a leveling request\n; Final warmup routine\nM117 Final warmup\nM104 S[first_layer_temperature] ; set extruder final temp\nM109 S[first_layer_temperature] ; wait for extruder final temp\nM190 S[first_layer_bed_temperature] ; wait for bed final temp\nM300 S440 P200 ; 1st beep for printer ready and allow some time to clean nozzle\nM300 S0 P250 ; wait between dual beep\nM300 S440 P200 ; 2nd beep for printer ready\nG4 S10 ; wait to clean the nozzle\nM300 S440 P200 ; 3rd beep for ready to start printing\n; Prime line routine\nM117 Printing prime line\n;M900 K0; Disable Linear Advance (Marlin) for prime line\nG92 E0.0; reset extrusion distance\nG1 X-54.672 Y-95.203 Z0.3 F4000; go outside print area\nG92 E0.0; reset extrusion distance\nG1 E2 F1000 ; de-retract and push ooze\nG3 X38.904 Y-102.668 I54.672 J95.105 E20.999\nG3 X54.671 Y-95.203 I-38.815 J102.373 E5.45800\nG92 E0.0\nG1 E-5 F3000 ; retract 5mm\nG1 X52.931 Y-96.185 F1000 ; wipe\nG1 X50.985 Y-97.231 F1000 ; wipe\nG1 X49.018 Y-98.238 F1000 ; wipe\nG1 X0 Y-109.798 F1000\nG1 E4.8 F1500; de-retract\nG92 E0.0 ; reset extrusion distance\n; Final print adjustments\nM117 Preparing to print\n;M82 ; extruder absolute mode\nM221 S{if layer_height<0.075}100{else}95{endif}\nM300 S40 P10 ; chirp\nM117 Print
|
||||
thumbnails = 16x16,260x260
|
||||
use_relative_e_distances = 1
|
||||
use_volumetric_e = 0
|
||||
|
@ -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
|
||||
0.1.0 Initial Geeetech bundle
|
||||
|
||||
|
@ -3,18 +3,20 @@
|
||||
# https://github.com/prusa3d/PrusaSlicer/pull/9221 by @alexwoo1900
|
||||
|
||||
[vendor]
|
||||
repo_id = non-prusa-fff
|
||||
# Vendor name will be shown by the Config Wizard.
|
||||
name = Geeetech
|
||||
# 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 = 0.1.0
|
||||
config_version = 1.0.0
|
||||
# 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,
|
||||
# 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 = https://preset-repo-api.prusa3d.com/v1/repos/non-prusa-fff/Geeetech/
|
||||
[printer_model:Thunder]
|
||||
name = Geeetech Thunder
|
||||
variants = 0.4; 0.2; 0.6; 0.8
|
||||
@ -24,6 +26,7 @@ bed_model = 250x250.stl
|
||||
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
|
||||
|
||||
thumbnail = Thunder_thumbnail.png
|
||||
[printer_model:ThunderPro]
|
||||
name = Geeetech Thunder Pro
|
||||
variants = 0.4; 0.2; 0.6; 0.8
|
||||
@ -33,6 +36,7 @@ bed_model = 250x250.stl
|
||||
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
|
||||
|
||||
thumbnail = ThunderPro_thumbnail.png
|
||||
[printer_model:MizarS]
|
||||
name = Geeetech Mizar S
|
||||
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
|
||||
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]
|
||||
name = Geeetech Mizar Pro
|
||||
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
|
||||
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]
|
||||
name = Geeetech Mizar
|
||||
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
|
||||
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]
|
||||
name = Geeetech Mizar Max
|
||||
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
|
||||
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]
|
||||
name = Geeetech Mizar M
|
||||
variants = 0.4
|
||||
@ -87,6 +95,7 @@ default_materials = Generic PLA @Geeetech; Generic PETG @Geeetech; Generic ABS @
|
||||
#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
|
||||
|
||||
thumbnail = MizarM_thumbnail.png
|
||||
[printer_model:A10Pro]
|
||||
name = Geeetech A10 Pro
|
||||
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
|
||||
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]
|
||||
name = Geeetech A10 M
|
||||
variants = 0.4
|
||||
@ -105,6 +115,7 @@ bed_model = 220x220.stl
|
||||
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
|
||||
|
||||
thumbnail = A10M_thumbnail.png
|
||||
[printer_model:A10T]
|
||||
name = Geeetech A10 T
|
||||
variants = 0.4
|
||||
@ -114,6 +125,7 @@ bed_model = 220x220.stl
|
||||
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
|
||||
|
||||
thumbnail = A10T_thumbnail.png
|
||||
[printer_model:A20]
|
||||
name = Geeetech A20
|
||||
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
|
||||
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]
|
||||
name = Geeetech A20 M
|
||||
variants = 0.4
|
||||
@ -132,6 +145,7 @@ bed_model = 250x250.stl
|
||||
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
|
||||
|
||||
thumbnail = A20M_thumbnail.png
|
||||
[printer_model:A20T]
|
||||
name = Geeetech A20 T
|
||||
variants = 0.4
|
||||
@ -141,6 +155,7 @@ bed_model = 250x250.stl
|
||||
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
|
||||
|
||||
thumbnail = A20T_thumbnail.png
|
||||
[printer_model:A30Pro]
|
||||
name = Geeetech A30 Pro
|
||||
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
|
||||
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]
|
||||
name = Geeetech A30 M
|
||||
variants = 0.4
|
||||
@ -159,6 +175,7 @@ bed_model = 320x320.stl
|
||||
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
|
||||
|
||||
thumbnail = A30M_thumbnail.png
|
||||
[printer_model:A30T]
|
||||
name = Geeetech A30 T
|
||||
variants = 0.4
|
||||
@ -168,6 +185,7 @@ bed_model = 320x320.stl
|
||||
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
|
||||
|
||||
thumbnail = A30T_thumbnail.png
|
||||
[printer_model:E180]
|
||||
name = Geeetech E180
|
||||
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
|
||||
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]
|
||||
name = Geeetech Me Ducer
|
||||
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
|
||||
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]
|
||||
name = Geeetech Me Creator
|
||||
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
|
||||
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]
|
||||
name = Geeetech Me Creator2
|
||||
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
|
||||
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]
|
||||
name = Geeetech GiantArmD200
|
||||
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
|
||||
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]
|
||||
name = Geeetech I3 ProB
|
||||
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
|
||||
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]
|
||||
name = Geeetech I3 ProW
|
||||
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
|
||||
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]
|
||||
name = Geeetech I3 ProC
|
||||
variants = 0.4
|
||||
@ -246,6 +271,7 @@ default_materials = Generic PLA @Geeetech; Generic PETG @Geeetech; Generic ABS @
|
||||
####### Start ###print presets ########
|
||||
#########################################
|
||||
|
||||
thumbnail = I3ProC_thumbnail.png
|
||||
[print:*common*]
|
||||
# Print presets for common printers
|
||||
avoid_crossing_perimeters = 0
|
||||
|
@ -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
|
||||
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.2 Improved start gcode, changed filename format
|
||||
0.0.1 Initial version
|
||||
|
@ -1,15 +1,17 @@
|
||||
# generated by PrusaSlicer 2.1.1+win64 on 2020-02-25 at 01:51:21 UTC
|
||||
|
||||
[vendor]
|
||||
repo_id = non-prusa-fff
|
||||
# Vendor name will be shown by the Config Wizard.
|
||||
name = INAT
|
||||
config_version = 0.0.4
|
||||
config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/INAT/
|
||||
config_version = 1.0.0
|
||||
config_update_url = https://preset-repo-api.prusa3d.com/v1/repos/non-prusa-fff/INAT/
|
||||
|
||||
###
|
||||
### PRINTER LIST
|
||||
###
|
||||
|
||||
config_url = https://preset-repo-api.prusa3d.com/v1/repos/non-prusa-fff/INAT/
|
||||
[printer_model:PROTON_X_RAIL]
|
||||
name = INAT Proton X Rail
|
||||
variants = 0.4
|
||||
@ -17,6 +19,7 @@ technology = FFF
|
||||
family = Proton
|
||||
default_materials = PLA @PROTON_X
|
||||
|
||||
thumbnail = PROTON_X_RAIL_thumbnail.png
|
||||
[printer_model:PROTON_X_ROD]
|
||||
name = INAT Proton X Rod
|
||||
variants = 0.4
|
||||
@ -24,6 +27,7 @@ technology = FFF
|
||||
family = Proton
|
||||
default_materials = PLA @PROTON_X
|
||||
|
||||
thumbnail = PROTON_X_ROD_thumbnail.png
|
||||
[printer_model:PROTON_XE750]
|
||||
name = INAT Proton XE-750
|
||||
variants = 0.4
|
||||
@ -36,6 +40,7 @@ default_materials = PLA @PROTON_XE750
|
||||
### COMMON QUALITY DEFINITIONS
|
||||
###
|
||||
|
||||
thumbnail = PROTON_XE750_thumbnail.png
|
||||
[print:*common*]
|
||||
#layers
|
||||
layer_height = 0.2
|
||||
|
@ -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
|
||||
1.0.0 Initial Infinity3D bundle
|
||||
|
@ -1,15 +1,17 @@
|
||||
# Infinity3D profiles
|
||||
|
||||
[vendor]
|
||||
repo_id = non-prusa-fff
|
||||
# Vendor name will be shown by the Config Wizard.
|
||||
name = Infinity3D
|
||||
# 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.
|
||||
config_version = 1.0.0
|
||||
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/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,
|
||||
|
||||
config_url = https://preset-repo-api.prusa3d.com/v1/repos/non-prusa-fff/Infinity3D/
|
||||
[printer_model:DEV-200]
|
||||
name = Infinity3D DEV-200
|
||||
variants = 0.4
|
||||
@ -18,6 +20,7 @@ bed_model = DEV_200_bed.stl
|
||||
bed_texture = DEV_200_texture.svg
|
||||
default_materials = Generic PLA @Infinity3D; Generic PETG @Infinity3D
|
||||
|
||||
thumbnail = DEV-200_thumbnail.png
|
||||
[printer_model:DEV-350]
|
||||
name = Infinity3D DEV-350
|
||||
variants = 0.4
|
||||
@ -26,6 +29,7 @@ bed_model = DEV_350_bed.stl
|
||||
bed_texture = DEV_350_texture.svg
|
||||
default_materials = Generic PLA @Infinity3D; Generic PETG @Infinity3D
|
||||
|
||||
thumbnail = DEV-350_thumbnail.png
|
||||
[print:*common*]
|
||||
avoid_crossing_perimeters = 1
|
||||
avoid_crossing_perimeters_max_detour = 0
|
||||
|
@ -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
|
||||
1.0.0 Initial Jubilee bundle
|
||||
|
@ -3,15 +3,17 @@
|
||||
# Based on the profiles from: https://github.com/machineagency/jubilee/tree/main/software/slicer_settings/prusa_slic3r by yvessa
|
||||
|
||||
[vendor]
|
||||
repo_id = non-prusa-fff
|
||||
# Vendor name will be shown by the Config Wizard.
|
||||
name = Jubilee
|
||||
# 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.
|
||||
config_version = 1.0.0
|
||||
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/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,
|
||||
|
||||
config_url = https://preset-repo-api.prusa3d.com/v1/repos/non-prusa-fff/Jubilee/
|
||||
[printer_model:Jubilee]
|
||||
name = Jubilee
|
||||
variants = 0.4; Volcano 0.4
|
||||
@ -20,6 +22,7 @@ bed_model = Jubilee_bed.stl
|
||||
bed_texture = Jubilee_texture.svg
|
||||
default_materials = Generic PLA @Jubilee; Generic PETG @Jubilee
|
||||
|
||||
thumbnail = Jubilee_thumbnail.png
|
||||
[print:*common*]
|
||||
avoid_crossing_perimeters = 0
|
||||
bottom_fill_pattern = monotonic
|
||||
|
@ -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
|
||||
0.0.4 Updated Start G-Codes.
|
||||
0.0.3 Added new printer profile.
|
||||
|
@ -5,15 +5,16 @@
|
||||
########################################
|
||||
|
||||
[vendor]
|
||||
repo_id = non-prusa-fff
|
||||
# Vendor name will be shown by the Config Wizard.
|
||||
name = LNL3D
|
||||
|
||||
# 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 = 0.0.4
|
||||
config_version = 1.0.0
|
||||
|
||||
# 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 ##########
|
||||
@ -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.
|
||||
# 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]
|
||||
name = LNL3D D3
|
||||
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
|
||||
default_materials = Generic PLA @LNL3D; Generic PETG @LNL3D; Generic TPU @LNL3D;
|
||||
|
||||
thumbnail = LNL3D_D3_thumbnail.png
|
||||
[printer_model:LNL3D_D3_VULCAN]
|
||||
name = LNL3D D3 Vulcan
|
||||
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
|
||||
default_materials = Generic PLA @LNL3D; Generic PETG @LNL3D; Generic TPU @LNL3D;
|
||||
|
||||
thumbnail = LNL3D_D3_VULCAN_thumbnail.png
|
||||
[printer_model:LNL3D_D3_V2]
|
||||
name = LNL3D D3 V2
|
||||
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
|
||||
default_materials = Generic PLA @LNL3D; Generic PETG @LNL3D; Generic TPU @LNL3D;
|
||||
|
||||
thumbnail = LNL3D_D3_V2_thumbnail.png
|
||||
[printer_model:LNL3D_D5]
|
||||
name = LNL3D D5
|
||||
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
|
||||
default_materials = Generic PLA @LNL3D; Generic PETG @LNL3D; Generic TPU @LNL3D;
|
||||
|
||||
thumbnail = LNL3D_D5_thumbnail.png
|
||||
[printer_model:LNL3D_D6]
|
||||
name = LNL3D D6
|
||||
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.
|
||||
|
||||
# Common print presets
|
||||
thumbnail = LNL3D_D6_thumbnail.png
|
||||
[print:*common*]
|
||||
avoid_crossing_perimeters = 0
|
||||
bridge_acceleration = 250
|
||||
|
@ -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
|
||||
0.1.0 General rework. Added new print and filament profiles.
|
||||
0.0.2 Removed obsolete host keys
|
||||
|
@ -2,11 +2,13 @@
|
||||
# Based on community profiles and original profiles from Cura LulzBot Edition.
|
||||
|
||||
[vendor]
|
||||
repo_id = non-prusa-fff
|
||||
# Vendor name will be shown by the Config Wizard.
|
||||
name = LulzBot
|
||||
config_version = 0.1.0
|
||||
config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/LulzBot/
|
||||
config_version = 1.0.0
|
||||
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]
|
||||
name = Mini Aero
|
||||
variants = 0.5
|
||||
@ -15,6 +17,7 @@ technology = FFF
|
||||
#bed_texture = mini.svg
|
||||
default_materials = Generic PLA @lulzbot; Generic PETG @lulzbot; Jessie PLA @lulzbot
|
||||
|
||||
thumbnail = MINI_AERO_thumbnail.png
|
||||
[printer_model:TAZ6_AERO]
|
||||
name = Taz6 Aero
|
||||
variants = 0.5
|
||||
@ -27,6 +30,7 @@ default_materials = Generic PLA @lulzbot; Generic PETG @lulzbot; Jessie PLA @lul
|
||||
# technology = FFF
|
||||
# default_materials = Generic PLA @lulzbot; Generic PETG @lulzbot; Jessie PLA @lulzbot
|
||||
|
||||
thumbnail = TAZ6_AERO_thumbnail.png
|
||||
[print:*common*]
|
||||
avoid_crossing_perimeters = 0
|
||||
bottom_fill_pattern = monotonic
|
||||
|
@ -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
|
||||
0.1.1 Adjusted M2, M2Dual and M3 starting scripts
|
||||
0.1.0 Initial version
|
||||
|
@ -1,10 +1,12 @@
|
||||
# Print profiles for the MakerGear printers.
|
||||
|
||||
[vendor]
|
||||
repo_id = non-prusa-fff
|
||||
name = MakerGear
|
||||
config_version = 0.1.0
|
||||
config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/MakerGear/
|
||||
config_version = 1.0.0
|
||||
config_update_url = https://preset-repo-api.prusa3d.com/v1/repos/non-prusa-fff/MakerGear/
|
||||
|
||||
config_url = https://preset-repo-api.prusa3d.com/v1/repos/non-prusa-fff/MakerGear/
|
||||
[printer_model:MAKERGEAR_MICRO]
|
||||
# bed_model = waiting on this one
|
||||
default_materials = MakerGear PLA @MakerGear_MICRO
|
||||
@ -13,6 +15,7 @@ name = Micro
|
||||
technology = FFF
|
||||
variants = 0.40
|
||||
|
||||
thumbnail = MAKERGEAR_MICRO_thumbnail.png
|
||||
[printer_model:MAKERGEAR_M2]
|
||||
bed_model = M2_M3.stl
|
||||
bed_texture = M2_M3.svg
|
||||
@ -22,6 +25,7 @@ name = MakerGear M2(V4 Hotend)
|
||||
technology = FFF
|
||||
variants = 0.35; 0.50; 0.25; 0.75
|
||||
|
||||
thumbnail = MAKERGEAR_M2_thumbnail.png
|
||||
[printer_model:MAKERGEAR_M2_DUAL]
|
||||
bed_model = M2_M3.stl
|
||||
bed_texture = M2_M3.svg
|
||||
@ -31,6 +35,7 @@ name = MakerGear M2 Dual
|
||||
technology = FFF
|
||||
variants = 0.35; 0.50; 0.25; 0.75
|
||||
|
||||
thumbnail = MAKERGEAR_M2_DUAL_thumbnail.png
|
||||
[printer_model:MAKERGEAR_M3_SE]
|
||||
bed_model = M2_M3.stl
|
||||
bed_texture = M2_M3.svg
|
||||
@ -40,6 +45,7 @@ name = M3 - Single Extruder
|
||||
technology = FFF
|
||||
variants = 0.35; 0.50; 0.25; 0.75
|
||||
|
||||
thumbnail = MAKERGEAR_M3_SE_thumbnail.png
|
||||
[printer_model:MAKERGEAR_M3_ID_0]
|
||||
bed_model = M2_M3.stl
|
||||
bed_texture = M2_M3.svg
|
||||
@ -85,6 +91,7 @@ name = Ultra One
|
||||
technology = FFF
|
||||
variants = 0.50; 0.25; 0.35; 0.75
|
||||
|
||||
thumbnail = MAKERGEAR_U1_thumbnail.png
|
||||
[printer_model:MAKERGEAR_U1_DUPLICATION]
|
||||
# bed_model =
|
||||
# bed_texture =
|
||||
@ -1267,7 +1274,7 @@ nozzle_diameter = 0.35
|
||||
printer_model = MAKERGEAR_M2
|
||||
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_MAKERGEAR\nPRINTER_MODEL_MAKERGEAR_M2\n
|
||||
printer_variant = 0.35
|
||||
start_gcode = M108 S255 ; turn on M2 fans\nG28 ; home all axes\nG1 Y50 Z0.3 F9600 ; move forward to avoid binder clips\nG1 X205 Z10 ; move off platform\nG1 Z0.4 ; position nozzle\nG92 E0 ; zero extruder\nM109 S[first_layer_temperature_[current_extruder]]\nG1 E25 F225 ; purge nozzle\nG92 E0 ; zero extruder\nG1 X190 Z0.1 E1.0 F1200 ; slow wipe\nG1 X180 Z0.25 ; lift\n
|
||||
start_gcode = M108 S255 ; turn on M2 fans\nG28 ; home all axes\nG1 Y50 F6000 ; move forward to avoid binder clips\nG1 X205 Z10 ; move off platform\nG1 Z0.4 ; position nozzle\nG92 E0 ; zero extruder\nM109 S[first_layer_temperature_[current_extruder]]\nG1 E25 F225 ; purge nozzle\nG92 E0 ; zero extruder\nG1 X190 Z0.1 E1.0 F1200 ; slow wipe\nG1 X180 Z0.25 ; lift\n
|
||||
# thumbnails = 16x16,220x124
|
||||
|
||||
[printer:MakerGear M2 0.25 Nozzle]
|
||||
@ -1328,7 +1335,7 @@ nozzle_diameter = 0.35,0.35
|
||||
printer_model = MAKERGEAR_M2_DUAL
|
||||
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_MAKERGEAR\nPRINTER_MODEL_MAKERGEAR_M2_DUAL\n
|
||||
printer_variant = 0.35
|
||||
start_gcode = \nM108 S0 ; Turn on M2 fans\n; Turn off hotends to reduce ooze on the bed during startup\n; NOTE: this does not explicitly wait for the hotends to completely cool down\nM104 T0 S0\nM104 T1 S0\n\n{if first_layer_bed_temperature[1] < first_layer_bed_temperature[0]}\nM140 S{first_layer_bed_temperature[0]} ; Set bed temperature\nM190 S{first_layer_bed_temperature[0]} ; Wait for bed to reach temperature\n{endif}\n\n{if first_layer_bed_temperature[0] < first_layer_bed_temperature[1]}\nM140 S{first_layer_bed_temperature[1]} ; Set bed temperature\nM190 S{first_layer_bed_temperature[1]} ; Wait for bed to reach temperature\n{endif}\n\nT1 ; Switch to right extruder offsets for homing\nG28 ; Home all axes\nT0 ; Switch to left extruder\nG1 X0 Y50 Z0.3 F9600 ; Move forward to avoid binder clips\nG1 X200 Z10 F3600 ; Move off platform\n\n; Set hotend temperature\nM104 T0 S{first_layer_temperature[0]}\nM104 T1 S{first_layer_temperature[1]}\n\n; Wait for hotends to reach temperature\nM109 T0 S{first_layer_temperature[0]}\nM109 T1 S{first_layer_temperature[1]}\n\n\n{if temperature[1] == 0}\n; Single Mode - Left Purge script\n\nG1 Z0.4 ; Position nozzle above buildplate\nG92 E0 ; Zero extruder\nG1 E25 F225 ; Purge left extruder\nG92 E0 ; Zero extruder\nG1 X160 Z0.1 E1.0 F1200 ; Slow wipe\nG1 X140 Z0.25 ; Lift\n{endif}\n\n{if temperature[0] == 0}\n; Single Mode - Right Purge Script\n\nG1 Z0.4 ; Position nozzle above buildplate\nT1 ; Switch to right extruder\nG92 E0 ; Zero extruder\nG1 E25 F225 ; Purge right extruder\nG92 E0 ; Zero extruder\nG1 X160 Z0.1 E1.0 F1200 ; Slow wipe\nG1 X140 Z0.25 ; Lift\n{endif}\n\n{if temperature[0] > 0 and temperature[1] > 0}\n; Dual Mode - Purge Script\nG1 Z0.4 ; Position nozzle above buildplate\nG92 E0 ; Zero extruder\nG1 E25 F225 ; Purge left extruder\nG92 E0 ; Zero extruder\nT1 ; Set right extruder\nG1 E25 F225 ; Purge right extruder\nG92 E0 ; Zero extruder\nG1 X160 Z0.1 E1.0 F1200 ; Slow wipe\nG1 X140 Z0.25 ; Lift\nT0\nG92 E0 ; Zero extruder\n{endif}
|
||||
start_gcode = \nM108 S0 ; Turn on M2 fans\n; Turn off hotends to reduce ooze on the bed during startup\n; NOTE: this does not explicitly wait for the hotends to completely cool down\nM104 T0 S0\nM104 T1 S0\n\n{if first_layer_bed_temperature[1] < first_layer_bed_temperature[0]}\nM140 S{first_layer_bed_temperature[0]} ; Set bed temperature\nM190 S{first_layer_bed_temperature[0]} ; Wait for bed to reach temperature\n{endif}\n\n{if first_layer_bed_temperature[0] < first_layer_bed_temperature[1]}\nM140 S{first_layer_bed_temperature[1]} ; Set bed temperature\nM190 S{first_layer_bed_temperature[1]} ; Wait for bed to reach temperature\n{endif}\n\nT1 ; Switch to right extruder offsets for homing\nG28 ; Home all axes\nT0 ; Switch to left extruder\nG1 X0 Y50 F6000 ; Move forward to avoid binder clips\nG1 X200 Z10 F3600 ; Move off platform\n\n; Set hotend temperature\nM104 T0 S{first_layer_temperature[0]}\nM104 T1 S{first_layer_temperature[1]}\n\n; Wait for hotends to reach temperature\nM109 T0 S{first_layer_temperature[0]}\nM109 T1 S{first_layer_temperature[1]}\n\n\n{if temperature[1] == 0}\n; Single Mode - Left Purge script\n\nG1 Z0.4 ; Position nozzle above buildplate\nG92 E0 ; Zero extruder\nG1 E25 F225 ; Purge left extruder\nG92 E0 ; Zero extruder\nG1 X160 Z0.1 E1.0 F1200 ; Slow wipe\nG1 X140 Z0.25 ; Lift\n{endif}\n\n{if temperature[0] == 0}\n; Single Mode - Right Purge Script\n\nG1 Z0.4 ; Position nozzle above buildplate\nT1 ; Switch to right extruder\nG92 E0 ; Zero extruder\nG1 E25 F225 ; Purge right extruder\nG92 E0 ; Zero extruder\nG1 X160 Z0.1 E1.0 F1200 ; Slow wipe\nG1 X140 Z0.25 ; Lift\n{endif}\n\n{if temperature[0] > 0 and temperature[1] > 0}\n; Dual Mode - Purge Script\nG1 Z0.4 ; Position nozzle above buildplate\nG92 E0 ; Zero extruder\nG1 E25 F225 ; Purge left extruder\nG92 E0 ; Zero extruder\nT1 ; Set right extruder\nG1 E25 F225 ; Purge right extruder\nG92 E0 ; Zero extruder\nG1 X160 Z0.1 E1.0 F1200 ; Slow wipe\nG1 X140 Z0.25 ; Lift\nT0\nG92 E0 ; Zero extruder\n{endif}
|
||||
# thumbnails = 16x16,220x124
|
||||
|
||||
[printer:MakerGear M2 Dual 0.25 Nozzle]
|
||||
@ -1389,7 +1396,7 @@ nozzle_diameter = 0.35
|
||||
printer_model = MAKERGEAR_M3_SE
|
||||
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_MAKERGEAR\nPRINTER_MODEL_MAKERGEAR_M3_SE\n
|
||||
printer_variant = 0.35
|
||||
start_gcode = G28 ; home all axes\nG1 X215 Y40 Z0.1 F10000 ; move off the bed and bring the bed up\nM109 S[first_layer_temperature_[current_extruder]]\nG92 E0 ; zero extruder\nG1 X195 Z0.1 F1000; scrape off any ooze\nG1 Z5 ; lift\nG1 X170 Y3 F10000; move to unused front edge\nG1 Z0.30 F1000\n\nG1 X40 E20 F1000\nG1 X30 Z0.05 F1000 ; wipe off tail\nG1 Z1\nG92 E0\nM211 S0 ;disable software endstops\n; ok now you can start
|
||||
start_gcode = G28 ; home all axes\nG1 X215 Y40 Z0.1 F10000 ; move off the bed and bring the bed up\nM109 S[first_layer_temperature_[current_extruder]]\nG92 E0 ; zero extruder\nG1 X195 Z0.1 F1000; scrape off any ooze\nG1 Z5 ; lift\nG1 X170 Y3 F10000; move to unused front edge\nG1 Z0.30 F1000\nG1 X40 E20 F1000\nG1 X30 Z0.05 F1000 ; wipe off tail\nG1 Z1\nG92 E0\nM211 S0 ;disable software endstops\n; ok now you can start
|
||||
# thumbnails = 16x16,220x124
|
||||
|
||||
[printer:MakerGear M3 Single Extruder 0.25 Nozzle]
|
||||
|
@ -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
|
||||
0.1.0 Initial version
|
@ -1,11 +1,13 @@
|
||||
# Print profiles for Papapiu printers.
|
||||
[vendor]
|
||||
repo_id = non-prusa-fff
|
||||
name = Papapiu
|
||||
config_version = 0.1.0
|
||||
config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/PapapiuLab/
|
||||
config_version = 1.0.0
|
||||
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]
|
||||
name = Papapiu N1S
|
||||
variants = 0.4
|
||||
|
@ -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
|
||||
0.0.1 Initial version
|
@ -2,19 +2,21 @@
|
||||
# Created from scratch from default FFF
|
||||
|
||||
[vendor]
|
||||
repo_id = non-prusa-fff
|
||||
# Vendor name will be shown by the Config Wizard.
|
||||
name = Print4Taste
|
||||
# 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 = 0.0.1
|
||||
config_version = 1.0.0
|
||||
# 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,
|
||||
# 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 = https://preset-repo-api.prusa3d.com/v1/repos/non-prusa-fff/Print4Taste/
|
||||
[printer_model:MC2.0]
|
||||
name = mycusini 2.0
|
||||
variants = 1.0
|
||||
@ -24,6 +26,7 @@ bed_model = MC2.0_bed.stl
|
||||
bed_texture = MC2.0_texture.svg
|
||||
default_materials = mycusini 3D Choco @MC2.0
|
||||
|
||||
thumbnail = MC2.0_thumbnail.png
|
||||
[print:*common_MC2.0*]
|
||||
bottom_solid_layers = 2
|
||||
bridge_speed = 30
|
||||
|
@ -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
|
||||
1.14.0 Added new settings for SLA material profiles.
|
||||
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.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).
|
||||
|
5
resources/profiles/PrusaResearchSLA.idx
Normal 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
|
3558
resources/profiles/PrusaResearchSLA.ini
Normal file
Before Width: | Height: | Size: 84 KiB After Width: | Height: | Size: 84 KiB |
Before Width: | Height: | Size: 77 KiB After Width: | Height: | Size: 77 KiB |
Before Width: | Height: | Size: 9.2 KiB After Width: | Height: | Size: 9.2 KiB |
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
@ -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
|
||||
1.0.3 Updated flavor. Updated start g-code.
|
||||
min_slic3r_version = 2.4.1-alpha0
|
||||
|
@ -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
|
||||
1.0.1 General rework. Fix start gcodes.
|
||||
min_slic3r_version = 2.6.0-alpha0
|
||||
|
@ -1,19 +1,21 @@
|
||||
# Print profiles for the Rigid3D printers.
|
||||
|
||||
[vendor]
|
||||
repo_id = non-prusa-fff
|
||||
# Vendor name will be shown by the Config Wizard.
|
||||
name = Rigid3D
|
||||
# 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.1
|
||||
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/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%
|
||||
|
||||
# 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 = https://preset-repo-api.prusa3d.com/v1/repos/non-prusa-fff/Rigid3D/
|
||||
[printer_model:Zero2]
|
||||
name = Rigid3D Zero2
|
||||
variants = 0.4
|
||||
@ -23,6 +25,7 @@ bed_model = zero_bed.stl
|
||||
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
|
||||
|
||||
thumbnail = Zero2_thumbnail.png
|
||||
[printer_model:Zero3]
|
||||
name = Rigid3D Zero3
|
||||
variants = 0.4
|
||||
@ -32,6 +35,7 @@ bed_model = zero_bed.stl
|
||||
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
|
||||
|
||||
thumbnail = Zero3_thumbnail.png
|
||||
[printer_model:Mucit]
|
||||
name = Rigid3D Mucit
|
||||
variants = 0.4
|
||||
@ -41,6 +45,7 @@ bed_model = mucit_bed.stl
|
||||
bed_texture = mucit_bed.png
|
||||
default_materials = Generic PLA @Rigid3D; Rigid3D PLA @Rigid3D
|
||||
|
||||
thumbnail = Mucit_thumbnail.png
|
||||
[printer_model:Mucit2]
|
||||
name = Rigid3D Mucit2
|
||||
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.
|
||||
|
||||
# Common print preset
|
||||
thumbnail = Mucit2_thumbnail.png
|
||||
[print:*common*]
|
||||
avoid_crossing_perimeters = 0
|
||||
avoid_crossing_perimeters_max_detour = 0
|
||||
|
@ -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
|
||||
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.0 Add more Snapmaker printers.
|
||||
min_slic3r_version = 2.4.1
|
||||
|
@ -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
|
||||
1.0.0 Initial Sovol bundle
|
||||
|
@ -2,21 +2,23 @@
|
||||
# Original PR: https://github.com/prusa3d/PrusaSlicer/pull/10957 by https://github.com/ils15
|
||||
|
||||
[vendor]
|
||||
repo_id = non-prusa-fff
|
||||
# Vendor name will be shown by the Config Wizard.
|
||||
name = Sovol
|
||||
|
||||
# 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
|
||||
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/Sovol/
|
||||
config_update_url = https://preset-repo-api.prusa3d.com/v1/repos/non-prusa-fff/Sovol/
|
||||
# changelog_url = https://files.prusa3d.com/?latest=slicer-profiles&lng=%1%
|
||||
|
||||
# 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 = https://preset-repo-api.prusa3d.com/v1/repos/non-prusa-fff/Sovol/
|
||||
[printer_model:SV06]
|
||||
name = SV06
|
||||
variants = 0.4; 0.3; 0.6; 0.8
|
||||
@ -26,6 +28,7 @@ bed_model = SV06_bed.stl
|
||||
bed_texture = SV06_texture.svg
|
||||
default_materials = Generic PLA @SOVOL; Generic ABS @SOVOL; Generic PETG @SOVOL; Prusament ASA @SOVOL; Prusament PC Blend @SOVOL; Prusament PC Blend Carbon Fiber @SOVOL; Prusament PA11 Carbon Fiber @SOVOL
|
||||
|
||||
thumbnail = SV06_thumbnail.png
|
||||
[printer_model:SV06 PLUS]
|
||||
name = SV06 PLUS
|
||||
variants = 0.4; 0.3; 0.6; 0.8
|
||||
@ -35,6 +38,7 @@ bed_model = SV06PLUS_bed.stl
|
||||
bed_texture = SV06PLUS_texture.svg
|
||||
default_materials = Generic PLA @SOVOL; Generic ABS @SOVOL; Generic PETG @SOVOL; Prusament ASA @SOVOL; Prusament PC Blend @SOVOL; Prusament PC Blend Carbon Fiber @SOVOL; Prusament PA11 Carbon Fiber @SOVOL
|
||||
|
||||
thumbnail = SV06 PLUS_thumbnail.png
|
||||
[printer_model:SV05]
|
||||
name = SV05
|
||||
variants = 0.4; 0.3; 0.6; 0.8
|
||||
@ -44,6 +48,7 @@ bed_model = SV05_bed.stl
|
||||
bed_texture = SV03_texture.svg
|
||||
default_materials = Generic PLA @SOVOL; Generic ABS @SOVOL; Generic PETG @SOVOL; Prusament ASA @SOVOL; Prusament PC Blend @SOVOL; Prusament PC Blend Carbon Fiber @SOVOL; Prusament PA11 Carbon Fiber @SOVOL
|
||||
|
||||
thumbnail = SV05_thumbnail.png
|
||||
[printer_model:SV04]
|
||||
name = SV04
|
||||
variants = 0.4; 0.3; 0.6; 0.8
|
||||
@ -53,6 +58,7 @@ bed_model = SV04_bed.stl
|
||||
bed_texture = SV03_texture.svg
|
||||
default_materials = Generic PLA; Generic ABS; Generic PETG; Prusament PLA; Prusament PETG; Prusament ASA; Prusament PC Blend; Prusament PC Blend Carbon Fiber; Prusament PVB; Prusament PA11 Carbon Fiber
|
||||
|
||||
thumbnail = SV04_thumbnail.png
|
||||
[printer_model:SV03]
|
||||
name = SV03 / SV03 BLTOUCH
|
||||
variants = 0.4; 0.3; 0.6; 0.8
|
||||
@ -62,6 +68,7 @@ bed_model = SV03_bed.stl
|
||||
bed_texture = SV03_texture.svg
|
||||
default_materials = Generic PLA @SOVOL; Generic ABS @SOVOL; Generic PETG @SOVOL; Prusament ASA @SOVOL; Prusament PC Blend @SOVOL; Prusament PC Blend Carbon Fiber @SOVOL; Prusament PA11 Carbon Fiber @SOVOL
|
||||
|
||||
thumbnail = SV03_thumbnail.png
|
||||
[printer_model:SV02]
|
||||
name = SV02 / SV02 BLTOUCH
|
||||
variants = 0.4; 0.3; 0.6; 0.8
|
||||
@ -71,6 +78,7 @@ bed_model = SV01_bed.stl
|
||||
bed_texture = SV03_texture.svg
|
||||
default_materials = Generic PLA @SOVOL; Generic ABS @SOVOL; Generic PETG @SOVOL; Prusament ASA @SOVOL; Prusament PC Blend @SOVOL; Prusament PC Blend Carbon Fiber @SOVOL; Prusament PA11 Carbon Fiber @SOVOL
|
||||
|
||||
thumbnail = SV02_thumbnail.png
|
||||
[printer_model:SV01]
|
||||
name = SV01 / SV01 BLTOUCH
|
||||
variants = 0.4; 0.3; 0.6; 0.8
|
||||
@ -80,6 +88,7 @@ bed_model = SV01_bed.stl
|
||||
bed_texture = SV03_texture.svg
|
||||
default_materials = Generic PLA @SOVOL; Generic ABS @SOVOL; Generic PETG @SOVOL; Prusament ASA @SOVOL; Prusament PC Blend @SOVOL; Prusament PC Blend Carbon Fiber @SOVOL; Prusament PA11 Carbon Fiber @SOVOL
|
||||
|
||||
thumbnail = SV01_thumbnail.png
|
||||
[printer_model:SV01 PRO]
|
||||
name = SV01 PRO
|
||||
variants = 0.4; 0.3; 0.6; 0.8
|
||||
@ -94,6 +103,7 @@ default_materials = Generic PLA @SOVOL; Generic ABS @SOVOL; Generic PETG @SOVOL;
|
||||
|
||||
# Common print presets
|
||||
|
||||
thumbnail = SV01 PRO_thumbnail.png
|
||||
[print:*common*]
|
||||
avoid_crossing_perimeters = 0
|
||||
thick_bridges = 0
|
||||
|
@ -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
|
||||
1.0.5 Added Filament PM filaments. Added Prusament PETG V0.
|
||||
1.0.4 Updated compatible printer condition.
|
||||
|
@ -1,13 +1,15 @@
|
||||
# Generic filament profile templates
|
||||
|
||||
[vendor]
|
||||
repo_id = non-prusa-fff
|
||||
name = Templates
|
||||
config_version = 1.0.5
|
||||
config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/Templates/
|
||||
config_version = 2.0.0
|
||||
config_update_url = https://preset-repo-api.prusa3d.com/v1/repos/non-prusa-fff/Templates/
|
||||
templates_profile = 1
|
||||
|
||||
## Generic filament profiles
|
||||
|
||||
config_url = https://preset-repo-api.prusa3d.com/v1/repos/non-prusa-fff/Templates/
|
||||
[filament:*common*]
|
||||
cooling = 1
|
||||
compatible_printers =
|
||||
|
@ -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
|
||||
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)
|
||||
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,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
|
||||
1.0.2 modification in start gcode and end gcode
|
||||
1.0.1 Speed profile has been added
|
||||
1.0.0 Initial version
|
||||
|
@ -1,19 +1,21 @@
|
||||
# Print profiles for the Trimaker printers.
|
||||
|
||||
[vendor]
|
||||
repo_id = non-prusa-fff
|
||||
# Vendor name will be shown by the Config Wizard.
|
||||
name = Trimaker
|
||||
# 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.1
|
||||
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/Trimaker/
|
||||
config_update_url = https://preset-repo-api.prusa3d.com/v1/repos/non-prusa-fff/Trimaker/
|
||||
# changelog_url =
|
||||
|
||||
# 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 = https://preset-repo-api.prusa3d.com/v1/repos/non-prusa-fff/Trimaker/
|
||||
[printer_model:Trimaker Nebula Cloud]
|
||||
name = Trimaker Nebula Cloud
|
||||
family = Nebula
|
||||
@ -350,8 +352,8 @@ retract_speed = 35
|
||||
serial_port =
|
||||
serial_speed = 250000
|
||||
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
|
||||
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
|
||||
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 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 =
|
||||
use_firmware_retraction = 0
|
||||
use_relative_e_distances = 1
|
||||
@ -371,7 +373,7 @@ printer_model = Trimaker Nebula Cloud
|
||||
inherits = *common*
|
||||
bed_shape = 0x0,230x0,230x230,0x230
|
||||
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:*Trimaker Cosmos II*]
|
||||
|
@ -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
|
||||
1.0.2 Fixed start g-code.
|
||||
1.0.1 Updated start g-code.
|
||||
|
@ -1,35 +1,46 @@
|
||||
# Print profiles for the Ultimaker printers.
|
||||
# https://github.com/prusa3d/PrusaSlicer-settings/issues/143
|
||||
# author: https://github.com/foreachthing
|
||||
|
||||
# author: https://github.com/ansonl
|
||||
|
||||
[vendor]
|
||||
repo_id = non-prusa-fff
|
||||
# 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.
|
||||
config_version = 1.0.2
|
||||
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/
|
||||
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.
|
||||
# Printer model name will be shown by the installation wizard.
|
||||
|
||||
config_url = https://preset-repo-api.prusa3d.com/v1/repos/non-prusa-fff/Ultimaker/
|
||||
[printer_model:ULTIMAKER2]
|
||||
name = Ultimaker 2
|
||||
variants = 0.4
|
||||
technology = FFF
|
||||
bed_model = ultimaker2_bed.stl
|
||||
bed_texture = ultimaker2.svg
|
||||
default_materials = Generic PLA @ULTIMAKER2; Generic PETG @ULTIMAKER2; Generic ABS @ULTIMAKER2
|
||||
thumbnail = ULTIMAKER2_thumbnail_v2.png
|
||||
default_materials = Generic PLA; Generic PETG @ULTIMAKER; Generic ABS @ULTIMAKER
|
||||
|
||||
[printer_model:ULTIMAKERSline]
|
||||
name = Ultimaker S-line
|
||||
variants = 0.4
|
||||
technology = FFF
|
||||
bed_texture = ultimaker2.svg
|
||||
default_materials = Generic PLA
|
||||
|
||||
# All presets starting with asterisk, for example *common*, are intermediate and they will
|
||||
# not make it into the user interface.
|
||||
|
||||
# Common print preset
|
||||
thumbnail = ULTIMAKERSline_thumbnail.png
|
||||
[print:*common*]
|
||||
avoid_crossing_perimeters = 1
|
||||
avoid_crossing_perimeters_max_detour = 0
|
||||
@ -39,7 +50,7 @@ bottom_solid_min_thickness = 0
|
||||
bridge_acceleration = 0
|
||||
bridge_angle = 0
|
||||
bridge_flow_ratio = 1
|
||||
bridge_speed = 60
|
||||
bridge_speed = 35
|
||||
brim_separation = 0
|
||||
brim_type = outer_only
|
||||
brim_width = 0
|
||||
@ -50,24 +61,24 @@ complete_objects = 0
|
||||
default_acceleration = 0
|
||||
dont_support_bridges = 0
|
||||
draft_shield = disabled
|
||||
elefant_foot_compensation = 0
|
||||
elefant_foot_compensation = 0.08
|
||||
ensure_vertical_shell_thickness = 0
|
||||
external_perimeter_extrusion_width = 0.45
|
||||
external_perimeter_speed = 75%
|
||||
external_perimeter_extrusion_width = 0.4
|
||||
external_perimeter_speed = 50%
|
||||
external_perimeters_first = 0
|
||||
extra_perimeters = 1
|
||||
extruder_clearance_height = 50
|
||||
extruder_clearance_radius = 60
|
||||
extrusion_width = 0.45
|
||||
extrusion_width = 0.4
|
||||
fill_angle = 45
|
||||
fill_density = 20%
|
||||
fill_pattern = grid
|
||||
first_layer_acceleration = 0
|
||||
first_layer_acceleration_over_raft = 0
|
||||
first_layer_extrusion_width = 0.45
|
||||
first_layer_extrusion_width = 0.4
|
||||
first_layer_height = 0.2
|
||||
first_layer_speed = 30
|
||||
first_layer_speed_over_raft = 30
|
||||
first_layer_speed = 25%
|
||||
first_layer_speed_over_raft = 25%
|
||||
fuzzy_skin = none
|
||||
fuzzy_skin_point_dist = 0.8
|
||||
fuzzy_skin_thickness = 0.3
|
||||
@ -80,11 +91,11 @@ infill_anchor = 600%
|
||||
infill_anchor_max = 50
|
||||
infill_every_layers = 1
|
||||
infill_extruder = 1
|
||||
infill_extrusion_width = 0.5
|
||||
infill_extrusion_width = 0.4
|
||||
infill_first = 1
|
||||
infill_only_where_needed = 0
|
||||
infill_overlap = 35%
|
||||
infill_speed = 60
|
||||
infill_speed = 70
|
||||
inherits =
|
||||
interface_shells = 0
|
||||
ironing = 0
|
||||
@ -93,18 +104,18 @@ ironing_spacing = 0.1
|
||||
ironing_speed = 15
|
||||
ironing_type = top
|
||||
layer_height = 0.2
|
||||
max_print_speed = 80
|
||||
max_print_speed = 100
|
||||
max_volumetric_speed = 0
|
||||
min_skirt_length = 2
|
||||
mmu_segmented_region_max_width = 0
|
||||
notes = Ultimaker 2, 0.4 mm Nozzle
|
||||
notes = Ultimaker, 0.4 mm Nozzle
|
||||
only_retract_when_crossing_perimeters = 1
|
||||
ooze_prevention = 0
|
||||
ooze_prevention = 1
|
||||
output_filename_format = {input_filename_base}_{layer_height}mm_{filament_type[0]}_{printer_model}_{print_time}.gcode
|
||||
overhangs = 1
|
||||
perimeter_acceleration = 0
|
||||
perimeter_extruder = 1
|
||||
perimeter_extrusion_width = 0.45
|
||||
perimeter_extrusion_width = 0.4
|
||||
perimeter_speed = 50
|
||||
perimeters = 2
|
||||
post_process =
|
||||
@ -126,10 +137,10 @@ small_perimeter_speed = 75%
|
||||
solid_infill_below_area = 10
|
||||
solid_infill_every_layers = 0
|
||||
solid_infill_extruder = 1
|
||||
solid_infill_extrusion_width = 0.45
|
||||
solid_infill_speed = 40
|
||||
solid_infill_extrusion_width = 0.4
|
||||
solid_infill_speed = 75%
|
||||
spiral_vase = 0
|
||||
standby_temperature_delta = -5
|
||||
standby_temperature_delta = -30
|
||||
support_material = 0
|
||||
support_material_angle = 45
|
||||
support_material_auto = 1
|
||||
@ -159,11 +170,11 @@ thick_bridges = 1
|
||||
thin_walls = 0
|
||||
threads = 8
|
||||
top_fill_pattern = rectilinear
|
||||
top_infill_extrusion_width = 0.45
|
||||
top_solid_infill_speed = 40
|
||||
top_infill_extrusion_width = 0.4
|
||||
top_solid_infill_speed = 50%
|
||||
top_solid_layers = 4
|
||||
top_solid_min_thickness = 0
|
||||
travel_speed = 120
|
||||
travel_speed = 150
|
||||
travel_speed_z = 0
|
||||
wipe_tower = 0
|
||||
wipe_tower_bridging = 10
|
||||
@ -175,67 +186,49 @@ wipe_tower_x = 180
|
||||
wipe_tower_y = 140
|
||||
xy_size_compensation = 0
|
||||
|
||||
[print:*0.10mm*]
|
||||
inherits = *common*
|
||||
layer_height = 0.10
|
||||
bottom_solid_layers = 8
|
||||
top_solid_layers = 8
|
||||
|
||||
[print:*0.12mm*]
|
||||
inherits = *common*
|
||||
perimeter_speed = 40
|
||||
external_perimeter_speed = 25
|
||||
infill_speed = 50
|
||||
solid_infill_speed = 40
|
||||
layer_height = 0.12
|
||||
perimeters = 3
|
||||
top_infill_extrusion_width = 0.4
|
||||
bottom_solid_layers = 6
|
||||
top_solid_layers = 7
|
||||
|
||||
[print:*0.20mm*]
|
||||
inherits = *common*
|
||||
perimeter_speed = 40
|
||||
external_perimeter_speed = 25
|
||||
infill_speed = 50
|
||||
solid_infill_speed = 40
|
||||
layer_height = 0.20
|
||||
top_infill_extrusion_width = 0.4
|
||||
bottom_solid_layers = 4
|
||||
top_solid_layers = 5
|
||||
|
||||
[print:*0.25mm*]
|
||||
inherits = *common*
|
||||
perimeter_speed = 40
|
||||
external_perimeter_speed = 25
|
||||
infill_speed = 50
|
||||
solid_infill_speed = 40
|
||||
layer_height = 0.25
|
||||
top_infill_extrusion_width = 0.45
|
||||
bottom_solid_layers = 3
|
||||
top_solid_layers = 4
|
||||
|
||||
[print:0.12mm DETAIL @ULTIMAKER2]
|
||||
[print:0.10mm FINE @ULTIMAKER]
|
||||
inherits = *0.10mm*
|
||||
compatible_printers_condition = printer_model=="ULTIMAKER2" or printer_model=="ULTIMAKERSline" and nozzle_diameter[0]==0.4
|
||||
|
||||
[print:0.12mm DETAIL @ULTIMAKER]
|
||||
inherits = *0.12mm*
|
||||
travel_speed = 150
|
||||
infill_speed = 50
|
||||
solid_infill_speed = 40
|
||||
top_solid_infill_speed = 30
|
||||
support_material_extrusion_width = 0.38
|
||||
compatible_printers_condition = printer_model=="ULTIMAKER2" and nozzle_diameter[0]==0.4
|
||||
compatible_printers_condition = printer_model=="ULTIMAKER2" or printer_model=="ULTIMAKERSline" and nozzle_diameter[0]==0.4
|
||||
|
||||
[print:0.20mm NORMAL @ULTIMAKER2]
|
||||
[print:0.20mm NORMAL @ULTIMAKER]
|
||||
inherits = *0.20mm*
|
||||
travel_speed = 150
|
||||
infill_speed = 50
|
||||
solid_infill_speed = 40
|
||||
top_solid_infill_speed = 30
|
||||
support_material_extrusion_width = 0.38
|
||||
compatible_printers_condition = printer_model=="ULTIMAKER2" and nozzle_diameter[0]==0.4
|
||||
compatible_printers_condition = printer_model=="ULTIMAKER2" or printer_model=="ULTIMAKERSline" and nozzle_diameter[0]==0.4
|
||||
|
||||
[print:0.25mm DRAFT @ULTIMAKER2]
|
||||
[print:0.25mm DRAFT @ULTIMAKER]
|
||||
inherits = *0.25mm*
|
||||
travel_speed = 150
|
||||
infill_speed = 50
|
||||
solid_infill_speed = 40
|
||||
top_solid_infill_speed = 30
|
||||
support_material_extrusion_width = 0.38
|
||||
compatible_printers_condition = printer_model=="ULTIMAKER2" and nozzle_diameter[0]==0.4
|
||||
compatible_printers_condition = printer_model=="ULTIMAKER2" or printer_model=="ULTIMAKERSline" and nozzle_diameter[0]==0.4
|
||||
|
||||
# Common filament preset
|
||||
[filament:*common*]
|
||||
@ -248,15 +241,15 @@ filament_diameter = 2.85
|
||||
filament_notes = ""
|
||||
filament_settings_id = ""
|
||||
filament_soluble = 0
|
||||
min_print_speed = 15
|
||||
slowdown_below_layer_time = 20
|
||||
min_print_speed = 5
|
||||
slowdown_below_layer_time = 6
|
||||
compatible_printers_condition = printer_notes=~/.*PRINTER_VENDOR_ULTIMAKER.*/
|
||||
|
||||
[filament:*PLA*]
|
||||
inherits = *common*
|
||||
bed_temperature = 60
|
||||
fan_below_layer_time = 100
|
||||
filament_colour = #FFF0E0
|
||||
filament_colour = #C0C0C0
|
||||
filament_max_volumetric_speed = 0
|
||||
filament_type = PLA
|
||||
filament_density = 1.24
|
||||
@ -273,7 +266,7 @@ temperature = 210
|
||||
[filament:*PET*]
|
||||
inherits = *common*
|
||||
fan_below_layer_time = 15
|
||||
filament_colour = #FFF0E0
|
||||
filament_colour = #C0C0C0
|
||||
filament_max_volumetric_speed = 0
|
||||
filament_type = PETG
|
||||
filament_density = 1.27
|
||||
@ -293,7 +286,7 @@ disable_fan_first_layers = 3
|
||||
[filament:*ABS*]
|
||||
inherits = *common*
|
||||
fan_below_layer_time = 15
|
||||
filament_colour = #FFF0E0
|
||||
filament_colour = #C0C0C0
|
||||
filament_max_volumetric_speed = 0
|
||||
filament_type = ABS
|
||||
filament_density = 1.10
|
||||
@ -310,23 +303,17 @@ slowdown_below_layer_time = 15
|
||||
min_print_speed = 10
|
||||
disable_fan_first_layers = 3
|
||||
|
||||
[filament:Generic PLA @ULTIMAKER2]
|
||||
[filament:Generic PLA @ULTIMAKER]
|
||||
inherits = *PLA*
|
||||
filament_vendor = Generic
|
||||
filament_cost =
|
||||
|
||||
[filament:Generic Black PLA @ULTIMAKER2]
|
||||
inherits = *PLA*
|
||||
filament_vendor = Generic
|
||||
filament_colour = #0E3F3F
|
||||
filament_cost =
|
||||
|
||||
[filament:Generic PETG @ULTIMAKER2]
|
||||
[filament:Generic PETG @ULTIMAKER]
|
||||
inherits = *PET*
|
||||
filament_vendor = Generic
|
||||
filament_cost =
|
||||
|
||||
[filament:Generic ABS @ULTIMAKER2]
|
||||
[filament:Generic ABS @ULTIMAKER]
|
||||
inherits = *ABS*
|
||||
filament_vendor = Generic
|
||||
filament_cost =
|
||||
@ -334,54 +321,52 @@ filament_cost =
|
||||
# Common printer preset
|
||||
[printer:*common*]
|
||||
printer_technology = FFF
|
||||
before_layer_gcode = ;BEFORE_LAYER_CHANGE\n;layer:[layer_num];\nM117 Layer [layer_num];\n
|
||||
before_layer_gcode = ;BEFORE_LAYER_CHANGE\n;M117 Layer [layer_num];\n;LAYER:[layer_num]
|
||||
between_objects_gcode =
|
||||
deretract_speed = 0
|
||||
extruder_colour = #FFF0E0
|
||||
extruder_offset = 0x0
|
||||
gcode_flavor = reprap
|
||||
extruder_colour = #F9A800;#00387B
|
||||
gcode_flavor = marlin
|
||||
silent_mode = 0
|
||||
remaining_times = 0
|
||||
machine_max_acceleration_e = 10000
|
||||
machine_max_acceleration_extruding = 1500
|
||||
machine_max_acceleration_retracting = 1500
|
||||
machine_max_acceleration_x = 3000
|
||||
machine_max_acceleration_y = 3000
|
||||
machine_max_acceleration_z = 500
|
||||
machine_max_acceleration_extruding = 3000
|
||||
machine_max_acceleration_retracting = 3000
|
||||
machine_max_acceleration_x = 9000
|
||||
machine_max_acceleration_y = 9000
|
||||
machine_max_acceleration_z = 100
|
||||
machine_max_feedrate_e = 120
|
||||
machine_max_feedrate_x = 500
|
||||
machine_max_feedrate_y = 500
|
||||
machine_max_feedrate_z = 12
|
||||
machine_max_jerk_e = 2.5
|
||||
machine_max_feedrate_x = 300
|
||||
machine_max_feedrate_y = 300
|
||||
machine_max_feedrate_z = 40
|
||||
machine_max_jerk_e = 10
|
||||
machine_max_jerk_x = 20
|
||||
machine_max_jerk_y = 20
|
||||
machine_max_jerk_z = 0.4
|
||||
machine_min_extruding_rate = 0
|
||||
machine_min_travel_rate = 0
|
||||
layer_gcode =
|
||||
max_print_height = 212
|
||||
octoprint_apikey =
|
||||
octoprint_host =
|
||||
printer_notes =
|
||||
printer_settings_id =
|
||||
retract_before_travel = 5
|
||||
retract_before_wipe = 0%
|
||||
retract_before_travel = 1.2,1.2
|
||||
retract_before_wipe = 0%,0%
|
||||
retract_layer_change = 1
|
||||
retract_length = 6
|
||||
retract_length_toolchange = 10
|
||||
retract_length = 6.5,6.5
|
||||
retract_length_toolchange = 16,16
|
||||
retract_lift = 0
|
||||
retract_lift_above = 0
|
||||
retract_lift_below = 0
|
||||
retract_restart_extra = 0
|
||||
retract_restart_extra_toolchange = 0
|
||||
retract_speed = 50
|
||||
retract_speed = 25,25
|
||||
serial_port =
|
||||
single_extruder_multi_material = 0
|
||||
toolchange_gcode =
|
||||
use_firmware_retraction = 0
|
||||
use_relative_e_distances = 0
|
||||
use_volumetric_e = 0
|
||||
variable_layer_height = 1
|
||||
variable_layer_height = 0
|
||||
wipe = 0
|
||||
z_offset = 0
|
||||
|
||||
@ -389,12 +374,59 @@ z_offset = 0
|
||||
inherits = *common*
|
||||
printer_model = ULTIMAKER2
|
||||
bed_shape = 0x0,224x0,224x225,0x225
|
||||
max_print_height = 212
|
||||
printer_variant = 0.4
|
||||
max_layer_height = 0.3
|
||||
min_layer_height = 0.08
|
||||
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
|
||||
nozzle_diameter = 0.4
|
||||
default_print_profile = 0.20mm NORMAL @ULTIMAKER2
|
||||
default_filament_profile = Generic PLA @ULTIMAKER2
|
||||
default_print_profile = 0.20mm NORMAL @ULTIMAKER
|
||||
default_filament_profile = Generic PLA @ULTIMAKER
|
||||
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
|
||||
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
|
||||
max_layer_height = 0.3
|
||||
min_layer_height = 0.06
|
||||
|
||||
[printer:Ultimaker 2 DXUv2]
|
||||
inherits = Ultimaker 2
|
||||
printer_model = ULTIMAKER2
|
||||
bed_shape = 0x0,224x0,224x225,0x225
|
||||
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
|
||||
printer_variant = 0.4
|
||||
nozzle_diameter = 0.4,0.4
|
||||
gcode_flavor = marlin2
|
||||
default_print_profile = 0.20mm NORMAL @ULTIMAKER
|
||||
default_filament_profile = Generic PLA @ULTIMAKER
|
||||
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; 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 = ;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
|
@ -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
|
||||
1.0.4 Updated start g-code. Disabled autoemitting of temperature commands.
|
||||
1.0.3 Added Voron Switchwire.
|
||||
|
@ -3,19 +3,21 @@
|
||||
# Modified for PrusaSlicer
|
||||
|
||||
[vendor]
|
||||
repo_id = non-prusa-fff
|
||||
# Vendor name will be shown by the Config Wizard.
|
||||
name = Voron
|
||||
# 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.4
|
||||
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/Voron/
|
||||
config_update_url = https://preset-repo-api.prusa3d.com/v1/repos/non-prusa-fff/Voron/
|
||||
|
||||
# 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 = https://preset-repo-api.prusa3d.com/v1/repos/non-prusa-fff/Voron/
|
||||
[printer_model:Voron_v2_250_afterburner]
|
||||
name = Voron v2 250mm3
|
||||
variants = 0.4; 0.25; 0.3; 0.5; 0.6; 0.8; volcano 0.6; volcano 0.8; volcano 1.0; volcano 1.2
|
||||
@ -25,6 +27,7 @@ bed_model = printbed-v2-250.stl
|
||||
bed_texture = bedtexture-v2-250.png
|
||||
default_materials = Basic PLA @VORON; Basic PLA VOLCANO @VORON; Basic PET @VORON; Basic PET VOLCANO @VORON; Basic ABS @VORON; Basic ABS VOLCANO @VORON
|
||||
|
||||
thumbnail = Voron_v2_250_afterburner_thumbnail.png
|
||||
[printer_model:Voron_v2_300_afterburner]
|
||||
name = Voron v2 300mm3
|
||||
variants = 0.4; 0.25; 0.3; 0.5; 0.6; 0.8; volcano 0.6; volcano 0.8; volcano 1.0; volcano 1.2
|
||||
@ -34,6 +37,7 @@ bed_model = printbed-v2-300.stl
|
||||
bed_texture = bedtexture-v2-300.png
|
||||
default_materials = Basic PLA @VORON; Basic PLA VOLCANO @VORON; Basic PET @VORON; Basic PET VOLCANO @VORON; Basic ABS @VORON; Basic ABS VOLCANO @VORON
|
||||
|
||||
thumbnail = Voron_v2_300_afterburner_thumbnail.png
|
||||
[printer_model:Voron_v2_350_afterburner]
|
||||
name = Voron v2 350mm3
|
||||
variants = 0.4; 0.25; 0.3; 0.5; 0.6; 0.8; volcano 0.6; volcano 0.8; volcano 1.0; volcano 1.2
|
||||
@ -43,6 +47,7 @@ bed_model = printbed-v2-350.stl
|
||||
bed_texture = bedtexture-v2-350.png
|
||||
default_materials = Basic PLA @VORON; Basic PLA VOLCANO @VORON; Basic PET @VORON; Basic PET VOLCANO @VORON; Basic ABS @VORON; Basic ABS VOLCANO @VORON
|
||||
|
||||
thumbnail = Voron_v2_350_afterburner_thumbnail.png
|
||||
[printer_model:Voron_v2_250]
|
||||
name = Voron v2 250mm3
|
||||
variants = 0.4; 0.25; 0.3; 0.5; 0.6; 0.8; volcano 0.6; volcano 0.8; volcano 1.0; volcano 1.2
|
||||
@ -52,6 +57,7 @@ bed_model = printbed-v2-250.stl
|
||||
bed_texture = bedtexture-v2-250.png
|
||||
default_materials = Basic PLA @VORON; Basic PLA VOLCANO @VORON; Basic PET @VORON; Basic PET VOLCANO @VORON; Basic ABS @VORON; Basic ABS VOLCANO @VORON
|
||||
|
||||
thumbnail = Voron_v2_250_thumbnail.png
|
||||
[printer_model:Voron_v2_300]
|
||||
name = Voron v2 300mm3
|
||||
variants = 0.4; 0.25; 0.3; 0.5; 0.6; 0.8; volcano 0.6; volcano 0.8; volcano 1.0; volcano 1.2
|
||||
@ -61,6 +67,7 @@ bed_model = printbed-v2-300.stl
|
||||
bed_texture = bedtexture-v2-300.png
|
||||
default_materials = Basic PLA @VORON; Basic PLA VOLCANO @VORON; Basic PET @VORON; Basic PET VOLCANO @VORON; Basic ABS @VORON; Basic ABS VOLCANO @VORON
|
||||
|
||||
thumbnail = Voron_v2_300_thumbnail.png
|
||||
[printer_model:Voron_v2_350]
|
||||
name = Voron v2 350mm3
|
||||
variants = 0.4; 0.25; 0.3; 0.5; 0.6; 0.8; volcano 0.6; volcano 0.8; volcano 1.0; volcano 1.2
|
||||
@ -70,6 +77,7 @@ bed_model = printbed-v2-350.stl
|
||||
bed_texture = bedtexture-v2-350.png
|
||||
default_materials = Basic PLA @VORON; Basic PLA VOLCANO @VORON; Basic PET @VORON; Basic PET VOLCANO @VORON; Basic ABS @VORON; Basic ABS VOLCANO @VORON
|
||||
|
||||
thumbnail = Voron_v2_350_thumbnail.png
|
||||
[printer_model:Voron_v1_250_afterburner]
|
||||
name = Voron v1 250mm3
|
||||
variants = 0.4; 0.25; 0.3; 0.5; 0.6; 0.8
|
||||
@ -79,6 +87,7 @@ bed_model = printbed-v1-250.stl
|
||||
bed_texture = bedtexture-v1-250.png
|
||||
default_materials = Basic PLA @VORON; Basic PET @VORON; Basic ABS @VORON
|
||||
|
||||
thumbnail = Voron_v1_250_afterburner_thumbnail.png
|
||||
[printer_model:Voron_v1_300_afterburner]
|
||||
name = Voron v1 300mm3
|
||||
variants = 0.4; 0.25; 0.3; 0.5; 0.6; 0.8
|
||||
@ -88,6 +97,7 @@ bed_model = printbed-v1-300.stl
|
||||
bed_texture = bedtexture-v1-300.png
|
||||
default_materials = Basic PLA @VORON; Basic PET @VORON; Basic ABS @VORON
|
||||
|
||||
thumbnail = Voron_v1_300_afterburner_thumbnail.png
|
||||
[printer_model:Voron_v1_350_afterburner]
|
||||
name = Voron v1 350mm3
|
||||
variants = 0.4; 0.25; 0.3; 0.5; 0.6; 0.8
|
||||
@ -97,6 +107,7 @@ bed_model = printbed-v1-350.stl
|
||||
bed_texture = bedtexture-v2-350.png
|
||||
default_materials = Basic PLA @VORON; Basic PET @VORON; Basic ABS @VORON
|
||||
|
||||
thumbnail = Voron_v1_350_afterburner_thumbnail.png
|
||||
[printer_model:Voron_v0_120]
|
||||
name = Voron Zero 120mm3
|
||||
variants = 0.4; 0.25; 0.3; 0.5; 0.6; 0.8; volcano 0.6; volcano 0.8; volcano 1.0; volcano 1.2
|
||||
@ -106,6 +117,7 @@ bed_model = printbed-v0-120.stl
|
||||
bed_texture = bedtexture-v0-120.png
|
||||
default_materials = Basic PLA @VORON; Basic PLA VOLCANO @VORON; Basic PET @VORON; Basic PET VOLCANO @VORON; Basic ABS @VORON; Basic ABS VOLCANO @VORON
|
||||
|
||||
thumbnail = Voron_v0_120_thumbnail.png
|
||||
[printer_model:Voron_SW_afterburner]
|
||||
name = Voron Switchwire
|
||||
variants = 0.4; 0.25; 0.3; 0.5; 0.6; 0.8; volcano 0.6; volcano 0.8; volcano 1.0; volcano 1.2
|
||||
@ -1889,4 +1901,3 @@ inherits = *kvpABS*
|
||||
filament_vendor = KVP
|
||||
filament_max_volumetric_speed = 17
|
||||
compatible_printers_condition = printer_model=~/.*Voron.*/ and printer_notes=~/.*VOLCANO.*/
|
||||
|
||||
|
@ -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
|
||||
1.0.0 Initial version
|
||||
|
@ -3,18 +3,20 @@
|
||||
# based on https://github.com/slic3r/slic3r-profiles/pull/19 by @ZONESTAR3D
|
||||
|
||||
[vendor]
|
||||
repo_id = non-prusa-fff
|
||||
# Vendor name will be shown by the Config Wizard.
|
||||
name = Zonestar
|
||||
# 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
|
||||
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/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,
|
||||
# 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 = https://preset-repo-api.prusa3d.com/v1/repos/non-prusa-fff/Zonestar/
|
||||
[printer_model:Z5]
|
||||
name = Zonestar Z5
|
||||
variants = 0.4
|
||||
@ -23,6 +25,7 @@ bed_model = bed_220.stl
|
||||
bed_texture = 220_texture.svg
|
||||
default_materials = Generic PLA @Zonestar; Generic ABS @Zonestar; Generic PETG @Zonestar; Generic TPU @Zonestar
|
||||
|
||||
thumbnail = Z5_thumbnail.png
|
||||
[printer_model:Z6]
|
||||
name = Zonestar Z6
|
||||
variants = 0.4
|
||||
@ -31,6 +34,7 @@ bed_model = bed_150.stl
|
||||
bed_texture = 150_texture.svg
|
||||
default_materials = Generic PLA @Zonestar; Generic ABS @Zonestar; Generic PETG @Zonestar; Generic TPU @Zonestar
|
||||
|
||||
thumbnail = Z6_thumbnail.png
|
||||
[printer_model:Z5X]
|
||||
name = Zonestar Z5X
|
||||
variants = 0.4
|
||||
@ -39,6 +43,7 @@ bed_model = bed_310.stl
|
||||
bed_texture = 310_texture.svg
|
||||
default_materials = Generic PLA @Zonestar; Generic ABS @Zonestar; Generic PETG @Zonestar; Generic TPU @Zonestar
|
||||
|
||||
thumbnail = Z5X_thumbnail.png
|
||||
[printer_model:Z8]
|
||||
name = Zonestar Z8
|
||||
variants = 0.4
|
||||
@ -47,6 +52,7 @@ bed_model = bed_310.stl
|
||||
bed_texture = 310_texture.svg
|
||||
default_materials = Generic PLA @Zonestar; Generic ABS @Zonestar; Generic PETG @Zonestar; Generic TPU @Zonestar
|
||||
|
||||
thumbnail = Z8_thumbnail.png
|
||||
[printer_model:Z9]
|
||||
name = Zonestar Z9
|
||||
variants = 0.4
|
||||
@ -59,6 +65,7 @@ default_materials = Generic PLA @Zonestar; Generic ABS @Zonestar; Generic PETG @
|
||||
#### print ####
|
||||
###################
|
||||
|
||||
thumbnail = Z9_thumbnail.png
|
||||
[print:*common*]
|
||||
avoid_crossing_perimeters = 0
|
||||
avoid_crossing_perimeters_max_detour = 0
|
||||
|
@ -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
|
||||
1.0.1 Speed improvements, start gcode changes, added HIPS filament.
|
||||
1.0.0 Initial version
|
||||
|
@ -4,13 +4,14 @@
|
||||
# Speed improvements, start/end gCode changes
|
||||
|
||||
[vendor]
|
||||
repo_id = non-prusa-fff
|
||||
# Vendor name will be shown by the Config Wizard.
|
||||
name = gCreate
|
||||
# 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.1
|
||||
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/gCreate/
|
||||
config_update_url = https://preset-repo-api.prusa3d.com/v1/repos/non-prusa-fff/gCreate/
|
||||
# changelog_url = https://files.prusa3d.com/?latest=slicer-profiles&lng=%1%
|
||||
|
||||
# The printer models will be shown by the Configuration Wizard in this order,
|
||||
@ -27,6 +28,7 @@ config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/Prus
|
||||
# Common filament settings > common filament settings based on type > Specific settings based on vendor
|
||||
#
|
||||
|
||||
config_url = https://preset-repo-api.prusa3d.com/v1/repos/non-prusa-fff/gCreate/
|
||||
[printer_model:GMAX15P]
|
||||
name = gMax 1.5XT Plus
|
||||
variants = 0.5; 0.3; 0.4; 0.8; 1.0
|
||||
@ -36,6 +38,7 @@ bed_model = gmax15p_bed.stl
|
||||
bed_texture = gmax15p.svg
|
||||
default_materials = Generic PLA @GCREATE; Generic PETG @GCREATE; Generic ABS @GCREATE; Prusament PLA @GCREATE; Prusament PETG @GCREATE; Generic TPU 90A @GCREATE; Generic CF PETG @GCREATE; Generic CF Nylon @GCREATE; Generic CF PLA @GCREATE
|
||||
|
||||
thumbnail = GMAX15P_thumbnail.png
|
||||
[printer_model:GMAX2]
|
||||
name = gMax 2
|
||||
variants = 0.5; 0.3; 0.4; 0.8; 1.0
|
||||
@ -47,6 +50,7 @@ bed_texture = gmax2.svg
|
||||
default_materials = Generic PLA @GCREATE; Generic PETG @GCREATE; Generic ABS @GCREATE; Prusament PLA @GCREATE; Prusament PETG @GCREATE; Generic TPU 90A @GCREATE; Generic CF PETG @GCREATE; Generic CF Nylon @GCREATE; Generic CF PLA @GCREATE
|
||||
|
||||
|
||||
thumbnail = GMAX2_thumbnail.png
|
||||
[printer_model:GMAX2PRO]
|
||||
name = gMax 2 Pro
|
||||
variants = 0.5; 0.3; 0.4; 0.8; 1.0
|
||||
@ -57,6 +61,7 @@ bed_model = gmax2_bed.stl
|
||||
bed_texture = gmax2.svg
|
||||
default_materials = Generic PLA @GCREATE; Generic PETG @GCREATE; Generic ABS @GCREATE; Prusament PLA @GCREATE; Prusament PETG @GCREATE; Generic TPU 90A @GCREATE; Generic CF PETG @GCREATE; Generic CF Nylon @GCREATE; Generic CF PLA @GCREATE
|
||||
|
||||
thumbnail = GMAX2PRO_thumbnail.png
|
||||
[printer_model:GMAX2DUAL2IN1]
|
||||
name = gMax 2 Dual 2in1
|
||||
variants = 0.5
|
||||
@ -67,6 +72,7 @@ bed_model = gmax2_bed.stl
|
||||
bed_texture = gmax2.svg
|
||||
default_materials = Generic PLA @GCREATE; Generic PETG @GCREATE; Generic ABS @GCREATE; Prusament PLA @GCREATE; Prusament PETG @GCREATE; Generic TPU 90A @GCREATE; Generic CF PETG @GCREATE; Generic CF Nylon @GCREATE; Generic CF PLA @GCREATE
|
||||
|
||||
thumbnail = GMAX2DUAL2IN1_thumbnail.png
|
||||
[printer_model:GMAX2DUAL]
|
||||
name = gMax 2 Dual Chimera
|
||||
variants = 0.5
|
||||
@ -81,6 +87,7 @@ default_materials = Generic PLA @GCREATE; Generic PETG @GCREATE; Generic ABS @GC
|
||||
# not make it into the user interface.
|
||||
|
||||
# Common print presets for every printer model. will be overtaken by presets further down that are printer, filament nozzle or layer height specific
|
||||
thumbnail = GMAX2DUAL_thumbnail.png
|
||||
[print:*common*]
|
||||
avoid_crossing_perimeters = 0
|
||||
bridge_angle = 0
|
||||
|
@ -342,7 +342,7 @@ template<class T>
|
||||
struct NilValueTempl<T, std::enable_if_t<std::is_enum_v<T>, void>>
|
||||
{
|
||||
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>> {
|
||||
|
@ -156,6 +156,15 @@ VendorProfile VendorProfile::from_ini(const ptree &tree, const boost::filesystem
|
||||
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) {
|
||||
return res;
|
||||
}
|
||||
|
@ -39,6 +39,7 @@ public:
|
||||
Semver config_version;
|
||||
std::string config_update_url;
|
||||
std::string changelog_url;
|
||||
std::string repo_id;
|
||||
bool templates_profile { false };
|
||||
|
||||
struct PrinterVariant {
|
||||
|
@ -126,6 +126,8 @@ set(SLIC3R_GUI_SOURCES
|
||||
GUI/IconManager.hpp
|
||||
GUI/MainFrame.cpp
|
||||
GUI/MainFrame.hpp
|
||||
GUI/UpdatesUIManager.cpp
|
||||
GUI/UpdatesUIManager.hpp
|
||||
GUI/FrequentlyChangedParameters.cpp
|
||||
GUI/FrequentlyChangedParameters.hpp
|
||||
GUI/Sidebar.cpp
|
||||
@ -315,6 +317,8 @@ set(SLIC3R_GUI_SOURCES
|
||||
GUI/DownloaderFileGet.hpp
|
||||
GUI/LoginDialog.cpp
|
||||
GUI/LoginDialog.hpp
|
||||
GUI/PresetArchiveDatabase.cpp
|
||||
GUI/PresetArchiveDatabase.hpp
|
||||
Utils/AppUpdater.cpp
|
||||
Utils/AppUpdater.hpp
|
||||
Utils/Http.cpp
|
||||
|
@ -25,6 +25,12 @@ class PresetUpdater;
|
||||
|
||||
namespace GUI {
|
||||
|
||||
class ConfigWizardLoadingDialog : public wxDialog
|
||||
{
|
||||
public:
|
||||
ConfigWizardLoadingDialog(wxWindow* parent, const wxString& message);
|
||||
};
|
||||
|
||||
namespace DownloaderUtils {
|
||||
class Worker : public wxBoxSizer
|
||||
{
|
||||
|
@ -97,7 +97,7 @@ struct BundleMap : std::map<std::string /* = vendor ID */, Bundle>
|
||||
|
||||
struct Materials;
|
||||
|
||||
|
||||
class RepositoryUpdateUIManager;
|
||||
|
||||
struct PrinterPickerEvent;
|
||||
|
||||
@ -120,6 +120,7 @@ struct PrinterPicker: wxPanel
|
||||
};
|
||||
|
||||
const std::string vendor_id;
|
||||
const std::string vendor_repo_id;
|
||||
std::vector<Checkbox*> cboxes;
|
||||
std::vector<Checkbox*> cboxes_alt;
|
||||
|
||||
@ -183,6 +184,15 @@ struct PageWelcome: ConfigWizardPage
|
||||
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
|
||||
{
|
||||
std::vector<PrinterPicker *> printer_pickers;
|
||||
@ -201,6 +211,10 @@ struct PagePrinters: ConfigWizardPage
|
||||
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_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;
|
||||
|
||||
@ -472,7 +486,7 @@ struct PageMode: ConfigWizardPage
|
||||
|
||||
struct PageVendors: ConfigWizardPage
|
||||
{
|
||||
PageVendors(ConfigWizard *parent);
|
||||
PageVendors(ConfigWizard *parent, std::string repos_id = std::string(), std::string name = std::string());
|
||||
};
|
||||
|
||||
struct PageFirmware: ConfigWizardPage
|
||||
@ -597,8 +611,8 @@ struct ConfigWizard::priv
|
||||
PresetAliases aliases_fff; // 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
|
||||
bool any_fff_selected; // Used to decide whether to display Filaments page
|
||||
bool any_sla_selected; // Used to decide whether to display SLA Materials page
|
||||
bool any_fff_selected { false }; // Used to decide whether to display Filaments 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_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)
|
||||
@ -617,8 +631,7 @@ struct ConfigWizard::priv
|
||||
wxButton *btn_cancel = nullptr;
|
||||
|
||||
PageWelcome *page_welcome = nullptr;
|
||||
PagePrinters *page_fff = nullptr;
|
||||
PagePrinters *page_msla = nullptr;
|
||||
PageUpdateManager*page_update_manager = nullptr;
|
||||
PageMaterials *page_filaments = nullptr;
|
||||
PageMaterials *page_sla_materials = nullptr;
|
||||
PageCustom *page_custom = nullptr;
|
||||
@ -629,8 +642,6 @@ struct ConfigWizard::priv
|
||||
PageFilesAssociation* page_files_association = nullptr;
|
||||
#endif // _WIN32
|
||||
PageMode *page_mode = nullptr;
|
||||
PageVendors *page_vendors = nullptr;
|
||||
Pages3rdparty pages_3rdparty;
|
||||
|
||||
// Custom setup pages
|
||||
PageFirmware *page_firmware = nullptr;
|
||||
@ -639,6 +650,22 @@ struct ConfigWizard::priv
|
||||
PageTemperatures *page_temps = 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)
|
||||
std::vector<ConfigWizardPage*> all_pages;
|
||||
|
||||
@ -656,7 +683,7 @@ struct ConfigWizard::priv
|
||||
void add_page(ConfigWizardPage *page);
|
||||
void enable_next(bool enable);
|
||||
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 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 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 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);
|
||||
@ -678,6 +709,17 @@ struct ConfigWizard::priv
|
||||
bool check_sla_selected(); // Used to decide whether to display SLA Materials page
|
||||
|
||||
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();
|
||||
};
|
||||
|
||||
}
|
||||
|
@ -13,6 +13,7 @@
|
||||
#include "GUI_ObjectManipulation.hpp"
|
||||
#include "GUI_Factories.hpp"
|
||||
#include "TopBar.hpp"
|
||||
#include "UpdatesUIManager.hpp"
|
||||
#include "format.hpp"
|
||||
|
||||
// Localization headers: include libslic3r version first so everything in this file
|
||||
@ -102,6 +103,7 @@
|
||||
#include "UserAccount.hpp"
|
||||
#include "WebViewDialog.hpp"
|
||||
#include "LoginDialog.hpp"
|
||||
#include "PresetArchiveDatabase.hpp"
|
||||
|
||||
#include "BitmapCache.hpp"
|
||||
//#include "Notebook.hpp"
|
||||
@ -832,9 +834,10 @@ void GUI_App::post_init()
|
||||
return;
|
||||
#endif
|
||||
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();
|
||||
this->preset_updater->sync(preset_bundle, this);
|
||||
if (! cw_showed) {
|
||||
// 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
|
||||
@ -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 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)
|
||||
@ -1382,6 +1492,9 @@ bool GUI_App::on_init_inner()
|
||||
if (is_editor())
|
||||
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
|
||||
update_mode(); // mode sizer doesn't exist anymore, so we came update mode here, before load_current_presets
|
||||
SetTopWindow(mainframe);
|
||||
@ -2992,6 +3105,15 @@ void GUI_App::MacOpenURL(const wxString& url)
|
||||
{
|
||||
std::string narrow_url = into_u8(url);
|
||||
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));
|
||||
} else if (boost::starts_with(narrow_url, "prusaslicer://login")) {
|
||||
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)
|
||||
{
|
||||
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 (!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->ShowModal();
|
||||
mainframe->RemoveChild(m_login_dialog.get());
|
||||
m_login_dialog->Destroy();
|
||||
// Destructor does not call Destroy
|
||||
// Destructor does not call Destroy.
|
||||
m_login_dialog.reset();
|
||||
}
|
||||
#endif // 0
|
||||
if (reason == ConfigWizard::RR_USER) {
|
||||
// Cancel sync before starting wizard to prevent two downloads at same time
|
||||
preset_updater->cancel_sync();
|
||||
|
||||
// ConfigWizard can take some time to start. Because it is a wxWidgets window, it has to be done
|
||||
// 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();
|
||||
if (preset_updater->config_update(app_config->orig_version(), PresetUpdater::UpdateParams::FORCED_BEFORE_WIZARD) == PresetUpdater::R_ALL_CANCELED)
|
||||
return false;
|
||||
// Offer update installation.
|
||||
preset_updater->config_update(app_config->orig_version(), PresetUpdater::UpdateParams::SHOW_TEXT_BOX, repos);
|
||||
}
|
||||
|
||||
auto wizard = new ConfigWizard(mainframe);
|
||||
cw_loading_dlg->Close();
|
||||
|
||||
const bool res = wizard->run(reason, start_page);
|
||||
|
||||
|
||||
// !!! Deallocate memory after close ConfigWizard.
|
||||
// Note, that mainframe is a parent of ConfigWizard.
|
||||
// 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)
|
||||
may_switch_to_SLA_preset(_L("Configuration is editing from ConfigWizard"));
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
@ -3367,12 +3509,27 @@ bool GUI_App::config_wizard_startup()
|
||||
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;
|
||||
try {
|
||||
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) {
|
||||
mainframe->Close();
|
||||
// Applicaiton is closing.
|
||||
@ -3381,7 +3538,7 @@ bool GUI_App::check_updates(const bool verbose)
|
||||
else if (updater_result == PresetUpdater::R_INCOMPAT_CONFIGURED) {
|
||||
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;
|
||||
dlg.ShowModal();
|
||||
}
|
||||
|
@ -60,7 +60,7 @@ class Downloader;
|
||||
struct GUI_InitParams;
|
||||
class GalleryDialog;
|
||||
class LoginDialog;
|
||||
|
||||
class PresetArchiveDatabase;
|
||||
|
||||
enum FileType
|
||||
{
|
||||
@ -171,13 +171,13 @@ private:
|
||||
OpenGLManager m_opengl_mgr;
|
||||
|
||||
std::unique_ptr<RemovableDriveManager> m_removable_drive_manager;
|
||||
|
||||
std::unique_ptr<ImGuiWrapper> m_imgui;
|
||||
std::unique_ptr<PrintHostJobQueue> m_printhost_job_queue;
|
||||
std::unique_ptr<OtherInstanceMessageHandler> m_other_instance_message_handler;
|
||||
std::unique_ptr<AppUpdater> m_app_updater;
|
||||
std::unique_ptr<wxSingleInstanceChecker> m_single_instance_checker;
|
||||
std::unique_ptr<Downloader> m_downloader;
|
||||
|
||||
std::string m_instance_hash_string;
|
||||
size_t m_instance_hash_int;
|
||||
|
||||
@ -433,6 +433,7 @@ private:
|
||||
// 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.
|
||||
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_restore(wxTopLevelWindow* window, const std::string &name, bool default_maximized = false);
|
||||
void window_pos_sanitize(wxTopLevelWindow* window);
|
||||
@ -441,7 +442,7 @@ private:
|
||||
bool config_wizard_startup();
|
||||
// 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.
|
||||
bool check_updates(const bool verbose);
|
||||
bool check_updates(const bool invoked_automatically);
|
||||
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
|
||||
void app_updater(bool from_user);
|
||||
|
@ -6,6 +6,7 @@
|
||||
#include "GUI_Init.hpp"
|
||||
|
||||
#include "libslic3r/AppConfig.hpp"
|
||||
#include "libslic3r/Utils/DirectoriesUtils.hpp"
|
||||
|
||||
#include "slic3r/GUI/GUI.hpp"
|
||||
#include "slic3r/GUI/GUI_App.hpp"
|
||||
@ -22,6 +23,9 @@
|
||||
|
||||
#include <boost/nowide/iostream.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__
|
||||
#include <signal.h>
|
||||
@ -45,6 +49,11 @@ int GUI_Run(GUI_InitParams ¶ms)
|
||||
signal(SIGCHLD, SIG_DFL);
|
||||
#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 {
|
||||
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) {
|
||||
|
@ -124,6 +124,7 @@
|
||||
#include "UserAccount.hpp"
|
||||
#include "DesktopIntegrationDialog.hpp"
|
||||
#include "WebViewDialog.hpp"
|
||||
#include "PresetArchiveDatabase.hpp"
|
||||
|
||||
#ifdef __APPLE__
|
||||
#include "Gizmos/GLGizmosManager.hpp"
|
||||
@ -268,6 +269,7 @@ struct Plater::priv
|
||||
Preview *preview;
|
||||
std::unique_ptr<NotificationManager> notification_manager;
|
||||
std::unique_ptr<UserAccount> user_account;
|
||||
std::unique_ptr<PresetArchiveDatabase> preset_archive_database;
|
||||
|
||||
ProjectDirtyStateManager dirty_state;
|
||||
|
||||
@ -617,6 +619,7 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame)
|
||||
, sidebar(new Sidebar(q))
|
||||
, notification_manager(std::make_unique<NotificationManager>(q))
|
||||
, 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_sla_import_dlg{new SLAImportDialog{q}}
|
||||
, delayed_scene_refresh(false)
|
||||
@ -780,7 +783,10 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame)
|
||||
if (wxGetApp().is_editor()) {
|
||||
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_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) {
|
||||
if (evt.data.second) {
|
||||
q->show_action_buttons();
|
||||
@ -895,11 +901,11 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame)
|
||||
evt.Skip();
|
||||
std::string 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);
|
||||
// login notification
|
||||
this->notification_manager->close_notification_of_type(NotificationType::UserAccountID);
|
||||
this->notification_manager->push_notification(NotificationType::UserAccountID, NotificationManager::NotificationLevel::ImportantNotificationLevel, text);
|
||||
// show connect tab
|
||||
this->notification_manager->push_notification(NotificationType::UserAccountID, NotificationManager::NotificationLevel::ImportantNotificationLevel, text);
|
||||
this->main_frame->add_connect_webview_tab();
|
||||
// Update User name in TopBar
|
||||
this->main_frame->refresh_account_menu();
|
||||
@ -907,6 +913,7 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame)
|
||||
wxGetApp().update_login_dialog();
|
||||
#endif // 0
|
||||
this->show_action_buttons(this->ready_to_slice);
|
||||
|
||||
} else {
|
||||
// data were corrupt and username was not retrieved
|
||||
// procced as if EVT_UA_RESET was recieved
|
||||
@ -6910,6 +6917,16 @@ const NotificationManager * Plater::get_notification_manager() const
|
||||
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()
|
||||
{
|
||||
return p->user_account.get();
|
||||
|
@ -63,6 +63,7 @@ class NotificationManager;
|
||||
struct Camera;
|
||||
class GLToolbar;
|
||||
class UserAccount;
|
||||
class PresetArchiveDatabase;
|
||||
|
||||
class Plater: public wxPanel
|
||||
{
|
||||
@ -358,6 +359,9 @@ public:
|
||||
NotificationManager* get_notification_manager();
|
||||
const NotificationManager* get_notification_manager() const;
|
||||
|
||||
PresetArchiveDatabase* get_preset_archive_database();
|
||||
const PresetArchiveDatabase* get_preset_archive_database() const;
|
||||
|
||||
UserAccount* get_user_account();
|
||||
const UserAccount* get_user_account() const;
|
||||
|
||||
|
903
src/slic3r/GUI/PresetArchiveDatabase.cpp
Normal 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
|
185
src/slic3r/GUI/PresetArchiveDatabase.hpp
Normal 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
|
@ -139,8 +139,9 @@ SavePresetDialog::Item::Item(Preset::Type type, const std::string& suffix, wxBox
|
||||
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_presets(presets),
|
||||
m_printer_technology(pt),
|
||||
m_parent(parent),
|
||||
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);
|
||||
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(m_valid_label, 0, wxEXPAND | wxLEFT, 3*BORDER_W);
|
||||
|
||||
|
@ -41,7 +41,7 @@ public:
|
||||
};
|
||||
|
||||
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 accept();
|
||||
|
354
src/slic3r/GUI/UpdatesUIManager.cpp
Normal 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
|
101
src/slic3r/GUI/UpdatesUIManager.hpp
Normal 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
|
@ -20,7 +20,8 @@ namespace GUI {
|
||||
UserAccount::UserAccount(wxEvtHandler* evt_handler, AppConfig* app_config, const std::string& instance_hash)
|
||||
: m_communication(std::make_unique<UserAccountCommunication>(evt_handler, app_config))
|
||||
, m_instance_hash(instance_hash)
|
||||
{}
|
||||
{
|
||||
}
|
||||
|
||||
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"];
|
||||
set_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()) {
|
||||
const boost::filesystem::path server_file(m_account_user_data["avatar"]);
|
||||
m_avatar_extension = server_file.extension().string();
|
||||
|
@ -45,6 +45,7 @@ namespace fs = boost::filesystem;
|
||||
namespace Slic3r {
|
||||
namespace GUI {
|
||||
|
||||
|
||||
namespace {
|
||||
|
||||
std::string get_code_from_message(const std::string& url_message)
|
||||
@ -176,9 +177,10 @@ 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"));
|
||||
init_session_thread();
|
||||
// perform login at the start, but only with tokens
|
||||
if (has_token)
|
||||
if (has_token) {
|
||||
do_login();
|
||||
}
|
||||
}
|
||||
|
||||
UserAccountCommunication::~UserAccountCommunication()
|
||||
{
|
||||
|
@ -118,6 +118,10 @@ struct Update
|
||||
void install() const
|
||||
{
|
||||
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)
|
||||
@ -184,18 +188,18 @@ struct PresetUpdater::priv
|
||||
priv();
|
||||
|
||||
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 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;
|
||||
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);
|
||||
// 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
|
||||
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();
|
||||
};
|
||||
|
||||
@ -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();
|
||||
}
|
||||
|
||||
// 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.
|
||||
void PresetUpdater::priv::prune_tmps() const
|
||||
{
|
||||
@ -270,19 +239,28 @@ void PresetUpdater::priv::prune_tmps() const
|
||||
fs::remove(dir_entry.path());
|
||||
}
|
||||
}
|
||||
|
||||
void PresetUpdater::priv::get_missing_resource(const std::string& vendor, const std::string& filename, const std::string& url) const
|
||||
// Remove all files in cache/vendor
|
||||
void PresetUpdater::priv::clear_cache_vendor() const
|
||||
{
|
||||
if (filename.empty() || vendor.empty())
|
||||
return;
|
||||
|
||||
if (!boost::starts_with(url, "http://files.prusa3d.com/wp-content/uploads/repository/") &&
|
||||
!boost::starts_with(url, "https://files.prusa3d.com/wp-content/uploads/repository/"))
|
||||
{
|
||||
throw Slic3r::CriticalException(GUI::format("URL outside prusa3d.com network: %1%", url));
|
||||
boost::system::error_code ec;
|
||||
for (auto& dir_entry : boost::filesystem::directory_iterator(cache_vendor_path)) {
|
||||
fs::remove(dir_entry.path(), ec);
|
||||
if (ec) {
|
||||
BOOST_LOG_TRIVIAL(error) << "Failed to remove " << dir_entry << " during cache cleanup. Reason: " << ec.what();
|
||||
ec.clear();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
std::string escaped_filename = escape_string_url(filename);
|
||||
// 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;
|
||||
//}
|
||||
|
||||
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_cache(cache_path / (vendor + "/" + filename));
|
||||
@ -299,85 +277,62 @@ 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.";
|
||||
return;
|
||||
}
|
||||
|
||||
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()))
|
||||
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;
|
||||
}
|
||||
|
||||
void PresetUpdater::priv::get_or_copy_missing_resource(const std::string& vendor, const std::string& filename, const std::string& url) const
|
||||
// gets resource to vendor/<vendor_name>/
|
||||
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())
|
||||
return;
|
||||
assert(!filename.empty() && !vendor.empty());
|
||||
|
||||
std::string escaped_filename = escape_string_url(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_cache(cache_path / (vendor + "/" + filename));
|
||||
|
||||
if (fs::exists(file_in_vendor)) { // Already in vendor. No need to do anything.
|
||||
// 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.";
|
||||
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.";
|
||||
return;
|
||||
}
|
||||
if (!fs::exists(file_in_cache)) { // No file to copy. Download it to straight to the vendor dir.
|
||||
if (!boost::starts_with(url, "http://files.prusa3d.com/wp-content/uploads/repository/") &&
|
||||
!boost::starts_with(url, "https://files.prusa3d.com/wp-content/uploads/repository/"))
|
||||
{
|
||||
throw Slic3r::CriticalException(GUI::format("URL outside prusa3d.com network: %1%", url));
|
||||
// Create vendor_name dir in vendor.
|
||||
if (!fs::exists(file_in_vendor.parent_path())) {
|
||||
fs::create_directory(file_in_vendor.parent_path());
|
||||
}
|
||||
// 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;
|
||||
|
||||
const auto resource_url = format("%1%%2%%3%", url, url.back() == '/' ? "" : "/", escaped_filename); // vendor should already be in url
|
||||
|
||||
if (!fs::exists(file_in_vendor.parent_path()))
|
||||
fs::create_directory(file_in_vendor.parent_path());
|
||||
|
||||
get_file(resource_url, file_in_vendor);
|
||||
//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_vendor, repository_id_from_ini);
|
||||
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;
|
||||
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.
|
||||
// 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";
|
||||
|
||||
if (!enabled_config_update) { return; }
|
||||
|
||||
// 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");
|
||||
if (index_archive_url.empty()) {
|
||||
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)) {
|
||||
if (!archive_repository->get_archive(archive_path)) {
|
||||
BOOST_LOG_TRIVIAL(error) << "Download of vedor profiles archive zip failed.";
|
||||
return;
|
||||
}
|
||||
@ -387,10 +342,11 @@ void PresetUpdater::priv::sync_config(const VendorMap vendors, const std::string
|
||||
|
||||
enum class VendorStatus
|
||||
{
|
||||
IN_ARCHIVE,
|
||||
IN_CACHE,
|
||||
NEW_VERSION,
|
||||
INSTALLED
|
||||
IN_ARCHIVE, // index was unzipped from archive to /cache/vendors/
|
||||
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/
|
||||
INSTALLED, // vendor is installed, ini is in /vendors/ folder, no new version is available.
|
||||
NEW_VERSION, // vendor is installed, in /cache/ is new ini version waiting for installation.
|
||||
|
||||
};
|
||||
|
||||
std::vector<std::pair<std::string, VendorStatus>> vendors_with_status;
|
||||
@ -455,18 +411,17 @@ 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(),
|
||||
[&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
|
||||
continue;
|
||||
}
|
||||
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)
|
||||
// Not installed vendor yet - later new version and missing resources will be checked.
|
||||
BOOST_LOG_TRIVIAL(debug) << "No such vendor: " << index.vendor();
|
||||
if (archive_it != vendors_with_status.end())
|
||||
archive_it->second = VendorStatus::IN_CACHE;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (archive_it != vendors_with_status.end())
|
||||
archive_it->second = VendorStatus::INSTALLED;
|
||||
|
||||
const VendorProfile &vendor = vendor_it->second;
|
||||
@ -518,15 +473,14 @@ void PresetUpdater::priv::sync_config(const VendorMap vendors, const std::string
|
||||
if (vendor.config_version >= recommended) { continue; }
|
||||
|
||||
// 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;
|
||||
|
||||
// Download recomended ini to cache
|
||||
const auto path_in_cache = cache_path / (vendor.id + ".ini");
|
||||
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 auto bundle_path = cache_path / (vendor.id + ".ini");
|
||||
if (!get_file(bundle_url, bundle_path))
|
||||
const std::string source_subpath = GUI::format("%1%/%2%.ini", vendor.id, recommended.to_string());
|
||||
const fs::path bundle_path = cache_path / (vendor.id + ".ini");
|
||||
if (!archive_repository->get_file(source_subpath, bundle_path, vendor.repo_id))
|
||||
continue;
|
||||
if (cancel)
|
||||
return;
|
||||
@ -545,7 +499,7 @@ void PresetUpdater::priv::sync_config(const VendorMap vendors, const std::string
|
||||
if (! res.empty()) {
|
||||
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)
|
||||
{
|
||||
@ -558,8 +512,8 @@ void PresetUpdater::priv::sync_config(const VendorMap vendors, const std::string
|
||||
}
|
||||
}
|
||||
}
|
||||
// Download missing thumbnails for not-installed vendors.
|
||||
//for (const std::string& vendor : vendors_only_in_archive)
|
||||
// Now status of each vendor is already decided.
|
||||
// Download missing for non-installed vendors.
|
||||
for (const std::pair<std::string, VendorStatus >& vendor : vendors_with_status) {
|
||||
if (vendor.second == VendorStatus::IN_ARCHIVE) {
|
||||
// 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;
|
||||
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.
|
||||
const std::string fixed_url = GUI::wxGetApp().app_config->profile_folder_url();
|
||||
const auto bundle_url = format("%1%/%2%/%3%.ini", fixed_url, vendor.first, recommended.to_string());
|
||||
if (!get_file(bundle_url, ini_path_in_archive))
|
||||
// Download recommneded to vendor - we do not have any existing ini file so we have to use archive url.
|
||||
const std::string source_subpath = GUI::format("%1%/%2%.ini", vendor.first, recommended.to_string());
|
||||
if (!archive_repository->get_ini_no_id(source_subpath, ini_path_in_archive))
|
||||
continue;
|
||||
} else {
|
||||
// check existing ini version
|
||||
// then download recommneded to vendor if needed
|
||||
// then download recommended to vendor if needed
|
||||
VendorProfile vp;
|
||||
try {
|
||||
vp = VendorProfile::from_ini(ini_path_in_archive, true);
|
||||
} 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());
|
||||
// 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;
|
||||
}
|
||||
if (vp.config_version != recommended) {
|
||||
const std::string fixed_url = GUI::wxGetApp().app_config->profile_folder_url();
|
||||
const auto bundle_url = format("%1%/%2%/%3%.ini", fixed_url, vendor.first, recommended.to_string());
|
||||
if (!get_file(bundle_url, ini_path_in_archive))
|
||||
// Take url from existing ini. This way we prevent downloading files from multiple sources.
|
||||
const std::string source_subpath = GUI::format("%1%/%2%.ini", vp.id, recommended.to_string());
|
||||
if (!archive_repository->get_file(source_subpath, ini_path_in_archive, vp.repo_id))
|
||||
continue;
|
||||
}
|
||||
}
|
||||
@ -618,7 +577,7 @@ void PresetUpdater::priv::sync_config(const VendorMap vendors, const std::string
|
||||
if (!model.thumbnail.empty()) {
|
||||
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)
|
||||
{
|
||||
@ -690,11 +649,12 @@ void PresetUpdater::priv::sync_config(const VendorMap vendors, const std::string
|
||||
}
|
||||
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());
|
||||
// This means resources are corrupted.
|
||||
continue;
|
||||
}
|
||||
const auto bundle_url = format("%1%/%2%.ini", vp.config_update_url, recommended_archive.to_string());
|
||||
if (!get_file(bundle_url, ini_path_in_archive)) {
|
||||
BOOST_LOG_TRIVIAL(error) << format("Failed to open vendor .ini file when checking missing resources: %1%", ini_path_in_rsrc);
|
||||
const std::string source_subpath = GUI::format("%1%/%2%.ini", vp.id, recommended_archive.to_string());
|
||||
if (!archive_repository->get_file(source_subpath, ini_path_in_archive, vp.repo_id)) {
|
||||
BOOST_LOG_TRIVIAL(error) << format("Failed to get new vendor .ini file when checking missing resources: %1%", ini_path_in_archive.string());
|
||||
continue;
|
||||
}
|
||||
} else {
|
||||
@ -709,8 +669,8 @@ void PresetUpdater::priv::sync_config(const VendorMap vendors, const std::string
|
||||
continue;
|
||||
}
|
||||
if (vp.config_version != recommended_archive) {
|
||||
const auto bundle_url = format("%1%/%2%.ini", vp.config_update_url, recommended_archive.to_string());
|
||||
if (!get_file(bundle_url, ini_path_in_archive)) {
|
||||
const std::string source_subpath = GUI::format("%1%/%2%.ini", vp.id, recommended_archive.to_string());
|
||||
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);
|
||||
continue;
|
||||
}
|
||||
@ -734,7 +694,7 @@ void PresetUpdater::priv::sync_config(const VendorMap vendors, const std::string
|
||||
if (!model.thumbnail.empty()) {
|
||||
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)
|
||||
{
|
||||
@ -761,14 +721,14 @@ void PresetUpdater::priv::sync_config(const VendorMap vendors, const std::string
|
||||
}
|
||||
for (const auto& model : vp.models) {
|
||||
for (const std::string& res : { model.bed_texture, model.bed_model, model.thumbnail }) {
|
||||
if (!model.thumbnail.empty()) {
|
||||
if (!res.empty()) {
|
||||
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)
|
||||
{
|
||||
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)
|
||||
@ -1002,7 +962,7 @@ Updates PresetUpdater::priv::get_config_updates(const Semver &old_slic3r_version
|
||||
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 (snapshot) {
|
||||
@ -1089,7 +1049,12 @@ bool PresetUpdater::priv::perform_updates(Updates &&updates, bool snapshot) cons
|
||||
continue;
|
||||
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)
|
||||
{
|
||||
@ -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);
|
||||
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
|
||||
// Unfortunatelly as of C++11, it needs to be copied again
|
||||
// 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]() {
|
||||
p->thread = std::thread([this, &vendors = preset_bundle->vendors, repositories = std::move(repositories), evt_handler]() {
|
||||
this->p->clear_cache_vendor();
|
||||
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);
|
||||
evt_handler->QueueEvent(evt);
|
||||
});
|
||||
@ -1155,6 +1117,19 @@ void PresetUpdater::cancel_sync()
|
||||
p->cancel = true;
|
||||
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()
|
||||
@ -1200,7 +1175,7 @@ static bool reload_configs_update_gui()
|
||||
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; }
|
||||
|
||||
@ -1234,7 +1209,7 @@ PresetUpdater::UpdateResult PresetUpdater::config_update(const Semver& old_slic3
|
||||
|
||||
// This effectively removes the incompatible bundles:
|
||||
// (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))
|
||||
return R_INCOMPAT_EXIT;
|
||||
|
||||
@ -1276,7 +1251,7 @@ PresetUpdater::UpdateResult PresetUpdater::config_update(const Semver& old_slic3
|
||||
const auto res = dlg.ShowModal();
|
||||
if (res == wxID_OK) {
|
||||
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())
|
||||
return R_INCOMPAT_EXIT;
|
||||
return R_UPDATE_INSTALLED;
|
||||
@ -1319,7 +1294,7 @@ PresetUpdater::UpdateResult PresetUpdater::config_update(const Semver& old_slic3
|
||||
const auto res = dlg.ShowModal();
|
||||
if (res == wxID_OK) {
|
||||
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())
|
||||
return R_ALL_CANCELED;
|
||||
return R_UPDATE_INSTALLED;
|
||||
@ -1340,7 +1315,7 @@ PresetUpdater::UpdateResult PresetUpdater::config_update(const Semver& old_slic3
|
||||
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;
|
||||
|
||||
@ -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)
|
||||
return;
|
||||
@ -1469,7 +1444,7 @@ void PresetUpdater::on_update_notification_confirm()
|
||||
const auto res = dlg.ShowModal();
|
||||
if (res == wxID_OK) {
|
||||
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()) {
|
||||
p->has_waiting_updates = false;
|
||||
}
|
||||
@ -1488,5 +1463,19 @@ void PresetUpdater::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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
@ -5,6 +5,8 @@
|
||||
#ifndef slic3r_PresetUpdate_hpp_
|
||||
#define slic3r_PresetUpdate_hpp_
|
||||
|
||||
#include "slic3r/GUI/PresetArchiveDatabase.hpp"
|
||||
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
|
||||
@ -17,6 +19,8 @@ class AppConfig;
|
||||
class PresetBundle;
|
||||
class Semver;
|
||||
|
||||
typedef std::vector<const GUI::ArchiveRepository*> SharedArchiveRepositoryVector;
|
||||
|
||||
static constexpr const int SLIC3R_VERSION_BODY_MAX = 256;
|
||||
|
||||
class PresetUpdater
|
||||
@ -30,9 +34,11 @@ public:
|
||||
~PresetUpdater();
|
||||
|
||||
// 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 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.
|
||||
void slic3r_update_notify();
|
||||
|
||||
@ -56,20 +62,24 @@ public:
|
||||
// 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
|
||||
// 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();
|
||||
|
||||
// "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;
|
||||
|
||||
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:
|
||||
struct priv;
|
||||
std::unique_ptr<priv> p;
|
||||
|
||||
std::vector<std::pair<std::string, std::string>> m_additional_archives;
|
||||
};
|
||||
|
||||
//wxDECLARE_EVENT(EVT_SLIC3R_VERSION_ONLINE, wxCommandEvent);
|
||||
|