fix typo
This commit is contained in:
parent
9f614602a4
commit
d81166c6af
28
extensions/fablabchemnitz/bouwkamp_code/bouwkamp_code.inx
Normal file
28
extensions/fablabchemnitz/bouwkamp_code/bouwkamp_code.inx
Normal file
@ -0,0 +1,28 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
|
||||
<name>Bouwkamp Code</name>
|
||||
<id>fablabchemnitz.de.bouwkamp</id>
|
||||
<param name="tab" type="notebook">
|
||||
<page name="settings" gui-text="Settings">
|
||||
<param name="bouwkamp_code" type="string" gui-text="Bouwkamp code:">21, 112, 112, [50, 35, 27], [8, 19], [15, 17, 11], [6, 24], [29, 25, 9, 2], [7, 18], [16], [42], [4, 37], [33]</param>
|
||||
<param name="wrap_in_group" type="bool" gui-text="Wrap in group">true</param>
|
||||
</page>
|
||||
<page name="help" gui-text="Help">
|
||||
<label xml:space="preserve">This Inkscape extension allows you to generate squared squares and squared rectangles from Bouwkamp codes and table codes.
|
||||
|
||||
You can paste Bouwkamp codes with or without various formatting characters (like brackets) and convert them to the corresponding squares.
|
||||
</label>
|
||||
</page>
|
||||
</param>
|
||||
<effect>
|
||||
<object-type>all</object-type>
|
||||
<effects-menu>
|
||||
<submenu name="FabLab Chemnitz">
|
||||
<submenu name="Shape/Pattern from Generator"/>
|
||||
</submenu>
|
||||
</effects-menu>
|
||||
</effect>
|
||||
<script>
|
||||
<command location="inx" interpreter="python">bouwkamp_code.py</command>
|
||||
</script>
|
||||
</inkscape-extension>
|
163
extensions/fablabchemnitz/bouwkamp_code/bouwkamp_code.py
Normal file
163
extensions/fablabchemnitz/bouwkamp_code/bouwkamp_code.py
Normal file
@ -0,0 +1,163 @@
|
||||
#!/usr/bin/env python3
|
||||
'''
|
||||
BSD 3-Clause License
|
||||
|
||||
Copyright (c) 2019, Pascal Wagler
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright notice, this
|
||||
list of conditions and the following disclaimer.
|
||||
|
||||
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
|
||||
3. Neither the name of the copyright holder nor the names of its
|
||||
contributors may be used to endorse or promote products derived from
|
||||
this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
This Inkscape extension allows you to generate squared squares and squared rectangles from
|
||||
Bouwkamp codes and table codes.
|
||||
'''
|
||||
|
||||
import re
|
||||
import inkex
|
||||
from lxml import etree
|
||||
|
||||
class BouwkampCode(inkex.EffectExtension):
|
||||
"""
|
||||
This Inkscape extension allows you to generate squared squares and squared rectangles from
|
||||
Bouwkamp codes and table codes.
|
||||
"""
|
||||
|
||||
def add_arguments(self, pars):
|
||||
pars.add_argument('--tab')
|
||||
pars.add_argument('--bouwkamp_code', default='21, 112, 112, [50, 35, 27], [8, 19], [15, 17, 11], [6, 24], [29, 25, 9, 2], [7, 18], [16], [42], [4, 37], [33]', help='The Bouwkamp code.'
|
||||
)
|
||||
pars.add_argument('--wrap_in_group', type=inkex.Boolean, default=True, help='Should the generated items be wrapped inside a group.'
|
||||
)
|
||||
|
||||
def effect(self):
|
||||
# compute center of the view
|
||||
center = self.svg.namedview.center
|
||||
|
||||
# create the group that holds all the elements
|
||||
container = self.svg.get_current_layer()
|
||||
if self.options.wrap_in_group:
|
||||
group_attributes = {
|
||||
inkex.addNS('label', 'inkscape'): 'BouwkampSquares',
|
||||
'transform': 'translate' + str(center)
|
||||
}
|
||||
group = etree.SubElement(self.svg.get_current_layer(), 'g', group_attributes)
|
||||
container = group
|
||||
|
||||
# parse the bouwkamp code string as a list
|
||||
bouwkamp_code = self.parse_bouwkamp_code_from_string(self.options.bouwkamp_code)
|
||||
|
||||
# show an error message and exit if the bouwkamp code is invalid
|
||||
try:
|
||||
self.exception_on_invalid_bouwkamp_code(bouwkamp_code)
|
||||
except ValueError as exception:
|
||||
inkex.errormsg(str(exception))
|
||||
return
|
||||
|
||||
# draw the bouwkamp code
|
||||
self.draw_bouwkamp_code(container, center, bouwkamp_code)
|
||||
|
||||
@staticmethod
|
||||
def exception_on_invalid_bouwkamp_code(bouwkamp_code):
|
||||
"""
|
||||
Raises a ValueError if the passed list is not a valid Bouwkamp code.
|
||||
"""
|
||||
|
||||
if not bouwkamp_code: #len(bouwkamp_code) == 0
|
||||
raise ValueError('Error: Invalid Bouwkamp code.\n\nThe Bouwkamp code is emtpy. ' +
|
||||
'Please specify a valid Bouwkamp code.')
|
||||
|
||||
if len(bouwkamp_code) - 3 != bouwkamp_code[0]:
|
||||
raise ValueError('Error: Invalid Bouwkamp code.\n\nThe Bouwkamp code has the wrong ' +
|
||||
'length. The first number needs to specify how many squares ' +
|
||||
'should be drawn.')
|
||||
|
||||
@staticmethod
|
||||
def parse_bouwkamp_code_from_string(bouwkamp_code_string):
|
||||
"""
|
||||
Converts a Bouwkamp code string into a list of integers. Any parentheses, commas and
|
||||
spaces are stripped. Extended Bouwkamp codes are not supported.
|
||||
"""
|
||||
|
||||
# replace every character (except numbers) with a space
|
||||
text = re.sub('[^0-9]', ' ', bouwkamp_code_string)
|
||||
# collapse all spaces to just one space
|
||||
text = re.sub(' {1,}', ' ', text).strip()
|
||||
# split the string into small strings and convert them to integers
|
||||
numbers = [int(x) for x in text.split(" ")]
|
||||
|
||||
return numbers
|
||||
|
||||
def draw_bouwkamp_code(self, parent, center, bouwkamp_code):
|
||||
"""
|
||||
Draws the passed Bouwkamp code (a list of integers) with rectangles.
|
||||
"""
|
||||
|
||||
order = bouwkamp_code[0]
|
||||
width = bouwkamp_code[1]
|
||||
# height = bouwkamp_code[2]
|
||||
code = bouwkamp_code[3:] # cut the first three elements away
|
||||
|
||||
i = 0
|
||||
helper = [0] * 900
|
||||
|
||||
for rectangle in range(0, order):
|
||||
i = 0
|
||||
for j in range(1, width):
|
||||
if helper[j] < helper[i]:
|
||||
i = j
|
||||
|
||||
position = (i, helper[i])
|
||||
dimension = (code[rectangle], code[rectangle])
|
||||
self.draw_rectangle(position, dimension, parent, center)
|
||||
|
||||
for j in range(0, code[rectangle]):
|
||||
helper[i+j] += code[rectangle]
|
||||
|
||||
def draw_rectangle(self, position, dimension, parent, center):
|
||||
rectangle_style = {
|
||||
'opacity': '1',
|
||||
'stroke': '#000000',
|
||||
'stroke-width': str(self.svg.unittouu('2px')),
|
||||
'fill': '#FFFFFF'
|
||||
}
|
||||
|
||||
transform = ""
|
||||
if not self.options.wrap_in_group:
|
||||
transform = 'translate' + str(center)
|
||||
|
||||
rectangle_attributes = {
|
||||
'transform': transform,
|
||||
'style': str(inkex.Style(rectangle_style)),
|
||||
inkex.addNS('label', 'inkscape'): "Rectangle "+str(dimension[0]),
|
||||
'x': str(position[0]),
|
||||
'y': str(position[1]),
|
||||
'width': str(dimension[0]),
|
||||
'height': str(dimension[1])
|
||||
}
|
||||
|
||||
etree.SubElement(parent, inkex.addNS('rect', 'svg'), rectangle_attributes)
|
||||
|
||||
if __name__ == '__main__':
|
||||
BouwkampCode().run()
|
20
extensions/fablabchemnitz/bouwkamp_code/meta.json
Normal file
20
extensions/fablabchemnitz/bouwkamp_code/meta.json
Normal file
@ -0,0 +1,20 @@
|
||||
[
|
||||
{
|
||||
"name": "Bouwkamp Code",
|
||||
"id": "fablabchemnitz.de.bouwkamp_code",
|
||||
"path": "boukamp_code",
|
||||
"original_name": "Bouwkamp code",
|
||||
"original_id": "de.pascalwagler.inkscape.bouwkamp",
|
||||
"license": "BSD-3-Clause License",
|
||||
"license_url": "https://github.com/Wandmalfarbe/bouwkamp-code-generator/blob/master/LICENSE",
|
||||
"comment": "ported to Inkscape v1 by Mario Voigt",
|
||||
"source_url": "https://gitea.fablabchemnitz.de/FabLab_Chemnitz/mightyscape-1.X/src/branch/master/extensions/fablabchemnitz/boukamp_code",
|
||||
"fork_url": "https://github.com/Wandmalfarbe/bouwkamp-code-generator",
|
||||
"documentation_url": "https://stadtfabrikanten.org/display/IFM/Bouwkamp+Code",
|
||||
"inkscape_gallery_url": null,
|
||||
"main_authors": [
|
||||
"github.com/Wandmalfarbe",
|
||||
"github.com/vmario89"
|
||||
]
|
||||
}
|
||||
]
|
Reference in New Issue
Block a user