tagging-position.ts 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. import axios from './instance'
  2. import {
  3. TAGGING_POINT_LIST,
  4. DELETE_TAGGING_POINT,
  5. UPDATE_TAGGING_POINT,
  6. INSERT_TAGGING_POINT
  7. } from './constant'
  8. import type { FuseModel } from './fuse-model'
  9. import type { Tagging } from './tagging'
  10. import { Tagging3DProps } from '@/sdk'
  11. interface ServicePosition {
  12. "tagPointId": number,
  13. "tagId": number,
  14. "fusionNumId": number
  15. "modelId"?: number
  16. "tagPoint": string,
  17. normal: string
  18. show3dTitle: number
  19. type: string,
  20. mat: string
  21. fontSize: number,
  22. lineHeight: number,
  23. visibilityRange: number
  24. }
  25. export enum TaggingPositionType {
  26. '2d' = '2d',
  27. '3d' = '3d'
  28. }
  29. export interface TaggingPosition {
  30. id: string,
  31. taggingId: Tagging['id']
  32. modelId: FuseModel['id']
  33. normal: SceneLocalPos,
  34. localPos: SceneLocalPos
  35. fontSize: number,
  36. lineHeight: number,
  37. globalVisibility: boolean
  38. visibilityRange: number
  39. type: TaggingPositionType
  40. mat: Tagging3DProps['mat']
  41. }
  42. export type TaggingPositions = TaggingPosition[]
  43. const serviceToLocal = (position: ServicePosition, taggingId?: Tagging['id']): TaggingPosition => ({
  44. id: position.tagPointId.toString(),
  45. modelId: position.fusionNumId ? position.fusionNumId.toString() : position.modelId ? position.modelId.toString() : '123123',
  46. taggingId: taggingId || position.tagId.toString(),
  47. localPos: JSON.parse(position.tagPoint),
  48. type: (position.type || TaggingPositionType['2d']) as TaggingPositionType,
  49. globalVisibility: Boolean(position.show3dTitle),
  50. normal: position.normal ? JSON.parse(position.normal) : { x: 0, y: 0, z: 1 },
  51. mat: position.mat ? JSON.parse(position.mat) : {
  52. scale: 1,
  53. rotation: 0
  54. },
  55. visibilityRange: position.visibilityRange || 30,
  56. fontSize: position.fontSize || 12,
  57. lineHeight: position.lineHeight || 1,
  58. })
  59. const localToService = (position: TaggingPosition, update = false): PartialProps<ServicePosition, 'tagPointId'> => ({
  60. "tagPointId": update ? Number(position.id) : undefined,
  61. "tagId": Number(position.taggingId),
  62. "fusionNumId": Number(position.modelId),
  63. "tagPoint": JSON.stringify(position.localPos),
  64. show3dTitle: Number(position.globalVisibility),
  65. type: position.type,
  66. mat: position.mat && JSON.stringify(position.mat),
  67. normal: JSON.stringify(position.normal),
  68. fontSize: position.fontSize,
  69. lineHeight: position.lineHeight,
  70. visibilityRange: position.visibilityRange
  71. })
  72. export const fetchTaggingPositions = async (taggingId: Tagging['id']) => {
  73. const positions = await axios.get<ServicePosition[]>(`${TAGGING_POINT_LIST}`, {params: { tagId: taggingId } })
  74. return positions.map(position => serviceToLocal(position, taggingId))
  75. }
  76. export const postAddTaggingPosition = async (position: TaggingPosition) => {
  77. const servicePosition = await axios.post<ServicePosition>(INSERT_TAGGING_POINT, localToService(position))
  78. return serviceToLocal(servicePosition)
  79. }
  80. export const postUpdateTaggingPosition = (position: TaggingPosition) => {
  81. return axios.post<undefined>(UPDATE_TAGGING_POINT, localToService(position, true))
  82. }
  83. export const postDeleteTaggingPosition = (position: TaggingPosition) => {
  84. return axios.post<undefined>(DELETE_TAGGING_POINT, { tagPointId: Number(position.id) })
  85. }