-
Notifications
You must be signed in to change notification settings - Fork 5
/
appPreProcessor.py
160 lines (122 loc) · 3.52 KB
/
appPreProcessor.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
# ##########################################################
# FlatCAM: 2D Post-processing for Manufacturing #
# http://flatcam.org #
# File Author: Matthieu Berthomé #
# Date: 5/26/2017 #
# MIT Licence #
# ##########################################################
from importlib.machinery import SourceFileLoader
import os
from abc import ABCMeta, abstractmethod
# module-root dictionary of preprocessors
import logging
log = logging.getLogger('base')
preprocessors = {}
class ABCPreProcRegister(ABCMeta):
# handles preprocessors registration on instantiation
def __new__(cls, clsname, bases, attrs):
newclass = super(ABCPreProcRegister, cls).__new__(cls, clsname, bases, attrs)
if object not in bases:
if newclass.__name__ in preprocessors:
log.warning('Preprocessor %s has been overriden' % newclass.__name__)
preprocessors[newclass.__name__] = newclass() # here is your register function
return newclass
class PreProc(object, metaclass=ABCPreProcRegister):
@abstractmethod
def start_code(self, p):
pass
@abstractmethod
def lift_code(self, p):
pass
@abstractmethod
def down_code(self, p):
pass
@abstractmethod
def toolchange_code(self, p):
pass
@abstractmethod
def up_to_zero_code(self, p):
pass
@abstractmethod
def rapid_code(self, p):
pass
@abstractmethod
def linear_code(self, p):
pass
@abstractmethod
def end_code(self, p):
pass
@abstractmethod
def feedrate_code(self, p):
pass
@abstractmethod
def spindle_code(self, p):
pass
@abstractmethod
def spindle_stop_code(self, p):
pass
class AppPreProcTools(object, metaclass=ABCPreProcRegister):
@abstractmethod
def start_code(self, p):
pass
@abstractmethod
def lift_code(self, p):
pass
@abstractmethod
def down_z_start_code(self, p):
pass
@abstractmethod
def lift_z_dispense_code(self, p):
pass
@abstractmethod
def down_z_stop_code(self, p):
pass
@abstractmethod
def toolchange_code(self, p):
pass
@abstractmethod
def rapid_code(self, p):
pass
@abstractmethod
def linear_code(self, p):
pass
@abstractmethod
def end_code(self, p):
pass
@abstractmethod
def feedrate_xy_code(self, p):
pass
@abstractmethod
def z_feedrate_code(self, p):
pass
@abstractmethod
def feedrate_z_dispense_code(self, p):
pass
@abstractmethod
def spindle_fwd_code(self, p):
pass
@abstractmethod
def spindle_rev_code(self, p):
pass
@abstractmethod
def spindle_off_code(self, p):
pass
@abstractmethod
def dwell_fwd_code(self, p):
pass
@abstractmethod
def dwell_rev_code(self, p):
pass
def load_preprocessors(app):
preprocessors_path_search = [
os.path.join(app.data_path, 'preprocessors', '*.py'),
os.path.join('preprocessors', '*.py')
]
import glob
for path_search in preprocessors_path_search:
for file in glob.glob(path_search):
try:
SourceFileLoader('FlatCAMPostProcessor', file).load_module()
except Exception as e:
app.log.error(str(e))
return preprocessors