45 lines
1.6 KiB
JavaScript
45 lines
1.6 KiB
JavaScript
import { name, version } from "../package.json";
|
|
|
|
export default {
|
|
name: name,
|
|
version: version,
|
|
hooks: {
|
|
preRender: function(svg) {
|
|
if (svg.attributes.get("freesewing:plugin-round") === false)
|
|
svg.attributes.set("freesewing:plugin-round", version);
|
|
}
|
|
},
|
|
macros: {
|
|
round: function(so) {
|
|
const C = 0.55191502449;
|
|
// Find angle between points
|
|
let from = so.from;
|
|
let to = so.to;
|
|
let via = so.via;
|
|
let radius = so.radius;
|
|
let prefix = so.prefix;
|
|
let angle1 = from.angle(via);
|
|
let angle2 = via.angle(to);
|
|
if((Math.round(angle1)-Math.round(angle2))%90 !== 0)
|
|
throw new Error("The round macro currently only supports 90 degree angles.");
|
|
let fd = from.dist(via);
|
|
let td = to.dist(via);
|
|
if(radius > fd || radius > td || typeof radius === "undefined")
|
|
radius = fd > td ? td : fd;
|
|
this.points[prefix+"Start"] = via.shiftTowards(from, radius);
|
|
this.points[prefix+"Cp1"] = via.shiftTowards(from, radius*(1-C));
|
|
this.points[prefix+"Cp2"] = via.shiftTowards(to, radius*(1-C));
|
|
this.points[prefix+"End"] = via.shiftTowards(to, radius);
|
|
this.paths[prefix+"Rounded"] = new this.Path()
|
|
.move(this.points[prefix+"Start"])
|
|
.curve(
|
|
this.points[prefix+"Cp1"],
|
|
this.points[prefix+"Cp2"],
|
|
this.points[prefix+"End"]
|
|
)
|
|
.attr("class", so.class ? so.class : "");
|
|
if(typeof so.render !== undefined && so.render) this.paths[prefix+"Rounded"].render = true;
|
|
else this.paths[prefix+"Rounded"].render = false;
|
|
}
|
|
}
|
|
};
|