extrude: move firmware retraction into the panel, add pressure advance control closes #724

This commit is contained in:
Alfredo Monclus 2024-06-04 14:15:14 -03:00
parent 3d542465e8
commit ac6f34acb0
30 changed files with 267 additions and 18 deletions

View File

@ -60,12 +60,6 @@ name: {{ gettext('Limits') }}
icon: fine-tune
panel: limits
[menu __main more retraction]
name: {{ gettext('Retraction') }}
icon: retract
panel: retraction
enable: {{ 'firmware_retraction' in printer.config_sections }}
[menu __main more fan]
name: {{ gettext('Fan') }}
icon: fan

View File

@ -69,12 +69,6 @@ name: {{ gettext('Network') }}
icon: network
panel: network
[menu __print retraction]
name: {{ gettext('Retraction') }}
icon: retract
panel: retraction
enable: {{ 'firmware_retraction' in printer.config_sections }}
[menu __print settings]
name: KlipperScreen
icon: settings

View File

@ -658,6 +658,9 @@ msgstr ""
msgid "Pressure Advance:"
msgstr ""
msgid "Pressure Advance"
msgstr ""
msgid "Print"
msgstr ""

View File

@ -661,6 +661,9 @@ msgstr "Zapni tiskárnu"
msgid "Pressure Advance:"
msgstr "Pressure Advance:"
msgid "Pressure Advance"
msgstr "Pressure Advance"
msgid "Print"
msgstr "Tisk"

View File

@ -656,6 +656,9 @@ msgstr "Tænd printer"
msgid "Pressure Advance:"
msgstr "Pressure Advance:"
msgid "Pressure Advance"
msgstr "Pressure Advance"
msgid "Print"
msgstr "Print"

View File

@ -661,6 +661,9 @@ msgstr "Drucker einschalten"
msgid "Pressure Advance:"
msgstr "Druckvorlauf:"
msgid "Pressure Advance"
msgstr "Druckvorlauf"
msgid "Print"
msgstr "Druck"

View File

@ -661,6 +661,9 @@ msgstr "Drucker einschalten"
msgid "Pressure Advance:"
msgstr "Druckvorlauf:"
msgid "Pressure Advance"
msgstr "Druckvorlauf"
msgid "Print"
msgstr "Druck"

View File

@ -662,6 +662,9 @@ msgstr "Encender Impresora"
msgid "Pressure Advance:"
msgstr "Avance de presión:"
msgid "Pressure Advance"
msgstr "Avance de presión"
msgid "Print"
msgstr "Imprimir"

View File

@ -656,6 +656,9 @@ msgstr "Printeri sisselülitamine"
msgid "Pressure Advance:"
msgstr "Surveelisus:"
msgid "Pressure Advance"
msgstr "Surveelisus"
msgid "Print"
msgstr "Prindi"

View File

@ -662,6 +662,9 @@ msgstr "Allumer l'imprimante"
msgid "Pressure Advance:"
msgstr "Avance de pression:"
msgid "Pressure Advance"
msgstr "Avance de pression"
msgid "Print"
msgstr "Imprimer"

View File

@ -663,6 +663,9 @@ msgstr "הפעל מדפסת"
msgid "Pressure Advance:"
msgstr "פרשר אדוונס"
msgid "Pressure Advance"
msgstr "פרשר אדוונס"
msgid "Print"
msgstr "הדפסה"

View File

@ -655,6 +655,9 @@ msgstr "Nyomtató bekapcsolása"
msgid "Pressure Advance:"
msgstr "Nyomás előtolás:"
msgid "Pressure Advance"
msgstr "Nyomás előtolás"
msgid "Print"
msgstr "Nyomtatás"

View File

@ -657,6 +657,9 @@ msgstr "Accendi la stampante"
msgid "Pressure Advance:"
msgstr "Pressure Advance:"
msgid "Pressure Advance"
msgstr "Pressure Advance"
msgid "Print"
msgstr "Stampa"

View File

@ -653,6 +653,9 @@ msgstr "プリンター電源"
msgid "Pressure Advance:"
msgstr ""
msgid "Pressure Advance"
msgstr ""
msgid "Print"
msgstr "印刷"

View File

@ -654,6 +654,9 @@ msgstr "프린터 전원 켜기"
msgid "Pressure Advance:"
msgstr "모서리 압출 제어 수치:"
msgid "Pressure Advance"
msgstr "모서리 압출 제어 수치"
msgid "Print"
msgstr "출력"

View File

@ -664,6 +664,10 @@ msgstr "Išjungti spausdintuvą"
msgid "Pressure Advance:"
msgstr "Slėgio kontrolė:"
msgid "Pressure Advance"
msgstr "Slėgio kontrolė"
msgid "Print"
msgstr "Spausdinti"

View File

@ -661,6 +661,9 @@ msgstr "Printer Aanzetten"
msgid "Pressure Advance:"
msgstr "Pressure Advance:"
msgid "Pressure Advance"
msgstr "Pressure Advance"
msgid "Print"
msgstr "Print"

View File

@ -659,6 +659,9 @@ msgstr "Zasilanie włączone"
msgid "Pressure Advance:"
msgstr "Pressure Advance:"
msgid "Pressure Advance"
msgstr "Pressure Advance"
msgid "Print"
msgstr "Drukuj"

View File

@ -662,6 +662,9 @@ msgstr "Ligar a impressora"
msgid "Pressure Advance:"
msgstr "Avanço de Pressão:"
msgid "Pressure Advance"
msgstr "Avanço de Pressão"
msgid "Print"
msgstr "Imprimir"

View File

@ -661,6 +661,9 @@ msgstr "Ligar Impressora"
msgid "Pressure Advance:"
msgstr "Pressão de Avanço (Pressure Advance):"
msgid "Pressure Advance"
msgstr "Pressão de Avanço"
msgid "Print"
msgstr "Imprimir"

View File

@ -662,6 +662,9 @@ msgstr "Включить принтер"
msgid "Pressure Advance:"
msgstr "Повышение давления:"
msgid "Pressure Advance"
msgstr "Повышение давления"
msgid "Print"
msgstr "Печать"

View File

@ -664,6 +664,10 @@ msgstr "Vklopite tiskalnik"
msgid "Pressure Advance:"
msgstr "Pressure Advance:"
msgid "Pressure Advance"
msgstr "Pressure Advance"
msgid "Print"
msgstr "Natisni"

View File

@ -660,6 +660,9 @@ msgstr "Slå på skrivaren"
msgid "Pressure Advance:"
msgstr "Tryckförflyttning:"
msgid "Pressure Advance"
msgstr "Tryckförflyttning"
msgid "Print"
msgstr "Skriv ut"

View File

@ -659,6 +659,9 @@ msgstr "Yazıcıya Güç Ver (aç)"
msgid "Pressure Advance:"
msgstr "Akış Dengeleme:"
msgid "Pressure Advance"
msgstr "Akış Dengeleme"
msgid "Print"
msgstr "Yazdır"

View File

@ -662,6 +662,9 @@ msgstr "Увімкнути принтер"
msgid "Pressure Advance:"
msgstr "Випередження тиску:"
msgid "Pressure Advance"
msgstr "Випередження тиску"
msgid "Print"
msgstr "Друк"

View File

@ -653,6 +653,9 @@ msgstr "Bật nguồn máy in"
msgid "Pressure Advance:"
msgstr "Nâng áp suất:"
msgid "Pressure Advance"
msgstr "Nâng áp suất"
msgid "Print"
msgstr "In"

View File

@ -658,6 +658,9 @@ msgstr "打印机通电"
msgid "Pressure Advance:"
msgstr "压力提前:"
msgid "Pressure Advance"
msgstr "压力提前"
msgid "Print"
msgstr "打印"

View File

@ -658,6 +658,9 @@ msgstr "啟動列印機"
msgid "Pressure Advance:"
msgstr "壓力推進:"
msgid "Pressure Advance"
msgstr "壓力推進"
msgid "Print"
msgstr "列印"

View File

@ -42,6 +42,8 @@ class Panel(ScreenPanel):
'retract': self._gtk.Button("retract", _("Retract"), "color1"),
'temperature': self._gtk.Button("heat-up", _("Temperature"), "color4"),
'spoolman': self._gtk.Button("spoolman", "Spoolman", "color3"),
'pressure': self._gtk.Button("settings", _("Pressure Advance"), "color2"),
'retraction': self._gtk.Button("settings", _("Retraction"), "color1")
}
self.buttons['extrude'].connect("clicked", self.extrude, "+")
self.buttons['load'].connect("clicked", self.load_unload, "+")
@ -53,6 +55,12 @@ class Panel(ScreenPanel):
self.buttons['spoolman'].connect("clicked", self.menu_item_clicked, {
"panel": "spoolman"
})
self.buttons['pressure'].connect("clicked", self.menu_item_clicked, {
"panel": "pressure_advance"
})
self.buttons['retraction'].connect("clicked", self.menu_item_clicked, {
"panel": "retraction"
})
xbox = Gtk.Box(homogeneous=True)
limit = 4
@ -67,7 +75,7 @@ class Panel(ScreenPanel):
self.labels[extruder].connect("clicked", self.change_extruder, extruder)
if extruder == self.current_extruder:
self.labels[extruder].get_style_context().add_class("button_active")
if self._printer.extrudercount <= limit:
if self._printer.extrudercount < limit:
xbox.add(self.labels[extruder])
i += 1
else:
@ -76,13 +84,19 @@ class Panel(ScreenPanel):
self.labels['extruders'] = AutoGrid(extruder_buttons, vertical=self._screen.vertical_mode)
self.labels['extruders_menu'] = self._gtk.ScrolledWindow()
self.labels['extruders_menu'].add(self.labels['extruders'])
if self._printer.extrudercount > limit:
if self._printer.extrudercount >= limit:
changer = self._gtk.Button("toolchanger")
changer.connect("clicked", self.load_menu, 'extruders', _('Extruders'))
xbox.add(changer)
self.labels["current_extruder"] = self._gtk.Button("extruder", "")
xbox.add(self.labels["current_extruder"])
self.labels["current_extruder"].connect("clicked", self.load_menu, 'extruders', _('Extruders'))
if not self._screen.vertical_mode:
xbox.add(self.buttons['pressure'])
i += 1
if self._printer.get_config_section("firmware_retraction") and not self._screen.vertical_mode:
xbox.add(self.buttons['retraction'])
i += 1
if i < limit:
xbox.add(self.buttons['temperature'])
if i < (limit - 1) and self._printer.spoolman:
@ -145,9 +159,14 @@ class Panel(ScreenPanel):
grid.attach(self.buttons['retract'], 2, 1, 2, 1)
grid.attach(self.buttons['load'], 0, 2, 2, 1)
grid.attach(self.buttons['unload'], 2, 2, 2, 1)
grid.attach(distbox, 0, 3, 4, 1)
grid.attach(speedbox, 0, 4, 4, 1)
grid.attach(sensors, 0, 5, 4, 1)
settings_box = Gtk.Box(homogeneous=True)
settings_box.add(self.buttons['pressure'])
if self._printer.get_config_section("firmware_retraction"):
settings_box.add(self.buttons['retraction'])
grid.attach(settings_box, 0, 3, 4, 1)
grid.attach(distbox, 0, 4, 4, 1)
grid.attach(speedbox, 0, 5, 4, 1)
grid.attach(sensors, 0, 6, 4, 1)
else:
grid.attach(self.buttons['extrude'], 0, 2, 1, 1)
grid.attach(self.buttons['load'], 1, 2, 1, 1)
@ -163,7 +182,7 @@ class Panel(ScreenPanel):
def enable_buttons(self, enable):
for button in self.buttons:
if button in ("temperature", "spoolman"):
if button in ("pressure", "retraction", "spoolman", "temperature"):
continue
self.buttons[button].set_sensitive(enable)

162
panels/pressure_advance.py Normal file
View File

@ -0,0 +1,162 @@
import logging
import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, Pango
from ks_includes.screen_panel import ScreenPanel
# TODO multi-extruder support
class Panel(ScreenPanel):
def __init__(self, screen, title):
title = title or _("Pressure advance")
super().__init__(screen, title)
self.current_extruder = "extruder"
self.current_extruder_label = Gtk.Label(
label=_("Current") + f": {self.current_extruder}"
)
self.grid = Gtk.Grid()
self.grid.attach(self.current_extruder_label, 0, 0, 1, 1)
self.values = {}
self.list = {}
self.options = [
{
"name": _("Pressure Advance"),
"units": _("mm"),
"option": "pressure_advance",
"value": 0,
"digits": 2,
"maxval": 1,
},
{
"name": _("Smooth time"),
"units": _("s"),
"option": "smooth_time",
"value": 0.04,
"digits": 3,
"maxval": 0.200,
},
]
for opt in self.options:
self.add_option(opt)
scroll = self._gtk.ScrolledWindow()
scroll.add(self.grid)
self.content.add(scroll)
self.content.show_all()
def add_option(self, option_data):
option = option_data["option"]
optname = option_data["name"]
units = option_data["units"]
value = option_data["value"]
digits = option_data["digits"]
maxval = option_data["maxval"]
logging.info(f"Adding option: {option}")
name_label = Gtk.Label()
name_label.set_markup(f"<big><b>{optname}</b></big> ({units})")
adjustment = Gtk.Adjustment(
value,
0,
maxval,
0.05 if option.startswith("pressure") else 0.005,
0.1 if option.startswith("pressure") else 0.01,
0,
)
scale = Gtk.Scale(
adjustment=adjustment,
digits=digits,
hexpand=True,
has_origin=True,
)
scale.get_style_context().add_class("option_slider")
scale.connect("button-release-event", self.set_opt_value, option)
reset_button = self._gtk.Button("refresh", style="color1")
reset_button.connect("clicked", self.reset_value, option)
reset_button.set_hexpand(False)
item = Gtk.Grid()
item.attach(name_label, 0, 0, 2, 1)
item.attach(scale, 0, 1, 1, 1)
item.attach(reset_button, 1, 1, 1, 1)
self.list[option] = {
"row": item,
"scale": scale,
"adjustment": adjustment,
}
pos = sorted(self.list).index(option) + 1
self.grid.attach(self.list[option]["row"], 0, pos, 1, 1)
self.grid.show_all()
def reset_value(self, widget, option):
for opt in self.options:
if opt["option"] == option:
self.update_option(option, opt["value"])
self.set_opt_value(None, None, option)
def set_opt_value(self, widget, event, opt):
value = self.list[opt]["scale"].get_value()
if opt == "pressure_advance":
self._screen._ws.klippy.gcode_script(
f"SET_PRESSURE_ADVANCE EXTRUDER={self.current_extruder} ADVANCE={value}"
)
if opt == "smooth_time":
self._screen._ws.klippy.gcode_script(
f"SET_PRESSURE_ADVANCE EXTRUDER={self.current_extruder} SMOOTH_TIME={value}"
)
def process_update(self, action, data):
if action != "notify_status_update":
return
if (
"toolhead" in data
and "extruder" in data["toolhead"]
and data["toolhead"]["extruder"]
):
self.current_extruder = data["toolhead"]["extruder"]
logging.debug(f"Changing to {self.current_extruder}")
self.current_extruder_label.set_label(
_("Current") + f": {self.current_extruder}"
)
for opt in self.list:
if opt in self._printer.data[self.current_extruder]:
self.update_option(
opt, self._printer.data[self.current_extruder][opt]
)
if self.current_extruder in data:
for opt in self.list:
if opt in data[self.current_extruder]:
self.update_option(opt, data[self.current_extruder][opt])
def update_option(self, option, value):
if option not in self.list:
return
if self.list[option]["scale"].has_grab():
return
self.values[option] = float(value)
# Infinite scale
for opt in self.options:
if opt["option"] == option and not option.startswith("smooth_time"):
if self.values[option] > opt["maxval"] * 0.75:
self.list[option]["adjustment"].set_upper(self.values[option] * 1.5)
else:
self.list[option]["adjustment"].set_upper(opt["maxval"])
break
self.list[option]["scale"].set_value(self.values[option])
self.list[option]["scale"].disconnect_by_func(self.set_opt_value)
self.list[option]["scale"].connect(
"button-release-event", self.set_opt_value, option
)