65 lines
1.9 KiB
Python
65 lines
1.9 KiB
Python
"""A decorative shapes"""
|
|
import pygarment as pyg
|
|
|
|
|
|
def sample_arc(curve, length, stride, n_points, shift=0):
|
|
ts = [(shift + i*stride) / length for i in range(n_points)]
|
|
verts = [curve.point(t) for t in ts]
|
|
|
|
for i in range(len(verts)):
|
|
verts[i] = [verts[i].real, verts[i].imag]
|
|
|
|
return verts
|
|
|
|
|
|
def Sun(width, depth, n_rays=8, d_rays=5, **kwargs):
|
|
"""Sun-like mark"""
|
|
|
|
# Outer arc
|
|
out_arc = pyg.CircleEdgeFactory.from_three_points(
|
|
[0, 0], [width, 0], [width/2, depth]
|
|
)
|
|
in_arc = pyg.CircleEdgeFactory.from_three_points(
|
|
[d_rays, 0], [width - d_rays, 0], [width/2, depth - d_rays]
|
|
)
|
|
out_curve = out_arc.as_curve()
|
|
in_curve = in_arc.as_curve()
|
|
|
|
# Sample with stride
|
|
out_stride = out_arc.length() / n_rays
|
|
in_stride = in_arc.length() / n_rays
|
|
|
|
out_verts = sample_arc(out_curve, out_arc.length(),
|
|
out_stride, n_rays, out_stride / 2)
|
|
in_verts = sample_arc(in_curve, in_arc.length(), in_stride, n_rays + 1, 0)
|
|
|
|
# Mix the vertices in the right order
|
|
verts = out_verts
|
|
for i in range(len(in_verts)):
|
|
verts.insert(i*2, in_verts[i])
|
|
|
|
shape = pyg.EdgeSeqFactory.from_verts(*verts)
|
|
return shape, shape
|
|
|
|
|
|
def SIGGRAPH_logo(width, depth=None, **kwargs):
|
|
"""Shape of SIGGRAPH Logo (split vertically)"""
|
|
|
|
filename='./assets/img/siggraph_logo_thick_connection.svg' # NOTE assumes the script is run from the root
|
|
# TODOLOW path w.r.t. current file
|
|
left_seq, right_seq = pyg.EdgeSeqFactory.halfs_from_svg(
|
|
filename, target_height=width)
|
|
|
|
return left_seq, right_seq
|
|
|
|
|
|
def SVGFile(width, filename, depth=None, **kwargs):
|
|
"""Shape loaded from any svg file:
|
|
The shape is expected to consist of non-nested loops
|
|
each passing through OY once
|
|
"""
|
|
|
|
left_seq, right_seq = pyg.EdgeSeqFactory.halfs_from_svg(
|
|
filename, target_height=width)
|
|
return left_seq, right_seq
|