BedLevelMachineAction.py 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. from cura.MachineAction import MachineAction
  2. from cura.PrinterOutputDevice import PrinterOutputDevice
  3. from UM.FlameProfiler import pyqtSlot
  4. from UM.Application import Application
  5. from UM.i18n import i18nCatalog
  6. catalog = i18nCatalog("cura")
  7. ## A simple action to handle manual bed leveling procedure for printers that don't have it on the firmware.
  8. # This is currently only used by the Ultimaker Original+
  9. class BedLevelMachineAction(MachineAction):
  10. def __init__(self):
  11. super().__init__("BedLevel", catalog.i18nc("@action", "Level build plate"))
  12. self._qml_url = "BedLevelMachineAction.qml"
  13. self._bed_level_position = 0
  14. def _execute(self):
  15. pass
  16. def _reset(self):
  17. self._bed_level_position = 0
  18. pass
  19. @pyqtSlot()
  20. def startBedLeveling(self):
  21. self._bed_level_position = 0
  22. printer_output_devices = self._getPrinterOutputDevices()
  23. if printer_output_devices:
  24. printer_output_devices[0].homeBed()
  25. printer_output_devices[0].moveHead(0, 0, 3)
  26. printer_output_devices[0].homeHead()
  27. def _getPrinterOutputDevices(self):
  28. return [printer_output_device for printer_output_device in Application.getInstance().getOutputDeviceManager().getOutputDevices() if isinstance(printer_output_device, PrinterOutputDevice)]
  29. @pyqtSlot()
  30. def moveToNextLevelPosition(self):
  31. output_devices = self._getPrinterOutputDevices()
  32. if output_devices: # We found at least one output device
  33. output_device = output_devices[0]
  34. if self._bed_level_position == 0:
  35. output_device.moveHead(0, 0, 3)
  36. output_device.homeHead()
  37. output_device.moveHead(0, 0, 3)
  38. output_device.moveHead(Application.getInstance().getGlobalContainerStack().getProperty("machine_width", "value") - 10, 0, 0)
  39. output_device.moveHead(0, 0, -3)
  40. self._bed_level_position += 1
  41. elif self._bed_level_position == 1:
  42. output_device.moveHead(0, 0, 3)
  43. output_device.moveHead(-Application.getInstance().getGlobalContainerStack().getProperty("machine_width", "value" ) / 2, Application.getInstance().getGlobalContainerStack().getProperty("machine_depth", "value") - 10, 0)
  44. output_device.moveHead(0, 0, -3)
  45. self._bed_level_position += 1
  46. elif self._bed_level_position == 2:
  47. output_device.moveHead(0, 0, 3)
  48. output_device.moveHead(-Application.getInstance().getGlobalContainerStack().getProperty("machine_width", "value") / 2 + 10, -(Application.getInstance().getGlobalContainerStack().getProperty("machine_depth", "value") + 10), 0)
  49. output_device.moveHead(0, 0, -3)
  50. self._bed_level_position += 1
  51. elif self._bed_level_position >= 3:
  52. output_device.sendCommand("M18") # Turn off all motors so the user can move the axes
  53. self.setFinished()