forked from TypQxQ/Klipper_ToolChanger
-
Notifications
You must be signed in to change notification settings - Fork 0
/
toolgroup.py
74 lines (60 loc) · 3.63 KB
/
toolgroup.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# KTCC - Klipper Tool Changer Code
# Toolgroup module, used to group Tools and derived from Tool.
#
# Copyright (C) 2023 Andrei Ignat <[email protected]>
#
# This file may be distributed under the terms of the GNU GPLv3 license.
#
# To try to keep terms apart:
# Mount: Tool is selected and loaded for use, be it a physical or a virtual on physical.
# Unmopunt: Tool is unselected and unloaded, be it a physical or a virtual on physical.
# Pickup: Tool is physically picked up and attached to the toolchanger head.
# Droppoff: Tool is physically parked and dropped of the toolchanger head.
# ToolLock: Toollock is engaged.
# ToolUnLock: Toollock is disengaged.
class ToolGroup:
def __init__(self, config):
self.printer = config.get_printer()
self.name = config.get_name().split(' ')[1]
self.config = config
# gcode_macro = self.printer.load_object(config, 'gcode_macro')
try:
_, name = config.get_name().split(' ', 1)
self.name = int(name)
except ValueError:
raise config.error(
"Name of section '%s' contains illegal characters. Use only integer ToolGroup number."
% (config.get_name()))
self.is_virtual = config.getboolean( # If True then must have a physical_parent declared and shares extruder, hotend and fan with the physical_parent
'is_virtual', False)
self.physical_parent_id = config.getint( # Tool used as a Physical parent for all toos of this group. Only used if the tool i virtual.
'physical_parent', None)
self.lazy_home_when_parking = config.get('lazy_home_when_parking', 0) # (default: 0) - When set to 1, will home unhomed XY axes if needed and will not move any axis if already homed and parked. 2 Will also home Z if not homed.
# -1 = none, 1= Only load filament, 2= Wipe in front of carriage, 3= Pebble wiper, 4= First Silicone, then pebble. Defaults to 0.
self.pickup_gcode = config.get('pickup_gcode', '')
self.dropoff_gcode = config.get('dropoff_gcode', '')
self.virtual_toolload_gcode = config.get('virtual_toolload_gcode', '')
self.virtual_toolunload_gcode = config.get('virtual_toolunload_gcode', '')
self.meltzonelength = config.get('meltzonelength', 0)
self.idle_to_standby_time = config.getfloat( 'idle_to_standby_time', 30, minval = 0.1)
self.idle_to_powerdown_time = config.getfloat( 'idle_to_powerdown_time', 600, minval = 0.1)
self.requires_pickup_for_virtual_load = self.config.getboolean("requires_pickup_for_virtual_load", True)
self.requires_pickup_for_virtual_unload = self.config.getboolean("requires_pickup_for_virtual_unload", True)
self.unload_virtual_at_dropoff = self.config.getboolean("unload_virtual_at_dropoff", True)
def get_config(self, config_param, default = None):
return self.config.get(config_param, default)
def get_status(self, eventtime= None):
status = {
"is_virtual": self.is_virtual,
"physical_parent_id": self.physical_parent_id,
"lazy_home_when_parking": self.lazy_home_when_parking,
"meltzonelength": self.meltzonelength,
"idle_to_standby_time": self.idle_to_standby_time,
"idle_to_powerdown_time": self.idle_to_powerdown_time,
"requires_pickup_for_virtual_load": self.requires_pickup_for_virtual_load,
"requires_pickup_for_virtual_unload": self.requires_pickup_for_virtual_unload,
"unload_virtual_at_dropoff": self.unload_virtual_at_dropoff
}
return status
def load_config_prefix(config):
return ToolGroup(config)