FlatCAMPostProc.py 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. # ##########################################################
  2. # FlatCAM: 2D Post-processing for Manufacturing #
  3. # http://flatcam.org #
  4. # File Author: Matthieu Berthomé #
  5. # Date: 5/26/2017 #
  6. # MIT Licence #
  7. # ##########################################################
  8. from importlib.machinery import SourceFileLoader
  9. import os
  10. from abc import ABCMeta, abstractmethod
  11. # module-root dictionary of postprocessors
  12. import FlatCAMApp
  13. postprocessors = {}
  14. class ABCPostProcRegister(ABCMeta):
  15. # handles postprocessors registration on instantation
  16. def __new__(cls, clsname, bases, attrs):
  17. newclass = super(ABCPostProcRegister, cls).__new__(cls, clsname, bases, attrs)
  18. if object not in bases:
  19. if newclass.__name__ in postprocessors:
  20. FlatCAMApp.App.log.warning('Postprocessor %s has been overriden' % newclass.__name__)
  21. postprocessors[newclass.__name__] = newclass() # here is your register function
  22. return newclass
  23. class FlatCAMPostProc(object, metaclass=ABCPostProcRegister):
  24. @abstractmethod
  25. def start_code(self, p):
  26. pass
  27. @abstractmethod
  28. def lift_code(self, p):
  29. pass
  30. @abstractmethod
  31. def down_code(self, p):
  32. pass
  33. @abstractmethod
  34. def toolchange_code(self, p):
  35. pass
  36. @abstractmethod
  37. def up_to_zero_code(self, p):
  38. pass
  39. @abstractmethod
  40. def rapid_code(self, p):
  41. pass
  42. @abstractmethod
  43. def linear_code(self, p):
  44. pass
  45. @abstractmethod
  46. def end_code(self, p):
  47. pass
  48. @abstractmethod
  49. def feedrate_code(self, p):
  50. pass
  51. @abstractmethod
  52. def spindle_code(self, p):
  53. pass
  54. @abstractmethod
  55. def spindle_stop_code(self, p):
  56. pass
  57. class FlatCAMPostProc_Tools(object, metaclass=ABCPostProcRegister):
  58. @abstractmethod
  59. def start_code(self, p):
  60. pass
  61. @abstractmethod
  62. def lift_code(self, p):
  63. pass
  64. @abstractmethod
  65. def down_z_start_code(self, p):
  66. pass
  67. @abstractmethod
  68. def lift_z_dispense_code(self, p):
  69. pass
  70. @abstractmethod
  71. def down_z_stop_code(self, p):
  72. pass
  73. @abstractmethod
  74. def toolchange_code(self, p):
  75. pass
  76. @abstractmethod
  77. def rapid_code(self, p):
  78. pass
  79. @abstractmethod
  80. def linear_code(self, p):
  81. pass
  82. @abstractmethod
  83. def end_code(self, p):
  84. pass
  85. @abstractmethod
  86. def feedrate_xy_code(self, p):
  87. pass
  88. @abstractmethod
  89. def z_feedrate_code(self, p):
  90. pass
  91. @abstractmethod
  92. def feedrate_z_dispense_code(self, p):
  93. pass
  94. @abstractmethod
  95. def spindle_fwd_code(self, p):
  96. pass
  97. @abstractmethod
  98. def spindle_rev_code(self, p):
  99. pass
  100. @abstractmethod
  101. def spindle_off_code(self, p):
  102. pass
  103. @abstractmethod
  104. def dwell_fwd_code(self, p):
  105. pass
  106. @abstractmethod
  107. def dwell_rev_code(self, p):
  108. pass
  109. def load_postprocessors(app):
  110. postprocessors_path_search = [os.path.join(app.data_path, 'postprocessors', '*.py'),
  111. os.path.join('postprocessors', '*.py')]
  112. import glob
  113. for path_search in postprocessors_path_search:
  114. for file in glob.glob(path_search):
  115. try:
  116. SourceFileLoader('FlatCAMPostProcessor', file).load_module()
  117. except Exception as e:
  118. app.log.error(str(e))
  119. return postprocessors