add sketch item/group flip h/v and centering
This commit is contained in:
parent
508507e684
commit
e0d449af50
4 changed files with 59 additions and 1 deletions
|
|
@ -120,7 +120,7 @@ class Bounds {
|
|||
return this.maxy - this.miny;
|
||||
}
|
||||
|
||||
center(z) {
|
||||
center(z = 0) {
|
||||
return base.newPoint(this.centerx(), this.centery(), z);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -567,6 +567,16 @@ class Polygon {
|
|||
return this.points[this.length - 1];
|
||||
}
|
||||
|
||||
flip(axis) {
|
||||
for (let p of this.points) {
|
||||
p[axis] = -p[axis];
|
||||
}
|
||||
for (let i of this.inner || []) {
|
||||
i.flip(axis);
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
swap(x, y) {
|
||||
this._bounds = undefined;
|
||||
if (x) {
|
||||
|
|
|
|||
|
|
@ -480,6 +480,12 @@ let sketch = {
|
|||
},
|
||||
|
||||
arrange: {
|
||||
ifcan(fn, count = 1) {
|
||||
let one = sketch.selection.one;
|
||||
let items = one?.items.filter(i => i.selected);
|
||||
(items.length >= count) && fn(one, items);
|
||||
},
|
||||
|
||||
group() {
|
||||
let one = sketch.selection.one;
|
||||
let items = one?.items.filter(i => i.selected);
|
||||
|
|
@ -490,6 +496,25 @@ let sketch = {
|
|||
}
|
||||
},
|
||||
|
||||
center() {
|
||||
sketch.arrange.ifcan((sketch, items) => {
|
||||
let bounds;
|
||||
let recs = [];
|
||||
items.filter(i => i.type === 'polygon').forEach(item => {
|
||||
let poly = newPolygon().fromObject(item);
|
||||
let bnds = poly.bounds;
|
||||
bounds = (bounds ? bounds.merge(bnds) : bnds);
|
||||
recs.push({ item, poly });
|
||||
});
|
||||
let center = bounds.center(0);
|
||||
for (let rec of recs) {
|
||||
rec.poly.move({ x: -center.x, y: -center.y, z:0 });
|
||||
Object.assign(rec.item, rec.poly.toObject());
|
||||
}
|
||||
sketch.render();
|
||||
});
|
||||
},
|
||||
|
||||
ungroup() {
|
||||
let one = sketch.selection.one;
|
||||
let items = one?.items.filter(i => i.selected)
|
||||
|
|
@ -497,6 +522,24 @@ let sketch = {
|
|||
items.forEach(i => delete i.group);
|
||||
log('ungrouped', items.length, 'sketch items');
|
||||
}
|
||||
},
|
||||
|
||||
fliph() {
|
||||
sketch.arrange.ifcan((sketch, items) => {
|
||||
items.filter(i => i.type === 'polygon').forEach(item => {
|
||||
Object.assign(item, newPolygon().fromObject(item).flip('x').toObject());
|
||||
});
|
||||
sketch.render();
|
||||
});
|
||||
},
|
||||
|
||||
flipv() {
|
||||
sketch.arrange.ifcan((sketch, items) => {
|
||||
items.filter(i => i.type === 'polygon').forEach(item => {
|
||||
Object.assign(item, newPolygon().fromObject(item).flip('y').toObject());
|
||||
});
|
||||
sketch.render();
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
|
|
|
|||
|
|
@ -460,6 +460,11 @@ function ui_build() {
|
|||
h.div({ class: "pop"}, [
|
||||
h.button({ _: 'group', onclick: sketch.arrange.group }),
|
||||
h.button({ _: 'ungroup', onclick: sketch.arrange.ungroup }),
|
||||
h.hr(),
|
||||
h.button({ _: 'center', onclick: sketch.arrange.center }),
|
||||
h.hr(),
|
||||
h.button({ _: 'flip-h', onclick: sketch.arrange.fliph }),
|
||||
h.button({ _: 'flip-v', onclick: sketch.arrange.flipv }),
|
||||
])
|
||||
]),
|
||||
h.div({ class: "sketch-on" }, [
|
||||
|
|
|
|||
Loading…
Reference in a new issue