From 2b3715898e32d3ac2002cd4bb909e2aacab02971 Mon Sep 17 00:00:00 2001 From: Alvin Penner Date: Wed, 3 Oct 2012 19:27:07 -0400 Subject: extensions. Extrude. allow selection of multiple objects (Bug 1055155) Fixed bugs: - https://launchpad.net/bugs/1055155 (bzr r11734) --- share/extensions/extrude.inx | 28 ++++++++-------- share/extensions/extrude.py | 79 ++++++++++++++++++++++---------------------- 2 files changed, 53 insertions(+), 54 deletions(-) diff --git a/share/extensions/extrude.inx b/share/extensions/extrude.inx index dfae5d825..02a1bd803 100644 --- a/share/extensions/extrude.inx +++ b/share/extensions/extrude.inx @@ -1,20 +1,20 @@ - <_name>Extrude - org.greygreen.inkscape.effects.extrude + <_name>Extrude + org.greygreen.inkscape.effects.extrude extrude.py inkex.py - - <_item>Lines - <_item>Polygons - - + + <_item value="Lines">Lines + <_item value="Polygons">Polygons + + path - - - - - + + + + + diff --git a/share/extensions/extrude.py b/share/extensions/extrude.py index 88ad26e49..0720ee24b 100755 --- a/share/extensions/extrude.py +++ b/share/extensions/extrude.py @@ -16,10 +16,10 @@ 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 sys, os -sys.path.append(os.path.dirname(sys.argv[0])) #? -import inkex, simplepath, simpletransform, sys, cubicsuperpath +import inkex, simplepath, simpletransform, cubicsuperpath +import gettext +_ = gettext.gettext class Extrude(inkex.Effect): def __init__(self): @@ -36,56 +36,55 @@ class Extrude(inkex.Effect): for id, node in self.selected.iteritems(): if node.tag == '{http://www.w3.org/2000/svg}path': paths.append(node) - if len(paths) == 2: - break - else: - sys.stderr.write('Need 2 paths selected\n') + if len(paths) < 2: + inkex.errormsg(_('Need at least 2 paths selected')) return - pts = [cubicsuperpath.parsePath(paths[i].get('d')) - for i in (0,1)] + for i in range(len(paths))] - for i in (0,1): + for i in range(len(paths)): if 'transform' in paths[i].keys(): trans = paths[i].get('transform') trans = simpletransform.parseTransform(trans) simpletransform.applyTransformToPath(trans, pts[i]) - verts = [] - for i in range(0, min(map(len, pts))): - comp = [] - for j in range(0, min(len(pts[0][i]), len(pts[1][i]))): - comp.append([pts[0][i][j][1][-2:], pts[1][i][j][1][-2:]]) - verts.append(comp) + for n1 in range(0, len(paths)): + for n2 in range(n1 + 1, len(paths)): + verts = [] + for i in range(0, min(map(len, pts))): + comp = [] + for j in range(0, min(len(pts[n1][i]), len(pts[n2][i]))): + comp.append([pts[n1][i][j][1][-2:], pts[n2][i][j][1][-2:]]) + verts.append(comp) - if self.options.mode.lower() == 'lines': - line = [] - for comp in verts: - for n,v in enumerate(comp): - line += [('M', v[0])] - line += [('L', v[1])] - ele = inkex.etree.Element('{http://www.w3.org/2000/svg}path') - paths[0].xpath('..')[0].append(ele) - ele.set('d', simplepath.formatPath(line)) - ele.set('style', 'fill:none;stroke:#000000;stroke-opacity:1;stroke-width:1;') - elif self.options.mode.lower() == 'polygons': - g = inkex.etree.Element('{http://www.w3.org/2000/svg}g') - g.set('style', 'fill:#000000;stroke:#000000;fill-opacity:0.3;stroke-width:2;stroke-opacity:0.6;') - paths[0].xpath('..')[0].append(g) - for comp in verts: - for n,v in enumerate(comp): - nn = n+1 - if nn == len(comp): nn = 0 + if self.options.mode.lower() == 'lines': line = [] - line += [('M', comp[n][0])] - line += [('L', comp[n][1])] - line += [('L', comp[nn][1])] - line += [('L', comp[nn][0])] - line += [('L', comp[n][0])] + for comp in verts: + for n,v in enumerate(comp): + line += [('M', v[0])] + line += [('L', v[1])] ele = inkex.etree.Element('{http://www.w3.org/2000/svg}path') - g.append(ele) + paths[0].xpath('..')[0].append(ele) ele.set('d', simplepath.formatPath(line)) + ele.set('style', 'fill:none;stroke:#000000;stroke-opacity:1;stroke-width:1;') + elif self.options.mode.lower() == 'polygons': + g = inkex.etree.Element('{http://www.w3.org/2000/svg}g') + g.set('style', 'fill:#000000;stroke:#000000;fill-opacity:0.3;stroke-width:2;stroke-opacity:0.6;') + paths[0].xpath('..')[0].append(g) + for comp in verts: + for n,v in enumerate(comp): + nn = n+1 + if nn == len(comp): nn = 0 + line = [] + line += [('M', comp[n][0])] + line += [('L', comp[n][1])] + line += [('L', comp[nn][1])] + line += [('L', comp[nn][0])] + line += [('L', comp[n][0])] + ele = inkex.etree.Element('{http://www.w3.org/2000/svg}path') + g.append(ele) + ele.set('d', simplepath.formatPath(line)) if __name__ == '__main__': #pragma: no cover -- cgit v1.2.3