inkstitch/lib/extensions/flip.py

41 wiersze
1.1 KiB
Python
Czysty Zwykły widok Historia

import inkex
import cubicsuperpath
2018-07-07 19:31:59 +00:00
from shapely import geometry as shgeo
from .base import InkstitchExtension
from ..i18n import _
from ..elements import SatinColumn
2018-08-22 00:32:50 +00:00
class Flip(InkstitchExtension):
2018-07-07 19:31:59 +00:00
def subpath_to_linestring(self, subpath):
return shgeo.LineString()
def flip(self, satin):
2018-07-07 19:31:59 +00:00
csp = satin.path
if len(csp) > 1:
2018-07-07 19:31:59 +00:00
flattened = satin.flatten(csp)
# find the rails (the two longest paths) and swap them
indices = range(len(csp))
2018-07-07 19:31:59 +00:00
indices.sort(key=lambda i: shgeo.LineString(flattened[i]).length, reverse=True)
first = indices[0]
second = indices[1]
csp[first], csp[second] = csp[second], csp[first]
satin.node.set("d", cubicsuperpath.formatPath(csp))
def effect(self):
if not self.get_elements():
return
if not self.selected:
inkex.errormsg(_("Please select one or more satin columns to flip."))
return
for element in self.elements:
if isinstance(element, SatinColumn):
self.flip(element)