- 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:
|
else:
|
||||||
px, py = point
|
px, py = point
|
||||||
|
|
||||||
if type(self.solid_geometry) == list:
|
# if type(self.solid_geometry) == list:
|
||||||
geo_list = self.flatten(self.solid_geometry)
|
# geo_list = self.flatten(self.solid_geometry)
|
||||||
self.solid_geometry = []
|
# self.solid_geometry = []
|
||||||
# for g in geo_list:
|
# # for g in geo_list:
|
||||||
# self.solid_geometry.append(affinity.scale(g, xfactor, yfactor, origin=(px, py)))
|
# # self.solid_geometry.append(affinity.scale(g, xfactor, yfactor, origin=(px, py)))
|
||||||
self.solid_geometry = [affinity.scale(g, xfactor, yfactor, origin=(px, py))
|
# self.solid_geometry = [affinity.scale(g, xfactor, yfactor, origin=(px, py))
|
||||||
for g in geo_list]
|
# 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:
|
else:
|
||||||
self.solid_geometry = affinity.scale(self.solid_geometry, xfactor, yfactor,
|
self.solid_geometry=scale_recursion(self.solid_geometry)
|
||||||
origin=(px, py))
|
|
||||||
self.app.inform.emit("[success]Geometry Scale done.")
|
self.app.inform.emit("[success]Geometry Scale done.")
|
||||||
|
|
||||||
def offset(self, vect):
|
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
|
- 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.
|
- 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.
|
- 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
|
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))
|
return affinity.scale(obj, xscale, yscale, origin=(px,py))
|
||||||
|
|
||||||
try:
|
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 ...')
|
self.app.inform.emit('[success]Object was mirrored ...')
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
self.app.inform.emit("[error_notcl] Failed to mirror. No object selected")
|
self.app.inform.emit("[error_notcl] Failed to mirror. No object selected")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def rotate(self, angle, point):
|
def rotate(self, angle, point):
|
||||||
"""
|
"""
|
||||||
Rotate an object by an angle (in degrees) around the provided coordinates.
|
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))
|
return affinity.rotate(obj, angle, origin=(px, py))
|
||||||
|
|
||||||
try:
|
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 ...')
|
self.app.inform.emit('[success]Object was rotated ...')
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
self.app.inform.emit("[error_notcl] Failed to rotate. No object selected")
|
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))
|
return affinity.skew(obj, angle_x, angle_y, origin=(px, py))
|
||||||
|
|
||||||
try:
|
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 ...')
|
self.app.inform.emit('[success]Object was skewed ...')
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
self.app.inform.emit("[error_notcl] Failed to skew. No object selected")
|
self.app.inform.emit("[error_notcl] Failed to skew. No object selected")
|
||||||
|
|
Loading…
Reference in New Issue