This repository has been archived on 2023-03-25. You can view files and clone it, but cannot push or open issues or pull requests.
mightyscape-1.1-deprecated/extensions/fablabchemnitz/small_things_filter.py

46 lines
1.9 KiB
Python

#!/usr/bin/env python3
import inkex
import svgpathtools
def isclosedac(p):
return abs(p.start-p.end) < 1e-6
class SmallThingsFilter(inkex.EffectExtension):
def add_arguments(self, pars):
pars.add_argument('--unit')
pars.add_argument('--threshold', type=float, help='Remove paths with an threshold smaller than this value')
pars.add_argument('--measure', default="length")
def effect(self):
self.options.threshold = self.svg.unittouu(str(self.options.threshold) + self.svg.unit)
unit_factor = 1.0 / self.svg.uutounit(1.0,self.options.unit)
if self.options.threshold == 0:
return
for path in self.document.xpath("//svg:path", namespaces=inkex.NSS):
try:
parsed_path = svgpathtools.parse_path(path.attrib["d"])
#if not isclosedac(parsed_path):
# continue
if self.options.measure == "area":
calc = parsed_path.area()
#inkex.utils.debug(calc) #print calculated area with document units
#inkex.utils.debug(str(self.options.threshold * (unit_factor * unit_factor))) #print threshold area with selected units
if calc < (self.options.threshold * (unit_factor * unit_factor)):
path.getparent().remove(path)
else: #length
calc = parsed_path.length()
#inkex.utils.debug(calc) #print calculated area with document units
#inkex.utils.debug(str(self.options.threshold * (unit_factor * unit_factor))) #print threshold area with selected units
if calc < (self.options.threshold * unit_factor):
path.getparent().remove(path)
except:
pass
if __name__ == '__main__':
SmallThingsFilter().run()