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. # For now, lets limit to Gerbers and Excellons.
# assert isinstance(gerb, FlatCAMGerber) # assert isinstance(gerb, FlatCAMGerber)
if not isinstance(fcobj, FlatCAMGerber) and not isinstance(fcobj, FlatCAMExcellon): if not isinstance(fcobj, FlatCAMGerber) and \
self.info("ERROR: Only Gerber and Excellon objects can be mirrored.") not isinstance(fcobj, FlatCAMExcellon) and \
not isinstance(fcobj, FlatCAMGeometry):
self.info("ERROR: Only Gerber, Excellon and Geometry objects can be mirrored.")
return return
axis = self.mirror_axis.get_value() axis = self.mirror_axis.get_value()

View File

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