Merge branch 'master' of https://github.com/prusa3d/PrusaSlicer into dev
This commit is contained in:
commit
703aefa75c
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Binary file not shown.
@ -7076,6 +7076,10 @@ msgstr "Manuální úprava"
|
|||||||
msgid "Masked SLA file exported to %1%"
|
msgid "Masked SLA file exported to %1%"
|
||||||
msgstr "Soubor pro SLA byl exportován do %1%"
|
msgstr "Soubor pro SLA byl exportován do %1%"
|
||||||
|
|
||||||
|
#: src/slic3r/GUI/Tab.cpp:4004
|
||||||
|
msgid "Match single line"
|
||||||
|
msgstr "Shoda na jednom řádku"
|
||||||
|
|
||||||
#: src/slic3r/GUI/MainFrame.cpp:1582
|
#: src/slic3r/GUI/MainFrame.cpp:1582
|
||||||
msgid "Mate&rial Settings Tab"
|
msgid "Mate&rial Settings Tab"
|
||||||
msgstr "Panel Nastavení mate&riálu"
|
msgstr "Panel Nastavení mate&riálu"
|
||||||
|
Binary file not shown.
@ -7192,6 +7192,10 @@ msgstr "Manuelle Bearbeitung"
|
|||||||
msgid "Masked SLA file exported to %1%"
|
msgid "Masked SLA file exported to %1%"
|
||||||
msgstr "Maskierte SLA-Datei exportiert nach %1%"
|
msgstr "Maskierte SLA-Datei exportiert nach %1%"
|
||||||
|
|
||||||
|
#: src/slic3r/GUI/Tab.cpp:4004
|
||||||
|
msgid "Match single line"
|
||||||
|
msgstr "Einzelne Zeile abgleichen"
|
||||||
|
|
||||||
#: src/slic3r/GUI/MainFrame.cpp:1582
|
#: src/slic3r/GUI/MainFrame.cpp:1582
|
||||||
msgid "Mate&rial Settings Tab"
|
msgid "Mate&rial Settings Tab"
|
||||||
msgstr "Mate&rial Einstellungen"
|
msgstr "Mate&rial Einstellungen"
|
||||||
|
File diff suppressed because it is too large
Load Diff
Binary file not shown.
@ -7132,6 +7132,10 @@ msgstr "Edición manual"
|
|||||||
msgid "Masked SLA file exported to %1%"
|
msgid "Masked SLA file exported to %1%"
|
||||||
msgstr "Archivo SLA enmascarado exportado a %1%"
|
msgstr "Archivo SLA enmascarado exportado a %1%"
|
||||||
|
|
||||||
|
#: src/slic3r/GUI/Tab.cpp:4004
|
||||||
|
msgid "Match single line"
|
||||||
|
msgstr "Coincidir con una sola línea"
|
||||||
|
|
||||||
#: src/slic3r/GUI/MainFrame.cpp:1582
|
#: src/slic3r/GUI/MainFrame.cpp:1582
|
||||||
msgid "Mate&rial Settings Tab"
|
msgid "Mate&rial Settings Tab"
|
||||||
msgstr "Pestaña Ajustes de Mate&rial"
|
msgstr "Pestaña Ajustes de Mate&rial"
|
||||||
|
Binary file not shown.
@ -7201,6 +7201,10 @@ msgstr "Édition manuelle"
|
|||||||
msgid "Masked SLA file exported to %1%"
|
msgid "Masked SLA file exported to %1%"
|
||||||
msgstr "Fichier SLA masqué exporté vers %1%"
|
msgstr "Fichier SLA masqué exporté vers %1%"
|
||||||
|
|
||||||
|
#: src/slic3r/GUI/Tab.cpp:4004
|
||||||
|
msgid "Match single line"
|
||||||
|
msgstr "Correspondance d'une seule ligne"
|
||||||
|
|
||||||
#: src/slic3r/GUI/MainFrame.cpp:1582
|
#: src/slic3r/GUI/MainFrame.cpp:1582
|
||||||
msgid "Mate&rial Settings Tab"
|
msgid "Mate&rial Settings Tab"
|
||||||
msgstr "Onglet Réglage&s Matériau"
|
msgstr "Onglet Réglage&s Matériau"
|
||||||
|
BIN
resources/localization/hu/PrusaSlicer.mo
Normal file
BIN
resources/localization/hu/PrusaSlicer.mo
Normal file
Binary file not shown.
24675
resources/localization/hu/PrusaSlicer_hu.po
Normal file
24675
resources/localization/hu/PrusaSlicer_hu.po
Normal file
File diff suppressed because it is too large
Load Diff
Binary file not shown.
@ -7127,6 +7127,10 @@ msgstr "Modifica manuale"
|
|||||||
msgid "Masked SLA file exported to %1%"
|
msgid "Masked SLA file exported to %1%"
|
||||||
msgstr "File SLA mascherato esportato su %1%"
|
msgstr "File SLA mascherato esportato su %1%"
|
||||||
|
|
||||||
|
#: src/slic3r/GUI/Tab.cpp:4004
|
||||||
|
msgid "Match single line"
|
||||||
|
msgstr "Corrisponde a una linea singola"
|
||||||
|
|
||||||
#: src/slic3r/GUI/MainFrame.cpp:1582
|
#: src/slic3r/GUI/MainFrame.cpp:1582
|
||||||
msgid "Mate&rial Settings Tab"
|
msgid "Mate&rial Settings Tab"
|
||||||
msgstr "Scheda Impostazioni Mate&riale"
|
msgstr "Scheda Impostazioni Mate&riale"
|
||||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Binary file not shown.
@ -1183,8 +1183,9 @@ msgid ""
|
|||||||
"- Closing PrusaSlicer while some presets are modified,\n"
|
"- Closing PrusaSlicer while some presets are modified,\n"
|
||||||
"- Loading a new project while some presets are modified"
|
"- Loading a new project while some presets are modified"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Zawsze pytaj o niezapisane zmiany w presetach, gdy:\n"
|
"Zawsze pytaj o niezapisane zmiany w ustawieniach, gdy:\n"
|
||||||
"- zamykam PrusaSlicer, gdy niektóre zestawy ustawień zostały zmodyfikowane,\n"
|
"- zamykam PrusaSlicer, jeśli niektóre zestawy ustawień zostały "
|
||||||
|
"zmodyfikowane;\n"
|
||||||
"- ładuję nowy projekt, gdy niektóre zestawy ustawień zostały zmodyfikowane."
|
"- ładuję nowy projekt, gdy niektóre zestawy ustawień zostały zmodyfikowane."
|
||||||
|
|
||||||
#: src/slic3r/GUI/Preferences.cpp:224
|
#: src/slic3r/GUI/Preferences.cpp:224
|
||||||
@ -7113,6 +7114,10 @@ msgstr "Edycja ręczna"
|
|||||||
msgid "Masked SLA file exported to %1%"
|
msgid "Masked SLA file exported to %1%"
|
||||||
msgstr "Maskowany plik SLA wyeksportowany do %1%"
|
msgstr "Maskowany plik SLA wyeksportowany do %1%"
|
||||||
|
|
||||||
|
#: src/slic3r/GUI/Tab.cpp:4004
|
||||||
|
msgid "Match single line"
|
||||||
|
msgstr "Dopasowanie pojedynczego wiersza"
|
||||||
|
|
||||||
#: src/slic3r/GUI/MainFrame.cpp:1582
|
#: src/slic3r/GUI/MainFrame.cpp:1582
|
||||||
msgid "Mate&rial Settings Tab"
|
msgid "Mate&rial Settings Tab"
|
||||||
msgstr "Ustawienia mate&riału"
|
msgstr "Ustawienia mate&riału"
|
||||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
2
resources/profiles/Jubilee.idx
Normal file
2
resources/profiles/Jubilee.idx
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
min_slic3r_version = 2.4.1-alpha
|
||||||
|
1.0.0 Initial Jubilee bundle
|
515
resources/profiles/Jubilee.ini
Normal file
515
resources/profiles/Jubilee.ini
Normal file
@ -0,0 +1,515 @@
|
|||||||
|
# Jubilee profiles
|
||||||
|
|
||||||
|
# Based on the profiles from: https://github.com/machineagency/jubilee/tree/main/software/slicer_settings/prusa_slic3r by yvessa
|
||||||
|
|
||||||
|
[vendor]
|
||||||
|
# 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
|
||||||
|
# Where to get the updates from?
|
||||||
|
config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/Jubilee/
|
||||||
|
# The printer models will be shown by the Configuration Wizard in this order,
|
||||||
|
|
||||||
|
[printer_model:Jubilee]
|
||||||
|
name = Jubilee
|
||||||
|
variants = 0.4; Volcano 0.4
|
||||||
|
technology = FFF
|
||||||
|
bed_model = Jubilee_bed.stl
|
||||||
|
bed_texture = Jubilee_texture.svg
|
||||||
|
default_materials = Generic PLA @Jubilee; Generic PETG @Jubilee
|
||||||
|
|
||||||
|
[print:*common*]
|
||||||
|
avoid_crossing_perimeters = 0
|
||||||
|
bottom_fill_pattern = monotonic
|
||||||
|
bottom_solid_layers = 3
|
||||||
|
bridge_acceleration = 0
|
||||||
|
bridge_angle = 0
|
||||||
|
bridge_flow_ratio = 1
|
||||||
|
bridge_speed = 80
|
||||||
|
brim_width = 0
|
||||||
|
clip_multipart_objects = 0
|
||||||
|
compatible_printers_condition = printer_notes=~/.*V6.*/
|
||||||
|
complete_objects = 0
|
||||||
|
default_acceleration = 0
|
||||||
|
dont_support_bridges = 1
|
||||||
|
elefant_foot_compensation = 0
|
||||||
|
ensure_vertical_shell_thickness = 0
|
||||||
|
external_perimeter_extrusion_width = 0.45
|
||||||
|
external_perimeter_speed = 50%
|
||||||
|
external_perimeters_first = 0
|
||||||
|
extra_perimeters = 1
|
||||||
|
extruder_clearance_height = 20
|
||||||
|
extruder_clearance_radius = 20
|
||||||
|
extrusion_width = 0.45
|
||||||
|
fill_angle = 45
|
||||||
|
fill_density = 10%
|
||||||
|
fill_pattern = rectilinear
|
||||||
|
first_layer_acceleration = 0
|
||||||
|
first_layer_extrusion_width = 0.45
|
||||||
|
first_layer_height = 0.2
|
||||||
|
first_layer_speed = 30
|
||||||
|
gap_fill_speed = 50
|
||||||
|
gcode_comments = 0
|
||||||
|
gcode_label_objects = 0
|
||||||
|
infill_acceleration = 0
|
||||||
|
infill_every_layers = 1
|
||||||
|
infill_extruder = 1
|
||||||
|
infill_extrusion_width = 0.45
|
||||||
|
infill_first = 0
|
||||||
|
infill_only_where_needed = 0
|
||||||
|
infill_overlap = 25%
|
||||||
|
infill_speed = 160
|
||||||
|
interface_shells = 0
|
||||||
|
layer_height = 0.2
|
||||||
|
max_print_speed = 150
|
||||||
|
max_volumetric_speed = 0
|
||||||
|
min_skirt_length = 12
|
||||||
|
notes =
|
||||||
|
only_retract_when_crossing_perimeters = 0
|
||||||
|
ooze_prevention = 0
|
||||||
|
output_filename_format = [input_filename_base].gcode
|
||||||
|
overhangs = 1
|
||||||
|
perimeter_acceleration = 0
|
||||||
|
perimeter_extruder = 1
|
||||||
|
perimeter_extrusion_width = 0.45
|
||||||
|
perimeter_speed = 130
|
||||||
|
perimeters = 2
|
||||||
|
post_process =
|
||||||
|
print_settings_id =
|
||||||
|
raft_layers = 0
|
||||||
|
resolution = 0
|
||||||
|
seam_position = nearest
|
||||||
|
single_extruder_multi_material_priming = 1
|
||||||
|
skirt_distance = 6
|
||||||
|
skirt_height = 1
|
||||||
|
skirts = 1
|
||||||
|
slice_closing_radius = 0.049
|
||||||
|
small_perimeter_speed = 40
|
||||||
|
solid_infill_below_area = 70
|
||||||
|
solid_infill_every_layers = 0
|
||||||
|
solid_infill_extruder = 1
|
||||||
|
solid_infill_extrusion_width = 0.45
|
||||||
|
solid_infill_speed = 100
|
||||||
|
spiral_vase = 0
|
||||||
|
standby_temperature_delta = -5
|
||||||
|
support_material = 0
|
||||||
|
support_material_angle = 0
|
||||||
|
support_material_auto = 1
|
||||||
|
support_material_buildplate_only = 0
|
||||||
|
support_material_contact_distance = 0.2
|
||||||
|
support_material_enforce_layers = 0
|
||||||
|
support_material_extruder = 1
|
||||||
|
support_material_extrusion_width = 0.35
|
||||||
|
support_material_interface_contact_loops = 0
|
||||||
|
support_material_interface_extruder = 1
|
||||||
|
support_material_interface_layers = 3
|
||||||
|
support_material_interface_spacing = 0
|
||||||
|
support_material_interface_speed = 100%
|
||||||
|
support_material_pattern = rectilinear
|
||||||
|
support_material_spacing = 2.5
|
||||||
|
support_material_speed = 50
|
||||||
|
support_material_synchronize_layers = 0
|
||||||
|
support_material_threshold = 0
|
||||||
|
support_material_with_sheath = 1
|
||||||
|
support_material_xy_spacing = 50%
|
||||||
|
thin_walls = 1
|
||||||
|
threads = 12
|
||||||
|
top_fill_pattern = monotonic
|
||||||
|
top_infill_extrusion_width = 0.45
|
||||||
|
top_solid_infill_speed = 70
|
||||||
|
top_solid_layers = 3
|
||||||
|
travel_speed = 333
|
||||||
|
wipe_tower = 0
|
||||||
|
wipe_tower_bridging = 10
|
||||||
|
wipe_tower_rotation_angle = 0
|
||||||
|
wipe_tower_width = 60
|
||||||
|
wipe_tower_x = 180
|
||||||
|
wipe_tower_y = 140
|
||||||
|
xy_size_compensation = 0
|
||||||
|
|
||||||
|
[print:0.2mm V6, aesthetic @Jubilee]
|
||||||
|
inherits = *common*
|
||||||
|
|
||||||
|
[print:0.2mm V6, functional @Jubilee]
|
||||||
|
inherits = *common*
|
||||||
|
perimeters = 6
|
||||||
|
fill_density = 30%
|
||||||
|
fill_pattern = rectilinear
|
||||||
|
perimeter_speed = 80
|
||||||
|
small_perimeter_speed = 50
|
||||||
|
external_perimeter_speed = 70%
|
||||||
|
infill_speed = 120
|
||||||
|
solid_infill_speed = 100
|
||||||
|
top_solid_infill_speed = 60
|
||||||
|
support_material_speed = 60
|
||||||
|
bridge_speed = 90
|
||||||
|
first_layer_speed = 40
|
||||||
|
|
||||||
|
[print:0.2mm Volcano, aesthetic @Jubilee]
|
||||||
|
inherits = *common*
|
||||||
|
compatible_printers_condition = printer_notes=~/.*Volcano.*/
|
||||||
|
max_print_speed = 200
|
||||||
|
|
||||||
|
[print:0.2mm Volcano, functional @Jubilee]
|
||||||
|
inherits = *common*
|
||||||
|
compatible_printers_condition = printer_notes=~/.*Volcano.*/
|
||||||
|
perimeters = 6
|
||||||
|
fill_density = 30%
|
||||||
|
fill_pattern = rectilinear
|
||||||
|
perimeter_speed = 120
|
||||||
|
small_perimeter_speed = 40
|
||||||
|
external_perimeter_speed = 80
|
||||||
|
infill_speed = 170
|
||||||
|
solid_infill_speed = 100
|
||||||
|
top_solid_infill_speed = 70
|
||||||
|
support_material_speed = 70
|
||||||
|
bridge_speed = 90
|
||||||
|
gap_fill_speed = 50
|
||||||
|
first_layer_speed = 40
|
||||||
|
max_print_speed = 200
|
||||||
|
|
||||||
|
[filament:*common*]
|
||||||
|
bed_temperature = 60
|
||||||
|
bridge_fan_speed = 100
|
||||||
|
compatible_printers =
|
||||||
|
compatible_printers_condition =
|
||||||
|
compatible_prints =
|
||||||
|
compatible_prints_condition =
|
||||||
|
cooling = 1
|
||||||
|
disable_fan_first_layers = 1
|
||||||
|
end_filament_gcode = "; Filament-specific end gcode \n;END gcode for filament\n"
|
||||||
|
extrusion_multiplier = 0.92
|
||||||
|
fan_always_on = 0
|
||||||
|
fan_below_layer_time = 600
|
||||||
|
filament_colour = #29B2B2
|
||||||
|
filament_cooling_final_speed = 3.4
|
||||||
|
filament_cooling_initial_speed = 2.2
|
||||||
|
filament_cooling_moves = 4
|
||||||
|
filament_cost = 24
|
||||||
|
filament_density = 0
|
||||||
|
filament_deretract_speed = nil
|
||||||
|
filament_diameter = 1.75
|
||||||
|
filament_load_time = 0
|
||||||
|
filament_loading_speed = 28
|
||||||
|
filament_loading_speed_start = 3
|
||||||
|
filament_max_volumetric_speed = 0
|
||||||
|
filament_minimal_purge_on_wipe_tower = 15
|
||||||
|
filament_notes = ""
|
||||||
|
filament_ramming_parameters = "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6"
|
||||||
|
filament_retract_before_travel = nil
|
||||||
|
filament_retract_before_wipe = nil
|
||||||
|
filament_retract_layer_change = nil
|
||||||
|
filament_retract_length = nil
|
||||||
|
filament_retract_lift = nil
|
||||||
|
filament_retract_lift_above = nil
|
||||||
|
filament_retract_lift_below = nil
|
||||||
|
filament_retract_restart_extra = nil
|
||||||
|
filament_retract_speed = nil
|
||||||
|
filament_settings_id = ""
|
||||||
|
filament_soluble = 0
|
||||||
|
filament_toolchange_delay = 0
|
||||||
|
filament_type = PLA
|
||||||
|
filament_unload_time = 0
|
||||||
|
filament_unloading_speed = 90
|
||||||
|
filament_unloading_speed_start = 100
|
||||||
|
filament_wipe = nil
|
||||||
|
first_layer_bed_temperature = 60
|
||||||
|
first_layer_temperature = 190
|
||||||
|
max_fan_speed = 100
|
||||||
|
min_fan_speed = 100
|
||||||
|
min_print_speed = 30
|
||||||
|
slowdown_below_layer_time = 1
|
||||||
|
start_filament_gcode = "; Filament gcode\n"
|
||||||
|
temperature = 190
|
||||||
|
|
||||||
|
[filament:*PLA*]
|
||||||
|
inherits = *common*
|
||||||
|
|
||||||
|
[filament:Generic PLA @Jubilee]
|
||||||
|
inherits = *common*
|
||||||
|
filament_vendor = Generic
|
||||||
|
|
||||||
|
[filament:Hatchbox PLA @Jubilee]
|
||||||
|
inherits = *PLA*
|
||||||
|
filament_vendor = Hatchbox
|
||||||
|
|
||||||
|
[filament:Generic PETG @Jubilee]
|
||||||
|
filament_vendor = Generic
|
||||||
|
bed_temperature = 65
|
||||||
|
bridge_fan_speed = 0
|
||||||
|
compatible_printers =
|
||||||
|
compatible_prints =
|
||||||
|
compatible_prints_condition =
|
||||||
|
cooling = 1
|
||||||
|
disable_fan_first_layers = 3
|
||||||
|
end_filament_gcode = "; Filament-specific end gcode"
|
||||||
|
extrusion_multiplier = 1
|
||||||
|
fan_always_on = 0
|
||||||
|
fan_below_layer_time = 20
|
||||||
|
filament_colour = #FF8000
|
||||||
|
filament_cooling_final_speed = 3.4
|
||||||
|
filament_cooling_initial_speed = 2.2
|
||||||
|
filament_cooling_moves = 4
|
||||||
|
filament_cost = 24.99
|
||||||
|
filament_density = 1.27
|
||||||
|
filament_deretract_speed = nil
|
||||||
|
filament_diameter = 1.75
|
||||||
|
filament_load_time = 0
|
||||||
|
filament_loading_speed = 28
|
||||||
|
filament_loading_speed_start = 3
|
||||||
|
filament_max_volumetric_speed = 8
|
||||||
|
filament_minimal_purge_on_wipe_tower = 15
|
||||||
|
filament_notes = ""
|
||||||
|
filament_ramming_parameters = "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6"
|
||||||
|
filament_retract_before_travel = nil
|
||||||
|
filament_retract_before_wipe = nil
|
||||||
|
filament_retract_layer_change = nil
|
||||||
|
filament_retract_length = 2
|
||||||
|
filament_retract_lift = 0.5
|
||||||
|
filament_retract_lift_above = nil
|
||||||
|
filament_retract_lift_below = nil
|
||||||
|
filament_retract_restart_extra = nil
|
||||||
|
filament_retract_speed = 150
|
||||||
|
filament_settings_id = ""
|
||||||
|
filament_soluble = 0
|
||||||
|
filament_toolchange_delay = 0
|
||||||
|
filament_type = PETG
|
||||||
|
filament_unload_time = 0
|
||||||
|
filament_unloading_speed = 90
|
||||||
|
filament_unloading_speed_start = 100
|
||||||
|
filament_wipe = nil
|
||||||
|
first_layer_bed_temperature = 65
|
||||||
|
first_layer_temperature = 230
|
||||||
|
max_fan_speed = 50
|
||||||
|
min_fan_speed = 0
|
||||||
|
min_print_speed = 15
|
||||||
|
slowdown_below_layer_time = 20
|
||||||
|
temperature = 240
|
||||||
|
|
||||||
|
[filament: Proto-pasta HTPLA @Jubilee]
|
||||||
|
filament_vendor = Proto-pasta
|
||||||
|
bed_temperature = 50
|
||||||
|
bridge_fan_speed = 100
|
||||||
|
compatible_printers =
|
||||||
|
compatible_printers_condition =
|
||||||
|
compatible_prints =
|
||||||
|
compatible_prints_condition =
|
||||||
|
cooling = 1
|
||||||
|
disable_fan_first_layers = 1
|
||||||
|
end_filament_gcode = "; Filament-specific end gcode \n;END gcode for filament\n"
|
||||||
|
extrusion_multiplier = 0.96
|
||||||
|
fan_always_on = 0
|
||||||
|
fan_below_layer_time = 600
|
||||||
|
filament_colour = #29B2B2
|
||||||
|
filament_cooling_final_speed = 3.4
|
||||||
|
filament_cooling_initial_speed = 2.2
|
||||||
|
filament_cooling_moves = 0
|
||||||
|
filament_cost = 24
|
||||||
|
filament_density = 0
|
||||||
|
filament_deretract_speed = nil
|
||||||
|
filament_diameter = 1.75
|
||||||
|
filament_load_time = 10
|
||||||
|
filament_loading_speed = 28
|
||||||
|
filament_loading_speed_start = 3
|
||||||
|
filament_max_volumetric_speed = 0
|
||||||
|
filament_minimal_purge_on_wipe_tower = 0
|
||||||
|
filament_notes = ""
|
||||||
|
filament_ramming_parameters = "120 100| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 8.87097 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6"
|
||||||
|
filament_retract_before_travel = nil
|
||||||
|
filament_retract_before_wipe = nil
|
||||||
|
filament_retract_layer_change = nil
|
||||||
|
filament_retract_length = nil
|
||||||
|
filament_retract_lift = nil
|
||||||
|
filament_retract_lift_above = nil
|
||||||
|
filament_retract_lift_below = nil
|
||||||
|
filament_retract_restart_extra = nil
|
||||||
|
filament_retract_speed = nil
|
||||||
|
filament_settings_id = ""
|
||||||
|
filament_soluble = 0
|
||||||
|
filament_toolchange_delay = 0
|
||||||
|
filament_type = PLA
|
||||||
|
filament_unload_time = 0
|
||||||
|
filament_unloading_speed = 90
|
||||||
|
filament_unloading_speed_start = 100
|
||||||
|
filament_wipe = nil
|
||||||
|
first_layer_bed_temperature = 50
|
||||||
|
first_layer_temperature = 200
|
||||||
|
max_fan_speed = 100
|
||||||
|
min_fan_speed = 100
|
||||||
|
min_print_speed = 30
|
||||||
|
slowdown_below_layer_time = 1
|
||||||
|
start_filament_gcode = "; Filament gcode\n"
|
||||||
|
temperature = 200
|
||||||
|
|
||||||
|
[filament:Prusa PLA @Jubilee]
|
||||||
|
inherits = *PLA*
|
||||||
|
filament_vendor = Made for Prusa
|
||||||
|
bed_temperature = 50
|
||||||
|
bridge_fan_speed = 100
|
||||||
|
cooling = 1
|
||||||
|
disable_fan_first_layers = 1
|
||||||
|
end_filament_gcode = "; Filament-specific end gcode \n;END gcode for filament\n"
|
||||||
|
extrusion_multiplier = 0.96
|
||||||
|
fan_always_on = 0
|
||||||
|
fan_below_layer_time = 600
|
||||||
|
filament_colour = #29B2B2
|
||||||
|
filament_cooling_final_speed = 3.4
|
||||||
|
filament_cooling_initial_speed = 2.2
|
||||||
|
filament_cooling_moves = 4
|
||||||
|
filament_cost = 24
|
||||||
|
filament_density = 0
|
||||||
|
filament_deretract_speed = nil
|
||||||
|
filament_load_time = 0
|
||||||
|
filament_loading_speed = 28
|
||||||
|
filament_loading_speed_start = 3
|
||||||
|
filament_max_volumetric_speed = 0
|
||||||
|
filament_minimal_purge_on_wipe_tower = 15
|
||||||
|
filament_notes = ""
|
||||||
|
filament_ramming_parameters = "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6"
|
||||||
|
filament_unloading_speed = 90
|
||||||
|
filament_unloading_speed_start = 100
|
||||||
|
filament_wipe = nil
|
||||||
|
first_layer_bed_temperature = 50
|
||||||
|
first_layer_temperature = 210
|
||||||
|
max_fan_speed = 100
|
||||||
|
min_fan_speed = 100
|
||||||
|
min_print_speed = 30
|
||||||
|
slowdown_below_layer_time = 1
|
||||||
|
start_filament_gcode = "; Filament gcode\n"
|
||||||
|
temperature = 210
|
||||||
|
|
||||||
|
[filament:Solutech PLA @Jubilee]
|
||||||
|
inherits = *PLA*
|
||||||
|
filament_vendor = Solutech
|
||||||
|
bed_temperature = 50
|
||||||
|
bridge_fan_speed = 100
|
||||||
|
extrusion_multiplier = 0.96
|
||||||
|
fan_always_on = 0
|
||||||
|
fan_below_layer_time = 600
|
||||||
|
filament_colour = #29B2B2
|
||||||
|
first_layer_bed_temperature = 50
|
||||||
|
first_layer_temperature = 200
|
||||||
|
max_fan_speed = 100
|
||||||
|
min_fan_speed = 100
|
||||||
|
min_print_speed = 30
|
||||||
|
slowdown_below_layer_time = 1
|
||||||
|
start_filament_gcode = "; Filament gcode\n"
|
||||||
|
temperature = 200
|
||||||
|
|
||||||
|
[filament:Verbatim BVOH @Jubilee]
|
||||||
|
filament_vendor = Verbatim
|
||||||
|
bed_temperature = 60
|
||||||
|
bridge_fan_speed = 100
|
||||||
|
cooling = 0
|
||||||
|
disable_fan_first_layers = 1
|
||||||
|
end_filament_gcode = "; Filament-specific end gcode"
|
||||||
|
extrusion_multiplier = 1
|
||||||
|
fan_always_on = 0
|
||||||
|
fan_below_layer_time = 100
|
||||||
|
filament_colour = #FFFFD7
|
||||||
|
filament_cooling_final_speed = 3.4
|
||||||
|
filament_cooling_initial_speed = 2.2
|
||||||
|
filament_cooling_moves = 4
|
||||||
|
filament_cost = 218
|
||||||
|
filament_density = 1.23
|
||||||
|
filament_deretract_speed = nil
|
||||||
|
filament_diameter = 1.75
|
||||||
|
filament_load_time = 0
|
||||||
|
filament_loading_speed = 28
|
||||||
|
filament_loading_speed_start = 3
|
||||||
|
filament_max_volumetric_speed = 4
|
||||||
|
filament_minimal_purge_on_wipe_tower = 15
|
||||||
|
filament_notes = "List of materials tested with standard PVA print settings:\n\nVerbatim BVOH"
|
||||||
|
filament_ramming_parameters = "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6"
|
||||||
|
filament_soluble = 1
|
||||||
|
filament_toolchange_delay = 0
|
||||||
|
filament_type = PVA
|
||||||
|
filament_unload_time = 0
|
||||||
|
filament_unloading_speed = 90
|
||||||
|
filament_unloading_speed_start = 100
|
||||||
|
filament_wipe = nil
|
||||||
|
first_layer_bed_temperature = 60
|
||||||
|
first_layer_temperature = 210
|
||||||
|
max_fan_speed = 100
|
||||||
|
min_fan_speed = 100
|
||||||
|
min_print_speed = 15
|
||||||
|
slowdown_below_layer_time = 20
|
||||||
|
temperature = 210
|
||||||
|
|
||||||
|
# Common printer preset
|
||||||
|
[printer:*common*]
|
||||||
|
bed_shape = 0x0,300x0,300x300,0x300
|
||||||
|
cooling_tube_length = 5
|
||||||
|
cooling_tube_retraction = 91.5
|
||||||
|
deretract_speed = 0,0
|
||||||
|
end_gcode = T-1 ; desect current tool\nG0 Z305 ; move bed all the way to the bottom\nM104 S0 T0; turn off extruder 0\nM104 S0 T1; turn off extruder 1\nM140 S0 ; turn off bed\nG0 X0 Y0 F30000; return home\nM84 S600; disable motors after ten mins of inactivity\n
|
||||||
|
extra_loading_move = -2
|
||||||
|
extruder_colour = #FF8000;#0080FF
|
||||||
|
extruder_offset = 0x0,0x0
|
||||||
|
gcode_flavor = marlin
|
||||||
|
high_current_on_filament_swap = 0
|
||||||
|
layer_gcode =
|
||||||
|
machine_max_acceleration_e = 1500
|
||||||
|
machine_max_acceleration_extruding = 1500
|
||||||
|
machine_max_acceleration_retracting = 1500
|
||||||
|
machine_max_acceleration_x = 1000
|
||||||
|
machine_max_acceleration_y = 1000
|
||||||
|
machine_max_acceleration_z = 20
|
||||||
|
machine_max_feedrate_e = 8000
|
||||||
|
machine_max_feedrate_x = 13000
|
||||||
|
machine_max_feedrate_y = 13000
|
||||||
|
machine_max_feedrate_z = 800
|
||||||
|
machine_max_jerk_e = 50
|
||||||
|
machine_max_jerk_x = 17
|
||||||
|
machine_max_jerk_y = 17
|
||||||
|
machine_max_jerk_z = 0.1
|
||||||
|
machine_min_extruding_rate = 0
|
||||||
|
machine_min_travel_rate = 0
|
||||||
|
machine_limits_usage = time_estimate_only
|
||||||
|
max_layer_height = 0.3,0.3
|
||||||
|
max_print_height = 300
|
||||||
|
min_layer_height = 0.05,0.05
|
||||||
|
nozzle_diameter = 0.4,0.4
|
||||||
|
parking_pos_retraction = 92
|
||||||
|
printer_model =
|
||||||
|
printer_technology = FFF
|
||||||
|
remaining_times = 0
|
||||||
|
retract_before_travel = 2,2
|
||||||
|
retract_before_wipe = 0%,0%
|
||||||
|
retract_layer_change = 0,0
|
||||||
|
retract_length = 1,1
|
||||||
|
retract_length_toolchange = 1,1
|
||||||
|
retract_lift = 0.2,0.2
|
||||||
|
retract_lift_above = 0,0
|
||||||
|
retract_lift_below = 0,0
|
||||||
|
retract_restart_extra = 0.05,0.05
|
||||||
|
retract_restart_extra_toolchange = 0,0
|
||||||
|
retract_speed = 133,133
|
||||||
|
silent_mode = 0
|
||||||
|
single_extruder_multi_material = 0
|
||||||
|
start_gcode = G91 ; relative moves\nG1 Z1 F900 ; raise tool 1mm\nG90 ; absolute moves\nT-1 ; Make sure nothing is parked on the carriage\nG0 X150 Y150 F10000; Move to the center of the print area\nM558 F500 ; Set the probing speed\nG30 ; Do a single probe\nM558 F50 ; Set a slower probing speed\nG30 ; Do a second probe\nT[current_extruder]
|
||||||
|
thumbnails =
|
||||||
|
toolchange_gcode = T[next_extruder]
|
||||||
|
use_firmware_retraction = 0
|
||||||
|
use_relative_e_distances = 1
|
||||||
|
use_volumetric_e = 0
|
||||||
|
variable_layer_height = 0
|
||||||
|
wipe = 0,0
|
||||||
|
z_offset = 0
|
||||||
|
default_filament_profile = "Generic PLA @Jubilee; Generic PLA @Jubilee"
|
||||||
|
default_print_profile = 0.2mm V6, aesthetic @Jubilee
|
||||||
|
|
||||||
|
[printer:Jubilee]
|
||||||
|
inherits = *common*
|
||||||
|
printer_model = Jubilee
|
||||||
|
printer_variant = 0.4
|
||||||
|
printer_notes = V6
|
||||||
|
|
||||||
|
[printer:Jubilee Volcano 0.4mm]
|
||||||
|
inherits = *common*
|
||||||
|
printer_model = Jubilee
|
||||||
|
printer_variant = Volcano 0.4
|
||||||
|
printer_notes = Volcano
|
||||||
|
default_print_profile = 0.2mm Volcano, aesthetic @Jubilee
|
BIN
resources/profiles/Jubilee/Jubilee_bed.stl
Normal file
BIN
resources/profiles/Jubilee/Jubilee_bed.stl
Normal file
Binary file not shown.
232
resources/profiles/Jubilee/Jubilee_texture.svg
Normal file
232
resources/profiles/Jubilee/Jubilee_texture.svg
Normal file
@ -0,0 +1,232 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Generator: Adobe Illustrator 23.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
version="1.1"
|
||||||
|
x="0px"
|
||||||
|
y="0px"
|
||||||
|
viewBox="0 0 680.31502 680.31502"
|
||||||
|
enable-background="new 0 0 680.3149 680.3149"
|
||||||
|
xml:space="preserve"
|
||||||
|
id="svg66"
|
||||||
|
sodipodi:docname="Jubilee_texture.svg"
|
||||||
|
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
|
||||||
|
width="680.315"
|
||||||
|
height="680.315"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"><defs
|
||||||
|
id="defs70" /><sodipodi:namedview
|
||||||
|
id="namedview68"
|
||||||
|
pagecolor="#505050"
|
||||||
|
bordercolor="#eeeeee"
|
||||||
|
borderopacity="1"
|
||||||
|
inkscape:pageshadow="0"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pagecheckerboard="0"
|
||||||
|
showgrid="true"
|
||||||
|
inkscape:zoom="0.64161465"
|
||||||
|
inkscape:cx="225.21306"
|
||||||
|
inkscape:cy="295.34862"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1129"
|
||||||
|
inkscape:window-x="-8"
|
||||||
|
inkscape:window-y="-8"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="g24"><inkscape:grid
|
||||||
|
type="xygrid"
|
||||||
|
id="grid4311"
|
||||||
|
empcolor="#ffffff"
|
||||||
|
empopacity="0.49803922"
|
||||||
|
color="#ffffff"
|
||||||
|
opacity="0.50196078"
|
||||||
|
spacingx="37.795277"
|
||||||
|
spacingy="37.795277"
|
||||||
|
units="cm"
|
||||||
|
dotted="false"
|
||||||
|
originx="340.1575"
|
||||||
|
originy="340.1575" /></sodipodi:namedview>
|
||||||
|
|
||||||
|
|
||||||
|
<path
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
d="M 37.795277,0 V 680.31498"
|
||||||
|
id="path4436" /><path
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
d="M 75.590554,680.31498 V 0"
|
||||||
|
id="path4438" /><path
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
d="M 113.38583,0 V 680.31498"
|
||||||
|
id="path4553" /><path
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
d="M 151.1811,680.31498 V 0"
|
||||||
|
id="path4555" /><path
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
d="M 188.97638,0 V 680.31498"
|
||||||
|
id="path4557" /><path
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
d="M 226.77166,680.31498 V 0"
|
||||||
|
id="path4559" /><path
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
d="M 264.56694,0 V 680.31498"
|
||||||
|
id="path4561" /><path
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
d="M 302.36221,680.31498 V 0"
|
||||||
|
id="path4563" /><path
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
d="M 340.15749,0 V 680.31498"
|
||||||
|
id="path4565" /><path
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
d="M 377.95277,680.31498 V 0"
|
||||||
|
id="path4567" /><path
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
d="M 415.74804,0 V 680.31498"
|
||||||
|
id="path4569" /><path
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
d="M 453.54332,680.31498 V 0"
|
||||||
|
id="path4571" /><path
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
d="M 491.3386,0 V 680.31498"
|
||||||
|
id="path4573" /><path
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
d="M 529.13388,680.31498 529.13387,0"
|
||||||
|
id="path4575" /><path
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
d="M 566.92915,0 V 680.31498"
|
||||||
|
id="path4577" /><path
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
d="M 604.72443,680.31498 V 0"
|
||||||
|
id="path4579" /><path
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
d="M 642.51971,0 V 680.31498"
|
||||||
|
id="path4581" /><path
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
d="M 680.31498,642.51971 H 0"
|
||||||
|
id="path4583" /><path
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
d="M 0,604.72443 H 680.31498"
|
||||||
|
id="path4585" /><path
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
d="M 680.31498,566.92915 H 0"
|
||||||
|
id="path4587" /><path
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
d="M 0,529.13387 H 680.31498"
|
||||||
|
id="path4589" /><path
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
d="M 680.31498,491.3386 H 0"
|
||||||
|
id="path4591" /><path
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
d="M 0,453.54332 H 680.31498"
|
||||||
|
id="path4593" /><path
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
d="M 680.31498,415.74804 H 0"
|
||||||
|
id="path4595" /><path
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
d="M 0,377.95277 H 680.31498"
|
||||||
|
id="path4597" /><path
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
d="M 680.31498,340.15749 H 0"
|
||||||
|
id="path4599" /><path
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
d="M 0,302.36221 H 680.31498"
|
||||||
|
id="path4601" /><path
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
d="M 680.31498,264.56694 H 0"
|
||||||
|
id="path4603" /><path
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
d="M 0,226.77166 H 680.31498"
|
||||||
|
id="path4605" /><path
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
d="M 680.31498,188.97638 H 0"
|
||||||
|
id="path4607" /><path
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
d="M 0,151.1811 H 680.31498"
|
||||||
|
id="path4609" /><path
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
d="M 680.31498,113.38583 H 0"
|
||||||
|
id="path4611" /><path
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
d="M 0,75.590554 H 680.31498"
|
||||||
|
id="path4613" /><path
|
||||||
|
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
|
d="M 680.31498,37.795277 H 0"
|
||||||
|
id="path4615" /><g
|
||||||
|
id="logo"
|
||||||
|
transform="rotate(180,347.24687,326.4726)">
|
||||||
|
<g
|
||||||
|
id="g24">
|
||||||
|
<path
|
||||||
|
d="m 280.4813,484.2325 c 18.38,7.6201 38.54,11.83 59.6801,11.83 v -14.17 c -19.22,0 -37.54,-3.82 -54.25,-10.75 h -0.01 c -17.3201,-7.18 -32.9,-17.7 -45.9599,-30.77 -13.05,-13.04 -23.5801,-28.63 -30.76,-45.96 l -13.1001,5.43 c 7.9,19.05 19.47,36.2 33.8301,50.56 14.3598,14.3601 31.5098,25.9301 50.5698,33.83 z"
|
||||||
|
id="path2"
|
||||||
|
style="fill:#000000;fill-opacity:1;stroke:#d4d4d4;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
d="m 196.0813,280.4726 c 7.9,-19.05 19.47,-36.2 33.8301,-50.56 l -10.02,-10.02 c -15.67,15.67 -28.29,34.37 -36.9,55.16 -8.3199,20.05 -12.91,42.04 -12.91,65.1 0,23.06 4.5901,45.06 12.91,65.11 l 13.09,-5.42 c -7.6199,-18.39 -11.83,-38.54 -11.83,-59.69 -1e-4,-21.14 4.21,-41.3 11.8299,-59.68 z"
|
||||||
|
id="path4"
|
||||||
|
style="fill:#000000;fill-opacity:1;stroke:#d4d4d4;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
d="m 209.1814,394.4126 13.1099,-5.4301 c -6.25,-15.04 -9.6899,-31.54 -9.6899,-48.83 h -14.1799 c -2e-4,19.2201 3.8298,37.5501 10.7599,54.2601 z"
|
||||||
|
id="path6"
|
||||||
|
style="fill:#000000;fill-opacity:1;stroke:#d4d4d4;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
d="m 240.9414,340.1526 c 0,-13.45 2.6799,-26.28 7.5299,-37.97 l -13.09,-5.43 c -5.55,13.37 -8.61,28.03 -8.61,43.4 z"
|
||||||
|
id="path8"
|
||||||
|
style="fill:#000000;fill-opacity:1;stroke:#d4d4d4;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
d="m 313.0412,405.6426 c 8.3501,3.47 17.51,5.38 27.1201,5.38 9.61,0 18.77,-1.91 27.1199,-5.38 l -5.4199,-13.09 c -6.6899,2.77 -14.02,4.3 -21.7,4.3 -7.6801,0 -15.01,-1.53 -21.7,-4.3 -6.9302,-2.87 -13.1702,-7.08 -18.3901,-12.3 v -0.01 c -5.23,-5.22 -9.4299,-11.45 -12.2999,-18.38 l -13.1,5.42 c 3.59,8.66 8.85,16.45 15.3799,22.98 6.53,6.5299 14.3301,11.8 22.99,15.38 z"
|
||||||
|
id="path10"
|
||||||
|
style="fill:#000000;fill-opacity:1;stroke:#d4d4d4;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
d="m 248.4813,378.1326 c 5.02,12.13 12.38,23.04 21.52,32.18 9.14,9.14 20.0499,16.51 32.1801,21.52 11.7,4.86 24.53,7.54 37.98,7.54 13.45,0 26.27,-2.68 37.97,-7.54 12.13,-5.01 23.04,-12.38 32.1799,-21.52 9.1401,-9.14 16.5,-20.05 21.52,-32.18 l -13.09,-5.42 c -4.3099,10.4 -10.63,19.75 -18.4601,27.57 -7.8298,7.84 -17.1799,14.15 -27.5698,18.45 -10.03,4.16 -21.02,6.46 -32.55,6.46 -11.53,0 -22.52,-2.29 -32.55,-6.45 -10.3999,-4.31 -19.75,-10.62 -27.5801,-18.46 -7.8298,-7.83 -14.1499,-17.19 -18.45,-27.58 -4.1599,-10.03 -6.4599,-21.02 -6.4599,-32.55 h -14.1799 c -1e-4,13.4599 2.6798,26.28 7.5398,37.98 z"
|
||||||
|
id="path12"
|
||||||
|
style="fill:#000000;fill-opacity:1;stroke:#d4d4d4;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
d="m 383.5623,444.9326 c -13.36,5.55 -28.02,8.61 -43.4,8.61 -15.37,0 -30.03,-3.06 -43.3999,-8.61 -13.8601,-5.74 -26.3301,-14.15 -36.78,-24.6 -10.44,-10.44 -18.8601,-22.91 -24.6001,-36.77 l -13.09,5.42 c 6.4601,15.59 15.92,29.6201 27.67,41.3701 11.75,11.75 25.78,21.21 41.37,27.68 15.0399,6.24 31.5299,9.68 48.83,9.68 17.3001,0 33.79,-3.44 48.8301,-9.68 15.58,-6.46 29.61,-15.93 41.36,-27.68 11.75,-11.7401 21.22,-25.77 27.6801,-41.36 6.25,-15.04 9.6899,-31.54 9.6899,-48.84 v -204.44 c -4.5601,-2.85 -9.23,-5.56 -13.99,-8.1 -0.0701,-0.04 -0.13,-0.08 -0.1901,-0.1 v 212.64 c 0,7.69 -0.7699,15.2 -2.22,22.46 -1.4601,7.26 -3.61,14.26 -6.39,20.95 -5.74,13.86 -14.1599,26.33 -24.6,36.77 -10.4401,10.44 -22.91,18.8599 -36.77,24.5999 z"
|
||||||
|
id="path14"
|
||||||
|
style="fill:#000000;fill-opacity:1;stroke:#d4d4d4;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
d="m 394.4123,471.1326 5.4301,13.1 c 19.0499,-7.9 36.2,-19.47 50.5599,-33.83 14.3601,-14.36 25.9301,-31.51 33.8301,-50.56 7.62,-18.39 11.83,-38.54 11.83,-59.68 v -183.72 c -4.49,-3.81 -9.12,-7.47 -13.89,-10.95 -0.09,-0.07 -0.1899,-0.14 -0.28,-0.2 v 194.87 c 0,9.61 -0.96,18.99 -2.78,28.06 -1.8199,9.0699 -4.5099,17.83 -7.98,26.19 -7.1799,17.33 -17.71,32.92 -30.76,45.96 -13.0501,13.07 -28.64,23.58 -45.9601,30.76 z"
|
||||||
|
id="path16"
|
||||||
|
style="fill:#000000;fill-opacity:1;stroke:#d4d4d4;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
d="m 510.6122,169.8626 c -0.1199,-0.12 -0.24,-0.25 -0.3699,-0.37 v 170.66 h -0.01 c 0,23.06 -4.5901,45.06 -12.91,65.11 -8.62,20.79 -21.24,39.49 -36.9,55.16 -15.6699,15.66 -34.37,28.28 -55.1599,36.9 -20.05,8.32 -42.04,12.91 -65.1001,12.91 -23.0599,0 -45.05,-4.59 -65.1,-12.91 -20.7899,-8.61 -39.5,-21.24 -55.17,-36.9 l -10.02,10.02 c 33.3401,33.35 79.4101,53.97 130.29,53.97 50.8701,0 96.9301,-20.6201 130.28,-53.97 33.3401,-33.34 53.97,-79.4 53.97,-130.28 v -155.27 c -4.3899,-5.2 -8.99,-10.22 -13.8001,-15.03 z"
|
||||||
|
id="path18"
|
||||||
|
style="fill:#000000;fill-opacity:1;stroke:#d4d4d4;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
d="m 439.3923,120.5326 c -4.6199,-2.09 -9.3199,-4.04 -14.1,-5.85 -0.0199,-0.01 -0.0399,-0.01 -0.0699,-0.02 v 225.5 h 14.1699 z"
|
||||||
|
id="path20"
|
||||||
|
style="fill:#000000;fill-opacity:1;stroke:#d4d4d4;stroke-opacity:1" />
|
||||||
|
<path
|
||||||
|
d="m 405.6423,367.2826 c 3.47,-8.36 5.3801,-17.52 5.3801,-27.12 h 0.0299 v -230.35 c -4.67,-1.44 -9.4,-2.73 -14.1801,-3.88 v 234.22 h -0.0199 c 0,7.69 -1.53,15.02 -4.3,21.71 -2.87,6.93 -7.08,13.17 -12.2999,18.39 l 10.01,10.01 c 6.5299,-6.5301 11.7899,-14.32 15.3799,-22.98 z"
|
||||||
|
id="path22"
|
||||||
|
style="fill:#000000;fill-opacity:1;stroke:#d4d4d4;stroke-opacity:1" />
|
||||||
|
</g>
|
||||||
|
<path
|
||||||
|
fill="none"
|
||||||
|
d="m 418.7413,307.6026 c -2.1,-5.0601 -4.68,-9.88 -7.67,-14.4 v 46.95 h -0.05 c 0,9.61 -1.91,18.77 -5.38,27.13 -3.59,8.66 -8.85,16.45 -15.38,22.98 l -10.01,-10.01 c 5.22,-5.22 9.43,-11.46 12.3,-18.39 2.77,-6.69 4.3,-14.02 4.3,-21.71 v -63.37 c -7.08,-6.34 -15.23,-11.51 -24.14,-15.2 -10.03,-4.16 -21.02,-6.46 -32.55,-6.46 -11.53,0 -22.52,2.29 -32.55,6.45 -10.4,4.31 -19.75,10.62 -27.58,18.46 -7.83,7.83 -14.15,17.18 -18.45,27.57 -4.16,10.03 -6.46,21.02 -6.46,32.55 0,11.53 2.3,22.52 6.46,32.55 4.3,10.39 10.62,19.75 18.45,27.58 7.83,7.84 17.1801,14.15 27.58,18.46 10.03,4.16 21.02,6.45 32.55,6.45 11.53,0 22.52,-2.3 32.55,-6.46 10.39,-4.3 19.74,-10.61 27.5699,-18.45 7.83,-7.82 14.15,-17.17 18.46,-27.57 4.16,-10.03 6.46,-21.03 6.46,-32.56 1e-4,-11.53 -2.2999,-22.52 -6.4599,-32.55 z m -78.58,103.42 c -9.61,0 -18.77,-1.91 -27.12,-5.38 -8.66,-3.58 -16.46,-8.85 -22.99,-15.38 -6.53,-6.53 -11.79,-14.32 -15.38,-22.98 l 13.1,-5.42 c 2.87,6.93 7.0699,13.16 12.3,18.38 v 0.01 c 5.22,5.22 11.46,9.43 18.39,12.3 6.69,2.77 14.02,4.3 21.7,4.3 7.68,0 15.01,-1.53 21.7,-4.3 l 5.42,13.09 c -8.35,3.4699 -17.51,5.38 -27.12,5.38 z"
|
||||||
|
id="path26" />
|
||||||
|
<path
|
||||||
|
fill="none"
|
||||||
|
d="m 425.2913,340.1526 v -50.97 c -4.01,-6.69 -8.79,-12.86 -14.22,-18.4 v 69.37 h -0.05 c 0,9.61 -1.91,18.77 -5.38,27.13 -3.59,8.66 -8.85,16.45 -15.38,22.98 l -10.01,-10.01 c 5.22,-5.22 9.43,-11.46 12.3,-18.39 2.77,-6.69 4.3,-14.02 4.3,-21.71 v -81.42 c -5.81,-4.06 -12.08,-7.5 -18.72,-10.25 -11.7,-4.86 -24.52,-7.54 -37.97,-7.54 -13.45,0 -26.28,2.68 -37.98,7.54 -12.13,5.02 -23.04,12.38 -32.18,21.52 -9.14,9.14 -16.5,20.05 -21.53,32.18 -4.85,11.69 -7.53,24.52 -7.53,37.97 h 14.18 c 0,11.53 2.3,22.52 6.46,32.55 4.3,10.39 10.62,19.75 18.45,27.58 7.83,7.84 17.1801,14.15 27.58,18.46 10.03,4.16 21.02,6.45 32.55,6.45 11.53,0 22.52,-2.3 32.55,-6.46 10.39,-4.3 19.74,-10.61 27.5699,-18.45 7.83,-7.82 14.15,-17.17 18.46,-27.57 l 13.09,5.42 c 4.86,-11.7 7.54,-24.52 7.54,-37.98 z m -85.13,70.87 c -9.61,0 -18.77,-1.91 -27.12,-5.38 -8.66,-3.58 -16.46,-8.85 -22.99,-15.38 -6.53,-6.53 -11.79,-14.32 -15.38,-22.98 l 13.1,-5.42 c 2.87,6.93 7.0699,13.16 12.3,18.38 v 0.01 c 5.22,5.22 11.46,9.43 18.39,12.3 6.69,2.77 14.02,4.3 21.7,4.3 7.68,0 15.01,-1.53 21.7,-4.3 l 5.42,13.09 c -8.35,3.4699 -17.51,5.38 -27.12,5.38 z"
|
||||||
|
id="path28" />
|
||||||
|
<path
|
||||||
|
fill="none"
|
||||||
|
d="m 411.0713,270.7826 v 69.37 h -0.05 c 0,9.61 -1.91,18.77 -5.38,27.13 -3.59,8.66 -8.85,16.45 -15.38,22.98 l -10.01,-10.01 c 5.22,-5.22 9.43,-11.46 12.3,-18.39 2.77,-6.69 4.3,-14.02 4.3,-21.71 v -98.2 c -4.26,-2.47 -8.7,-4.67 -13.29,-6.57 -13.36,-5.55 -28.02,-8.61 -43.4,-8.61 -15.37,0 -30.03,3.06 -43.4,8.61 -13.86,5.74 -26.33,14.15 -36.78,24.6 -10.45,10.44 -18.86,22.91 -24.6,36.77 l 13.09,5.43 c -4.85,11.69 -7.53,24.52 -7.53,37.97 h 14.18 c 0,11.53 2.3,22.52 6.46,32.55 4.3,10.39 10.62,19.75 18.45,27.58 7.83,7.84 17.1801,14.15 27.58,18.46 10.03,4.16 21.02,6.45 32.55,6.45 11.53,0 22.52,-2.3 32.55,-6.46 10.39,-4.3 19.74,-10.61 27.5699,-18.45 7.83,-7.82 14.15,-17.17 18.46,-27.57 l 13.09,5.42 c -5.02,12.13 -12.38,23.04 -21.52,32.18 -9.14,9.14 -20.05,16.51 -32.18,21.52 -11.7,4.86 -24.52,7.54 -37.97,7.54 -13.45,0 -26.28,-2.68 -37.98,-7.54 -12.13,-5.01 -23.04,-12.38 -32.18,-21.52 -9.14,-9.14 -16.5,-20.05 -21.52,-32.18 -4.86,-11.7 -7.54,-24.52 -7.54,-37.98 h -14.17 c 0,15.38 3.06,30.04 8.61,43.41 5.74,13.86 14.16,26.33 24.6,36.77 10.45,10.45 22.92,18.86 36.78,24.6 13.37,5.55 28.03,8.61 43.4,8.61 15.38,0 30.04,-3.06 43.4,-8.61 13.86,-5.74 26.33,-14.16 36.77,-24.6 10.44,-10.44 18.86,-22.91 24.6,-36.77 5.55,-13.37 8.61,-28.03 8.61,-43.41 0,-15.37 -3.06,-30.03 -8.61,-43.4 -1.6,-3.86 -3.41,-7.62 -5.42,-11.25 v 54.65 h -14.22 v -74.88 c -1.6,-1.82 -3.25,-3.58 -4.96,-5.29 -2.93,-2.93 -6.02,-5.6999 -9.26,-8.29 v 17.55 m -70.9099,141.78 c -9.61,0 -18.77,-1.91 -27.12,-5.38 -8.66,-3.58 -16.46,-8.85 -22.99,-15.38 -6.53,-6.53 -11.79,-14.32 -15.38,-22.98 l 13.1,-5.42 c 2.87,6.93 7.0699,13.16 12.3,18.38 v 0.01 c 5.22,5.22 11.46,9.43 18.39,12.3 6.69,2.77 14.02,4.3 21.7,4.3 7.68,0 15.01,-1.53 21.7,-4.3 l 5.42,13.09 c -8.35,3.4699 -17.51,5.38 -27.12,5.38 z"
|
||||||
|
id="path30" />
|
||||||
|
<path
|
||||||
|
fill="none"
|
||||||
|
d="m 400.2813,400.2826 c 7.83,-7.82 14.15,-17.17 18.46,-27.57 l 13.09,5.42 c -5.02,12.13 -12.38,23.04 -21.52,32.18 -9.14,9.14 -20.05,16.51 -32.18,21.52 -11.7,4.86 -24.52,7.54 -37.97,7.54 -13.45,0 -26.28,-2.68 -37.98,-7.54 -12.13,-5.01 -23.04,-12.38 -32.18,-21.52 -9.14,-9.14 -16.5,-20.05 -21.52,-32.18 -4.86,-11.7 -7.54,-24.52 -7.54,-37.98 h -14.17 c 0,-15.37 3.06,-30.03 8.61,-43.4 l 13.09,5.43 c -4.85,11.69 -7.53,24.52 -7.53,37.97 h 14.18 c 0,11.53 2.3,22.52 6.46,32.55 4.3,10.39 10.62,19.75 18.45,27.58 7.83,7.84 17.1801,14.15 27.58,18.46 10.03,4.16 21.02,6.45 32.55,6.45 11.53,0 22.52,-2.3 32.55,-6.46 10.39,-4.3 19.74,-10.61 27.57,-18.45 z m -33,5.36 c -8.35,3.47 -17.5099,5.38 -27.12,5.38 -9.61,0 -18.77,-1.91 -27.12,-5.38 -8.66,-3.58 -16.46,-8.85 -22.99,-15.38 -6.53,-6.53 -11.79,-14.32 -15.38,-22.98 l 13.1,-5.42 c 2.87,6.93 7.0699,13.16 12.3,18.38 v 0.01 c 5.22,5.22 11.46,9.43 18.39,12.3 6.69,2.77 14.02,4.3 21.7,4.3 7.68,0 15.01,-1.53 21.7,-4.3 z"
|
||||||
|
id="path32" />
|
||||||
|
<path
|
||||||
|
fill="none"
|
||||||
|
d="m 418.7413,307.6026 c -2.1,-5.0601 -4.68,-9.88 -7.67,-14.4 v 46.95 h -0.05 c 0,9.61 -1.91,18.77 -5.38,27.13 -3.59,8.66 -8.85,16.45 -15.38,22.98 l -10.01,-10.01 c 5.22,-5.22 9.43,-11.46 12.3,-18.39 2.77,-6.69 4.3,-14.02 4.3,-21.71 v -63.37 c -7.08,-6.34 -15.23,-11.51 -24.14,-15.2 -10.03,-4.16 -21.02,-6.46 -32.55,-6.46 -11.53,0 -22.52,2.29 -32.55,6.45 -10.4,4.31 -19.75,10.62 -27.58,18.46 -7.83,7.83 -14.15,17.18 -18.45,27.57 -4.16,10.03 -6.46,21.02 -6.46,32.55 0,11.53 2.3,22.52 6.46,32.55 4.3,10.39 10.62,19.75 18.45,27.58 7.83,7.84 17.1801,14.15 27.58,18.46 10.03,4.16 21.02,6.45 32.55,6.45 11.53,0 22.52,-2.3 32.55,-6.46 10.39,-4.3 19.74,-10.61 27.5699,-18.45 7.83,-7.82 14.15,-17.17 18.46,-27.57 4.16,-10.03 6.46,-21.03 6.46,-32.56 1e-4,-11.53 -2.2999,-22.52 -6.4599,-32.55 z m -78.58,103.42 c -9.61,0 -18.77,-1.91 -27.12,-5.38 -8.66,-3.58 -16.46,-8.85 -22.99,-15.38 -6.53,-6.53 -11.79,-14.32 -15.38,-22.98 l 13.1,-5.42 c 2.87,6.93 7.0699,13.16 12.3,18.38 v 0.01 c 5.22,5.22 11.46,9.43 18.39,12.3 6.69,2.77 14.02,4.3 21.7,4.3 7.68,0 15.01,-1.53 21.7,-4.3 l 5.42,13.09 c -8.35,3.4699 -17.51,5.38 -27.12,5.38 z"
|
||||||
|
id="path34" />
|
||||||
|
<path
|
||||||
|
fill="none"
|
||||||
|
d="m 425.2913,340.1526 v -50.97 c -4.01,-6.69 -8.79,-12.86 -14.22,-18.4 v 69.37 h -0.05 c 0,9.61 -1.91,18.77 -5.38,27.13 -3.59,8.66 -8.85,16.45 -15.38,22.98 l -10.01,-10.01 c 5.22,-5.22 9.43,-11.46 12.3,-18.39 2.77,-6.69 4.3,-14.02 4.3,-21.71 v -81.42 c -5.81,-4.06 -12.08,-7.5 -18.72,-10.25 -11.7,-4.86 -24.52,-7.54 -37.97,-7.54 -13.45,0 -26.28,2.68 -37.98,7.54 -12.13,5.02 -23.04,12.38 -32.18,21.52 -9.14,9.14 -16.5,20.05 -21.53,32.18 -4.85,11.69 -7.53,24.52 -7.53,37.97 h 14.18 c 0,11.53 2.3,22.52 6.46,32.55 4.3,10.39 10.62,19.75 18.45,27.58 7.83,7.84 17.1801,14.15 27.58,18.46 10.03,4.16 21.02,6.45 32.55,6.45 11.53,0 22.52,-2.3 32.55,-6.46 10.39,-4.3 19.74,-10.61 27.5699,-18.45 7.83,-7.82 14.15,-17.17 18.46,-27.57 l 13.09,5.42 c 4.86,-11.7 7.54,-24.52 7.54,-37.98 z m -85.13,70.87 c -9.61,0 -18.77,-1.91 -27.12,-5.38 -8.66,-3.58 -16.46,-8.85 -22.99,-15.38 -6.53,-6.53 -11.79,-14.32 -15.38,-22.98 l 13.1,-5.42 c 2.87,6.93 7.0699,13.16 12.3,18.38 v 0.01 c 5.22,5.22 11.46,9.43 18.39,12.3 6.69,2.77 14.02,4.3 21.7,4.3 7.68,0 15.01,-1.53 21.7,-4.3 l 5.42,13.09 c -8.35,3.4699 -17.51,5.38 -27.12,5.38 z"
|
||||||
|
id="path36" />
|
||||||
|
<path
|
||||||
|
fill="none"
|
||||||
|
d="m 411.0713,270.7826 v 69.37 h -0.05 c 0,9.61 -1.91,18.77 -5.38,27.13 -3.59,8.66 -8.85,16.45 -15.38,22.98 l -10.01,-10.01 c 5.22,-5.22 9.43,-11.46 12.3,-18.39 2.77,-6.69 4.3,-14.02 4.3,-21.71 v -98.2 c -4.26,-2.47 -8.7,-4.67 -13.29,-6.57 -13.36,-5.55 -28.02,-8.61 -43.4,-8.61 -15.37,0 -30.03,3.06 -43.4,8.61 -13.86,5.74 -26.33,14.15 -36.78,24.6 -10.45,10.44 -18.86,22.91 -24.6,36.77 l 13.09,5.43 c -4.85,11.69 -7.53,24.52 -7.53,37.97 h 14.18 c 0,11.53 2.3,22.52 6.46,32.55 4.3,10.39 10.62,19.75 18.45,27.58 7.83,7.84 17.1801,14.15 27.58,18.46 10.03,4.16 21.02,6.45 32.55,6.45 11.53,0 22.52,-2.3 32.55,-6.46 10.39,-4.3 19.74,-10.61 27.5699,-18.45 7.83,-7.82 14.15,-17.17 18.46,-27.57 l 13.09,5.42 c -5.02,12.13 -12.38,23.04 -21.52,32.18 -9.14,9.14 -20.05,16.51 -32.18,21.52 -11.7,4.86 -24.52,7.54 -37.97,7.54 -13.45,0 -26.28,-2.68 -37.98,-7.54 -12.13,-5.01 -23.04,-12.38 -32.18,-21.52 -9.14,-9.14 -16.5,-20.05 -21.52,-32.18 -4.86,-11.7 -7.54,-24.52 -7.54,-37.98 h -14.17 c 0,15.38 3.06,30.04 8.61,43.41 5.74,13.86 14.16,26.33 24.6,36.77 10.45,10.45 22.92,18.86 36.78,24.6 13.37,5.55 28.03,8.61 43.4,8.61 15.38,0 30.04,-3.06 43.4,-8.61 13.86,-5.74 26.33,-14.16 36.77,-24.6 10.44,-10.44 18.86,-22.91 24.6,-36.77 5.55,-13.37 8.61,-28.03 8.61,-43.41 0,-15.37 -3.06,-30.03 -8.61,-43.4 -1.6,-3.86 -3.41,-7.62 -5.42,-11.25 v 54.65 h -14.22 v -74.88 c -1.6,-1.82 -3.25,-3.58 -4.96,-5.29 -2.93,-2.93 -6.02,-5.6999 -9.26,-8.29 v 17.55 m -70.9099,141.78 c -9.61,0 -18.77,-1.91 -27.12,-5.38 -8.66,-3.58 -16.46,-8.85 -22.99,-15.38 -6.53,-6.53 -11.79,-14.32 -15.38,-22.98 l 13.1,-5.42 c 2.87,6.93 7.0699,13.16 12.3,18.38 v 0.01 c 5.22,5.22 11.46,9.43 18.39,12.3 6.69,2.77 14.02,4.3 21.7,4.3 7.68,0 15.01,-1.53 21.7,-4.3 l 5.42,13.09 c -8.35,3.4699 -17.51,5.38 -27.12,5.38 z"
|
||||||
|
id="path38" />
|
||||||
|
</g></svg>
|
After Width: | Height: | Size: 21 KiB |
BIN
resources/profiles/Jubilee/Jubilee_thumbnail.png
Normal file
BIN
resources/profiles/Jubilee/Jubilee_thumbnail.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 38 KiB |
@ -1,4 +1,5 @@
|
|||||||
min_slic3r_version = 2.4.0-rc
|
min_slic3r_version = 2.4.0-rc
|
||||||
|
1.4.2 Added SLA material profiles.
|
||||||
1.4.1 Updated firmware version.
|
1.4.1 Updated firmware version.
|
||||||
1.4.0 Updated for the PrusaSlicer 2.4.0-rc release. Updated SLA material colors.
|
1.4.0 Updated for the PrusaSlicer 2.4.0-rc release. Updated SLA material colors.
|
||||||
min_slic3r_version = 2.4.0-beta2
|
min_slic3r_version = 2.4.0-beta2
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
name = Prusa Research
|
name = Prusa Research
|
||||||
# Configuration version of this file. Config file will only be installed, if the config_version differs.
|
# Configuration version of this file. Config file will only be installed, if the config_version differs.
|
||||||
# This means, the server may force the PrusaSlicer configuration to be downgraded.
|
# This means, the server may force the PrusaSlicer configuration to be downgraded.
|
||||||
config_version = 1.4.1
|
config_version = 1.4.2
|
||||||
# Where to get the updates from?
|
# Where to get the updates from?
|
||||||
config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/PrusaResearch/
|
config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/PrusaResearch/
|
||||||
changelog_url = https://files.prusa3d.com/?latest=slicer-profiles&lng=%1%
|
changelog_url = https://files.prusa3d.com/?latest=slicer-profiles&lng=%1%
|
||||||
@ -4875,6 +4875,30 @@ material_type = Tough
|
|||||||
material_vendor = Prusa Polymers
|
material_vendor = Prusa Polymers
|
||||||
material_colour = #F9DB4C
|
material_colour = #F9DB4C
|
||||||
|
|
||||||
|
[sla_material:Prusament Resin Tough Transparent Green @0.025]
|
||||||
|
inherits = *common 0.025*
|
||||||
|
exposure_time = 5
|
||||||
|
initial_exposure_time = 35
|
||||||
|
material_type = Tough
|
||||||
|
material_vendor = Prusa Polymers
|
||||||
|
material_colour = #1DAf5E
|
||||||
|
|
||||||
|
[sla_material:Prusament Resin Tough Transparent Red @0.025]
|
||||||
|
inherits = *common 0.025*
|
||||||
|
exposure_time = 6
|
||||||
|
initial_exposure_time = 35
|
||||||
|
material_type = Tough
|
||||||
|
material_vendor = Prusa Polymers
|
||||||
|
material_colour = #D21B31
|
||||||
|
|
||||||
|
[sla_material:Prusament Resin Tough Transparent Amber @0.025]
|
||||||
|
inherits = *common 0.025*
|
||||||
|
exposure_time = 5
|
||||||
|
initial_exposure_time = 35
|
||||||
|
material_type = Tough
|
||||||
|
material_vendor = Prusa Polymers
|
||||||
|
material_colour = #FCB30E
|
||||||
|
|
||||||
## Prusa 0.025
|
## Prusa 0.025
|
||||||
|
|
||||||
[sla_material:Prusa Orange Tough @0.025]
|
[sla_material:Prusa Orange Tough @0.025]
|
||||||
@ -5052,6 +5076,14 @@ material_type = Casting
|
|||||||
material_vendor = Made for Prusa
|
material_vendor = Made for Prusa
|
||||||
material_colour = #FFFF6F
|
material_colour = #FFFF6F
|
||||||
|
|
||||||
|
[sla_material:Ameralabs TGM-7 LED @0.025]
|
||||||
|
inherits = *common 0.025*
|
||||||
|
exposure_time = 4
|
||||||
|
initial_exposure_time = 35
|
||||||
|
material_type = Tough
|
||||||
|
material_vendor = Ameralabs
|
||||||
|
material_colour = #C0C0C0
|
||||||
|
|
||||||
[sla_material:Siraya Tech Simple Clear @0.025]
|
[sla_material:Siraya Tech Simple Clear @0.025]
|
||||||
inherits = *common 0.025*
|
inherits = *common 0.025*
|
||||||
exposure_time = 8
|
exposure_time = 8
|
||||||
@ -5190,6 +5222,14 @@ material_type = Tough
|
|||||||
material_vendor = Asiga
|
material_vendor = Asiga
|
||||||
material_colour = #C0C0C0
|
material_colour = #C0C0C0
|
||||||
|
|
||||||
|
[sla_material:Ameralabs TGM-7 LED @0.05]
|
||||||
|
inherits = *common 0.05*
|
||||||
|
exposure_time = 7
|
||||||
|
initial_exposure_time = 35
|
||||||
|
material_type = Tough
|
||||||
|
material_vendor = Ameralabs
|
||||||
|
material_colour = #C0C0C0
|
||||||
|
|
||||||
[sla_material:Ameralabs AMD 3 LED @0.05]
|
[sla_material:Ameralabs AMD 3 LED @0.05]
|
||||||
inherits = *common 0.05*
|
inherits = *common 0.05*
|
||||||
exposure_time = 5
|
exposure_time = 5
|
||||||
@ -5728,6 +5768,30 @@ material_type = Tough
|
|||||||
material_vendor = Prusa Polymers
|
material_vendor = Prusa Polymers
|
||||||
material_colour = #F9DB4C
|
material_colour = #F9DB4C
|
||||||
|
|
||||||
|
[sla_material:Prusament Resin Tough Transparent Green @0.05]
|
||||||
|
inherits = *common 0.05*
|
||||||
|
exposure_time = 6
|
||||||
|
initial_exposure_time = 35
|
||||||
|
material_type = Tough
|
||||||
|
material_vendor = Prusa Polymers
|
||||||
|
material_colour = #1DAf5E
|
||||||
|
|
||||||
|
[sla_material:Prusament Resin Tough Transparent Red @0.05]
|
||||||
|
inherits = *common 0.05*
|
||||||
|
exposure_time = 8
|
||||||
|
initial_exposure_time = 35
|
||||||
|
material_type = Tough
|
||||||
|
material_vendor = Prusa Polymers
|
||||||
|
material_colour = #D21B31
|
||||||
|
|
||||||
|
[sla_material:Prusament Resin Tough Transparent Amber @0.05]
|
||||||
|
inherits = *common 0.05*
|
||||||
|
exposure_time = 6
|
||||||
|
initial_exposure_time = 35
|
||||||
|
material_type = Tough
|
||||||
|
material_vendor = Prusa Polymers
|
||||||
|
material_colour = #FCB30E
|
||||||
|
|
||||||
## Prusa 0.05
|
## Prusa 0.05
|
||||||
|
|
||||||
[sla_material:Prusa Beige Tough @0.05]
|
[sla_material:Prusa Beige Tough @0.05]
|
||||||
@ -6018,6 +6082,14 @@ material_type = Tough
|
|||||||
material_vendor = BlueCast
|
material_vendor = BlueCast
|
||||||
material_colour = #FFEEE6
|
material_colour = #FFEEE6
|
||||||
|
|
||||||
|
[sla_material:Ameralabs TGM-7 LED @0.1]
|
||||||
|
inherits = *common 0.1*
|
||||||
|
exposure_time = 10
|
||||||
|
initial_exposure_time = 45
|
||||||
|
material_type = Tough
|
||||||
|
material_vendor = Ameralabs
|
||||||
|
material_colour = #C0C0C0
|
||||||
|
|
||||||
## Prusa Polymers 0.1
|
## Prusa Polymers 0.1
|
||||||
|
|
||||||
[sla_material:Prusament Resin Tough Prusa Orange @0.1]
|
[sla_material:Prusament Resin Tough Prusa Orange @0.1]
|
||||||
@ -6084,6 +6156,30 @@ material_type = Tough
|
|||||||
material_vendor = Prusa Polymers
|
material_vendor = Prusa Polymers
|
||||||
material_colour = #F9DB4C
|
material_colour = #F9DB4C
|
||||||
|
|
||||||
|
[sla_material:Prusament Resin Tough Transparent Green @0.1]
|
||||||
|
inherits = *common 0.1*
|
||||||
|
exposure_time = 13
|
||||||
|
initial_exposure_time = 45
|
||||||
|
material_type = Tough
|
||||||
|
material_vendor = Prusa Polymers
|
||||||
|
material_colour = #1DAf5E
|
||||||
|
|
||||||
|
[sla_material:Prusament Resin Tough Transparent Red @0.1]
|
||||||
|
inherits = *common 0.1*
|
||||||
|
exposure_time = 13
|
||||||
|
initial_exposure_time = 45
|
||||||
|
material_type = Tough
|
||||||
|
material_vendor = Prusa Polymers
|
||||||
|
material_colour = #D21B31
|
||||||
|
|
||||||
|
[sla_material:Prusament Resin Tough Transparent Amber @0.1]
|
||||||
|
inherits = *common 0.1*
|
||||||
|
exposure_time = 13
|
||||||
|
initial_exposure_time = 45
|
||||||
|
material_type = Tough
|
||||||
|
material_vendor = Prusa Polymers
|
||||||
|
material_colour = #FCB30E
|
||||||
|
|
||||||
## Prusa 0.1
|
## Prusa 0.1
|
||||||
|
|
||||||
[sla_material:Prusa Orange Tough @0.1]
|
[sla_material:Prusa Orange Tough @0.1]
|
||||||
@ -6244,6 +6340,30 @@ material_type = Tough
|
|||||||
material_vendor = Prusa Polymers
|
material_vendor = Prusa Polymers
|
||||||
material_colour = #F9DB4C
|
material_colour = #F9DB4C
|
||||||
|
|
||||||
|
[sla_material:Prusament Resin Tough Transparent Green @0.025 SL1S]
|
||||||
|
inherits = *0.025_sl1s*
|
||||||
|
exposure_time = 1.8
|
||||||
|
initial_exposure_time = 25
|
||||||
|
material_type = Tough
|
||||||
|
material_vendor = Prusa Polymers
|
||||||
|
material_colour = #1DAf5E
|
||||||
|
|
||||||
|
[sla_material:Prusament Resin Tough Transparent Red @0.025 SL1S]
|
||||||
|
inherits = *0.025_sl1s*
|
||||||
|
exposure_time = 2
|
||||||
|
initial_exposure_time = 25
|
||||||
|
material_type = Tough
|
||||||
|
material_vendor = Prusa Polymers
|
||||||
|
material_colour = #D21B31
|
||||||
|
|
||||||
|
[sla_material:Prusament Resin Tough Transparent Amber @0.025 SL1S]
|
||||||
|
inherits = *0.025_sl1s*
|
||||||
|
exposure_time = 1.8
|
||||||
|
initial_exposure_time = 25
|
||||||
|
material_type = Tough
|
||||||
|
material_vendor = Prusa Polymers
|
||||||
|
material_colour = #FCB30E
|
||||||
|
|
||||||
## Made for Prusa 0.025
|
## Made for Prusa 0.025
|
||||||
|
|
||||||
[sla_material:Prusa Orange Tough @0.025 SL1S]
|
[sla_material:Prusa Orange Tough @0.025 SL1S]
|
||||||
@ -6366,6 +6486,15 @@ material_type = Casting
|
|||||||
material_vendor = Made for Prusa
|
material_vendor = Made for Prusa
|
||||||
material_colour = #00B900
|
material_colour = #00B900
|
||||||
|
|
||||||
|
[sla_material:Ameralabs TGM-7 LED @0.025 SL1S]
|
||||||
|
inherits = *0.025_sl1s*
|
||||||
|
exposure_time = 1.8
|
||||||
|
initial_exposure_time = 25
|
||||||
|
material_type = Tough
|
||||||
|
material_vendor = Ameralabs
|
||||||
|
material_colour = #C0C0C0
|
||||||
|
material_print_speed = slow
|
||||||
|
|
||||||
[sla_material:PrimaCreator Tough Light Grey @0.025 SL1S]
|
[sla_material:PrimaCreator Tough Light Grey @0.025 SL1S]
|
||||||
inherits = *0.025_sl1s*
|
inherits = *0.025_sl1s*
|
||||||
exposure_time = 1.8
|
exposure_time = 1.8
|
||||||
@ -6413,6 +6542,7 @@ initial_exposure_time = 15
|
|||||||
material_type = Dental
|
material_type = Dental
|
||||||
material_vendor = DruckWege
|
material_vendor = DruckWege
|
||||||
material_colour = #FFEEE6
|
material_colour = #FFEEE6
|
||||||
|
material_print_speed = slow
|
||||||
|
|
||||||
[sla_material:DruckWege Type D Standard White @0.025 SL1S]
|
[sla_material:DruckWege Type D Standard White @0.025 SL1S]
|
||||||
inherits = *0.025_sl1s*
|
inherits = *0.025_sl1s*
|
||||||
@ -6421,6 +6551,7 @@ initial_exposure_time = 15
|
|||||||
material_type = Tough
|
material_type = Tough
|
||||||
material_vendor = DruckWege
|
material_vendor = DruckWege
|
||||||
material_colour = #FFFFFF
|
material_colour = #FFFFFF
|
||||||
|
material_print_speed = slow
|
||||||
|
|
||||||
[sla_material:DruckWege Type D Standard Pigmentfrei Clear @0.025 SL1S]
|
[sla_material:DruckWege Type D Standard Pigmentfrei Clear @0.025 SL1S]
|
||||||
inherits = *0.025_sl1s*
|
inherits = *0.025_sl1s*
|
||||||
@ -6429,6 +6560,7 @@ initial_exposure_time = 15
|
|||||||
material_type = Tough
|
material_type = Tough
|
||||||
material_vendor = DruckWege
|
material_vendor = DruckWege
|
||||||
material_colour = #F8F8F8
|
material_colour = #F8F8F8
|
||||||
|
material_print_speed = slow
|
||||||
|
|
||||||
[sla_material:3DM-ABS Orange @0.025 SL1S]
|
[sla_material:3DM-ABS Orange @0.025 SL1S]
|
||||||
inherits = *0.025_sl1s*
|
inherits = *0.025_sl1s*
|
||||||
@ -6530,6 +6662,30 @@ material_type = Tough
|
|||||||
material_vendor = Prusa Polymers
|
material_vendor = Prusa Polymers
|
||||||
material_colour = #F9DB4C
|
material_colour = #F9DB4C
|
||||||
|
|
||||||
|
[sla_material:Prusament Resin Tough Transparent Green @0.05 SL1S]
|
||||||
|
inherits = *0.05_sl1s*
|
||||||
|
exposure_time = 2
|
||||||
|
initial_exposure_time = 25
|
||||||
|
material_type = Tough
|
||||||
|
material_vendor = Prusa Polymers
|
||||||
|
material_colour = #1DAf5E
|
||||||
|
|
||||||
|
[sla_material:Prusament Resin Tough Transparent Red @0.05 SL1S]
|
||||||
|
inherits = *0.05_sl1s*
|
||||||
|
exposure_time = 2.6
|
||||||
|
initial_exposure_time = 25
|
||||||
|
material_type = Tough
|
||||||
|
material_vendor = Prusa Polymers
|
||||||
|
material_colour = #D21B31
|
||||||
|
|
||||||
|
[sla_material:Prusament Resin Tough Transparent Amber @0.05 SL1S]
|
||||||
|
inherits = *0.05_sl1s*
|
||||||
|
exposure_time = 2.6
|
||||||
|
initial_exposure_time = 25
|
||||||
|
material_type = Tough
|
||||||
|
material_vendor = Prusa Polymers
|
||||||
|
material_colour = #FCB30E
|
||||||
|
|
||||||
## Made for Prusa 0.05
|
## Made for Prusa 0.05
|
||||||
|
|
||||||
[sla_material:Prusa Orange Tough @0.05 SL1S]
|
[sla_material:Prusa Orange Tough @0.05 SL1S]
|
||||||
@ -6652,6 +6808,15 @@ material_type = Casting
|
|||||||
material_vendor = Made for Prusa
|
material_vendor = Made for Prusa
|
||||||
material_colour = #00B900
|
material_colour = #00B900
|
||||||
|
|
||||||
|
[sla_material:Ameralabs TGM-7 LED @0.05 SL1S]
|
||||||
|
inherits = *0.05_sl1s*
|
||||||
|
exposure_time = 2
|
||||||
|
initial_exposure_time = 25
|
||||||
|
material_type = Tough
|
||||||
|
material_vendor = Ameralabs
|
||||||
|
material_colour = #C0C0C0
|
||||||
|
material_print_speed = slow
|
||||||
|
|
||||||
[sla_material:PrimaCreator Tough Light Grey @0.05 SL1S]
|
[sla_material:PrimaCreator Tough Light Grey @0.05 SL1S]
|
||||||
inherits = *0.05_sl1s*
|
inherits = *0.05_sl1s*
|
||||||
exposure_time = 2.4
|
exposure_time = 2.4
|
||||||
@ -6699,6 +6864,7 @@ initial_exposure_time = 15
|
|||||||
material_type = Dental
|
material_type = Dental
|
||||||
material_vendor = DruckWege
|
material_vendor = DruckWege
|
||||||
material_colour = #FFEEE6
|
material_colour = #FFEEE6
|
||||||
|
material_print_speed = slow
|
||||||
|
|
||||||
[sla_material:DruckWege Type D Standard White @0.05 SL1S]
|
[sla_material:DruckWege Type D Standard White @0.05 SL1S]
|
||||||
inherits = *0.05_sl1s*
|
inherits = *0.05_sl1s*
|
||||||
@ -6707,6 +6873,7 @@ initial_exposure_time = 15
|
|||||||
material_type = Tough
|
material_type = Tough
|
||||||
material_vendor = DruckWege
|
material_vendor = DruckWege
|
||||||
material_colour = #FFFFFF
|
material_colour = #FFFFFF
|
||||||
|
material_print_speed = slow
|
||||||
|
|
||||||
[sla_material:DruckWege Type D Standard Pigmentfrei Clear @0.05 SL1S]
|
[sla_material:DruckWege Type D Standard Pigmentfrei Clear @0.05 SL1S]
|
||||||
inherits = *0.05_sl1s*
|
inherits = *0.05_sl1s*
|
||||||
@ -6715,6 +6882,7 @@ initial_exposure_time = 15
|
|||||||
material_type = Tough
|
material_type = Tough
|
||||||
material_vendor = DruckWege
|
material_vendor = DruckWege
|
||||||
material_colour = #F8F8F8
|
material_colour = #F8F8F8
|
||||||
|
material_print_speed = slow
|
||||||
|
|
||||||
[sla_material:3DM-ABS Orange @0.05 SL1S]
|
[sla_material:3DM-ABS Orange @0.05 SL1S]
|
||||||
inherits = *0.05_sl1s*
|
inherits = *0.05_sl1s*
|
||||||
@ -6816,6 +6984,30 @@ material_type = Tough
|
|||||||
material_vendor = Prusa Polymers
|
material_vendor = Prusa Polymers
|
||||||
material_colour = #F9DB4C
|
material_colour = #F9DB4C
|
||||||
|
|
||||||
|
[sla_material:Prusament Resin Tough Transparent Green @0.1 SL1S]
|
||||||
|
inherits = *0.1_sl1s*
|
||||||
|
exposure_time = 2.6
|
||||||
|
initial_exposure_time = 25
|
||||||
|
material_type = Tough
|
||||||
|
material_vendor = Prusa Polymers
|
||||||
|
material_colour = #1DAf5E
|
||||||
|
|
||||||
|
[sla_material:Prusament Resin Tough Transparent Red @0.1 SL1S]
|
||||||
|
inherits = *0.1_sl1s*
|
||||||
|
exposure_time = 3
|
||||||
|
initial_exposure_time = 25
|
||||||
|
material_type = Tough
|
||||||
|
material_vendor = Prusa Polymers
|
||||||
|
material_colour = #D21B31
|
||||||
|
|
||||||
|
[sla_material:Prusament Resin Tough Transparent Amber @0.1 SL1S]
|
||||||
|
inherits = *0.1_sl1s*
|
||||||
|
exposure_time = 3.6
|
||||||
|
initial_exposure_time = 25
|
||||||
|
material_type = Tough
|
||||||
|
material_vendor = Prusa Polymers
|
||||||
|
material_colour = #FCB30E
|
||||||
|
|
||||||
## Made for Prusa 0.1
|
## Made for Prusa 0.1
|
||||||
|
|
||||||
[sla_material:Prusa Orange Tough @0.1 SL1S]
|
[sla_material:Prusa Orange Tough @0.1 SL1S]
|
||||||
@ -6938,6 +7130,15 @@ material_type = Casting
|
|||||||
material_vendor = Made for Prusa
|
material_vendor = Made for Prusa
|
||||||
material_colour = #00B900
|
material_colour = #00B900
|
||||||
|
|
||||||
|
[sla_material:Ameralabs TGM-7 LED @0.1 SL1S]
|
||||||
|
inherits = *0.1_sl1s*
|
||||||
|
exposure_time = 2.6
|
||||||
|
initial_exposure_time = 25
|
||||||
|
material_type = Tough
|
||||||
|
material_vendor = Ameralabs
|
||||||
|
material_colour = #C0C0C0
|
||||||
|
material_print_speed = slow
|
||||||
|
|
||||||
[sla_material:PrimaCreator Tough Light Grey @0.1 SL1S]
|
[sla_material:PrimaCreator Tough Light Grey @0.1 SL1S]
|
||||||
inherits = *0.1_sl1s*
|
inherits = *0.1_sl1s*
|
||||||
exposure_time = 3
|
exposure_time = 3
|
||||||
@ -6985,6 +7186,7 @@ initial_exposure_time = 15
|
|||||||
material_type = Dental
|
material_type = Dental
|
||||||
material_vendor = DruckWege
|
material_vendor = DruckWege
|
||||||
material_colour = #FFEEE6
|
material_colour = #FFEEE6
|
||||||
|
material_print_speed = slow
|
||||||
|
|
||||||
[sla_material:3DM-ABS Orange @0.1 SL1S]
|
[sla_material:3DM-ABS Orange @0.1 SL1S]
|
||||||
inherits = *0.1_sl1s*
|
inherits = *0.1_sl1s*
|
||||||
@ -7695,7 +7897,7 @@ retract_lift_below = 179
|
|||||||
retract_layer_change = 1
|
retract_layer_change = 1
|
||||||
silent_mode = 0
|
silent_mode = 0
|
||||||
remaining_times = 1
|
remaining_times = 1
|
||||||
start_gcode = G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S170 ; set extruder temp for bed leveling\nM140 S[first_layer_bed_temperature] ; set bed temp\nM109 R170 ; wait for bed leveling temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM204 T1250 ; set travel acceleration\nG28 ; home all without mesh bed level\nG29 ; mesh bed leveling \nM204 T[machine_max_acceleration_travel] ; restore travel acceleration\nM104 S[first_layer_temperature] ; set extruder temp\nG92 E0\nG1 Y-2 X179 F2400\nG1 Z3 F720\nM109 S[first_layer_temperature] ; wait for extruder temp\n\n; intro line\nG1 X170 F1000\nG1 Z0.2 F720\nG1 X110 E8 F900\nG1 X40 E10 F700\nG92 E0\n\nM221 S95 ; set flow
|
start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S170 ; set extruder temp for bed leveling\nM140 S[first_layer_bed_temperature] ; set bed temp\nM109 R170 ; wait for bed leveling temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM204 T1250 ; set travel acceleration\nG28 ; home all without mesh bed level\nG29 ; mesh bed leveling \nM204 T[machine_max_acceleration_travel] ; restore travel acceleration\nM104 S[first_layer_temperature] ; set extruder temp\nG92 E0\nG1 Y-2 X179 F2400\nG1 Z3 F720\nM109 S[first_layer_temperature] ; wait for extruder temp\n\n; intro line\nG1 X170 F1000\nG1 Z0.2 F720\nG1 X110 E8 F900\nG1 X40 E10 F700\nG92 E0\n\nM221 S95 ; set flow
|
||||||
end_gcode = G1 E-1 F2100 ; retract\n{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+2, max_print_height)} F720 ; Move print head up{endif}\nG1 X178 Y178 F4200 ; park print head\n{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+30, max_print_height)} F720 ; Move print head further up{endif}\nG4 ; wait\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nM221 S100 ; reset flow\nM900 K0 ; reset LA\nM84 ; disable motors
|
end_gcode = G1 E-1 F2100 ; retract\n{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+2, max_print_height)} F720 ; Move print head up{endif}\nG1 X178 Y178 F4200 ; park print head\n{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+30, max_print_height)} F720 ; Move print head further up{endif}\nG4 ; wait\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nM221 S100 ; reset flow\nM900 K0 ; reset LA\nM84 ; disable motors
|
||||||
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_PRUSA3D\nPRINTER_MODEL_MINI\n
|
printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_MINI\n
|
||||||
extruder_colour =
|
extruder_colour =
|
||||||
@ -7712,7 +7914,7 @@ default_print_profile = 0.10mm DETAIL @0.25 nozzle MINI
|
|||||||
retract_length = 3
|
retract_length = 3
|
||||||
retract_lift = 0.15
|
retract_lift = 0.15
|
||||||
retract_before_travel = 1
|
retract_before_travel = 1
|
||||||
start_gcode = G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S170 ; set extruder temp for bed leveling\nM140 S[first_layer_bed_temperature] ; set bed temp\nM109 R170 ; wait for bed leveling temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM204 T1250 ; set travel acceleration\nG28 ; home all without mesh bed level\nG29 ; mesh bed leveling \nM204 T[machine_max_acceleration_travel] ; restore travel acceleration\nM104 S[first_layer_temperature] ; set extruder temp\nG92 E0\nG1 Y-2 X179 F2400\nG1 Z3 F720\nM109 S[first_layer_temperature] ; wait for extruder temp\n\n; intro line\nG1 X170 F1000\nG1 Z0.2 F720\nG1 X110 E8 F600\nG1 X40 E10 F400\nG92 E0\n\nM221 S95 ; set flow
|
start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S170 ; set extruder temp for bed leveling\nM140 S[first_layer_bed_temperature] ; set bed temp\nM109 R170 ; wait for bed leveling temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM204 T1250 ; set travel acceleration\nG28 ; home all without mesh bed level\nG29 ; mesh bed leveling \nM204 T[machine_max_acceleration_travel] ; restore travel acceleration\nM104 S[first_layer_temperature] ; set extruder temp\nG92 E0\nG1 Y-2 X179 F2400\nG1 Z3 F720\nM109 S[first_layer_temperature] ; wait for extruder temp\n\n; intro line\nG1 X170 F1000\nG1 Z0.2 F720\nG1 X110 E8 F600\nG1 X40 E10 F400\nG92 E0\n\nM221 S95 ; set flow
|
||||||
|
|
||||||
[printer:Original Prusa MINI & MINI+ 0.6 nozzle]
|
[printer:Original Prusa MINI & MINI+ 0.6 nozzle]
|
||||||
inherits = Original Prusa MINI & MINI+
|
inherits = Original Prusa MINI & MINI+
|
||||||
|
@ -73,7 +73,7 @@ std::string escape_strings_cstyle(const std::vector<std::string> &strs)
|
|||||||
bool should_quote = strs.size() == 1 && str.empty();
|
bool should_quote = strs.size() == 1 && str.empty();
|
||||||
for (size_t i = 0; i < str.size(); ++ i) {
|
for (size_t i = 0; i < str.size(); ++ i) {
|
||||||
char c = str[i];
|
char c = str[i];
|
||||||
if (c == ' ' || c == '\t' || c == '\\' || c == '"' || c == '\r' || c == '\n') {
|
if (c == ' ' || c == ';' || c == '\t' || c == '\\' || c == '"' || c == '\r' || c == '\n') {
|
||||||
should_quote = true;
|
should_quote = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -2129,13 +2129,13 @@ GCode::LayerResult GCode::process_layer(
|
|||||||
// add tag for processor
|
// add tag for processor
|
||||||
gcode += ";" + GCodeProcessor::reserved_tag(GCodeProcessor::ETags::Layer_Change) + "\n";
|
gcode += ";" + GCodeProcessor::reserved_tag(GCodeProcessor::ETags::Layer_Change) + "\n";
|
||||||
// export layer z
|
// export layer z
|
||||||
char buf[64];
|
gcode += std::string(";Z:") + float_to_string_decimal_point(print_z) + "\n";
|
||||||
sprintf(buf, ";Z:%g\n", print_z);
|
|
||||||
gcode += buf;
|
|
||||||
// export layer height
|
// export layer height
|
||||||
float height = first_layer ? static_cast<float>(print_z) : static_cast<float>(print_z) - m_last_layer_z;
|
float height = first_layer ? static_cast<float>(print_z) : static_cast<float>(print_z) - m_last_layer_z;
|
||||||
sprintf(buf, ";%s%g\n", GCodeProcessor::reserved_tag(GCodeProcessor::ETags::Height).c_str(), height);
|
gcode += std::string(";") + GCodeProcessor::reserved_tag(GCodeProcessor::ETags::Height)
|
||||||
gcode += buf;
|
+ float_to_string_decimal_point(height) + "\n";
|
||||||
|
|
||||||
// update caches
|
// update caches
|
||||||
m_last_layer_z = static_cast<float>(print_z);
|
m_last_layer_z = static_cast<float>(print_z);
|
||||||
m_max_layer_z = std::max(m_max_layer_z, m_last_layer_z);
|
m_max_layer_z = std::max(m_max_layer_z, m_last_layer_z);
|
||||||
@ -3002,33 +3002,34 @@ std::string GCode::_extrude(const ExtrusionPath &path, std::string description,
|
|||||||
// PrusaMultiMaterial::Writer may generate GCodeProcessor::Height_Tag lines without updating m_last_height
|
// PrusaMultiMaterial::Writer may generate GCodeProcessor::Height_Tag lines without updating m_last_height
|
||||||
// so, if the last role was erWipeTower we force export of GCodeProcessor::Height_Tag lines
|
// so, if the last role was erWipeTower we force export of GCodeProcessor::Height_Tag lines
|
||||||
bool last_was_wipe_tower = (m_last_processor_extrusion_role == erWipeTower);
|
bool last_was_wipe_tower = (m_last_processor_extrusion_role == erWipeTower);
|
||||||
char buf[64];
|
|
||||||
assert(is_decimal_separator_point());
|
assert(is_decimal_separator_point());
|
||||||
|
|
||||||
if (path.role() != m_last_processor_extrusion_role) {
|
if (path.role() != m_last_processor_extrusion_role) {
|
||||||
m_last_processor_extrusion_role = path.role();
|
m_last_processor_extrusion_role = path.role();
|
||||||
|
char buf[64];
|
||||||
sprintf(buf, ";%s%s\n", GCodeProcessor::reserved_tag(GCodeProcessor::ETags::Role).c_str(), ExtrusionEntity::role_to_string(m_last_processor_extrusion_role).c_str());
|
sprintf(buf, ";%s%s\n", GCodeProcessor::reserved_tag(GCodeProcessor::ETags::Role).c_str(), ExtrusionEntity::role_to_string(m_last_processor_extrusion_role).c_str());
|
||||||
gcode += buf;
|
gcode += buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (last_was_wipe_tower || m_last_width != path.width) {
|
if (last_was_wipe_tower || m_last_width != path.width) {
|
||||||
m_last_width = path.width;
|
m_last_width = path.width;
|
||||||
sprintf(buf, ";%s%g\n", GCodeProcessor::reserved_tag(GCodeProcessor::ETags::Width).c_str(), m_last_width);
|
gcode += std::string(";") + GCodeProcessor::reserved_tag(GCodeProcessor::ETags::Width)
|
||||||
gcode += buf;
|
+ float_to_string_decimal_point(m_last_width) + "\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
#if ENABLE_GCODE_VIEWER_DATA_CHECKING
|
#if ENABLE_GCODE_VIEWER_DATA_CHECKING
|
||||||
if (last_was_wipe_tower || (m_last_mm3_per_mm != path.mm3_per_mm)) {
|
if (last_was_wipe_tower || (m_last_mm3_per_mm != path.mm3_per_mm)) {
|
||||||
m_last_mm3_per_mm = path.mm3_per_mm;
|
m_last_mm3_per_mm = path.mm3_per_mm;
|
||||||
sprintf(buf, ";%s%f\n", GCodeProcessor::Mm3_Per_Mm_Tag.c_str(), m_last_mm3_per_mm);
|
gcode += std::string(";") + GCodeProcessor::Mm3_Per_Mm_Tag
|
||||||
gcode += buf;
|
+ float_to_string_decimal_point(m_last_mm3_per_mm) + "\n";
|
||||||
}
|
}
|
||||||
#endif // ENABLE_GCODE_VIEWER_DATA_CHECKING
|
#endif // ENABLE_GCODE_VIEWER_DATA_CHECKING
|
||||||
|
|
||||||
if (last_was_wipe_tower || std::abs(m_last_height - path.height) > EPSILON) {
|
if (last_was_wipe_tower || std::abs(m_last_height - path.height) > EPSILON) {
|
||||||
m_last_height = path.height;
|
m_last_height = path.height;
|
||||||
sprintf(buf, ";%s%g\n", GCodeProcessor::reserved_tag(GCodeProcessor::ETags::Height).c_str(), m_last_height);
|
|
||||||
gcode += buf;
|
gcode += std::string(";") + GCodeProcessor::reserved_tag(GCodeProcessor::ETags::Height)
|
||||||
|
+ float_to_string_decimal_point(m_last_height) + "\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string comment;
|
std::string comment;
|
||||||
|
@ -37,6 +37,7 @@ GCodeFindReplace::GCodeFindReplace(const std::vector<std::string> &gcode_substit
|
|||||||
out.regexp = strchr(params.c_str(), 'r') != nullptr || strchr(params.c_str(), 'R') != nullptr;
|
out.regexp = strchr(params.c_str(), 'r') != nullptr || strchr(params.c_str(), 'R') != nullptr;
|
||||||
out.case_insensitive = strchr(params.c_str(), 'i') != nullptr || strchr(params.c_str(), 'I') != nullptr;
|
out.case_insensitive = strchr(params.c_str(), 'i') != nullptr || strchr(params.c_str(), 'I') != nullptr;
|
||||||
out.whole_word = strchr(params.c_str(), 'w') != nullptr || strchr(params.c_str(), 'W') != nullptr;
|
out.whole_word = strchr(params.c_str(), 'w') != nullptr || strchr(params.c_str(), 'W') != nullptr;
|
||||||
|
out.single_line = strchr(params.c_str(), 's') != nullptr || strchr(params.c_str(), 'S') != nullptr;
|
||||||
if (out.regexp) {
|
if (out.regexp) {
|
||||||
out.regexp_pattern.assign(
|
out.regexp_pattern.assign(
|
||||||
out.whole_word ?
|
out.whole_word ?
|
||||||
@ -116,7 +117,8 @@ std::string GCodeFindReplace::process_layer(const std::string &ain)
|
|||||||
temp.clear();
|
temp.clear();
|
||||||
temp.reserve(in->size());
|
temp.reserve(in->size());
|
||||||
boost::regex_replace(ToStringIterator(temp), in->begin(), in->end(),
|
boost::regex_replace(ToStringIterator(temp), in->begin(), in->end(),
|
||||||
substitution.regexp_pattern, substitution.format, boost::match_default | boost::match_not_dot_newline | boost::match_not_dot_null | boost::format_all);
|
substitution.regexp_pattern, substitution.format,
|
||||||
|
(substitution.single_line ? boost::match_single_line | boost::match_default : boost::match_not_dot_newline | boost::match_default) | boost::format_all);
|
||||||
std::swap(out, temp);
|
std::swap(out, temp);
|
||||||
} else {
|
} else {
|
||||||
if (in == &ain)
|
if (in == &ain)
|
||||||
|
@ -24,6 +24,8 @@ private:
|
|||||||
bool regexp { false };
|
bool regexp { false };
|
||||||
bool case_insensitive { false };
|
bool case_insensitive { false };
|
||||||
bool whole_word { false };
|
bool whole_word { false };
|
||||||
|
// Valid for regexp only. Equivalent to Perl's /s modifier.
|
||||||
|
bool single_line { false };
|
||||||
};
|
};
|
||||||
std::vector<Substitution> m_substitutions;
|
std::vector<Substitution> m_substitutions;
|
||||||
};
|
};
|
||||||
|
@ -23,28 +23,35 @@ static constexpr float ENFORCER_CENTER_PENALTY = -10.f;
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// This function was introduced in 2016 to assign penalties to overhangs.
|
||||||
|
// LukasM thinks that it discriminated a bit too much, so especially external
|
||||||
|
// seams were than placed in funny places (non-overhangs were preferred too much).
|
||||||
|
// He implemented his own version (below) which applies fixed penalty for really big overlaps.
|
||||||
|
// static float extrudate_overlap_penalty(float nozzle_r, float weight_zero, float overlap_distance)
|
||||||
|
// {
|
||||||
|
// // The extrudate is not fully supported by the lower layer. Fit a polynomial penalty curve.
|
||||||
|
// // Solved by sympy package:
|
||||||
|
// /*
|
||||||
|
// from sympy import *
|
||||||
|
// (x,a,b,c,d,r,z)=symbols('x a b c d r z')
|
||||||
|
// p = a + b*x + c*x*x + d*x*x*x
|
||||||
|
// p2 = p.subs(solve([p.subs(x, -r), p.diff(x).subs(x, -r), p.diff(x,x).subs(x, -r), p.subs(x, 0)-z], [a, b, c, d]))
|
||||||
|
// from sympy.plotting import plot
|
||||||
|
// plot(p2.subs(r,0.2).subs(z,1.), (x, -1, 3), adaptive=False, nb_of_points=400)
|
||||||
|
// */
|
||||||
|
// if (overlap_distance < - nozzle_r) {
|
||||||
|
// // The extrudate is fully supported by the lower layer. This is the ideal case, therefore zero penalty.
|
||||||
|
// return 0.f;
|
||||||
|
// } else {
|
||||||
|
// float x = overlap_distance / nozzle_r;
|
||||||
|
// float x2 = x * x;
|
||||||
|
// float x3 = x2 * x;
|
||||||
|
// return weight_zero * (1.f + 3.f * x + 3.f * x2 + x3);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
static float extrudate_overlap_penalty(float nozzle_r, float weight_zero, float overlap_distance)
|
static float extrudate_overlap_penalty(float nozzle_r, float weight_zero, float overlap_distance)
|
||||||
{
|
{
|
||||||
// The extrudate is not fully supported by the lower layer. Fit a polynomial penalty curve.
|
return overlap_distance > nozzle_r ? weight_zero : 0.f;
|
||||||
// Solved by sympy package:
|
|
||||||
/*
|
|
||||||
from sympy import *
|
|
||||||
(x,a,b,c,d,r,z)=symbols('x a b c d r z')
|
|
||||||
p = a + b*x + c*x*x + d*x*x*x
|
|
||||||
p2 = p.subs(solve([p.subs(x, -r), p.diff(x).subs(x, -r), p.diff(x,x).subs(x, -r), p.subs(x, 0)-z], [a, b, c, d]))
|
|
||||||
from sympy.plotting import plot
|
|
||||||
plot(p2.subs(r,0.2).subs(z,1.), (x, -1, 3), adaptive=False, nb_of_points=400)
|
|
||||||
*/
|
|
||||||
if (overlap_distance < - nozzle_r) {
|
|
||||||
// The extrudate is fully supported by the lower layer. This is the ideal case, therefore zero penalty.
|
|
||||||
return 0.f;
|
|
||||||
} else {
|
|
||||||
float x = overlap_distance / nozzle_r;
|
|
||||||
float x2 = x * x;
|
|
||||||
float x3 = x2 * x;
|
|
||||||
return weight_zero * (1.f + 3.f * x + 3.f * x2 + x3);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -313,12 +320,12 @@ void SeamPlacer::plan_perimeters(const std::vector<const ExtrusionEntity*> perim
|
|||||||
if (perimeters[i]->role() == erExternalPerimeter && perimeters[i]->is_loop()) {
|
if (perimeters[i]->role() == erExternalPerimeter && perimeters[i]->is_loop()) {
|
||||||
last_pos = this->calculate_seam(
|
last_pos = this->calculate_seam(
|
||||||
layer, seam_position, *dynamic_cast<const ExtrusionLoop*>(perimeters[i]), nozzle_dmr,
|
layer, seam_position, *dynamic_cast<const ExtrusionLoop*>(perimeters[i]), nozzle_dmr,
|
||||||
po, lower_layer_edge_grid, last_pos);
|
po, lower_layer_edge_grid, last_pos, false);
|
||||||
m_plan[i].external = true;
|
m_plan[i].external = true;
|
||||||
m_plan[i].seam_position = seam_position;
|
|
||||||
m_plan[i].layer = &layer;
|
|
||||||
m_plan[i].po = po;
|
|
||||||
}
|
}
|
||||||
|
m_plan[i].seam_position = seam_position;
|
||||||
|
m_plan[i].layer = &layer;
|
||||||
|
m_plan[i].po = po;
|
||||||
m_plan[i].pt = last_pos;
|
m_plan[i].pt = last_pos;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -327,7 +334,7 @@ void SeamPlacer::plan_perimeters(const std::vector<const ExtrusionEntity*> perim
|
|||||||
void SeamPlacer::place_seam(ExtrusionLoop& loop, const Point& last_pos, bool external_first, double nozzle_diameter,
|
void SeamPlacer::place_seam(ExtrusionLoop& loop, const Point& last_pos, bool external_first, double nozzle_diameter,
|
||||||
const EdgeGrid::Grid* lower_layer_edge_grid)
|
const EdgeGrid::Grid* lower_layer_edge_grid)
|
||||||
{
|
{
|
||||||
const double seam_offset = nozzle_diameter;
|
// const double seam_offset = nozzle_diameter;
|
||||||
|
|
||||||
Point seam = last_pos;
|
Point seam = last_pos;
|
||||||
if (! m_plan.empty() && m_plan_idx < m_plan.size()) {
|
if (! m_plan.empty() && m_plan_idx < m_plan.size()) {
|
||||||
@ -339,75 +346,100 @@ void SeamPlacer::place_seam(ExtrusionLoop& loop, const Point& last_pos, bool ext
|
|||||||
// far from each other.
|
// far from each other.
|
||||||
if ((seam.cast<double>() - last_pos.cast<double>()).squaredNorm() > std::pow(scale_(5.*nozzle_diameter), 2.))
|
if ((seam.cast<double>() - last_pos.cast<double>()).squaredNorm() > std::pow(scale_(5.*nozzle_diameter), 2.))
|
||||||
seam = this->calculate_seam(*m_plan[m_plan_idx].layer, m_plan[m_plan_idx].seam_position, loop, nozzle_diameter,
|
seam = this->calculate_seam(*m_plan[m_plan_idx].layer, m_plan[m_plan_idx].seam_position, loop, nozzle_diameter,
|
||||||
m_plan[m_plan_idx].po, lower_layer_edge_grid, last_pos);
|
m_plan[m_plan_idx].po, lower_layer_edge_grid, last_pos, false);
|
||||||
}
|
|
||||||
else if (! external_first) {
|
|
||||||
// Internal perimeter printed before the external.
|
|
||||||
// First get list of external seams.
|
|
||||||
std::vector<size_t> ext_seams;
|
|
||||||
for (size_t i = 0; i < m_plan.size(); ++i) {
|
|
||||||
if (m_plan[i].external)
|
|
||||||
ext_seams.emplace_back(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (! ext_seams.empty()) {
|
if (m_plan[m_plan_idx].seam_position == spAligned)
|
||||||
// First find the line segment closest to an external seam:
|
m_seam_history.add_seam(m_plan[m_plan_idx].po, m_plan[m_plan_idx].pt, loop.polygon().bounding_box());
|
||||||
int path_idx = 0;
|
}
|
||||||
int line_idx = 0;
|
else {
|
||||||
size_t ext_seam_idx = size_t(-1);
|
if (!external_first) {
|
||||||
double min_dist_sqr = std::numeric_limits<double>::max();
|
// Internal perimeter printed before the external.
|
||||||
std::vector<Lines> lines_vect;
|
// First get list of external seams.
|
||||||
for (int i = 0; i < int(loop.paths.size()); ++i) {
|
std::vector<size_t> ext_seams;
|
||||||
lines_vect.emplace_back(loop.paths[i].polyline.lines());
|
size_t external_cnt = 0;
|
||||||
const Lines& lines = lines_vect.back();
|
for (size_t i = 0; i < m_plan.size(); ++i) {
|
||||||
for (int j = 0; j < int(lines.size()); ++j) {
|
if (m_plan[i].external) {
|
||||||
for (size_t k : ext_seams) {
|
ext_seams.emplace_back(i);
|
||||||
double d_sqr = lines[j].distance_to_squared(m_plan[k].pt);
|
++external_cnt;
|
||||||
if (d_sqr < min_dist_sqr) {
|
}
|
||||||
path_idx = i;
|
}
|
||||||
line_idx = j;
|
|
||||||
ext_seam_idx = k;
|
if (!ext_seams.empty()) {
|
||||||
min_dist_sqr = d_sqr;
|
// First find the line segment closest to an external seam:
|
||||||
|
//int path_idx = 0;
|
||||||
|
//int line_idx = 0;
|
||||||
|
size_t ext_seam_idx = size_t(-1);
|
||||||
|
double min_dist_sqr = std::numeric_limits<double>::max();
|
||||||
|
std::vector<Lines> lines_vect;
|
||||||
|
for (int i = 0; i < int(loop.paths.size()); ++i) {
|
||||||
|
lines_vect.emplace_back(loop.paths[i].polyline.lines());
|
||||||
|
const Lines& lines = lines_vect.back();
|
||||||
|
for (int j = 0; j < int(lines.size()); ++j) {
|
||||||
|
for (size_t k : ext_seams) {
|
||||||
|
double d_sqr = lines[j].distance_to_squared(m_plan[k].pt);
|
||||||
|
if (d_sqr < min_dist_sqr) {
|
||||||
|
//path_idx = i;
|
||||||
|
//line_idx = j;
|
||||||
|
ext_seam_idx = k;
|
||||||
|
min_dist_sqr = d_sqr;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// Only accept seam that is reasonably close.
|
// Only accept seam that is reasonably close.
|
||||||
double limit_dist_sqr = std::pow(double(scale_((ext_seam_idx - m_plan_idx) * nozzle_diameter * 2.)), 2.);
|
if (ext_seam_idx != size_t(-1)) {
|
||||||
if (ext_seam_idx != size_t(-1) && min_dist_sqr < limit_dist_sqr) {
|
// How many nozzle diameters is considered "close"?
|
||||||
// Now find a projection of the external seam
|
const double nozzle_d_limit = 2. * (1. + m_plan.size() / external_cnt);
|
||||||
const Lines& lines = lines_vect[path_idx];
|
const double limit_dist_sqr = double(scale_(scale_((unscale(m_plan[ext_seam_idx].pt) - unscale(m_plan[m_plan_idx].pt)).squaredNorm() * std::pow(nozzle_d_limit * nozzle_diameter, 2.))));
|
||||||
Point closest = m_plan[ext_seam_idx].pt.projection_onto(lines[line_idx]);
|
|
||||||
double dist = (closest.cast<double>() - lines[line_idx].b.cast<double>()).norm();
|
|
||||||
|
|
||||||
// And walk along the perimeter until we make enough space for
|
if (min_dist_sqr < limit_dist_sqr) {
|
||||||
// seams of all perimeters beforethe external one.
|
// Now find a projection of the external seam
|
||||||
double offset = (ext_seam_idx - m_plan_idx) * scale_(seam_offset);
|
//const Lines& lines = lines_vect[path_idx];
|
||||||
double last_offset = offset;
|
//Point closest = m_plan[ext_seam_idx].pt.projection_onto(lines[line_idx]);
|
||||||
offset -= dist;
|
|
||||||
const Point* a = &closest;
|
// This code does staggering of internal perimeters, turned off for now.
|
||||||
const Point* b = &lines[line_idx].b;
|
//
|
||||||
while (++line_idx < int(lines.size()) && offset > 0.) {
|
// double dist = (closest.cast<double>() - lines[line_idx].b.cast<double>()).norm();
|
||||||
last_offset = offset;
|
//
|
||||||
offset -= lines[line_idx].length();
|
// // And walk along the perimeter until we make enough space for
|
||||||
a = &lines[line_idx].a;
|
// // seams of all perimeters beforethe external one.
|
||||||
b = &lines[line_idx].b;
|
// double offset = (ext_seam_idx - m_plan_idx) * scale_(seam_offset);
|
||||||
|
// double last_offset = offset;
|
||||||
|
// offset -= dist;
|
||||||
|
// const Point* a = &closest;
|
||||||
|
// const Point* b = &lines[line_idx].b;
|
||||||
|
// while (++line_idx < int(lines.size()) && offset > 0.) {
|
||||||
|
// last_offset = offset;
|
||||||
|
// offset -= lines[line_idx].length();
|
||||||
|
// a = &lines[line_idx].a;
|
||||||
|
// b = &lines[line_idx].b;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// // We have walked far enough, too far maybe. Interpolate on the
|
||||||
|
// // last segment to find the end precisely.
|
||||||
|
// offset = std::min(0., offset); // In case that offset is still positive (we may have "wrapped around")
|
||||||
|
// double ratio = last_offset / (last_offset - offset);
|
||||||
|
// seam = (a->cast<double>() + ((b->cast<double>() - a->cast<double>()) * ratio)).cast<coord_t>();
|
||||||
|
seam = m_plan[ext_seam_idx].pt;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// We have walked far enough, too far maybe. Interpolate on the
|
|
||||||
// last segment to find the end precisely.
|
|
||||||
offset = std::min(0., offset); // In case that offset is still positive (we may have "wrapped around")
|
|
||||||
double ratio = last_offset / (last_offset - offset);
|
|
||||||
seam = (a->cast<double>() + ((b->cast<double>() - a->cast<double>()) * ratio)).cast<coord_t>();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
// We should have a candidate ready from before. If not, use last_pos.
|
||||||
|
if (m_plan_idx > 0 && m_plan[m_plan_idx - 1].precalculated)
|
||||||
|
seam = m_plan[m_plan_idx - 1].pt;
|
||||||
|
}
|
||||||
|
|
||||||
|
// seam now contains a hot candidate for internal seam. Use it unless there is a sharp corner nearby.
|
||||||
|
// We will call the normal seam planning function, pretending that we are currently at the candidate point
|
||||||
|
// and set to spNearest. If the ideal seam it finds is close to current candidate, use it.
|
||||||
|
// This is to prevent having seams very close to corners, just because of external seam position.
|
||||||
|
seam = calculate_seam(*m_plan[m_plan_idx].layer, spNearest, loop, nozzle_diameter,
|
||||||
|
m_plan[m_plan_idx].po, lower_layer_edge_grid, seam, true);
|
||||||
}
|
}
|
||||||
else {
|
m_plan[m_plan_idx].pt = seam;
|
||||||
// We should have a candidate ready from before. If not, use last_pos.
|
|
||||||
if (m_plan_idx > 0 && m_plan[m_plan_idx - 1].precalculated)
|
|
||||||
seam = m_plan[m_plan_idx - 1].pt;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -417,41 +449,42 @@ void SeamPlacer::place_seam(ExtrusionLoop& loop, const Point& last_pos, bool ext
|
|||||||
loop.split_at(seam, true);
|
loop.split_at(seam, true);
|
||||||
|
|
||||||
if (external_first && m_plan_idx+1<m_plan.size() && ! m_plan[m_plan_idx+1].external) {
|
if (external_first && m_plan_idx+1<m_plan.size() && ! m_plan[m_plan_idx+1].external) {
|
||||||
// Next perimeter should start near this one.
|
// This code does staggering of internal perimeters, turned off for now.
|
||||||
const double dist_sqr = std::pow(double(scale_(seam_offset)), 2.);
|
// Next perimeter should start near this one.
|
||||||
double running_sqr = 0.;
|
// const double dist_sqr = std::pow(double(scale_(seam_offset)), 2.);
|
||||||
double running_sqr_last = 0.;
|
// double running_sqr = 0.;
|
||||||
if (!loop.paths.empty() && loop.paths.back().polyline.points.size() > 1) {
|
// double running_sqr_last = 0.;
|
||||||
const ExtrusionPath& last = loop.paths.back();
|
// if (!loop.paths.empty() && loop.paths.back().polyline.points.size() > 1) {
|
||||||
auto it = last.polyline.points.crbegin() + 1;
|
// const ExtrusionPath& last = loop.paths.back();
|
||||||
for (; it != last.polyline.points.crend(); ++it) {
|
// auto it = last.polyline.points.crbegin() + 1;
|
||||||
running_sqr += (it->cast<double>() - (it - 1)->cast<double>()).squaredNorm();
|
// for (; it != last.polyline.points.crend(); ++it) {
|
||||||
if (running_sqr > dist_sqr)
|
// running_sqr += (it->cast<double>() - (it - 1)->cast<double>()).squaredNorm();
|
||||||
break;
|
// if (running_sqr > dist_sqr)
|
||||||
running_sqr_last = running_sqr;
|
// break;
|
||||||
}
|
// running_sqr_last = running_sqr;
|
||||||
if (running_sqr <= dist_sqr)
|
// }
|
||||||
it = last.polyline.points.crend() - 1;
|
// if (running_sqr <= dist_sqr)
|
||||||
// Now interpolate.
|
// it = last.polyline.points.crend() - 1;
|
||||||
double ratio = (std::sqrt(dist_sqr) - std::sqrt(running_sqr_last)) / (std::sqrt(running_sqr) - std::sqrt(running_sqr_last));
|
// // Now interpolate.
|
||||||
m_plan[m_plan_idx + 1].pt = ((it - 1)->cast<double>() + (it->cast<double>() - (it - 1)->cast<double>()) * std::min(ratio, 1.)).cast<coord_t>();
|
// double ratio = (std::sqrt(dist_sqr) - std::sqrt(running_sqr_last)) / (std::sqrt(running_sqr) - std::sqrt(running_sqr_last));
|
||||||
|
// m_plan[m_plan_idx + 1].pt = ((it - 1)->cast<double>() + (it->cast<double>() - (it - 1)->cast<double>()) * std::min(ratio, 1.)).cast<coord_t>();
|
||||||
|
// m_plan[m_plan_idx + 1].precalculated = true;
|
||||||
|
m_plan[m_plan_idx + 1].pt = m_plan[m_plan_idx].pt;
|
||||||
m_plan[m_plan_idx + 1].precalculated = true;
|
m_plan[m_plan_idx + 1].precalculated = true;
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
++m_plan_idx;
|
++m_plan_idx;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Returns a seam for an EXTERNAL perimeter.
|
// Returns "best" seam for a given perimeter.
|
||||||
Point SeamPlacer::calculate_seam(const Layer& layer, const SeamPosition seam_position,
|
Point SeamPlacer::calculate_seam(const Layer& layer, const SeamPosition seam_position,
|
||||||
const ExtrusionLoop& loop, coordf_t nozzle_dmr, const PrintObject* po,
|
const ExtrusionLoop& loop, coordf_t nozzle_dmr, const PrintObject* po,
|
||||||
const EdgeGrid::Grid* lower_layer_edge_grid, Point last_pos)
|
const EdgeGrid::Grid* lower_layer_edge_grid, Point last_pos, bool prefer_nearest)
|
||||||
{
|
{
|
||||||
assert(loop.role() == erExternalPerimeter);
|
|
||||||
Polygon polygon = loop.polygon();
|
Polygon polygon = loop.polygon();
|
||||||
bool was_clockwise = polygon.make_counter_clockwise();
|
bool was_clockwise = polygon.make_counter_clockwise();
|
||||||
BoundingBox polygon_bb = polygon.bounding_box();
|
|
||||||
const coord_t nozzle_r = coord_t(scale_(0.5 * nozzle_dmr) + 0.5);
|
const coord_t nozzle_r = coord_t(scale_(0.5 * nozzle_dmr) + 0.5);
|
||||||
|
|
||||||
size_t po_idx = std::find(m_po_list.begin(), m_po_list.end(), po) - m_po_list.begin();
|
size_t po_idx = std::find(m_po_list.begin(), m_po_list.end(), po) - m_po_list.begin();
|
||||||
@ -462,7 +495,7 @@ Point SeamPlacer::calculate_seam(const Layer& layer, const SeamPosition seam_pos
|
|||||||
if (po == m_last_po && layer.print_z == m_last_print_z)
|
if (po == m_last_po && layer.print_z == m_last_print_z)
|
||||||
layer_po = m_last_layer_po;
|
layer_po = m_last_layer_po;
|
||||||
else {
|
else {
|
||||||
layer_po = po->get_layer_at_printz(layer.print_z);
|
layer_po = po ? po->get_layer_at_printz(layer.print_z) : nullptr;
|
||||||
m_last_po = po;
|
m_last_po = po;
|
||||||
m_last_print_z = layer.print_z;
|
m_last_print_z = layer.print_z;
|
||||||
m_last_layer_po = layer_po;
|
m_last_layer_po = layer_po;
|
||||||
@ -475,7 +508,9 @@ Point SeamPlacer::calculate_seam(const Layer& layer, const SeamPosition seam_pos
|
|||||||
|
|
||||||
assert(layer_idx < po->layer_count());
|
assert(layer_idx < po->layer_count());
|
||||||
|
|
||||||
if (this->is_custom_seam_on_layer(layer_idx, po_idx)) {
|
const bool custom_seam = loop.role() == erExternalPerimeter && this->is_custom_seam_on_layer(layer_idx, po_idx);
|
||||||
|
|
||||||
|
if (custom_seam) {
|
||||||
// Seam enf/blockers can begin and end in between the original vertices.
|
// Seam enf/blockers can begin and end in between the original vertices.
|
||||||
// Let add extra points in between and update the leghths.
|
// Let add extra points in between and update the leghths.
|
||||||
polygon.densify(MINIMAL_POLYGON_SIDE);
|
polygon.densify(MINIMAL_POLYGON_SIDE);
|
||||||
@ -488,7 +523,7 @@ Point SeamPlacer::calculate_seam(const Layer& layer, const SeamPosition seam_pos
|
|||||||
if (seam_position == spAligned) {
|
if (seam_position == spAligned) {
|
||||||
// Seam is aligned to the seam at the preceding layer.
|
// Seam is aligned to the seam at the preceding layer.
|
||||||
if (po != nullptr) {
|
if (po != nullptr) {
|
||||||
std::optional<Point> pos = m_seam_history.get_last_seam(m_po_list[po_idx], layer_idx, polygon_bb);
|
std::optional<Point> pos = m_seam_history.get_last_seam(m_po_list[po_idx], layer_idx, loop.polygon().bounding_box());
|
||||||
if (pos.has_value()) {
|
if (pos.has_value()) {
|
||||||
last_pos = *pos;
|
last_pos = *pos;
|
||||||
last_pos_weight = is_custom_enforcer_on_layer(layer_idx, po_idx) ? 0.f : 1.f;
|
last_pos_weight = is_custom_enforcer_on_layer(layer_idx, po_idx) ? 0.f : 1.f;
|
||||||
@ -519,7 +554,7 @@ Point SeamPlacer::calculate_seam(const Layer& layer, const SeamPosition seam_pos
|
|||||||
std::vector<float> penalties = polygon_angles_at_vertices(polygon, lengths, float(nozzle_r));
|
std::vector<float> penalties = polygon_angles_at_vertices(polygon, lengths, float(nozzle_r));
|
||||||
// No penalty for reflex points, slight penalty for convex points, high penalty for flat surfaces.
|
// No penalty for reflex points, slight penalty for convex points, high penalty for flat surfaces.
|
||||||
const float penaltyConvexVertex = 1.f;
|
const float penaltyConvexVertex = 1.f;
|
||||||
const float penaltyFlatSurface = 5.f;
|
const float penaltyFlatSurface = 3.f;
|
||||||
const float penaltyOverhangHalf = 10.f;
|
const float penaltyOverhangHalf = 10.f;
|
||||||
// Penalty for visible seams.
|
// Penalty for visible seams.
|
||||||
for (size_t i = 0; i < polygon.points.size(); ++ i) {
|
for (size_t i = 0; i < polygon.points.size(); ++ i) {
|
||||||
@ -548,8 +583,12 @@ Point SeamPlacer::calculate_seam(const Layer& layer, const SeamPosition seam_pos
|
|||||||
float dist_max = 0.1f * lengths.back(); // 5.f * nozzle_dmr
|
float dist_max = 0.1f * lengths.back(); // 5.f * nozzle_dmr
|
||||||
penalty -= last_pos_weight * bspline_kernel(dist_to_last_pos_proj / dist_max);
|
penalty -= last_pos_weight * bspline_kernel(dist_to_last_pos_proj / dist_max);
|
||||||
penalties[i] = std::max(0.f, penalty);
|
penalties[i] = std::max(0.f, penalty);
|
||||||
|
if (prefer_nearest) {
|
||||||
|
// This hack limits the search around the nearest position projection.
|
||||||
|
penalties[i] += dist_to_last_pos_proj > 6.f * nozzle_r ? 100.f : 0.f;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Penalty for overhangs.
|
// Penalty for overhangs.
|
||||||
if (lower_layer_edge_grid) {
|
if (lower_layer_edge_grid) {
|
||||||
// Use the edge grid distance field structure over the lower layer to calculate overhangs.
|
// Use the edge grid distance field structure over the lower layer to calculate overhangs.
|
||||||
@ -568,10 +607,11 @@ Point SeamPlacer::calculate_seam(const Layer& layer, const SeamPosition seam_pos
|
|||||||
penalties[i] += extrudate_overlap_penalty(float(nozzle_r), penaltyOverhangHalf, float(dist));
|
penalties[i] += extrudate_overlap_penalty(float(nozzle_r), penaltyOverhangHalf, float(dist));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Custom seam. Huge (negative) constant penalty is applied inside
|
// Custom seam. Huge (negative) constant penalty is applied inside
|
||||||
// blockers (enforcers) to rule out points that should not win.
|
// blockers (enforcers) to rule out points that should not win.
|
||||||
this->apply_custom_seam(polygon, po_idx, penalties, lengths, layer_idx, seam_position);
|
if (custom_seam)
|
||||||
|
this->apply_custom_seam(polygon, po_idx, penalties, lengths, layer_idx, seam_position);
|
||||||
|
|
||||||
// Find a point with a minimum penalty.
|
// Find a point with a minimum penalty.
|
||||||
size_t idx_min = std::min_element(penalties.begin(), penalties.end()) - penalties.begin();
|
size_t idx_min = std::min_element(penalties.begin(), penalties.end()) - penalties.begin();
|
||||||
@ -592,9 +632,6 @@ Point SeamPlacer::calculate_seam(const Layer& layer, const SeamPosition seam_pos
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (seam_position == spAligned)
|
|
||||||
m_seam_history.add_seam(po, polygon.points[idx_min], polygon_bb);
|
|
||||||
|
|
||||||
|
|
||||||
// Export the contour into a SVG file.
|
// Export the contour into a SVG file.
|
||||||
#if 0
|
#if 0
|
||||||
|
@ -65,7 +65,7 @@ private:
|
|||||||
// When given an external perimeter (!), returns the seam.
|
// When given an external perimeter (!), returns the seam.
|
||||||
Point calculate_seam(const Layer& layer, const SeamPosition seam_position,
|
Point calculate_seam(const Layer& layer, const SeamPosition seam_position,
|
||||||
const ExtrusionLoop& loop, coordf_t nozzle_dmr, const PrintObject* po,
|
const ExtrusionLoop& loop, coordf_t nozzle_dmr, const PrintObject* po,
|
||||||
const EdgeGrid::Grid* lower_layer_edge_grid, Point last_pos);
|
const EdgeGrid::Grid* lower_layer_edge_grid, Point last_pos, bool prefer_nearest);
|
||||||
|
|
||||||
struct CustomTrianglesPerLayer {
|
struct CustomTrianglesPerLayer {
|
||||||
Polygons polys;
|
Polygons polys;
|
||||||
|
@ -1548,14 +1548,14 @@ void GCodeViewer::load_toolpaths(const GCodeProcessorResult& gcode_result)
|
|||||||
std::vector<float> options_zs;
|
std::vector<float> options_zs;
|
||||||
|
|
||||||
size_t seams_count = 0;
|
size_t seams_count = 0;
|
||||||
std::vector<size_t> seams_ids;
|
std::vector<size_t> biased_seams_ids;
|
||||||
|
|
||||||
// toolpaths data -> extract vertices from result
|
// toolpaths data -> extract vertices from result
|
||||||
for (size_t i = 0; i < m_moves_count; ++i) {
|
for (size_t i = 0; i < m_moves_count; ++i) {
|
||||||
const GCodeProcessorResult::MoveVertex& curr = gcode_result.moves[i];
|
const GCodeProcessorResult::MoveVertex& curr = gcode_result.moves[i];
|
||||||
if (curr.type == EMoveType::Seam) {
|
if (curr.type == EMoveType::Seam) {
|
||||||
++seams_count;
|
++seams_count;
|
||||||
seams_ids.push_back(i);
|
biased_seams_ids.push_back(i - biased_seams_ids.size() - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t move_id = i - seams_count;
|
size_t move_id = i - seams_count;
|
||||||
@ -1634,7 +1634,7 @@ void GCodeViewer::load_toolpaths(const GCodeProcessorResult& gcode_result)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// smooth toolpaths corners for the given TBuffer using triangles
|
// smooth toolpaths corners for the given TBuffer using triangles
|
||||||
auto smooth_triangle_toolpaths_corners = [&gcode_result, &seams_ids](const TBuffer& t_buffer, MultiVertexBuffer& v_multibuffer) {
|
auto smooth_triangle_toolpaths_corners = [&gcode_result, &biased_seams_ids](const TBuffer& t_buffer, MultiVertexBuffer& v_multibuffer) {
|
||||||
auto extract_position_at = [](const VertexBuffer& vertices, size_t offset) {
|
auto extract_position_at = [](const VertexBuffer& vertices, size_t offset) {
|
||||||
return Vec3f(vertices[offset + 0], vertices[offset + 1], vertices[offset + 2]);
|
return Vec3f(vertices[offset + 0], vertices[offset + 1], vertices[offset + 2]);
|
||||||
};
|
};
|
||||||
@ -1708,11 +1708,6 @@ void GCodeViewer::load_toolpaths(const GCodeProcessorResult& gcode_result)
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
std::vector<size_t> biased_seams_ids(seams_ids.size());
|
|
||||||
for (size_t i = 0; i < seams_ids.size(); ++i) {
|
|
||||||
biased_seams_ids[i] = seams_ids[i] - i - 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto extract_move_id = [&biased_seams_ids](size_t id) {
|
auto extract_move_id = [&biased_seams_ids](size_t id) {
|
||||||
size_t new_id = -1;
|
size_t new_id = -1;
|
||||||
auto it = std::lower_bound(biased_seams_ids.begin(), biased_seams_ids.end(), id);
|
auto it = std::lower_bound(biased_seams_ids.begin(), biased_seams_ids.end(), id);
|
||||||
@ -1807,7 +1802,7 @@ void GCodeViewer::load_toolpaths(const GCodeProcessorResult& gcode_result)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// dismiss, no more needed
|
// dismiss, no more needed
|
||||||
std::vector<size_t>().swap(seams_ids);
|
std::vector<size_t>().swap(biased_seams_ids);
|
||||||
|
|
||||||
for (MultiVertexBuffer& v_multibuffer : vertices) {
|
for (MultiVertexBuffer& v_multibuffer : vertices) {
|
||||||
for (VertexBuffer& v_buffer : v_multibuffer) {
|
for (VertexBuffer& v_buffer : v_multibuffer) {
|
||||||
|
@ -3858,6 +3858,36 @@ void SubstitutionManager::init(DynamicPrintConfig* config, wxWindow* parent, wxF
|
|||||||
m_em = em_unit(parent);
|
m_em = em_unit(parent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SubstitutionManager::validate_lenth()
|
||||||
|
{
|
||||||
|
std::vector<std::string>& substitutions = m_config->option<ConfigOptionStrings>("gcode_substitutions")->values;
|
||||||
|
if ((substitutions.size() % 3) != 0) {
|
||||||
|
WarningDialog(m_parent, "Value of gcode_substitutions parameter will be cut to valid length",
|
||||||
|
"Invalid length of gcode_substitutions parameter").ShowModal();
|
||||||
|
substitutions.resize(substitutions.size() - (substitutions.size() % 3));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool SubstitutionManager::is_compatibile_with_ui()
|
||||||
|
{
|
||||||
|
const std::vector<std::string>& substitutions = m_config->option<ConfigOptionStrings>("gcode_substitutions")->values;
|
||||||
|
if (int(substitutions.size() / 3) != m_grid_sizer->GetEffectiveRowsCount() - 1) {
|
||||||
|
ErrorDialog(m_parent, "Invalid compatibility between UI and BE", false).ShowModal();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
|
||||||
|
bool SubstitutionManager::is_valid_id(int substitution_id, const wxString& message)
|
||||||
|
{
|
||||||
|
const std::vector<std::string>& substitutions = m_config->option<ConfigOptionStrings>("gcode_substitutions")->values;
|
||||||
|
if (int(substitutions.size() / 3) < substitution_id) {
|
||||||
|
ErrorDialog(m_parent, message, false).ShowModal();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
void SubstitutionManager::create_legend()
|
void SubstitutionManager::create_legend()
|
||||||
{
|
{
|
||||||
if (!m_grid_sizer->IsEmpty())
|
if (!m_grid_sizer->IsEmpty())
|
||||||
@ -3867,7 +3897,6 @@ void SubstitutionManager::create_legend()
|
|||||||
// Legend for another columns
|
// Legend for another columns
|
||||||
for (const std::string col : { L("Find"), L("Replace with"), L("Options") }) {
|
for (const std::string col : { L("Find"), L("Replace with"), L("Options") }) {
|
||||||
auto temp = new wxStaticText(m_parent, wxID_ANY, _(col), wxDefaultPosition, wxDefaultSize, wxST_ELLIPSIZE_MIDDLE);
|
auto temp = new wxStaticText(m_parent, wxID_ANY, _(col), wxDefaultPosition, wxDefaultSize, wxST_ELLIPSIZE_MIDDLE);
|
||||||
// temp->SetBackgroundStyle(wxBG_STYLE_PAINT);
|
|
||||||
m_grid_sizer->Add(temp);
|
m_grid_sizer->Add(temp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3875,14 +3904,12 @@ void SubstitutionManager::create_legend()
|
|||||||
// delete substitution_id from substitutions
|
// delete substitution_id from substitutions
|
||||||
void SubstitutionManager::delete_substitution(int substitution_id)
|
void SubstitutionManager::delete_substitution(int substitution_id)
|
||||||
{
|
{
|
||||||
|
validate_lenth();
|
||||||
|
if (!is_valid_id(substitution_id, "Invalid substitution_id to delete"))
|
||||||
|
return;
|
||||||
|
|
||||||
// delete substitution
|
// delete substitution
|
||||||
std::vector<std::string>& substitutions = m_config->option<ConfigOptionStrings>("gcode_substitutions")->values;
|
std::vector<std::string>& substitutions = m_config->option<ConfigOptionStrings>("gcode_substitutions")->values;
|
||||||
if ((substitutions.size() % 3) != 0)
|
|
||||||
throw RuntimeError("Invalid length of gcode_substitutions parameter");
|
|
||||||
|
|
||||||
if (int(substitutions.size() / 3) < substitution_id)
|
|
||||||
throw RuntimeError("Invalid substitution_id to delete");
|
|
||||||
|
|
||||||
substitutions.erase(std::next(substitutions.begin(), substitution_id * 3), std::next(substitutions.begin(), substitution_id * 3 + 3));
|
substitutions.erase(std::next(substitutions.begin(), substitution_id * 3), std::next(substitutions.begin(), substitution_id * 3 + 3));
|
||||||
call_ui_update();
|
call_ui_update();
|
||||||
|
|
||||||
@ -3903,7 +3930,7 @@ void SubstitutionManager::add_substitution(int substitution_id, const std::strin
|
|||||||
substitution_id = m_grid_sizer->GetEffectiveRowsCount() - 1;
|
substitution_id = m_grid_sizer->GetEffectiveRowsCount() - 1;
|
||||||
|
|
||||||
// create new substitution
|
// create new substitution
|
||||||
// it have to be added toconfig too
|
// it have to be added to config too
|
||||||
std::vector<std::string>& substitutions = m_config->option<ConfigOptionStrings>("gcode_substitutions")->values;
|
std::vector<std::string>& substitutions = m_config->option<ConfigOptionStrings>("gcode_substitutions")->values;
|
||||||
for (size_t i = 0; i < 3; i ++)
|
for (size_t i = 0; i < 3; i ++)
|
||||||
substitutions.push_back(std::string());
|
substitutions.push_back(std::string());
|
||||||
@ -3949,6 +3976,7 @@ void SubstitutionManager::add_substitution(int substitution_id, const std::strin
|
|||||||
bool regexp = strchr(params.c_str(), 'r') != nullptr || strchr(params.c_str(), 'R') != nullptr;
|
bool regexp = strchr(params.c_str(), 'r') != nullptr || strchr(params.c_str(), 'R') != nullptr;
|
||||||
bool case_insensitive = strchr(params.c_str(), 'i') != nullptr || strchr(params.c_str(), 'I') != nullptr;
|
bool case_insensitive = strchr(params.c_str(), 'i') != nullptr || strchr(params.c_str(), 'I') != nullptr;
|
||||||
bool whole_word = strchr(params.c_str(), 'w') != nullptr || strchr(params.c_str(), 'W') != nullptr;
|
bool whole_word = strchr(params.c_str(), 'w') != nullptr || strchr(params.c_str(), 'W') != nullptr;
|
||||||
|
bool match_single_line = strchr(params.c_str(), 's') != nullptr || strchr(params.c_str(), 'S') != nullptr;
|
||||||
|
|
||||||
auto chb_regexp = new wxCheckBox(m_parent, wxID_ANY, _L("Regular expression"));
|
auto chb_regexp = new wxCheckBox(m_parent, wxID_ANY, _L("Regular expression"));
|
||||||
chb_regexp->SetValue(regexp);
|
chb_regexp->SetValue(regexp);
|
||||||
@ -3962,9 +3990,14 @@ void SubstitutionManager::add_substitution(int substitution_id, const std::strin
|
|||||||
chb_whole_word->SetValue(whole_word);
|
chb_whole_word->SetValue(whole_word);
|
||||||
params_sizer->Add(chb_whole_word, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, m_em);
|
params_sizer->Add(chb_whole_word, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, m_em);
|
||||||
|
|
||||||
for (wxCheckBox* chb : std::initializer_list<wxCheckBox*>{ chb_regexp, chb_case_insensitive, chb_whole_word }) {
|
auto chb_match_single_line = new wxCheckBox(m_parent, wxID_ANY, _L("Match single line"));
|
||||||
|
chb_match_single_line->SetValue(match_single_line);
|
||||||
|
chb_match_single_line->Show(regexp);
|
||||||
|
params_sizer->Add(chb_match_single_line, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT | wxLEFT, m_em);
|
||||||
|
|
||||||
|
for (wxCheckBox* chb : std::initializer_list<wxCheckBox*>{ chb_regexp, chb_case_insensitive, chb_whole_word, chb_match_single_line }) {
|
||||||
chb->SetFont(wxGetApp().normal_font());
|
chb->SetFont(wxGetApp().normal_font());
|
||||||
chb->Bind(wxEVT_CHECKBOX, [this, substitution_id, chb_regexp, chb_case_insensitive, chb_whole_word](wxCommandEvent e) {
|
chb->Bind(wxEVT_CHECKBOX, [this, substitution_id, chb_regexp, chb_case_insensitive, chb_whole_word, chb_match_single_line](wxCommandEvent e) {
|
||||||
std::string value = std::string();
|
std::string value = std::string();
|
||||||
if (chb_regexp->GetValue())
|
if (chb_regexp->GetValue())
|
||||||
value += "r";
|
value += "r";
|
||||||
@ -3972,7 +4005,13 @@ void SubstitutionManager::add_substitution(int substitution_id, const std::strin
|
|||||||
value += "i";
|
value += "i";
|
||||||
if (chb_whole_word->GetValue())
|
if (chb_whole_word->GetValue())
|
||||||
value += "w";
|
value += "w";
|
||||||
edit_substitution(substitution_id, 2, value);
|
if (chb_match_single_line->GetValue())
|
||||||
|
value += "s";
|
||||||
|
|
||||||
|
chb_match_single_line->Show(chb_regexp->GetValue());
|
||||||
|
m_grid_sizer->Layout();
|
||||||
|
|
||||||
|
edit_substitution(substitution_id, 2, value);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3993,8 +4032,7 @@ void SubstitutionManager::update_from_config()
|
|||||||
if (!subst.empty())
|
if (!subst.empty())
|
||||||
create_legend();
|
create_legend();
|
||||||
|
|
||||||
if ((subst.size() % 3) != 0)
|
validate_lenth();
|
||||||
throw RuntimeError("Invalid length of gcode_substitutions parameter");
|
|
||||||
|
|
||||||
int subst_id = 0;
|
int subst_id = 0;
|
||||||
for (size_t i = 0; i < subst.size(); i += 3)
|
for (size_t i = 0; i < subst.size(); i += 3)
|
||||||
@ -4018,14 +4056,9 @@ void SubstitutionManager::edit_substitution(int substitution_id, int opt_pos, co
|
|||||||
{
|
{
|
||||||
std::vector<std::string>& substitutions = m_config->option<ConfigOptionStrings>("gcode_substitutions")->values;
|
std::vector<std::string>& substitutions = m_config->option<ConfigOptionStrings>("gcode_substitutions")->values;
|
||||||
|
|
||||||
if ((substitutions.size() % 3) != 0)
|
validate_lenth();
|
||||||
throw RuntimeError("Invalid length of gcode_substitutions parameter");
|
if(!is_compatibile_with_ui() || !is_valid_id(substitution_id, "Invalid substitution_id to edit"))
|
||||||
|
return;
|
||||||
if (int(substitutions.size() / 3) != m_grid_sizer->GetEffectiveRowsCount()-1)
|
|
||||||
throw RuntimeError("Invalid compatibility between UI and BE");
|
|
||||||
|
|
||||||
if (int(substitutions.size() / 3) < substitution_id)
|
|
||||||
throw RuntimeError("Invalid substitution_id to edit");
|
|
||||||
|
|
||||||
substitutions[substitution_id * 3 + opt_pos] = value;
|
substitutions[substitution_id * 3 + opt_pos] = value;
|
||||||
|
|
||||||
|
@ -55,6 +55,10 @@ class SubstitutionManager
|
|||||||
int m_em{10};
|
int m_em{10};
|
||||||
std::function<void()> m_cb_edited_substitution{ nullptr };
|
std::function<void()> m_cb_edited_substitution{ nullptr };
|
||||||
|
|
||||||
|
void validate_lenth();
|
||||||
|
bool is_compatibile_with_ui();
|
||||||
|
bool is_valid_id(int substitution_id, const wxString& message);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
SubstitutionManager() {};
|
SubstitutionManager() {};
|
||||||
~SubstitutionManager() {};
|
~SubstitutionManager() {};
|
||||||
|
@ -215,4 +215,78 @@ SCENARIO("Find/Replace with regexp", "[GCodeFindReplace]") {
|
|||||||
"G1 X0 Y0.33 Z0.431 E1.2; perimeter\n");
|
"G1 X0 Y0.33 Z0.431 E1.2; perimeter\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GIVEN("Single layer G-code block with extrusion types") {
|
||||||
|
const std::string gcode =
|
||||||
|
// Start of a layer.
|
||||||
|
"G1 Z1.21; move up\n"
|
||||||
|
";TYPE:Infill\n"
|
||||||
|
"G1 X0 Y.33 Z.431 E1.2\n"
|
||||||
|
";TYPE:Solid infill\n"
|
||||||
|
"G1 X1 Y.3 Z.431 E0.1\n"
|
||||||
|
";TYPE:Top solid infill\n"
|
||||||
|
"G1 X1 Y.3 Z.431 E0.1\n"
|
||||||
|
";TYPE:Top solid infill\n"
|
||||||
|
"G1 X1 Y.3 Z.431 E0.1\n"
|
||||||
|
";TYPE:Perimeter\n"
|
||||||
|
"G1 X0 Y.2 Z.431 E0.2\n"
|
||||||
|
";TYPE:External perimeter\n"
|
||||||
|
"G1 X1 Y.3 Z.431 E0.1\n"
|
||||||
|
";TYPE:Top solid infill\n"
|
||||||
|
"G1 X1 Y.3 Z.431 E0.1\n"
|
||||||
|
";TYPE:External perimeter\n"
|
||||||
|
"G1 X1 Y.3 Z.431 E0.1\n";
|
||||||
|
WHEN("Change extrusion rate of top solid infill, single line modifier") {
|
||||||
|
GCodeFindReplace find_replace({ "(;TYPE:Top solid infill\\n)(.*?)(;TYPE:[^T][^o][^p][^ ][^s]|$)", "${1}M221 S98\\n${2}M221 S95\\n${3}", "rs" });
|
||||||
|
REQUIRE(find_replace.process_layer(gcode) ==
|
||||||
|
"G1 Z1.21; move up\n"
|
||||||
|
";TYPE:Infill\n"
|
||||||
|
"G1 X0 Y.33 Z.431 E1.2\n"
|
||||||
|
";TYPE:Solid infill\n"
|
||||||
|
"G1 X1 Y.3 Z.431 E0.1\n"
|
||||||
|
";TYPE:Top solid infill\n"
|
||||||
|
"M221 S98\n"
|
||||||
|
"G1 X1 Y.3 Z.431 E0.1\n"
|
||||||
|
";TYPE:Top solid infill\n"
|
||||||
|
"G1 X1 Y.3 Z.431 E0.1\n"
|
||||||
|
"M221 S95\n"
|
||||||
|
";TYPE:Perimeter\n"
|
||||||
|
"G1 X0 Y.2 Z.431 E0.2\n"
|
||||||
|
";TYPE:External perimeter\n"
|
||||||
|
"G1 X1 Y.3 Z.431 E0.1\n"
|
||||||
|
";TYPE:Top solid infill\n"
|
||||||
|
"M221 S98\n"
|
||||||
|
"G1 X1 Y.3 Z.431 E0.1\n"
|
||||||
|
"M221 S95\n"
|
||||||
|
";TYPE:External perimeter\n"
|
||||||
|
"G1 X1 Y.3 Z.431 E0.1\n");
|
||||||
|
}
|
||||||
|
WHEN("Change extrusion rate of top solid infill, no single line modifier (incorrect)") {
|
||||||
|
GCodeFindReplace find_replace({ "(;TYPE:Top solid infill\\n)(.*?)(;TYPE:[^T][^o][^p][^ ][^s]|$)", "${1}M221 S98\\n${2}\\nM221 S95${3}", "r" });
|
||||||
|
REQUIRE(find_replace.process_layer(gcode) ==
|
||||||
|
"G1 Z1.21; move up\n"
|
||||||
|
";TYPE:Infill\n"
|
||||||
|
"G1 X0 Y.33 Z.431 E1.2\n"
|
||||||
|
";TYPE:Solid infill\n"
|
||||||
|
"G1 X1 Y.3 Z.431 E0.1\n"
|
||||||
|
";TYPE:Top solid infill\n"
|
||||||
|
"M221 S98\n"
|
||||||
|
"G1 X1 Y.3 Z.431 E0.1\n"
|
||||||
|
"M221 S95\n"
|
||||||
|
";TYPE:Top solid infill\n"
|
||||||
|
"M221 S98\n"
|
||||||
|
"G1 X1 Y.3 Z.431 E0.1\n"
|
||||||
|
"M221 S95\n"
|
||||||
|
";TYPE:Perimeter\n"
|
||||||
|
"G1 X0 Y.2 Z.431 E0.2\n"
|
||||||
|
";TYPE:External perimeter\n"
|
||||||
|
"G1 X1 Y.3 Z.431 E0.1\n"
|
||||||
|
";TYPE:Top solid infill\n"
|
||||||
|
"M221 S98\n"
|
||||||
|
"G1 X1 Y.3 Z.431 E0.1\n"
|
||||||
|
"M221 S95\n"
|
||||||
|
";TYPE:External perimeter\n"
|
||||||
|
"G1 X1 Y.3 Z.431 E0.1\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user