User:Sergeybe

From Inkscape Wiki
Revision as of 07:26, 27 May 2009 by Sergeybe (talk | contribs) (Fix one line in source)
Jump to navigation Jump to search

This extension draws old-fashioned rotary dialer

rotarydialer.inx

<inkscape-extension>
<_name>Rotary Dialer</_name>
    <id>RotaryDialer</id>
    <dependency type="executable" location="extensions">rotarydialer.py</dependency>
    <dependency type="executable" location="extensions">inkex.py</dependency>
    <param name="radius1" type="int" _gui-text="Radius1" min="0" max="2000">300</param>
    <param name="radius2" type="int" _gui-text="Radius2" min="0" max="2000">55</param>
    <param name="angle" type="int" _gui-text="Angle" min="0" max="360">28</param>
    <effect>
        <object-type>all</object-type>
        <effects-menu>
            <submenu _name="Render"/>
        </effects-menu>
    </effect>
    <script>
        <command reldir="extensions" interpreter="python">rotarydialer.py</command>
    </script>
</inkscape-extension>

rotarydialer.py

#!/usr/bin/env python
#
# -*- coding: utf-8 -*-

import sys

#sys.path.append('/usr/share/inkscape/extensions')

import inkex
from simplestyle import *
import math

class RotaryDialer(inkex.Effect):
	"""
	Init
	"""
	def __init__(self):
		inkex.Effect.__init__(self)
		
		self.OptionParser.add_option('-1', '--radius1', action = 'store',
		type = 'int', dest = 'radius1', default = 300,
		help = 'Radius1')
		
		self.OptionParser.add_option('-2', '--radius2', action = 'store',
		type = 'int', dest = 'radius2', default = 55,
		help = 'Radius2')
		
		self.OptionParser.add_option('-a', '--angle', action = 'store',
		type = 'int', dest = 'angle', default = 28,
		help = 'Angle')
		
	"""
	Effect
	"""
	def effect(self):
		# Get document
		svg = self.document.getroot()
		width = inkex.unittouu(svg.get('width'))
		height = inkex.unittouu(svg.attrib['height'])
		
		# Create new layer
		layer = inkex.etree.SubElement(svg, 'g')
		layer.set(inkex.addNS('label', 'inkscape'), 'Sector 1 Layer')
		layer.set(inkex.addNS('groupmode', 'inkscape'), 'layer')
		
		fi = 0
		
		radius1 = self.options.radius1
		radius2 = self.options.radius2
		angle = self.options.angle
		
		path = inkex.etree.SubElement(svg, 'path')
		path.set(inkex.addNS('type', 'sodipodi'), 'arc')
		path.set(inkex.addNS('cx', 'sodipodi'), str(width / 2))
		path.set(inkex.addNS('cy', 'sodipodi'), str(height / 2))
		path.set(inkex.addNS('rx', 'sodipodi'), str(radius1))
		path.set(inkex.addNS('ry', 'sodipodi'), str(radius1))
		
		style = {
		'fill': '#7f7f7f',
		'stroke': '#000000',
		'stroke-width': '2',
		'stroke-opacity': '0.5',
		'fill-opacity': '0.5',
		'stroke-miterlimit': '4',
		'stroke-dasharray': 'none'
		}
		
		path.set('style', formatStyle(style))
		
		svg.append(path)
		
		path = inkex.etree.SubElement(svg, 'path')
		path.set(inkex.addNS('type', 'sodipodi'), 'arc')
		path.set(inkex.addNS('cx', 'sodipodi'), str(width / 2))
		path.set(inkex.addNS('cy', 'sodipodi'), str(height / 2))
		path.set(inkex.addNS('rx', 'sodipodi'), str(radius1 - 2 * radius2 - 20))
		path.set(inkex.addNS('ry', 'sodipodi'), str(radius1 - 2 * radius2 - 20))
		
		style = {
		'fill': '#7f7f7f',
		'stroke': '#000000',
		'stroke-width': '2',
		'stroke-opacity': '0.5',
		'fill-opacity': '0.5',
		'stroke-miterlimit': '4',
		'stroke-dasharray': 'none'
		}
		
		path.set('style', formatStyle(style))
		
		svg.append(path)
		
		i = 0
		while (fi < 360 and i < 10):
			rad = math.radians(fi + 90)
			cx = width / 2 + math.cos(rad) * (radius1 - radius2 - 10)
			cy = height / 2 + math.sin(rad) * (radius1 - radius2 - 10)
			
			path = inkex.etree.SubElement(svg, 'path')
			path.set(inkex.addNS('type', 'sodipodi'), 'arc')
			path.set(inkex.addNS('cx', 'sodipodi'), str(cx))
			path.set(inkex.addNS('cy', 'sodipodi'), str(cy))
			path.set(inkex.addNS('rx', 'sodipodi'), str(radius2))
			path.set(inkex.addNS('ry', 'sodipodi'), str(radius2))
			
			#style = {
			#'fill' : 'none',
			#'stroke': '#000000',
			#'stroke-width' : '1.0px',
			#'stroke-opacity' : '1.0'
			#}
			
			style = {
			'fill': '#7f7f7f',
			'stroke': '#000000',
			'stroke-width': '2',
			'stroke-opacity': '0.5',
			'fill-opacity': '0.5',
			'stroke-miterlimit': '4',
			'stroke-dasharray': 'none'
			}
			
			path.set('style', formatStyle(style))

			svg.append(layer)
			
			fi = fi + angle
			i = i + 1

effect = RotaryDialer()
effect.affect()