tagging-positions.ts 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. import { ref } from 'vue'
  2. import { autoSetModeCallback, createTemploraryID } from './sys'
  3. import { getFuseModel, getFuseModelShowVariable } from './fuse-model'
  4. import { custom } from '@/env'
  5. import {
  6. fetchTaggingPositions,
  7. postAddTaggingPosition,
  8. postDeleteTaggingPosition,
  9. postUpdateTaggingPosition,
  10. TaggingPositionType,
  11. } from '@/api'
  12. import {
  13. deleteStoreItem,
  14. addStoreItem,
  15. updateStoreItem,
  16. saveStoreItems,
  17. recoverStoreItems
  18. } from '@/utils'
  19. import type { TaggingPosition, TaggingPositions } from '@/api'
  20. import type { Tagging } from './tagging'
  21. export type { TaggingPosition, TaggingPositions }
  22. export const taggingPositions = ref<TaggingPositions>([])
  23. export const createTaggingPosition = (position: Partial<TaggingPosition> = {}): TaggingPosition => ({
  24. id: createTemploraryID(),
  25. taggingId: '',
  26. globalVisibility: false,
  27. visibilityRange: 30,
  28. mat: {
  29. scale: 1,
  30. rotation: 0
  31. },
  32. lineHeight: 1,
  33. fontSize: 12,
  34. normal: {x: 0, y: 0, z: 1},
  35. type: TaggingPositionType['2d'],
  36. modelId: '',
  37. localPos: { x: 0, y: 0, z: 0 },
  38. ...position
  39. })
  40. export const getTaggingPositions = (tagging: Tagging) =>
  41. taggingPositions.value.filter(position => position.taggingId === tagging.id) || []
  42. export const getTaggingPositionIsShow = (position: TaggingPosition) => {
  43. const model = getFuseModel(position.modelId)
  44. return custom.showTaggings && model && model.loaded && getFuseModelShowVariable(model).value
  45. }
  46. let bcPositions: TaggingPositions = []
  47. export const getBackupTaggingPositions = () => bcPositions
  48. export const backupTaggingPositions = () => {
  49. bcPositions = JSON.parse(JSON.stringify(taggingPositions.value))
  50. }
  51. export const initTaggingPositionsByTagging = async (tagging: Tagging) => {
  52. const positions = await fetchTaggingPositions(tagging.id)
  53. taggingPositions.value = taggingPositions.value
  54. .filter(position => position.taggingId !== tagging.id)
  55. .concat(positions)
  56. backupTaggingPositions()
  57. }
  58. export const recoverTaggingPositions = recoverStoreItems(taggingPositions, getBackupTaggingPositions)
  59. export const addTaggingPosition = addStoreItem(taggingPositions, postAddTaggingPosition)
  60. export const updateTaggingPosition = updateStoreItem(taggingPositions, postUpdateTaggingPosition)
  61. export const deleteTaggingPosition = deleteStoreItem(taggingPositions, postDeleteTaggingPosition)
  62. export const saveTaggingPositions = saveStoreItems(
  63. taggingPositions,
  64. getBackupTaggingPositions,
  65. {
  66. add: addTaggingPosition,
  67. update: updateTaggingPosition,
  68. delete: deleteTaggingPosition,
  69. }
  70. )
  71. export const autoSaveTaggingPositions = autoSetModeCallback(taggingPositions, {
  72. backup: backupTaggingPositions,
  73. recovery: recoverTaggingPositions,
  74. save: saveTaggingPositions,
  75. })