This commit is contained in:
2026-04-13 09:54:19 +03:00
parent c69070fdc8
commit 613170178b
4 changed files with 27 additions and 6 deletions
+7
View File
@@ -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
View File
@@ -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;