Farola: la luz en campana que llega al suelo y se abre en un charco; propuestas en docs/marca/propuestas
This commit is contained in:
parent
0d163dfe36
commit
d645ab270b
24 changed files with 93 additions and 79 deletions
|
|
@ -1,33 +1,36 @@
|
|||
import sys
|
||||
NAR, LUZ, INK, BL = "#f04e23", "#f45a1c", "#111", "#fff"
|
||||
NAR, LUZ, CLARA, INK, BL = "#f04e23", "#f45a1c", "#ffb03a", "#111", "#fff"
|
||||
|
||||
def ctrl(a, b, amp):
|
||||
(x0, y0), (x1, y1) = a, b
|
||||
dx, dy = x1 - x0, y1 - y0
|
||||
L = (dx * dx + dy * dy) ** .5
|
||||
px, py = -dy / L * amp, dx / L * amp
|
||||
return (x0 + dx / 3 + px, y0 + dy / 3 + py), (x0 + dx * 2 / 3 - px, y0 + dy * 2 / 3 - py)
|
||||
# La luz baja de la cabeza, llega al suelo y se abre en un charco (naranja por fuera, claro en el centro).
|
||||
CONOS = {
|
||||
"recta": "M57,33 H77 L98,92 H36 Z",
|
||||
"onda-suave": "M57,33 H77 C82,46 85,55 85,62 C85,69 88,73 89,76 H41 C42,72 45,69 45,62 C45,54 51,45 57,33 Z",
|
||||
"campana": "M57,33 H77 C78,52 82,66 92,76 H38 C48,66 56,52 57,33 Z",
|
||||
"onda": "M57,33 H77 C86,42 80,52 86,61 C90,67 91,72 90,76 H40 C39,72 41,67 44,61 C48,52 44,42 57,33 Z",
|
||||
}
|
||||
CHARCO = {"onda-suave": 24, "campana": 27, "onda": 25}
|
||||
|
||||
def c(p1, p2, fin):
|
||||
return f"C{p1[0]:.1f},{p1[1]:.1f} {p2[0]:.1f},{p2[1]:.1f} {fin[0]},{fin[1]}"
|
||||
def luz_(cono, luz, clara, ink, suelo=False):
|
||||
out = f'<path d="{CONOS[cono]}" fill="{luz}"/>'
|
||||
if cono in CHARCO:
|
||||
rx, ry = CHARCO[cono], 5.5
|
||||
out += (f'<ellipse cx="65" cy="76" rx="{rx}" ry="{ry}" fill="{luz}"/>'
|
||||
f'<ellipse cx="65" cy="76" rx="{rx * .62:.1f}" ry="{ry * .55:.1f}" fill="{clara}"/>')
|
||||
if cono == "recta":
|
||||
out += f'<ellipse cx="67" cy="86" rx="22" ry="5" fill="{ink}" opacity=".25"/>'
|
||||
if suelo:
|
||||
out += f'<path d="M8,84 H92" stroke="{ink}" stroke-width="3"/>'
|
||||
return out
|
||||
|
||||
def bandera(a, b, cc, d, amp, amp_b):
|
||||
der = ctrl(b, cc, amp)
|
||||
izq = ctrl(a, d, amp)
|
||||
abajo = ctrl(cc, d, amp_b)
|
||||
return (f"M{a[0]},{a[1]} H{b[0]} {c(der[0], der[1], cc)} {c(abajo[0], abajo[1], d)} "
|
||||
f"{c(izq[1], izq[0], a)} Z")
|
||||
|
||||
def farola(estilo="aro", ink=INK, luz=LUZ, fondo=None, papel=BL):
|
||||
def farola(estilo="aro", ink=INK, luz=LUZ, fondo=None, papel=BL, clara=CLARA, cono="campana", suelo=False):
|
||||
bg = f'<rect width="100" height="100" fill="{fondo}"/>' if fondo else ""
|
||||
if estilo == "aro":
|
||||
defs = '<defs><clipPath id="c"><circle cx="50" cy="50" r="42"/></clipPath></defs>'
|
||||
cono = f'<path d="{bandera((57, 33), (77, 33), (94, 84), (42, 84), -7, 5)}" fill="{luz}" clip-path="url(#c)"/>'
|
||||
suelo = ""
|
||||
cono = f'<g clip-path="url(#c)">{luz_(cono, luz, clara, ink, suelo)}</g>'
|
||||
poste = f'<path d="M37,96 V40 Q37,25 52,25 H60" fill="none" stroke="{ink}" stroke-width="8"/>'
|
||||
cabeza = f'<rect x="55" y="21" width="27" height="11" rx="3" fill="{ink}"/>'
|
||||
aro = f'<circle cx="50" cy="50" r="45" fill="none" stroke="{ink}" stroke-width="7"/>'
|
||||
return defs + cono + suelo + f'<g clip-path="url(#c)">{poste}</g>' + cabeza + aro
|
||||
return defs + cono + f'<g clip-path="url(#c)">{poste}</g>' + cabeza + aro
|
||||
pegatina = f'<circle cx="50" cy="50" r="48" fill="{luz}"/>'
|
||||
poste = f'<path d="M33,99 V38 Q33,22 49,22 H58" fill="none" stroke="{ink}" stroke-width="9"/>'
|
||||
cabeza = f'<rect x="52" y="17" width="30" height="11" rx="3" fill="{ink}"/>'
|
||||
|
|
@ -43,5 +46,11 @@ if __name__ == "__main__":
|
|||
d = sys.argv[1]
|
||||
open(f"{d}/simbolo.svg", "w").write(svg(farola()))
|
||||
open(f"{d}/simbolo-negativo.svg", "w").write(svg(farola(ink=BL, papel=INK), INK))
|
||||
open(f"{d}/simbolo-naranja.svg", "w").write(svg(farola(luz=BL, papel=NAR), NAR))
|
||||
open(f"{d}/simbolo-naranja.svg", "w").write(svg(farola(luz=BL, papel=NAR, clara="#ffe2a8"), NAR))
|
||||
open(f"{d}/simbolo-pegatina.svg", "w").write(svg(farola("pegatina")))
|
||||
# Propuestas que no se usan, para tenerlas a mano
|
||||
import os
|
||||
os.makedirs(f"{d}/propuestas", exist_ok=True)
|
||||
for n, (cono, suelo) in enumerate((("onda-suave", False), ("campana", False), ("onda", False), ("campana", True)), 1):
|
||||
open(f"{d}/propuestas/farola-{n}-{cono}{'-suelo' if suelo else ''}.svg", "w").write(svg(farola(cono=cono, suelo=suelo)))
|
||||
open(f"{d}/propuestas/farola-recta.svg", "w").write(svg(farola(cono="recta")))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue