Code

Super duper mega (fun!) commit: replaced encoding=utf-8 with fileencoding=utf-8 in...
[inkscape.git] / share / extensions / pathscatter.py
index 4e41eff65df71e712e92d3f6c93e0a700a7b40c8..6ed3cc8ac8a1018f9a3ab9f59d72912d7e673e96 100644 (file)
@@ -34,8 +34,9 @@ they move and rotate, deforming the pattern.
 import inkex, cubicsuperpath, bezmisc
 import pathmodifier, simpletransform 
 from lxml import etree
-
 import copy, math, re, random
+import gettext
+_ = gettext.gettext
 
 def zSort(inNode,idList):
     sortedList=[]
@@ -110,6 +111,14 @@ class PathScatter(pathmodifier.Diffeo):
         self.OptionParser.add_option("-t", "--toffset",
                         action="store", type="float", 
                         dest="toffset", default=0.0, help="tangential offset")
+        self.OptionParser.add_option("-g", "--grouppick",
+                        action="store", type="inkbool", 
+                        dest="grouppick", default=False,
+                        help="if pattern is a group then randomly pick group members")
+        self.OptionParser.add_option("-m", "--pickmode",
+                        action="store", type="string", 
+                        dest="pickmode", default="rand",
+                        help="group pick mode (rand=random seq=sequentially)")
         self.OptionParser.add_option("-f", "--follow",
                         action="store", type="inkbool", 
                         dest="follow", default=True,
@@ -133,6 +142,10 @@ class PathScatter(pathmodifier.Diffeo):
                         action="store", type="string", 
                         dest="copymode", default="clone",
                         help="duplicate pattern before deformation")
+        self.OptionParser.add_option("--tab",
+                        action="store", type="string",
+                        dest="tab",
+                        help="The selected UI-tab when OK was pressed")
 
     def prepareSelectionList(self):
 
@@ -143,7 +156,7 @@ class PathScatter(pathmodifier.Diffeo):
         #id = self.options.ids[-1]
         id = idList[-1]
         self.patternNode=self.selected[id]
-
+               
         self.gNode = etree.Element('{http://www.w3.org/2000/svg}g')
         self.patternNode.getparent().append(self.gNode)
 
@@ -204,10 +217,10 @@ class PathScatter(pathmodifier.Diffeo):
     def effect(self):
 
         if len(self.options.ids)<2:
-            inkex.debug("This extension requires that you select two paths.")
+            inkex.errormsg(_("This extension requires two selected paths."))
             return
         self.prepareSelectionList()
-
+        
         #center at (0,0)
         bbox=pathmodifier.computeBBox([self.patternNode])
         mat=[[1,0,-(bbox[0]+bbox[1])/2],[0,1,-(bbox[2]+bbox[3])/2]]
@@ -220,6 +233,18 @@ class PathScatter(pathmodifier.Diffeo):
         width=bbox[1]-bbox[0]
         dx=width+self.options.space
 
+               #check if group and expand it
+        patternList = []
+        if self.options.grouppick and (self.patternNode.tag == inkex.addNS('g','svg') or self.patternNode.tag=='g') :
+            mat=simpletransform.parseTransform(self.patternNode.get("transform"))
+            for child in self.patternNode:
+                simpletransform.applyTransformToNode(mat,child)
+                patternList.append(child)
+        else :
+            patternList.append(self.patternNode)
+        #inkex.debug(patternList)
+                
+        counter=0
         for skelnode in self.skeletons.itervalues(): 
             self.curSekeleton=cubicsuperpath.parsePath(skelnode.get('d'))
             for comp in self.curSekeleton:
@@ -241,11 +266,16 @@ class PathScatter(pathmodifier.Diffeo):
                 s=self.options.toffset
                 while s<=length:
                     mat=self.localTransformAt(s,self.options.follow)
+                    if self.options.pickmode=="rand":
+                        clone=copy.deepcopy(patternList[random.randint(0, len(patternList)-1)])
 
-                    clone=copy.deepcopy(self.patternNode)
+                    if self.options.pickmode=="seq":
+                        clone=copy.deepcopy(patternList[counter])
+                        counter=(counter+1)%len(patternList)
+                        
                     #!!!--> should it be given an id?
                     #seems to work without this!?!
-                    myid = self.patternNode.tag.split('}')[-1]
+                    myid = patternList[random.randint(0, len(patternList)-1)].tag.split('}')[-1]
                     clone.set("id", self.uniqueId(myid))
                     self.gNode.append(clone)
                     
@@ -254,8 +284,9 @@ class PathScatter(pathmodifier.Diffeo):
                     s+=dx
         self.patternNode.getparent().remove(self.patternNode)
 
+if __name__ == '__main__':
+    e = PathScatter()
+    e.affect()
 
-e = PathScatter()
-e.affect()
 
-                    
+# vim: expandtab shiftwidth=4 tabstop=8 softtabstop=4 fileencoding=utf-8 textwidth=99