Added Filter to Layer
This commit is contained in:
parent
433caa5aed
commit
80a28a8d59
21
extensions/fablabchemnitz/filter_layer.inx
Normal file
21
extensions/fablabchemnitz/filter_layer.inx
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
|
||||||
|
<name>Filter To Layer</name>
|
||||||
|
<id>fablabchemnitz.de.filter_layer</id>
|
||||||
|
<param name="type" type="optiongroup" gui-text="Filter to current layer:">
|
||||||
|
<option>Add</option>
|
||||||
|
<option>Remove</option>
|
||||||
|
</param>
|
||||||
|
<param name="help-info" type="description">Filter from selected item: Apply only for the future draws and for selected item. Problem: you can't add more live effects to elements.</param>
|
||||||
|
<effect needs-document="no">
|
||||||
|
<object-type>all</object-type>
|
||||||
|
<effects-menu>
|
||||||
|
<submenu name="FabLab Chemnitz">
|
||||||
|
<submenu name="Groups and Layers"/>
|
||||||
|
</submenu>
|
||||||
|
</effects-menu>
|
||||||
|
</effect>
|
||||||
|
<script>
|
||||||
|
<command location="inx" interpreter="python">filter_layer.py</command>
|
||||||
|
</script>
|
||||||
|
</inkscape-extension>
|
85
extensions/fablabchemnitz/filter_layer.py
Normal file
85
extensions/fablabchemnitz/filter_layer.py
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
'''
|
||||||
|
This extension adds or removes filters to current layer
|
||||||
|
|
||||||
|
Copyright (C) 2012 Jabiertxo Arraiza, jabier.arraiza@marker.es
|
||||||
|
|
||||||
|
Version 0.3
|
||||||
|
|
||||||
|
TODO:
|
||||||
|
Comment Better!!!
|
||||||
|
|
||||||
|
CHANGE LOG
|
||||||
|
0.1 Start 30/07/2012
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
'''
|
||||||
|
|
||||||
|
import inkex
|
||||||
|
import sys
|
||||||
|
import re
|
||||||
|
|
||||||
|
class FilterAndLiveEffectsLayer(inkex.Effect):
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
inkex.Effect.__init__(self)
|
||||||
|
self.arg_parser.add_argument('--type', default = 'Add', help = 'Add or remove filters to current layer')
|
||||||
|
|
||||||
|
def selectTop(self):
|
||||||
|
selected = []
|
||||||
|
selectedSorted = None
|
||||||
|
if self.svg.selected is not None:
|
||||||
|
for id, node in self.svg.selected.items():
|
||||||
|
selected.append(id)
|
||||||
|
for node in self.document.getroot().iter():
|
||||||
|
idNode = node.get("id")
|
||||||
|
if idNode in selected:
|
||||||
|
selectedSorted = node
|
||||||
|
return selectedSorted
|
||||||
|
|
||||||
|
def effect(self):
|
||||||
|
svg = self.document.getroot()
|
||||||
|
typeOperation = self.options.type
|
||||||
|
xpathStr = '//sodipodi:namedview'
|
||||||
|
namedview = svg.xpath(xpathStr, namespaces=inkex.NSS)
|
||||||
|
idLayer = namedview[0].get('{http://www.inkscape.org/namespaces/inkscape}current-layer');
|
||||||
|
xpathStr = '//svg:g[@id="'+idLayer+'"]'
|
||||||
|
layer = svg.xpath(xpathStr, namespaces=inkex.NSS)
|
||||||
|
if typeOperation == "Add":
|
||||||
|
element = self.selectTop()
|
||||||
|
if element is not None:
|
||||||
|
if element.get('style'):
|
||||||
|
matchObj = re.search( r'filter:url\(#.*?[^\)]\)', element.get('style'), re.M|re.I)
|
||||||
|
if matchObj:
|
||||||
|
filter = matchObj.group()
|
||||||
|
element.set('style',element.get('style').replace(filter,"").replace(";;",";"))
|
||||||
|
if layer[0].get('style'):
|
||||||
|
matchObj = re.search( r'filter:url\(#.*?[^\)]\)', layer[0].get('style'), re.M|re.I)
|
||||||
|
if matchObj:
|
||||||
|
element.set('style',element.get('style').replace(matchObj.group(),"").replace(";;",";"))
|
||||||
|
style = layer[0].get('style')+ ";" + filter;
|
||||||
|
layer[0].set('style',style.replace(";;",";"))
|
||||||
|
else:
|
||||||
|
layer[0].set('style',filter)
|
||||||
|
else:
|
||||||
|
inkex.utils.debug("Nothing selected")
|
||||||
|
else: #Remove action
|
||||||
|
if layer[0].get('style'):
|
||||||
|
matchObj = re.search( r'filter:url\(#.*?[^\)]\)', layer[0].get('style'), re.M|re.I)
|
||||||
|
if matchObj:
|
||||||
|
layer[0].set('style',layer[0].get('style').replace(matchObj.group(),"").replace(";;",";"))
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
FilterAndLiveEffectsLayer().run()
|
Reference in New Issue
Block a user