#!/usr/bin/env python import math, tempfile, copy, cPickle, inkex def findend(d): end = [] subPathStart = [] for cmd,params in d: if cmd == 'M': subPathStart = params[-2:] if cmd == 'Z': end = subPathStart[:] else: end = params[-2:] return end class Kochify(inkex.Effect): def effect(self): try: f = open(tempfile.gettempdir() + '/kochify.bin', 'r') proto = cPickle.load(f) f.close() except: return False for id, node in self.selected.iteritems(): if node.tagName == 'path': d = node.attributes.getNamedItem('d') p = inkex.parsePath(d.value) last = p[0][1][-2:] subPathStart = [] cur = [] new = [] for i in range(len(p)): rep = copy.deepcopy(proto['path']) cmd, params = p[i] if cmd == 'M': subPathStart = params[-2:] new.append(copy.deepcopy(p[i])) continue if cmd == 'Z': cur = subPathStart[:] else: cur = params[-2:] if last == cur: continue dx = cur[0]-last[0] dy = cur[1]-last[1] length = math.sqrt((dx**2) + (dy**2)) angle = math.atan2(dy,dx) scale = length / proto['length'] rotate = angle - proto['angle'] inkex.scalePath(rep,scale,scale) inkex.rotatePath(rep, rotate) repend = findend(rep) transx = cur[0] - repend[0] transy = cur[1] - repend[1] inkex.translatePath(rep, transx, transy) new.extend(rep[1:]) last = cur[:] d.value = inkex.formatPath(new) e = Kochify() e.affect()