4 puntos por GN⁺ 2023-12-23 | 1 comentarios | Compartir por WhatsApp
  • Rough.js es una biblioteca ligera de JavaScript para crear gráficos con estilo de boceto en lugar de formas digitales nítidas
  • Aunque pesa menos de 9 kB gzipped, puede manejar líneas, curvas, arcos, polígonos, círculos, elipses e incluso SVG path
  • Con el mismo flujo de API, soporta tanto Canvas como SVG, por lo que puedes elegir rough.canvas() o rough.svg() según el destino de renderizado
  • Además del relleno predeterminado hachure, soporta solid, zigzag, cross-hatch, dots, sunburst, dashed, zigzag-line
  • Con opciones como roughness, bowing, strokeWidth, hachureAngle, hachureGap puedes ajustar la vibración de las líneas y la densidad del relleno

Biblioteca ligera para dibujar figuras con estilo hecho a mano

  • Rough.js es una biblioteca de JavaScript para crear gráficos con apariencia de boceto
  • El tamaño de la biblioteca es de menos de 9 kB gzipped
  • Soporta tanto figuras básicas como rutas
    • líneas
    • curvas
    • arcos
    • polígonos
    • círculos
    • elipses
    • SVG paths
  • Como destino de renderizado, se pueden usar tanto Canvas como SVG

Instalación y uso básico

  • Se instala con npm
npm install --save roughjs
  • En el código, se importa y usa roughjs
import rough from 'roughjs';
  • En Canvas, se crea el contexto con rough.canvas() y luego se dibujan las figuras
const rc = rough.canvas(document.getElementById('canvas'));

rc.rectangle(10, 10, 200, 200); // x, y, width, height
  • En SVG, se crea el nodo con rough.svg() y se agrega al SVG
const rc = rough.svg(svg);

let node = rc.rectangle(10, 10, 200, 200); // x, y, width, height
svg.appendChild(node);
  • También ofrece APIs básicas para dibujar círculos, elipses y líneas
rc.circle(80, 120, 50); // centerX, centerY, diameter
rc.ellipse(300, 100, 150, 80); // centerX, centerY, width, height
rc.line(80, 120, 300, 100); // x1, y1, x2, y2

Relleno y ajuste de la expresión tipo boceto

  • El relleno se configura con fill y opciones relacionadas
    • fill: 'red' usa un relleno hachure rojo
    • fillWeight ajusta el grosor de las líneas del hachure
    • hachureAngle y hachureGap cambian el ángulo y el espaciado del hachure
    • fillStyle: 'solid' permite usar un relleno de color sólido
rc.circle(50, 50, 80, { fill: 'red' });
rc.rectangle(120, 15, 80, 80, { fill: 'red' });

rc.circle(50, 150, 80, {
  fill: "rgb(10,150,10)",
  fillWeight: 3
});

rc.rectangle(220, 15, 80, 80, {
  fill: 'red',
  hachureAngle: 60,
  hachureGap: 8
});

rc.rectangle(120, 105, 80, 80, {
  fill: 'rgba(255,0,200,0.2)',
  fillStyle: 'solid'
});
  • Los estilos de relleno soportados son hachure, solid, zigzag, cross-hatch, dots, sunburst, dashed, zigzag-line
  • La vibración de las líneas y la apariencia del contorno pueden cambiarse con opciones como roughness, bowing, stroke, strokeWidth
rc.rectangle(15, 15, 80, 80, { roughness: 0.5, fill: 'red' });
rc.rectangle(120, 15, 80, 80, { roughness: 2.8, fill: 'blue' });
rc.rectangle(220, 15, 80, 80, { bowing: 6, stroke: 'green', strokeWidth: 3 });

SVG path y documentación de la API

  • Las cadenas de SVG path pueden dibujarse con rc.path()
rc.path('M80 80 A 45 45, 0, 0, 0, 125 125 L 125 80 Z', { fill: 'green' });
rc.path('M230 80 A 45 45, 0, 1, 0, 275 125 L 275 80 Z', { fill: 'purple' });
rc.path('M80 230 A 45 45, 0, 0, 1, 125 275 L 125 230 Z', { fill: 'red' });
rc.path('M230 230 A 45 45, 0, 1, 1, 275 275 L 275 230 Z', { fill: 'blue' });

1 comentarios

 
GN⁺ 2023-12-23
Comentarios en Hacker News