- fixed the scale, mirror, rotate, skew functions to work with Geometry Objects of multi-geometry type.
This commit is contained in:
parent
32aa37d793
commit
5a0390f2a4
|
@ -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):
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
20
camlib.py
20
camlib.py
|
@ -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")
|
||||
|
|
Loading…
Reference in New Issue