Fix old gerber tests
This commit is contained in:
parent
d85790bc6d
commit
9e86bf6b3e
6 changed files with 15 additions and 134 deletions
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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'):
|
||||
|
|
|
|||
|
|
@ -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}>'
|
||||
|
|
|
|||
|
|
@ -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 = []
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue