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/epilog_bbox_adjust.py

44 lines
1.9 KiB
Python
Raw Normal View History

2021-04-21 10:48:01 +02:00
#!/usr/bin/env python3
'''
2021-04-21 10:53:20 +02:00
Extension for InkScape 1.0
Features
- This tool is a helper to adjust the document border including an offset value, which is added.
2021-04-21 10:48:01 +02:00
Sending vector data to Epilog Dashboard often results in trimmed paths. This leads to wrong geometry where the laser misses to cut them.
2021-04-21 10:53:20 +02:00
So we add a default (small) amount of 1.0 doc units to expand the document's canvas
Author: Mario Voigt / FabLab Chemnitz
Mail: mario.voigt@stadtfabrikanten.org
Date: 21.04.2021
Last patch: 21.04.2021
License: GNU GPL v3
2021-04-21 10:48:01 +02:00
'''
import inkex
from inkex import Transform
class BBoxAdjust(inkex.EffectExtension):
def effect(self):
offset = 1.0 #in documents' units
# create a new bounding box and get the bbox size of all elements of the document (we cannot use the page's bbox)
bbox = inkex.BoundingBox()
for element in self.svg.root.getchildren():
if isinstance (element, inkex.ShapeElement):
bbox += element.bounding_box()
# adjust the viewBox to the bbox size and add the desired offset
2021-05-07 22:51:41 +02:00
# note from 07.05.2021: seems if the following order is viewBox/width/height, or width/height/viewBox, the units are not respected. So me mess around a little bit
2021-04-21 10:48:01 +02:00
self.document.getroot().attrib['width'] = f'{bbox.width + offset * 2}' + self.svg.unit
2021-05-07 22:51:41 +02:00
self.document.getroot().attrib['viewBox'] = f'{-offset} {-offset} {bbox.width + offset * 2} {bbox.height + offset * 2}'
2021-04-21 10:48:01 +02:00
self.document.getroot().attrib['height'] = f'{bbox.height + offset * 2}' + self.svg.unit
# translate all elements to fit the adjusted viewBox
mat = Transform("translate(%f, %f)" % (-bbox.left,-bbox.top)).matrix
for element in self.svg.root.getchildren():
if isinstance (element, inkex.ShapeElement):
element.transform = Transform(mat) * element.transform
if __name__ == '__main__':
BBoxAdjust().run()