Made scale_factor optional for cli, added more comments, removed redundant code
This commit is contained in:
parent
ee43d8b920
commit
039a2dd4dc
|
@ -1710,7 +1710,7 @@ class App(QtCore.QObject):
|
|||
self.inform.emit("Project copy saved to: " + self.project_filename)
|
||||
|
||||
|
||||
def export_svg(self, obj_name, filename, outname=None):
|
||||
def export_svg(self, obj_name, filename, scale_factor=0.00):
|
||||
"""
|
||||
Exports a Geometry Object to a SVG File
|
||||
|
||||
|
@ -1726,11 +1726,7 @@ class App(QtCore.QObject):
|
|||
return "Could not retrieve object: %s" % obj_name
|
||||
|
||||
with self.proc_container.new("Exporting SVG") as proc:
|
||||
exported_svg = obj.export_svg()
|
||||
|
||||
# Sometimes obj.solid_geometry can be a list instead of a Shapely class
|
||||
# Make sure we see it as a Shapely Geometry class
|
||||
geom = cascaded_union(obj.flatten())
|
||||
exported_svg = obj.export_svg(scale_factor=scale_factor)
|
||||
|
||||
# Determine bounding area for svg export
|
||||
bounds = obj.bounds()
|
||||
|
@ -2206,9 +2202,16 @@ class App(QtCore.QObject):
|
|||
|
||||
return str(self.collection.get_names())
|
||||
|
||||
def export_svg(name, filename):
|
||||
def export_svg(name, filename, *args):
|
||||
a, kwa = h(*args)
|
||||
types = {'scale_factor': float}
|
||||
|
||||
self.export_svg(str(name), str(filename))
|
||||
for key in kwa:
|
||||
if key not in types:
|
||||
return 'Unknown parameter: %s' % key
|
||||
kwa[key] = types[key](kwa[key])
|
||||
|
||||
self.export_svg(str(name), str(filename), **kwa)
|
||||
|
||||
def import_svg(filename, *args):
|
||||
a, kwa = h(*args)
|
||||
|
@ -3329,9 +3332,10 @@ class App(QtCore.QObject):
|
|||
'export_svg': {
|
||||
'fcn': export_svg,
|
||||
'help': "Export a Geometry Object as a SVG File\n" +
|
||||
"> export_svg <name> <filename>\n" +
|
||||
"> export_svg <name> <filename> [-scale_factor <0.0 (float)>]\n" +
|
||||
" name: Name of the geometry object to export.\n" +
|
||||
" filename: Path to the file to export."
|
||||
" filename: Path to the file to export.\n" +
|
||||
" scale_factor: Multiplication factor used for scaling line widths during export."
|
||||
},
|
||||
'open_gerber': {
|
||||
'fcn': open_gerber,
|
||||
|
|
40
camlib.py
40
camlib.py
|
@ -869,18 +869,25 @@ class Geometry(object):
|
|||
"""
|
||||
self.solid_geometry = [cascaded_union(self.solid_geometry)]
|
||||
|
||||
def export_svg(self):
|
||||
def export_svg(self, scale_factor=0.00):
|
||||
"""
|
||||
Exports the Gemoetry Object as a SVG Element
|
||||
|
||||
:return: SVG Element
|
||||
"""
|
||||
# Sometimes self.solid_geometry can be a list instead of a Shapely class
|
||||
# Make sure we see it as a Shapely Geometry class
|
||||
# Make sure we see a Shapely Geometry class and not a list
|
||||
geom = cascaded_union(self.flatten())
|
||||
|
||||
# scale_factor is a multiplication factor for the SVG stroke-width used within shapely's svg export
|
||||
|
||||
# If 0 or less which is invalid then default to 0.05
|
||||
# This value appears to work for zooming, and getting the output svg line width
|
||||
# to match that viewed on screen with FlatCam
|
||||
if scale_factor <= 0:
|
||||
scale_factor = 0.05
|
||||
|
||||
# Convert to a SVG
|
||||
svg_elem = geom.svg(scale_factor=0.05)
|
||||
svg_elem = geom.svg(scale_factor=scale_factor)
|
||||
return svg_elem
|
||||
|
||||
class ApertureMacro:
|
||||
|
@ -3326,17 +3333,26 @@ class CNCjob(Geometry):
|
|||
|
||||
self.create_geometry()
|
||||
|
||||
def export_svg(self):
|
||||
def export_svg(self, scale_factor=0.00):
|
||||
"""
|
||||
Exports the CNC Job as a SVG Element
|
||||
|
||||
:return: SVG Element
|
||||
:scale_factor: float
|
||||
:return: SVG Element string
|
||||
"""
|
||||
# scale_factor is a multiplication factor for the SVG stroke-width used within shapely's svg export
|
||||
# If not specified then try and use the tool diameter
|
||||
# This way what is on screen will match what is outputed for the svg
|
||||
# This is quite a useful feature for svg's used with visicut
|
||||
|
||||
# This appears to match up distance wise with inkscape
|
||||
scale = self.options['tooldia'] / 2
|
||||
if scale == 0:
|
||||
scale = 0.05
|
||||
if scale_factor <= 0:
|
||||
scale_factor = self.options['tooldia'] / 2
|
||||
|
||||
# If still 0 then defailt to 0.05
|
||||
# This value appears to work for zooming, and getting the output svg line width
|
||||
# to match that viewed on screen with FlatCam
|
||||
if scale_factor == 0:
|
||||
scale_factor = 0.05
|
||||
|
||||
# Seperate the list of cuts and travels into 2 distinct lists
|
||||
# This way we can add different formatting / colors to both
|
||||
|
@ -3360,9 +3376,9 @@ class CNCjob(Geometry):
|
|||
# It's better to have the travels sitting underneath the cuts for visicut
|
||||
svg_elem = ""
|
||||
if travels:
|
||||
svg_elem = travelsgeom.svg(scale_factor=scale, stroke_color="#F0E24D")
|
||||
svg_elem = travelsgeom.svg(scale_factor=scale_factor, stroke_color="#F0E24D")
|
||||
if cuts:
|
||||
svg_elem += cutsgeom.svg(scale_factor=scale, stroke_color="#5E6CFF")
|
||||
svg_elem += cutsgeom.svg(scale_factor=scale_factor, stroke_color="#5E6CFF")
|
||||
|
||||
return svg_elem
|
||||
|
||||
|
|
Loading…
Reference in New Issue