Сохранение/Загрузка сцены
Сделал черновик функции сохранения сцены на диск и открытие сцены из файла.
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: Есть ошибки в консоли и много вопросов нужно проработать, такие как очистка сцены перед загрузкой, загрузка камер и установка позиции камеры, источников света, снятие выделения перед сохранением…

Черновик — это инструмент, который должен сопровождать любой проект на протяжении всей его жизни. Более того, ни в коем случае не следует уничтожать черновики, даже если проект полностью завершен. В целом идея отличная. Думаю, в этом и других проектах черновики станут постоянными спутниками чистовой реализации идей.