Skip to content

Instantly share code, notes, and snippets.

@cwant
Last active September 9, 2022 22:41
Show Gist options
  • Save cwant/697f0c6ce07d9e14e710f5b80ca5eece to your computer and use it in GitHub Desktop.
Save cwant/697f0c6ce07d9e14e710f5b80ca5eece to your computer and use it in GitHub Desktop.
Tessagon with Simple Inkscape Scripting
import sys
# Replace with your tessagon source directory
sys.path.append('/home/cwant/gitwork/tessagon')
import tessagon
from tessagon.adaptors.list_adaptor import ListAdaptor
from tessagon import TessagonDiscovery
BLUES = ['#8080ff', '#80ffff', '#aaaaff']
ORANGES = ['#ff6060', '#ffaa60', '#ffff80']
def main():
make_floret()
# make_octo()
# make_hex_tri()
# make_hex_square_tri()
# make_square_tri()
# make_square_tri2()
make_hex()
# make_weave()
make_rhombus()
# make_dodeca_tri()
# make_dissected_triangle()
# make_dissected_hex_quad()
# make_dissected_hex_tri()
# make_penta()
# make_penta2()
# make_zig_zag()
make_dodeca()
# make_brick()
# make_hex_big_tri()
make_pythag()
def make_floret():
tessagon_cls = TessagonDiscovery.get_class('FloretTessagon')
def my_func(u,v):
return [10 + 90*u, 10 + 80*v, 0]
options = {
'function': my_func,
'u_range': [0.0, 1.0],
'v_range': [0.0, 1.0],
'u_num': 2,
'v_num': 3,
'u_cyclic': False,
'v_cyclic': False,
'color_pattern': 2,
'adaptor_class' : ListAdaptor
}
tessagon = tessagon_cls(**options)
out = tessagon.create_mesh()
render_output(out, BLUES)
def make_hex():
tessagon_cls = TessagonDiscovery.get_class('HexTessagon')
def my_func(u,v):
return [100 + 60*u, 10 + 60*v, 0]
options = {
'function': my_func,
'u_range': [0.0, 1.0],
'v_range': [0.0, 1.0],
'u_num': 13,
'v_num': 8,
'u_cyclic': False,
'v_cyclic': False,
'color_pattern': 2,
'adaptor_class' : ListAdaptor
}
tessagon = tessagon_cls(**options)
out = tessagon.create_mesh()
render_output(out, ORANGES)
def make_hex_tri():
tessagon_cls = TessagonDiscovery.get_class('HexTriTessagon')
def my_func(u,v):
return [100 + 60*u, 10 + 60*v, 0]
options = {
'function': my_func,
'u_range': [0.0, 1.0],
'v_range': [0.0, 1.0],
'u_num': 13,
'v_num': 8,
'u_cyclic': False,
'v_cyclic': False,
'color_pattern': 1,
'adaptor_class' : ListAdaptor
}
tessagon = tessagon_cls(**options)
out = tessagon.create_mesh()
render_output(out, ORANGES)
def make_hex_square_tri():
tessagon_cls = TessagonDiscovery.get_class('HexSquareTriTessagon')
def my_func(u,v):
return [100 + 60*u, 10 + 60*v, 0]
options = {
'function': my_func,
'u_range': [0.0, 1.0],
'v_range': [0.0, 1.0],
'u_num': 13,
'v_num': 8,
'u_cyclic': False,
'v_cyclic': False,
'color_pattern': 1,
'adaptor_class' : ListAdaptor
}
tessagon = tessagon_cls(**options)
out = tessagon.create_mesh()
render_output(out, ORANGES)
def make_square_tri():
tessagon_cls = TessagonDiscovery.get_class('SquareTriTessagon')
def my_func(u,v):
return [100 + 60*u, 10 + 60*v, 0]
options = {
'function': my_func,
'u_range': [0.0, 1.0],
'v_range': [0.0, 1.0],
'u_num': 6,
'v_num': 6,
'u_cyclic': False,
'v_cyclic': False,
'color_pattern': 2,
'adaptor_class' : ListAdaptor
}
tessagon = tessagon_cls(**options)
out = tessagon.create_mesh()
render_output(out, BLUES)
def make_square_tri2():
tessagon_cls = TessagonDiscovery.get_class('SquareTri2Tessagon')
def my_func(u,v):
return [100 + 60*u, 10 + 60*v, 0]
options = {
'function': my_func,
'u_range': [0.0, 1.0],
'v_range': [0.0, 1.0],
'u_num': 10,
'v_num': 4,
'u_cyclic': False,
'v_cyclic': False,
'color_pattern': 1,
'adaptor_class' : ListAdaptor
}
tessagon = tessagon_cls(**options)
out = tessagon.create_mesh()
render_output(out, BLUES)
def make_octo():
tessagon_cls = TessagonDiscovery.get_class('OctoTessagon')
def my_func(u,v):
return [100 + 60*u, 10 + 60*v, 0]
options = {
'function': my_func,
'u_range': [0.0, 1.0],
'v_range': [0.0, 1.0],
'u_num': 8,
'v_num': 8,
'u_cyclic': False,
'v_cyclic': False,
'color_pattern': 1,
'adaptor_class' : ListAdaptor
}
tessagon = tessagon_cls(**options)
out = tessagon.create_mesh()
render_output(out, ORANGES)
def make_weave():
tessagon_cls = TessagonDiscovery.get_class('WeaveTessagon')
def my_func(u,v):
return [70 + 60*u, 100 + 60*v, 0]
options = {
'function': my_func,
'u_range': [0.0, 1.0],
'v_range': [0.0, 1.0],
'u_num': 4,
'v_num': 4,
'rot_factor': 1,
'u_cyclic': False,
'v_cyclic': False,
'color_pattern': 1,
'adaptor_class' : ListAdaptor
}
tessagon = tessagon_cls(**options)
out = tessagon.create_mesh()
render_output(out, ORANGES)
def make_rhombus():
tessagon_cls = TessagonDiscovery.get_class('RhombusTessagon')
def my_func(u,v):
return [70 + 60*u, 100 + 60*v, 0]
options = {
'function': my_func,
'u_range': [0.0, 1.0],
'v_range': [0.0, 1.0],
'u_num': 6,
'v_num': 4,
'u_cyclic': False,
'v_cyclic': False,
'color_pattern': 1,
'adaptor_class' : ListAdaptor
}
tessagon = tessagon_cls(**options)
out = tessagon.create_mesh()
render_output(out, ORANGES)
def make_dodeca():
tessagon_cls = TessagonDiscovery.get_class('DodecaTessagon')
def my_func(u,v):
return [10 + 50*u, 100 + 60*v, 0]
options = {
'function': my_func,
'u_range': [0.0, 1.0],
'v_range': [0.0, 1.0],
'u_num': 5,
'v_num': 4,
'u_cyclic': False,
'v_cyclic': False,
'color_pattern': 1,
'adaptor_class' : ListAdaptor
}
tessagon = tessagon_cls(**options)
out = tessagon.create_mesh()
render_output(out, BLUES)
def make_dodeca_tri():
tessagon_cls = TessagonDiscovery.get_class('DodecaTriTessagon')
def my_func(u,v):
return [10 + 50*u, 100 + 60*v, 0]
options = {
'function': my_func,
'u_range': [0.0, 1.0],
'v_range': [0.0, 1.0],
'u_num': 3,
'v_num': 6,
'u_cyclic': False,
'v_cyclic': False,
'color_pattern': 1,
'adaptor_class' : ListAdaptor
}
tessagon = tessagon_cls(**options)
out = tessagon.create_mesh()
render_output(out, BLUES)
def make_dissected_triangle():
tessagon_cls = TessagonDiscovery.get_class('DissectedTriangleTessagon')
def my_func(u,v):
return [10 + 50*u, 100 + 60*v, 0]
options = {
'function': my_func,
'u_range': [0.0, 1.0],
'v_range': [0.0, 1.0],
'u_num': 3,
'v_num': 6,
'u_cyclic': False,
'v_cyclic': False,
'color_pattern': 1,
'adaptor_class' : ListAdaptor
}
tessagon = tessagon_cls(**options)
out = tessagon.create_mesh()
render_output(out, BLUES)
def make_dissected_hex_quad():
tessagon_cls = TessagonDiscovery.get_class('DissectedHexQuadTessagon')
def my_func(u,v):
return [10 + 50*u, 100 + 60*v, 0]
options = {
'function': my_func,
'u_range': [0.0, 1.0],
'v_range': [0.0, 1.0],
'u_num': 6,
'v_num': 6,
'u_cyclic': False,
'v_cyclic': False,
'color_pattern': 2,
'adaptor_class' : ListAdaptor
}
tessagon = tessagon_cls(**options)
out = tessagon.create_mesh()
render_output(out, BLUES)
def make_dissected_hex_tri():
tessagon_cls = TessagonDiscovery.get_class('DissectedHexTriTessagon')
def my_func(u,v):
return [10 + 50*u, 100 + 60*v, 0]
options = {
'function': my_func,
'u_range': [0.0, 1.0],
'v_range': [0.0, 1.0],
'u_num': 3,
'v_num': 3,
'u_cyclic': False,
'v_cyclic': False,
'color_pattern': 1,
'adaptor_class' : ListAdaptor
}
tessagon = tessagon_cls(**options)
out = tessagon.create_mesh()
render_output(out, BLUES)
def make_penta():
tessagon_cls = TessagonDiscovery.get_class('PentaTessagon')
def my_func(u,v):
return [10 + 50*u, 100 + 60*v, 0]
options = {
'function': my_func,
'u_range': [0.0, 1.0],
'v_range': [0.0, 1.0],
'u_num': 3,
'v_num': 4,
'u_cyclic': False,
'v_cyclic': False,
'color_pattern': 1,
'adaptor_class' : ListAdaptor
}
tessagon = tessagon_cls(**options)
out = tessagon.create_mesh()
render_output(out, BLUES)
def make_penta2():
tessagon_cls = TessagonDiscovery.get_class('Penta2Tessagon')
def my_func(u,v):
return [10 + 50*u, 100 + 60*v, 0]
options = {
'function': my_func,
'u_range': [0.0, 1.0],
'v_range': [0.0, 1.0],
'u_num': 6,
'v_num': 4,
'u_cyclic': False,
'v_cyclic': False,
'color_pattern': 1,
'adaptor_class' : ListAdaptor
}
tessagon = tessagon_cls(**options)
out = tessagon.create_mesh()
render_output(out, BLUES)
def make_zig_zag():
tessagon_cls = TessagonDiscovery.get_class('ZigZagTessagon')
def my_func(u,v):
return [10 + 50*u, 100 + 60*v, 0]
options = {
'function': my_func,
'u_range': [0.0, 1.0],
'v_range': [0.0, 1.0],
'u_num': 6,
'v_num': 6,
'u_cyclic': False,
'v_cyclic': False,
'color_pattern': 1,
'adaptor_class' : ListAdaptor
}
tessagon = tessagon_cls(**options)
out = tessagon.create_mesh()
render_output(out, BLUES)
def make_pythag():
tessagon_cls = TessagonDiscovery.get_class('PythagoreanTessagon')
def my_func(u,v):
return [130 + 60*u, 100 + 60*v, 0]
options = {
'function': my_func,
'u_range': [0.0, 1.0],
'v_range': [0.0, 1.0],
'u_num': 4,
'v_num': 4,
'rot_factor': 1,
'color_pattern': 1,
'u_cyclic': False,
'v_cyclic': False,
'adaptor_class' : ListAdaptor
}
tessagon = tessagon_cls(**options)
out = tessagon.create_mesh()
render_output(out, BLUES)
def make_brick():
tessagon_cls = TessagonDiscovery.get_class('BrickTessagon')
def my_func(u,v):
return [130 + 60*u, 100 + 60*v, 0]
options = {
'function': my_func,
'u_range': [0.0, 1.0],
'v_range': [0.0, 1.0],
'u_num': 6,
'v_num': 6,
'rot_factor': 1,
'color_pattern': 1,
'u_cyclic': False,
'v_cyclic': False,
'adaptor_class' : ListAdaptor
}
tessagon = tessagon_cls(**options)
out = tessagon.create_mesh()
render_output(out, BLUES)
def make_hex_big_tri():
tessagon_cls = TessagonDiscovery.get_class('HexBigTriTessagon')
def my_func(u,v):
return [130 + 60*u, 100 + 60*v, 0]
options = {
'function': my_func,
'u_range': [0.0, 1.0],
'v_range': [0.0, 1.0],
'u_num': 2,
'v_num': 3,
'u_cyclic': False,
'v_cyclic': False,
'color_pattern': 2,
'adaptor_class' : ListAdaptor
}
tessagon = tessagon_cls(**options)
out = tessagon.create_mesh()
render_output(out, BLUES)
def render_output(out, colors=None):
for f in range(len(out['face_list'])):
face = out['face_list'][f]
verts = []
for v in face:
vert = out['vert_list'][v]
verts.append((vert[0], vert[1]))
if colors:
if type(colors) == list:
color = colors[out['color_list'][f]]
else:
color = colors
polygon(verts,
stroke='#444444',
stroke_width=1*pt,
fill=color).to_path(True)
else:
polygon(verts,
stroke='#444444',
stroke_width=1*pt).to_path(True)
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment