Skip to content

Commit

Permalink
Rounded segments code.
Browse files Browse the repository at this point in the history
  • Loading branch information
stebanos committed Apr 8, 2019
1 parent 9022874 commit ca6566a
Showing 1 changed file with 69 additions and 0 deletions.
69 changes: 69 additions & 0 deletions src/libraries/vg/commands/filters.js
Original file line number Diff line number Diff line change
Expand Up @@ -908,4 +908,73 @@ vg.compound = function (shape1, shape2, method) {
return path;
};

function constructPath(points, closed) {
const segments = [];
let d = {};
let i = 0;
points.forEach(pt => {
if (i === 0) {
d._in = pt;
} else if (i === 1) {
d._pt = pt;
} else if (i === 2) {
d._out = pt;
}
i += 1;
if (i === 3) {
segments.push(d);
i = 0;
d = {};
}
});
const commands = [];
length = segments.length;
if (closed) { length += 1; }
for (i = 0; i < length; i += 1) {
let seg = segments[i % segments.length];
if (i === 0) {
commands.push({ cmd: "moveto", pt: seg._pt });
} else {
d = { cmd: "curveto", pt: seg._pt, ctrl1: segments[i - 1]._out, ctrl2: seg._in };
commands.push(d);
}
}
const path = new Path();
commands.forEach(el => {
if (el.cmd === "moveto") {
path.moveTo(el.pt.x, el.pt.y);
} else if (el.cmd === "curveto") {
path.curveTo(el.ctrl1.x, el.ctrl1.y, el.ctrl2.x, el.ctrl2.y, el.pt.x, el.pt.y);
}
});
return path;
}

vg.roundedSegments = function (shape, d) {
const points = vg.toPoints(shape);
const newPoints = [];
for (let i = 0; i < points.length; i +=1) {
let pt = points[i];
let prev;
if (i === 0) {
prev = points[points.length - 1];
} else {
prev = points[i - 1];
}
let next = points[(i + 1) % points.length];
let a = g.angle(prev, next);
let c1 = g.coordinates(pt.x, pt.y, a, -d[i % d.length]);
let c2 = g.coordinates(pt.x, pt.y, a, d[i % d.length]);
newPoints.push(c1);
newPoints.push(pt);
newPoints.push(c2);
}
let path = constructPath(newPoints, shape.isClosed());
path.fill = shape.fill;
path.stroke = shape.stroke;
path.strokeWidth = shape.strokeWidth;
return path;
};


module.exports = vg;

0 comments on commit ca6566a

Please sign in to comment.