4 pontos por GN⁺ 2023-12-23 | 1 comentários | Compartilhar no WhatsApp
  • Rough.js é uma biblioteca JavaScript leve para criar gráficos em estilo de esboço, como se fossem desenhados à mão, em vez de formas digitais perfeitamente nítidas
  • Mesmo pequena, com menos de 9 kB gzipada, ela consegue lidar com linhas, curvas, arcos, polígonos, círculos, elipses e até SVG path
  • Suporta tanto Canvas quanto SVG com o mesmo fluxo de API, permitindo escolher rough.canvas() ou rough.svg() conforme o destino de renderização
  • Além do preenchimento padrão hachure, também oferece suporte a solid, zigzag, cross-hatch, dots, sunburst, dashed e zigzag-line
  • Opções como roughness, bowing, strokeWidth, hachureAngle e hachureGap permitem ajustar a irregularidade das linhas e a densidade do preenchimento

Biblioteca leve para desenhar formas em estilo feito à mão

  • Rough.js é uma biblioteca JavaScript para criar gráficos em estilo de esboço
  • O tamanho da biblioteca é de menos de 9 kB gzipada
  • Suporta formas básicas e caminhos
    • linhas
    • curvas
    • arcos
    • polígonos
    • círculos
    • elipses
    • SVG paths
  • Como destino de renderização, é possível usar tanto Canvas quanto SVG

Instalação e uso básico

  • Instale com npm
npm install --save roughjs
  • No código, importe e use roughjs
import rough from 'roughjs';
  • No Canvas, crie um contexto com rough.canvas() e então desenhe as formas
const rc = rough.canvas(document.getElementById('canvas'));

rc.rectangle(10, 10, 200, 200); // x, y, width, height
  • No SVG, crie um nó com rough.svg() e adicione-o ao SVG
const rc = rough.svg(svg);

let node = rc.rectangle(10, 10, 200, 200); // x, y, width, height
svg.appendChild(node);
  • Também são fornecidas APIs básicas para desenhar círculos, elipses e linhas
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

Ajuste de preenchimento e da expressão de esboço

  • O preenchimento é configurado com fill e opções relacionadas
    • fill: 'red' usa preenchimento hachure vermelho
    • fillWeight ajusta a espessura das linhas hachure
    • hachureAngle e hachureGap alteram o ângulo e o espaçamento do hachure
    • fillStyle: 'solid' permite usar preenchimento de cor sólida
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'
});
  • Os estilos de preenchimento suportados são hachure, solid, zigzag, cross-hatch, dots, sunburst, dashed e zigzag-line
  • A irregularidade das linhas e a expressão dos contornos podem ser alteradas com opções como roughness, bowing, stroke e 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 e documentação da API

  • Strings de SVG path podem ser desenhadas com 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 comentários

 
GN⁺ 2023-12-23
Opiniões no Hacker News