This commit is contained in:
@@ -109,6 +109,13 @@ const Utils = {
|
|||||||
escapeRegExp(string) {
|
escapeRegExp(string) {
|
||||||
return string && string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched 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;
|
export default Utils;
|
||||||
@@ -34,12 +34,12 @@ class SceneSwitcher extends EventManager{
|
|||||||
this.object = engine.meshUtils.wrapInGroup(sphere);
|
this.object = engine.meshUtils.wrapInGroup(sphere);
|
||||||
this.object.addEventListener('io-activate', ()=>{
|
this.object.addEventListener('io-activate', ()=>{
|
||||||
engine.motionQueue.add({
|
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
|
a:{ scale: (k,s)=>s.setScalar(1+0.05*Math.sin(4*k*Math.PI)) }, r: true, t: 4
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
this.object.addEventListener('io-deactivate', ()=>{
|
this.object.addEventListener('io-deactivate', ()=>{
|
||||||
engine.motionQueue.clear(this.object, true)
|
engine.motionQueue.clear(sphere, true)
|
||||||
})
|
})
|
||||||
}else{
|
}else{
|
||||||
//sensor, TODO!!!, to be implemented
|
//sensor, TODO!!!, to be implemented
|
||||||
|
|||||||
@@ -65,6 +65,11 @@
|
|||||||
</template>
|
</template>
|
||||||
</v-list-item>
|
</v-list-item>
|
||||||
</v-list>
|
</v-list>
|
||||||
|
|
||||||
|
<template v-if="selectedItem.length == 1 && selectedItem[0].__type == 'Scene'">
|
||||||
|
<v-btn size="small" class="text-none" @click="copyScene" prepend-icon="mdi-content-copy">Copy</v-btn>
|
||||||
|
<v-btn size="small" class="text-none" @click="pasteScene" prepend-icon="mdi-content-paste">Paste</v-btn>
|
||||||
|
</template>
|
||||||
</v-navigation-drawer>
|
</v-navigation-drawer>
|
||||||
</div>
|
</div>
|
||||||
<v-dialog v-model="previewDialog" width="auto" max-width="1200">
|
<v-dialog v-model="previewDialog" width="auto" max-width="1200">
|
||||||
@@ -374,6 +379,18 @@ export default {
|
|||||||
preview(v){
|
preview(v){
|
||||||
this.previewObject = v;
|
this.previewObject = v;
|
||||||
this.previewDialog = true;
|
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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-4
@@ -6,10 +6,7 @@ const $ax = axios.create({
|
|||||||
transformRequest: [
|
transformRequest: [
|
||||||
(data, headers)=>{
|
(data, headers)=>{
|
||||||
if (data && !(data instanceof FormData)){
|
if (data && !(data instanceof FormData)){
|
||||||
data = Utils.deepMerge({}, data, (k, v)=>{
|
data = Utils.toSafeJSON(data);
|
||||||
return k.startsWith('__') ? undefined : v;
|
|
||||||
})
|
|
||||||
data = JSON.stringify(data);
|
|
||||||
headers['Content-Type'] = 'application/json;charset=utf-8';
|
headers['Content-Type'] = 'application/json;charset=utf-8';
|
||||||
}
|
}
|
||||||
return data;
|
return data;
|
||||||
|
|||||||
Reference in New Issue
Block a user