62 lines
1.9 KiB
JavaScript
62 lines
1.9 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
const THREE = require("three");
|
|
class XYZLoader extends THREE.Loader {
|
|
load(url, onLoad, onProgress, onError) {
|
|
const scope = this;
|
|
const loader = new THREE.FileLoader(this.manager);
|
|
loader.setPath(this.path);
|
|
loader.setRequestHeader(this.requestHeader);
|
|
loader.setWithCredentials(this.withCredentials);
|
|
loader.load(
|
|
url,
|
|
function(text) {
|
|
try {
|
|
onLoad(scope.parse(text));
|
|
} catch (e) {
|
|
if (onError) {
|
|
onError(e);
|
|
} else {
|
|
console.error(e);
|
|
}
|
|
scope.manager.itemError(url);
|
|
}
|
|
},
|
|
onProgress,
|
|
onError
|
|
);
|
|
}
|
|
parse(text) {
|
|
const lines = text.split("\n");
|
|
const vertices = [];
|
|
const colors = [];
|
|
for (let line of lines) {
|
|
line = line.trim();
|
|
if (line.charAt(0) === "#")
|
|
continue;
|
|
const lineValues = line.split(/\s+/);
|
|
if (lineValues.length === 3) {
|
|
vertices.push(parseFloat(lineValues[0]));
|
|
vertices.push(parseFloat(lineValues[1]));
|
|
vertices.push(parseFloat(lineValues[2]));
|
|
}
|
|
if (lineValues.length === 6) {
|
|
vertices.push(parseFloat(lineValues[0]));
|
|
vertices.push(parseFloat(lineValues[1]));
|
|
vertices.push(parseFloat(lineValues[2]));
|
|
colors.push(parseFloat(lineValues[3]) / 255);
|
|
colors.push(parseFloat(lineValues[4]) / 255);
|
|
colors.push(parseFloat(lineValues[5]) / 255);
|
|
}
|
|
}
|
|
const geometry = new THREE.BufferGeometry();
|
|
geometry.setAttribute("position", new THREE.Float32BufferAttribute(vertices, 3));
|
|
if (colors.length > 0) {
|
|
geometry.setAttribute("color", new THREE.Float32BufferAttribute(colors, 3));
|
|
}
|
|
return geometry;
|
|
}
|
|
}
|
|
exports.XYZLoader = XYZLoader;
|
|
//# sourceMappingURL=XYZLoader.cjs.map
|