feat(shortcut): h/a/d
This commit is contained in:
71
components/label/utils/objectVisibility.ts
Normal file
71
components/label/utils/objectVisibility.ts
Normal file
@@ -0,0 +1,71 @@
|
||||
import paper from "paper"
|
||||
import { useLabelStore, useObjectStore } from "../store"
|
||||
import { usePaperStore } from "../usePaperStore"
|
||||
import { useTopToolsStore } from "../useTopToolsStore"
|
||||
|
||||
const getTagVisibility = (tagCategory?: string) => {
|
||||
const { showTags, showTagsConfigs } = useTopToolsStore.getState()
|
||||
if (!showTags) return false
|
||||
if (tagCategory === "mask") return showTagsConfigs.includes("外框")
|
||||
if (tagCategory === "point_text") return showTagsConfigs.includes("点ID")
|
||||
return true
|
||||
}
|
||||
|
||||
const setSelectedItemFalse = (id: number) => {
|
||||
if (!id) return
|
||||
const sameIdItems = usePaperStore.getState().getItemsById(id)
|
||||
sameIdItems.forEach((item) => {
|
||||
if (item.data.type === "mask" || item.data.type === "text") {
|
||||
item.remove()
|
||||
}
|
||||
if (item.data.selected) item.data.selected = false
|
||||
})
|
||||
}
|
||||
|
||||
const syncObjectItemsVisibility = (objectId: number, hide: boolean) => {
|
||||
const sameIdItems = usePaperStore.getState().getItemsById(objectId)
|
||||
if (!sameIdItems?.length) return
|
||||
sameIdItems.forEach((item) => {
|
||||
if (hide) {
|
||||
item.visible = false
|
||||
return
|
||||
}
|
||||
if (item.data?.type === "tag") {
|
||||
item.visible = getTagVisibility(item.data?.tag_category)
|
||||
return
|
||||
}
|
||||
item.visible = true
|
||||
})
|
||||
}
|
||||
|
||||
export const toggleObjectHideByShortcut = (
|
||||
imageId: string,
|
||||
operationId: string,
|
||||
objectId: number,
|
||||
hide: boolean
|
||||
) => {
|
||||
const { updatePathStatus, updateOperationStatus } = useObjectStore.getState()
|
||||
const storeLabel = useLabelStore.getState().label
|
||||
|
||||
if (hide) {
|
||||
updatePathStatus(imageId + objectId, "HIDE", hide)
|
||||
syncObjectItemsVisibility(objectId, hide)
|
||||
setSelectedItemFalse(objectId)
|
||||
|
||||
const operationChildren = storeLabel.get(imageId)?.get(operationId) || []
|
||||
const hasVisibleChild = operationChildren.some((child) => {
|
||||
const item = usePaperStore
|
||||
.getState()
|
||||
.getItemById(child[0]) as paper.Item | null
|
||||
return !!item?.visible
|
||||
})
|
||||
if (!hasVisibleChild) {
|
||||
updateOperationStatus(imageId + operationId, "HIDE", hide)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
updateOperationStatus(imageId + operationId, "HIDE", hide)
|
||||
updatePathStatus(imageId + objectId, "HIDE", hide)
|
||||
syncObjectItemsVisibility(objectId, hide)
|
||||
}
|
||||
Reference in New Issue
Block a user