- fixed the scale, mirror, rotate, skew functions to work with Geometry Objects of multi-geometry type.

This commit is contained in:
Marius Stanciu 2019-01-29 15:56:49 +02:00 committed by Marius
parent 32aa37d793
commit 5a0390f2a4
3 changed files with 44 additions and 12 deletions

View File

@ -3491,16 +3491,32 @@ class FlatCAMGeometry(FlatCAMObj, Geometry):
else:
px, py = point
if type(self.solid_geometry) == list:
geo_list = self.flatten(self.solid_geometry)
self.solid_geometry = []
# for g in geo_list:
# self.solid_geometry.append(affinity.scale(g, xfactor, yfactor, origin=(px, py)))
self.solid_geometry = [affinity.scale(g, xfactor, yfactor, origin=(px, py))
for g in geo_list]
# if type(self.solid_geometry) == list:
# geo_list = self.flatten(self.solid_geometry)
# self.solid_geometry = []
# # for g in geo_list:
# # self.solid_geometry.append(affinity.scale(g, xfactor, yfactor, origin=(px, py)))
# self.solid_geometry = [affinity.scale(g, xfactor, yfactor, origin=(px, py))
# for g in geo_list]
# else:
# self.solid_geometry = affinity.scale(self.solid_geometry, xfactor, yfactor,
# origin=(px, py))
# self.app.inform.emit("[success]Geometry Scale done.")
def scale_recursion(geom):
if type(geom) == list:
geoms=list()
for local_geom in geom:
geoms.append(scale_recursion(local_geom))
return geoms
else:
return affinity.scale(geom, xfactor, yfactor, origin=(px, py))
if self.multigeo is True:
for tool in self.tools:
self.tools[tool]['solid_geometry'] = scale_recursion(self.tools[tool]['solid_geometry'])
else:
self.solid_geometry = affinity.scale(self.solid_geometry, xfactor, yfactor,
origin=(px, py))
self.solid_geometry=scale_recursion(self.solid_geometry)
self.app.inform.emit("[success]Geometry Scale done.")
def offset(self, vect):

View File

@ -16,6 +16,8 @@ CAD program, and create G-Code for Isolation routing.
- added more shortcut keys in the Geometry Editor and in Excellon Editor; activated also the zoom (fit, in, out) shortcut keys ('1' , '2', '3') for the editors
- disabled the context menu in tools table on Paint Tool in case that the painting method is single.
- added protection when trying to do Intersection in Geometry Editor without having selected Geometry items.
- fixed the scale, mirror, rotate, skew functions to work with Geometry Objects of multi-geometry type.
28.01.2018

View File

@ -1354,11 +1354,17 @@ class Geometry(object):
return affinity.scale(obj, xscale, yscale, origin=(px,py))
try:
self.solid_geometry = mirror_geom(self.solid_geometry)
if self.multigeo is True:
for tool in self.tools:
self.tools[tool]['solid_geometry'] = mirror_geom(self.tools[tool]['solid_geometry'])
else:
self.solid_geometry = mirror_geom(self.solid_geometry)
self.app.inform.emit('[success]Object was mirrored ...')
except AttributeError:
self.app.inform.emit("[error_notcl] Failed to mirror. No object selected")
def rotate(self, angle, point):
"""
Rotate an object by an angle (in degrees) around the provided coordinates.
@ -1388,7 +1394,11 @@ class Geometry(object):
return affinity.rotate(obj, angle, origin=(px, py))
try:
self.solid_geometry = rotate_geom(self.solid_geometry)
if self.multigeo is True:
for tool in self.tools:
self.tools[tool]['solid_geometry'] = rotate_geom(self.tools[tool]['solid_geometry'])
else:
self.solid_geometry = rotate_geom(self.solid_geometry)
self.app.inform.emit('[success]Object was rotated ...')
except AttributeError:
self.app.inform.emit("[error_notcl] Failed to rotate. No object selected")
@ -1420,7 +1430,11 @@ class Geometry(object):
return affinity.skew(obj, angle_x, angle_y, origin=(px, py))
try:
self.solid_geometry = skew_geom(self.solid_geometry)
if self.multigeo is True:
for tool in self.tools:
self.tools[tool]['solid_geometry'] = skew_geom(self.tools[tool]['solid_geometry'])
else:
self.solid_geometry = skew_geom(self.solid_geometry)
self.app.inform.emit('[success]Object was skewed ...')
except AttributeError:
self.app.inform.emit("[error_notcl] Failed to skew. No object selected")