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 @@
+
+
+ Copy
+ Paste
+
@@ -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;