1
0
Fork 0
freesewing/plugins/plugin-round/src/index.js

43 lines
1.5 KiB
JavaScript
Raw Normal View History

import pkg from '../package.json'
2018-12-21 16:57:10 +01:00
export default {
name: pkg.name,
version: pkg.version,
2018-12-21 16:57:10 +01:00
hooks: {
preRender: (svg) => svg.attributes.setIfUnset('freesewing:plugin-round', pkg.version),
2018-12-21 16:57:10 +01:00
},
macros: {
2021-01-31 09:22:15 +01:00
round: function (so) {
2019-08-03 15:03:33 +02:00
const C = 0.55191502449
2018-12-21 16:57:10 +01:00
// Find angle between points
2019-08-03 15:03:33 +02:00
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)
2019-08-03 15:03:33 +02:00
console.log('Warning: The round macro only handles 90 degree angles correctly.')
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'])
2018-12-21 16:57:10 +01:00
.curve(
2019-08-03 15:03:33 +02:00
this.points[prefix + 'Cp1'],
this.points[prefix + 'Cp2'],
this.points[prefix + 'End']
2018-12-21 16:57:10 +01:00
)
2019-08-03 15:03:33 +02:00
.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
2021-04-24 10:16:31 +02:00
},
},
2019-08-03 15:03:33 +02:00
}