2016-03-29 00:26:58 +02:00
|
|
|
import THREE from 'three.js';
|
|
|
|
|
|
|
|
export default function calculateLayersIntersections(lines, settings) {
|
|
|
|
console.log('calculating layer intersections');
|
|
|
|
|
2016-03-29 08:49:35 +02:00
|
|
|
const { layerHeight, dimensionsZ: height } = settings.config;
|
2016-03-29 00:26:58 +02:00
|
|
|
|
|
|
|
var numLayers = Math.floor(height / layerHeight);
|
|
|
|
|
|
|
|
var layerIntersectionIndexes = [];
|
|
|
|
var layerIntersectionPoints = [];
|
|
|
|
for (var layer = 0; layer < numLayers; layer ++) {
|
|
|
|
layerIntersectionIndexes[layer] = [];
|
|
|
|
layerIntersectionPoints[layer] = [];
|
|
|
|
}
|
|
|
|
|
|
|
|
for (var lineIndex = 0; lineIndex < lines.length; lineIndex ++) {
|
|
|
|
var line = lines[lineIndex].line;
|
|
|
|
|
|
|
|
var min = Math.ceil(Math.min(line.start.y, line.end.y) / layerHeight);
|
|
|
|
var max = Math.floor(Math.max(line.start.y, line.end.y) / layerHeight);
|
|
|
|
|
|
|
|
for (var layerIndex = min; layerIndex <= max; layerIndex ++) {
|
|
|
|
if (layerIndex >= 0 && layerIndex < numLayers) {
|
|
|
|
|
|
|
|
layerIntersectionIndexes[layerIndex].push(lineIndex);
|
|
|
|
|
|
|
|
var y = layerIndex * layerHeight;
|
|
|
|
|
|
|
|
if (line.start.y === line.end.y) {
|
|
|
|
var x = line.start.x;
|
|
|
|
var z = line.start.z;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
var alpha = (y - line.start.y) / (line.end.y - line.start.y);
|
|
|
|
var x = line.end.x * alpha + line.start.x * (1 - alpha);
|
|
|
|
var z = line.end.z * alpha + line.start.z * (1 - alpha);
|
|
|
|
}
|
|
|
|
|
|
|
|
layerIntersectionPoints[layerIndex][lineIndex] = new THREE.Vector2(z, x);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return {
|
|
|
|
layerIntersectionIndexes,
|
|
|
|
layerIntersectionPoints
|
|
|
|
};
|
|
|
|
}
|