Files
design2garmentcode-impl/assets/garment_programs/shapes.py

65 lines
1.9 KiB
Python
Raw Normal View History

2025-07-03 17:03:00 +08:00
"""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