Code

separate x and y jittering
authorbuliabyak <buliabyak@users.sourceforge.net>
Mon, 5 May 2008 01:22:48 +0000 (01:22 +0000)
committerbuliabyak <buliabyak@users.sourceforge.net>
Mon, 5 May 2008 01:22:48 +0000 (01:22 +0000)
share/extensions/radiusrand.inx
share/extensions/radiusrand.py

index 92fa5cd54978aaa1beab506b6b5afcd311ff052c..3349f4549d16cbd8030964cbde726856cd0b9d9a 100644 (file)
@@ -5,7 +5,8 @@
        <dependency type="executable" location="extensions">radiusrand.py</dependency>
        <dependency type="executable" location="extensions">inkex.py</dependency>
        <_param name="title" type="description">This effect randomly shifts the nodes (and optionally node handles) of the selected path.</_param>
-       <param name="radius" type="float" min="0.0" max="1000.0" _gui-text="Maximum displacement, px">100.0</param>
+       <param name="radiusx" type="float" min="0.0" max="1000.0" _gui-text="Maximum displacement in X, px">10.0</param>
+       <param name="radiusy" type="float" min="0.0" max="1000.0" _gui-text="Maximum displacement in Y, px">10.0</param>
        <param name="end" type="boolean" _gui-text="Shift nodes">true</param>
        <param name="ctrl" type="boolean" _gui-text="Shift node handles">false</param>
        <param name="norm" type="boolean" _gui-text="Use normal distribution">true</param>
index 5eb73965b2ef87b39b5308bf3167a26e688486bd..902601c285cab070262e01b5f1a69dc1bb437a74 100755 (executable)
@@ -18,24 +18,28 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 '''
 import random, math, inkex, cubicsuperpath
 
-def randomize((x, y), r, norm):
+def randomize((x, y), rx, ry, norm):
     if norm:
-        r = abs(random.normalvariate(0.0,0.5*r))
+        r = abs(random.normalvariate(0.0,0.5*max(rx, ry)))
     else:
-        r = random.uniform(0.0,r)
+        r = random.uniform(0.0,max(rx, ry))
     a = random.uniform(0.0,2*math.pi)
-    x += math.cos(a)*r
-    y += math.sin(a)*r
+    x += math.cos(a)*rx
+    y += math.sin(a)*ry
     return [x, y]
 
 class RadiusRandomize(inkex.Effect):
     def __init__(self):
         inkex.Effect.__init__(self)
         self.OptionParser.add_option("--title")
-        self.OptionParser.add_option("-r", "--radius",
+        self.OptionParser.add_option("-x", "--radiusx",
                         action="store", type="float", 
-                        dest="radius", default=10.0,
-                        help="Randomly move control and end points in this radius")
+                        dest="radiusx", default=10.0,
+                        help="Randomly move nodes and handles within this radius, X")
+        self.OptionParser.add_option("-y", "--radiusy",
+                        action="store", type="float", 
+                        dest="radiusy", default=10.0,
+                        help="Randomly move nodes and handles within this radius, Y")
         self.OptionParser.add_option("-c", "--ctrl",
                         action="store", type="inkbool", 
                         dest="ctrl", default=True,
@@ -56,7 +60,7 @@ class RadiusRandomize(inkex.Effect):
                 for subpath in p:
                     for csp in subpath:
                         if self.options.end:
-                            delta=randomize([0,0], self.options.radius, self.options.norm)
+                            delta=randomize([0,0], self.options.radiusx, self.options.radiusy, self.options.norm)
                             csp[0][0]+=delta[0] 
                             csp[0][1]+=delta[1] 
                             csp[1][0]+=delta[0] 
@@ -64,8 +68,8 @@ class RadiusRandomize(inkex.Effect):
                             csp[2][0]+=delta[0] 
                             csp[2][1]+=delta[1] 
                         if self.options.ctrl:
-                            csp[0]=randomize(csp[0], self.options.radius, self.options.norm)
-                            csp[2]=randomize(csp[2], self.options.radius, self.options.norm)
+                            csp[0]=randomize(csp[0], self.options.radiusx, self.options.radiusy, self.options.norm)
+                            csp[2]=randomize(csp[2], self.options.radiusx, self.options.radiusy, self.options.norm)
                 node.set('d',cubicsuperpath.formatPath(p))
 
 e = RadiusRandomize()