add sample extrusion capability

This commit is contained in:
Stewart Allen 2024-07-25 00:05:24 -04:00
commit 63620bfcbe
4 changed files with 31 additions and 2 deletions

View file

@ -234,6 +234,9 @@ function space_init(data) {
case 'KeyR': case 'KeyR':
return shiftKey ? api.tool.rebuild() : api.tool.repair(); return shiftKey ? api.tool.rebuild() : api.tool.repair();
case 'KeyE': case 'KeyE':
if (api.mode.is([ api.modes.sketch ])) {
return api.sketch.extrude();
}
return api.tool.clean(); return api.tool.clean();
case 'KeyV': case 'KeyV':
return shiftKey ? selection.show() : selection.focus(); return shiftKey ? selection.show() : selection.focus();

View file

@ -428,6 +428,12 @@ let sketch = {
list() { list() {
return sketches; return sketches;
},
extrude() {
selection.sketches(true).forEach(sketch => {
sketch.extrude();
});
} }
}; };
@ -1205,7 +1211,7 @@ const api = exports({
}); });
function log() { function log() {
api.log.emit(...arguments); return api.log.emit(...arguments);
} }
const { broker } = gapp; const { broker } = gapp;

View file

@ -368,7 +368,12 @@ mesh.model = class MeshModel extends mesh.object {
this._wire = undefined; this._wire = undefined;
this.opacity({restore: true}); this.opacity({restore: true});
} }
if (bool) { if (bool === 'edges') {
let edges = new THREE.EdgesGeometry(this.mesh.geometry, 5);
this._wire = new THREE.LineSegments(edges, materials.wireframe);
this.mesh.add(this._wire);
this.opacity({temp: opt.opacity || 0.15});
} else if (bool) {
this._wire = new Mesh(this.mesh.geometry.shallowClone(), materials.wireframe); this._wire = new Mesh(this.mesh.geometry.shallowClone(), materials.wireframe);
this.mesh.add(this._wire); this.mesh.add(this._wire);
this.opacity({temp: opt.opacity || 0.15}); this.opacity({temp: opt.opacity || 0.15});

View file

@ -240,6 +240,21 @@ mesh.sketch = class MeshSketch extends mesh.object {
}); });
this.update(); this.update();
} }
extrude(opt = {}) {
let { z } = opt;
let models = [];
for (let item of this.group.children.filter(c => c.poly)) {
let vert = item.poly.extrude(z || 10);
let nmdl = new mesh.model({ file: "poly", mesh: vert.toFloat32() });
models.push(nmdl);
}
if (models.length) {
log('extrude', this.file || this.id, 'into', models.length, 'solid(s)');
let ngrp = api.group.new(models);
ngrp.floor();
}
}
} }
}); });