2019-12-09 18:41:42 +01:00
|
|
|
class Model extends THREE.Mesh {
|
|
|
|
constructor() {
|
2019-12-11 14:41:04 +01:00
|
|
|
let geometry = new THREE.Geometry();
|
2019-12-09 18:41:42 +01:00
|
|
|
let material = new THREE.MeshLambertMaterial({color: 0xffffff});
|
|
|
|
super(geometry, material);
|
|
|
|
this.frustumCulled = false;
|
|
|
|
this.vertices = [];
|
|
|
|
}
|
|
|
|
|
|
|
|
manageElement(element) {
|
|
|
|
switch (element.type) {
|
|
|
|
case Element.AddVertex:
|
2019-12-11 14:41:04 +01:00
|
|
|
this.geometry.vertices.push(element.value);
|
|
|
|
this.geometry.verticesNeedUpdate = true;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case Element.EditVertex:
|
|
|
|
this.geometry.vertices[element.id].copy(element.value);
|
|
|
|
this.geometry.verticesNeedUpdate = true;
|
|
|
|
this.geometry.elementsNeedUpdate = true;
|
2019-12-09 18:41:42 +01:00
|
|
|
break;
|
|
|
|
|
|
|
|
case Element.AddFace:
|
|
|
|
|
2019-12-11 14:41:04 +01:00
|
|
|
let vertices = this.geometry.vertices;
|
|
|
|
let f = element.value;
|
2019-12-09 18:41:42 +01:00
|
|
|
let normal =
|
2019-12-11 14:41:04 +01:00
|
|
|
vertices[f.b].clone().sub(vertices[f.a])
|
|
|
|
.cross(vertices[f.c].clone().sub(vertices[f.a]));
|
2019-12-09 18:41:42 +01:00
|
|
|
normal.normalize();
|
|
|
|
|
2019-12-11 14:41:04 +01:00
|
|
|
f.normal = normal;
|
|
|
|
this.geometry.faces.push(f);
|
|
|
|
this.geometry.elementsNeedUpdate = true;
|
2019-12-09 18:41:42 +01:00
|
|
|
break;
|
|
|
|
|
|
|
|
default:
|
|
|
|
throw new Error("unknown element type: " + element.type);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|