Repository navigation
Expand file tree
/
Copy pathlaser.py
More file actions
166 lines (134 loc) · 6.46 KB
/
Copy pathlaser.py
File metadata and controls
166 lines (134 loc) · 6.46 KB
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
161
162
163
164
165
166
import burin.process
import burin.types
import numpy as np
import os
import math
import copy
from pewpew.definitions import Segment
from pewpew.laser_events import laser_description
from pewpew.job_file import write_file
import burin.laser_codegen as cg
machine_parameters = cg.MachineParameters(power_range = (3.0,30.0), repetition_range = (40.0,60.0), field_size = 50.0, travel_speed = 20.0)
class DefaultLaser(burin.process.BaseProcess):
PARAMETERS = cg.PassParameters(preview = False,
speed = 200.0,
power = 10.0,
wobble = None,
passes = 1,
point_time = 0.005)
def write_file(self, directory, unit, events):
filepath = os.path.join(directory, unit + ".laser")
write_file(filepath, list(events), laser_description)
def layers_to_units(self, layers):
units = []
for layer in burin.process.cannonical_order(layers):
units.append({"name": layer,"subunits" : [(layer,[layer])],"parameters" : []})
return units
def geometry_parameters(self, unit_name):
""" How should we process each layer - specifies a line segment length for conversion from
dxf geometry, and all of the parameters to the linker/optimizer/cleaner. """
return {'link': True, 'reverse' : True, 'deduplicate' : True, 'merge' : 0.01}
def generate_code(self, unit_name, segments):
parameters = type(self).PARAMETERS if (unit_name[0] != 'Preview') else cg.PassParameters(preview = True, speed = 200.0)
yield from cg.generate_unit(parameters, machine_parameters, segments)
class ThickCutting(DefaultLaser):
THICKNESS = None
ETCH_PARAMETERS = None
def generate_code(self, unit_name, segments):
parameters = None
etch = False
if unit_name[0] == 'Preview':
parameters = cg.PassParameters(preview = True, speed = 200.0)
elif unit_name[0][0:4] == 'Etch':
etch = True
ep = type(self).ETCH_PARAMETERS
if ep is None:
print("No etch parameters specified, defaulting to cutting parameters")
parameters = type(self).PARAMETERS
else:
parameters = ep
else:
parameters = type(self).PARAMETERS
thickness = type(self).THICKNESS
passes = parameters.passes
if passes > 1 and thickness is not None and not etch:
parameters = copy.copy(parameters)
parameters.passes = 1
events = list(cg.generate_unit(parameters, machine_parameters, segments))
for z in np.linspace(0, thickness, passes):
if z != 0:
yield Segment(0,0,100,100,(0,0, 0 - z,0))
for x in events:
yield x
yield Segment(0,0,100,100,(0,0,0,0))
else:
yield from cg.generate_unit(parameters, machine_parameters, segments)
class StainlessStencil(DefaultLaser):
""" Now you can just subclass this for particular parameters..."""
PARAMETERS = cg.PassParameters(preview = False,
speed = 100.0,
power = 20.0,
wobble = (0.020, 3000.0,0),
passes = 30,
point_time = 0.005)
class CarbonFiber(ThickCutting):
""" 0.5mm carbon fiber - focus in the middle of the material, and use compressed cooling air."""
THICKNESS = 0.5
STEP = 0.1
PARAMETERS = cg.PassParameters(preview = False,
speed = 100.0,
power = 10.0,
wobble = (0.020, 3000.0,0),
passes = 10,
point_time = 0.005)
class SpringSteel(ThickCutting):
THICKNESS = 0.38
PARAMETERS = cg.PassParameters(preview = False,
speed = 100.0,
power = 30.0,
wobble = (0.020, 3000.0,0),
passes = 50,
point_time = 0.005)
ETCH_PARAMETERS = cg.PassParameters(preview = False,
speed = 100.0,
power = 15.0,
wobble = (0.020, 3000.0,0),
passes = 4,
point_time = 0.005)
class PlatedMetal(ThickCutting):
THICKNESS = 0.38
PARAMETERS = cg.PassParameters(preview = False,
speed = 100.0,
power = 30.0,
wobble = (0.020, 3000.0,0),
passes = 50,
point_time = 0.005)
ETCH_PARAMETERS = cg.PassParameters(preview = False,
speed = 100.0,
power = 15.0,
wobble = None,
passes = 1,
point_time = 0.005)
class Alumina(ThickCutting):
""" Now you can just subclass this for particular parameters..."""
THICKNESS = 0.5
PARAMETERS = cg.PassParameters(preview = False,
speed = 100.0,
power = 30.0,
wobble = (0.020, 3000.0,0),
passes = 50,
point_time = 0.005)
class AluminumCard(ThickCutting):
THICKNESS = 0.2032
PARAMETERS = cg.PassParameters(preview = False,
speed = 100.0,
power = 30.0,
wobble = (0.020, 3000.0, 0),
passes = 1,
point_time = 0.005)
ETCH_PARAMETERS = cg.PassParameters(preview = False,
speed = 250.0,
power = 5,
wobble = None,
passes = 1,
point_time = 0.005)