diff --git a/backend/app/Utils.js b/backend/app/Utils.js index d28ca2e..6d82432 100644 --- a/backend/app/Utils.js +++ b/backend/app/Utils.js @@ -109,6 +109,13 @@ const Utils = { escapeRegExp(string) { return string && string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string }, + + toSafeJSON(data){ + data = Utils.deepMerge({}, data, (k, v)=>{ + return k.startsWith('__') ? undefined : v; + }) + return JSON.stringify(data); + } } export default Utils; \ No newline at end of file diff --git a/src/components/InteractiveObjects/SceneSwitcher/SceneSwitcher.js b/src/components/InteractiveObjects/SceneSwitcher/SceneSwitcher.js index e662a03..f3fcc13 100644 --- a/src/components/InteractiveObjects/SceneSwitcher/SceneSwitcher.js +++ b/src/components/InteractiveObjects/SceneSwitcher/SceneSwitcher.js @@ -34,12 +34,12 @@ class SceneSwitcher extends EventManager{ this.object = engine.meshUtils.wrapInGroup(sphere); this.object.addEventListener('io-activate', ()=>{ engine.motionQueue.add({ - o: this.object, + o: sphere, a:{ scale: (k,s)=>s.setScalar(1+0.05*Math.sin(4*k*Math.PI)) }, r: true, t: 4 }) }) this.object.addEventListener('io-deactivate', ()=>{ - engine.motionQueue.clear(this.object, true) + engine.motionQueue.clear(sphere, true) }) }else{ //sensor, TODO!!!, to be implemented diff --git a/src/components/SceneDesigner/SceneDesigner.vue b/src/components/SceneDesigner/SceneDesigner.vue index 00d5744..a050b3d 100644 --- a/src/components/SceneDesigner/SceneDesigner.vue +++ b/src/components/SceneDesigner/SceneDesigner.vue @@ -65,6 +65,11 @@ + + @@ -374,6 +379,18 @@ export default { preview(v){ this.previewObject = v; this.previewDialog = true; + }, + copyScene(){ + navigator.clipboard.writeText(Utils.toSafeJSON(this.selectedItem[0])); + }, + async pasteScene(){ + let src = JSON.parse(await navigator.clipboard.readText()); + let dx = this.selectedItem[0].vd.x1 - src.vd.x1, dy = this.selectedItem[0].vd.y1 - src.vd.y1; + src.data.items.forEach(i=>{ + i.vd.x1 += dx; + i.vd.y1 += dy; + }) + this.selectedItem[0].data = src.data; } } } diff --git a/src/lib/Api.js b/src/lib/Api.js index c541402..67001a1 100644 --- a/src/lib/Api.js +++ b/src/lib/Api.js @@ -6,10 +6,7 @@ const $ax = axios.create({ transformRequest: [ (data, headers)=>{ if (data && !(data instanceof FormData)){ - data = Utils.deepMerge({}, data, (k, v)=>{ - return k.startsWith('__') ? undefined : v; - }) - data = JSON.stringify(data); + data = Utils.toSafeJSON(data); headers['Content-Type'] = 'application/json;charset=utf-8'; } return data;