const loadedGeometry = await new Promise((resolve, reject) => {
loader.load(fileURL, resolve, undefined, reject);
});
console.log('Загруженная геометрия:', loadedGeometry);
getVolume(loadedGeometry);
const getVolume = (geometry) => {
if (!geometry.isBufferGeometry) {
console.log("'geometry' must be an indexed or non-indexed buffer geometry");
return 0;
}
const isIndexed = geometry.index !== null;
const position = geometry.attributes.position;
let sum = 0;
const p1 = new THREE.Vector3();
const p2 = new THREE.Vector3();
const p3 = new THREE.Vector3();
if (!isIndexed) {
const faces = position.count / 3;
for (let i = 0; i < faces; i++) {
p1.fromBufferAttribute(position, i * 3 + 0);
p2.fromBufferAttribute(position, i * 3 + 1);
p3.fromBufferAttribute(position, i * 3 + 2);
sum += signedVolumeOfTriangle(p1, p2, p3);
}
} else {
const index = geometry.index;
const faces = index.count / 3;
for (let i = 0; i < faces; i++) {
p1.fromBufferAttribute(position, index.array[i * 3 + 0]);
p2.fromBufferAttribute(position, index.array[i * 3 + 1]);
p3.fromBufferAttribute(position, index.array[i * 3 + 2]);
sum += signedVolumeOfTriangle(p1, p2, p3);
}
}
volume.value = (sum / 1000).toFixed(3);
console.log('Volume regenerate: in new function',sum)
};
Поскольку SQL-запросы не поддерживают параметризацию идентификаторов (например, имени таблицы или столбцов)
Имеет ограничение, в связи с:
- создаёт угрозу SQL-инъекций
- параметры заменяются только для значений, а идентификаторы (таблицы, столбцы, базы данных) должны быть известны на этапе компиляции SQL-запроса