add sketch item/group flip h/v and centering

This commit is contained in:
Stewart Allen 2024-07-27 18:41:32 -04:00
commit e0d449af50
4 changed files with 59 additions and 1 deletions

View file

@ -120,7 +120,7 @@ class Bounds {
return this.maxy - this.miny;
}
center(z) {
center(z = 0) {
return base.newPoint(this.centerx(), this.centery(), z);
}

View file

@ -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) {

View file

@ -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();
});
}
},

View file

@ -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" }, [