This commit is contained in:
Juan Pablo Caram 2016-06-04 23:01:36 -04:00
parent eb18b7fd3f
commit 9f138bdcc2
2 changed files with 54 additions and 31 deletions

View File

@ -162,8 +162,10 @@ class DblSidedTool(FlatCAMTool):
# For now, lets limit to Gerbers and Excellons.
# assert isinstance(gerb, FlatCAMGerber)
if not isinstance(fcobj, FlatCAMGerber) and not isinstance(fcobj, FlatCAMExcellon):
self.info("ERROR: Only Gerber and Excellon objects can be mirrored.")
if not isinstance(fcobj, FlatCAMGerber) and \
not isinstance(fcobj, FlatCAMExcellon) and \
not isinstance(fcobj, FlatCAMGeometry):
self.info("ERROR: Only Gerber, Excellon and Geometry objects can be mirrored.")
return
axis = self.mirror_axis.get_value()

View File

@ -912,6 +912,27 @@ class Geometry(object):
svg_elem = geom.svg(scale_factor=scale_factor)
return svg_elem
def mirror(self, axis, point):
"""
Mirrors the object around a specified axis passign through
the given point.
:param axis: "X" or "Y" indicates around which axis to mirror.
:type axis: str
:param point: [x, y] point belonging to the mirror axis.
:type point: list
:return: None
"""
px, py = point
xscale, yscale = {"X": (1.0, -1.0), "Y": (-1.0, 1.0)}[axis]
## solid_geometry ???
# It's a cascaded union of objects.
self.solid_geometry = affinity.scale(self.solid_geometry,
xscale, yscale, origin=(px, py))
class ApertureMacro:
"""
Syntax of aperture macros.
@ -1496,35 +1517,35 @@ class Gerber (Geometry):
## Solid geometry
self.solid_geometry = affinity.translate(self.solid_geometry, xoff=dx, yoff=dy)
def mirror(self, axis, point):
"""
Mirrors the object around a specified axis passign through
the given point. What is affected:
* ``buffered_paths``
* ``flash_geometry``
* ``solid_geometry``
* ``regions``
NOTE:
Does not modify the data used to create these elements. If these
are recreated, the scaling will be lost. This behavior was modified
because of the complexity reached in this class.
:param axis: "X" or "Y" indicates around which axis to mirror.
:type axis: str
:param point: [x, y] point belonging to the mirror axis.
:type point: list
:return: None
"""
px, py = point
xscale, yscale = {"X": (1.0, -1.0), "Y": (-1.0, 1.0)}[axis]
## solid_geometry ???
# It's a cascaded union of objects.
self.solid_geometry = affinity.scale(self.solid_geometry,
xscale, yscale, origin=(px, py))
# def mirror(self, axis, point):
# """
# Mirrors the object around a specified axis passign through
# the given point. What is affected:
#
# * ``buffered_paths``
# * ``flash_geometry``
# * ``solid_geometry``
# * ``regions``
#
# NOTE:
# Does not modify the data used to create these elements. If these
# are recreated, the scaling will be lost. This behavior was modified
# because of the complexity reached in this class.
#
# :param axis: "X" or "Y" indicates around which axis to mirror.
# :type axis: str
# :param point: [x, y] point belonging to the mirror axis.
# :type point: list
# :return: None
# """
#
# px, py = point
# xscale, yscale = {"X": (1.0, -1.0), "Y": (-1.0, 1.0)}[axis]
#
# ## solid_geometry ???
# # It's a cascaded union of objects.
# self.solid_geometry = affinity.scale(self.solid_geometry,
# xscale, yscale, origin=(px, py))
def aperture_parse(self, apertureId, apertureType, apParameters):
"""