complete basic auto support generation

This commit is contained in:
Stewart Allen 2020-12-14 14:51:36 -05:00
commit eadd9cf355
5 changed files with 15 additions and 14 deletions

View file

@ -42,7 +42,7 @@
KIRI.client.sync();
let settings = API.conf.get();
let widgets = API.widgets.map();
send('fdm_support_generate', {}, (gen) => {
send('fdm_support_generate', { settings }, (gen) => {
for (let g of gen) g.widget = widgets[g.id];
ondone(gen);
});

View file

@ -1077,27 +1077,24 @@
FDM.supports = function(settings, widget) {
let buf = new THREE.BufferGeometry();
buf.setAttribute('position', new THREE.BufferAttribute(widget.vertices, 3));
let mat = new THREE.MeshBasicMaterial();
let geo = new THREE.Geometry().fromBufferGeometry(buf);
// console.log('geo',
// geo,
// {
// "<": geo.faces.filter(f => f.normal.z < 0),
// ">": geo.faces.filter(f => f.normal.z > 0),
// "=": geo.faces.filter(f => f.normal.z == 0)
// }
// );
let mesh = new THREE.Mesh(geo, new THREE.MeshBasicMaterial());
let angle = (Math.PI / 180) * settings.process.sliceSupportAngle;
let thresh = -Math.sin(angle);
let mesh = new THREE.Mesh(geo, mat);
let dir = new THREE.Vector3(0,0,-1)
let add = [];
geo.faces.filter(f => f.normal.z < 0).forEach(face => {
let platform = new THREE.Mesh(
new THREE.PlaneGeometry(1000,1000,1), mat
);
geo.faces.filter(f => f.normal.z < thresh).forEach(face => {
let a = geo.vertices[face.a];
let b = geo.vertices[face.b];
let c = geo.vertices[face.c];
let point = a.add(b).add(c).divideScalar(3);
let ray = new THREE.Raycaster(point, dir);
let int = ray.intersectObjects([ mesh ], false);
if (int && int.length) {
console.log(int);
let int = ray.intersectObjects([ mesh, platform ], false);
if (int && int.length && int[0].distance > 0.01) {
let mid = new THREE.Vector3().add(point).add(int[0].point).divideScalar(2);
add.push({from: point, to: int[0].point, mid});
}