Updated migrate groups
This commit is contained in:
parent
783c6b874d
commit
1c464b313d
14
extensions/fablabchemnitz_drawdirections.inx
Normal file
14
extensions/fablabchemnitz_drawdirections.inx
Normal file
@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
|
||||
<name>Draw Directions</name>
|
||||
<id>fablabchemnitz.de.directions</id>
|
||||
<effect>
|
||||
<object-type>path</object-type>
|
||||
<effects-menu>
|
||||
<submenu name="FabLab Chemnitz Dev" />
|
||||
</effects-menu>
|
||||
</effect>
|
||||
<script>
|
||||
<command location="inx" interpreter="python">fablabchemnitz_drawdirections.py</command>
|
||||
</script>
|
||||
</inkscape-extension>
|
32
extensions/fablabchemnitz_drawdirections.py
Normal file
32
extensions/fablabchemnitz_drawdirections.py
Normal file
@ -0,0 +1,32 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import inkex
|
||||
from inkex.paths import Path
|
||||
from inkex import Circle
|
||||
|
||||
# Draws red points at the path's beginning and blue point at the path's end
|
||||
|
||||
class StartEndPoints(inkex.Effect):
|
||||
|
||||
def __init__(self):
|
||||
inkex.Effect.__init__(self)
|
||||
self.arg_parser.add_argument("--dotsize", type=int, default=10, help="Dot size (px) for self-intersecting points")
|
||||
|
||||
def effect(self):
|
||||
dot_group = node.getparent().add(inkex.Group())
|
||||
|
||||
for node in self.svg.selection.values():
|
||||
|
||||
points = list(node.path.end_points)
|
||||
start = points[0]
|
||||
end = points[len(points) - 1]
|
||||
|
||||
style = inkex.Style({'stroke': 'none', 'fill': '#FF0000'})
|
||||
startCircle = dot_group.add(Circle(cx=str(start[0]), cy=str(start[1]), r=str(self.svg.unittouu(str(self.options.dotsize/2) + "px"))))
|
||||
startCircle.style = style
|
||||
|
||||
style = inkex.Style({'stroke': 'none', 'fill': '#0000FF'})
|
||||
endCircle = dot_group.add(Circle(cx=str(end[0]), cy=str(end[1]), r=str(self.svg.unittouu(str(self.options.dotsize/2) + "px"))))
|
||||
endCircle.style = style
|
||||
|
||||
StartEndPoints().run()
|
@ -2,7 +2,19 @@
|
||||
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
|
||||
<name>Migrate Groups</name>
|
||||
<id>fablabchemnitz.de.migrategroups</id>
|
||||
<effect needs-live-preview="false">
|
||||
<label>What elements to migrate?</label>
|
||||
<label>Unchecked item types will be deleted!</label>
|
||||
<param name="rect" type="bool" gui-text="rect">true</param>
|
||||
<param name="circle" type="bool" gui-text="circle">true</param>
|
||||
<param name="ellipse" type="bool" gui-text="ellipse">true</param>
|
||||
<param name="line" type="bool" gui-text="line">true</param>
|
||||
<param name="polyline" type="bool" gui-text="polyline">true</param>
|
||||
<param name="polygon" type="bool" gui-text="polygon">true</param>
|
||||
<param name="path" type="bool" gui-text="path">true</param>
|
||||
<param name="image" type="bool" gui-text="image">true</param>
|
||||
<param name="text" type="bool" gui-text="text">true</param>
|
||||
<param name="tspan" type="bool" gui-text="tspan">true</param>
|
||||
<effect needs-live-preview="true">
|
||||
<object-type>path</object-type>
|
||||
<effects-menu>
|
||||
<submenu name="FabLab Chemnitz">
|
||||
|
@ -17,18 +17,46 @@ class MigrateGroups(inkex.Effect):
|
||||
|
||||
allPaths = []
|
||||
allGroups = []
|
||||
|
||||
allNonMigrates = []
|
||||
|
||||
def __init__(self):
|
||||
inkex.Effect.__init__(self)
|
||||
self.arg_parser.add_argument("--rect", type=inkex.Boolean, default=True, help="rect")
|
||||
self.arg_parser.add_argument("--circle", type=inkex.Boolean, default=True, help="circle")
|
||||
self.arg_parser.add_argument("--ellipse", type=inkex.Boolean, default=True, help="ellipse")
|
||||
self.arg_parser.add_argument("--line", type=inkex.Boolean, default=True, help="line")
|
||||
self.arg_parser.add_argument("--polyline", type=inkex.Boolean, default=True, help="polyline")
|
||||
self.arg_parser.add_argument("--polygon", type=inkex.Boolean, default=True, help="polygon")
|
||||
self.arg_parser.add_argument("--path", type=inkex.Boolean, default=True, help="path")
|
||||
self.arg_parser.add_argument("--image", type=inkex.Boolean, default=True, help="image")
|
||||
self.arg_parser.add_argument("--text", type=inkex.Boolean, default=True, help="text")
|
||||
self.arg_parser.add_argument("--tspan", type=inkex.Boolean, default=True, help="tspan")
|
||||
|
||||
def effect(self):
|
||||
|
||||
namespace = []
|
||||
namespace.append("{http://www.w3.org/2000/svg}rect") if self.options.rect else ""
|
||||
namespace.append("{http://www.w3.org/2000/svg}circle") if self.options.circle else ""
|
||||
namespace.append("{http://www.w3.org/2000/svg}ellipse") if self.options.ellipse else ""
|
||||
namespace.append("{http://www.w3.org/2000/svg}line") if self.options.line else ""
|
||||
namespace.append("{http://www.w3.org/2000/svg}polyline") if self.options.polyline else ""
|
||||
namespace.append("{http://www.w3.org/2000/svg}polygon") if self.options.polygon else ""
|
||||
namespace.append("{http://www.w3.org/2000/svg}path") if self.options.path else ""
|
||||
namespace.append("{http://www.w3.org/2000/svg}image") if self.options.image else ""
|
||||
namespace.append("{http://www.w3.org/2000/svg}text") if self.options.text else ""
|
||||
namespace.append("{http://www.w3.org/2000/svg}tspan") if self.options.tspan else ""
|
||||
|
||||
#get all paths and groups from selection. Remove all groups from the selection and form a new single group of it
|
||||
def parseNodes(self, node):
|
||||
if node.tag == inkex.addNS('path','svg'):
|
||||
if node.tag in namespace:
|
||||
if node not in self.allPaths:
|
||||
self.allPaths.append(node)
|
||||
else:
|
||||
if node.tag != inkex.addNS('g','svg'):
|
||||
self.allNonMigrates.append(node)
|
||||
if node.tag == inkex.addNS('g','svg'):
|
||||
if node not in self.allGroups:
|
||||
self.allGroups.append(node)
|
||||
groups = node.getchildren()
|
||||
if groups is not None:
|
||||
for group in groups:
|
||||
@ -38,28 +66,34 @@ class MigrateGroups(inkex.Effect):
|
||||
|
||||
for id, item in self.svg.selected.items():
|
||||
parseNodes(self, item)
|
||||
|
||||
|
||||
if len(self.allPaths) > 0:
|
||||
#make a new group at root level - TODO: respect the position where the first selected object is in XML tree and put it there instead (or make this optional)
|
||||
newGroup = self.document.getroot().add(inkex.Group())
|
||||
|
||||
|
||||
#copy all paths into the new group
|
||||
for path in self.allPaths:
|
||||
newGroup.add(path.copy())
|
||||
|
||||
#then remove all the old stuff
|
||||
path.getparent().remove(path)
|
||||
|
||||
|
||||
#now remove all the obsolete groups
|
||||
if len(self.allGroups) > 0:
|
||||
for group in self.allGroups:
|
||||
if group.getparent() is not None:
|
||||
group.getparent().remove(group)
|
||||
|
||||
|
||||
#remove the selected, now empty group (if it's the case)
|
||||
if len(self.svg.selected) > 0:
|
||||
if len(self.svg.selected) > 0 and len(self.allPaths) > 0:
|
||||
if self.svg.selected[0].tag == inkex.addNS('g','svg'):
|
||||
self.svg.selected[0].getparent().remove(self.svg.selected[0])
|
||||
if self.svg.selected[0].getparent() is not None:
|
||||
self.svg.selected[0].getparent().remove(self.svg.selected[0])
|
||||
|
||||
if len(self.allNonMigrates) > 0:
|
||||
self.msg("You are going to remove " + str(len(self.allNonMigrates)) + " nodes while migrating:")
|
||||
for i in self.allNonMigrates:
|
||||
self.msg(i.get('id'))
|
||||
|
||||
#TODO: make newGroup selected now. How ?
|
||||
MigrateGroups().run()
|
Reference in New Issue
Block a user