Initial Commit
This includes a working plugin
This commit is contained in:
commit
28f126df71
16
honeycomb.inx
Normal file
16
honeycomb.inx
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
|
||||||
|
<name>Honey Comb</name>
|
||||||
|
<id>org.inkscape.disorderlydazzle.honeycomb</id>
|
||||||
|
<param name="spacing" type="float" gui-text="Spacing %">0.0</param>
|
||||||
|
<param name="count_x" type="int" gui-text="Count X">0</param>
|
||||||
|
<param name="count_y" type="int" gui-text="Count Y">0</param>
|
||||||
|
<effect>
|
||||||
|
<effects-menu>
|
||||||
|
<submenu name="Render"/>
|
||||||
|
</effects-menu>
|
||||||
|
</effect>
|
||||||
|
<script>
|
||||||
|
<command location="inx" interpreter="python">honeycomb.py</command>
|
||||||
|
</script>
|
||||||
|
</inkscape-extension>
|
85
honeycomb.py
Normal file
85
honeycomb.py
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import inkex
|
||||||
|
|
||||||
|
class HoneyCombExtension(inkex.EffectExtension):
|
||||||
|
def add_arguments(self, pars):
|
||||||
|
pars.add_argument("--spacing", type=float, default=0.0)
|
||||||
|
pars.add_argument("--count_x", type=int, default=0)
|
||||||
|
pars.add_argument("--count_y", type=int, default=0)
|
||||||
|
|
||||||
|
def effect(self):
|
||||||
|
|
||||||
|
if len(self.svg.selection) != 2:
|
||||||
|
inkex.errormsg("Must select a bounding box and a circle to honeycomb")
|
||||||
|
return
|
||||||
|
|
||||||
|
target = self.svg.selection.popitem()[1]
|
||||||
|
bounding_box = self.svg.selection.popitem()[1]
|
||||||
|
|
||||||
|
# Validate bounding box
|
||||||
|
if bounding_box is None:
|
||||||
|
inkex.errormsg("Must have a bounding box selected")
|
||||||
|
return
|
||||||
|
bounding_box_h = float(bounding_box.get("height"))
|
||||||
|
bounding_box_w = float(bounding_box.get("width"))
|
||||||
|
bounding_box_x = float(bounding_box.get("x"))
|
||||||
|
bounding_box_y = float(bounding_box.get("y"))
|
||||||
|
bounding_box_style = bounding_box.get("style")
|
||||||
|
|
||||||
|
if (bounding_box_h and bounding_box_w and bounding_box_x and bounding_box_y) \
|
||||||
|
is None:
|
||||||
|
inkex.errormsg("Bounding Box must be the first selection")
|
||||||
|
return
|
||||||
|
|
||||||
|
# Validate honeycomb target
|
||||||
|
if target is None:
|
||||||
|
inkex.errormsg("Must make a selection of an object to honycomb")
|
||||||
|
|
||||||
|
if target.get("r"):
|
||||||
|
# Selection is a circle
|
||||||
|
target_rad = float(target.get("r"))
|
||||||
|
target_dia = 2 * float(target_rad)
|
||||||
|
target_style = target.get("style")
|
||||||
|
|
||||||
|
difference = bounding_box_w - (target_dia * self.options.count_x)
|
||||||
|
target_spacing = difference/(self.options.count_x)
|
||||||
|
|
||||||
|
shift_row = True
|
||||||
|
for y_cnt in range(0, self.options.count_y):
|
||||||
|
y_coord = (bounding_box_y + target_rad)
|
||||||
|
y_coord += y_cnt * target_dia
|
||||||
|
if y_cnt % 2 != 0:
|
||||||
|
shift_row = True
|
||||||
|
num_x = self.options.count_x + 1
|
||||||
|
else:
|
||||||
|
shift_row = False
|
||||||
|
num_x = self.options.count_x
|
||||||
|
for x_cnt in range(0, num_x):
|
||||||
|
x_coord = bounding_box_x + target_rad
|
||||||
|
x_coord += x_cnt * (target_spacing + target_dia)
|
||||||
|
if shift_row:
|
||||||
|
x_coord -= target_rad
|
||||||
|
else:
|
||||||
|
x_coord += target_spacing / 2
|
||||||
|
circ = inkex.Circle(attrib={"cx": f"{x_coord}",
|
||||||
|
"cy": f"{y_coord}",
|
||||||
|
"r": f"{target_rad}",
|
||||||
|
"style": target_style})
|
||||||
|
layer = self.svg.get_current_layer()
|
||||||
|
layer.append(circ)
|
||||||
|
|
||||||
|
elif target.get("rx"):
|
||||||
|
# Selection is an elipse
|
||||||
|
inkex.errormsg("Elipses are not supported\n"
|
||||||
|
"Selection must have 'r' attribute")
|
||||||
|
|
||||||
|
else:
|
||||||
|
inkex.errormsg("Other shapes not supported\n"
|
||||||
|
"Selection must have 'r' attribute")
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
HoneyCombExtension().run()
|
Loading…
x
Reference in New Issue
Block a user