1
0
Fork 0

feat(plugin-scalebox): Added miniscale macro

This commit is contained in:
Joost De Cock 2021-01-16 13:44:03 +01:00
parent 43cce60d42
commit 3dceeefb29
3 changed files with 204 additions and 121 deletions

View file

@ -0,0 +1,82 @@
export default function(so) {
// Passing `false` will remove the miniscale
if (so === false) {
for (let id of [
'__scaleboxMetricTopLeft',
'__scaleboxMetricTopRight',
'__scaleboxMetricBottomRight',
'__scaleboxMetricBottomLeft',
'__scaleboxImperialTopLeft',
'__scaleboxImperialTopRight',
'__scaleboxImperialBottomRight',
'__scaleboxImperialBottomLeft',
'__scaleboxLead',
'__scaleboxTitle',
'__scaleboxText',
'__scaleboxLink',
'__scaleboxMetric',
'__scaleboxImperial'
])
delete this.points[id]
for (let id of ['__scaleboxMetric', '__scaleboxImperial']) delete this.paths[id]
return true
}
const m = 12.5
const i = 12.7
// Box points
this.points.__scaleboxMetricTopLeft = new this.Point(so.at.x - m, so.at.y - m)
this.points.__scaleboxMetricTopRight = new this.Point(so.at.x + m, so.at.y - m)
this.points.__scaleboxMetricBottomLeft = new this.Point(so.at.x - m, so.at.y + m)
this.points.__scaleboxMetricBottomRight = new this.Point(so.at.x + m, so.at.y + m)
this.points.__scaleboxImperialTopLeft = new this.Point(so.at.x - i, so.at.y - i)
this.points.__scaleboxImperialTopRight = new this.Point(so.at.x + i, so.at.y - i)
this.points.__scaleboxImperialBottomLeft = new this.Point(so.at.x - i, so.at.y + i)
this.points.__scaleboxImperialBottomRight = new this.Point(so.at.x + i, so.at.y + i)
// Text anchor points
this.points.__scaleboxMetric = new this.Point(so.at.x, so.at.y - 2)
this.points.__scaleboxImperial = new this.Point(so.at.x, so.at.y + 8)
// Rotation
if (so.rotate) {
let points = [
'__scaleboxMetricTopLeft',
'__scaleboxMetricTopRight',
'__scaleboxMetricBottomLeft',
'__scaleboxMetricBottomRight',
'__scaleboxImperialTopLeft',
'__scaleboxImperialTopRight',
'__scaleboxImperialBottomLeft',
'__scaleboxImperialBottomRight',
'__scaleboxMetric',
'__scaleboxImperial'
]
for (let pid of points) this.points[pid] = this.points[pid].rotate(so.rotate, so.at)
for (let pid of points.slice(8)) {
this.points[pid].attributes.set(
'data-text-transform',
`rotate(${so.rotate * -1}, ${this.points[pid].x}, ${this.points[pid].y})`
)
}
}
// Paths
this.paths.__scaleboxImperial = new this.Path()
.attr('class', 'scalebox imperial')
.move(this.points.__scaleboxImperialTopLeft)
.line(this.points.__scaleboxImperialBottomLeft)
.line(this.points.__scaleboxImperialBottomRight)
.line(this.points.__scaleboxImperialTopRight)
.close()
this.paths.__scaleboxMetric = new this.Path()
.attr('class', 'scalebox metric')
.move(this.points.__scaleboxMetricTopLeft)
.line(this.points.__scaleboxMetricBottomLeft)
.line(this.points.__scaleboxMetricBottomRight)
.line(this.points.__scaleboxMetricTopRight)
.close()
// Text
this.points.__scaleboxMetric = this.points.__scaleboxMetric
.attr('data-text', '2.5cm x 2.5cm')
.attr('data-text-class', 'text-xs center')
this.points.__scaleboxImperial = this.points.__scaleboxImperial
.attr('data-text', '1" x 1"')
.attr('data-text-class', 'text-xs center ')
}