2016-03-29 00:26:58 +02:00
|
|
|
import THREE from 'three.js';
|
|
|
|
|
|
|
|
export default function createLines(geometry, settings) {
|
|
|
|
console.log('constructing unique lines from geometry');
|
|
|
|
|
|
|
|
var lines = [];
|
|
|
|
var lineLookup = {};
|
|
|
|
|
|
|
|
var addLine = (a, b) => {
|
2016-03-29 08:01:07 +02:00
|
|
|
var index = lineLookup[`${b}_${a}`];
|
2016-03-29 00:26:58 +02:00
|
|
|
|
|
|
|
if (index === undefined) {
|
|
|
|
index = lines.length;
|
2016-03-29 08:01:07 +02:00
|
|
|
lineLookup[`${a}_${b}`] = index;
|
2016-03-29 00:26:58 +02:00
|
|
|
|
|
|
|
lines.push({
|
|
|
|
line: new THREE.Line3(geometry.vertices[a], geometry.vertices[b]),
|
|
|
|
connects: [],
|
|
|
|
normals: []
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
return index;
|
|
|
|
}
|
|
|
|
|
|
|
|
for (var i = 0; i < geometry.faces.length; i ++) {
|
|
|
|
var face = geometry.faces[i];
|
|
|
|
if (face.normal.y !== 1 && face.normal.y !== -1) {
|
|
|
|
var normal = new THREE.Vector2(face.normal.z, face.normal.x).normalize();
|
|
|
|
|
|
|
|
// check for only adding unique lines
|
|
|
|
// returns index of said line
|
|
|
|
var a = addLine(face.a, face.b);
|
|
|
|
var b = addLine(face.b, face.c);
|
|
|
|
var c = addLine(face.c, face.a);
|
|
|
|
|
|
|
|
// set connecting lines (based on face)
|
|
|
|
lines[a].connects.push(b, c);
|
|
|
|
lines[b].connects.push(c, a);
|
|
|
|
lines[c].connects.push(a, b);
|
|
|
|
|
|
|
|
lines[a].normals.push(normal);
|
|
|
|
lines[b].normals.push(normal);
|
|
|
|
lines[c].normals.push(normal);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return lines;
|
|
|
|
}
|