UNPKG

kitchen-simulator

Version:

It is a kitchen simulator (self-contained micro-frontend).

99 lines (96 loc) 3.74 kB
"use strict"; 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; } }); }