Finish macro-based alio layout
This commit is contained in:
parent
fda2433154
commit
9ffc96cbe5
3 changed files with 12 additions and 21 deletions
|
|
@ -111,7 +111,7 @@ class ApertureMacro:
|
|||
|
||||
def to_gerber(self, unit=None):
|
||||
comments = [ str(c) for c in self.comments ]
|
||||
variable_defs = [ f'${var}={expr}' for var, expr in enumerate(self.variables, start=1) if expr is not None ]
|
||||
variable_defs = [ f'${var}={str(expr)[1:-1]}' for var, expr in enumerate(self.variables, start=1) if expr is not None ]
|
||||
primitive_defs = [ prim.to_gerber(unit) for prim in self.primitives ]
|
||||
return '*\n'.join(comments + variable_defs + primitive_defs)
|
||||
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@ class Primitive:
|
|||
|
||||
def to_gerber(self, unit=None):
|
||||
return f'{self.code},' + ','.join(
|
||||
getattr(self, name).to_gerber(unit) for name in type(self).__annotations__)
|
||||
getattr(self, field.name).to_gerber(unit) for field in fields(self) if field.name != 'unit')
|
||||
|
||||
def __str__(self):
|
||||
attrs = ','.join(str(getattr(self, name)).strip('<>') for name in type(self).__annotations__)
|
||||
|
|
|
|||
|
|
@ -633,6 +633,12 @@ class AlioCell(ObjectGroup):
|
|||
corner_radius, # 4
|
||||
rotation, # 5
|
||||
self.clearance), unit=MM) # 6
|
||||
main_ap_90 = ApertureMacroInstance(alio_main_macro, (self.link_pad_width, # 1
|
||||
self.pitch, # 2
|
||||
self.link_trace_width, # 3
|
||||
corner_radius, # 4
|
||||
rotation-90, # 5
|
||||
self.clearance), unit=MM) # 6
|
||||
main_drill = ExcellonTool(self.drill, plated=True, unit=self.unit)
|
||||
via_drill = ExcellonTool(self.via_size, plated=True, unit=self.unit)
|
||||
|
||||
|
|
@ -646,21 +652,11 @@ class AlioCell(ObjectGroup):
|
|||
amp.Circle(MM, 1, 2*var(4), var(1)/2-var(4), var(1)/2-var(4), var(5)),
|
||||
amp.CenterLine(MM, 1, var(2), var(3), -var(2)/2 + var(1)/2, 0, var(5)),
|
||||
))
|
||||
#alio_clear = ApertureMacroInstance(alio_macro, (self.link_pad_width + 2*self.clearance, # 1
|
||||
# self.pitch+self.clearance, # 2
|
||||
# self.link_trace_width + 2*self.clearance, # 3
|
||||
# corner_radius+self.clearance, # 4
|
||||
# rotation), unit=MM) # 5
|
||||
alio_dark = ApertureMacroInstance(alio_macro, (self.link_pad_width, # 1
|
||||
self.pitch-self.clearance, # 2
|
||||
self.link_trace_width, # 3
|
||||
corner_radius, # 4
|
||||
rotation), unit=MM) # 5
|
||||
#alio_clear_90 = ApertureMacroInstance(alio_macro, (self.link_pad_width + 2*self.clearance, # 1
|
||||
# self.pitch+self.clearance, # 2
|
||||
# self.link_trace_width + 2*self.clearance,# 3
|
||||
# corner_radius+self.clearance, # 4
|
||||
# rotation+90), unit=MM) # 5
|
||||
alio_dark_90 = ApertureMacroInstance(alio_macro, (self.link_pad_width, # 1
|
||||
self.pitch-self.clearance, # 2
|
||||
self.link_trace_width, # 3
|
||||
|
|
@ -669,18 +665,13 @@ class AlioCell(ObjectGroup):
|
|||
|
||||
# all layers are identical here
|
||||
for side, use in (('top', 'copper'), ('top', 'mask'), ('bottom', 'copper'), ('bottom', 'mask')):
|
||||
layer_stack[side, use].objects.insert(0, xf(Flash(0, 0, aperture=main_ap, unit=self.unit)))
|
||||
if side == 'top':
|
||||
#layer_stack[side, use].objects.append(xf(Flash(self.pitch/2, self.pitch/2, aperture=alio_clear, polarity_dark=False, unit=self.unit)))
|
||||
#if self.inst_y == 0:
|
||||
# layer_stack[side, use].objects.append(xf(Flash(self.pitch/2, -self.pitch/2, aperture=alio_clear, polarity_dark=False, unit=self.unit)))
|
||||
if not (self.border_x or self.border_y):
|
||||
layer_stack[side, use].objects.insert(0, xf(Flash(0, 0, aperture=main_ap, unit=self.unit)))
|
||||
if not self.border_y:
|
||||
layer_stack[side, use].objects.append(xf(Flash(self.pitch/2, self.pitch/2, aperture=alio_dark, unit=self.unit)))
|
||||
else:
|
||||
#layer_stack[side, use].objects.append(xf(Flash(self.pitch/2, self.pitch/2, aperture=alio_clear_90, polarity_dark=False, unit=self.unit)))
|
||||
#if self.inst_x == 0:
|
||||
# layer_stack[side, use].objects.append(xf(Flash(-self.pitch/2, self.pitch/2, aperture=alio_clear, polarity_dark=False, unit=self.unit)))
|
||||
if not (self.border_x or self.border_y):
|
||||
layer_stack[side, use].objects.insert(0, xf(Flash(0, 0, aperture=main_ap_90, unit=self.unit)))
|
||||
if not self.border_x:
|
||||
layer_stack[side, use].objects.append(xf(Flash(self.pitch/2, self.pitch/2, aperture=alio_dark_90, unit=self.unit)))
|
||||
|
||||
layer_stack.drill_pth.append(Flash(x, y, aperture=main_drill, unit=self.unit))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue