1
0
Fork 0

feat(plugin-flip): Support both X and Y axis

This commit is contained in:
Joost De Cock 2022-01-18 09:01:58 +01:00
parent e509616ade
commit 12433ae11e
2 changed files with 20 additions and 11 deletions

View file

@ -2,17 +2,25 @@
title: flip
---
The `flip` macro flips (mirrors) an entire part vertically around the Y-axis.
It takes no arguments, and is provided by the [flip plugin](/reference/plugins/flip).
The `flip` macro flips (mirrors) an entire part vertically around either the X-axis or the Y-axis.
It is provided by the [flip plugin](/reference/plugins/flip).
```js
macro("flip")
macro("flip", {
axis: 'x'
})
```
| Property | Default | Type | Description |
|----------------:|---------|---------------------|-------------|
| `axis` | 'x' | The axis to flip around. Either `x` or `y` |
<Note>
Under the hood, this macro will:
- Go through all Points in your Part, and multiply their X-coordinate by -1
- Go through all the Paths in your Part, and for each drawing operation will multiply the X-coordinare by -1
- Go through all the Snippets in your Part and multiply the X-coordinate of the anchor point by -1
- Go through all Points in your Part, and multiply their (X or Y)-coordinate by -1
- Go through all the Paths in your Part, and for each drawing operation will multiply the (X or Y)-coordinare by -1
- Go through all the Snippets in your Part and multiply the (X or Y)-coordinate of the anchor point by -1
</Note>

View file

@ -7,7 +7,8 @@ export default {
preRender: svg => svg.attributes.setIfUnset('freesewing:plugin-flip', version)
},
macros: {
flip: function () {
flip: function(so) {
const axis = (so?.axis === 'y') ? 'y' : 'x'
let flipped = null
const ops = ['from', 'to', 'cp1', 'cp2']
for (const id in this.points) {
@ -18,7 +19,7 @@ export default {
if (flipped === false) flipped = 1
else flipped += 1
}
this.points[id].x = this.points[id].x * -1
this.points[id][axis] = this.points[id][axis] * -1
this.points[id].attributes.set('flipped', flipped)
}
for (let id of Object.keys(this.paths)) {
@ -30,7 +31,7 @@ export default {
let wasFlipped = this.paths[id].ops[op][type].attributes.get('flipped')
if (wasFlipped !== false) wasFlipped = parseInt(wasFlipped)
if (wasFlipped !== flipped) {
this.paths[id].ops[op][type].x = this.paths[id].ops[op][type].x * -1
this.paths[id].ops[op][type][axis] = this.paths[id].ops[op][type][axis] * -1
this.paths[id].ops[op][type].attributes.set('flipped', flipped)
}
}
@ -42,7 +43,7 @@ export default {
// and not double flip the points flipped above
let wasFlipped = this.snippets[id].anchor.attributes.get('flipped')
if (wasFlipped !== false) wasFlipped = parseInt(wasFlipped)
if (wasFlipped !== flipped) this.snippets[id].anchor.x = this.snippets[id].anchor.x * -1
if (wasFlipped !== flipped) this.snippets[id].anchor[axis] = this.snippets[id].anchor[axis] * -1
}
}
}