FlatCAMPostProc.py 3.2 KB

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