Fix old gerber tests

This commit is contained in:
jaseg 2022-01-19 00:36:05 +01:00
parent d85790bc6d
commit 9e86bf6b3e
6 changed files with 15 additions and 134 deletions

View file

@ -80,10 +80,10 @@ class UnitExpression(Expression):
if self.unit is None or unit is None or self.unit == unit:
return self._expr
elif unit == MM:
elif MM == unit:
return self._expr * MILLIMETERS_PER_INCH
elif unit == Inch:
elif Inch == unit:
return self._expr / MILLIMETERS_PER_INCH
else:

View file

@ -18,6 +18,8 @@
from dataclasses import dataclass
from copy import deepcopy
from .utils import LengthUnit, MM, Inch
@dataclass
class FileSettings:
'''
@ -31,15 +33,15 @@ class FileSettings:
`zeros='trailing'`
'''
notation : str = 'absolute'
unit : str = 'inch'
unit : LengthUnit = Inch
angle_unit : str = 'degree'
zeros : bool = None
number_format : tuple = (2, 5)
# input validation
def __setattr__(self, name, value):
if name == 'unit' and value not in ['inch', 'mm']:
raise ValueError(f'Unit must be either "inch" or "mm", not {value}')
if name == 'unit' and value not in [MM, Inch]:
raise ValueError(f'Unit must be either Inch or MM, not {value}')
elif name == 'notation' and value not in ['absolute', 'incremental']:
raise ValueError(f'Notation must be either "absolute" or "incremental", not {value}')
elif name == 'angle_unit' and value not in ('degree', 'radian'):

View file

@ -92,8 +92,7 @@ class ApertureMacroStmt(ParamStmt):
self.macro = macro
def to_gerber(self, settings):
unit = settings.unit if settings else None
return f'%AM{self.macro.name}*\n{self.macro.to_gerber(unit=unit)}*\n%'
return f'%AM{self.macro.name}*\n{self.macro.to_gerber(unit=settings.unit)}*\n%'
def __str__(self):
return f'<AM Aperture Macro {self.macro.name}: {self.macro}>'

View file

@ -295,7 +295,6 @@ class InternalLayer(PCBLayer):
return (self.order <= other.order)
class PCB:
@classmethod
def from_directory(cls, directory, board_name=None, verbose=False):
layers = []

View file

@ -1,126 +0,0 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# copyright 2015 Hamilton Kibbe <ham@hamiltonkib.be>
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
# http://www.apache.org/licenses/LICENSE-2.0
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""
CAM File Operations
===================
**Transformations and other operations performed on Gerber and Excellon files**
"""
import copy
def to_inch(cam_file):
""" Convert Gerber or Excellon file units to imperial
Parameters
----------
cam_file : :class:`gerber.cam.CamFile` subclass
Gerber or Excellon file to convert
Returns
-------
cam_file : :class:`gerber.cam.CamFile` subclass
A deep copy of the source file with units converted to imperial.
"""
cam_file = copy.deepcopy(cam_file)
cam_file.to_inch()
return cam_file
def to_metric(cam_file):
""" Convert Gerber or Excellon file units to metric
Parameters
----------
cam_file : :class:`gerber.cam.CamFile` subclass
Gerber or Excellon file to convert
Returns
-------
cam_file : :class:`gerber.cam.CamFile` subclass
A deep copy of the source file with units converted to metric.
"""
cam_file = copy.deepcopy(cam_file)
cam_file.to_metric()
return cam_file
def offset(cam_file, x_offset, y_offset):
""" Offset a Cam file by a specified amount in the X and Y directions.
Parameters
----------
cam_file : :class:`gerber.cam.CamFile` subclass
Gerber or Excellon file to offset
x_offset : float
Amount to offset the file in the X direction
y_offset : float
Amount to offset the file in the Y direction
Returns
-------
cam_file : :class:`gerber.cam.CamFile` subclass
An offset deep copy of the source file.
"""
cam_file = copy.deepcopy(cam_file)
cam_file.offset(x_offset, y_offset)
return cam_file
def scale(cam_file, x_scale, y_scale):
""" Scale a Cam file by a specified amount in the X and Y directions.
Parameters
----------
cam_file : :class:`gerber.cam.CamFile` subclass
Gerber or Excellon file to scale
x_scale : float
X-axis scale factor
y_scale : float
Y-axis scale factor
Returns
-------
cam_file : :class:`gerber.cam.CamFile` subclass
An scaled deep copy of the source file.
"""
# TODO
pass
def rotate(cam_file, angle):
""" Rotate a Cam file a specified amount about the origin.
Parameters
----------
cam_file : :class:`gerber.cam.CamFile` subclass
Gerber or Excellon file to rotate
angle : float
Angle to rotate the file in degrees.
Returns
-------
cam_file : :class:`gerber.cam.CamFile` subclass
An rotated deep copy of the source file.
"""
# TODO
pass

View file

@ -60,6 +60,13 @@ class LengthUnit:
else:
return id(self) == id(other)
# This class is a singleton, we don't want copies around
def __copy__(self):
return self
def __deepcopy__(self, memo):
return self
MILLIMETERS_PER_INCH = 25.4
Inch = LengthUnit('inch', 'in', MILLIMETERS_PER_INCH)