Jongmin Kim
5 years ago
committed by
GitHub
9 changed files with 404 additions and 0 deletions
@ -0,0 +1,20 @@
@@ -0,0 +1,20 @@
|
||||
export function Color(ctx, no, data, color) { |
||||
let c_total = color.length; |
||||
const cur = (no + (c_total * (Math.abs((no / 10) | 0) + 1))) % c_total; |
||||
if (Array.isArray(color[cur])) { |
||||
c_total = color[cur].length; |
||||
const vv = 1 / (c_total + 1); |
||||
const g = ctx.createLinearGradient(data.rect.x, data.rect.y, data.rect.x, data.rect.y + data.rect.h); |
||||
let i; |
||||
g.addColorStop(vv, color[cur][0]); |
||||
for (i = 0; i < c_total; i++) { |
||||
g.addColorStop(vv * (i + 1), color[cur][i]); |
||||
} |
||||
g.addColorStop(vv * (c_total + 1), color[cur][c_total - 1]); |
||||
ctx.strokeStyle = g; |
||||
ctx.fillStyle = g; |
||||
} else { |
||||
ctx.strokeStyle = color[cur]; |
||||
ctx.fillStyle = color[cur]; |
||||
} |
||||
} |
@ -0,0 +1,93 @@
@@ -0,0 +1,93 @@
|
||||
import { |
||||
PI2, |
||||
getCurrent |
||||
} from '../../core/util.js'; |
||||
import { |
||||
cubicBezierLength, |
||||
distance |
||||
} from '../../core/length.js'; |
||||
|
||||
let colorArr; |
||||
let curColor = -1; |
||||
let colorTotal; |
||||
const MIN_DISTANCE = 10; |
||||
|
||||
export function Colorful(ctx, model, colors) { |
||||
curColor = -1; |
||||
colorArr = colors; |
||||
colorTotal = colorArr.length; |
||||
const total = model.data.length; |
||||
let i, d, j, j_total, line, pos, prev; |
||||
let max, length, prevRatio; |
||||
for (i = 0; i < total; i++) { |
||||
d = model.data[i]; |
||||
max = d.pointsLength.max; |
||||
prevRatio = 0; |
||||
j_total = d.lines.length; |
||||
prev = null; |
||||
for (j = 0; j < j_total; j++) { |
||||
line = d.lines[j]; |
||||
pos = line.pos; |
||||
if (pos.type == 'a') { |
||||
setColor(ctx); |
||||
ctx.beginPath(); |
||||
ctx.arc(pos.x, pos.y, pos.radius * d.drawing.value, 0, PI2); |
||||
ctx.fill(); |
||||
ctx.closePath(); |
||||
} else if (pos.type == 'm') { |
||||
prev = pos; |
||||
} else if (pos.type == 'l') { |
||||
length = distance(prev.x, prev.y, pos.x, pos.y); |
||||
if (length / model.scale > MIN_DISTANCE) { |
||||
// ignore short distance paths
|
||||
setColor(ctx); |
||||
ctx.beginPath(); |
||||
if (prev) ctx.moveTo(prev.x, prev.y); |
||||
ctx.lineTo(pos.x, pos.y); |
||||
prevRatio += draw(ctx, line, length, max, d, prevRatio); |
||||
} |
||||
prev = pos; |
||||
} else if (pos.type == 'b') { |
||||
length = cubicBezierLength(prev.x, prev.y, pos.x, pos.y, pos.x2, pos.y2, pos.x3, pos.y3); |
||||
if (length / model.scale > MIN_DISTANCE) { |
||||
setColor(ctx); |
||||
ctx.beginPath(); |
||||
if (prev) ctx.moveTo(prev.x, prev.y); |
||||
ctx.bezierCurveTo(pos.x, pos.y, pos.x2, pos.y2, pos.x3, pos.y3); |
||||
prevRatio += draw(ctx, line, length, max, d, prevRatio); |
||||
} |
||||
prev = { |
||||
x: pos.x3, |
||||
y: pos.y3 |
||||
}; |
||||
} |
||||
} |
||||
} |
||||
} |
||||
|
||||
function setColor(ctx) { |
||||
const color = getColor(); |
||||
ctx.fillStyle = color; |
||||
ctx.strokeStyle = color; |
||||
} |
||||
|
||||
function getColor() { |
||||
curColor++; |
||||
if (curColor == colorTotal) curColor = 0; |
||||
return colorArr[curColor]; |
||||
} |
||||
|
||||
function draw(ctx, line, length, max, d, prevRatio) { |
||||
const ltRatio = length / max; |
||||
let dv = getCurrent(d.drawing.value, prevRatio + ltRatio, prevRatio, 1, 0); |
||||
if (line.direction == 1) { |
||||
dv = getCurrent(1 - d.drawing.value, prevRatio, prevRatio + ltRatio, 1, 0); |
||||
} |
||||
if (dv > 0) { |
||||
const frac = length * dv; |
||||
ctx.setLineDash([length]); |
||||
ctx.lineDashOffset = line.direction * (frac + length); |
||||
ctx.stroke(); |
||||
} |
||||
return ltRatio; |
||||
} |
@ -0,0 +1,23 @@
@@ -0,0 +1,23 @@
|
||||
export function Grids(ctx, data) { |
||||
ctx.save(); |
||||
|
||||
ctx.beginPath(); |
||||
ctx.lineWidth = 1; |
||||
ctx.strokeStyle = "#aaaaaa"; |
||||
let i, total = data.guide.length, |
||||
grid; |
||||
for (i = 0; i < total; i++) { |
||||
grid = data.rect.y + data.grid[i]; |
||||
ctx.moveTo(data.rect.x, grid); |
||||
ctx.lineTo(data.rect.x + data.rect.w, grid); |
||||
} |
||||
ctx.stroke(); |
||||
|
||||
ctx.lineWidth = 1; |
||||
ctx.beginPath(); |
||||
ctx.strokeStyle = "#aaaaaa"; |
||||
ctx.rect(data.rect.x, data.rect.y, data.rect.w, data.rect.h); |
||||
ctx.stroke(); |
||||
|
||||
ctx.restore(); |
||||
} |
@ -0,0 +1,26 @@
@@ -0,0 +1,26 @@
|
||||
import { |
||||
PI2 |
||||
} from '../../core/util.js'; |
||||
|
||||
export function Lines(ctx, data) { |
||||
const total = data.lines.length; |
||||
let i, d, pos; |
||||
for (i = 0; i < total; i++) { |
||||
d = data.lines[i]; |
||||
pos = d.pos; |
||||
if (pos.type == 'a') { |
||||
ctx.beginPath(); |
||||
ctx.arc(pos.x, pos.y, pos.radius * d.drawing.value, 0, PI2); |
||||
ctx.fill(); |
||||
ctx.closePath(); |
||||
} else if (pos.type == 'm') { |
||||
ctx.beginPath(); |
||||
ctx.moveTo(pos.x, pos.y); |
||||
} else if (pos.type == 'l') { |
||||
ctx.lineTo(pos.x, pos.y); |
||||
} else if (pos.type == 'b') { |
||||
ctx.bezierCurveTo(pos.x, pos.y, pos.x2, pos.y2, pos.x3, pos.y3); |
||||
} |
||||
d.stroke(ctx, d); |
||||
} |
||||
} |
@ -0,0 +1,31 @@
@@ -0,0 +1,31 @@
|
||||
import { |
||||
PI2 |
||||
} from '../../core/util.js'; |
||||
|
||||
export function Pattern(ctx, data, w, h) { |
||||
const total = Math.round(data.paths.length * data.drawing.value); |
||||
const w2 = w / 2; |
||||
const w3 = w / 3; |
||||
const h2 = h / 2; |
||||
let i, p; |
||||
for (i = 0; i < total; i++) { |
||||
p = data.paths[i]; |
||||
if (p.num == 1) { |
||||
ctx.fillStyle = "#ff00c5"; |
||||
} else { |
||||
ctx.fillStyle = "#ff95f8"; |
||||
} |
||||
if (p.type == 'a') { |
||||
ctx.beginPath(); |
||||
ctx.arc(p.x, p.y, w3, 0, PI2); |
||||
ctx.fill(); |
||||
} else { |
||||
ctx.beginPath(); |
||||
ctx.save(); |
||||
ctx.translate(p.x, p.y); |
||||
ctx.rotate(p.rotation); |
||||
ctx.fillRect(-w2, -h2, w, h); |
||||
ctx.restore(); |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,73 @@
@@ -0,0 +1,73 @@
|
||||
import { |
||||
PI2 |
||||
} from '../../core/util.js'; |
||||
|
||||
export function Points(ctx, data) { |
||||
ctx.save(); |
||||
ctx.lineWidth = 1; |
||||
let total = data.lines.length; |
||||
let i; |
||||
for (i = 0; i < total; i++) { |
||||
eachLine_(ctx, data.lines[i]); |
||||
} |
||||
ctx.restore(); |
||||
|
||||
ctx.save(); |
||||
ctx.lineWidth = 1; |
||||
total = data.typo.p.length; |
||||
for (i = 0; i < total; i++) { |
||||
eachPoint_(ctx, data.typo.p[i], data); |
||||
} |
||||
ctx.restore(); |
||||
} |
||||
|
||||
function eachPoint_(ctx, p, data) { |
||||
const total = p.v.length; |
||||
let i, mp, cp; |
||||
for (i = 0; i < total; i++) { |
||||
mp = p.cv[i]; |
||||
cp = mp.addRect(data.rect); |
||||
if (mp.type == 'b') { |
||||
ctx.fillStyle = "#ff2a00"; |
||||
ctx.beginPath(); |
||||
ctx.arc(cp.x3 + (cp.x3 - cp.x2), cp.y3 + (cp.y3 - cp.y2), 1.5, 0, PI2); |
||||
ctx.fill(); |
||||
ctx.beginPath(); |
||||
ctx.arc(cp.x2, cp.y2, 1.5, 0, PI2); |
||||
ctx.fill(); |
||||
ctx.beginPath(); |
||||
ctx.moveTo(cp.x2, cp.y2); |
||||
ctx.lineTo(cp.x3, cp.y3); |
||||
ctx.lineTo(cp.x3 + (cp.x3 - cp.x2), cp.y3 + (cp.y3 - cp.y2)); |
||||
ctx.stroke(); |
||||
ctx.beginPath(); |
||||
ctx.fillStyle = "#ffffff"; |
||||
ctx.arc(cp.x3, cp.y3, 2.5, 0, PI2); |
||||
ctx.fill(); |
||||
ctx.stroke(); |
||||
} else { |
||||
ctx.beginPath(); |
||||
ctx.fillStyle = "#ffffff"; |
||||
ctx.strokeStyle = "#ff2a00"; |
||||
ctx.arc(cp.x, cp.y, 2.5, 0, PI2); |
||||
ctx.fill(); |
||||
ctx.stroke(); |
||||
} |
||||
} |
||||
} |
||||
|
||||
function eachLine_(ctx, d) { |
||||
const pos = d.pos; |
||||
if (pos.type != 'a') { |
||||
if (pos.type == 'm') { |
||||
ctx.strokeStyle = "#ff2a00"; |
||||
ctx.beginPath(); |
||||
ctx.moveTo(pos.x, pos.y); |
||||
} else if (pos.type == 'l') { |
||||
ctx.lineTo(pos.x, pos.y); |
||||
} else if (pos.type == 'b') { |
||||
ctx.bezierCurveTo(pos.x, pos.y, pos.x2, pos.y2, pos.x3, pos.y3); |
||||
} |
||||
ctx.stroke(); |
||||
} |
||||
} |
@ -0,0 +1,54 @@
@@ -0,0 +1,54 @@
|
||||
import { |
||||
PI2, |
||||
getAmplitude |
||||
} from '../../core/util.js'; |
||||
|
||||
const THIN_LIMIT = 110; |
||||
const COS = Math.cos; |
||||
const SIN = Math.sin; |
||||
|
||||
export function Wave(ctx, data, scale, amplitude, weight, fps) { |
||||
const total = data.wavePaths.length; |
||||
const m_amplitude = getAmplitude(amplitude, scale); |
||||
let i, p, prev, qx, qy, saveDot = []; |
||||
|
||||
ctx.beginPath(); |
||||
for (i = 0; i < total; i++) { |
||||
p = data.wavePaths[i]; |
||||
if (fps) { |
||||
const ranx = (Math.random() * m_amplitude) - (m_amplitude / 2); |
||||
const rany = (Math.random() * m_amplitude) - (m_amplitude / 2); |
||||
p.rx = p.x + ranx * COS(p.rotation); |
||||
p.ry = p.y + ranx * SIN(p.rotation); |
||||
p.sx = p.x + ranx; |
||||
p.sy = p.y + rany; |
||||
} |
||||
|
||||
if (p.type == 'a') { |
||||
saveDot.push(p); |
||||
} else if (p.start == 1) { |
||||
ctx.moveTo(p.x, p.y); |
||||
} else if (p.fix) { |
||||
ctx.lineTo(p.x, p.y); |
||||
} else { |
||||
if (weight < THIN_LIMIT) { |
||||
prev = data.wavePaths[i - 1]; |
||||
if (prev) { |
||||
qx = prev.x + ((p.x - prev.x) * 0.5); |
||||
qy = prev.y + ((p.y - prev.y) * 0.5); |
||||
ctx.quadraticCurveTo(qx, qy, p.rx, p.ry); |
||||
} |
||||
} else { |
||||
ctx.lineTo(p.rx, p.ry); |
||||
} |
||||
} |
||||
} |
||||
ctx.stroke(); |
||||
|
||||
for (i = 0; i < saveDot.length; i++) { |
||||
p = saveDot[i]; |
||||
ctx.beginPath(); |
||||
ctx.arc(p.x, p.y, p.radius, 0, PI2); |
||||
ctx.fill(); |
||||
} |
||||
} |
@ -0,0 +1,33 @@
@@ -0,0 +1,33 @@
|
||||
export function PixiColor(no, data, color) { |
||||
let c_total = color.length; |
||||
const cur = (no + (c_total * (Math.abs((no / 10) | 0) + 1))) % c_total; |
||||
if (Array.isArray(color[cur])) { |
||||
/* |
||||
c_total = color[cur].length; |
||||
const vv = 1 / (c_total - 1); |
||||
const g = ctx.createLinearGradient(data.rect.x, data.rect.y, data.rect.x, data.rect.y + data.rect.h); |
||||
let i; |
||||
for (i = 0; i < c_total; i++) { |
||||
g.addColorStop(vv * i, color[cur][i]); |
||||
} |
||||
ctx.strokeStyle = g; |
||||
ctx.fillStyle = g; |
||||
*/ |
||||
/* |
||||
c_total = color[cur].length; |
||||
const vv = 1 / (c_total - 1); |
||||
const c = document.createElement("canvas"); |
||||
const ctx = c.getContext("2d"); |
||||
const g = ctx.createLinearGradient(0, 0, data.rect.w, data.rect.h); |
||||
let i; |
||||
for (i = 0; i < c_total; i++) { |
||||
g.addColorStop(vv * i, color[cur][i]); |
||||
} |
||||
ctx.fillStyle = g; |
||||
ctx.fillRect(0, 0, data.rect.w, data.rect.h); |
||||
return new PIXI.Texture.from(c); |
||||
*/ |
||||
} else { |
||||
return color[cur]; |
||||
} |
||||
} |
@ -0,0 +1,51 @@
@@ -0,0 +1,51 @@
|
||||
export function PixiLines(graphics, data, lineW, color) { |
||||
let total, i; |
||||
if (data.drawing.value == 1) { |
||||
total = data.lines.length; |
||||
for (i = 0; i < total; i++) { |
||||
eachLine_(graphics, data.lines[i], lineW, color); |
||||
} |
||||
} else { |
||||
total = data.drawingPaths.length * data.drawing.value; |
||||
for (i = 0; i < total; i++) { |
||||
|
||||
eachPath_(graphics, data.drawingPaths[i], lineW, color, data.drawing.value); |
||||
} |
||||
} |
||||
} |
||||
|
||||
function eachLine_(graphics, data, lineW, color) { |
||||
const pos = data.pos; |
||||
if (pos.type == 'a') { |
||||
graphics.lineStyle(0, color, 0); |
||||
graphics.beginFill(color); |
||||
graphics.drawCircle(pos.x, pos.y, pos.radius); |
||||
graphics.endFill(); |
||||
} else if (pos.type == 'm') { |
||||
graphics.lineStyle(lineW, color, 1); |
||||
graphics.moveTo(pos.x, pos.y); |
||||
} else if (pos.type == 'l') { |
||||
graphics.lineTo(pos.x, pos.y); |
||||
} else if (pos.type == 'b') { |
||||
graphics.bezierCurveTo(pos.x, pos.y, pos.x2, pos.y2, pos.x3, pos.y3); |
||||
} |
||||
if (data.closePath) { |
||||
graphics.closePath(); |
||||
} |
||||
} |
||||
|
||||
function eachPath_(graphics, pos, lineW, color, dValue) { |
||||
if (pos.type == 'a') { |
||||
graphics.lineStyle(0, color, 0); |
||||
graphics.beginFill(color); |
||||
graphics.drawCircle(pos.x, pos.y, pos.radius * dValue); |
||||
graphics.endFill(); |
||||
} else { |
||||
if (pos.start == 1) { |
||||
graphics.lineStyle(lineW, color, 1); |
||||
graphics.moveTo(pos.x, pos.y); |
||||
} else { |
||||
graphics.lineTo(pos.x, pos.y, 1); |
||||
} |
||||
} |
||||
} |
Loading…
Reference in new issue