diff options
| author | Alvin Penner <penner@vaxxine.com> | 2010-09-16 00:27:36 +0000 |
|---|---|---|
| committer | Alvin Penner <penner@vaxxine.com> | 2010-09-16 00:27:36 +0000 |
| commit | 1637dfcadb49da133c1e14b5d20c32cfebd0d3a3 (patch) | |
| tree | 497b1531c75d1f0b4d60d366ad1c560a55865533 | |
| parent | Prevent opacity slider changes from going into undo as separate items. Fixes ... (diff) | |
| download | inkscape-1637dfcadb49da133c1e14b5d20c32cfebd0d3a3.tar.gz inkscape-1637dfcadb49da133c1e14b5d20c32cfebd0d3a3.zip | |
option to add endpoints on x-axis (Bug 628266)
Fixed bugs:
- https://launchpad.net/bugs/628266
(bzr r9763)
| -rw-r--r-- | share/extensions/funcplot.inx | 77 | ||||
| -rw-r--r-- | share/extensions/funcplot.py | 19 |
2 files changed, 54 insertions, 42 deletions
diff --git a/share/extensions/funcplot.inx b/share/extensions/funcplot.inx index 3867cab82..8eaf33f01 100644 --- a/share/extensions/funcplot.inx +++ b/share/extensions/funcplot.inx @@ -1,33 +1,33 @@ <?xml version="1.0" encoding="UTF-8"?> <inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension"> - <_name>Function Plotter</_name> - <id>org.inkscape.effect.funcplot</id> - <dependency type="executable" location="extensions">funcplot.py</dependency> - <dependency type="executable" location="extensions">inkex.py</dependency> - <param name="tab" type="notebook"> - <page name="sampling" _gui-text="Range and sampling"> - <param name="xstart" type="float" min="-1000.0" max="1000.0" _gui-text="Start X value:">0.0</param> - <param name="xend" type="float" min="-1000.0" max="1000.0" _gui-text="End X value:">1.0</param> - <param name="times2pi" type="boolean" _gui-text="Multiply X range by 2*pi">false</param> - <param name="ybottom" type="float" min="-1000.0" max="1000.0" _gui-text="Y value of rectangle's bottom:">0.0</param> - <param name="ytop" type="float" min="-1000.0" max="1000.0" _gui-text="Y value of rectangle's top:">1.0</param> - <param name="samples" type="int" min="2" max="1000" _gui-text="Number of samples:">8</param> - <param name="isoscale" type="boolean" _gui-text="Isotropic scaling">false</param> - <_param name="isoscaledesc" type="description">When set, Isotropic scaling uses smallest of width/xrange or height/yrange</_param> - <param name="polar" type="boolean" _gui-text="Use polar coordinates">true</param> - </page> - <page name="use" _gui-text="Use"> - <_param name="funcplotuse" type="description" xml:space="preserve">Select a rectangle before calling the extension, -it will determine X and Y scales. + <_name>Function Plotter</_name> + <id>org.inkscape.effect.funcplot</id> + <dependency type="executable" location="extensions">funcplot.py</dependency> + <dependency type="executable" location="extensions">inkex.py</dependency> + <param name="tab" type="notebook"> + <page name="sampling" _gui-text="Range and sampling"> + <param name="xstart" type="float" min="-1000.0" max="1000.0" _gui-text="Start X value:">0.0</param> + <param name="xend" type="float" min="-1000.0" max="1000.0" _gui-text="End X value:">1.0</param> + <param name="times2pi" type="boolean" _gui-text="Multiply X range by 2*pi">false</param> + <param name="ybottom" type="float" min="-1000.0" max="1000.0" _gui-text="Y value of rectangle's bottom:">0.0</param> + <param name="ytop" type="float" min="-1000.0" max="1000.0" _gui-text="Y value of rectangle's top:">1.0</param> + <param name="samples" type="int" min="2" max="1000" _gui-text="Number of samples:">8</param> + <param name="isoscale" type="boolean" _gui-text="Isotropic scaling">false</param> + <_param name="isoscaledesc" type="description">When set, Isotropic scaling uses smallest of width/xrange or height/yrange</_param> + <param name="polar" type="boolean" _gui-text="Use polar coordinates">true</param> + </page> + <page name="use" _gui-text="Use"> + <_param name="funcplotuse" type="description" xml:space="preserve">Select a rectangle before calling the extension, +it will determine X and Y scales. If you wish to fill the area, then add x-axis endpoints. With polar coordinates: Start and end X values define the angle range in radians. X scale is set so that left and right edges of rectangle are at +/-1. Isotropic scaling is disabled. First derivative is always determined numerically.</_param> - </page> - <page name="desc" _gui-text="Functions"> - <_param name="pythonfunctions" type="description" xml:space="preserve">Standard Python math functions are available: + </page> + <page name="desc" _gui-text="Functions"> + <_param name="pythonfunctions" type="description" xml:space="preserve">Standard Python math functions are available: ceil(x); fabs(x); floor(x); fmod(x,y); frexp(x); ldexp(x,i); modf(x); exp(x); log(x [, base]); log10(x); pow(x,y); sqrt(x); @@ -36,20 +36,21 @@ cos(x); sin(x); tan(x); degrees(x); radians(x); cosh(x); sinh(x); tanh(x). The constants pi and e are also available.</_param> - </page> - </param> - <param name="fofx" type="string" _gui-text="Function:">exp(-x*x)</param> - <param name="fponum" type="boolean" _gui-text="Calculate first derivative numerically">true</param> - <param name="fpofx" type="string" _gui-text="First derivative:">x</param> - <param name="remove" type="boolean" _gui-text="Remove rectangle">true</param> - <param name="drawaxis" type="boolean" _gui-text="Draw Axes">false</param> - <effect> - <object-type>rect</object-type> - <effects-menu> - <submenu _name="Render"/> - </effects-menu> - </effect> - <script> - <command reldir="extensions" interpreter="python">funcplot.py</command> - </script> + </page> + </param> + <param name="fofx" type="string" _gui-text="Function:">exp(-x*x)</param> + <param name="fponum" type="boolean" _gui-text="Calculate first derivative numerically">true</param> + <param name="fpofx" type="string" _gui-text="First derivative:">x</param> + <param name="remove" type="boolean" _gui-text="Remove rectangle">true</param> + <param name="drawaxis" type="boolean" _gui-text="Draw Axes">false</param> + <param name="endpts" type="boolean" _gui-text="Add x-axis endpoints">false</param> + <effect> + <object-type>rect</object-type> + <effects-menu> + <submenu _name="Render"/> + </effects-menu> + </effect> + <script> + <command reldir="extensions" interpreter="python">funcplot.py</command> + </script> </inkscape-extension> diff --git a/share/extensions/funcplot.py b/share/extensions/funcplot.py index 126429853..b94fda278 100644 --- a/share/extensions/funcplot.py +++ b/share/extensions/funcplot.py @@ -30,7 +30,7 @@ from math import * from random import * def drawfunction(xstart, xend, ybottom, ytop, samples, width, height, left, bottom, - fx = "sin(x)", fpx = "cos(x)", fponum = True, times2pi = False, polar = False, isoscale = True, drawaxis = True): + fx = "sin(x)", fpx = "cos(x)", fponum = True, times2pi = False, polar = False, isoscale = True, drawaxis = True, endpts = False): if times2pi == True: xstart = 2 * pi * xstart @@ -122,7 +122,11 @@ def drawfunction(xstart, xend, ybottom, ytop, samples, width, height, left, bott dy0 = fp(xstart) # Start curve - a.append([' M ',[coordx(x0), coordy(y0)]]) # initial moveto + if endpts: + a.append([' M ',[left, coordy(0)]]) + a.append([' L ',[coordx(x0), coordy(y0)]]) + else: + a.append([' M ',[coordx(x0), coordy(y0)]]) # initial moveto for i in range(int(samples-1)): x1 = (i+1) * step + xstart @@ -153,7 +157,9 @@ def drawfunction(xstart, xend, ybottom, ytop, samples, width, height, left, bott x0 = x1 # Next segment's start is this segments end y0 = y1 dx0 = dx1 # Assume the function is smooth everywhere, so carry over the derivative too - dy0 = dy1 + dy0 = dy1 + if endpts: + a.append([' L ',[left + width, coordy(0)]]) return a class FuncPlot(inkex.Effect): @@ -211,6 +217,10 @@ class FuncPlot(inkex.Effect): action="store", type="inkbool", dest="drawaxis", default=True, help="If True, axis are drawn") + self.OptionParser.add_option("--endpts", + action="store", type="inkbool", + dest="endpts", default=False, + help="If True, end points are added") self.OptionParser.add_option("--tab", action="store", type="string", dest="tab", default="sampling", @@ -257,7 +267,8 @@ class FuncPlot(inkex.Effect): self.options.times2pi, self.options.polar, self.options.isoscale, - self.options.drawaxis))) + self.options.drawaxis, + self.options.endpts))) newpath.set('title', self.options.fofx) #newpath.setAttribute('desc', '!func;' + self.options.fofx + ';' |
