BedLevelMachineAction.py 2.8 KB

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