Files
pronature-platform/src/lib/MeshUtils.js
T

70 lines
2.3 KiB
JavaScript

import { TextureLoader, Box3, Vector3, Group } from "three";
function assignParams(mesh, params){
['scale', 'rotation', 'position'].forEach(p=>params[p] && mesh[p].fromArray(params[p]));
['visible', 'name', 'fontSize', 'color'].forEach(p=>{
if (params[p]!==undefined) mesh[p] = params[p];
});
}
function assignMaterial(mesh, params){
if (params.name && params.material){
//let mp = params.material.metalness ? new MeshStandardMaterial(params.material) : new MeshBasicMaterial(params.material)
Object.assign(mesh.material, params.material)
if (params.dm){
var dm = new TextureLoader().setPath(params.path).load(params.dm);
mesh.material.map = dm;
}
if (params.nm){
mesh.material.normalMap = new TextureLoader().setPath(params.path).load(params.nm);
}
if (params.em) {
mesh.material.emissiveMap = new TextureLoader().setPath(params.path).load(params.em);
}
//mesh.material = mp;
mesh.material.needsUpdate = true;
}
}
function getBoundingBox(object){
return new Box3().setFromObject(object);
}
function getBoundingBoxSize(bb){
return new Vector3(bb.max.x - bb.min.x, bb.max.y - bb.min.y, bb.max.z - bb.min.z);
}
function getBoundingBoxMaxLength(bb){
let size = getBoundingBoxSize(bb)
return Math.max(size.x, size.y, size.z)
}
function getBoundingBoxCenterPoint(bb, relativeTo){
relativeTo = relativeTo || new Vector3(0,0,0)
let size = getBoundingBoxSize(bb)
return new Vector3(
bb.min.x + (size.x)/2 - relativeTo.x,
bb.min.y + (size.y)/2 - relativeTo.y,
bb.min.z + (size.z)/2 - relativeTo.z
)
}
function autoScale(object, mk = 1) {
let bb = getBoundingBox(object);
let k = getBoundingBoxMaxLength(bb);
object.scale.multiplyScalar(mk / k);
}
function centerOrigin(object){
let result = new Group();
result.userData.bbox = getBoundingBox(object);
let position = getBoundingBoxCenterPoint(result.userData.bbox, object.position).negate();
object.position.copy(position)
result.add(object);
return result;
}
export {
assignParams, assignMaterial, autoScale, centerOrigin,
getBoundingBox, getBoundingBoxSize, getBoundingBoxMaxLength, getBoundingBoxCenterPoint
}