<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.inkscape.org/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Inductiveload</id>
	<title>Inkscape Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.inkscape.org/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Inductiveload"/>
	<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/Special:Contributions/Inductiveload"/>
	<updated>2026-05-18T22:15:12Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.36.1</generator>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=Extension_reference&amp;diff=55091</id>
		<title>Extension reference</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=Extension_reference&amp;diff=55091"/>
		<updated>2009-12-06T04:16:18Z</updated>

		<summary type="html">&lt;p&gt;Inductiveload: /* Render */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''A page with info about the Effects and particularly some PNGs / screenshots.  To learn more about effects and how to write new ones, check out this page : [http://www.ekips.org/comp/inkscape/ Inkscape Effects]&lt;br /&gt;
''&lt;br /&gt;
=Color=&lt;br /&gt;
&lt;br /&gt;
==Brighter==&lt;br /&gt;
Brightens the color(s) by dividing each RGB channel by 0.9. Channels with a value of 0 remain unaffected. Although brighter and darker are inverse operations, the results of a series of invocations will cause inconstancies due to rounding errors. Use '''More Light''' if you want to brighten up black areas as well.&lt;br /&gt;
&lt;br /&gt;
==Custom...==&lt;br /&gt;
&lt;br /&gt;
Allows you to evaluate different functions for each channel. '''r''', '''g''' and '''b''' are the ''normalized'' values of the red, green and blue channels. The resulting RGB values are automatically clamped.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' This effect is half broken in 0.45! The original values are overwritten by the new ones, which means things like the last example won't work as expected.&lt;br /&gt;
&lt;br /&gt;
===Examples===&lt;br /&gt;
Default (doesn't change anything):&lt;br /&gt;
:Red Function:'''r'''&lt;br /&gt;
:Green Function:'''g'''&lt;br /&gt;
:Blue Function:'''b'''&lt;br /&gt;
&lt;br /&gt;
Half the red, swap green and blue:&lt;br /&gt;
:Red Function:'''r*0.5'''&lt;br /&gt;
:Green Function:'''b'''&lt;br /&gt;
:Blue Function:'''g'''&lt;br /&gt;
&lt;br /&gt;
ITU-R Recommendation BT.709 for grayscale:&lt;br /&gt;
:Red Function:'''0.2125 * r + 0.7154 * g + 0.0721 * b'''&lt;br /&gt;
:Green Function:'''0.2125 * r + 0.7154 * g + 0.0721 * b'''&lt;br /&gt;
:Blue Function:'''0.2125 * r + 0.7154 * g + 0.0721 * b'''&lt;br /&gt;
&lt;br /&gt;
==Darker==&lt;br /&gt;
&lt;br /&gt;
Darkens the color(s) by multiplying each RGB channel with 0.9. Although brighter and darker are inverse operations, the results of a series of invocations will cause inconstancies due to rounding errors. '''Less Light''' is usually a better option, because it operates in the HSL color space.&lt;br /&gt;
&lt;br /&gt;
==Desaturate==&lt;br /&gt;
&lt;br /&gt;
Desaturates the color(s) by dividing the sum of the minimum and maximum channel values by two. Use '''Grayscale''' if you want something closer to the human perception of luminance.&lt;br /&gt;
&lt;br /&gt;
==Grayscale==&lt;br /&gt;
&lt;br /&gt;
Creates a grayscale version of the color(s) via the PAL/NTSC formula (0.299 * RED + 0.587 * GREEN + 0.114 * BLUE).&lt;br /&gt;
&lt;br /&gt;
==Less Hue==&lt;br /&gt;
&lt;br /&gt;
Converts to HSL color space, subtracts 0.05 from the hue, wraps if necessary, and converts it back to RGB again.&lt;br /&gt;
&lt;br /&gt;
==Less Light==&lt;br /&gt;
&lt;br /&gt;
Converts to HSL color space, subtracts 0.05 from the lightness, clamps if necessary, and converts it back to RGB again.&lt;br /&gt;
&lt;br /&gt;
==Less Saturation==&lt;br /&gt;
&lt;br /&gt;
Converts to HSL color space, subtracts 0.05 from the saturation, clamps if necessary, and converts it back to RGB again.&lt;br /&gt;
&lt;br /&gt;
==More Hue==&lt;br /&gt;
&lt;br /&gt;
Converts to HSL color space, adds 0.05 from to hue, wraps if necessary, and converts it back to RGB again.&lt;br /&gt;
&lt;br /&gt;
==More Light==&lt;br /&gt;
&lt;br /&gt;
Converts to HSL color space, adds 0.05 from to lightness, clamps if necessary, and converts it back to RGB again.&lt;br /&gt;
&lt;br /&gt;
==More Saturation==&lt;br /&gt;
&lt;br /&gt;
Converts to HSL color space, adds 0.05 from to saturation, clamps if necessary, and converts it back to RGB again.&lt;br /&gt;
&lt;br /&gt;
==Negative==&lt;br /&gt;
&lt;br /&gt;
Inverts each RGB channel (255-value).&lt;br /&gt;
&lt;br /&gt;
==Randomize==&lt;br /&gt;
&lt;br /&gt;
Converts to HSL, randomizes hue and/or saturation and/or lightness and converts it back to RGB.&lt;br /&gt;
&lt;br /&gt;
==Remove Blue==&lt;br /&gt;
&lt;br /&gt;
Sets the blue channel to 0.&lt;br /&gt;
&lt;br /&gt;
==Remove Green==&lt;br /&gt;
&lt;br /&gt;
Sets the green channel to 0.&lt;br /&gt;
&lt;br /&gt;
==Remove Red==&lt;br /&gt;
&lt;br /&gt;
Sets the red channel to 0.&lt;br /&gt;
&lt;br /&gt;
==Replace Color...==&lt;br /&gt;
&lt;br /&gt;
Replaces a specific color with another one.&lt;br /&gt;
&lt;br /&gt;
==RGB Barrel==&lt;br /&gt;
&lt;br /&gt;
Rotates the RGB channels (RGB-&amp;gt;BRG-&amp;gt;GBR-&amp;gt;RGB...).&lt;br /&gt;
&lt;br /&gt;
=Developer Examples=&lt;br /&gt;
&lt;br /&gt;
=Export=&lt;br /&gt;
==Groups to PNGs==&lt;br /&gt;
&lt;br /&gt;
=Generate from Path=&lt;br /&gt;
==Inset/Outset Halo==&lt;br /&gt;
&lt;br /&gt;
[[Image:InsetOutsetExample.png]]&lt;br /&gt;
&lt;br /&gt;
Parameters: &lt;br /&gt;
; Width: 20&lt;br /&gt;
; Number of steps: 5&lt;br /&gt;
&lt;br /&gt;
Creates translucent copies of the path inside and outside the path.&lt;br /&gt;
&lt;br /&gt;
==Extrude==&lt;br /&gt;
[[Image:ExtrudeExample.png]]&lt;br /&gt;
&lt;br /&gt;
Parameters: &lt;br /&gt;
; Magnitude: 20&lt;br /&gt;
; Angle: 45&lt;br /&gt;
&lt;br /&gt;
==Interpolate==&lt;br /&gt;
===Outline===&lt;br /&gt;
Iterpolate does a linear interpolation between 2 or more paths. It basically means that it &amp;quot;fills in the gaps&amp;quot; between the paths according to the number of steps given. &lt;br /&gt;
&lt;br /&gt;
===Basic Usage===&lt;br /&gt;
To use the interpolation effect, select the paths that you wish to interpolate, and go to Effects &amp;gt; Generate From Path &amp;gt; Interpolate. Choose your options, and Click OK.&lt;br /&gt;
&lt;br /&gt;
===Basic Example===&lt;br /&gt;
View figure 1 below, where there are 2 identical paths.&lt;br /&gt;
&lt;br /&gt;
[[Image:Interpolate1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Here is the result when the interpolation effect is called with a &amp;quot;Steps&amp;quot; value of 6.&lt;br /&gt;
&lt;br /&gt;
[[Image:Interpolate2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Options===&lt;br /&gt;
One of the great features of the inkscape interpolation is &amp;quot;transform style&amp;quot;, which transforms the  &lt;br /&gt;
&lt;br /&gt;
It appears that you need to convert an object to a path first (Path &amp;gt; Object to path ; Shift-Ctrl-c). You can alter the number of steps used and choose one of two methods.&lt;br /&gt;
&lt;br /&gt;
[[Image:interpolate_blueSquare-redCircle.png]]&lt;br /&gt;
==Pattern along Path==&lt;br /&gt;
&lt;br /&gt;
Star pattern and a line path:&lt;br /&gt;
&lt;br /&gt;
[[Image:PatternAlongPathExample1.png]]&lt;br /&gt;
&lt;br /&gt;
Pattern along path:&lt;br /&gt;
&lt;br /&gt;
[[Image:PatternAlongPathExample2.png]]&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
; Copies of the pattern: repeated&lt;br /&gt;
; Deformation type: snake&lt;br /&gt;
; Space between copies: 0&lt;br /&gt;
; Normal offset: 0&lt;br /&gt;
; Tangential offset: 0&lt;br /&gt;
; Pattern is vertical: unchecked&lt;br /&gt;
; Duplicate the pattern before deformation: checked&lt;br /&gt;
&lt;br /&gt;
[[Image:PatternAlongPathExample3.png]]&lt;br /&gt;
&lt;br /&gt;
Modified parameter:&lt;br /&gt;
; Deformation type: ribbon&lt;br /&gt;
&lt;br /&gt;
=Images=&lt;br /&gt;
&lt;br /&gt;
=Modify Path=&lt;br /&gt;
==Envelope==&lt;br /&gt;
==Add Nodes==&lt;br /&gt;
==Color Markers to Match Stroke==&lt;br /&gt;
==Flatten Beziers==&lt;br /&gt;
[[Image:FlattenBeziersExample.png]]&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
; Flatness: 10&lt;br /&gt;
&lt;br /&gt;
==Fractalize==&lt;br /&gt;
[[Image:FractalizeExample.png]]&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
; Subdivisions: 6&lt;br /&gt;
; Smoothness: 4.0&lt;br /&gt;
&lt;br /&gt;
==Jitter nodes==&lt;br /&gt;
[[Image:JitterNodesExample.png]]&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
; Maximum Displacement: 50.0&lt;br /&gt;
; Shift Nodes: checked&lt;br /&gt;
; Shift Node Handles: checked&lt;br /&gt;
; Use Normal Distribution: checked&lt;br /&gt;
&lt;br /&gt;
==Perspective==&lt;br /&gt;
==Straighten Segments==&lt;br /&gt;
[[Image:StraightenSegmentsExample.png]]&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
; Percent: 50&lt;br /&gt;
; Behavior: 1&lt;br /&gt;
&lt;br /&gt;
=Render=&lt;br /&gt;
&lt;br /&gt;
==3D polyhedron==&lt;br /&gt;
&lt;br /&gt;
'''3D polyhedron''' draws polyhedra stored in OBJ files. A selection of polygons are provided with Inkscape, and others can be used by selection &amp;lt;tt&amp;gt;Load From File...&amp;lt;/tt&amp;gt; in the extension dialogue.&lt;br /&gt;
&lt;br /&gt;
[[image:3D_polyhedron_-_snub_dodecahedron.png|thumb|Drawing faces]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Alphabet soup==&lt;br /&gt;
&lt;br /&gt;
'''Alphabet Soup''' generates a series of shapes that resemble a given text string.&lt;br /&gt;
&lt;br /&gt;
[[file:Alphabet_soup_-_Inkscape.png‎|thumb|250px|Output for &amp;quot;Inkscape&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
==Barcode==&lt;br /&gt;
&lt;br /&gt;
==Calendar==&lt;br /&gt;
&lt;br /&gt;
==Cartesian grid==&lt;br /&gt;
&lt;br /&gt;
==Draw from triangle==&lt;br /&gt;
&lt;br /&gt;
==Foldable box==&lt;br /&gt;
&lt;br /&gt;
==Function plotter==&lt;br /&gt;
&lt;br /&gt;
==Gear==&lt;br /&gt;
&lt;br /&gt;
==Grid==&lt;br /&gt;
&lt;br /&gt;
==L-system==&lt;br /&gt;
&lt;br /&gt;
==Parametric curves==&lt;br /&gt;
&lt;br /&gt;
==Perfect-bound cover template==&lt;br /&gt;
&lt;br /&gt;
==Polar grid==&lt;br /&gt;
&lt;br /&gt;
==Printing marks==&lt;br /&gt;
&lt;br /&gt;
==Random tree==&lt;br /&gt;
&lt;br /&gt;
==Sequential labels==&lt;br /&gt;
&lt;br /&gt;
==Spirograph==&lt;br /&gt;
&lt;br /&gt;
==Triangle==&lt;br /&gt;
&lt;br /&gt;
==Wireframe sphere==&lt;br /&gt;
&lt;br /&gt;
=Visualise Path=&lt;br /&gt;
&lt;br /&gt;
==Number Nodes==&lt;br /&gt;
[[Image:NumberNodesExample.png]]&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
; Font Size: 20&lt;br /&gt;
; Dot Size: 10px&lt;br /&gt;
&lt;br /&gt;
==Kochify==&lt;br /&gt;
To use, select one path consisting of only line segments and apply the effect.  Kochify will replace the given path with a path that has a copy of the original path in between each two adjacent nodes in the original path.  If the original path input has bezier curves, the effect will effectively replace them with lines and then apply the effect.  For more information about Kochify from a developers perspective, look [http://www.ekips.org/comp/inkscape/koch.php here].  Requires: python.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Extensions]]&lt;/div&gt;</summary>
		<author><name>Inductiveload</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=File:Alphabet_soup_-_Inkscape.png&amp;diff=55089</id>
		<title>File:Alphabet soup - Inkscape.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=File:Alphabet_soup_-_Inkscape.png&amp;diff=55089"/>
		<updated>2009-12-06T04:13:39Z</updated>

		<summary type="html">&lt;p&gt;Inductiveload: The output of the &amp;quot;Alphabet Soup&amp;quot; effect on the string &amp;quot;Inkscape&amp;quot; with random seed = 0&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The output of the &amp;quot;Alphabet Soup&amp;quot; effect on the string &amp;quot;Inkscape&amp;quot; with random seed = 0&lt;/div&gt;</summary>
		<author><name>Inductiveload</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=File:3D_polyhedron_-_snub_dodecahedron.png&amp;diff=55087</id>
		<title>File:3D polyhedron - snub dodecahedron.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=File:3D_polyhedron_-_snub_dodecahedron.png&amp;diff=55087"/>
		<updated>2009-12-06T04:07:12Z</updated>

		<summary type="html">&lt;p&gt;Inductiveload: The output of the &amp;quot;3D polyhedron&amp;quot; effect when drawing a snub dodecahedron in face-mode.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The output of the &amp;quot;3D polyhedron&amp;quot; effect when drawing a snub dodecahedron in face-mode.&lt;/div&gt;</summary>
		<author><name>Inductiveload</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=Script_extensions&amp;diff=54709</id>
		<title>Script extensions</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=Script_extensions&amp;diff=54709"/>
		<updated>2009-11-06T18:56:43Z</updated>

		<summary type="html">&lt;p&gt;Inductiveload: add link to Generating_objects_from_extensions&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[Note: This page concerns using scripting languages to create new Inkscape functionality.  To access Inkscape functionality from scripting languages (i.e. to script Inkscape), see the Inkscape man page (especially in the development version or v0.46 or later, which provide --select and --verb options), or see the work in the src/extension/script directory of Inkscape source.]&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
Traditional unix scripts can be used to extend Inkscape's functionality. &lt;br /&gt;
Such programs read a stream of data on standard input, transform the data in some way, and then write the modified data to standard output. This is an easy way to expand Inkscape and provide custom functionality without learning the internals of Inkscape. Libraries for reading and writing SVG data exist for many programming languages, and most provide support for XML.  This HOWTO describes the &amp;quot;ins and outs&amp;quot; of writing one of these scripts and making it work with Inkscape's core functionality.&lt;br /&gt;
&lt;br /&gt;
=== Types of scripts ===&lt;br /&gt;
&lt;br /&gt;
There are three kinds of functions that can be added with a script:&lt;br /&gt;
&lt;br /&gt;
* Input, providing translation from a file format to SVG&lt;br /&gt;
* Output, providing translation from SVG to a format&lt;br /&gt;
* Effect, taking in SVG, changing it, and then outputing SVG&lt;br /&gt;
&lt;br /&gt;
While all of these are very similar in the scripting interface, there are slight differences between them.&lt;br /&gt;
&lt;br /&gt;
=== Interaction ===&lt;br /&gt;
&lt;br /&gt;
It is important for a script author to understand how Inkscape and scripts communicate.&lt;br /&gt;
&lt;br /&gt;
(interpreter)? your_script (--param=value)* /path/to/input[[/SVGfile]] | inkscape&lt;br /&gt;
&lt;br /&gt;
Inkscape runs your script (optionally with an interpreter) passing it any number of parameters in long gnu style. The final argument is the name of the temporary svg file your script should read. After processing, the script should return the modified svg file to inkscape on STDOUT.&lt;br /&gt;
&lt;br /&gt;
=== Important Tips ===&lt;br /&gt;
&lt;br /&gt;
* Receive the inkscape arguments.&lt;br /&gt;
* Clear temp files if it creates one.&lt;br /&gt;
* Write full changed SVG to the default output.&lt;br /&gt;
* Don't break an xml:space=&amp;quot;preserve&amp;quot; area.&lt;br /&gt;
* Send error text to the error output and help the user.&lt;br /&gt;
&lt;br /&gt;
=== Description ===&lt;br /&gt;
&lt;br /&gt;
In order for Inkscape to make use of an external script or program, you must describe that script to inkscape using an INX file. See the inkscape share directory for examples. The INX file allows the author to:&lt;br /&gt;
* label strings for translation &lt;br /&gt;
* define parameters&lt;br /&gt;
* chain extensions&lt;br /&gt;
Please see [[MakingAnINX]] for help creating an INX file for your script.&lt;br /&gt;
&lt;br /&gt;
==== Parameters ====&lt;br /&gt;
The INX file describes which parameters the extension needs. Inkscape will prompt the user with a UI to fill out these parameters before the extension is called. Each parameter will be passed through the commandline as &amp;quot;--paramname=paramvalue&amp;quot;. Eg. if you have described a string parameter with name 'string1' in the INX file, Inkscape will present a textbox to the user. When the user fills in &amp;quot;text&amp;quot; and presses OK, it will pass '--string1=&amp;quot;text&amp;quot;' to the program specified by the &amp;lt;command&amp;gt; tag.&lt;br /&gt;
&lt;br /&gt;
There are several types of parameters that can be requested by the INX description:&lt;br /&gt;
&lt;br /&gt;
* Boolean&lt;br /&gt;
* Int&lt;br /&gt;
* Float&lt;br /&gt;
* String&lt;br /&gt;
* Description&lt;br /&gt;
* Enum&lt;br /&gt;
* Notebook&lt;br /&gt;
* Option group (radio buttons)&lt;br /&gt;
&lt;br /&gt;
=== Installing ===&lt;br /&gt;
&lt;br /&gt;
Installing is as simple as copying the script (unless it resides in your path) and its INX file to the inkscape/share/extensions (home/.inkscape/extensions) directory. (If you install a script in your home directory be sure to copy the dependencies.)&lt;br /&gt;
&lt;br /&gt;
If you are looking to use scripts that have already been written, the most difficult part will likely be the installation. Since scripts are  seperate programs they may have any number of dependencies that are not included with inkscape. Currently, the best way to find missing dependencies is by reading the error messages produced by running the script from the command line.&lt;br /&gt;
&lt;br /&gt;
=== See Also ===&lt;br /&gt;
&lt;br /&gt;
*[[Generating_objects_from_extensions]]. How to use a script to generate actual objects inside SVG documents.&lt;br /&gt;
&lt;br /&gt;
*[http://www.ekips.org/comp/inkscape/extending.php#ignorance| Aarons website] describing his path to learning how scripting extensions work. '''VERY OUT-OF-DATE'''&lt;br /&gt;
&lt;br /&gt;
*[[MakingAnINX]]&lt;br /&gt;
&lt;br /&gt;
*[[PythonEffectTutorial]]&lt;br /&gt;
&lt;br /&gt;
*[[Tips For Python Script Extensions]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Extensions]]&lt;/div&gt;</summary>
		<author><name>Inductiveload</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=Generating_objects_from_extensions&amp;diff=54707</id>
		<title>Generating objects from extensions</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=Generating_objects_from_extensions&amp;diff=54707"/>
		<updated>2009-11-06T18:55:03Z</updated>

		<summary type="html">&lt;p&gt;Inductiveload: Created page with 'If you need an extension to generate an object in Inkscape, there are many tools that already exist to help you. &amp;lt;tt&amp;gt;inkex.py&amp;lt;/tt&amp;gt; is the most notable, as this provides the routi...'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;If you need an extension to generate an object in Inkscape, there are many tools that already exist to help you. &amp;lt;tt&amp;gt;inkex.py&amp;lt;/tt&amp;gt; is the most notable, as this provides the routines to insert the SVG element into the XML tree of the SVG document.&lt;br /&gt;
&lt;br /&gt;
There is currently no universal set of tools to allow a single function to be called, because different extension have different attibutes for thir objects. For example, the barcode extension merely needs a black rectangle with no stroke, but another may need a way to set the stroke width, dashes and opacity. Thus, it is often best to write your own subroutine for generating your objects.&lt;br /&gt;
&lt;br /&gt;
==A simple example==&lt;br /&gt;
Let's look at a simple Python fuunction for drawing a black rectangle:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#SVG element generation routine&lt;br /&gt;
def draw_SVG_square((w,h), (x,y), parent):&lt;br /&gt;
&lt;br /&gt;
    style = {   'stroke'        : 'none',&lt;br /&gt;
                'width'         : '1',&lt;br /&gt;
                'fill'          : '#000000'&lt;br /&gt;
            }&lt;br /&gt;
                &lt;br /&gt;
    attribs = {&lt;br /&gt;
        'style'     : simplestyle.formatStyle(style),&lt;br /&gt;
        'height'    : str(h),&lt;br /&gt;
        'width'     : str(w),&lt;br /&gt;
        'x'         : str(x),&lt;br /&gt;
        'y'         : str(y)&lt;br /&gt;
            }&lt;br /&gt;
    circ = inkex.etree.SubElement(parent, inkex.addNS('rect','svg'), attribs )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first thing to notice is that all the attributes of the object are stored in a dictionary format, with everything being a string. This means you have to convert all your parameters to strings if appropriate (like the &amp;lt;tt&amp;gt;height&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;width&amp;lt;/tt&amp;gt; attributes).&lt;br /&gt;
&lt;br /&gt;
Next, all the style attributes (colours, widths, fonts, etc) are put together in SVG under &amp;lt;tt&amp;gt;style&amp;lt;/tt&amp;gt;. To generate this string, there exists a helper function &amp;lt;tt&amp;gt;simplestyle.formatStyle()&amp;lt;/tt&amp;gt;. You simply feed this function a dictionary of the styles you want, just like the attributes. You can then use this directly as the style attribute.&lt;br /&gt;
&lt;br /&gt;
The next thing to see is how to add the element to the XML tree. &amp;lt;tt&amp;gt;inkex.py&amp;lt;/tt&amp;gt; has the function to do this using the LXML parser. This needs to be given the &amp;quot;parent&amp;quot; of the object (we'll come back to this), the &amp;quot;type&amp;quot; of the object, and the attributes of the object.&lt;br /&gt;
&lt;br /&gt;
The type of the object is in the &amp;lt;tt&amp;gt;svg&amp;lt;/tt&amp;gt; namespace, which means it begins &amp;lt;tt&amp;gt;svg:&amp;lt;/tt&amp;gt; (for a rectangle, it is &amp;lt;tt&amp;gt;svg:rect&amp;lt;/tt&amp;gt;). LXML cannot parse colons, so we use the &amp;lt;tt&amp;gt;inkex.addNS&amp;lt;/tt&amp;gt; to prepend the namespace.&lt;br /&gt;
&lt;br /&gt;
The attributes of the object just needs to be passed the dictionary &amp;lt;tt&amp;gt;attribs&amp;lt;/tt&amp;gt; we made earlier.&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;parent&amp;quot; of the object is the containing element. This is usually a group or a layer. This will be passed in by the calling function, and we will see it in action later.&lt;br /&gt;
&lt;br /&gt;
When this function is run with the right parameters, the rectangle will be added to the SVG document.&lt;br /&gt;
&lt;br /&gt;
==Getting the parent==&lt;br /&gt;
&lt;br /&gt;
Finding the parent is easy: you can just pass in the current layer from the &amp;lt;tt&amp;gt;self&amp;lt;/tt&amp;gt; object if you like:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
parent = self.current_layer&lt;br /&gt;
draw_SVG_square((1,1), (0,0), parent)&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will just plonk the rectangle into the document, centred on the origin.&lt;br /&gt;
&lt;br /&gt;
Alternatively, you can create a group much like any other object:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
centre = self.view_center   #Put in in the centre of the current view&lt;br /&gt;
grp_transform = 'translate' + str( centre )&lt;br /&gt;
&lt;br /&gt;
grp_name = 'Group Name'&lt;br /&gt;
grp_attribs = {inkex.addNS('label','inkscape'):grp_name,&lt;br /&gt;
                           'transform':grp_transform }&lt;br /&gt;
grp = inkex.etree.SubElement(self.current_layer, 'g', grp_attribs)#the group to put everything in&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
By the way, any object can be assigned a name as we did there, which is often helpful when generating many objects:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
inkex.addNS('label','inkscape') : name&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
By setting the transform as &amp;lt;tt&amp;gt;self.view_center&amp;lt;/tt&amp;gt;, we made sure the origin of the group is in the centre of the current view of the document. We will come back to transforms later.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;grp&amp;lt;/tt&amp;gt; object can now be used as a parent for the rectangle:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
draw_SVG_square((1,1), (0,0), grp)&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
This will draw a 1×1 black square in the center of the view.&lt;br /&gt;
&lt;br /&gt;
==Transforms==&lt;br /&gt;
&lt;br /&gt;
It is easy to transform an object: just supply a string like the folllowing as the &amp;lt;tt&amp;gt;transform&amp;lt;/tt&amp;gt; attribute of the element:&lt;br /&gt;
*&amp;lt;tt&amp;gt;trans = 'translate(10,10)'&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;trans = 'translate(10,10) rotate(10)'&amp;lt;/tt&amp;gt;&lt;br /&gt;
*&amp;lt;tt&amp;gt;trans = 'skewX(-1)'&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Available commands: &amp;lt;tt&amp;gt;translate, scale, rotate, skewX, skewY, matrix&amp;lt;/tt&amp;gt;. The transforms are composed in left-right order (i.e. the translate comes first in the second example).&lt;br /&gt;
&lt;br /&gt;
==More Examples==&lt;br /&gt;
&lt;br /&gt;
===Ellipses===&lt;br /&gt;
&lt;br /&gt;
Ellipses are actually path elements, but Inkscape generates the nodes automatically if you feed it the correct attributes in the Sodipodi namespace. The vital ones are &amp;lt;tt&amp;gt;rx, ry, cx, cy&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Ellipses require some attributes in the &amp;lt;tt&amp;gt;sodipodi:&amp;lt;/tt&amp;gt; namespace, so we also use the &amp;lt;tt&amp;gt;addNS()&amp;lt;/tt&amp;gt; function in the attribute dictionary:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
def draw_SVG_ellipse((rx, ry), (cx, cy), parent, start_end=0,2*pi),transform='' ):&lt;br /&gt;
&lt;br /&gt;
    style = {   'stroke'        : '#000000',&lt;br /&gt;
                'width'         : '1',&lt;br /&gt;
                'fill'          : 'none'            }&lt;br /&gt;
    ell_attribs = {'style':simplestyle.formatStyle(style),&lt;br /&gt;
        inkex.addNS('cx','sodipodi')        :str(cx),&lt;br /&gt;
        inkex.addNS('cy','sodipodi')        :str(cy),&lt;br /&gt;
        inkex.addNS('rx','sodipodi')        :str(rx),&lt;br /&gt;
        inkex.addNS('ry','sodipodi')        :str(ry),&lt;br /&gt;
        inkex.addNS('start','sodipodi')     :str(start_end[0]),&lt;br /&gt;
        inkex.addNS('end','sodipodi')       :str(start_end[1]),&lt;br /&gt;
        inkex.addNS('open','sodipodi')      :'true',    #all ellipse sectors we will draw are open&lt;br /&gt;
        inkex.addNS('type','sodipodi')      :'arc',&lt;br /&gt;
        'transform'                         :transform&lt;br /&gt;
        &lt;br /&gt;
            }&lt;br /&gt;
    ell = inkex.etree.SubElement(parent, inkex.addNS('path','svg'), ell_attribs )&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will draw an open arc, with a black stroke of width 1 and no fill. The transform here can be passed in from outside.&lt;br /&gt;
&lt;br /&gt;
If in doubt about the right attribute name and format, just check a similar object in the XML viewer in Inkscape.&lt;br /&gt;
&lt;br /&gt;
===Line Segment===&lt;br /&gt;
&lt;br /&gt;
Paths can be quite tricky to get the hang of if you don't know the meaning of the letters. Read the SVG specification for a full list.&lt;br /&gt;
&lt;br /&gt;
Here, the style information has been passed in from outside the function.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
#draw an SVG line segment between the given (raw) points&lt;br /&gt;
def draw_SVG_line( (x1, y1), (x2, y2), style, name, parent):&lt;br /&gt;
    line_style   = { 'stroke': style.l_col,&lt;br /&gt;
                     'stroke-width':str(style.l_th),&lt;br /&gt;
                     'fill': style.l_fill&lt;br /&gt;
                   }&lt;br /&gt;
&lt;br /&gt;
    line_attribs = {'style' : simplestyle.formatStyle(line_style),&lt;br /&gt;
                    inkex.addNS('label','inkscape') : name,&lt;br /&gt;
                    'd' : 'M '+str(x1)+','+str(y1)+' L '+str(x2)+','+str(y2)}&lt;br /&gt;
&lt;br /&gt;
    line = inkex.etree.SubElement(parent, inkex.addNS('path','svg'), line_attribs )&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Inductiveload</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=Python_modules_for_extensions&amp;diff=54313</id>
		<title>Python modules for extensions</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=Python_modules_for_extensions&amp;diff=54313"/>
		<updated>2009-10-20T21:08:28Z</updated>

		<summary type="html">&lt;p&gt;Inductiveload: added section on simpletransform&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Extensions]]&lt;br /&gt;
&lt;br /&gt;
== inkex.py ==&lt;br /&gt;
&lt;br /&gt;
This module encapsulates the basic behavior of a script extension, allowing the author to concentrate on manipulating the SVG data. The module provides an '''class Effect()'''. inkex.py was originally designed to provide the Effect (filter) extension type, but has been used for Input/Output extensions simply by overriding additional class methods.&lt;br /&gt;
&lt;br /&gt;
=== Methods ===&lt;br /&gt;
*effect(): override with document processing code.&lt;br /&gt;
*affect(): actuate the script.&lt;br /&gt;
*xpathSingle(path): an xpath wrapper to return a single node.&lt;br /&gt;
*uniqueId(old_id, make_new_id = True): return an id that is unique in the document given a proposed id.&lt;br /&gt;
&lt;br /&gt;
=== Properties ===&lt;br /&gt;
&lt;br /&gt;
*document: DOM document &lt;br /&gt;
*selected: a list of nodes that were selected in inkscape&lt;br /&gt;
*doc_ids: all of the ids used in the document&lt;br /&gt;
*options: options passed to the script&lt;br /&gt;
&lt;br /&gt;
== simplestyle.py ==&lt;br /&gt;
Provides methods for dealing with css data embeded in SVG's style=&amp;quot;&amp;quot; atribute&lt;br /&gt;
&lt;br /&gt;
*parseStyle(string): Create a dictionary from the value of an inline style attribute&lt;br /&gt;
*formatStyle(dict): Format an inline style attribute from a dictionary&lt;br /&gt;
*isColor(c): Determine if its a color we can use. If not, leave it unchanged.&lt;br /&gt;
*parseColor(c): Creates a rgb int array&lt;br /&gt;
*formatColoria(a): int array to #rrggbb&lt;br /&gt;
*formatColorfa(a): float array to #rrggbb&lt;br /&gt;
*formatColor3i(r,g,b): 3 ints to #rrggbb&lt;br /&gt;
*formatColor3f(r,g,b): 3 floats to #rrggbb&lt;br /&gt;
&lt;br /&gt;
*svgcolors: a dictionary defining legal color names and corresponding color values&lt;br /&gt;
&lt;br /&gt;
== simplepath.py ==&lt;br /&gt;
Provides functions to round trip svg path d=&amp;quot;&amp;quot; attribute data and a simple path format mimicing that datastructure. additional functions for scaling translating and rotating path data.&lt;br /&gt;
&lt;br /&gt;
== cubicsuperpath.py ==&lt;br /&gt;
An alternative path representation. access both handles of a node at once. looses a paths open/closed identity.&lt;br /&gt;
&lt;br /&gt;
== simpletransform.py ==&lt;br /&gt;
&lt;br /&gt;
Provides code to easily transform objects.&lt;br /&gt;
&lt;br /&gt;
*parseTransform&lt;br /&gt;
:Takes a string such as &amp;lt;tt&amp;gt;rotate(10)&amp;lt;/tt&amp;gt; and produces a transformation matrix. If you also supply an initial matrix, the new one will be composed with the old one.&lt;br /&gt;
:Available commands: &amp;lt;tt&amp;gt;translate, scale, rotate, skewX, skewY, matrix&amp;lt;/tt&amp;gt;. Other examples:&lt;br /&gt;
::matrix = parseTransform('rotate(10)')&lt;br /&gt;
::matrix = parseTransform('skewY(10)')&lt;br /&gt;
::matrix = parseTransform('translate(10 10)')&lt;br /&gt;
::matrix = parseTransform(' rotate(10)')&lt;br /&gt;
::matrix = parseTransform('translate(700,210) rotate(-30)')&lt;br /&gt;
&lt;br /&gt;
== pturtle.py ==&lt;br /&gt;
&lt;br /&gt;
Provides turtle graphics primitives with svg path data output&lt;br /&gt;
&lt;br /&gt;
== beziermisc.py ==&lt;br /&gt;
Utility functions for working with bezier curves&lt;br /&gt;
&lt;br /&gt;
== cspsubdiv.py ==&lt;br /&gt;
Decompose a path into polylines&lt;br /&gt;
&lt;br /&gt;
== ff*.py ==&lt;br /&gt;
&lt;br /&gt;
an obscure set of tools for dealing with musical scales.&lt;/div&gt;</summary>
		<author><name>Inductiveload</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=SpecCommandLineDrawing/DraftSubmodule&amp;diff=42234</id>
		<title>SpecCommandLineDrawing/DraftSubmodule</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=SpecCommandLineDrawing/DraftSubmodule&amp;diff=42234"/>
		<updated>2009-01-21T01:45:13Z</updated>

		<summary type="html">&lt;p&gt;Inductiveload: New page: *Return to SpecCommandLineDrawing  This module specifies the method for drawing an SVG object from parameters entered by the &amp;quot;command line&amp;quot;. It contains: #A dictionary holding possible...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*Return to [[SpecCommandLineDrawing]]&lt;br /&gt;
&lt;br /&gt;
This module specifies the method for drawing an SVG object from parameters entered by the &amp;quot;command line&amp;quot;. It contains:&lt;br /&gt;
#A dictionary holding possible parameters (except general style paramters - these are found in the [[SpecCommandLineDrawing/DraftAssDir|global association module]]), along with the type of the parameter and the default value, which will be used if the user doesn't specify. For example, if the user enters &amp;lt;tt&amp;gt;circle r:50&amp;lt;/tt&amp;gt;, the circle will be centred at &amp;lt;tt&amp;gt;(0,0)&amp;lt;/tt&amp;gt;.&lt;br /&gt;
#A function called &amp;lt;tt&amp;gt;draw_SVG()&amp;lt;/tt&amp;gt;, which puts the parameters into the correct position in the SVG, and draws it using, in this case, the inkex helper module.&lt;br /&gt;
#A function used to perform overrides for redundant parameters. For example, in the circle case, the radius only is used in drawing the circle. However, if the user enters a diameter and not radius, the default radius (100) would be used unless this function sets the radius to the diameter/2.&lt;br /&gt;
&lt;br /&gt;
==Draft Code==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/env python &lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
######DESCRIPTION######&lt;br /&gt;
&lt;br /&gt;
This script contains routines for drawing circles using command line parameters&lt;br /&gt;
formatted by command_line.py&lt;br /&gt;
&lt;br /&gt;
import inkex, simplestyle&lt;br /&gt;
import command_line&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
command_dictionary = { 'circle':{&lt;br /&gt;
                    'r':{'t':'scalar',  'd':100},   #radius     if r given, overrides diameter&lt;br /&gt;
                    'd':{'t':'scalar'},             #diameter   &lt;br /&gt;
                    'c':{'t':'point' ,  'd':(0,0)} #centre     uses the inkscape position, if given&lt;br /&gt;
              }}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def draw_SVG(params, parent):&lt;br /&gt;
    style = command_line.create_SVG_style_dict(params)&lt;br /&gt;
 &lt;br /&gt;
    attribs = {'style':simplestyle.formatStyle(style),&lt;br /&gt;
                'cx':           str(params['c'][0]),&lt;br /&gt;
                'cy':           str(params['c'][1]),&lt;br /&gt;
                'r':            str(params['r'])&lt;br /&gt;
            }&lt;br /&gt;
    inkex.etree.SubElement(parent, inkex.addNS('circle','svg'), attribs )&lt;br /&gt;
&lt;br /&gt;
def set_defaults(params):&lt;br /&gt;
&lt;br /&gt;
	#r overrides d&lt;br /&gt;
	if 'd' in params and 'r' not in params: &lt;br /&gt;
		params['r'] = params['d']/2.0&lt;br /&gt;
&lt;br /&gt;
	return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Inductiveload</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=SpecCommandLineDrawing/DraftAssDir&amp;diff=42224</id>
		<title>SpecCommandLineDrawing/DraftAssDir</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=SpecCommandLineDrawing/DraftAssDir&amp;diff=42224"/>
		<updated>2009-01-21T01:33:18Z</updated>

		<summary type="html">&lt;p&gt;Inductiveload: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*Return to [[SpecCommandLineDrawing]]&lt;br /&gt;
&lt;br /&gt;
The association directory is a module that contains global information for the command line editing module. This includes:&lt;br /&gt;
#A dictionary linking the command header (eg &amp;lt;tt&amp;gt;circle&amp;lt;/tt&amp;gt;) with the relevant module containing the parameters and SVG drawing function (i.e. &amp;lt;tt&amp;gt;cl_circle.py&amp;lt;/tt&amp;gt;)&lt;br /&gt;
#A dictionary containing style attributes that apply to all objects, so these don't need to be specified for each object. (For example, fill colour, stroke width, etc).&lt;br /&gt;
&lt;br /&gt;
==Draft Code==&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/env python &lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
######DESCRIPTION######&lt;br /&gt;
&lt;br /&gt;
This script contains a dictionary for matching command headers to the modules&lt;br /&gt;
containing the relevant command dictionaries and drawing routines.&lt;br /&gt;
&lt;br /&gt;
If a module is added to the directory, it should be added here along with the&lt;br /&gt;
command headers it responds to. In this way, it is easy to add or remove modules&lt;br /&gt;
without having to modify the core script.&lt;br /&gt;
&lt;br /&gt;
directory = {   'circle'        :'cl_circle',&lt;br /&gt;
                'rect'          :'cl_rect',&lt;br /&gt;
                'poly'          :'cl_poly',&lt;br /&gt;
                'line'          :'cl_line',&lt;br /&gt;
                'star'          :'cl_star' &lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
std_style = { #style commands that are applicable to &amp;quot;standard&amp;quot; objects&lt;br /&gt;
                't': {'t':'scalar', 'xml':'stroke-width',    'd':1},            #line thickness&lt;br /&gt;
                'f': {'t':'colour', 'xml':'fill',            'd':'none'},       #fill colour&lt;br /&gt;
                'fo':{'t':'scalar', 'xml':'fill-opacity',    'd':'1'}           #stroke opacity&lt;br /&gt;
                's': {'t':'colour', 'xml':'stroke',          'd':'#000000'},    #stroke colour&lt;br /&gt;
                'so':{'t':'scalar', 'xml':'stroke-opacity',  'd':'1'}           #stroke opacity&lt;br /&gt;
            }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Inductiveload</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=SpecCommandLineDrawing/DraftAssDir&amp;diff=42214</id>
		<title>SpecCommandLineDrawing/DraftAssDir</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=SpecCommandLineDrawing/DraftAssDir&amp;diff=42214"/>
		<updated>2009-01-21T01:32:20Z</updated>

		<summary type="html">&lt;p&gt;Inductiveload: New page: The association directory is a module that contains global information for the command line editing module. This includes: #A dictionary linking the command header (eg &amp;lt;tt&amp;gt;circle&amp;lt;/tt&amp;gt;) wit...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The association directory is a module that contains global information for the command line editing module. This includes:&lt;br /&gt;
#A dictionary linking the command header (eg &amp;lt;tt&amp;gt;circle&amp;lt;/tt&amp;gt;) with the relevant module containing the parameters and SVG drawing function (i.e. &amp;lt;tt&amp;gt;cl_circle.py&amp;lt;/tt&amp;gt;)&lt;br /&gt;
#A dictionary containing style attributes that apply to all objects, so these don't need to be specified for each object. (For example, fill colour, stroke width, etc).&lt;br /&gt;
&lt;br /&gt;
==Draft Code==&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/env python &lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
######DESCRIPTION######&lt;br /&gt;
&lt;br /&gt;
This script contains a dictionary for matching command headers to the modules&lt;br /&gt;
containing the relevant command dictionaries and drawing routines.&lt;br /&gt;
&lt;br /&gt;
If a module is added to the directory, it should be added here along with the&lt;br /&gt;
command headers it responds to. In this way, it is easy to add or remove modules&lt;br /&gt;
without having to modify the core script.&lt;br /&gt;
&lt;br /&gt;
directory = {   'circle'        :'cl_circle',&lt;br /&gt;
                'rect'          :'cl_rect',&lt;br /&gt;
                'poly'          :'cl_poly',&lt;br /&gt;
                'line'          :'cl_line',&lt;br /&gt;
                'star'          :'cl_star' &lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
std_style = { #style commands that are applicable to &amp;quot;standard&amp;quot; objects&lt;br /&gt;
                't': {'t':'scalar', 'xml':'stroke-width',    'd':1},            #line thickness&lt;br /&gt;
                'f': {'t':'colour', 'xml':'fill',            'd':'none'},       #fill colour&lt;br /&gt;
                'fo':{'t':'scalar', 'xml':'fill-opacity',    'd':'1'}           #stroke opacity&lt;br /&gt;
                's': {'t':'colour', 'xml':'stroke',          'd':'#000000'},    #stroke colour&lt;br /&gt;
                'so':{'t':'scalar', 'xml':'stroke-opacity',  'd':'1'}           #stroke opacity&lt;br /&gt;
            }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Inductiveload</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=SpecCommandLineDrawing&amp;diff=37084</id>
		<title>SpecCommandLineDrawing</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=SpecCommandLineDrawing&amp;diff=37084"/>
		<updated>2008-10-22T00:52:11Z</updated>

		<summary type="html">&lt;p&gt;Inductiveload: /* Extensibility &amp;amp; Scriptability */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Outline==&lt;br /&gt;
&lt;br /&gt;
At the moment, Inkscape does not allow users to enter commands to Inkscape in a text-based format. This specification proposed to add that functionality, both at the command line and internally, possibly using a command-line box similar to Rhino's. In this way, a user will be able to directly enter precise instruction to Inkscape with minimal effort. For example, a command such as &amp;quot;circle r:50&amp;quot; could be entered and Inkscape will produce a circle of radius 50px, with all other attributes set to default values. In this way, technical drawing becomes easier, and the interface to Inkscape from external programs is vastly increased.&lt;br /&gt;
&lt;br /&gt;
==UI Changes==&lt;br /&gt;
&lt;br /&gt;
The only UI integration this proposal needs is a command line text box and an &amp;quot;Enter&amp;quot; button. Rhino has an advanced text entry system, using a long text box under the toolbars. Eagle, a piece of electrical CAD software, also has this system.&lt;br /&gt;
&lt;br /&gt;
In Inkscape, I anticipate this being located under the context toolbar, but above the ruler and drawing area. Ideally, a button would be provided on the main toolbar to allow this command entry box to be toggled on or off to save space for those who don't need this feature.&lt;br /&gt;
&lt;br /&gt;
==Functionality Overview==&lt;br /&gt;
&lt;br /&gt;
This proposal would add following functionality:&lt;br /&gt;
*Creation of SVG items in Inkscape using just text input. Default options should be supplied so that properties not important to a user can be left out of the command, but still be taken care of.&lt;br /&gt;
*Manipulation of existing objects (scaling, duplication, deletion, etc)&lt;br /&gt;
*Allow the request of document information by external applications (eg. request document size or the properties of a given object etc)&lt;br /&gt;
*Increasing document manipulation by textual means (page size, exporting etc)&lt;br /&gt;
*Allow extensions and 3D party applications to have a simple way of editing Inkscape documents. All they would have to do is supply the command string, rather than as they do now, mess around with inkex helper modules, etc.&lt;br /&gt;
&lt;br /&gt;
==Basic Command Structure==&lt;br /&gt;
&lt;br /&gt;
This section is extremely preliminary and is mostly based on a Python mock-up rather than practical reasons. Hopefully, at some point a formal grammar will be established.&lt;br /&gt;
&lt;br /&gt;
More than one command can be entered at once. These are separated by a semicolon. The last command should not need a semicolon.&lt;br /&gt;
&lt;br /&gt;
 cmd1; cmd2; cmd3&lt;br /&gt;
&lt;br /&gt;
Each command is made up of a command header and a zero or more of parameters, separated by spaces:&lt;br /&gt;
&lt;br /&gt;
 cmd 1&lt;br /&gt;
 cmd2 param2&lt;br /&gt;
 cmd3 param31 param32&lt;br /&gt;
&lt;br /&gt;
Each parameter is made up of one or more arguments, separated by colons:&lt;br /&gt;
&lt;br /&gt;
 cmd1 p1:arg1&lt;br /&gt;
 cmd2 p21:arg211 p22:arg221:arg222&lt;br /&gt;
&lt;br /&gt;
If an argument represents an item that needs more than one value (such as coordinates), these are separated by commas:&lt;br /&gt;
&lt;br /&gt;
 cmd1 p1:arg11,arg12 p2:arg2&lt;br /&gt;
&lt;br /&gt;
For example, a circle with a radius of 50px and centre (500,400)px could be entered as:&lt;br /&gt;
 circle r:50 c:500,400&lt;br /&gt;
&lt;br /&gt;
It should also be possible to enter an expression. In this way:&lt;br /&gt;
 circle r:25/2&lt;br /&gt;
should end up as a circle with a radius of 12.5px. This would dramatically reduce the time spend moving data between calculator apps and Inkscape in the case especially of technical drawing.&lt;br /&gt;
&lt;br /&gt;
Different units should be easily used, so that one may easily use Inkscape software for engineering purposes.&lt;br /&gt;
 circle r:10mm&lt;br /&gt;
should be automatically translated into px and render as a circle 10mm across.&lt;br /&gt;
&lt;br /&gt;
==Error Handling==&lt;br /&gt;
&lt;br /&gt;
The parser for these commands should catch errors wherever possible, and be able to give detailed reasons why it failed. This will help third parties develop an understanding of Inkscape's command structure (useful for encourage its use as a technical drawing aid) and allow easy debugging of external code.&lt;br /&gt;
&lt;br /&gt;
For example the entry (say)&lt;br /&gt;
 circle er:45&lt;br /&gt;
should fail with the reason that 'er' is not a known command header.&lt;br /&gt;
&lt;br /&gt;
The same goes for incorrect numbers of arguments or sub-arguments, incorrect units (eg one should not be able to specify 'px' for a colour)&lt;br /&gt;
&lt;br /&gt;
==Documentation==&lt;br /&gt;
&lt;br /&gt;
The Inkscape command structure should have a detailed and thorough explanation on the Inkscape wiki or elsewhere. Ideally, one should be able to summon the help for a function using a command such as&lt;br /&gt;
&lt;br /&gt;
 help:circle&lt;br /&gt;
&lt;br /&gt;
Which will link to the relevant online resource.&lt;br /&gt;
&lt;br /&gt;
==Extensibility &amp;amp; Scriptability==&lt;br /&gt;
&lt;br /&gt;
The command structure should be easily extended to new functions and commands. I see two contenders for this system: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;A global XML-based list of commands and available parameters can be provided to allow quick integration of new functions, as well as providing brief help if needed.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;A draft command list is found here: [[SpecCommandLineDrawing/DraftCmdList|Draft Command List]]&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Commands are provided as stand-alone packages in a dedicated sub-directory. Each command file contains its own command dictionary, as well as the routines for generating the SVG elements.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;This means that the commands are extremely easy to add, as all that is required is to add a single file to the correct folder. This makes a future automated system for adding new commands very easy to implement, and reduces the possibility that such a system will damage the global file though mistakes made in writing updates.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;A short module containing the associations between what you write (eg. &amp;lt;tt&amp;gt;circle&amp;lt;/tt&amp;gt;) and the module containing the functions for that command (eg. &amp;lt;tt&amp;gt;cl_circle.py&amp;lt;/tt&amp;gt;) would seem to be the best way to allow the central script to keep track of what does and doesn't exist in the directory. I suggest that the functions are loaded dynamically so that only the needed functions are loaded. While this module could be included in the central script, breaking it out reduces the exposure of an inexperienced user to the main code, and reduces the chances of damage.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
A sample module is provided [[SpecCommandLineDrawing/DraftSubmodule|here]].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
A sample association directory is provided [[SpecCommandLineDrawing/DraftAssDir|here]].&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here, accessibility is the name of the game, as we want new capabilities to the command line tool to be easy to produce and implement.&lt;br /&gt;
&lt;br /&gt;
It should also be very easy to script for this command-line system. While I believe making the command line instuctions a scripting language in itself is entirely unnecessary, I think it would be good if Inkscape provided a way to either enter a multiline Python script (as Python is already included with Inkscape) or run one from a remote location which was made with another editor, or ideally both.&lt;br /&gt;
&lt;br /&gt;
In this way, a user can quickly enter a command like:&lt;br /&gt;
 for i in range(5):&lt;br /&gt;
    ink(circle r:50*i)&lt;br /&gt;
&lt;br /&gt;
and get 5 circles of increasing radius. If Inkscape had a small window for entering scripts like this, saving them loading them, it would save time and make the interface even more useful. It would  allow people with no knowledge of Python (but some programming know-how such as &amp;lt;tt&amp;gt;for&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;if&amp;lt;/tt&amp;gt; statements, etc.) to be able to very easily script Inkscape.&lt;br /&gt;
&lt;br /&gt;
This script window should incorporate the code entered there into a standard &amp;quot;container&amp;quot; script, which would deal with loading of the relevant modules (eg. the one containing the &amp;lt;tt&amp;gt;ink()&amp;lt;/tt&amp;gt; command in this case). Thus the user is freed from having to know ''why'' the script works, and only needs to know how to use it.&lt;br /&gt;
&lt;br /&gt;
==External Links==&lt;br /&gt;
&lt;br /&gt;
*[http://www.rhino3d.com Rhino3D modeller with command line tool]&lt;br /&gt;
*[http://en.wiki.mcneel.com/default.aspx/McNeel/IntroductionToTheRhinoInterface.html An Introduction to the Rhino Interface]&lt;br /&gt;
*[http://cadsoft.de Eagle CAD System for electrical design. Includes a command line interface]&lt;/div&gt;</summary>
		<author><name>Inductiveload</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=SpecCommandLineDrawing&amp;diff=36954</id>
		<title>SpecCommandLineDrawing</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=SpecCommandLineDrawing&amp;diff=36954"/>
		<updated>2008-10-20T16:42:36Z</updated>

		<summary type="html">&lt;p&gt;Inductiveload: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Outline==&lt;br /&gt;
&lt;br /&gt;
At the moment, Inkscape does not allow users to enter commands to Inkscape in a text-based format. This specification proposed to add that functionality, both at the command line and internally, possibly using a command-line box similar to Rhino's. In this way, a user will be able to directly enter precise instruction to Inkscape with minimal effort. For example, a command such as &amp;quot;circle r:50&amp;quot; could be entered and Inkscape will produce a circle of radius 50px, with all other attributes set to default values. In this way, technical drawing becomes easier, and the interface to Inkscape from external programs is vastly increased.&lt;br /&gt;
&lt;br /&gt;
==UI Changes==&lt;br /&gt;
&lt;br /&gt;
The only UI integration this proposal needs is a command line text box and an &amp;quot;Enter&amp;quot; button. Rhino has an advanced text entry system, using a long text box under the toolbars. Eagle, a piece of electrical CAD software, also has this system.&lt;br /&gt;
&lt;br /&gt;
In Inkscape, I anticipate this being located under the context toolbar, but above the ruler and drawing area. Ideally, a button would be provided on the main toolbar to allow this command entry box to be toggled on or off to save space for those who don't need this feature.&lt;br /&gt;
&lt;br /&gt;
==Functionality Overview==&lt;br /&gt;
&lt;br /&gt;
This proposal would add following functionality:&lt;br /&gt;
*Creation of SVG items in Inkscape using just text input. Default options should be supplied so that properties not important to a user can be left out of the command, but still be taken care of.&lt;br /&gt;
*Manipulation of existing objects (scaling, duplication, deletion, etc)&lt;br /&gt;
*Allow the request of document information by external applications (eg. request document size or the properties of a given object etc)&lt;br /&gt;
*Increasing document manipulation by textual means (page size, exporting etc)&lt;br /&gt;
*Allow extensions and 3D party applications to have a simple way of editing Inkscape documents. All they would have to do is supply the command string, rather than as they do now, mess around with inkex helper modules, etc.&lt;br /&gt;
&lt;br /&gt;
==Basic Command Structure==&lt;br /&gt;
&lt;br /&gt;
This section is extremely preliminary and is mostly based on a Python mock-up rather than practical reasons. Hopefully, at some point a formal grammar will be established.&lt;br /&gt;
&lt;br /&gt;
More than one command can be entered at once. These are separated by a semicolon. The last command should not need a semicolon.&lt;br /&gt;
&lt;br /&gt;
 cmd1; cmd2; cmd3&lt;br /&gt;
&lt;br /&gt;
Each command is made up of a command header and a zero or more of parameters, separated by spaces:&lt;br /&gt;
&lt;br /&gt;
 cmd 1&lt;br /&gt;
 cmd2 param2&lt;br /&gt;
 cmd3 param31 param32&lt;br /&gt;
&lt;br /&gt;
Each parameter is made up of one or more arguments, separated by colons:&lt;br /&gt;
&lt;br /&gt;
 cmd1 p1:arg1&lt;br /&gt;
 cmd2 p21:arg211 p22:arg221:arg222&lt;br /&gt;
&lt;br /&gt;
If an argument represents an item that needs more than one value (such as coordinates), these are separated by commas:&lt;br /&gt;
&lt;br /&gt;
 cmd1 p1:arg11,arg12 p2:arg2&lt;br /&gt;
&lt;br /&gt;
For example, a circle with a radius of 50px and centre (500,400)px could be entered as:&lt;br /&gt;
 circle r:50 c:500,400&lt;br /&gt;
&lt;br /&gt;
It should also be possible to enter an expression. In this way:&lt;br /&gt;
 circle r:25/2&lt;br /&gt;
should end up as a circle with a radius of 12.5px. This would dramatically reduce the time spend moving data between calculator apps and Inkscape in the case especially of technical drawing.&lt;br /&gt;
&lt;br /&gt;
Different units should be easily used, so that one may easily use Inkscape software for engineering purposes.&lt;br /&gt;
 circle r:10mm&lt;br /&gt;
should be automatically translated into px and render as a circle 10mm across.&lt;br /&gt;
&lt;br /&gt;
==Error Handling==&lt;br /&gt;
&lt;br /&gt;
The parser for these commands should catch errors wherever possible, and be able to give detailed reasons why it failed. This will help third parties develop an understanding of Inkscape's command structure (useful for encourage its use as a technical drawing aid) and allow easy debugging of external code.&lt;br /&gt;
&lt;br /&gt;
For example the entry (say)&lt;br /&gt;
 circle er:45&lt;br /&gt;
should fail with the reason that 'er' is not a known command header.&lt;br /&gt;
&lt;br /&gt;
The same goes for incorrect numbers of arguments or sub-arguments, incorrect units (eg one should not be able to specify 'px' for a colour)&lt;br /&gt;
&lt;br /&gt;
==Documentation==&lt;br /&gt;
&lt;br /&gt;
The Inkscape command structure should have a detailed and thorough explanation on the Inkscape wiki or elsewhere. Ideally, one should be able to summon the help for a function using a command such as&lt;br /&gt;
&lt;br /&gt;
 help:circle&lt;br /&gt;
&lt;br /&gt;
Which will link to the relevant online resource.&lt;br /&gt;
&lt;br /&gt;
==Extensibility &amp;amp; Scriptability==&lt;br /&gt;
&lt;br /&gt;
The command structure should be easily extended to new functions and commands. I see two contenders for this system: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;A global XML-based list of commands and available parameters can be provided to allow quick integration of new functions, as well as providing brief help if needed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;A draft command list is found here: [[SpecCommandLineDrawing/DraftCmdList|Draft Command List]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
Commands are provided as stand-alone packages in a dedicated sub-directory. Each command file contains its own command dictionary, as well as the routines for generating the SVG elements.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;This means that the commands are extremely easy to add, as all that is required is to add a single file to the correct folder. This makes a future automated system for adding new commands very easy to implement, and reduces the possibility that such a system will damage the global file though mistakes made in writing updates.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here, accessibility is the name of the game, as we want new capabilities to the command line tool to be easy to produce and implement.&lt;br /&gt;
&lt;br /&gt;
It should also be very easy to script for this command-line system. While I believe making the command line instuctions a scripting language in itself is entirely unnecessary, I think it would be good if Inkscape provided a way to either enter a multiline Python script (as Python is already included with Inkscape) or run one from a remote location which was made with another editor, or ideally both.&lt;br /&gt;
&lt;br /&gt;
In this way, a user can quickly enter a command like:&lt;br /&gt;
 for i in range(5):&lt;br /&gt;
    ink(circle r:50*i)&lt;br /&gt;
&lt;br /&gt;
and get 5 circles of increasing radius. If Inkscape had a small window for entering scripts like this, saving them loading them, it would save time and make the interface even more useful. It would  allow people with no knowledge of Python (but some programming know-how such as &amp;lt;tt&amp;gt;for&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;if&amp;lt;/tt&amp;gt; statements, etc.) to be able to very easily script Inkscape.&lt;br /&gt;
&lt;br /&gt;
This script window should incorporate the code entered there into a standard &amp;quot;container&amp;quot; script, which would deal with loading of the relevant modules (eg. the one containing the &amp;lt;tt&amp;gt;ink()&amp;lt;/tt&amp;gt; command in this case). Thus the user is freed from having to know ''why'' the script works, and only needs to know how to use it.&lt;br /&gt;
&lt;br /&gt;
==External Links==&lt;br /&gt;
&lt;br /&gt;
*[http://www.rhino3d.com Rhino3D modeller with command line tool]&lt;br /&gt;
*[http://en.wiki.mcneel.com/default.aspx/McNeel/IntroductionToTheRhinoInterface.html An Introduction to the Rhino Interface]&lt;br /&gt;
*[http://cadsoft.de Eagle CAD System for electrical design. Includes a command line interface]&lt;/div&gt;</summary>
		<author><name>Inductiveload</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=SpecCommandLineDrawing&amp;diff=36734</id>
		<title>SpecCommandLineDrawing</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=SpecCommandLineDrawing&amp;diff=36734"/>
		<updated>2008-10-11T04:07:37Z</updated>

		<summary type="html">&lt;p&gt;Inductiveload: /* Extensibility &amp;amp; Scriptability */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Outline==&lt;br /&gt;
&lt;br /&gt;
At the moment, Inkscape does not allow users to enter commands to Inkscape in a text-based format. This specification proposed to add that functionality, both at the command line and internally, possibly using a command-line box similar to Rhino's. In this way, a user will be able to directly enter precise instruction to Inkscape with minimal effort. For example, a command such as &amp;quot;circle r:50&amp;quot; could be entered and Inkscape will produce a circle of radius 50px, with all other attributes set to default values. In this way, technical drawing becomes easier, and the interface to Inkscape from external programs is vastly increased.&lt;br /&gt;
&lt;br /&gt;
==UI Changes==&lt;br /&gt;
&lt;br /&gt;
The only UI integration this proposal needs is a command line text box and an &amp;quot;Enter&amp;quot; button. Rhino has an advanced text entry system, using a long text box under the toolbars. Eagle, a piece of CAD software also has this system.&lt;br /&gt;
&lt;br /&gt;
In Inkscape, I anticipate this being located under the context toolbar, but above the ruler and drawing area. Ideally, a button would be provided on the main toolbar to allow this command entry box to be toggled on or off to save space for those who don't need this feature.&lt;br /&gt;
&lt;br /&gt;
==Functionality Overview==&lt;br /&gt;
&lt;br /&gt;
This proposal would add following functionality:&lt;br /&gt;
*Creation of SVG items in Inkscape using just text input. Default options should be supplied so that properties not important to a user can be left out of the command, but still be taken care of.&lt;br /&gt;
*Manipulation of existing objects (scaling, duplication, deletion, etc)&lt;br /&gt;
*Allow the request of document information by external applications (eg. request document size or the properties of a given object etc)&lt;br /&gt;
*Increasing document manipulation by textual means (page size, exporting etc)&lt;br /&gt;
*Allow extensions and 3D party applications to have a simple way of editing Inkscape documents. All they would have to do is supply the command string, rather than as they do now, mess around with inkex helper modules, etc.&lt;br /&gt;
&lt;br /&gt;
==Basic Command Structure==&lt;br /&gt;
&lt;br /&gt;
This section is extremely preliminary and is mostly based on a Python mock-up rather than practical reasons. Hopefully, at some point a formal grammar will be established.&lt;br /&gt;
&lt;br /&gt;
More than one command can be entered at once. These are separated by a semicolon. The last command should not need a semicolon.&lt;br /&gt;
&lt;br /&gt;
 cmd1; cmd2; cmd3&lt;br /&gt;
&lt;br /&gt;
Each command is made up of a command header and a zero or more of parameters, separated by spaces:&lt;br /&gt;
&lt;br /&gt;
 cmd 1&lt;br /&gt;
 cmd2 param2&lt;br /&gt;
 cmd3 param31 param32&lt;br /&gt;
&lt;br /&gt;
Each parameter is made up of one or more arguments, separated by colons:&lt;br /&gt;
&lt;br /&gt;
 cmd1 p1:arg1&lt;br /&gt;
 cmd2 p21:arg211 p22:arg221:arg222&lt;br /&gt;
&lt;br /&gt;
If an argument represents an item that needs more than one value (such as coordinates), these are separated by commas:&lt;br /&gt;
&lt;br /&gt;
 cmd1 p1:arg11,arg12 p2:arg2&lt;br /&gt;
&lt;br /&gt;
For example, a circle with a radius of 50px and centre (500,400)px could be entered as:&lt;br /&gt;
 circle r:50 c:500,400&lt;br /&gt;
&lt;br /&gt;
It should also be possible to enter an expression. In this way:&lt;br /&gt;
 circle r:25/2&lt;br /&gt;
should end up as a circle with a radius of 12.5px. This would dramatically reduce the time spend moving data between calculator apps and Inkscape in the case especially of technical drawing.&lt;br /&gt;
&lt;br /&gt;
Different units should be easily used, so that one may easily use Inkscape software for engineering purposes.&lt;br /&gt;
 circle r:10mm&lt;br /&gt;
should be automatically translated into px and render as a circle 10mm across.&lt;br /&gt;
&lt;br /&gt;
==Error Handling==&lt;br /&gt;
&lt;br /&gt;
The parser for these commands should catch errors wherever possible, and be able to give detailed reasons why it failed. This will help third parties develop an understanding of Inkscape's command structure (useful for encourage its use as a technical drawing aid) and allow easy debugging of external code.&lt;br /&gt;
&lt;br /&gt;
For example the entry (say)&lt;br /&gt;
 circle er:45&lt;br /&gt;
should fail with the reason that 'er' is not a known command header.&lt;br /&gt;
&lt;br /&gt;
The same goes for incorrect numbers of arguments or sub-arguments, incorrect units (eg one should not be able to specify 'px' for a colour)&lt;br /&gt;
&lt;br /&gt;
==Documentation==&lt;br /&gt;
&lt;br /&gt;
The Inkscape command structure should have a detailed and thorough explanation on the Inkscape wiki or elsewhere. Ideally, one should be able to summon the help for a function using a command such as&lt;br /&gt;
&lt;br /&gt;
 help:circle&lt;br /&gt;
&lt;br /&gt;
Which will link to the relevant online resource.&lt;br /&gt;
&lt;br /&gt;
==Extensibility &amp;amp; Scriptability==&lt;br /&gt;
&lt;br /&gt;
The command structure should be easily extended to new functions and commands. Perhaps an XML-based list of commands and available parameters can be provided to allow quick integration of new functions, as well as providing brief help if needed.&lt;br /&gt;
&lt;br /&gt;
*A draft command list is found here: [[SpecCommandLineDrawing/DraftCmdList|Draft Command List]]&lt;br /&gt;
&lt;br /&gt;
Here, accessibility is the name of the game, as we want new capabilities to the command line tool to be easy to produce and implement.&lt;br /&gt;
&lt;br /&gt;
It should also be very easy to script for this command-line system. While I believe making the command line instuctions a scripting language in itself is entirely unnecessary, I think it would be good if Inkscape provided a way to either enter a multiline Python script (as Python is already included with Inkscape) or run one from a remote location which was made with another editor, or ideally both.&lt;br /&gt;
&lt;br /&gt;
In this way, a user can quickly enter a command like:&lt;br /&gt;
 for i in range(5):&lt;br /&gt;
    ink(circle r:50*i)&lt;br /&gt;
&lt;br /&gt;
and get 5 circles of increasing radius. If Inkscape had a small window for entering scripts like this and loading them, it would save time and make the interface even more useful.&lt;/div&gt;</summary>
		<author><name>Inductiveload</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=SpecCommandLineDrawing/DraftCmdList&amp;diff=36724</id>
		<title>SpecCommandLineDrawing/DraftCmdList</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=SpecCommandLineDrawing/DraftCmdList&amp;diff=36724"/>
		<updated>2008-10-11T04:05:09Z</updated>

		<summary type="html">&lt;p&gt;Inductiveload: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*Return to [[SpecCommandLineDrawing]]&lt;br /&gt;
&lt;br /&gt;
This is a proposed format for an XML-based list of available commands and parameters.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Command directory --&amp;gt;&lt;br /&gt;
&amp;lt;command_directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;!-- List of types for the parameters --&amp;gt;&lt;br /&gt;
	&amp;lt;type-list&amp;gt;&lt;br /&gt;
		&amp;lt;type&amp;gt;&lt;br /&gt;
			&amp;lt;name&amp;gt;number&amp;lt;/name&amp;gt;&lt;br /&gt;
			&amp;lt;desc&amp;gt;A single number&amp;lt;/desc&amp;gt;&lt;br /&gt;
		&amp;lt;/type&amp;gt;&lt;br /&gt;
		&amp;lt;type&amp;gt;&lt;br /&gt;
			&amp;lt;name&amp;gt;point&amp;lt;/name&amp;gt;&lt;br /&gt;
			&amp;lt;desc&amp;gt;A pair of numbers specifying a point&amp;lt;/desc&amp;gt;&lt;br /&gt;
		&amp;lt;/type&amp;gt;&lt;br /&gt;
	&amp;lt;/type-list&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	&amp;lt;!-- List of commands available on the command line --&amp;gt;&lt;br /&gt;
	&amp;lt;command-list&amp;gt;&lt;br /&gt;
		&amp;lt;cmd name=&amp;quot;circle&amp;quot; desc=&amp;quot;Draws a circle.&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;parameter&amp;gt;&lt;br /&gt;
				&amp;lt;name&amp;gt;r&amp;lt;/name&amp;gt;&lt;br /&gt;
				&amp;lt;desc&amp;gt;Radius of the circle.&amp;lt;/desc&amp;gt;&lt;br /&gt;
				&amp;lt;type&amp;gt;number&amp;lt;/type&amp;gt;&lt;br /&gt;
				&amp;lt;default&amp;gt;200&amp;lt;/default&amp;gt;&lt;br /&gt;
			&amp;lt;/parameter&amp;gt;&lt;br /&gt;
			&amp;lt;parameter&amp;gt;&lt;br /&gt;
				&amp;lt;name&amp;gt;c&amp;lt;/name&amp;gt;&lt;br /&gt;
				&amp;lt;desc&amp;gt;Centre of the circle.&amp;lt;/desc&amp;gt;&lt;br /&gt;
				&amp;lt;type&amp;gt;point&amp;lt;/type&amp;gt;&lt;br /&gt;
				&amp;lt;default&amp;gt;0,0&amp;lt;/default&amp;gt;&lt;br /&gt;
			&amp;lt;/parameter&amp;gt;&lt;br /&gt;
		&amp;lt;/cmd&amp;gt;&lt;br /&gt;
		&amp;lt;cmd name=&amp;quot;rect&amp;quot; desc=&amp;quot;Draws a rectangle.&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;parameter&amp;gt;&lt;br /&gt;
				&amp;lt;name&amp;gt;w&amp;lt;/name&amp;gt;&lt;br /&gt;
				&amp;lt;desc&amp;gt;Width of the rectangle.&amp;lt;/desc&amp;gt;&lt;br /&gt;
				&amp;lt;type&amp;gt;number&amp;lt;/type&amp;gt;&lt;br /&gt;
				&amp;lt;default&amp;gt;100&amp;lt;/default&amp;gt;&lt;br /&gt;
			&amp;lt;/parameter&amp;gt;&lt;br /&gt;
			&amp;lt;parameter&amp;gt;&lt;br /&gt;
				&amp;lt;name&amp;gt;h&amp;lt;/name&amp;gt;&lt;br /&gt;
				&amp;lt;desc&amp;gt;Height of the rectangle.&amp;lt;/desc&amp;gt;&lt;br /&gt;
				&amp;lt;type&amp;gt;point&amp;lt;/type&amp;gt;&lt;br /&gt;
				&amp;lt;default&amp;gt;100&amp;lt;/default&amp;gt;&lt;br /&gt;
			&amp;lt;/parameter&amp;gt;&lt;br /&gt;
		&amp;lt;/cmd&amp;gt;&lt;br /&gt;
	&amp;lt;/command-list&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;/command_directory&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Return to [[SpecCommandLineDrawing]]&lt;/div&gt;</summary>
		<author><name>Inductiveload</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=SpecCommandLineDrawing/DraftCmdList&amp;diff=36714</id>
		<title>SpecCommandLineDrawing/DraftCmdList</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=SpecCommandLineDrawing/DraftCmdList&amp;diff=36714"/>
		<updated>2008-10-11T04:04:26Z</updated>

		<summary type="html">&lt;p&gt;Inductiveload: New page: This is a proposed format for an XML-based list of available commands and parameters.  &amp;lt;tt&amp;gt;&amp;lt;pre&amp;gt;  &amp;lt;!-- Command directory --&amp;gt; &amp;lt;command_directory&amp;gt;  	&amp;lt;!-- List of types for the parameters --&amp;gt;...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a proposed format for an XML-based list of available commands and parameters.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Command directory --&amp;gt;&lt;br /&gt;
&amp;lt;command_directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;!-- List of types for the parameters --&amp;gt;&lt;br /&gt;
	&amp;lt;type-list&amp;gt;&lt;br /&gt;
		&amp;lt;type&amp;gt;&lt;br /&gt;
			&amp;lt;name&amp;gt;number&amp;lt;/name&amp;gt;&lt;br /&gt;
			&amp;lt;desc&amp;gt;A single number&amp;lt;/desc&amp;gt;&lt;br /&gt;
		&amp;lt;/type&amp;gt;&lt;br /&gt;
		&amp;lt;type&amp;gt;&lt;br /&gt;
			&amp;lt;name&amp;gt;point&amp;lt;/name&amp;gt;&lt;br /&gt;
			&amp;lt;desc&amp;gt;A pair of numbers specifying a point&amp;lt;/desc&amp;gt;&lt;br /&gt;
		&amp;lt;/type&amp;gt;&lt;br /&gt;
	&amp;lt;/type-list&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	&amp;lt;!-- List of commands available on the command line --&amp;gt;&lt;br /&gt;
	&amp;lt;command-list&amp;gt;&lt;br /&gt;
		&amp;lt;cmd name=&amp;quot;circle&amp;quot; desc=&amp;quot;Draws a circle.&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;parameter&amp;gt;&lt;br /&gt;
				&amp;lt;name&amp;gt;r&amp;lt;/name&amp;gt;&lt;br /&gt;
				&amp;lt;desc&amp;gt;Radius of the circle.&amp;lt;/desc&amp;gt;&lt;br /&gt;
				&amp;lt;type&amp;gt;number&amp;lt;/type&amp;gt;&lt;br /&gt;
				&amp;lt;default&amp;gt;200&amp;lt;/default&amp;gt;&lt;br /&gt;
			&amp;lt;/parameter&amp;gt;&lt;br /&gt;
			&amp;lt;parameter&amp;gt;&lt;br /&gt;
				&amp;lt;name&amp;gt;c&amp;lt;/name&amp;gt;&lt;br /&gt;
				&amp;lt;desc&amp;gt;Centre of the circle.&amp;lt;/desc&amp;gt;&lt;br /&gt;
				&amp;lt;type&amp;gt;point&amp;lt;/type&amp;gt;&lt;br /&gt;
				&amp;lt;default&amp;gt;0,0&amp;lt;/default&amp;gt;&lt;br /&gt;
			&amp;lt;/parameter&amp;gt;&lt;br /&gt;
		&amp;lt;/cmd&amp;gt;&lt;br /&gt;
		&amp;lt;cmd name=&amp;quot;rect&amp;quot; desc=&amp;quot;Draws a rectangle.&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;parameter&amp;gt;&lt;br /&gt;
				&amp;lt;name&amp;gt;w&amp;lt;/name&amp;gt;&lt;br /&gt;
				&amp;lt;desc&amp;gt;Width of the rectangle.&amp;lt;/desc&amp;gt;&lt;br /&gt;
				&amp;lt;type&amp;gt;number&amp;lt;/type&amp;gt;&lt;br /&gt;
				&amp;lt;default&amp;gt;100&amp;lt;/default&amp;gt;&lt;br /&gt;
			&amp;lt;/parameter&amp;gt;&lt;br /&gt;
			&amp;lt;parameter&amp;gt;&lt;br /&gt;
				&amp;lt;name&amp;gt;h&amp;lt;/name&amp;gt;&lt;br /&gt;
				&amp;lt;desc&amp;gt;Height of the rectangle.&amp;lt;/desc&amp;gt;&lt;br /&gt;
				&amp;lt;type&amp;gt;point&amp;lt;/type&amp;gt;&lt;br /&gt;
				&amp;lt;default&amp;gt;100&amp;lt;/default&amp;gt;&lt;br /&gt;
			&amp;lt;/parameter&amp;gt;&lt;br /&gt;
		&amp;lt;/cmd&amp;gt;&lt;br /&gt;
	&amp;lt;/command-list&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;/command_directory&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/tt&amp;gt;&lt;/div&gt;</summary>
		<author><name>Inductiveload</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=SpecCommandLineDrawing&amp;diff=36604</id>
		<title>SpecCommandLineDrawing</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=SpecCommandLineDrawing&amp;diff=36604"/>
		<updated>2008-10-09T17:04:30Z</updated>

		<summary type="html">&lt;p&gt;Inductiveload: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Outline==&lt;br /&gt;
&lt;br /&gt;
At the moment, Inkscape does not allow users to enter commands to Inkscape in a text-based format. This specification proposed to add that functionality, both at the command line and internally, possibly using a command-line box similar to Rhino's. In this way, a user will be able to directly enter precise instruction to Inkscape with minimal effort. For example, a command such as &amp;quot;circle r:50&amp;quot; could be entered and Inkscape will produce a circle of radius 50px, with all other attributes set to default values. In this way, technical drawing becomes easier, and the interface to Inkscape from external programs is vastly increased.&lt;br /&gt;
&lt;br /&gt;
==UI Changes==&lt;br /&gt;
&lt;br /&gt;
The only UI integration this proposal needs is a command line text box and an &amp;quot;Enter&amp;quot; button. Rhino has an advanced text entry system, using a long text box under the toolbars. Eagle, a piece of CAD software also has this system.&lt;br /&gt;
&lt;br /&gt;
In Inkscape, I anticipate this being located under the context toolbar, but above the ruler and drawing area. Ideally, a button would be provided on the main toolbar to allow this command entry box to be toggled on or off to save space for those who don't need this feature.&lt;br /&gt;
&lt;br /&gt;
==Functionality Overview==&lt;br /&gt;
&lt;br /&gt;
This proposal would add following functionality:&lt;br /&gt;
*Creation of SVG items in Inkscape using just text input. Default options should be supplied so that properties not important to a user can be left out of the command, but still be taken care of.&lt;br /&gt;
*Manipulation of existing objects (scaling, duplication, deletion, etc)&lt;br /&gt;
*Allow the request of document information by external applications (eg. request document size or the properties of a given object etc)&lt;br /&gt;
*Increasing document manipulation by textual means (page size, exporting etc)&lt;br /&gt;
*Allow extensions and 3D party applications to have a simple way of editing Inkscape documents. All they would have to do is supply the command string, rather than as they do now, mess around with inkex helper modules, etc.&lt;br /&gt;
&lt;br /&gt;
==Basic Command Structure==&lt;br /&gt;
&lt;br /&gt;
This section is extremely preliminary and is mostly based on a Python mock-up rather than practical reasons. Hopefully, at some point a formal grammar will be established.&lt;br /&gt;
&lt;br /&gt;
More than one command can be entered at once. These are separated by a semicolon. The last command should not need a semicolon.&lt;br /&gt;
&lt;br /&gt;
 cmd1; cmd2; cmd3&lt;br /&gt;
&lt;br /&gt;
Each command is made up of a command header and a zero or more of parameters, separated by spaces:&lt;br /&gt;
&lt;br /&gt;
 cmd 1&lt;br /&gt;
 cmd2 param2&lt;br /&gt;
 cmd3 param31 param32&lt;br /&gt;
&lt;br /&gt;
Each parameter is made up of one or more arguments, separated by colons:&lt;br /&gt;
&lt;br /&gt;
 cmd1 p1:arg1&lt;br /&gt;
 cmd2 p21:arg211 p22:arg221:arg222&lt;br /&gt;
&lt;br /&gt;
If an argument represents an item that needs more than one value (such as coordinates), these are separated by commas:&lt;br /&gt;
&lt;br /&gt;
 cmd1 p1:arg11,arg12 p2:arg2&lt;br /&gt;
&lt;br /&gt;
For example, a circle with a radius of 50px and centre (500,400)px could be entered as:&lt;br /&gt;
 circle r:50 c:500,400&lt;br /&gt;
&lt;br /&gt;
It should also be possible to enter an expression. In this way:&lt;br /&gt;
 circle r:25/2&lt;br /&gt;
should end up as a circle with a radius of 12.5px. This would dramatically reduce the time spend moving data between calculator apps and Inkscape in the case especially of technical drawing.&lt;br /&gt;
&lt;br /&gt;
Different units should be easily used, so that one may easily use Inkscape software for engineering purposes.&lt;br /&gt;
 circle r:10mm&lt;br /&gt;
should be automatically translated into px and render as a circle 10mm across.&lt;br /&gt;
&lt;br /&gt;
==Error Handling==&lt;br /&gt;
&lt;br /&gt;
The parser for these commands should catch errors wherever possible, and be able to give detailed reasons why it failed. This will help third parties develop an understanding of Inkscape's command structure (useful for encourage its use as a technical drawing aid) and allow easy debugging of external code.&lt;br /&gt;
&lt;br /&gt;
For example the entry (say)&lt;br /&gt;
 circle er:45&lt;br /&gt;
should fail with the reason that 'er' is not a known command header.&lt;br /&gt;
&lt;br /&gt;
The same goes for incorrect numbers of arguments or sub-arguments, incorrect units (eg one should not be able to specify 'px' for a colour)&lt;br /&gt;
&lt;br /&gt;
==Documentation==&lt;br /&gt;
&lt;br /&gt;
The Inkscape command structure should have a detailed and thorough explanation on the Inkscape wiki or elsewhere. Ideally, one should be able to summon the help for a function using a command such as&lt;br /&gt;
&lt;br /&gt;
 help:circle&lt;br /&gt;
&lt;br /&gt;
Which will link to the relevant online resource.&lt;br /&gt;
&lt;br /&gt;
==Extensibility &amp;amp; Scriptability==&lt;br /&gt;
&lt;br /&gt;
The command structure should be easily extended to new functions and commands. Perhaps an XML-based list of commands and available parameters can be provided to allow quick integration of new functions, as well as providing brief help if needed.&lt;br /&gt;
&lt;br /&gt;
Here, accessibility is the aim of the game, as we want new capabilities to the command line tool to be easy to produce and implement.&lt;br /&gt;
&lt;br /&gt;
It should also be very easy to script for this command-line system. While I believe making the command line instuctions a scripting language in itself is unecessary, I think it would be good if Inkscape provided a way to either enter a multiline Python script (as Python is already included with Inkscape) or run one from a remote location which was made with another editor, or ideally both.&lt;br /&gt;
&lt;br /&gt;
In this way, a user can quickly enter a command like:&lt;br /&gt;
 for i in range(5):&lt;br /&gt;
    ink(circle r:50*i)&lt;br /&gt;
&lt;br /&gt;
and get 5 circles of increasing radius. If Inkscape had a small window for entering scripts like this and loading them, it would save time and make the interface even more useful.&lt;/div&gt;</summary>
		<author><name>Inductiveload</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=SpecCommandLineDrawing&amp;diff=36594</id>
		<title>SpecCommandLineDrawing</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=SpecCommandLineDrawing&amp;diff=36594"/>
		<updated>2008-10-08T07:11:54Z</updated>

		<summary type="html">&lt;p&gt;Inductiveload: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Outline==&lt;br /&gt;
&lt;br /&gt;
At the moment, Inkscape does not allow users to enter commands to Inkscape in a text-based format. This specification proposed to add that functionality, both at the command line and internally, possibly using a command-line box similar to Rhino's. In this way, a user will be able to directly enter precise instruction to Inkscape with minimal effort. For example, a command such as &amp;quot;circle r:50&amp;quot; could be entered and Inkscpae will produce a circle of radius 50px, with all other attributes set to default values. In this way, technical drawing becomes easier, and the interface to Inkscape from external programs is vastly increased.&lt;br /&gt;
&lt;br /&gt;
==UI Changes==&lt;br /&gt;
&lt;br /&gt;
The only UI integration this proposal needs is a commnd line text box and an &amp;quot;Enter&amp;quot; button. Rhino has an advanced text entry system, using a long text box under the toolbars. Eagle, a piece of CAD software also has this system.&lt;br /&gt;
&lt;br /&gt;
In Inkscape, I anticipate this being located under the context toolbar, but above the ruler and drawing area. Ideally, a button would be provided on the main toolbar to allow this command entry box to be toggled on or off to save space for those who don't need this feature.&lt;br /&gt;
&lt;br /&gt;
==Functionality Overview==&lt;br /&gt;
&lt;br /&gt;
This proposal would add following functionality:&lt;br /&gt;
*Creation of SVG items in Inkscape using just text input. Defuakt options should be supplied so that properties not important to a user can be lefto ut of the command, but still be taken care of.&lt;br /&gt;
*Manipulation of existing objects (scaling, duplication, deletion, etc)&lt;br /&gt;
*Allow the request of document information by external applications (eg. request document size or the properties of a given object etc)&lt;br /&gt;
*Increasing document manipulation by textual means (page size, exporting etc)&lt;br /&gt;
*Allow extensions and 3d party applications to have a simple way of editing Inkscape documents. All they would have to do is supply the command string, rather than as they do now, mess around with inkex helper modules, etc.&lt;br /&gt;
&lt;br /&gt;
==Basic Command Structure==&lt;br /&gt;
&lt;br /&gt;
This section is extremely preliminary and is mostly based on a Python mockup rather than practical reasons. Hopefully, at some point a formal grammar will be established.&lt;br /&gt;
&lt;br /&gt;
More than one command can be entered at once. These are separated by a semicolon. The last command should not need a semicolon.&lt;br /&gt;
&lt;br /&gt;
 cmd1; cmd2; cmd3&lt;br /&gt;
&lt;br /&gt;
Each command is made up of a command header and a zero or more of parameters, separated by spaces:&lt;br /&gt;
&lt;br /&gt;
 cmd 1&lt;br /&gt;
 cmd2 param2&lt;br /&gt;
 cmd3 param31 param32&lt;br /&gt;
&lt;br /&gt;
Each parameter is made up of one or more arguments, separated by colons:&lt;br /&gt;
&lt;br /&gt;
 cmd1 p1:arg1&lt;br /&gt;
 cmd2 p21:arg211 p22:arg221:arg222&lt;br /&gt;
&lt;br /&gt;
If an argument represents an item that needs more than one value (such as coordinates), these are separated by commas:&lt;br /&gt;
&lt;br /&gt;
 cmd1 p1:arg11,arg12 p2:arg2&lt;br /&gt;
&lt;br /&gt;
For example, a circle with a radius of 50px and centre (500,400)px could be entered as:&lt;br /&gt;
 circle r:50 c:500,400&lt;br /&gt;
&lt;br /&gt;
It should also be possible to enter an expression. In this way:&lt;br /&gt;
 circle r:25/2&lt;br /&gt;
should end up as a circle with a radius of 12.5px. This would dramically reduce the time spend moving data between calculator apps and Inkscape in the case especially of technical drawing.&lt;br /&gt;
&lt;br /&gt;
Different units should be easily used, so that one may easily use Inkscape software for engineering purposes.&lt;br /&gt;
 circle r:10mm&lt;br /&gt;
should be automatically translated into px and render as a circle 10mm across.&lt;br /&gt;
&lt;br /&gt;
==Error Handling==&lt;br /&gt;
&lt;br /&gt;
The parser for these commands should catch errors wherever possible, and be able to give detailed reasons why it failed. This will help third parties develop an understanding of Inkscape's command structure (useful for encourage its use as a technical drawing aid) and allow easy debugging of external code.&lt;br /&gt;
&lt;br /&gt;
For example the entry (say)&lt;br /&gt;
 circle er:45&lt;br /&gt;
should fail with the reason that 'er' is not a known command header.&lt;br /&gt;
&lt;br /&gt;
The same goes for incorrect numbers of arguments or subarguments, incorrect units (eg one should not be able to specify 'px' for a colour)&lt;br /&gt;
&lt;br /&gt;
==Documentation==&lt;br /&gt;
&lt;br /&gt;
The Inkscape command structure should have a detailed and thourough explanation on the Inkscape wiki or elsewhere. Ideally, one should be able to summon the help for a function using a command such as&lt;br /&gt;
&lt;br /&gt;
 help:circle&lt;br /&gt;
&lt;br /&gt;
Which will link to the relevant online resource.&lt;br /&gt;
&lt;br /&gt;
==Extensibility==&lt;br /&gt;
&lt;br /&gt;
The command structure should be easily extended to new functions and commands. Perhaps an XML-based list of commands and available parameters can be provided to allow quick integration of new functions, as well as providing brief help if needed.&lt;br /&gt;
&lt;br /&gt;
Here, accesibility is the aim of the game, as we want new capabilities to the command line tool to be easy to produce and implement.&lt;/div&gt;</summary>
		<author><name>Inductiveload</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=SpecCommandLineDrawing&amp;diff=36584</id>
		<title>SpecCommandLineDrawing</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=SpecCommandLineDrawing&amp;diff=36584"/>
		<updated>2008-10-08T05:52:25Z</updated>

		<summary type="html">&lt;p&gt;Inductiveload: New page: ==Outline==  At the moment, Inkscape does not allow users to enter commands to Inkscape in a text-based format. This specification proposed to add that functionality, both at the command l...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Outline==&lt;br /&gt;
&lt;br /&gt;
At the moment, Inkscape does not allow users to enter commands to Inkscape in a text-based format. This specification proposed to add that functionality, both at the command line and internally, possibly using a command-line box similar to Rhino's. In this way, a user will be able to directly enter precise instruction to Inkscape with minimal effort. For example, a command such as &amp;quot;circle r:50&amp;quot; could be entered and Inkscpae will produce a circle of radius 50px, with all other attributes set to default values. In this way, technical drawing becomes easier, and the interface to Inkscape from external programs is vastly increased.&lt;/div&gt;</summary>
		<author><name>Inductiveload</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=Tips_For_Python_Script_Extensions&amp;diff=36574</id>
		<title>Tips For Python Script Extensions</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=Tips_For_Python_Script_Extensions&amp;diff=36574"/>
		<updated>2008-10-07T18:07:10Z</updated>

		<summary type="html">&lt;p&gt;Inductiveload: Brief summary of the gettext translation method&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Adding Translation Capability==&lt;br /&gt;
&lt;br /&gt;
One can add the ability to have Python text mesages included for translation. To provide an error message, rather than using the Python &amp;lt;tt&amp;gt;sys.stderr&amp;lt;/tt&amp;gt;, use the provided &amp;lt;tt&amp;gt;errormsg()&amp;lt;/tt&amp;gt; function from inkex.py in conjuction with &amp;lt;tt&amp;gt;gettext&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
You must include the following at the beginning of your Python script:&lt;br /&gt;
 import inkex&lt;br /&gt;
 import gettext&lt;br /&gt;
 _ = gettext.gettext&lt;br /&gt;
&lt;br /&gt;
Where you wish to have an error message, write the following:&lt;br /&gt;
 inkex.errormsg(_(&amp;quot;This will be written to Python stderr&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
Of course, you may also change &amp;quot;_&amp;quot; to something else if you wish.&lt;br /&gt;
&lt;br /&gt;
[[Category:Extensions]]&lt;/div&gt;</summary>
		<author><name>Inductiveload</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=SpecPathIntersectionCutter&amp;diff=25124</id>
		<title>SpecPathIntersectionCutter</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=SpecPathIntersectionCutter&amp;diff=25124"/>
		<updated>2008-03-17T02:49:23Z</updated>

		<summary type="html">&lt;p&gt;Inductiveload: New page: Launchpad Entry: https://blueprints.launchpad.net/inkscape/+spec/path-intersection-cutter  == Summary == This tool will take two paths, and add nodes to the underlying path wherever it cro...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Launchpad Entry:&lt;br /&gt;
https://blueprints.launchpad.net/inkscape/+spec/path-intersection-cutter&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
This tool will take two paths, and add nodes to the underlying path wherever it crosses the overlying path.&lt;br /&gt;
&lt;br /&gt;
== Release Note ==&lt;br /&gt;
&lt;br /&gt;
== Rationale ==&lt;br /&gt;
This tool would be very useful for splitting up drawings and finding centres of regular and irregular geometric objects. This would have applications in technical, mathemtical and artistic drawings.&lt;br /&gt;
&lt;br /&gt;
== Design ==&lt;br /&gt;
=== User Interface ===&lt;br /&gt;
In terms of implementation, the intersection tool should be implemented alongside current path tools such as &amp;quot;union&amp;quot;, but does not require that the path be closed.&lt;br /&gt;
&lt;br /&gt;
With two paths selected, the intersection tool is clicked and a context toolbar appears. Temporary nodes are added to the bott.om-most path at the points of intersection with the overlying path, which can be designated by, perhaps, a circle rather than a diamond/square.&lt;br /&gt;
&lt;br /&gt;
The user then selects the nodes that are wanted, and clicks &amp;quot;Apply&amp;quot; on the toolbar. There should also be a &amp;quot;Select All&amp;quot; button for selecting nodes at every intersection, and a &amp;quot;Select None&amp;quot; for deselecting all nodes.&lt;br /&gt;
&lt;br /&gt;
The illustration below shows the steps involved in finding the intersections of two paths. In this example, the red path is under the blue path, and therefore nodes will be added to the red path. To use the tool, the user selects both curves, but this is not shown.&lt;br /&gt;
&lt;br /&gt;
[[Image:PathIntersection.png]]&lt;br /&gt;
&lt;br /&gt;
All shapes must be converted to paths before finding the intersections can occur.&lt;br /&gt;
&lt;br /&gt;
=== More ideas ===&lt;br /&gt;
See [http://www.oberonplace.com/products/curveworks/index.htm]. This is a more refined version of the Cut Curve Tool there (as here you can select the points to cut rather than all of them).&lt;br /&gt;
&lt;br /&gt;
== TODO ==&lt;br /&gt;
&lt;br /&gt;
== Discussion ==&lt;/div&gt;</summary>
		<author><name>Inductiveload</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=File:PathIntersection.png&amp;diff=25114</id>
		<title>File:PathIntersection.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=File:PathIntersection.png&amp;diff=25114"/>
		<updated>2008-03-17T02:45:22Z</updated>

		<summary type="html">&lt;p&gt;Inductiveload: A diagram of how the Path Intersection Cutter Tool should work.

SpecPathIntersection&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A diagram of how the Path Intersection Cutter Tool should work.&lt;br /&gt;
&lt;br /&gt;
[[SpecPathIntersection]]&lt;/div&gt;</summary>
		<author><name>Inductiveload</name></author>
	</entry>
</feed>