47 lines
1.1 KiB
TypeScript
47 lines
1.1 KiB
TypeScript
|
|
import { ref } from 'vue'
|
||
|
|
|
||
|
|
export class LayerManager {
|
||
|
|
stateManager: any
|
||
|
|
canvasManager: any
|
||
|
|
layers: any
|
||
|
|
activeID: any
|
||
|
|
constructor(options) {
|
||
|
|
this.stateManager = options.stateManager;
|
||
|
|
this.canvasManager = options.canvasManager;
|
||
|
|
this.layers = ref([])
|
||
|
|
this.activeID = ref("")
|
||
|
|
}
|
||
|
|
setActiveID(id: string) { this.activeID.value = id }
|
||
|
|
getLayerByID(id) {
|
||
|
|
return this.layers.value.find((item: any) => item.info.id === id)
|
||
|
|
}
|
||
|
|
setLayerNameByID(id, name: string) {
|
||
|
|
const layer = this.getLayerByID(id)
|
||
|
|
if (layer) {
|
||
|
|
layer.info.name = name
|
||
|
|
this.canvasManager.renderAll()
|
||
|
|
}
|
||
|
|
}
|
||
|
|
setLayerVisibleByID(id, visible: boolean) {
|
||
|
|
const layer = this.getLayerByID(id)
|
||
|
|
if (layer) {
|
||
|
|
layer.set({
|
||
|
|
visible: visible
|
||
|
|
})
|
||
|
|
this.canvasManager.renderAll()
|
||
|
|
}
|
||
|
|
}
|
||
|
|
deleteLayerByID(id) {
|
||
|
|
this.canvasManager.deleteObjectById(id)
|
||
|
|
}
|
||
|
|
// 拖拽排序
|
||
|
|
dragSort(id, newIndex) {
|
||
|
|
const index = Math.abs(this.layers.value.length - newIndex - 1)
|
||
|
|
this.canvasManager.dragSort(id, index)
|
||
|
|
}
|
||
|
|
// 更新图层列表
|
||
|
|
updateLayers() {
|
||
|
|
this.layers.value = this.canvasManager.getObjects().reverse()
|
||
|
|
}
|
||
|
|
}
|