Another set of reintegrated extensions
This commit is contained in:
21
extensions/fablabchemnitz/set_view_box/meta.json
Normal file
21
extensions/fablabchemnitz/set_view_box/meta.json
Normal file
@ -0,0 +1,21 @@
|
||||
[
|
||||
{
|
||||
"name": "Set View Box (Replaced by CTRL + SHIFT + R)",
|
||||
"id": "fablabchemnitz.de.set_view_box",
|
||||
"path": "set_view_box",
|
||||
"dependent_extensions": null,
|
||||
"original_name": "Set viewBox",
|
||||
"original_id": "org.pernsteiner.inkscape.viewbox",
|
||||
"license": "BSD-2-Clause License",
|
||||
"license_url": "http://www.pernsteiner.org/inkscape/viewbox/inkscape-viewbox-0.1.0.zip",
|
||||
"comment": "ported to Inkscape v1 manually by Mario Voigt",
|
||||
"source_url": "https://gitea.fablabchemnitz.de/FabLab_Chemnitz/mightyscape-1.2/src/branch/master/extensions/fablabchemnitz/set_view_box",
|
||||
"fork_url": "http://www.pernsteiner.org/inkscape/viewbox",
|
||||
"documentation_url": "https://stadtfabrikanten.org/pages/viewpage.action?pageId=74645779",
|
||||
"inkscape_gallery_url": null,
|
||||
"main_authors": [
|
||||
"pernsteiger.org/Stuart Pernsteiner",
|
||||
"github.com/eridur-de"
|
||||
]
|
||||
}
|
||||
]
|
16
extensions/fablabchemnitz/set_view_box/set_view_box.inx
Normal file
16
extensions/fablabchemnitz/set_view_box/set_view_box.inx
Normal file
@ -0,0 +1,16 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
|
||||
<name>Set View Box</name>
|
||||
<id>fablabchemnitz.de.set_view_box</id>
|
||||
<effect>
|
||||
<object-type>rect</object-type>
|
||||
<effects-menu>
|
||||
<submenu name="FabLab Chemnitz">
|
||||
<submenu name="Transformations"/>
|
||||
</submenu>
|
||||
</effects-menu>
|
||||
</effect>
|
||||
<script>
|
||||
<command location="inx" interpreter="python">set_view_box.py</command>
|
||||
</script>
|
||||
</inkscape-extension>
|
71
extensions/fablabchemnitz/set_view_box/set_view_box.py
Normal file
71
extensions/fablabchemnitz/set_view_box/set_view_box.py
Normal file
@ -0,0 +1,71 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
# Copyright (c) 2012 Stuart Pernsteiner
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are met:
|
||||
#
|
||||
# 1. Redistributions of source code must retain the above copyright notice,
|
||||
# this list of conditions and the following disclaimer.
|
||||
# 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
# this list of conditions and the following disclaimer in the documentation
|
||||
# and/or other materials provided with the distribution.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
|
||||
# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
|
||||
# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
||||
# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
import sys
|
||||
import inkex
|
||||
from inkex import Transform
|
||||
|
||||
class SetViewBox(inkex.EffectExtension):
|
||||
|
||||
def effect(self):
|
||||
if len(self.svg.selected) != 1:
|
||||
sys.exit("Error: You must select exactly one rectangle")
|
||||
if list(self.svg.selected.items())[0][1].tag != inkex.addNS('rect','svg'):
|
||||
sys.exit("Error: You must select exactly one rectangle")
|
||||
|
||||
sel = None
|
||||
for pathId in self.svg.selected:
|
||||
sel = self.svg.selected[pathId]
|
||||
|
||||
mat = [[1,0,0],[0,1,0]]
|
||||
cur = sel
|
||||
while cur is not None:
|
||||
curMat = Transform(cur.get('transform'))
|
||||
mat = Transform(curMat) @ Transform(mat)
|
||||
cur = cur.getparent()
|
||||
|
||||
[x,y,w,h] = map(lambda attr: float(sel.get(attr)),
|
||||
['x','y','width','height'])
|
||||
|
||||
(x1,y1) = transformPoint(mat, (x,y))
|
||||
(x2,y2) = transformPoint(mat, (x+w,y+h))
|
||||
|
||||
ww = x2-x1
|
||||
hh = y2-y1
|
||||
|
||||
format_units = inkex.units.parse_unit(self.svg.get('width'))[1] #get the "Format:" unit at "Display tab"
|
||||
|
||||
root = self.svg.getElement('//svg:svg');
|
||||
root.set('viewBox', '%f %f %f %f' % (x1,y1,ww,hh))
|
||||
root.set('width', str(ww) + format_units)
|
||||
root.set('height', str(hh) + format_units)
|
||||
|
||||
def transformPoint(mat, pt):
|
||||
pt2 = [pt[0], pt[1]]
|
||||
Transform(mat).apply_to_point(pt2)
|
||||
return (pt2[0], pt2[1])
|
||||
|
||||
if __name__ == '__main__':
|
||||
SetViewBox().run()
|
Reference in New Issue
Block a user