Сохранение/Загрузка сцены
Сделал черновик функции сохранения сцены на диск и открытие сцены из файла.
function saveSceneOnDisk () { let link = document.createElement('a'); link.download = 'Scene.txt'; let blob = new Blob([JSON.stringify(ta_scene.scene.toJSON(), null, 2)], {type: 'text/plain'}); link.href = URL.createObjectURL(blob); link.click(); URL.revokeObjectURL(link.href); }
loadFromDiskLabel.addEventListener( 'change', function loadSceneFromDisk( e ){ let file = e.srcElement.files[0]; let reader = new FileReader(); reader.readAsText(file); reader.onload = function() { console.log( ta_scene.scene.children ); let loader = new THREE.ObjectLoader(); let loadedScene = loader.parse( JSON.parse( reader.result ) ); let children = loadedScene.children; let elemToImport = []; children.forEach( element => { if ( element.userData.createdByUser ) { elemToImport.push( element ); ta_scene.selectableObjects.push( element ); Object.assign( ta_scene.scene.children, elemToImport ); } }); reader.onerror = function() { alert(reader.error); }; };
Сейчас загружаются только объекты, созданные пользователем. Для этого добавил в объект
UserData:this.currentEntity.userData = { createdByUser: true, selectable: true };
TODO: Есть ошибки в консоли и много вопросов нужно проработать, такие как очистка сцены перед загрузкой, загрузка камер и установка позиции камеры, источников света, снятие выделения перед сохранением…
Черновик — это инструмент, который должен сопровождать любой проект на протяжении всей его жизни. Более того, ни в коем случае не следует уничтожать черновики, даже если проект полностью завершен. В целом идея отличная. Думаю, в этом и других проектах черновики станут постоянными спутниками чистовой реализации идей.