kitchen-simulator
Version:
It is a kitchen simulator (self-contained micro-frontend).
99 lines (96 loc) • 3.74 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.loadGLTF = loadGLTF;
exports.loadObjWithMaterial = loadObjWithMaterial;
exports.scaleObject = scaleObject;
var _three = require("three");
var _MTLLoader = require("three/examples/jsm/loaders/MTLLoader.js");
var _OBJLoader = require("three/examples/jsm/loaders/OBJLoader.js");
var _GLTFLoader = require("three/examples/jsm/loaders/GLTFLoader.js");
var _DRACOLoader = require("three/examples/jsm/loaders/DRACOLoader.js");
var _constants = require("../../constants");
function loadObjWithMaterial(mtlFile, objFile, imgPath) {
var manager = new _three.LoadingManager();
var mtlLoader = new _MTLLoader.MTLLoader(manager);
// mtlLoader.setPath(imgPath);
var url = mtlFile;
return new Promise(function (resolve, reject) {
mtlLoader.load(url, function (materials) {
materials.preload();
var objLoader = new _OBJLoader.OBJLoader();
objLoader.setMaterials(materials);
objLoader.load(objFile, function (object) {
return resolve(object);
});
});
});
}
function loadGLTF(url) {
if (url == undefined) {
return Promise.reject('No url is passed');
}
var baseURL = _three.LoaderUtils.extractUrlBase(url);
var manager = new _three.LoadingManager();
// Intercept and override relative URLs.
manager.setURLModifier(function (url, path) {
// URIs in a glTF file may be escaped, or not. Assume that assetMap is
// from an un-escaped source, and decode all URIs before lookups.
// See: https://github.com/donmccurdy/three-gltf-viewer/issues/146
var normalizedURL = decodeURI(url).replace(baseURL, '').replace(/^(\.?\/)/, '');
// if (assetMap.has(normalizedURL)) {
// const blob = assetMap.get(normalizedURL);
// const blobURL = URL.createObjectURL(blob);
// blobURLs.push(blobURL);
// return blobURL;
// }
return (path || '') + url;
});
var loader = new _GLTFLoader.GLTFLoader(manager);
loader.setCrossOrigin('anonymous');
var dracoLoader = new _DRACOLoader.DRACOLoader();
dracoLoader.setDecoderPath('/assets/draco/');
loader.setDRACOLoader(dracoLoader);
return new Promise(function (resolve, reject) {
loader.load(url, function (gltf) {
resolve(gltf.scene);
}, function (xhr) {
// console.log("xhr", xhr);
// called while loading is progressing
// console.log( `${( xhr.loaded / xhr.total * 100 )}% loaded` );
}, function (error) {
// console.log("error", error);
// called when loading has errors
// console.error( '2= An error happened', error );
reject(error);
});
});
}
function scaleObject(object, defaultSizeArray, scaleSizeArray) {
var boundingBox = new _three.Box3().setFromObject(object);
var initialSizeArray = boundingBox.getSize(new _three.Vector3()).toArray();
for (var i = 0; i < 3; i++) {
scaleSizeArray[i] -= defaultSizeArray[i];
defaultSizeArray[i] /= initialSizeArray[i];
}
object.children.forEach(function (child) {
if (child.type == _constants.OBJTYPE_MESH && child.geometry instanceof _three.BufferGeometry) {
var position = child.geometry.attributes.position;
var new_pos = position.array.map(function (v, i, a) {
var j = i % 3;
var absv = Math.abs(v);
v = v * defaultSizeArray[j];
if (absv > initialSizeArray[j] / 6) {
v += (v > 0 ? 1 : -1) * scaleSizeArray[j] / 2;
}
return v;
});
var new_geom = child.geometry.clone().setAttribute('position', new _three.BufferAttribute(new_pos, 3));
new_geom.computeBoundingBox();
new_geom.computeBoundingSphere();
child.geometry.dispose();
child.geometry = new_geom;
}
});
}