tagging-position.ts 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  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. globalVisibility: number
  19. type: string,
  20. mat: string
  21. fontSize: number,
  22. lineHeight: number,
  23. visibilityRange: number
  24. pose?: string;
  25. }
  26. export enum TaggingPositionType {
  27. '2d' = '2d',
  28. '3d' = '3d'
  29. }
  30. export interface TaggingPosition {
  31. id: string,
  32. taggingId: Tagging['id']
  33. modelId: FuseModel['id']
  34. normal: SceneLocalPos,
  35. localPos: SceneLocalPos
  36. fontSize: number,
  37. lineHeight: number,
  38. globalVisibility: boolean
  39. visibilityRange: number
  40. type: TaggingPositionType
  41. mat: Tagging3DProps['mat']
  42. pose?: {
  43. position: SceneLocalPos;
  44. target: SceneLocalPos;
  45. panoInfo?: {
  46. panoId: any;
  47. modelId: string;
  48. posInModel: SceneLocalPos;
  49. rotInModel: SceneLocalPos;
  50. };
  51. };
  52. }
  53. export type TaggingPositions = TaggingPosition[]
  54. const serviceToLocal = (position: ServicePosition, taggingId?: Tagging['id']): TaggingPosition => ({
  55. id: position.tagPointId.toString(),
  56. modelId: position.fusionNumId ? position.fusionNumId.toString() : position.modelId ? position.modelId.toString() : '123123',
  57. taggingId: taggingId || position.tagId.toString(),
  58. localPos: JSON.parse(position.tagPoint),
  59. type: (position.type || TaggingPositionType['2d']) as TaggingPositionType,
  60. globalVisibility: Boolean(position.globalVisibility),
  61. normal: position.normal ? JSON.parse(position.normal) : { x: 0, y: 0, z: 1 },
  62. mat: position.mat ? JSON.parse(position.mat) : {
  63. scale: 1,
  64. rotation: 0
  65. },
  66. visibilityRange: position.visibilityRange || 30,
  67. fontSize: position.fontSize || 12,
  68. lineHeight: position.lineHeight || 1,
  69. pose: position.pose && JSON.parse(position.pose)
  70. })
  71. const localToService = (position: TaggingPosition, update = false): PartialProps<ServicePosition, 'tagPointId'> => ({
  72. "tagPointId": update ? Number(position.id) : undefined,
  73. "tagId": Number(position.taggingId),
  74. "fusionNumId": Number(position.modelId),
  75. "tagPoint": JSON.stringify(position.localPos),
  76. globalVisibility: Number(position.globalVisibility),
  77. type: position.type,
  78. mat: position.mat && JSON.stringify(position.mat),
  79. normal: JSON.stringify(position.normal),
  80. fontSize: position.fontSize,
  81. lineHeight: position.lineHeight,
  82. visibilityRange: position.visibilityRange ,
  83. pose: position.pose && JSON.stringify(position.pose)
  84. })
  85. export const fetchTaggingPositions = async (taggingId: Tagging['id']) => {
  86. const positions = await axios.get<ServicePosition[]>(`${TAGGING_POINT_LIST}`, {params: { tagId: taggingId } })
  87. return positions.map(position => serviceToLocal(position, taggingId))
  88. }
  89. export const postAddTaggingPosition = async (position: TaggingPosition) => {
  90. console.log(localToService(position))
  91. const servicePosition = await axios.post<ServicePosition>(INSERT_TAGGING_POINT, localToService(position))
  92. return serviceToLocal(servicePosition)
  93. }
  94. export const postUpdateTaggingPosition = (position: TaggingPosition) => {
  95. return axios.post<undefined>(UPDATE_TAGGING_POINT, localToService(position, true))
  96. }
  97. export const postDeleteTaggingPosition = (position: TaggingPosition) => {
  98. return axios.post<undefined>(DELETE_TAGGING_POINT, { tagPointId: Number(position.id) })
  99. }