FlatCAMPostProc.py 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  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. def load_postprocessors(app):
  53. postprocessors_path_search = [os.path.join(app.data_path,'postprocessors','*.py'),
  54. os.path.join('postprocessors', '*.py')]
  55. import glob
  56. for path_search in postprocessors_path_search:
  57. for file in glob.glob(path_search):
  58. try:
  59. SourceFileLoader('FlatCAMPostProcessor', file).load_module()
  60. except Exception as e:
  61. app.log.error(str(e))
  62. return postprocessors