59 lines
1.6 KiB
Python
59 lines
1.6 KiB
Python
#!/usr/bin/env python2
|
|
|
|
import sys
|
|
sys.path.append('/usr/share/inkscape/extensions')
|
|
|
|
from collections import defaultdict
|
|
|
|
from inkex import Effect as InkscapeEffect
|
|
from inkex import etree, addNS
|
|
|
|
from simpletransform import computeBBox, applyTransformToNode
|
|
from simplestyle import formatStyle
|
|
from simplepath import parsePath, translatePath, formatPath
|
|
|
|
class DrawBBoxes(InkscapeEffect):
|
|
def __init__(self):
|
|
InkscapeEffect.__init__(self)
|
|
self.filename = sys.argv[-1]
|
|
|
|
def effect(self):
|
|
if len(self.selected) > 0:
|
|
bboxes = self.calculate_bboxes(self.selected)
|
|
for id, node, bbox in bboxes:
|
|
self.draw_bbox(bbox)
|
|
|
|
def calculate_bboxes(self, nodes):
|
|
bboxes = [(id, node, computeBBox([node]))
|
|
for id, node in nodes.items()]
|
|
|
|
return bboxes
|
|
|
|
def draw_bbox(self, bbox):
|
|
(x1, x2, y1, y2) = bbox
|
|
width = x2 - x1
|
|
height = y2 - y1
|
|
self.draw_rect(x1, y1, width, height)
|
|
|
|
#SVG element generation routine
|
|
def draw_rect(self, x, y, width, height):
|
|
layer = self.current_layer
|
|
|
|
style = { 'stroke' : '#ff0000',
|
|
'stroke-width' : '1',
|
|
'fill' : 'none',
|
|
}
|
|
|
|
attribs = {
|
|
'style' : formatStyle(style),
|
|
'x' : str(x),
|
|
'y' : str(y),
|
|
'width' : str(width),
|
|
'height' : str(height),
|
|
}
|
|
|
|
rect = etree.SubElement(layer, addNS('rect','svg'), attribs )
|
|
|
|
effect = DrawBBoxes()
|
|
effect.affect()
|