@labelbee/lb-components 1.6.0-alpha.1 → 1.6.0-alpha.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (119) hide show
  1. package/dist/App.js +1 -1
  2. package/dist/assets/annotation/pointCloudTool/nodata.svg.js +1 -0
  3. package/dist/components/AnnotationView/index.js +1 -1
  4. package/dist/components/AnnotationView/pointCloudAnnotationView.js +1 -0
  5. package/dist/components/customResizeHook/index.js +1 -1
  6. package/dist/components/pointCloudView/PointCloud2DView.js +1 -1
  7. package/dist/components/pointCloudView/PointCloud3DView.js +1 -1
  8. package/dist/components/pointCloudView/PointCloudBackView.js +1 -1
  9. package/dist/components/pointCloudView/PointCloudContext.js +1 -1
  10. package/dist/components/pointCloudView/PointCloudInfos.js +1 -1
  11. package/dist/components/pointCloudView/PointCloudListener.js +1 -1
  12. package/dist/components/pointCloudView/PointCloudSideView.js +1 -1
  13. package/dist/components/pointCloudView/PointCloudTopView.js +1 -1
  14. package/dist/components/pointCloudView/components/EmptyPage/index.js +1 -0
  15. package/dist/components/pointCloudView/hooks/usePointCloudViews.js +1 -1
  16. package/dist/components/pointCloudView/hooks/usePolygon.js +1 -0
  17. package/dist/components/pointCloudView/hooks/useRotate.js +1 -1
  18. package/dist/components/pointCloudView/hooks/useSingleBox.js +1 -1
  19. package/dist/components/pointCloudView/hooks/useStatus.js +1 -0
  20. package/dist/hooks/annotation.js +1 -1
  21. package/dist/hooks/useSize.js +1 -1
  22. package/dist/index.css +32 -0
  23. package/dist/index.js +1 -1
  24. package/dist/store/Actions.js +1 -1
  25. package/dist/store/annotation/actionCreators.js +1 -1
  26. package/dist/store/annotation/reducer.js +1 -1
  27. package/dist/types/App.d.ts +1 -0
  28. package/dist/types/components/AnnotationView/index.d.ts +3 -3
  29. package/dist/types/components/AnnotationView/pointCloudAnnotationView.d.ts +10 -0
  30. package/dist/types/components/pointCloudView/PointCloudContext.d.ts +3 -1
  31. package/dist/types/components/pointCloudView/components/EmptyPage/index.d.ts +2 -0
  32. package/dist/types/components/pointCloudView/hooks/usePointCloudViews.d.ts +9 -1
  33. package/dist/types/components/pointCloudView/hooks/usePolygon.d.ts +9 -0
  34. package/dist/types/components/pointCloudView/hooks/useStatus.d.ts +11 -0
  35. package/dist/types/hooks/annotation.d.ts +12 -2
  36. package/dist/types/hooks/useSize.d.ts +2 -2
  37. package/dist/types/index.d.ts +2 -1
  38. package/dist/types/store/Actions.d.ts +2 -0
  39. package/dist/types/store/annotation/actionCreators.d.ts +3 -1
  40. package/dist/types/store/annotation/types.d.ts +2 -0
  41. package/dist/types/utils/data.d.ts +1 -1
  42. package/dist/types/views/MainView/toolFooter/index.d.ts +2 -1
  43. package/dist/utils/data.js +1 -1
  44. package/dist/views/MainView/sidebar/GeneralOperation/ActionsConfirm.js +1 -1
  45. package/dist/views/MainView/sidebar/GeneralOperation/index.js +1 -1
  46. package/dist/views/MainView/sidebar/GeneralOperation/useOperationList.js +1 -1
  47. package/dist/views/MainView/sidebar/PointCloudToolSidebar/index.js +1 -1
  48. package/dist/views/MainView/sidebar/index.js +1 -1
  49. package/dist/views/MainView/toolFooter/FooterTips/ToolHotKey/pointCloud/index.js +1 -1
  50. package/dist/views/MainView/toolFooter/index.js +1 -1
  51. package/es/App.js +1 -1
  52. package/es/App.js.map +1 -1
  53. package/es/assets/annotation/pointCloudTool/nodata.svg.js +1 -0
  54. package/es/assets/annotation/pointCloudTool/nodata.svg.js.map +1 -0
  55. package/es/components/AnnotationView/index.js +1 -1
  56. package/es/components/AnnotationView/index.js.map +1 -1
  57. package/es/components/AnnotationView/pointCloudAnnotationView.js +1 -0
  58. package/es/components/AnnotationView/pointCloudAnnotationView.js.map +1 -0
  59. package/es/components/customResizeHook/index.js +1 -1
  60. package/es/components/customResizeHook/index.js.map +1 -1
  61. package/es/components/pointCloudView/PointCloud2DView.js +1 -1
  62. package/es/components/pointCloudView/PointCloud2DView.js.map +1 -1
  63. package/es/components/pointCloudView/PointCloud3DView.js +1 -1
  64. package/es/components/pointCloudView/PointCloud3DView.js.map +1 -1
  65. package/es/components/pointCloudView/PointCloudBackView.js +1 -1
  66. package/es/components/pointCloudView/PointCloudBackView.js.map +1 -1
  67. package/es/components/pointCloudView/PointCloudContext.js +1 -1
  68. package/es/components/pointCloudView/PointCloudContext.js.map +1 -1
  69. package/es/components/pointCloudView/PointCloudInfos.js +1 -1
  70. package/es/components/pointCloudView/PointCloudInfos.js.map +1 -1
  71. package/es/components/pointCloudView/PointCloudListener.js +1 -1
  72. package/es/components/pointCloudView/PointCloudListener.js.map +1 -1
  73. package/es/components/pointCloudView/PointCloudSideView.js +1 -1
  74. package/es/components/pointCloudView/PointCloudSideView.js.map +1 -1
  75. package/es/components/pointCloudView/PointCloudTopView.js +1 -1
  76. package/es/components/pointCloudView/PointCloudTopView.js.map +1 -1
  77. package/es/components/pointCloudView/components/EmptyPage/index.js +1 -0
  78. package/es/components/pointCloudView/components/EmptyPage/index.js.map +1 -0
  79. package/es/components/pointCloudView/hooks/useBoxes.js.map +1 -1
  80. package/es/components/pointCloudView/hooks/usePointCloudViews.js +1 -1
  81. package/es/components/pointCloudView/hooks/usePointCloudViews.js.map +1 -1
  82. package/es/components/pointCloudView/hooks/usePolygon.js +1 -0
  83. package/es/components/pointCloudView/hooks/usePolygon.js.map +1 -0
  84. package/es/components/pointCloudView/hooks/useRotate.js +1 -1
  85. package/es/components/pointCloudView/hooks/useRotate.js.map +1 -1
  86. package/es/components/pointCloudView/hooks/useSingleBox.js +1 -1
  87. package/es/components/pointCloudView/hooks/useSingleBox.js.map +1 -1
  88. package/es/components/pointCloudView/hooks/useStatus.js +1 -0
  89. package/es/components/pointCloudView/hooks/useStatus.js.map +1 -0
  90. package/es/hooks/annotation.js +1 -1
  91. package/es/hooks/annotation.js.map +1 -1
  92. package/es/hooks/useSize.js +1 -1
  93. package/es/hooks/useSize.js.map +1 -1
  94. package/es/index.css +32 -0
  95. package/es/index.js +1 -1
  96. package/es/index.js.map +1 -1
  97. package/es/store/Actions.js +1 -1
  98. package/es/store/Actions.js.map +1 -1
  99. package/es/store/annotation/actionCreators.js +1 -1
  100. package/es/store/annotation/actionCreators.js.map +1 -1
  101. package/es/store/annotation/reducer.js +1 -1
  102. package/es/store/annotation/reducer.js.map +1 -1
  103. package/es/utils/data.js +1 -1
  104. package/es/utils/data.js.map +1 -1
  105. package/es/views/MainView/sidebar/GeneralOperation/ActionsConfirm.js +1 -1
  106. package/es/views/MainView/sidebar/GeneralOperation/ActionsConfirm.js.map +1 -1
  107. package/es/views/MainView/sidebar/GeneralOperation/index.js +1 -1
  108. package/es/views/MainView/sidebar/GeneralOperation/index.js.map +1 -1
  109. package/es/views/MainView/sidebar/GeneralOperation/useOperationList.js +1 -1
  110. package/es/views/MainView/sidebar/GeneralOperation/useOperationList.js.map +1 -1
  111. package/es/views/MainView/sidebar/PointCloudToolSidebar/index.js +1 -1
  112. package/es/views/MainView/sidebar/PointCloudToolSidebar/index.js.map +1 -1
  113. package/es/views/MainView/sidebar/index.js +1 -1
  114. package/es/views/MainView/sidebar/index.js.map +1 -1
  115. package/es/views/MainView/toolFooter/FooterTips/ToolHotKey/pointCloud/index.js +1 -1
  116. package/es/views/MainView/toolFooter/FooterTips/ToolHotKey/pointCloud/index.js.map +1 -1
  117. package/es/views/MainView/toolFooter/index.js +1 -1
  118. package/es/views/MainView/toolFooter/index.js.map +1 -1
  119. package/package.json +5 -6
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../../../src/components/pointCloudView/components/EmptyPage/index.tsx"],"sourcesContent":["/**\n * @file EmptyPage\n * @createDate 2022-08-31\n * @author Ron <ron.f.luo@gmail.com>\n */\nimport React from 'react';\nimport NoDataSvg from '@/assets/annotation/pointCloudTool/nodata.svg';\nimport { getClassName } from '@/utils/dom';\n\nconst EmptyPage = () => {\n return (\n <div className={getClassName('point-cloud-container', 'empty-page')}>\n <img src={NoDataSvg} />\n <span className={getClassName('point-cloud-container', 'empty-page', 'text')}>暂无数据</span>\n </div>\n );\n};\n\nexport default EmptyPage;\n"],"names":["NoDataSvg"],"mappings":";;;;AASA,MAAM,YAAY,MAAM;AACtB,EAAA,2CACG,KAAD,EAAA;AAAA,IAAK,SAAA,EAAW,aAAa,uBAAyB,EAAA,YAAA,CAAA;AAAA,GAAA,sCACnD,KAAD,EAAA;AAAA,IAAK,GAAK,EAAAA,GAAA;AAAA,GAAA,CAAA,sCACT,MAAD,EAAA;AAAA,IAAM,SAAA,EAAW,YAAa,CAAA,uBAAA,EAAyB,YAAc,EAAA,MAAA,CAAA;AAAA,GAAS,EAAA,0BAAA,CAAA,CAAA,CAAA;AAAA;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"useBoxes.js","sources":["../../../../src/components/pointCloudView/hooks/useBoxes.tsx"],"sourcesContent":["import { IPointCloudBoxList } from '@labelbee/lb-utils';\nimport { useCallback, useContext, useMemo, useState } from 'react';\nimport _ from 'lodash';\nimport { message } from 'antd';\nimport { usePointCloudViews } from './usePointCloudViews';\nimport { PointCloudContext } from '../PointCloudContext';\n\n/**\n * Actions for selected boxes\n */\nexport const useBoxes = () => {\n const { selectedIDs, pointCloudBoxList, setPointCloudResult } = useContext(PointCloudContext);\n const [copiedBoxes, setCopiedBoxes] = useState<IPointCloudBoxList>([]);\n const { pointCloudBoxListUpdated } = usePointCloudViews();\n\n const hasDuplicateID = (checkBoxList: IPointCloudBoxList) => {\n return pointCloudBoxList.some((item) => {\n return checkBoxList.some((i) => i.id === item.id);\n });\n };\n\n const selectedBoxes = useMemo(() => {\n return pointCloudBoxList.filter((i) => selectedIDs.includes(i.id));\n }, [selectedIDs, pointCloudBoxList]);\n\n const copySelectedBoxes = useCallback(() => {\n if (selectedBoxes.length > 0) {\n setCopiedBoxes(_.cloneDeep(selectedBoxes));\n } else {\n setCopiedBoxes([]);\n message.error('复制内容为空,请选择对应的点云数据');\n }\n }, [selectedIDs, pointCloudBoxList]);\n\n const pasteSelectedBoxes = useCallback(() => {\n if (copiedBoxes.length === 0) {\n message.error('选者对应的点云数据并进行复制');\n return;\n }\n\n const hasDuplicate = hasDuplicateID(copiedBoxes);\n\n if (hasDuplicate) {\n message.error('存在重复ID,复制失败');\n } else {\n /** Paste succeed and empty */\n setPointCloudResult(copiedBoxes);\n pointCloudBoxListUpdated?.(copiedBoxes);\n setCopiedBoxes([]);\n }\n }, [copiedBoxes, pointCloudBoxList]);\n\n return { copySelectedBoxes, pasteSelectedBoxes, copiedBoxes, selectedBoxes };\n};\n"],"names":[],"mappings":";;;;;;AAUO,MAAM,WAAW,MAAM;AAC5B,EAAA,MAAM,CAAE,WAAA,EAAa,iBAAmB,EAAA,mBAAA,CAAA,GAAwB,UAAW,CAAA,iBAAA,CAAA,CAAA;AAC3E,EAAM,MAAA,CAAC,WAAa,EAAA,cAAA,CAAA,GAAkB,QAA6B,CAAA,EAAA,CAAA,CAAA;AACnE,EAAA,MAAM,CAAE,wBAA6B,CAAA,GAAA,kBAAA,EAAA,CAAA;AAErC,EAAM,MAAA,cAAA,GAAiB,CAAC,YAAqC,KAAA;AAC3D,IAAO,OAAA,iBAAA,CAAkB,IAAK,CAAA,CAAC,IAAS,KAAA;AACtC,MAAA,OAAO,aAAa,IAAK,CAAA,CAAC,CAAM,KAAA,CAAA,CAAE,OAAO,IAAK,CAAA,EAAA,CAAA,CAAA;AAAA,KAAA,CAAA,CAAA;AAAA,GAAA,CAAA;AAIlD,EAAM,MAAA,aAAA,GAAgB,QAAQ,MAAM;AAClC,IAAA,OAAO,kBAAkB,MAAO,CAAA,CAAC,CAAM,KAAA,WAAA,CAAY,SAAS,CAAE,CAAA,EAAA,CAAA,CAAA,CAAA;AAAA,GAAA,EAC7D,CAAC,WAAa,EAAA,iBAAA,CAAA,CAAA,CAAA;AAEjB,EAAM,MAAA,iBAAA,GAAoB,YAAY,MAAM;AAC1C,IAAI,IAAA,aAAA,CAAc,SAAS,CAAG,EAAA;AAC5B,MAAA,cAAA,CAAe,EAAE,SAAU,CAAA,aAAA,CAAA,CAAA,CAAA;AAAA,KACtB,MAAA;AACL,MAAe,cAAA,CAAA,EAAA,CAAA,CAAA;AACf,MAAA,OAAA,CAAQ,KAAM,CAAA,wGAAA,CAAA,CAAA;AAAA,KAAA;AAAA,GAAA,EAEf,CAAC,WAAa,EAAA,iBAAA,CAAA,CAAA,CAAA;AAEjB,EAAM,MAAA,kBAAA,GAAqB,YAAY,MAAM;AAC3C,IAAI,IAAA,WAAA,CAAY,WAAW,CAAG,EAAA;AAC5B,MAAA,OAAA,CAAQ,KAAM,CAAA,sFAAA,CAAA,CAAA;AACd,MAAA,OAAA;AAAA,KAAA;AAGF,IAAA,MAAM,eAAe,cAAe,CAAA,WAAA,CAAA,CAAA;AAEpC,IAAA,IAAI,YAAc,EAAA;AAChB,MAAA,OAAA,CAAQ,KAAM,CAAA,qDAAA,CAAA,CAAA;AAAA,KACT,MAAA;AAEL,MAAoB,mBAAA,CAAA,WAAA,CAAA,CAAA;AACpB,MAA2B,wBAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,wBAAA,CAAA,WAAA,CAAA,CAAA;AAC3B,MAAe,cAAA,CAAA,EAAA,CAAA,CAAA;AAAA,KAAA;AAAA,GAAA,EAEhB,CAAC,WAAa,EAAA,iBAAA,CAAA,CAAA,CAAA;AAEjB,EAAO,OAAA,CAAE,iBAAmB,EAAA,kBAAA,EAAoB,WAAa,EAAA,aAAA,CAAA,CAAA;AAAA;;;;"}
1
+ {"version":3,"file":"useBoxes.js","sources":["../../../../src/components/pointCloudView/hooks/useBoxes.ts"],"sourcesContent":["import { IPointCloudBoxList } from '@labelbee/lb-utils';\nimport { useCallback, useContext, useMemo, useState } from 'react';\nimport _ from 'lodash';\nimport { message } from 'antd';\nimport { usePointCloudViews } from './usePointCloudViews';\nimport { PointCloudContext } from '../PointCloudContext';\n\n/**\n * Actions for selected boxes\n */\nexport const useBoxes = () => {\n const { selectedIDs, pointCloudBoxList, setPointCloudResult } = useContext(PointCloudContext);\n const [copiedBoxes, setCopiedBoxes] = useState<IPointCloudBoxList>([]);\n const { pointCloudBoxListUpdated } = usePointCloudViews();\n\n const hasDuplicateID = (checkBoxList: IPointCloudBoxList) => {\n return pointCloudBoxList.some((item) => {\n return checkBoxList.some((i) => i.id === item.id);\n });\n };\n\n const selectedBoxes = useMemo(() => {\n return pointCloudBoxList.filter((i) => selectedIDs.includes(i.id));\n }, [selectedIDs, pointCloudBoxList]);\n\n const copySelectedBoxes = useCallback(() => {\n if (selectedBoxes.length > 0) {\n setCopiedBoxes(_.cloneDeep(selectedBoxes));\n } else {\n setCopiedBoxes([]);\n message.error('复制内容为空,请选择对应的点云数据');\n }\n }, [selectedIDs, pointCloudBoxList]);\n\n const pasteSelectedBoxes = useCallback(() => {\n if (copiedBoxes.length === 0) {\n message.error('选者对应的点云数据并进行复制');\n return;\n }\n\n const hasDuplicate = hasDuplicateID(copiedBoxes);\n\n if (hasDuplicate) {\n message.error('存在重复ID,复制失败');\n } else {\n /** Paste succeed and empty */\n setPointCloudResult(copiedBoxes);\n pointCloudBoxListUpdated?.(copiedBoxes);\n setCopiedBoxes([]);\n }\n }, [copiedBoxes, pointCloudBoxList]);\n\n return { copySelectedBoxes, pasteSelectedBoxes, copiedBoxes, selectedBoxes };\n};\n"],"names":[],"mappings":";;;;;;AAUO,MAAM,WAAW,MAAM;AAC5B,EAAA,MAAM,CAAE,WAAA,EAAa,iBAAmB,EAAA,mBAAA,CAAA,GAAwB,UAAW,CAAA,iBAAA,CAAA,CAAA;AAC3E,EAAM,MAAA,CAAC,WAAa,EAAA,cAAA,CAAA,GAAkB,QAA6B,CAAA,EAAA,CAAA,CAAA;AACnE,EAAA,MAAM,CAAE,wBAA6B,CAAA,GAAA,kBAAA,EAAA,CAAA;AAErC,EAAM,MAAA,cAAA,GAAiB,CAAC,YAAqC,KAAA;AAC3D,IAAO,OAAA,iBAAA,CAAkB,IAAK,CAAA,CAAC,IAAS,KAAA;AACtC,MAAA,OAAO,aAAa,IAAK,CAAA,CAAC,CAAM,KAAA,CAAA,CAAE,OAAO,IAAK,CAAA,EAAA,CAAA,CAAA;AAAA,KAAA,CAAA,CAAA;AAAA,GAAA,CAAA;AAIlD,EAAM,MAAA,aAAA,GAAgB,QAAQ,MAAM;AAClC,IAAA,OAAO,kBAAkB,MAAO,CAAA,CAAC,CAAM,KAAA,WAAA,CAAY,SAAS,CAAE,CAAA,EAAA,CAAA,CAAA,CAAA;AAAA,GAAA,EAC7D,CAAC,WAAa,EAAA,iBAAA,CAAA,CAAA,CAAA;AAEjB,EAAM,MAAA,iBAAA,GAAoB,YAAY,MAAM;AAC1C,IAAI,IAAA,aAAA,CAAc,SAAS,CAAG,EAAA;AAC5B,MAAA,cAAA,CAAe,EAAE,SAAU,CAAA,aAAA,CAAA,CAAA,CAAA;AAAA,KACtB,MAAA;AACL,MAAe,cAAA,CAAA,EAAA,CAAA,CAAA;AACf,MAAA,OAAA,CAAQ,KAAM,CAAA,wGAAA,CAAA,CAAA;AAAA,KAAA;AAAA,GAAA,EAEf,CAAC,WAAa,EAAA,iBAAA,CAAA,CAAA,CAAA;AAEjB,EAAM,MAAA,kBAAA,GAAqB,YAAY,MAAM;AAC3C,IAAI,IAAA,WAAA,CAAY,WAAW,CAAG,EAAA;AAC5B,MAAA,OAAA,CAAQ,KAAM,CAAA,sFAAA,CAAA,CAAA;AACd,MAAA,OAAA;AAAA,KAAA;AAGF,IAAA,MAAM,eAAe,cAAe,CAAA,WAAA,CAAA,CAAA;AAEpC,IAAA,IAAI,YAAc,EAAA;AAChB,MAAA,OAAA,CAAQ,KAAM,CAAA,qDAAA,CAAA,CAAA;AAAA,KACT,MAAA;AAEL,MAAoB,mBAAA,CAAA,WAAA,CAAA,CAAA;AACpB,MAA2B,wBAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,wBAAA,CAAA,WAAA,CAAA,CAAA;AAC3B,MAAe,cAAA,CAAA,EAAA,CAAA,CAAA;AAAA,KAAA;AAAA,GAAA,EAEhB,CAAC,WAAa,EAAA,iBAAA,CAAA,CAAA,CAAA;AAEjB,EAAO,OAAA,CAAE,iBAAmB,EAAA,kBAAA,EAAoB,WAAa,EAAA,aAAA,CAAA,CAAA;AAAA;;;;"}
@@ -1 +1 @@
1
- import{MathUtils as x}from"@labelbee/lb-annotation";import{EPerspectiveView as O}from"@labelbee/lb-utils";import{useContext as Z}from"react";import{PointCloudContext as E}from"../PointCloudContext.js";import{useSingleBox as U}from"./useSingleBox.js";import F from"lodash";import{useSelector as W}from"react-redux";const I=5,f={"3D":"3D",Top:"Top",Side:"Side",Back:"Back"},A=(o,s)=>{const{width:d,height:e}=s,{x:i,y:n}=o;return{x:-n+e/2,y:-(i-d/2)}},b=(o,s,d,e)=>{const[i,n,l,p]=o.pointList.map(h=>A(h,s)),r=x.getLineCenterPoint([i,l]),B=x.getLineLength(i,n),g=x.getLineLength(n,l),u=x.getRadiusFromQuadrangle(o.pointList);let m=0,L=1;if(d){const h=d.getSensesPointZAxisInPolygon([i,n,l,p]);m=(h.maxZ+h.minZ)/2,L=h.maxZ-h.minZ}return e&&(m=e.center.z,L=e.depth),{center:{x:r.x,y:r.y,z:m},width:g,height:B,depth:L,rotation:u,id:o.id,attribute:"",valid:!0}},_=(o,s,d,e)=>{const[i,n,l]=o.pointList,[p,r,B]=s.pointList,g=x.getLineCenterPoint([i,l]),u=x.getLineCenterPoint([p,B]),m={x:g.x-u.x,y:g.y-u.y},L=Math.cos(d.rotation),D=Math.sin(d.rotation),h={x:m.x,y:m.x*D+m.y*L,z:g.y-u.y},v=x.getLineLength(i,n),S=x.getLineLength(p,r),w=v-S,V=x.getLineLength(n,l),k=x.getLineLength(r,B),y=V-k,{newBoxParams:z}=e.getNewBoxBySideUpdate(h,y,w,d);return z},j=(o,s,d,e)=>{if(!d)return;const{pointCloud2dOperation:i,pointCloudInstance:n}=d;n.loadPCDFileByBox(e,o,{width:I,depth:I});const{cameraPositionVector:l}=n.updateOrthoCamera(o,O.Left);n.setInitCameraPosition(l);const{polygon2d:p,zoom:r}=n.getBoxSidePolygon2DCoordinate(o);n.camera.zoom=r,n.camera.updateProjectionMatrix(),n.render(),i.initPosition(),i.zoomChangeOnCenter(r),i.setResultAndSelectedID([{id:s.id,pointList:p,textAttribute:"",isRect:!0}],s.id)},R=(o,s,d,e)=>{if(!d)return;const{pointCloud2dOperation:i,pointCloudInstance:n}=d;n.loadPCDFileByBox(e,o,{height:I,depth:I});const{cameraPositionVector:l}=n.updateOrthoCamera(o,O.Back);n.setInitCameraPosition(l);const{polygon2d:p,zoom:r}=n.getBoxBackPolygon2DCoordinate(o);n.camera.zoom=r,n.camera.updateProjectionMatrix(),n.render(),i.initPosition(),i.zoomChangeOnCenter(r),i.setResultAndSelectedID([{id:s.id,pointList:p,textAttribute:"",isRect:!0}],s.id)},M=(o,s,d,e)=>{if(!d||!e)return;e.generateBox(o,s.id),e.updateCameraByBox(o,O.Top),e.render();const{pointCloud2dOperation:i,pointCloudInstance:n}=d,{polygon2d:l}=n.getBoxTopPolygon2DCoordinate(o),p=[...i.polygonList],r=p.find(B=>B.id===s.id);r?r.pointList=l:p.push({id:s.id,pointList:l,textAttribute:"",isRect:!0}),i.setResultAndSelectedID(p,s.id)},H=()=>{const{topViewInstance:o,sideViewInstance:s,backViewInstance:d,mainViewInstance:e,addPointCloudBox:i,setSelectedIDs:n,selectedIDs:l,pointCloudBoxList:p}=Z(E),{updateSelectedBox:r}=U(),B=W(t=>t.annotation.imgList[t.annotation.imgIndex]),{selectedBox:g}=U(),u=g==null?void 0:g.info;if(!o||!s)return{topViewAddBox:()=>{},topViewSelectedChanged:()=>{},sideViewUpdateBox:()=>{}};const{pointCloudInstance:m}=o,L=()=>{var t;return p.length>0?((t=p.sort((a,C)=>a.trackID-C.trackID).slice(-1)[0])==null?void 0:t.trackID)+1:1},D=t=>{e==null||e.generateBox(t),e==null||e.controls.update(),e==null||e.render()},h=(t,c)=>{const a=b(t,c,m),C=o==null?void 0:o.pointCloud2dOperation,P=Object.assign(a,{trackID:L()});C.setSelectedIDs([t.id]),n(P.id),y(f.Top,t,P),i(P)},v=()=>{const t=g==null?void 0:g.info,c=o==null?void 0:o.pointCloud2dOperation;if(c.setSelectedIDs(l),!t||!c)return;const a=c.selectedPolygon;y(f.Top,a,t)},S=(t,c,a)=>{if(u){const C=_(t,c,u,s.pointCloudInstance);r(C),y(a,t,C)}},w=(t,c)=>{S(t,c,f.Side)},V=(t,c)=>{S(t,c,f.Back)},k=(t,c)=>{if(u){const a=b(t,c,void 0,u);Object.assign(u,F.pickBy(a,(C,P)=>["width","height","x","y"])),r(a),y(f.Top,t,u)}},y=(t,c,a)=>{const C=B==null?void 0:B.url,P={[f.Side]:()=>{j(a,c,s,C)},[f.Back]:()=>{d&&R(a,c,d,C)},[f.Top]:()=>{M(a,c,o,e)}};Object.keys(P).forEach(T=>{T!==t&&P[T]()}),D(a),e==null||e.hightLightOriginPointCloud(a)};return{topViewAddBox:h,topViewSelectedChanged:v,topViewUpdateBox:k,sideViewUpdateBox:w,backViewUpdateBox:V,pointCloudBoxListUpdated:t=>{o.updatePolygonList(t),e==null||e.generateBoxes(t)}}};export{R as synchronizeBackView,j as synchronizeSideView,M as synchronizeTopView,b as topViewPolygon2PointCloud,A as transferCanvas2World,H as usePointCloudViews};
1
+ import{MathUtils as P}from"@labelbee/lb-annotation";import{EPerspectiveView as _,PointCloudUtils as T}from"@labelbee/lb-utils";import{useContext as K}from"react";import{PointCloudContext as X}from"../PointCloudContext.js";import{useSingleBox as z}from"./useSingleBox.js";import Y from"lodash";import{useSelector as $,useDispatch as tt}from"react-redux";import ot from"../../../utils/StepUtils.js";import{jsonParser as E}from"../../../utils/index.js";import{SetPointCloudLoading as F}from"../../../store/annotation/actionCreators.js";var et=(e,n,s)=>new Promise((a,t)=>{var i=d=>{try{c(s.next(d))}catch(g){t(g)}},u=d=>{try{c(s.throw(d))}catch(g){t(g)}},c=d=>d.done?a(d.value):Promise.resolve(d.value).then(i,u);c((s=s.apply(e,n)).next())});const O=5,M=90,D={"3D":"3D",Top:"Top",Side:"Side",Back:"Back"},Z=(e,n)=>{const{width:s,height:a}=n,{x:t,y:i}=e;return{x:-i+a/2,y:-(t-s/2)}},j=(e,n,s,a,t)=>{const[i,u,c,d]=e.pointList.map(v=>Z(v,n)),g=P.getLineCenterPoint([i,c]),L=P.getLineLength(i,u),p=P.getLineLength(u,c),h=P.getRadiusFromQuadrangle(e.pointList);let B=0,x=1;if(s){const v=s.getSensesPointZAxisInPolygon([i,u,c,d]);B=(v.maxZ+v.minZ)/2,x=v.maxZ-v.minZ}a&&(B=a.center.z,x=a.depth);const f={center:{x:g.x,y:g.y,z:B},width:p,height:L,depth:x,rotation:h,id:e.id,attribute:"",valid:!0};return t&&Object.assign(f,t),f},nt=(e,n,s,a)=>{const[t,i,u]=e.pointList,[c,d,g]=n.pointList,L=P.getLineCenterPoint([t,u]),p=P.getLineCenterPoint([c,g]),h={x:L.x-p.x,y:L.y-p.y},B=Math.cos(s.rotation),x=Math.sin(s.rotation),f={x:h.x,y:h.x*x+h.y*B,z:L.y-p.y},v=P.getLineLength(t,i),b=P.getLineLength(c,d),V=v-b,k=P.getLineLength(i,u),A=P.getLineLength(d,g),I=k-A,{newBoxParams:R}=a.getNewBoxBySideUpdate(f,I,V,s);return R},N=(e,n,s,a)=>{if(!s)return;const{pointCloud2dOperation:t,pointCloudInstance:i}=s;i.loadPCDFileByBox(a,e,{width:O,depth:O});const{cameraPositionVector:u}=i.updateOrthoCamera(e,_.Left);i.setInitCameraPosition(u);const{polygon2d:c,zoom:d}=i.getBoxSidePolygon2DCoordinate(e);i.camera.zoom=d,i.camera.updateProjectionMatrix(),i.render(),t.initPosition(),t.zoomChangeOnCenter(d),t.setResultAndSelectedID([{id:n.id,pointList:c,textAttribute:"",isRect:!0}],n.id)},W=(e,n,s,a)=>{if(!s)return;const{pointCloud2dOperation:t,pointCloudInstance:i}=s;i.loadPCDFileByBox(a,e,{height:O,depth:O});const{cameraPositionVector:u}=i.updateOrthoCamera(e,_.Back);i.setInitCameraPosition(u);const{polygon2d:c,zoom:d}=i.getBoxBackPolygon2DCoordinate(e);i.camera.zoom=d,i.camera.updateProjectionMatrix(),i.render(),t.initPosition(),t.zoomChangeOnCenter(d),t.setResultAndSelectedID([{id:n.id,pointList:c,textAttribute:"",isRect:!0}],n.id)},H=(e,n,s,a)=>{if(!s||!a)return;a.generateBox(e,n.id),a.updateCameraByBox(e,_.Top),a.render();const{pointCloud2dOperation:t,pointCloudInstance:i}=s,{polygon2d:u}=i.getBoxTopPolygon2DCoordinate(e),c=[...t.polygonList],d=c.find(g=>g.id===n.id);d?d.pointList=u:c.push({id:n.id,pointList:u,textAttribute:"",isRect:!0}),t.setResultAndSelectedID(c,n.id)},it=()=>{const e=K(X),{topViewInstance:n,sideViewInstance:s,backViewInstance:a,mainViewInstance:t,addPointCloudBox:i,setSelectedIDs:u,selectedIDs:c,pointCloudBoxList:d,setPointCloudResult:g}=e,{updateSelectedBox:L}=z(),{currentData:p,config:h}=$(o=>{const{stepList:r,step:l,imgList:C,imgIndex:m}=o.annotation;return{currentData:C[m],config:E(ot.getCurrentStepInfo(l,r).config)}}),B=tt(),{selectedBox:x}=z(),f=x==null?void 0:x.info;if(!n||!s)return{topViewAddBox:()=>{},topViewSelectedChanged:()=>{},sideViewUpdateBox:()=>{}};const{pointCloudInstance:v}=n,b=()=>{var o;return d.length>0?((o=d.sort((l,C)=>l.trackID-C.trackID).slice(-1)[0])==null?void 0:o.trackID)+1:1},V=o=>{t==null||t.generateBox(o),t==null||t.controls.update(),t==null||t.render()},k=(o,r)=>{var l,C,m;const S=j(o,r,v,void 0,{attribute:(m=(C=(l=h==null?void 0:h.attributeList)==null?void 0:l[0])==null?void 0:C.value)!=null?m:""}),U=n==null?void 0:n.pointCloud2dOperation,y=Object.assign(S,{trackID:b()});U.setSelectedIDs([o.id]),u(y.id),w(D.Top,o,y),i(y)},A=()=>{const o=x==null?void 0:x.info,r=n==null?void 0:n.pointCloud2dOperation;if(r.setSelectedIDs(c),!o||!r)return;const l=r.selectedPolygon;w(D.Top,l,o)},I=(o,r,l)=>{if(f){const C=nt(o,r,f,s.pointCloudInstance);L(C),w(l,o,C)}},R=(o,r)=>{I(o,r,D.Side)},G=(o,r)=>{I(o,r,D.Back)},Q=(o,r)=>{if(f){const l=j(o,r,void 0,f);Object.assign(f,Y.pickBy(l,(C,m)=>["width","height","x","y"])),L(l),w(D.Top,o,f)}},w=(o,r,l)=>{const C=p==null?void 0:p.url,m={[D.Side]:()=>{N(l,r,s,C)},[D.Back]:()=>{a&&W(l,r,a,C)},[D.Top]:()=>{H(l,r,n,t)}};Object.keys(m).forEach(S=>{S!==o&&m[S]()}),V(l),t==null||t.highlightOriginPointCloud(l)};return{topViewAddBox:k,topViewSelectedChanged:A,topViewUpdateBox:Q,sideViewUpdateBox:R,backViewUpdateBox:G,pointCloudBoxListUpdated:o=>{n.updatePolygonList(o),t==null||t.generateBoxes(o)},clearAllResult:()=>{d.forEach(o=>{t==null||t.removeObjectByName(o.id)}),t==null||t.render(),g([]),n.pointCloud2dOperation.clearActiveStatus(),n.pointCloud2dOperation.clearResult()},initPointCloud3d:()=>{!t||(t.initPerspectiveCamera(),t.initRenderer(),t.render())},updatePointCloudData:()=>et(void 0,null,function*(){var o,r,l,C,m,S;if(!(p==null?void 0:p.url)||!t)return;if(F(B,!0),yield t.loadPCDFile(p.url,(o=h==null?void 0:h.radius)!=null?o:M),d.forEach(y=>{t==null||t.removeObjectByName(y.id)}),p.result){const y=T.getBoxParamsFromResultList(p.result),q=T.getPolygonListFromResultList(p.result);y.forEach(J=>{t==null||t.generateBox(J)}),e.setPointCloudResult(y),e.setPolygonList(q)}else e.setPointCloudResult([]),e.setPolygonList([]);t.updateTopCamera();const U=(l=(r=E(p.result))==null?void 0:r.valid)!=null?l:!0;e.setPointCloudValid(U),(C=e.sideViewInstance)==null||C.clearAllData(),(m=e.backViewInstance)==null||m.clearAllData(),n.updateData(p.url,p.result,{radius:(S=h==null?void 0:h.radius)!=null?S:M}),F(B,!1)})}};export{W as synchronizeBackView,N as synchronizeSideView,H as synchronizeTopView,j as topViewPolygon2PointCloud,Z as transferCanvas2World,it as usePointCloudViews};
@@ -1 +1 @@
1
- {"version":3,"file":"usePointCloudViews.js","sources":["../../../../src/components/pointCloudView/hooks/usePointCloudViews.tsx"],"sourcesContent":["/**\n * @file Point cloud interface for crud\n * @author Glenfiddish <edwinlee0927@hotmail.com>\n * @createdate 2022-08-17\n */\nimport { PointCloudAnnotation, PointCloud, MathUtils } from '@labelbee/lb-annotation';\nimport { IPointCloudBox, EPerspectiveView } from '@labelbee/lb-utils';\nimport { useContext } from 'react';\nimport { PointCloudContext } from '../PointCloudContext';\nimport { useSingleBox } from './useSingleBox';\nimport { ISize } from '@/types/main';\nimport _ from 'lodash';\nimport { useSelector } from 'react-redux';\nimport { AppState } from '@/store';\n\nconst DEFAULT_SCOPE = 5;\n\nconst PointCloudView = {\n '3D': '3D',\n Top: 'Top',\n Side: 'Side',\n Back: 'Back',\n};\n\n/**\n * Get the coordinate from canvas2d-coordinate to world coordinate\n */\nexport const transferCanvas2World = (\n currentPos: { x: number; y: number },\n size: { width: number; height: number },\n) => {\n const { width: w, height: h } = size;\n const { x, y } = currentPos;\n\n // x-Axis is the Positive Direction, so the x-coordinates need to be swapped with the y-coordinates\n return {\n x: -y + h / 2,\n y: -(x - w / 2),\n };\n};\n\nexport const topViewPolygon2PointCloud = (\n newPolygon: any,\n size: ISize,\n pointCloud?: PointCloud,\n selectedPointCloud?: IPointCloudBox,\n) => {\n const [point1, point2, point3, point4] = newPolygon.pointList.map((v: any) =>\n transferCanvas2World(v, size),\n );\n\n const centerPoint = MathUtils.getLineCenterPoint([point1, point3]);\n const height = MathUtils.getLineLength(point1, point2);\n const width = MathUtils.getLineLength(point2, point3);\n const rotation = MathUtils.getRadiusFromQuadrangle(newPolygon.pointList);\n let z = 0;\n let depth = 1;\n if (pointCloud) {\n const zInfo = pointCloud.getSensesPointZAxisInPolygon([point1, point2, point3, point4]);\n z = (zInfo.maxZ + zInfo.minZ) / 2;\n depth = zInfo.maxZ - zInfo.minZ;\n }\n\n if (selectedPointCloud) {\n z = selectedPointCloud.center.z;\n depth = selectedPointCloud.depth;\n }\n\n /** TrackID will append before it pushed */\n const boxParams: Omit<IPointCloudBox, 'trackID'> = {\n center: {\n x: centerPoint.x,\n y: centerPoint.y,\n z,\n },\n width,\n height,\n depth,\n rotation: rotation,\n id: newPolygon.id,\n attribute: '',\n valid: true,\n };\n\n return boxParams;\n};\n\nconst sideViewPolygon2PointCloud = (\n newPolygon: any,\n originPolygon: any,\n selectedPointCloudBox: IPointCloudBox,\n pointCloudInstance: PointCloud,\n) => {\n const [point1, point2, point3] = newPolygon.pointList;\n const [op1, op2, op3] = originPolygon.pointList;\n\n // 2D centerPoint => 3D x & z\n const newCenterPoint = MathUtils.getLineCenterPoint([point1, point3]);\n const oldCenterPoint = MathUtils.getLineCenterPoint([op1, op3]);\n\n const offset = {\n x: newCenterPoint.x - oldCenterPoint.x,\n y: newCenterPoint.y - oldCenterPoint.y,\n };\n\n const cos = Math.cos(selectedPointCloudBox.rotation);\n const sin = Math.sin(selectedPointCloudBox.rotation);\n\n const offsetCenterPoint = {\n x: offset.x,\n y: offset.x * sin + offset.y * cos,\n z: newCenterPoint.y - oldCenterPoint.y,\n };\n\n // 2D height => 3D depth\n const height = MathUtils.getLineLength(point1, point2);\n const oldHeight = MathUtils.getLineLength(op1, op2);\n const offsetHeight = height - oldHeight; // 3D depth\n\n // 2D width => 3D width\n const width = MathUtils.getLineLength(point2, point3);\n const oldWidth = MathUtils.getLineLength(op2, op3);\n const offsetWidth = width - oldWidth; // 3D width\n\n const { newBoxParams } = pointCloudInstance.getNewBoxBySideUpdate(\n offsetCenterPoint,\n offsetWidth,\n offsetHeight,\n selectedPointCloudBox,\n );\n\n return newBoxParams;\n};\n\n/**\n * NewBox synchronize sideView\n * @param boxParams\n * @param newPolygon TODO! Need to add type\n */\nexport const synchronizeSideView = (\n boxParams: IPointCloudBox,\n newPolygon: any,\n sideViewInstance: PointCloudAnnotation | undefined,\n url: string,\n) => {\n if (!sideViewInstance) {\n return;\n }\n\n const { pointCloud2dOperation, pointCloudInstance } = sideViewInstance;\n\n // Create PointCloud\n pointCloudInstance.loadPCDFileByBox(url, boxParams, {\n width: DEFAULT_SCOPE,\n depth: DEFAULT_SCOPE,\n });\n const { cameraPositionVector } = pointCloudInstance.updateOrthoCamera(\n boxParams,\n EPerspectiveView.Left,\n );\n\n pointCloudInstance.setInitCameraPosition(cameraPositionVector);\n\n // Create Draw Polygon\n const { polygon2d, zoom } = pointCloudInstance.getBoxSidePolygon2DCoordinate(boxParams);\n\n // Synchronize SidePointCloud zoom with PointCloud2dOperation\n pointCloudInstance.camera.zoom = zoom;\n pointCloudInstance.camera.updateProjectionMatrix();\n pointCloudInstance.render();\n\n // Update PolygonView to default zoom and currentPos.\n pointCloud2dOperation.initPosition();\n pointCloud2dOperation.zoomChangeOnCenter(zoom);\n pointCloud2dOperation.setResultAndSelectedID(\n [\n {\n id: newPolygon.id,\n pointList: polygon2d,\n textAttribute: '',\n isRect: true,\n },\n ],\n newPolygon.id,\n );\n};\n\n/**\n * NewBox synchronize backView\n * @param boxParams\n * @param newPolygon TODO! Need to add type\n */\nexport const synchronizeBackView = (\n boxParams: IPointCloudBox,\n newPolygon: any,\n BackViewInstance: PointCloudAnnotation,\n url: string,\n) => {\n if (!BackViewInstance) {\n return;\n }\n\n const {\n pointCloud2dOperation: backPointCloudPolygonOperation,\n pointCloudInstance: backPointCloud,\n } = BackViewInstance;\n\n // Create PointCloud\n backPointCloud.loadPCDFileByBox(url, boxParams, { height: DEFAULT_SCOPE, depth: DEFAULT_SCOPE });\n const { cameraPositionVector } = backPointCloud.updateOrthoCamera(\n boxParams,\n EPerspectiveView.Back,\n );\n\n backPointCloud.setInitCameraPosition(cameraPositionVector);\n\n // Create Draw Polygon\n const { polygon2d, zoom } = backPointCloud.getBoxBackPolygon2DCoordinate(boxParams);\n\n // Synchronize SidePointCloud zoom with PointCloud2dOperation\n backPointCloud.camera.zoom = zoom;\n backPointCloud.camera.updateProjectionMatrix();\n backPointCloud.render();\n\n // Update PolygonView to default zoom and currentPos.\n backPointCloudPolygonOperation.initPosition();\n backPointCloudPolygonOperation.zoomChangeOnCenter(zoom);\n backPointCloudPolygonOperation.setResultAndSelectedID(\n [\n {\n id: newPolygon.id,\n pointList: polygon2d,\n textAttribute: '',\n isRect: true,\n },\n ],\n newPolygon.id,\n );\n};\n\n/**\n * NewBox synchronize TopView\n * @param boxParams\n * @param newPolygon TODO! Need to add type\n */\nexport const synchronizeTopView = (\n newBoxParams: IPointCloudBox,\n newPolygon: any,\n topViewInstance?: PointCloudAnnotation,\n mainViewInstance?: PointCloud,\n) => {\n if (!topViewInstance || !mainViewInstance) {\n return;\n }\n\n // Control the 3D view data to create box\n mainViewInstance.generateBox(newBoxParams, newPolygon.id);\n mainViewInstance.updateCameraByBox(newBoxParams, EPerspectiveView.Top);\n mainViewInstance.render();\n\n const { pointCloud2dOperation, pointCloudInstance } = topViewInstance;\n\n const { polygon2d } = pointCloudInstance.getBoxTopPolygon2DCoordinate(newBoxParams);\n\n const newPolygonList = [...pointCloud2dOperation.polygonList];\n const oldPolygon = newPolygonList.find((v) => v.id === newPolygon.id);\n if (oldPolygon) {\n oldPolygon.pointList = polygon2d;\n } else {\n newPolygonList.push({\n id: newPolygon.id,\n pointList: polygon2d,\n textAttribute: '',\n isRect: true,\n });\n }\n\n pointCloud2dOperation.setResultAndSelectedID(newPolygonList, newPolygon.id);\n};\n\nexport const usePointCloudViews = () => {\n const {\n topViewInstance,\n sideViewInstance,\n backViewInstance,\n mainViewInstance,\n addPointCloudBox,\n setSelectedIDs,\n selectedIDs,\n pointCloudBoxList,\n } = useContext(PointCloudContext);\n const { updateSelectedBox } = useSingleBox();\n\n const currentData = useSelector(\n (state: AppState) => state.annotation.imgList[state.annotation.imgIndex],\n );\n\n const { selectedBox } = useSingleBox();\n\n const selectedPointCloudBox = selectedBox?.info;\n\n if (!topViewInstance || !sideViewInstance) {\n return {\n topViewAddBox: () => {},\n topViewSelectedChanged: () => {},\n sideViewUpdateBox: () => {},\n };\n }\n\n const { pointCloudInstance: topViewPointCloud } = topViewInstance;\n\n const getNextTrackID = () => {\n if (pointCloudBoxList.length > 0) {\n const sortedPcList = pointCloudBoxList.sort((a, b) => a.trackID - b.trackID);\n return sortedPcList.slice(-1)[0]?.trackID + 1;\n }\n\n return 1;\n };\n\n const mainViewGenBox = (boxParams: IPointCloudBox) => {\n mainViewInstance?.generateBox(boxParams);\n mainViewInstance?.controls.update();\n mainViewInstance?.render();\n };\n\n /** Top-view create box from 2D */\n const topViewAddBox = (newPolygon: any, size: ISize) => {\n const newParams = topViewPolygon2PointCloud(newPolygon, size, topViewPointCloud);\n const polygonOperation = topViewInstance?.pointCloud2dOperation;\n\n const boxParams: IPointCloudBox = Object.assign(newParams, {\n trackID: getNextTrackID(),\n });\n\n polygonOperation.setSelectedIDs([newPolygon.id]);\n setSelectedIDs(boxParams.id);\n syncPointCloudViews(PointCloudView.Top, newPolygon, boxParams);\n addPointCloudBox(boxParams);\n };\n\n /** Top-view selected changed and render to other view */\n const topViewSelectedChanged = () => {\n const boxParams = selectedBox?.info;\n const polygonOperation = topViewInstance?.pointCloud2dOperation;\n\n polygonOperation.setSelectedIDs(selectedIDs);\n if (!boxParams || !polygonOperation) {\n return;\n }\n\n const polygon = polygonOperation.selectedPolygon;\n syncPointCloudViews(PointCloudView.Top, polygon, boxParams);\n };\n\n /**\n * Update box from view\n * @param newPolygon\n * @param originPolygon\n * @param fromView Back or Side\n */\n const viewUpdateBox = (newPolygon: any, originPolygon: any, fromView: string) => {\n if (selectedPointCloudBox) {\n const newBoxParams = sideViewPolygon2PointCloud(\n newPolygon,\n originPolygon,\n selectedPointCloudBox,\n sideViewInstance.pointCloudInstance,\n );\n\n updateSelectedBox(newBoxParams);\n syncPointCloudViews(fromView, newPolygon, newBoxParams);\n }\n };\n\n const sideViewUpdateBox = (newPolygon: any, originPolygon: any) => {\n viewUpdateBox(newPolygon, originPolygon, PointCloudView.Side);\n };\n\n const backViewUpdateBox = (newPolygon: any, originPolygon: any) => {\n viewUpdateBox(newPolygon, originPolygon, PointCloudView.Back);\n };\n\n /**\n * Top view box updated and sync views\n * @param polygon\n * @param size\n */\n const topViewUpdateBox = (polygon: any, size: ISize) => {\n if (selectedPointCloudBox) {\n const newBoxParams = topViewPolygon2PointCloud(\n polygon,\n size,\n undefined,\n selectedPointCloudBox,\n );\n\n Object.assign(\n selectedPointCloudBox,\n _.pickBy(newBoxParams, (v, k) => ['width', 'height', 'x', 'y']),\n );\n\n updateSelectedBox(newBoxParams);\n syncPointCloudViews(PointCloudView.Top, polygon, selectedPointCloudBox);\n }\n };\n\n /**\n * Sync views' data from omit view, regenerate and highlight box on 3D-view\n * @param omitView\n * @param polygon\n * @param boxParams\n */\n const syncPointCloudViews = (omitView: string, polygon: any, boxParams: IPointCloudBox) => {\n const dataUrl = currentData?.url;\n\n const viewToBeUpdated = {\n [PointCloudView.Side]: () => {\n synchronizeSideView(boxParams, polygon, sideViewInstance, dataUrl);\n },\n [PointCloudView.Back]: () => {\n if (backViewInstance) {\n synchronizeBackView(boxParams, polygon, backViewInstance, dataUrl);\n }\n },\n [PointCloudView.Top]: () => {\n synchronizeTopView(boxParams, polygon, topViewInstance, mainViewInstance);\n },\n };\n\n Object.keys(viewToBeUpdated).forEach((key) => {\n if (key !== omitView) {\n viewToBeUpdated[key]();\n }\n });\n mainViewGenBox(boxParams);\n mainViewInstance?.hightLightOriginPointCloud(boxParams);\n };\n\n const pointCloudBoxListUpdated = (newBoxes: IPointCloudBox[]) => {\n topViewInstance.updatePolygonList(newBoxes);\n mainViewInstance?.generateBoxes(newBoxes);\n };\n\n return {\n topViewAddBox,\n topViewSelectedChanged,\n topViewUpdateBox,\n sideViewUpdateBox,\n backViewUpdateBox,\n pointCloudBoxListUpdated,\n };\n};\n"],"names":[],"mappings":";;;;;;;;AAeA,MAAM,aAAgB,GAAA,CAAA,CAAA;AAEtB,MAAM,cAAiB,GAAA;AAAA,EACrB,IAAM,EAAA,IAAA;AAAA,EACN,GAAK,EAAA,KAAA;AAAA,EACL,IAAM,EAAA,MAAA;AAAA,EACN,IAAM,EAAA,MAAA;AAAA,CAAA,CAAA;AAMK,MAAA,oBAAA,GAAuB,CAClC,UAAA,EACA,IACG,KAAA;AACH,EAAA,MAAM,CAAE,KAAA,EAAO,CAAG,EAAA,MAAA,EAAQ,CAAM,CAAA,GAAA,IAAA,CAAA;AAChC,EAAM,MAAA,CAAE,GAAG,CAAM,CAAA,GAAA,UAAA,CAAA;AAGjB,EAAO,OAAA;AAAA,IACL,CAAA,EAAG,CAAC,CAAA,GAAI,CAAI,GAAA,CAAA;AAAA,IACZ,CAAA,EAAG,EAAE,CAAA,GAAI,CAAI,GAAA,CAAA,CAAA;AAAA,GAAA,CAAA;AAAA,EAAA;AAIV,MAAM,yBAA4B,GAAA,CACvC,UACA,EAAA,IAAA,EACA,YACA,kBACG,KAAA;AACH,EAAM,MAAA,CAAC,MAAQ,EAAA,MAAA,EAAQ,MAAQ,EAAA,MAAA,CAAA,GAAU,UAAW,CAAA,SAAA,CAAU,GAAI,CAAA,CAAC,CACjE,KAAA,oBAAA,CAAqB,CAAG,EAAA,IAAA,CAAA,CAAA,CAAA;AAG1B,EAAA,MAAM,WAAc,GAAA,SAAA,CAAU,kBAAmB,CAAA,CAAC,MAAQ,EAAA,MAAA,CAAA,CAAA,CAAA;AAC1D,EAAM,MAAA,MAAA,GAAS,SAAU,CAAA,aAAA,CAAc,MAAQ,EAAA,MAAA,CAAA,CAAA;AAC/C,EAAM,MAAA,KAAA,GAAQ,SAAU,CAAA,aAAA,CAAc,MAAQ,EAAA,MAAA,CAAA,CAAA;AAC9C,EAAM,MAAA,QAAA,GAAW,SAAU,CAAA,uBAAA,CAAwB,UAAW,CAAA,SAAA,CAAA,CAAA;AAC9D,EAAA,IAAI,CAAI,GAAA,CAAA,CAAA;AACR,EAAA,IAAI,KAAQ,GAAA,CAAA,CAAA;AACZ,EAAA,IAAI,UAAY,EAAA;AACd,IAAA,MAAM,QAAQ,UAAW,CAAA,4BAAA,CAA6B,CAAC,MAAA,EAAQ,QAAQ,MAAQ,EAAA,MAAA,CAAA,CAAA,CAAA;AAC/E,IAAK,CAAA,GAAA,CAAA,KAAA,CAAM,IAAO,GAAA,KAAA,CAAM,IAAQ,IAAA,CAAA,CAAA;AAChC,IAAQ,KAAA,GAAA,KAAA,CAAM,OAAO,KAAM,CAAA,IAAA,CAAA;AAAA,GAAA;AAG7B,EAAA,IAAI,kBAAoB,EAAA;AACtB,IAAA,CAAA,GAAI,mBAAmB,MAAO,CAAA,CAAA,CAAA;AAC9B,IAAA,KAAA,GAAQ,kBAAmB,CAAA,KAAA,CAAA;AAAA,GAAA;AAI7B,EAAA,MAAM,SAA6C,GAAA;AAAA,IACjD,MAAQ,EAAA;AAAA,MACN,GAAG,WAAY,CAAA,CAAA;AAAA,MACf,GAAG,WAAY,CAAA,CAAA;AAAA,MACf,CAAA;AAAA,KAAA;AAAA,IAEF,KAAA;AAAA,IACA,MAAA;AAAA,IACA,KAAA;AAAA,IACA,QAAA;AAAA,IACA,IAAI,UAAW,CAAA,EAAA;AAAA,IACf,SAAW,EAAA,EAAA;AAAA,IACX,KAAO,EAAA,IAAA;AAAA,GAAA,CAAA;AAGT,EAAO,OAAA,SAAA,CAAA;AAAA,EAAA;AAGT,MAAM,0BAA6B,GAAA,CACjC,UACA,EAAA,aAAA,EACA,uBACA,kBACG,KAAA;AACH,EAAA,MAAM,CAAC,MAAA,EAAQ,MAAQ,EAAA,MAAA,CAAA,GAAU,UAAW,CAAA,SAAA,CAAA;AAC5C,EAAA,MAAM,CAAC,GAAA,EAAK,GAAK,EAAA,GAAA,CAAA,GAAO,aAAc,CAAA,SAAA,CAAA;AAGtC,EAAA,MAAM,cAAiB,GAAA,SAAA,CAAU,kBAAmB,CAAA,CAAC,MAAQ,EAAA,MAAA,CAAA,CAAA,CAAA;AAC7D,EAAA,MAAM,cAAiB,GAAA,SAAA,CAAU,kBAAmB,CAAA,CAAC,GAAK,EAAA,GAAA,CAAA,CAAA,CAAA;AAE1D,EAAA,MAAM,MAAS,GAAA;AAAA,IACb,CAAA,EAAG,cAAe,CAAA,CAAA,GAAI,cAAe,CAAA,CAAA;AAAA,IACrC,CAAA,EAAG,cAAe,CAAA,CAAA,GAAI,cAAe,CAAA,CAAA;AAAA,GAAA,CAAA;AAGvC,EAAM,MAAA,GAAA,GAAM,IAAK,CAAA,GAAA,CAAI,qBAAsB,CAAA,QAAA,CAAA,CAAA;AAC3C,EAAM,MAAA,GAAA,GAAM,IAAK,CAAA,GAAA,CAAI,qBAAsB,CAAA,QAAA,CAAA,CAAA;AAE3C,EAAA,MAAM,iBAAoB,GAAA;AAAA,IACxB,GAAG,MAAO,CAAA,CAAA;AAAA,IACV,CAAG,EAAA,MAAA,CAAO,CAAI,GAAA,GAAA,GAAM,OAAO,CAAI,GAAA,GAAA;AAAA,IAC/B,CAAA,EAAG,cAAe,CAAA,CAAA,GAAI,cAAe,CAAA,CAAA;AAAA,GAAA,CAAA;AAIvC,EAAM,MAAA,MAAA,GAAS,SAAU,CAAA,aAAA,CAAc,MAAQ,EAAA,MAAA,CAAA,CAAA;AAC/C,EAAM,MAAA,SAAA,GAAY,SAAU,CAAA,aAAA,CAAc,GAAK,EAAA,GAAA,CAAA,CAAA;AAC/C,EAAA,MAAM,eAAe,MAAS,GAAA,SAAA,CAAA;AAG9B,EAAM,MAAA,KAAA,GAAQ,SAAU,CAAA,aAAA,CAAc,MAAQ,EAAA,MAAA,CAAA,CAAA;AAC9C,EAAM,MAAA,QAAA,GAAW,SAAU,CAAA,aAAA,CAAc,GAAK,EAAA,GAAA,CAAA,CAAA;AAC9C,EAAA,MAAM,cAAc,KAAQ,GAAA,QAAA,CAAA;AAE5B,EAAA,MAAM,CAAE,YAAiB,CAAA,GAAA,kBAAA,CAAmB,qBAC1C,CAAA,iBAAA,EACA,aACA,YACA,EAAA,qBAAA,CAAA,CAAA;AAGF,EAAO,OAAA,YAAA,CAAA;AAAA,CAAA,CAAA;AAQF,MAAM,mBAAsB,GAAA,CACjC,SACA,EAAA,UAAA,EACA,kBACA,GACG,KAAA;AACH,EAAA,IAAI,CAAC,gBAAkB,EAAA;AACrB,IAAA,OAAA;AAAA,GAAA;AAGF,EAAM,MAAA,CAAE,uBAAuB,kBAAuB,CAAA,GAAA,gBAAA,CAAA;AAGtD,EAAmB,kBAAA,CAAA,gBAAA,CAAiB,KAAK,SAAW,EAAA;AAAA,IAClD,KAAO,EAAA,aAAA;AAAA,IACP,KAAO,EAAA,aAAA;AAAA,GAAA,CAAA,CAAA;AAET,EAAA,MAAM,CAAE,oBAAA,CAAA,GAAyB,kBAAmB,CAAA,iBAAA,CAClD,WACA,gBAAiB,CAAA,IAAA,CAAA,CAAA;AAGnB,EAAA,kBAAA,CAAmB,qBAAsB,CAAA,oBAAA,CAAA,CAAA;AAGzC,EAAA,MAAM,CAAE,SAAA,EAAW,IAAS,CAAA,GAAA,kBAAA,CAAmB,6BAA8B,CAAA,SAAA,CAAA,CAAA;AAG7E,EAAA,kBAAA,CAAmB,OAAO,IAAO,GAAA,IAAA,CAAA;AACjC,EAAA,kBAAA,CAAmB,MAAO,CAAA,sBAAA,EAAA,CAAA;AAC1B,EAAmB,kBAAA,CAAA,MAAA,EAAA,CAAA;AAGnB,EAAsB,qBAAA,CAAA,YAAA,EAAA,CAAA;AACtB,EAAA,qBAAA,CAAsB,kBAAmB,CAAA,IAAA,CAAA,CAAA;AACzC,EAAA,qBAAA,CAAsB,sBACpB,CAAA;AAAA,IACE;AAAA,MACE,IAAI,UAAW,CAAA,EAAA;AAAA,MACf,SAAW,EAAA,SAAA;AAAA,MACX,aAAe,EAAA,EAAA;AAAA,MACf,MAAQ,EAAA,IAAA;AAAA,KAAA;AAAA,GAAA,EAGZ,UAAW,CAAA,EAAA,CAAA,CAAA;AAAA,EAAA;AASR,MAAM,mBAAsB,GAAA,CACjC,SACA,EAAA,UAAA,EACA,kBACA,GACG,KAAA;AACH,EAAA,IAAI,CAAC,gBAAkB,EAAA;AACrB,IAAA,OAAA;AAAA,GAAA;AAGF,EAAM,MAAA;AAAA,IACJ,qBAAuB,EAAA,8BAAA;AAAA,IACvB,kBAAoB,EAAA,cAAA;AAAA,GAClB,GAAA,gBAAA,CAAA;AAGJ,EAAA,cAAA,CAAe,iBAAiB,GAAK,EAAA,SAAA,EAAW,CAAE,MAAA,EAAQ,eAAe,KAAO,EAAA,aAAA,CAAA,CAAA,CAAA;AAChF,EAAA,MAAM,CAAE,oBAAA,CAAA,GAAyB,cAAe,CAAA,iBAAA,CAC9C,WACA,gBAAiB,CAAA,IAAA,CAAA,CAAA;AAGnB,EAAA,cAAA,CAAe,qBAAsB,CAAA,oBAAA,CAAA,CAAA;AAGrC,EAAA,MAAM,CAAE,SAAA,EAAW,IAAS,CAAA,GAAA,cAAA,CAAe,6BAA8B,CAAA,SAAA,CAAA,CAAA;AAGzE,EAAA,cAAA,CAAe,OAAO,IAAO,GAAA,IAAA,CAAA;AAC7B,EAAA,cAAA,CAAe,MAAO,CAAA,sBAAA,EAAA,CAAA;AACtB,EAAe,cAAA,CAAA,MAAA,EAAA,CAAA;AAGf,EAA+B,8BAAA,CAAA,YAAA,EAAA,CAAA;AAC/B,EAAA,8BAAA,CAA+B,kBAAmB,CAAA,IAAA,CAAA,CAAA;AAClD,EAAA,8BAAA,CAA+B,sBAC7B,CAAA;AAAA,IACE;AAAA,MACE,IAAI,UAAW,CAAA,EAAA;AAAA,MACf,SAAW,EAAA,SAAA;AAAA,MACX,aAAe,EAAA,EAAA;AAAA,MACf,MAAQ,EAAA,IAAA;AAAA,KAAA;AAAA,GAAA,EAGZ,UAAW,CAAA,EAAA,CAAA,CAAA;AAAA,EAAA;AASR,MAAM,kBAAqB,GAAA,CAChC,YACA,EAAA,UAAA,EACA,iBACA,gBACG,KAAA;AACH,EAAI,IAAA,CAAC,eAAmB,IAAA,CAAC,gBAAkB,EAAA;AACzC,IAAA,OAAA;AAAA,GAAA;AAIF,EAAiB,gBAAA,CAAA,WAAA,CAAY,cAAc,UAAW,CAAA,EAAA,CAAA,CAAA;AACtD,EAAiB,gBAAA,CAAA,iBAAA,CAAkB,cAAc,gBAAiB,CAAA,GAAA,CAAA,CAAA;AAClE,EAAiB,gBAAA,CAAA,MAAA,EAAA,CAAA;AAEjB,EAAM,MAAA,CAAE,uBAAuB,kBAAuB,CAAA,GAAA,eAAA,CAAA;AAEtD,EAAM,MAAA,CAAE,SAAc,CAAA,GAAA,kBAAA,CAAmB,4BAA6B,CAAA,YAAA,CAAA,CAAA;AAEtE,EAAM,MAAA,cAAA,GAAiB,CAAC,GAAG,qBAAsB,CAAA,WAAA,CAAA,CAAA;AACjD,EAAA,MAAM,aAAa,cAAe,CAAA,IAAA,CAAK,CAAC,CAAM,KAAA,CAAA,CAAE,OAAO,UAAW,CAAA,EAAA,CAAA,CAAA;AAClE,EAAA,IAAI,UAAY,EAAA;AACd,IAAA,UAAA,CAAW,SAAY,GAAA,SAAA,CAAA;AAAA,GAClB,MAAA;AACL,IAAA,cAAA,CAAe,IAAK,CAAA;AAAA,MAClB,IAAI,UAAW,CAAA,EAAA;AAAA,MACf,SAAW,EAAA,SAAA;AAAA,MACX,aAAe,EAAA,EAAA;AAAA,MACf,MAAQ,EAAA,IAAA;AAAA,KAAA,CAAA,CAAA;AAAA,GAAA;AAIZ,EAAsB,qBAAA,CAAA,sBAAA,CAAuB,gBAAgB,UAAW,CAAA,EAAA,CAAA,CAAA;AAAA,EAAA;AAGnE,MAAM,qBAAqB,MAAM;AACtC,EAAM,MAAA;AAAA,IACJ,eAAA;AAAA,IACA,gBAAA;AAAA,IACA,gBAAA;AAAA,IACA,gBAAA;AAAA,IACA,gBAAA;AAAA,IACA,cAAA;AAAA,IACA,WAAA;AAAA,IACA,iBAAA;AAAA,GAAA,GACE,UAAW,CAAA,iBAAA,CAAA,CAAA;AACf,EAAA,MAAM,CAAE,iBAAsB,CAAA,GAAA,YAAA,EAAA,CAAA;AAE9B,EAAM,MAAA,WAAA,GAAc,YAClB,CAAC,KAAA,KAAoB,MAAM,UAAW,CAAA,OAAA,CAAQ,MAAM,UAAW,CAAA,QAAA,CAAA,CAAA,CAAA;AAGjE,EAAA,MAAM,CAAE,WAAgB,CAAA,GAAA,YAAA,EAAA,CAAA;AAExB,EAAA,MAAM,wBAAwB,WAAa,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,WAAA,CAAA,IAAA,CAAA;AAE3C,EAAI,IAAA,CAAC,eAAmB,IAAA,CAAC,gBAAkB,EAAA;AACzC,IAAO,OAAA;AAAA,MACL,eAAe,MAAM;AAAA,OAAA;AAAA,MACrB,wBAAwB,MAAM;AAAA,OAAA;AAAA,MAC9B,mBAAmB,MAAM;AAAA,OAAA;AAAA,KAAA,CAAA;AAAA,GAAA;AAI7B,EAAM,MAAA,CAAE,oBAAoB,iBAAsB,CAAA,GAAA,eAAA,CAAA;AAElD,EAAA,MAAM,iBAAiB,MAAM;AAvT/B,IAAA,IAAA,EAAA,CAAA;AAwTI,IAAI,IAAA,iBAAA,CAAkB,SAAS,CAAG,EAAA;AAChC,MAAM,MAAA,YAAA,GAAe,kBAAkB,IAAK,CAAA,CAAC,GAAG,CAAM,KAAA,CAAA,CAAE,UAAU,CAAE,CAAA,OAAA,CAAA,CAAA;AACpE,MAAA,OAAO,CAAa,CAAA,EAAA,GAAA,YAAA,CAAA,KAAA,CAAM,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,KAAvB,mBAA2B,OAAU,IAAA,CAAA,CAAA;AAAA,KAAA;AAG9C,IAAO,OAAA,CAAA,CAAA;AAAA,GAAA,CAAA;AAGT,EAAM,MAAA,cAAA,GAAiB,CAAC,SAA8B,KAAA;AACpD,IAAA,gBAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,gBAAA,CAAkB,WAAY,CAAA,SAAA,CAAA,CAAA;AAC9B,IAAA,gBAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,gBAAA,CAAkB,QAAS,CAAA,MAAA,EAAA,CAAA;AAC3B,IAAkB,gBAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,gBAAA,CAAA,MAAA,EAAA,CAAA;AAAA,GAAA,CAAA;AAIpB,EAAM,MAAA,aAAA,GAAgB,CAAC,UAAA,EAAiB,IAAgB,KAAA;AACtD,IAAM,MAAA,SAAA,GAAY,yBAA0B,CAAA,UAAA,EAAY,IAAM,EAAA,iBAAA,CAAA,CAAA;AAC9D,IAAA,MAAM,mBAAmB,eAAiB,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,eAAA,CAAA,qBAAA,CAAA;AAE1C,IAAM,MAAA,SAAA,GAA4B,MAAO,CAAA,MAAA,CAAO,SAAW,EAAA;AAAA,MACzD,OAAS,EAAA,cAAA,EAAA;AAAA,KAAA,CAAA,CAAA;AAGX,IAAiB,gBAAA,CAAA,cAAA,CAAe,CAAC,UAAW,CAAA,EAAA,CAAA,CAAA,CAAA;AAC5C,IAAA,cAAA,CAAe,SAAU,CAAA,EAAA,CAAA,CAAA;AACzB,IAAoB,mBAAA,CAAA,cAAA,CAAe,KAAK,UAAY,EAAA,SAAA,CAAA,CAAA;AACpD,IAAiB,gBAAA,CAAA,SAAA,CAAA,CAAA;AAAA,GAAA,CAAA;AAInB,EAAA,MAAM,yBAAyB,MAAM;AACnC,IAAA,MAAM,YAAY,WAAa,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,WAAA,CAAA,IAAA,CAAA;AAC/B,IAAA,MAAM,mBAAmB,eAAiB,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,eAAA,CAAA,qBAAA,CAAA;AAE1C,IAAA,gBAAA,CAAiB,cAAe,CAAA,WAAA,CAAA,CAAA;AAChC,IAAI,IAAA,CAAC,SAAa,IAAA,CAAC,gBAAkB,EAAA;AACnC,MAAA,OAAA;AAAA,KAAA;AAGF,IAAA,MAAM,UAAU,gBAAiB,CAAA,eAAA,CAAA;AACjC,IAAoB,mBAAA,CAAA,cAAA,CAAe,KAAK,OAAS,EAAA,SAAA,CAAA,CAAA;AAAA,GAAA,CAAA;AASnD,EAAA,MAAM,aAAgB,GAAA,CAAC,UAAiB,EAAA,aAAA,EAAoB,QAAqB,KAAA;AAC/E,IAAA,IAAI,qBAAuB,EAAA;AACzB,MAAA,MAAM,YAAe,GAAA,0BAAA,CACnB,UACA,EAAA,aAAA,EACA,uBACA,gBAAiB,CAAA,kBAAA,CAAA,CAAA;AAGnB,MAAkB,iBAAA,CAAA,YAAA,CAAA,CAAA;AAClB,MAAA,mBAAA,CAAoB,UAAU,UAAY,EAAA,YAAA,CAAA,CAAA;AAAA,KAAA;AAAA,GAAA,CAAA;AAI9C,EAAM,MAAA,iBAAA,GAAoB,CAAC,UAAA,EAAiB,aAAuB,KAAA;AACjE,IAAc,aAAA,CAAA,UAAA,EAAY,eAAe,cAAe,CAAA,IAAA,CAAA,CAAA;AAAA,GAAA,CAAA;AAG1D,EAAM,MAAA,iBAAA,GAAoB,CAAC,UAAA,EAAiB,aAAuB,KAAA;AACjE,IAAc,aAAA,CAAA,UAAA,EAAY,eAAe,cAAe,CAAA,IAAA,CAAA,CAAA;AAAA,GAAA,CAAA;AAQ1D,EAAM,MAAA,gBAAA,GAAmB,CAAC,OAAA,EAAc,IAAgB,KAAA;AACtD,IAAA,IAAI,qBAAuB,EAAA;AACzB,MAAA,MAAM,YAAe,GAAA,yBAAA,CACnB,OACA,EAAA,IAAA,EACA,KACA,CAAA,EAAA,qBAAA,CAAA,CAAA;AAGF,MAAO,MAAA,CAAA,MAAA,CACL,qBACA,EAAA,CAAA,CAAE,MAAO,CAAA,YAAA,EAAc,CAAC,CAAA,EAAG,CAAM,KAAA,CAAC,OAAS,EAAA,QAAA,EAAU,GAAK,EAAA,GAAA,CAAA,CAAA,CAAA,CAAA;AAG5D,MAAkB,iBAAA,CAAA,YAAA,CAAA,CAAA;AAClB,MAAoB,mBAAA,CAAA,cAAA,CAAe,KAAK,OAAS,EAAA,qBAAA,CAAA,CAAA;AAAA,KAAA;AAAA,GAAA,CAAA;AAUrD,EAAA,MAAM,mBAAsB,GAAA,CAAC,QAAkB,EAAA,OAAA,EAAc,SAA8B,KAAA;AACzF,IAAA,MAAM,UAAU,WAAa,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,WAAA,CAAA,GAAA,CAAA;AAE7B,IAAA,MAAM,eAAkB,GAAA;AAAA,MACrB,CAAA,cAAA,CAAe,OAAO,MAAM;AAC3B,QAAoB,mBAAA,CAAA,SAAA,EAAW,SAAS,gBAAkB,EAAA,OAAA,CAAA,CAAA;AAAA,OAAA;AAAA,MAE3D,CAAA,cAAA,CAAe,OAAO,MAAM;AAC3B,QAAA,IAAI,gBAAkB,EAAA;AACpB,UAAoB,mBAAA,CAAA,SAAA,EAAW,SAAS,gBAAkB,EAAA,OAAA,CAAA,CAAA;AAAA,SAAA;AAAA,OAAA;AAAA,MAG7D,CAAA,cAAA,CAAe,MAAM,MAAM;AAC1B,QAAmB,kBAAA,CAAA,SAAA,EAAW,SAAS,eAAiB,EAAA,gBAAA,CAAA,CAAA;AAAA,OAAA;AAAA,KAAA,CAAA;AAI5D,IAAA,MAAA,CAAO,IAAK,CAAA,eAAA,CAAA,CAAiB,OAAQ,CAAA,CAAC,GAAQ,KAAA;AAC5C,MAAA,IAAI,QAAQ,QAAU,EAAA;AACpB,QAAgB,eAAA,CAAA,GAAA,CAAA,EAAA,CAAA;AAAA,OAAA;AAAA,KAAA,CAAA,CAAA;AAGpB,IAAe,cAAA,CAAA,SAAA,CAAA,CAAA;AACf,IAAA,gBAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,gBAAA,CAAkB,0BAA2B,CAAA,SAAA,CAAA,CAAA;AAAA,GAAA,CAAA;AAG/C,EAAM,MAAA,wBAAA,GAA2B,CAAC,QAA+B,KAAA;AAC/D,IAAA,eAAA,CAAgB,iBAAkB,CAAA,QAAA,CAAA,CAAA;AAClC,IAAA,gBAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,gBAAA,CAAkB,aAAc,CAAA,QAAA,CAAA,CAAA;AAAA,GAAA,CAAA;AAGlC,EAAO,OAAA;AAAA,IACL,aAAA;AAAA,IACA,sBAAA;AAAA,IACA,gBAAA;AAAA,IACA,iBAAA;AAAA,IACA,iBAAA;AAAA,IACA,wBAAA;AAAA,GAAA,CAAA;AAAA;;;;"}
1
+ {"version":3,"file":"usePointCloudViews.js","sources":["../../../../src/components/pointCloudView/hooks/usePointCloudViews.ts"],"sourcesContent":["/**\n * @file Point cloud interface for crud\n * @author Glenfiddish <edwinlee0927@hotmail.com>\n * @createdate 2022-08-17\n */\nimport { PointCloudAnnotation, PointCloud, MathUtils } from '@labelbee/lb-annotation';\nimport { IPointCloudBox, EPerspectiveView, PointCloudUtils } from '@labelbee/lb-utils';\nimport { useContext } from 'react';\nimport { PointCloudContext } from '../PointCloudContext';\nimport { useSingleBox } from './useSingleBox';\nimport { ISize } from '@/types/main';\nimport _ from 'lodash';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { AppState } from '@/store';\nimport StepUtils from '@/utils/StepUtils';\nimport { jsonParser } from '@/utils';\nimport { SetPointCloudLoading } from '@/store/annotation/actionCreators';\n\nconst DEFAULT_SCOPE = 5;\nconst DEFAULT_RADIUS = 90;\n\nconst PointCloudView = {\n '3D': '3D',\n Top: 'Top',\n Side: 'Side',\n Back: 'Back',\n};\n\n/**\n * Get the coordinate from canvas2d-coordinate to world coordinate\n */\nexport const transferCanvas2World = (\n currentPos: { x: number; y: number },\n size: { width: number; height: number },\n) => {\n const { width: w, height: h } = size;\n const { x, y } = currentPos;\n\n // x-Axis is the Positive Direction, so the x-coordinates need to be swapped with the y-coordinates\n return {\n x: -y + h / 2,\n y: -(x - w / 2),\n };\n};\n\nexport const topViewPolygon2PointCloud = (\n newPolygon: any,\n size: ISize,\n pointCloud?: PointCloud,\n selectedPointCloud?: IPointCloudBox,\n defaultValue?: { [v: string]: any },\n) => {\n const [point1, point2, point3, point4] = newPolygon.pointList.map((v: any) =>\n transferCanvas2World(v, size),\n );\n\n const centerPoint = MathUtils.getLineCenterPoint([point1, point3]);\n const height = MathUtils.getLineLength(point1, point2);\n const width = MathUtils.getLineLength(point2, point3);\n const rotation = MathUtils.getRadiusFromQuadrangle(newPolygon.pointList);\n let z = 0;\n let depth = 1;\n if (pointCloud) {\n const zInfo = pointCloud.getSensesPointZAxisInPolygon([point1, point2, point3, point4]);\n z = (zInfo.maxZ + zInfo.minZ) / 2;\n depth = zInfo.maxZ - zInfo.minZ;\n }\n\n if (selectedPointCloud) {\n z = selectedPointCloud.center.z;\n depth = selectedPointCloud.depth;\n }\n\n /** TrackID will append before it pushed */\n const boxParams: Omit<IPointCloudBox, 'trackID'> = {\n center: {\n x: centerPoint.x,\n y: centerPoint.y,\n z,\n },\n width,\n height,\n depth,\n rotation: rotation,\n id: newPolygon.id,\n attribute: '',\n valid: true,\n };\n\n if (defaultValue) {\n Object.assign(boxParams, defaultValue);\n }\n\n return boxParams;\n};\n\nconst sideViewPolygon2PointCloud = (\n newPolygon: any,\n originPolygon: any,\n selectedPointCloudBox: IPointCloudBox,\n pointCloudInstance: PointCloud,\n) => {\n const [point1, point2, point3] = newPolygon.pointList;\n const [op1, op2, op3] = originPolygon.pointList;\n\n // 2D centerPoint => 3D x & z\n const newCenterPoint = MathUtils.getLineCenterPoint([point1, point3]);\n const oldCenterPoint = MathUtils.getLineCenterPoint([op1, op3]);\n\n const offset = {\n x: newCenterPoint.x - oldCenterPoint.x,\n y: newCenterPoint.y - oldCenterPoint.y,\n };\n\n const cos = Math.cos(selectedPointCloudBox.rotation);\n const sin = Math.sin(selectedPointCloudBox.rotation);\n\n const offsetCenterPoint = {\n x: offset.x,\n y: offset.x * sin + offset.y * cos,\n z: newCenterPoint.y - oldCenterPoint.y,\n };\n\n // 2D height => 3D depth\n const height = MathUtils.getLineLength(point1, point2);\n const oldHeight = MathUtils.getLineLength(op1, op2);\n const offsetHeight = height - oldHeight; // 3D depth\n\n // 2D width => 3D width\n const width = MathUtils.getLineLength(point2, point3);\n const oldWidth = MathUtils.getLineLength(op2, op3);\n const offsetWidth = width - oldWidth; // 3D width\n\n const { newBoxParams } = pointCloudInstance.getNewBoxBySideUpdate(\n offsetCenterPoint,\n offsetWidth,\n offsetHeight,\n selectedPointCloudBox,\n );\n\n return newBoxParams;\n};\n\n/**\n * NewBox synchronize sideView\n * @param boxParams\n * @param newPolygon TODO! Need to add type\n */\nexport const synchronizeSideView = (\n boxParams: IPointCloudBox,\n newPolygon: any,\n sideViewInstance: PointCloudAnnotation | undefined,\n url: string,\n) => {\n if (!sideViewInstance) {\n return;\n }\n\n const { pointCloud2dOperation, pointCloudInstance } = sideViewInstance;\n\n // Create PointCloud\n pointCloudInstance.loadPCDFileByBox(url, boxParams, {\n width: DEFAULT_SCOPE,\n depth: DEFAULT_SCOPE,\n });\n const { cameraPositionVector } = pointCloudInstance.updateOrthoCamera(\n boxParams,\n EPerspectiveView.Left,\n );\n\n pointCloudInstance.setInitCameraPosition(cameraPositionVector);\n\n // Create Draw Polygon\n const { polygon2d, zoom } = pointCloudInstance.getBoxSidePolygon2DCoordinate(boxParams);\n\n // Synchronize SidePointCloud zoom with PointCloud2dOperation\n pointCloudInstance.camera.zoom = zoom;\n pointCloudInstance.camera.updateProjectionMatrix();\n pointCloudInstance.render();\n\n // Update PolygonView to default zoom and currentPos.\n pointCloud2dOperation.initPosition();\n pointCloud2dOperation.zoomChangeOnCenter(zoom);\n pointCloud2dOperation.setResultAndSelectedID(\n [\n {\n id: newPolygon.id,\n pointList: polygon2d,\n textAttribute: '',\n isRect: true,\n },\n ],\n newPolygon.id,\n );\n};\n\n/**\n * NewBox synchronize backView\n * @param boxParams\n * @param newPolygon TODO! Need to add type\n */\nexport const synchronizeBackView = (\n boxParams: IPointCloudBox,\n newPolygon: any,\n BackViewInstance: PointCloudAnnotation,\n url: string,\n) => {\n if (!BackViewInstance) {\n return;\n }\n\n const {\n pointCloud2dOperation: backPointCloudPolygonOperation,\n pointCloudInstance: backPointCloud,\n } = BackViewInstance;\n\n // Create PointCloud\n backPointCloud.loadPCDFileByBox(url, boxParams, { height: DEFAULT_SCOPE, depth: DEFAULT_SCOPE });\n const { cameraPositionVector } = backPointCloud.updateOrthoCamera(\n boxParams,\n EPerspectiveView.Back,\n );\n\n backPointCloud.setInitCameraPosition(cameraPositionVector);\n\n // Create Draw Polygon\n const { polygon2d, zoom } = backPointCloud.getBoxBackPolygon2DCoordinate(boxParams);\n\n // Synchronize SidePointCloud zoom with PointCloud2dOperation\n backPointCloud.camera.zoom = zoom;\n backPointCloud.camera.updateProjectionMatrix();\n backPointCloud.render();\n\n // Update PolygonView to default zoom and currentPos.\n backPointCloudPolygonOperation.initPosition();\n backPointCloudPolygonOperation.zoomChangeOnCenter(zoom);\n backPointCloudPolygonOperation.setResultAndSelectedID(\n [\n {\n id: newPolygon.id,\n pointList: polygon2d,\n textAttribute: '',\n isRect: true,\n },\n ],\n newPolygon.id,\n );\n};\n\n/**\n * NewBox synchronize TopView\n * @param boxParams\n * @param newPolygon TODO! Need to add type\n */\nexport const synchronizeTopView = (\n newBoxParams: IPointCloudBox,\n newPolygon: any,\n topViewInstance?: PointCloudAnnotation,\n mainViewInstance?: PointCloud,\n) => {\n if (!topViewInstance || !mainViewInstance) {\n return;\n }\n\n // Control the 3D view data to create box\n mainViewInstance.generateBox(newBoxParams, newPolygon.id);\n mainViewInstance.updateCameraByBox(newBoxParams, EPerspectiveView.Top);\n mainViewInstance.render();\n\n const { pointCloud2dOperation, pointCloudInstance } = topViewInstance;\n\n const { polygon2d } = pointCloudInstance.getBoxTopPolygon2DCoordinate(newBoxParams);\n\n const newPolygonList = [...pointCloud2dOperation.polygonList];\n const oldPolygon = newPolygonList.find((v) => v.id === newPolygon.id);\n if (oldPolygon) {\n oldPolygon.pointList = polygon2d;\n } else {\n newPolygonList.push({\n id: newPolygon.id,\n pointList: polygon2d,\n textAttribute: '',\n isRect: true,\n });\n }\n\n pointCloud2dOperation.setResultAndSelectedID(newPolygonList, newPolygon.id);\n};\n\nexport const usePointCloudViews = () => {\n const ptCtx = useContext(PointCloudContext);\n const {\n topViewInstance,\n sideViewInstance,\n backViewInstance,\n mainViewInstance,\n addPointCloudBox,\n setSelectedIDs,\n selectedIDs,\n pointCloudBoxList,\n setPointCloudResult,\n } = ptCtx;\n const { updateSelectedBox } = useSingleBox();\n const { currentData, config } = useSelector((state: AppState) => {\n const { stepList, step, imgList, imgIndex } = state.annotation;\n\n return {\n currentData: imgList[imgIndex],\n config: jsonParser(StepUtils.getCurrentStepInfo(step, stepList).config),\n };\n });\n const dispatch = useDispatch();\n const { selectedBox } = useSingleBox();\n\n const selectedPointCloudBox = selectedBox?.info;\n\n if (!topViewInstance || !sideViewInstance) {\n return {\n topViewAddBox: () => {},\n topViewSelectedChanged: () => {},\n sideViewUpdateBox: () => {},\n };\n }\n\n const { pointCloudInstance: topViewPointCloud } = topViewInstance;\n\n const getNextTrackID = () => {\n if (pointCloudBoxList.length > 0) {\n const sortedPcList = pointCloudBoxList.sort((a, b) => a.trackID - b.trackID);\n return sortedPcList.slice(-1)[0]?.trackID + 1;\n }\n\n return 1;\n };\n\n const mainViewGenBox = (boxParams: IPointCloudBox) => {\n mainViewInstance?.generateBox(boxParams);\n mainViewInstance?.controls.update();\n mainViewInstance?.render();\n };\n\n /** Top-view create box from 2D */\n const topViewAddBox = (newPolygon: any, size: ISize) => {\n const newParams = topViewPolygon2PointCloud(newPolygon, size, topViewPointCloud, undefined, {\n attribute: config?.attributeList?.[0]?.value ?? '',\n });\n const polygonOperation = topViewInstance?.pointCloud2dOperation;\n\n const boxParams: IPointCloudBox = Object.assign(newParams, {\n trackID: getNextTrackID(),\n });\n\n polygonOperation.setSelectedIDs([newPolygon.id]);\n setSelectedIDs(boxParams.id);\n syncPointCloudViews(PointCloudView.Top, newPolygon, boxParams);\n addPointCloudBox(boxParams);\n };\n\n /** Top-view selected changed and render to other view */\n const topViewSelectedChanged = () => {\n const boxParams = selectedBox?.info;\n const polygonOperation = topViewInstance?.pointCloud2dOperation;\n\n polygonOperation.setSelectedIDs(selectedIDs);\n if (!boxParams || !polygonOperation) {\n return;\n }\n\n const polygon = polygonOperation.selectedPolygon;\n syncPointCloudViews(PointCloudView.Top, polygon, boxParams);\n };\n\n /**\n * Update box from view\n * @param newPolygon\n * @param originPolygon\n * @param fromView Back or Side\n */\n const viewUpdateBox = (newPolygon: any, originPolygon: any, fromView: string) => {\n if (selectedPointCloudBox) {\n const newBoxParams = sideViewPolygon2PointCloud(\n newPolygon,\n originPolygon,\n selectedPointCloudBox,\n sideViewInstance.pointCloudInstance,\n );\n\n updateSelectedBox(newBoxParams);\n syncPointCloudViews(fromView, newPolygon, newBoxParams);\n }\n };\n\n const sideViewUpdateBox = (newPolygon: any, originPolygon: any) => {\n viewUpdateBox(newPolygon, originPolygon, PointCloudView.Side);\n };\n\n const backViewUpdateBox = (newPolygon: any, originPolygon: any) => {\n viewUpdateBox(newPolygon, originPolygon, PointCloudView.Back);\n };\n\n /**\n * Top view box updated and sync views\n * @param polygon\n * @param size\n */\n const topViewUpdateBox = (polygon: any, size: ISize) => {\n if (selectedPointCloudBox) {\n const newBoxParams = topViewPolygon2PointCloud(\n polygon,\n size,\n undefined,\n selectedPointCloudBox,\n );\n\n Object.assign(\n selectedPointCloudBox,\n _.pickBy(newBoxParams, (v, k) => ['width', 'height', 'x', 'y']),\n );\n\n updateSelectedBox(newBoxParams);\n syncPointCloudViews(PointCloudView.Top, polygon, selectedPointCloudBox);\n }\n };\n\n /**\n * Sync views' data from omit view, regenerate and highlight box on 3D-view\n * @param omitView\n * @param polygon\n * @param boxParams\n */\n const syncPointCloudViews = (omitView: string, polygon: any, boxParams: IPointCloudBox) => {\n const dataUrl = currentData?.url;\n\n const viewToBeUpdated = {\n [PointCloudView.Side]: () => {\n synchronizeSideView(boxParams, polygon, sideViewInstance, dataUrl);\n },\n [PointCloudView.Back]: () => {\n if (backViewInstance) {\n synchronizeBackView(boxParams, polygon, backViewInstance, dataUrl);\n }\n },\n [PointCloudView.Top]: () => {\n synchronizeTopView(boxParams, polygon, topViewInstance, mainViewInstance);\n },\n };\n\n Object.keys(viewToBeUpdated).forEach((key) => {\n if (key !== omitView) {\n viewToBeUpdated[key]();\n }\n });\n mainViewGenBox(boxParams);\n mainViewInstance?.highlightOriginPointCloud(boxParams);\n };\n\n const pointCloudBoxListUpdated = (newBoxes: IPointCloudBox[]) => {\n topViewInstance.updatePolygonList(newBoxes);\n mainViewInstance?.generateBoxes(newBoxes);\n };\n\n const clearAllResult = () => {\n // Clear All PointView Data\n pointCloudBoxList.forEach((v) => {\n mainViewInstance?.removeObjectByName(v.id);\n });\n mainViewInstance?.render();\n\n setPointCloudResult([]);\n topViewInstance.pointCloud2dOperation.clearActiveStatus();\n topViewInstance.pointCloud2dOperation.clearResult();\n };\n\n const initPointCloud3d = () => {\n if (!mainViewInstance) {\n return;\n }\n\n mainViewInstance.initPerspectiveCamera();\n mainViewInstance.initRenderer();\n mainViewInstance.render();\n };\n\n /**\n * Update the data of pointCloudView when the page change.\n * @returns\n */\n const updatePointCloudData = async () => {\n if (!currentData?.url || !mainViewInstance) {\n return;\n }\n\n SetPointCloudLoading(dispatch, true);\n await mainViewInstance.loadPCDFile(currentData.url, config?.radius ?? DEFAULT_RADIUS);\n\n // Clear All Data\n pointCloudBoxList.forEach((v) => {\n mainViewInstance?.removeObjectByName(v.id);\n });\n\n if (currentData.result) {\n const boxParamsList = PointCloudUtils.getBoxParamsFromResultList(currentData.result);\n const polygonList = PointCloudUtils.getPolygonListFromResultList(currentData.result);\n\n // Add Init Box\n boxParamsList.forEach((v: IPointCloudBox) => {\n mainViewInstance?.generateBox(v);\n });\n\n ptCtx.setPointCloudResult(boxParamsList);\n ptCtx.setPolygonList(polygonList);\n } else {\n ptCtx.setPointCloudResult([]);\n ptCtx.setPolygonList([]);\n }\n\n mainViewInstance.updateTopCamera();\n\n const valid = jsonParser(currentData.result)?.valid ?? true;\n ptCtx.setPointCloudValid(valid);\n\n // Clear other view data during initialization\n ptCtx.sideViewInstance?.clearAllData();\n ptCtx.backViewInstance?.clearAllData();\n\n // TopView Data Update\n /**\n * Listen to flip\n * 1. Init\n * 2. Reload PointCloud\n * 3. Clear Polygon\n */\n topViewInstance.updateData(currentData.url, currentData.result, {\n radius: config?.radius ?? DEFAULT_RADIUS,\n });\n SetPointCloudLoading(dispatch, false);\n };\n\n return {\n topViewAddBox,\n topViewSelectedChanged,\n topViewUpdateBox,\n sideViewUpdateBox,\n backViewUpdateBox,\n pointCloudBoxListUpdated,\n clearAllResult,\n initPointCloud3d,\n updatePointCloudData,\n };\n};\n"],"names":["this"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ import{useContext as s}from"react";import{PointCloudContext as d}from"../PointCloudContext.js";const i=()=>{const{polygonList:t,setPolygonList:n}=s(d);return{addPolygon:o=>{n(t.concat(o))},deletePolygon:o=>{const e=t.filter(l=>l.id!==o);n([...e])}}};export{i as usePolygon};
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePolygon.js","sources":["../../../../src/components/pointCloudView/hooks/usePolygon.ts"],"sourcesContent":["import { IPolygonData } from '@labelbee/lb-utils';\nimport { useContext } from 'react';\nimport { PointCloudContext } from '../PointCloudContext';\n\n\n/**\n * PointCloud Polygon Hook\n * @returns\n */\nexport const usePolygon = () => {\n const { polygonList, setPolygonList} = useContext(PointCloudContext);\n\n const addPolygon = (polygon: IPolygonData) => {\n setPolygonList(polygonList.concat(polygon));\n }\n\n const deletePolygon = (id: string) => {\n const newPolygonList = polygonList.filter(v => v.id !== id);\n setPolygonList([...newPolygonList])\n }\n \n return { addPolygon, deletePolygon };\n};\n"],"names":[],"mappings":";;;AASO,MAAM,aAAa,MAAM;AAC9B,EAAM,MAAA,CAAE,WAAa,EAAA,cAAA,CAAA,GAAkB,UAAW,CAAA,iBAAA,CAAA,CAAA;AAElD,EAAM,MAAA,UAAA,GAAa,CAAC,OAA0B,KAAA;AAC5C,IAAA,cAAA,CAAe,YAAY,MAAO,CAAA,OAAA,CAAA,CAAA,CAAA;AAAA,GAAA,CAAA;AAGpC,EAAM,MAAA,aAAA,GAAgB,CAAC,EAAe,KAAA;AACpC,IAAA,MAAM,cAAiB,GAAA,WAAA,CAAY,MAAO,CAAA,CAAA,CAAA,KAAK,EAAE,EAAO,KAAA,EAAA,CAAA,CAAA;AACxD,IAAA,cAAA,CAAe,CAAC,GAAG,cAAA,CAAA,CAAA,CAAA;AAAA,GAAA,CAAA;AAGrB,EAAA,OAAO,CAAE,UAAY,EAAA,aAAA,CAAA,CAAA;AAAA;;;;"}
@@ -1 +1 @@
1
- import{useContext as u,useCallback as a}from"react";import{synchronizeSideView as p,synchronizeBackView as C}from"./usePointCloudViews.js";import{useSingleBox as m}from"./useSingleBox.js";import{PointCloudContext as x}from"../PointCloudContext.js";import{cAnnotation as P}from"@labelbee/lb-annotation";const{ERotateDirection:w}=P,g=({currentData:e})=>{const o=u(x),{selectedBox:i,updateSelectedBox:d}=m();return{updateRotate:a(s=>{const{topViewInstance:l,mainViewInstance:n}=o;if(!l||!n)return;const{pointCloud2dOperation:c}=l,t=i==null?void 0:i.info;if(!t||!(e==null?void 0:e.url)||!o.backViewInstance)return;d({rotation:t.rotation+Number(Math.PI*s)/180}),c.rotatePolygon(s,w.Anticlockwise);const r=c.selectedPolygon;n.generateBox(t),n.hightLightOriginPointCloud(t),p(t,r,o.sideViewInstance,e.url),C(t,r,o.backViewInstance,e.url),n.render()},[o.selectedID,o.pointCloudBoxList,o.setPointCloudResult,o.topViewInstance,e])}};export{g as useRotate};
1
+ import{useContext as u,useCallback as a}from"react";import{synchronizeSideView as p,synchronizeBackView as C}from"./usePointCloudViews.js";import{useSingleBox as m}from"./useSingleBox.js";import{PointCloudContext as x}from"../PointCloudContext.js";import{cAnnotation as P}from"@labelbee/lb-annotation";const{ERotateDirection:w}=P,g=({currentData:e})=>{const o=u(x),{selectedBox:i,updateSelectedBox:d}=m();return{updateRotate:a(s=>{const{topViewInstance:l,mainViewInstance:n}=o;if(!l||!n)return;const{pointCloud2dOperation:c}=l,t=i==null?void 0:i.info;if(!t||!(e==null?void 0:e.url)||!o.backViewInstance)return;d({rotation:t.rotation+Number(Math.PI*s)/180}),c.rotatePolygon(s,w.Anticlockwise);const r=c.selectedPolygon;n.generateBox(t),n.highlightOriginPointCloud(t),p(t,r,o.sideViewInstance,e.url),C(t,r,o.backViewInstance,e.url),n.render()},[o.selectedID,o.pointCloudBoxList,o.setPointCloudResult,o.topViewInstance,e])}};export{g as useRotate};
@@ -1 +1 @@
1
- {"version":3,"file":"useRotate.js","sources":["../../../../src/components/pointCloudView/hooks/useRotate.tsx"],"sourcesContent":["import { useCallback, useContext } from 'react';\nimport { IAnnotationStateProps } from '@/store/annotation/map';\nimport { synchronizeBackView, synchronizeSideView } from './usePointCloudViews';\nimport { useSingleBox } from './useSingleBox';\nimport { PointCloudContext } from '../PointCloudContext';\nimport { cAnnotation } from '@labelbee/lb-annotation';\n\nconst { ERotateDirection } = cAnnotation;\n\n/**\n * PointCloud Rotate Hook\n * @returns\n */\nexport const useRotate = ({ currentData }: IAnnotationStateProps) => {\n const ptCtx = useContext(PointCloudContext);\n const { selectedBox, updateSelectedBox } = useSingleBox();\n\n const updateRotate = useCallback(\n (angle: number) => {\n const { topViewInstance, mainViewInstance } = ptCtx;\n if (!topViewInstance || !mainViewInstance) {\n return;\n }\n\n const { pointCloud2dOperation: TopPointCloudPolygonOperation } = topViewInstance;\n\n const selectedPointCloudBox = selectedBox?.info;\n\n if (!selectedPointCloudBox || !currentData?.url || !ptCtx.backViewInstance) {\n return;\n }\n\n updateSelectedBox({\n rotation: selectedPointCloudBox.rotation + Number(Math.PI * angle) / 180,\n });\n\n TopPointCloudPolygonOperation.rotatePolygon(angle, ERotateDirection.Anticlockwise);\n const selectedPolygon = TopPointCloudPolygonOperation.selectedPolygon;\n\n mainViewInstance.generateBox(selectedPointCloudBox);\n mainViewInstance.hightLightOriginPointCloud(selectedPointCloudBox);\n synchronizeSideView(\n selectedPointCloudBox,\n selectedPolygon,\n ptCtx.sideViewInstance,\n currentData.url,\n );\n synchronizeBackView(\n selectedPointCloudBox,\n selectedPolygon,\n ptCtx.backViewInstance,\n currentData.url,\n );\n mainViewInstance.render();\n },\n [\n ptCtx.selectedID,\n ptCtx.pointCloudBoxList,\n ptCtx.setPointCloudResult,\n ptCtx.topViewInstance,\n currentData,\n ],\n );\n\n return { updateRotate };\n};\n"],"names":[],"mappings":";;;;;;AAOA,MAAM,CAAE,gBAAqB,CAAA,GAAA,WAAA,CAAA;AAMhB,MAAA,SAAA,GAAY,CAAC,CAAE,WAAyC,CAAA,KAAA;AACnE,EAAA,MAAM,QAAQ,UAAW,CAAA,iBAAA,CAAA,CAAA;AACzB,EAAM,MAAA,CAAE,aAAa,iBAAsB,CAAA,GAAA,YAAA,EAAA,CAAA;AAE3C,EAAM,MAAA,YAAA,GAAe,WACnB,CAAA,CAAC,KAAkB,KAAA;AACjB,IAAM,MAAA,CAAE,iBAAiB,gBAAqB,CAAA,GAAA,KAAA,CAAA;AAC9C,IAAI,IAAA,CAAC,eAAmB,IAAA,CAAC,gBAAkB,EAAA;AACzC,MAAA,OAAA;AAAA,KAAA;AAGF,IAAM,MAAA,CAAE,uBAAuB,6BAAkC,CAAA,GAAA,eAAA,CAAA;AAEjE,IAAA,MAAM,wBAAwB,WAAa,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,WAAA,CAAA,IAAA,CAAA;AAE3C,IAAA,IAAI,CAAC,qBAAyB,IAAA,6CAAc,GAAO,CAAA,IAAA,CAAC,MAAM,gBAAkB,EAAA;AAC1E,MAAA,OAAA;AAAA,KAAA;AAGF,IAAkB,iBAAA,CAAA;AAAA,MAChB,UAAU,qBAAsB,CAAA,QAAA,GAAW,MAAO,CAAA,IAAA,CAAK,KAAK,KAAS,CAAA,GAAA,GAAA;AAAA,KAAA,CAAA,CAAA;AAGvE,IAA8B,6BAAA,CAAA,aAAA,CAAc,OAAO,gBAAiB,CAAA,aAAA,CAAA,CAAA;AACpE,IAAA,MAAM,kBAAkB,6BAA8B,CAAA,eAAA,CAAA;AAEtD,IAAA,gBAAA,CAAiB,WAAY,CAAA,qBAAA,CAAA,CAAA;AAC7B,IAAA,gBAAA,CAAiB,0BAA2B,CAAA,qBAAA,CAAA,CAAA;AAC5C,IAAA,mBAAA,CACE,qBACA,EAAA,eAAA,EACA,KAAM,CAAA,gBAAA,EACN,WAAY,CAAA,GAAA,CAAA,CAAA;AAEd,IAAA,mBAAA,CACE,qBACA,EAAA,eAAA,EACA,KAAM,CAAA,gBAAA,EACN,WAAY,CAAA,GAAA,CAAA,CAAA;AAEd,IAAiB,gBAAA,CAAA,MAAA,EAAA,CAAA;AAAA,GAEnB,EAAA;AAAA,IACE,KAAM,CAAA,UAAA;AAAA,IACN,KAAM,CAAA,iBAAA;AAAA,IACN,KAAM,CAAA,mBAAA;AAAA,IACN,KAAM,CAAA,eAAA;AAAA,IACN,WAAA;AAAA,GAAA,CAAA,CAAA;AAIJ,EAAA,OAAO,CAAE,YAAA,CAAA,CAAA;AAAA;;;;"}
1
+ {"version":3,"file":"useRotate.js","sources":["../../../../src/components/pointCloudView/hooks/useRotate.ts"],"sourcesContent":["import { useCallback, useContext } from 'react';\nimport { IAnnotationStateProps } from '@/store/annotation/map';\nimport { synchronizeBackView, synchronizeSideView } from './usePointCloudViews';\nimport { useSingleBox } from './useSingleBox';\nimport { PointCloudContext } from '../PointCloudContext';\nimport { cAnnotation } from '@labelbee/lb-annotation';\n\nconst { ERotateDirection } = cAnnotation;\n\n/**\n * PointCloud Rotate Hook\n * @returns\n */\nexport const useRotate = ({ currentData }: IAnnotationStateProps) => {\n const ptCtx = useContext(PointCloudContext);\n const { selectedBox, updateSelectedBox } = useSingleBox();\n\n const updateRotate = useCallback(\n (angle: number) => {\n const { topViewInstance, mainViewInstance } = ptCtx;\n if (!topViewInstance || !mainViewInstance) {\n return;\n }\n\n const { pointCloud2dOperation: TopPointCloudPolygonOperation } = topViewInstance;\n\n const selectedPointCloudBox = selectedBox?.info;\n\n if (!selectedPointCloudBox || !currentData?.url || !ptCtx.backViewInstance) {\n return;\n }\n\n updateSelectedBox({\n rotation: selectedPointCloudBox.rotation + Number(Math.PI * angle) / 180,\n });\n\n TopPointCloudPolygonOperation.rotatePolygon(angle, ERotateDirection.Anticlockwise);\n const selectedPolygon = TopPointCloudPolygonOperation.selectedPolygon;\n\n mainViewInstance.generateBox(selectedPointCloudBox);\n mainViewInstance.highlightOriginPointCloud(selectedPointCloudBox);\n synchronizeSideView(\n selectedPointCloudBox,\n selectedPolygon,\n ptCtx.sideViewInstance,\n currentData.url,\n );\n synchronizeBackView(\n selectedPointCloudBox,\n selectedPolygon,\n ptCtx.backViewInstance,\n currentData.url,\n );\n mainViewInstance.render();\n },\n [\n ptCtx.selectedID,\n ptCtx.pointCloudBoxList,\n ptCtx.setPointCloudResult,\n ptCtx.topViewInstance,\n currentData,\n ],\n );\n\n return { updateRotate };\n};\n"],"names":[],"mappings":";;;;;;AAOA,MAAM,CAAE,gBAAqB,CAAA,GAAA,WAAA,CAAA;AAMhB,MAAA,SAAA,GAAY,CAAC,CAAE,WAAyC,CAAA,KAAA;AACnE,EAAA,MAAM,QAAQ,UAAW,CAAA,iBAAA,CAAA,CAAA;AACzB,EAAM,MAAA,CAAE,aAAa,iBAAsB,CAAA,GAAA,YAAA,EAAA,CAAA;AAE3C,EAAM,MAAA,YAAA,GAAe,WACnB,CAAA,CAAC,KAAkB,KAAA;AACjB,IAAM,MAAA,CAAE,iBAAiB,gBAAqB,CAAA,GAAA,KAAA,CAAA;AAC9C,IAAI,IAAA,CAAC,eAAmB,IAAA,CAAC,gBAAkB,EAAA;AACzC,MAAA,OAAA;AAAA,KAAA;AAGF,IAAM,MAAA,CAAE,uBAAuB,6BAAkC,CAAA,GAAA,eAAA,CAAA;AAEjE,IAAA,MAAM,wBAAwB,WAAa,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,WAAA,CAAA,IAAA,CAAA;AAE3C,IAAA,IAAI,CAAC,qBAAyB,IAAA,6CAAc,GAAO,CAAA,IAAA,CAAC,MAAM,gBAAkB,EAAA;AAC1E,MAAA,OAAA;AAAA,KAAA;AAGF,IAAkB,iBAAA,CAAA;AAAA,MAChB,UAAU,qBAAsB,CAAA,QAAA,GAAW,MAAO,CAAA,IAAA,CAAK,KAAK,KAAS,CAAA,GAAA,GAAA;AAAA,KAAA,CAAA,CAAA;AAGvE,IAA8B,6BAAA,CAAA,aAAA,CAAc,OAAO,gBAAiB,CAAA,aAAA,CAAA,CAAA;AACpE,IAAA,MAAM,kBAAkB,6BAA8B,CAAA,eAAA,CAAA;AAEtD,IAAA,gBAAA,CAAiB,WAAY,CAAA,qBAAA,CAAA,CAAA;AAC7B,IAAA,gBAAA,CAAiB,yBAA0B,CAAA,qBAAA,CAAA,CAAA;AAC3C,IAAA,mBAAA,CACE,qBACA,EAAA,eAAA,EACA,KAAM,CAAA,gBAAA,EACN,WAAY,CAAA,GAAA,CAAA,CAAA;AAEd,IAAA,mBAAA,CACE,qBACA,EAAA,eAAA,EACA,KAAM,CAAA,gBAAA,EACN,WAAY,CAAA,GAAA,CAAA,CAAA;AAEd,IAAiB,gBAAA,CAAA,MAAA,EAAA,CAAA;AAAA,GAEnB,EAAA;AAAA,IACE,KAAM,CAAA,UAAA;AAAA,IACN,KAAM,CAAA,iBAAA;AAAA,IACN,KAAM,CAAA,mBAAA;AAAA,IACN,KAAM,CAAA,eAAA;AAAA,IACN,WAAA;AAAA,GAAA,CAAA,CAAA;AAIJ,EAAA,OAAO,CAAE,YAAA,CAAA,CAAA;AAAA;;;;"}
@@ -1 +1 @@
1
- import{useContext as p,useMemo as B,useCallback as s}from"react";import u from"lodash";import{PointCloudContext as C}from"../PointCloudContext.js";import{cAnnotation as v}from"@labelbee/lb-annotation";const{ESortDirection:a}=v,P=()=>{const{pointCloudBoxList:t,setPointCloudResult:c,topViewInstance:d,selectedIDs:f,selectedID:i,mainViewInstance:l}=p(C),o=B(()=>{const e=t.findIndex(n=>n.id===i);if(e>-1)return{info:t[e],index:e}},[i,t]),r=s(e=>{(o==null?void 0:o.info)&&(t.splice(o.index,1,u.merge(o.info,e)),c(u.cloneDeep(t)))},[i,t]),m=s(()=>{(o==null?void 0:o.info)&&r({valid:!o.info.valid})},[i]),x=s((e=a.ascend)=>{if(!d||f.length>1)return;const{pointCloud2dOperation:n}=d;n.switchToNextPolygon(e)},[d]);return{selectedBox:o,updateSelectedBox:r,changeSelectedBoxValid:m,selectNextBox:x,selectPrevBox:()=>{x(a.descend)},deletePointCloudBox:e=>{c(t.filter(n=>n.id!==e)),l==null||l.removeObjectByName(e),l==null||l.render()}}};export{P as useSingleBox};
1
+ import{useContext as C,useMemo as v,useCallback as c}from"react";import a from"lodash";import{PointCloudContext as I}from"../PointCloudContext.js";import{cAnnotation as P}from"@labelbee/lb-annotation";const{ESortDirection:f}=P,b=()=>{const{pointCloudBoxList:t,setPointCloudResult:d,topViewInstance:s,selectedIDs:m,selectedID:i,mainViewInstance:l,setSelectedIDs:p}=C(I),o=v(()=>{const e=t.findIndex(n=>n.id===i);if(e>-1)return{info:t[e],index:e}},[i,t]),r=c(e=>{(o==null?void 0:o.info)&&(t.splice(o.index,1,a.merge(o.info,e)),d(a.cloneDeep(t)))},[i,t]),B=c(()=>{(o==null?void 0:o.info)&&r({valid:!o.info.valid})},[i]),x=c((e=f.ascend)=>{if(!s||m.length>1)return;const{pointCloud2dOperation:n}=s,u=n.switchToNextPolygon(e);u&&p(u)},[s]);return{selectedBox:o,updateSelectedBox:r,changeSelectedBoxValid:B,selectNextBox:x,selectPrevBox:()=>{x(f.descend)},deletePointCloudBox:e=>{d(t.filter(n=>n.id!==e)),l==null||l.removeObjectByName(e),l==null||l.render()}}};export{b as useSingleBox};
@@ -1 +1 @@
1
- {"version":3,"file":"useSingleBox.js","sources":["../../../../src/components/pointCloudView/hooks/useSingleBox.tsx"],"sourcesContent":["import { IPointCloudBox } from '@labelbee/lb-utils';\nimport { useCallback, useContext, useMemo } from 'react';\nimport _ from 'lodash';\nimport { PointCloudContext } from '../PointCloudContext';\nimport { cAnnotation } from '@labelbee/lb-annotation';\n\nconst { ESortDirection } = cAnnotation;\n\n/** Actions for single selected box */\nexport const useSingleBox = () => {\n const {\n pointCloudBoxList,\n setPointCloudResult,\n topViewInstance,\n selectedIDs,\n selectedID,\n mainViewInstance,\n } = useContext(PointCloudContext);\n\n /** Returns { info: selected box, index: selected box index } */\n const selectedBox = useMemo(() => {\n const boxIndex = pointCloudBoxList.findIndex((i: { id: string }) => i.id === selectedID);\n if (boxIndex > -1) {\n return { info: pointCloudBoxList[boxIndex], index: boxIndex };\n }\n }, [selectedID, pointCloudBoxList]);\n\n /** Use Partial<IPointCloudBox> to update selected box */\n const updateSelectedBox = useCallback(\n (params: Partial<IPointCloudBox>) => {\n if (selectedBox?.info) {\n pointCloudBoxList.splice(selectedBox.index, 1, _.merge(selectedBox.info, params));\n setPointCloudResult(_.cloneDeep(pointCloudBoxList));\n }\n },\n [selectedID, pointCloudBoxList],\n );\n\n /** Toggle selected box‘s validity */\n const changeSelectedBoxValid = useCallback(() => {\n if (selectedBox?.info) {\n updateSelectedBox({ valid: !selectedBox.info.valid });\n }\n }, [selectedID]);\n\n /** PointCloud select next/prev one */\n const switchToNextBox = useCallback(\n (sort = ESortDirection.ascend) => {\n if (!topViewInstance || selectedIDs.length > 1) {\n return;\n }\n\n const { pointCloud2dOperation } = topViewInstance;\n\n pointCloud2dOperation.switchToNextPolygon(sort);\n },\n [topViewInstance],\n );\n\n const selectPrevBox = () => {\n switchToNextBox(ESortDirection.descend);\n };\n\n const deletePointCloudBox = (id: string) => {\n setPointCloudResult(pointCloudBoxList.filter((v) => v.id !== id));\n mainViewInstance?.removeObjectByName(id);\n mainViewInstance?.render();\n // TODO Clear Highlight.\n };\n\n return {\n selectedBox,\n updateSelectedBox,\n changeSelectedBoxValid,\n selectNextBox: switchToNextBox,\n selectPrevBox,\n deletePointCloudBox,\n };\n};\n"],"names":[],"mappings":";;;;;AAMA,MAAM,CAAE,cAAmB,CAAA,GAAA,WAAA,CAAA;AAGpB,MAAM,eAAe,MAAM;AAChC,EAAM,MAAA;AAAA,IACJ,iBAAA;AAAA,IACA,mBAAA;AAAA,IACA,eAAA;AAAA,IACA,WAAA;AAAA,IACA,UAAA;AAAA,IACA,gBAAA;AAAA,GAAA,GACE,UAAW,CAAA,iBAAA,CAAA,CAAA;AAGf,EAAM,MAAA,WAAA,GAAc,QAAQ,MAAM;AAChC,IAAA,MAAM,WAAW,iBAAkB,CAAA,SAAA,CAAU,CAAC,CAAA,KAAsB,EAAE,EAAO,KAAA,UAAA,CAAA,CAAA;AAC7E,IAAA,IAAI,WAAW,CAAI,CAAA,EAAA;AACjB,MAAA,OAAO,CAAE,IAAA,EAAM,iBAAkB,CAAA,QAAA,CAAA,EAAW,KAAO,EAAA,QAAA,CAAA,CAAA;AAAA,KAAA;AAAA,GAAA,EAEpD,CAAC,UAAY,EAAA,iBAAA,CAAA,CAAA,CAAA;AAGhB,EAAM,MAAA,iBAAA,GAAoB,WACxB,CAAA,CAAC,MAAoC,KAAA;AACnC,IAAA,IAAI,2CAAa,IAAM,EAAA;AACrB,MAAA,iBAAA,CAAkB,OAAO,WAAY,CAAA,KAAA,EAAO,GAAG,CAAE,CAAA,KAAA,CAAM,YAAY,IAAM,EAAA,MAAA,CAAA,CAAA,CAAA;AACzE,MAAA,mBAAA,CAAoB,EAAE,SAAU,CAAA,iBAAA,CAAA,CAAA,CAAA;AAAA,KAAA;AAAA,GAAA,EAGpC,CAAC,UAAY,EAAA,iBAAA,CAAA,CAAA,CAAA;AAIf,EAAM,MAAA,sBAAA,GAAyB,YAAY,MAAM;AAC/C,IAAA,IAAI,2CAAa,IAAM,EAAA;AACrB,MAAA,iBAAA,CAAkB,CAAE,KAAA,EAAO,CAAC,WAAA,CAAY,IAAK,CAAA,KAAA,CAAA,CAAA,CAAA;AAAA,KAAA;AAAA,GAAA,EAE9C,CAAC,UAAA,CAAA,CAAA,CAAA;AAGJ,EAAA,MAAM,eAAkB,GAAA,WAAA,CACtB,CAAC,IAAA,GAAO,eAAe,MAAW,KAAA;AAChC,IAAA,IAAI,CAAC,eAAA,IAAmB,WAAY,CAAA,MAAA,GAAS,CAAG,EAAA;AAC9C,MAAA,OAAA;AAAA,KAAA;AAGF,IAAA,MAAM,CAAE,qBAA0B,CAAA,GAAA,eAAA,CAAA;AAElC,IAAA,qBAAA,CAAsB,mBAAoB,CAAA,IAAA,CAAA,CAAA;AAAA,GAAA,EAE5C,CAAC,eAAA,CAAA,CAAA,CAAA;AAGH,EAAA,MAAM,gBAAgB,MAAM;AAC1B,IAAA,eAAA,CAAgB,cAAe,CAAA,OAAA,CAAA,CAAA;AAAA,GAAA,CAAA;AAGjC,EAAM,MAAA,mBAAA,GAAsB,CAAC,EAAe,KAAA;AAC1C,IAAA,mBAAA,CAAoB,iBAAkB,CAAA,MAAA,CAAO,CAAC,CAAA,KAAM,EAAE,EAAO,KAAA,EAAA,CAAA,CAAA,CAAA;AAC7D,IAAA,gBAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,gBAAA,CAAkB,kBAAmB,CAAA,EAAA,CAAA,CAAA;AACrC,IAAkB,gBAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,gBAAA,CAAA,MAAA,EAAA,CAAA;AAAA,GAAA,CAAA;AAIpB,EAAO,OAAA;AAAA,IACL,WAAA;AAAA,IACA,iBAAA;AAAA,IACA,sBAAA;AAAA,IACA,aAAe,EAAA,eAAA;AAAA,IACf,aAAA;AAAA,IACA,mBAAA;AAAA,GAAA,CAAA;AAAA;;;;"}
1
+ {"version":3,"file":"useSingleBox.js","sources":["../../../../src/components/pointCloudView/hooks/useSingleBox.ts"],"sourcesContent":["import { IPointCloudBox } from '@labelbee/lb-utils';\nimport { useCallback, useContext, useMemo } from 'react';\nimport _ from 'lodash';\nimport { PointCloudContext } from '../PointCloudContext';\nimport { cAnnotation } from '@labelbee/lb-annotation';\n\nconst { ESortDirection } = cAnnotation;\n\n/** Actions for single selected box */\nexport const useSingleBox = () => {\n const {\n pointCloudBoxList,\n setPointCloudResult,\n topViewInstance,\n selectedIDs,\n selectedID,\n mainViewInstance,\n setSelectedIDs,\n } = useContext(PointCloudContext);\n\n /** Returns { info: selected box, index: selected box index } */\n const selectedBox = useMemo(() => {\n const boxIndex = pointCloudBoxList.findIndex((i: { id: string }) => i.id === selectedID);\n if (boxIndex > -1) {\n return { info: pointCloudBoxList[boxIndex], index: boxIndex };\n }\n }, [selectedID, pointCloudBoxList]);\n\n /** Use Partial<IPointCloudBox> to update selected box */\n const updateSelectedBox = useCallback(\n (params: Partial<IPointCloudBox>) => {\n if (selectedBox?.info) {\n pointCloudBoxList.splice(selectedBox.index, 1, _.merge(selectedBox.info, params));\n setPointCloudResult(_.cloneDeep(pointCloudBoxList));\n }\n },\n [selectedID, pointCloudBoxList],\n );\n\n /** Toggle selected box‘s validity */\n const changeSelectedBoxValid = useCallback(() => {\n if (selectedBox?.info) {\n updateSelectedBox({ valid: !selectedBox.info.valid });\n }\n }, [selectedID]);\n\n /** PointCloud select next/prev one */\n const switchToNextBox = useCallback(\n (sort = ESortDirection.ascend) => {\n if (!topViewInstance || selectedIDs.length > 1) {\n return;\n }\n\n const { pointCloud2dOperation } = topViewInstance;\n\n const newSelectedIDs = pointCloud2dOperation.switchToNextPolygon(sort);\n if (newSelectedIDs) {\n setSelectedIDs(newSelectedIDs);\n }\n },\n [topViewInstance],\n );\n\n const selectPrevBox = () => {\n switchToNextBox(ESortDirection.descend);\n };\n\n const deletePointCloudBox = (id: string) => {\n setPointCloudResult(pointCloudBoxList.filter((v) => v.id !== id));\n mainViewInstance?.removeObjectByName(id);\n mainViewInstance?.render();\n // TODO Clear Highlight.\n };\n\n return {\n selectedBox,\n updateSelectedBox,\n changeSelectedBoxValid,\n selectNextBox: switchToNextBox,\n selectPrevBox,\n deletePointCloudBox,\n };\n};\n"],"names":[],"mappings":";;;;;AAMA,MAAM,CAAE,cAAmB,CAAA,GAAA,WAAA,CAAA;AAGpB,MAAM,eAAe,MAAM;AAChC,EAAM,MAAA;AAAA,IACJ,iBAAA;AAAA,IACA,mBAAA;AAAA,IACA,eAAA;AAAA,IACA,WAAA;AAAA,IACA,UAAA;AAAA,IACA,gBAAA;AAAA,IACA,cAAA;AAAA,GAAA,GACE,UAAW,CAAA,iBAAA,CAAA,CAAA;AAGf,EAAM,MAAA,WAAA,GAAc,QAAQ,MAAM;AAChC,IAAA,MAAM,WAAW,iBAAkB,CAAA,SAAA,CAAU,CAAC,CAAA,KAAsB,EAAE,EAAO,KAAA,UAAA,CAAA,CAAA;AAC7E,IAAA,IAAI,WAAW,CAAI,CAAA,EAAA;AACjB,MAAA,OAAO,CAAE,IAAA,EAAM,iBAAkB,CAAA,QAAA,CAAA,EAAW,KAAO,EAAA,QAAA,CAAA,CAAA;AAAA,KAAA;AAAA,GAAA,EAEpD,CAAC,UAAY,EAAA,iBAAA,CAAA,CAAA,CAAA;AAGhB,EAAM,MAAA,iBAAA,GAAoB,WACxB,CAAA,CAAC,MAAoC,KAAA;AACnC,IAAA,IAAI,2CAAa,IAAM,EAAA;AACrB,MAAA,iBAAA,CAAkB,OAAO,WAAY,CAAA,KAAA,EAAO,GAAG,CAAE,CAAA,KAAA,CAAM,YAAY,IAAM,EAAA,MAAA,CAAA,CAAA,CAAA;AACzE,MAAA,mBAAA,CAAoB,EAAE,SAAU,CAAA,iBAAA,CAAA,CAAA,CAAA;AAAA,KAAA;AAAA,GAAA,EAGpC,CAAC,UAAY,EAAA,iBAAA,CAAA,CAAA,CAAA;AAIf,EAAM,MAAA,sBAAA,GAAyB,YAAY,MAAM;AAC/C,IAAA,IAAI,2CAAa,IAAM,EAAA;AACrB,MAAA,iBAAA,CAAkB,CAAE,KAAA,EAAO,CAAC,WAAA,CAAY,IAAK,CAAA,KAAA,CAAA,CAAA,CAAA;AAAA,KAAA;AAAA,GAAA,EAE9C,CAAC,UAAA,CAAA,CAAA,CAAA;AAGJ,EAAA,MAAM,eAAkB,GAAA,WAAA,CACtB,CAAC,IAAA,GAAO,eAAe,MAAW,KAAA;AAChC,IAAA,IAAI,CAAC,eAAA,IAAmB,WAAY,CAAA,MAAA,GAAS,CAAG,EAAA;AAC9C,MAAA,OAAA;AAAA,KAAA;AAGF,IAAA,MAAM,CAAE,qBAA0B,CAAA,GAAA,eAAA,CAAA;AAElC,IAAM,MAAA,cAAA,GAAiB,sBAAsB,mBAAoB,CAAA,IAAA,CAAA,CAAA;AACjE,IAAA,IAAI,cAAgB,EAAA;AAClB,MAAe,cAAA,CAAA,cAAA,CAAA,CAAA;AAAA,KAAA;AAAA,GAAA,EAGnB,CAAC,eAAA,CAAA,CAAA,CAAA;AAGH,EAAA,MAAM,gBAAgB,MAAM;AAC1B,IAAA,eAAA,CAAgB,cAAe,CAAA,OAAA,CAAA,CAAA;AAAA,GAAA,CAAA;AAGjC,EAAM,MAAA,mBAAA,GAAsB,CAAC,EAAe,KAAA;AAC1C,IAAA,mBAAA,CAAoB,iBAAkB,CAAA,MAAA,CAAO,CAAC,CAAA,KAAM,EAAE,EAAO,KAAA,EAAA,CAAA,CAAA,CAAA;AAC7D,IAAA,gBAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,gBAAA,CAAkB,kBAAmB,CAAA,EAAA,CAAA,CAAA;AACrC,IAAkB,gBAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,gBAAA,CAAA,MAAA,EAAA,CAAA;AAAA,GAAA,CAAA;AAIpB,EAAO,OAAA;AAAA,IACL,WAAA;AAAA,IACA,iBAAA;AAAA,IACA,sBAAA;AAAA,IACA,aAAe,EAAA,eAAA;AAAA,IACf,aAAA;AAAA,IACA,mBAAA;AAAA,GAAA,CAAA;AAAA;;;;"}
@@ -0,0 +1 @@
1
+ import{useContext as c,useState as d}from"react";import{PointCloudContext as p}from"../PointCloudContext.js";import{cTool as P}from"@labelbee/lb-annotation";const{EToolName:o,EPolygonPattern:r}=P,C=()=>{const{topViewInstance:t,mainViewInstance:e,pointCloudBoxList:i,setPointCloudResult:u}=c(p),[s,a]=d(o.Rect);return{clearAllResult:()=>{i.forEach(l=>{e==null||e.removeObjectByName(l.id)}),e==null||e.render(),u([]),t==null||t.pointCloud2dOperation.clearActiveStatus(),t==null||t.pointCloud2dOperation.clearResult()},updatePointCloudPattern:l=>{const n=t==null?void 0:t.pointCloud2dOperation;if(!!n)switch(n.clearActiveStatus(),l){case o.Rect:n.setPattern(r.Rect),a(o.Rect);break;case o.Polygon:n.setPattern(r.Normal),a(o.Polygon);break}},pointCloudPattern:s}};export{C as useStatus};
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useStatus.js","sources":["../../../../src/components/pointCloudView/hooks/useStatus.ts"],"sourcesContent":["/**\n * @file Update PointCloud Status\n * @createDate 2022-08-26\n * @author Ron <ron.f.luo@gmail.com>\n */\n\nimport { useContext, useState } from 'react';\nimport { PointCloudContext } from '../PointCloudContext';\nimport { cTool } from '@labelbee/lb-annotation';\n\nconst { EToolName, EPolygonPattern } = cTool;\n\nexport const useStatus = () => {\n const { topViewInstance, mainViewInstance, pointCloudBoxList, setPointCloudResult } =\n useContext(PointCloudContext);\n const [pointCloudPattern, setPointCloudPattern] = useState(EToolName.Rect);\n\n // Clear All PointView Data\n const clearAllResult = () => {\n pointCloudBoxList.forEach((v) => {\n mainViewInstance?.removeObjectByName(v.id);\n });\n mainViewInstance?.render();\n\n setPointCloudResult([]);\n topViewInstance?.pointCloud2dOperation.clearActiveStatus();\n topViewInstance?.pointCloud2dOperation.clearResult();\n };\n\n const updatePointCloudPattern = (toolName: any) => {\n const polygon2dOperation = topViewInstance?.pointCloud2dOperation;\n if (!polygon2dOperation) {\n return;\n }\n\n polygon2dOperation.clearActiveStatus();\n\n switch (toolName) {\n case EToolName.Rect:\n polygon2dOperation.setPattern(EPolygonPattern.Rect);\n setPointCloudPattern(EToolName.Rect);\n\n break;\n case EToolName.Polygon:\n polygon2dOperation.setPattern(EPolygonPattern.Normal);\n setPointCloudPattern(EToolName.Polygon);\n break;\n }\n };\n\n return {\n clearAllResult,\n updatePointCloudPattern,\n pointCloudPattern,\n };\n};\n"],"names":[],"mappings":";;;;AAUA,MAAM,CAAE,WAAW,eAAoB,CAAA,GAAA,KAAA,CAAA;AAEhC,MAAM,YAAY,MAAM;AAC7B,EAAA,MAAM,CAAE,eAAA,EAAiB,gBAAkB,EAAA,iBAAA,EAAmB,uBAC5D,UAAW,CAAA,iBAAA,CAAA,CAAA;AACb,EAAA,MAAM,CAAC,iBAAA,EAAmB,oBAAwB,CAAA,GAAA,QAAA,CAAS,SAAU,CAAA,IAAA,CAAA,CAAA;AAGrE,EAAA,MAAM,iBAAiB,MAAM;AAC3B,IAAkB,iBAAA,CAAA,OAAA,CAAQ,CAAC,CAAM,KAAA;AAC/B,MAAA,gBAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,gBAAA,CAAkB,mBAAmB,CAAE,CAAA,EAAA,CAAA,CAAA;AAAA,KAAA,CAAA,CAAA;AAEzC,IAAkB,gBAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,gBAAA,CAAA,MAAA,EAAA,CAAA;AAElB,IAAoB,mBAAA,CAAA,EAAA,CAAA,CAAA;AACpB,IAAA,eAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,eAAA,CAAiB,qBAAsB,CAAA,iBAAA,EAAA,CAAA;AACvC,IAAA,eAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,eAAA,CAAiB,qBAAsB,CAAA,WAAA,EAAA,CAAA;AAAA,GAAA,CAAA;AAGzC,EAAM,MAAA,uBAAA,GAA0B,CAAC,QAAkB,KAAA;AACjD,IAAA,MAAM,qBAAqB,eAAiB,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,eAAA,CAAA,qBAAA,CAAA;AAC5C,IAAA,IAAI,CAAC,kBAAoB,EAAA;AACvB,MAAA,OAAA;AAAA,KAAA;AAGF,IAAmB,kBAAA,CAAA,iBAAA,EAAA,CAAA;AAEnB,IAAQ,QAAA,QAAA;AAAA,MAAA,KACD,SAAU,CAAA,IAAA;AACb,QAAA,kBAAA,CAAmB,WAAW,eAAgB,CAAA,IAAA,CAAA,CAAA;AAC9C,QAAA,oBAAA,CAAqB,SAAU,CAAA,IAAA,CAAA,CAAA;AAE/B,QAAA,MAAA;AAAA,MAAA,KACG,SAAU,CAAA,OAAA;AACb,QAAA,kBAAA,CAAmB,WAAW,eAAgB,CAAA,MAAA,CAAA,CAAA;AAC9C,QAAA,oBAAA,CAAqB,SAAU,CAAA,OAAA,CAAA,CAAA;AAC/B,QAAA,MAAA;AAAA,KAAA;AAAA,GAAA,CAAA;AAIN,EAAO,OAAA;AAAA,IACL,cAAA;AAAA,IACA,uBAAA;AAAA,IACA,iBAAA;AAAA,GAAA,CAAA;AAAA;;;;"}
@@ -1 +1 @@
1
- import{useRef as u,useEffect as a}from"react";import{useDispatch as c}from"react-redux";import{ANNOTATION_ACTIONS as n}from"../store/Actions.js";const i=()=>{const e=c(),o=u({exportData:()=>[[],{}],singleOn:()=>{},on:()=>{},setResult:()=>{},history:{initRecord:()=>{}},setDefaultAttribute:t=>{},setSubAttribute:(t,p)=>{}}),r=t=>{e({type:n.SET_TOOL,payload:{instance:t}})},s=()=>{e({type:n.SET_TOOL,payload:{instance:void 0}})};return a(()=>(r(o.current),()=>{s()}),[]),{toolInstanceRef:o}};export{i as useCustomToolInstance};
1
+ import{useRef as i,useEffect as l}from"react";import{useDispatch as c}from"react-redux";import{ANNOTATION_ACTIONS as n}from"../store/Actions.js";const p=({basicInfo:e}={})=>{var o;const r=c(),s=i({valid:(o=e==null?void 0:e.valid)!=null?o:!0,exportData:()=>[[],{}],exportCustomData:()=>({}),clearResult:()=>{},singleOn:()=>{},on:()=>{},setResult:()=>{},history:{initRecord:()=>{},pushHistory:()=>{}},setDefaultAttribute:t=>{},setSubAttribute:(t,d)=>{},setValid:()=>{}}),u=t=>{r({type:n.SET_TOOL,payload:{instance:t}})},a=()=>{r({type:n.SET_TOOL,payload:{instance:void 0}})};return l(()=>(u(s.current),()=>{a()}),[]),{toolInstanceRef:s}};export{p as useCustomToolInstance};
@@ -1 +1 @@
1
- {"version":3,"file":"annotation.js","sources":["../../src/hooks/annotation.ts"],"sourcesContent":["/**\n * @file Annotation related hook\n * @createDate 2022-08-04\n * @author Ron <ron.f.luo@gmail.com>\n */\nimport { useEffect, useRef } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { ANNOTATION_ACTIONS } from '@/store/Actions';\n\nexport interface ICustomToolInstance {\n exportData: () => [any[], {}];\n singleOn: () => void;\n on: () => void;\n setResult: () => void;\n history: {\n initRecord: () => void;\n };\n setDefaultAttribute: (attribute: string) => void;\n\n // PointCloud Exclusive function\n setSubAttribute: (key: string, value: string) => void;\n}\n\n/**\n * Custom an empty toolInstance to adapt old use.\n * @returns\n */\nconst useCustomToolInstance = () => {\n const dispatch = useDispatch();\n const toolInstanceRef = useRef<ICustomToolInstance>({\n exportData: () => {\n return [[], {}];\n },\n singleOn: () => {},\n on: () => {},\n setResult: () => {\n // Rerender Data\n },\n history: {\n initRecord: () => {},\n },\n setDefaultAttribute: (attribute: string) => {},\n\n // PointCloud Exclusive function\n setSubAttribute: (key: string, value: string) => {},\n });\n\n const onMounted = (instance: any) => {\n dispatch({\n type: ANNOTATION_ACTIONS.SET_TOOL,\n payload: {\n instance,\n },\n });\n };\n\n const onUnmounted = () => {\n dispatch({\n type: ANNOTATION_ACTIONS.SET_TOOL,\n payload: {\n instance: undefined,\n },\n });\n };\n\n useEffect(() => {\n // Initial toolInstance\n onMounted(toolInstanceRef.current);\n return () => {\n onUnmounted();\n };\n }, []);\n\n return {\n toolInstanceRef,\n };\n};\n\nexport { useCustomToolInstance };\n"],"names":[],"mappings":";;;;AA2BA,MAAM,wBAAwB,MAAM;AAClC,EAAA,MAAM,QAAW,GAAA,WAAA,EAAA,CAAA;AACjB,EAAA,MAAM,kBAAkB,MAA4B,CAAA;AAAA,IAClD,YAAY,MAAM;AAChB,MAAA,OAAO,CAAC,EAAI,EAAA,EAAA,CAAA,CAAA;AAAA,KAAA;AAAA,IAEd,UAAU,MAAM;AAAA,KAAA;AAAA,IAChB,IAAI,MAAM;AAAA,KAAA;AAAA,IACV,WAAW,MAAM;AAAA,KAAA;AAAA,IAGjB,OAAS,EAAA;AAAA,MACP,YAAY,MAAM;AAAA,OAAA;AAAA,KAAA;AAAA,IAEpB,mBAAA,EAAqB,CAAC,SAAsB,KAAA;AAAA,KAAA;AAAA,IAG5C,eAAA,EAAiB,CAAC,GAAA,EAAa,KAAkB,KAAA;AAAA,KAAA;AAAA,GAAA,CAAA,CAAA;AAGnD,EAAM,MAAA,SAAA,GAAY,CAAC,QAAkB,KAAA;AACnC,IAAS,QAAA,CAAA;AAAA,MACP,MAAM,kBAAmB,CAAA,QAAA;AAAA,MACzB,OAAS,EAAA;AAAA,QACP,QAAA;AAAA,OAAA;AAAA,KAAA,CAAA,CAAA;AAAA,GAAA,CAAA;AAKN,EAAA,MAAM,cAAc,MAAM;AACxB,IAAS,QAAA,CAAA;AAAA,MACP,MAAM,kBAAmB,CAAA,QAAA;AAAA,MACzB,OAAS,EAAA;AAAA,QACP,QAAU,EAAA,KAAA,CAAA;AAAA,OAAA;AAAA,KAAA,CAAA,CAAA;AAAA,GAAA,CAAA;AAKhB,EAAA,SAAA,CAAU,MAAM;AAEd,IAAA,SAAA,CAAU,eAAgB,CAAA,OAAA,CAAA,CAAA;AAC1B,IAAA,OAAO,MAAM;AACX,MAAA,WAAA,EAAA,CAAA;AAAA,KAAA,CAAA;AAAA,GAED,EAAA,EAAA,CAAA,CAAA;AAEH,EAAO,OAAA;AAAA,IACL,eAAA;AAAA,GAAA,CAAA;AAAA;;;;"}
1
+ {"version":3,"file":"annotation.js","sources":["../../src/hooks/annotation.ts"],"sourcesContent":["/**\n * @file Annotation related hook\n * @createDate 2022-08-04\n * @author Ron <ron.f.luo@gmail.com>\n */\nimport { useEffect, useRef } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { ANNOTATION_ACTIONS } from '@/store/Actions';\n\nexport interface ICustomToolInstance {\n valid: boolean;\n exportData: () => [any[], {}];\n exportCustomData: () => {};\n singleOn: () => void;\n clearResult: () => void;\n on: () => void;\n setResult: () => void;\n setValid: (valid: boolean) => void;\n history: {\n initRecord: () => void;\n pushHistory: () => void;\n };\n setDefaultAttribute: (attribute: string) => void;\n\n // PointCloud Exclusive function\n setSubAttribute: (key: string, value: string) => void;\n}\n\nexport interface ICustomToolInstanceProps {\n basicInfo?: { [v: string]: any };\n}\n\n/**\n * @returns\n * Custom an empty toolInstance to adapt old use.\n */\nconst useCustomToolInstance = ({ basicInfo }: ICustomToolInstanceProps = {}) => {\n const dispatch = useDispatch();\n const toolInstanceRef = useRef<ICustomToolInstance>({\n valid: basicInfo?.valid ?? true,\n exportData: () => {\n return [[], {}];\n },\n exportCustomData: () => {\n return {};\n },\n clearResult: () => {},\n singleOn: () => {},\n on: () => {},\n setResult: () => {\n // Rerender Data\n },\n history: {\n initRecord: () => {},\n pushHistory: () => {},\n },\n setDefaultAttribute: (attribute: string) => {},\n\n // PointCloud Exclusive function\n setSubAttribute: (key: string, value: string) => {},\n setValid: () => {},\n });\n\n const onMounted = (instance: any) => {\n dispatch({\n type: ANNOTATION_ACTIONS.SET_TOOL,\n payload: {\n instance,\n },\n });\n };\n\n const onUnmounted = () => {\n dispatch({\n type: ANNOTATION_ACTIONS.SET_TOOL,\n payload: {\n instance: undefined,\n },\n });\n };\n\n useEffect(() => {\n // Initial toolInstance\n onMounted(toolInstanceRef.current);\n return () => {\n onUnmounted();\n };\n }, []);\n\n return {\n toolInstanceRef,\n };\n};\n\nexport { useCustomToolInstance };\n"],"names":[],"mappings":";;;;AAoCA,MAAM,qBAAwB,GAAA,CAAC,CAAE,SAAA,CAAA,GAAwC,EAAO,KAAA;AApChF,EAAA,IAAA,EAAA,CAAA;AAqCE,EAAA,MAAM,QAAW,GAAA,WAAA,EAAA,CAAA;AACjB,EAAA,MAAM,kBAAkB,MAA4B,CAAA;AAAA,IAClD,KAAA,EAAO,CAAW,EAAA,GAAA,SAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,SAAA,CAAA,KAAA,KAAX,IAAoB,GAAA,EAAA,GAAA,IAAA;AAAA,IAC3B,YAAY,MAAM;AAChB,MAAA,OAAO,CAAC,EAAI,EAAA,EAAA,CAAA,CAAA;AAAA,KAAA;AAAA,IAEd,kBAAkB,MAAM;AACtB,MAAO,OAAA,EAAA,CAAA;AAAA,KAAA;AAAA,IAET,aAAa,MAAM;AAAA,KAAA;AAAA,IACnB,UAAU,MAAM;AAAA,KAAA;AAAA,IAChB,IAAI,MAAM;AAAA,KAAA;AAAA,IACV,WAAW,MAAM;AAAA,KAAA;AAAA,IAGjB,OAAS,EAAA;AAAA,MACP,YAAY,MAAM;AAAA,OAAA;AAAA,MAClB,aAAa,MAAM;AAAA,OAAA;AAAA,KAAA;AAAA,IAErB,mBAAA,EAAqB,CAAC,SAAsB,KAAA;AAAA,KAAA;AAAA,IAG5C,eAAA,EAAiB,CAAC,GAAA,EAAa,KAAkB,KAAA;AAAA,KAAA;AAAA,IACjD,UAAU,MAAM;AAAA,KAAA;AAAA,GAAA,CAAA,CAAA;AAGlB,EAAM,MAAA,SAAA,GAAY,CAAC,QAAkB,KAAA;AACnC,IAAS,QAAA,CAAA;AAAA,MACP,MAAM,kBAAmB,CAAA,QAAA;AAAA,MACzB,OAAS,EAAA;AAAA,QACP,QAAA;AAAA,OAAA;AAAA,KAAA,CAAA,CAAA;AAAA,GAAA,CAAA;AAKN,EAAA,MAAM,cAAc,MAAM;AACxB,IAAS,QAAA,CAAA;AAAA,MACP,MAAM,kBAAmB,CAAA,QAAA;AAAA,MACzB,OAAS,EAAA;AAAA,QACP,QAAU,EAAA,KAAA,CAAA;AAAA,OAAA;AAAA,KAAA,CAAA,CAAA;AAAA,GAAA,CAAA;AAKhB,EAAA,SAAA,CAAU,MAAM;AAEd,IAAA,SAAA,CAAU,eAAgB,CAAA,OAAA,CAAA,CAAA;AAC1B,IAAA,OAAO,MAAM;AACX,MAAA,WAAA,EAAA,CAAA;AAAA,KAAA,CAAA;AAAA,GAED,EAAA,EAAA,CAAA,CAAA;AAEH,EAAO,OAAA;AAAA,IACL,eAAA;AAAA,GAAA,CAAA;AAAA;;;;"}
@@ -1 +1 @@
1
- import{useLayoutEffect as f}from"react";import a from"resize-observer-polyfill";import{getTargetElement as s}from"../utils/dom.js";import l from"./useRafState.js";function u(t){const[o,n]=l(()=>{const e=s(t);return{width:(e||{}).clientWidth,height:(e||{}).clientHeight}});return f(()=>{const e=s(t);if(!e)return()=>{};const r=new a(c=>{c.forEach(i=>{n({width:i.target.clientWidth,height:i.target.clientHeight})})});return r.observe(e),()=>{r.disconnect()}},[t]),o}export{u as default};
1
+ import{useLayoutEffect as c}from"react";import f from"resize-observer-polyfill";import{getTargetElement as l}from"../utils/dom.js";import h from"./useRafState.js";function m(i){const[a,u]=h(()=>{var e,t;const r=l(i);return{width:(e=(r||{}).clientWidth)!=null?e:0,height:(t=(r||{}).clientHeight)!=null?t:0}});return c(()=>{const e=l(i);if(!e)return()=>{};const t=new f(r=>{r.forEach(s=>{var n,o;u({width:(n=s.target.clientWidth)!=null?n:0,height:(o=s.target.clientHeight)!=null?o:0})})});return t.observe(e),()=>{t.disconnect()}},[i]),a}export{m as default};
@@ -1 +1 @@
1
- {"version":3,"file":"useSize.js","sources":["../../src/hooks/useSize.ts"],"sourcesContent":["import { useLayoutEffect } from 'react';\nimport ResizeObserver from 'resize-observer-polyfill';\nimport type { BasicTarget } from '../utils/dom';\nimport { getTargetElement } from '../utils/dom';\nimport useRafState from './useRafState';\n\ninterface Size {\n width?: number;\n height?: number;\n}\n\nfunction useSize(target: BasicTarget): Size {\n const [state, setState] = useRafState<Size>(() => {\n const el = getTargetElement(target);\n return {\n width: ((el || {}) as HTMLElement).clientWidth,\n height: ((el || {}) as HTMLElement).clientHeight,\n };\n });\n\n useLayoutEffect(() => {\n const el = getTargetElement(target);\n if (!el) {\n return () => {};\n }\n\n const resizeObserver = new ResizeObserver((entries: ResizeObserverEntry[]) => {\n entries.forEach((entry: ResizeObserverEntry) => {\n setState({\n width: entry.target.clientWidth,\n height: entry.target.clientHeight,\n });\n });\n });\n\n resizeObserver.observe(el as HTMLElement);\n return () => {\n resizeObserver.disconnect();\n };\n }, [target]);\n\n return state;\n}\n\nexport default useSize;\n"],"names":[],"mappings":";;;;;AAWA,SAAA,OAAA,CAAiB,MAA2B,EAAA;AAC1C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAY,CAAA,GAAA,WAAA,CAAkB,MAAM;AAChD,IAAA,MAAM,KAAK,gBAAiB,CAAA,MAAA,CAAA,CAAA;AAC5B,IAAO,OAAA;AAAA,MACL,KAAA,EAAS,OAAM,EAAoB,EAAA,WAAA;AAAA,MACnC,MAAA,EAAU,OAAM,EAAoB,EAAA,YAAA;AAAA,KAAA,CAAA;AAAA,GAAA,CAAA,CAAA;AAIxC,EAAA,eAAA,CAAgB,MAAM;AACpB,IAAA,MAAM,KAAK,gBAAiB,CAAA,MAAA,CAAA,CAAA;AAC5B,IAAA,IAAI,CAAC,EAAI,EAAA;AACP,MAAA,OAAO,MAAM;AAAA,OAAA,CAAA;AAAA,KAAA;AAGf,IAAA,MAAM,cAAiB,GAAA,IAAI,cAAe,CAAA,CAAC,OAAmC,KAAA;AAC5E,MAAQ,OAAA,CAAA,OAAA,CAAQ,CAAC,KAA+B,KAAA;AAC9C,QAAS,QAAA,CAAA;AAAA,UACP,KAAA,EAAO,MAAM,MAAO,CAAA,WAAA;AAAA,UACpB,MAAA,EAAQ,MAAM,MAAO,CAAA,YAAA;AAAA,SAAA,CAAA,CAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA,CAAA,CAAA;AAK3B,IAAA,cAAA,CAAe,OAAQ,CAAA,EAAA,CAAA,CAAA;AACvB,IAAA,OAAO,MAAM;AACX,MAAe,cAAA,CAAA,UAAA,EAAA,CAAA;AAAA,KAAA,CAAA;AAAA,GAAA,EAEhB,CAAC,MAAA,CAAA,CAAA,CAAA;AAEJ,EAAO,OAAA,KAAA,CAAA;AAAA;;;;"}
1
+ {"version":3,"file":"useSize.js","sources":["../../src/hooks/useSize.ts"],"sourcesContent":["import { useLayoutEffect } from 'react';\nimport ResizeObserver from 'resize-observer-polyfill';\nimport type { BasicTarget } from '../utils/dom';\nimport { getTargetElement } from '../utils/dom';\nimport useRafState from './useRafState';\n\ninterface Size {\n width: number;\n height: number;\n}\n\nfunction useSize(target: BasicTarget): Size {\n const [state, setState] = useRafState<Size>(() => {\n const el = getTargetElement(target);\n return {\n width: ((el || {}) as HTMLElement).clientWidth ?? 0,\n height: ((el || {}) as HTMLElement).clientHeight ?? 0,\n };\n });\n\n useLayoutEffect(() => {\n const el = getTargetElement(target);\n if (!el) {\n return () => {};\n }\n\n const resizeObserver = new ResizeObserver((entries: ResizeObserverEntry[]) => {\n entries.forEach((entry: ResizeObserverEntry) => {\n setState({\n width: entry.target.clientWidth ?? 0,\n height: entry.target.clientHeight ?? 0,\n });\n });\n });\n\n resizeObserver.observe(el as HTMLElement);\n return () => {\n resizeObserver.disconnect();\n };\n }, [target]);\n\n return state;\n}\n\nexport default useSize;\n"],"names":[],"mappings":";;;;;AAWA,SAAA,OAAA,CAAiB,MAA2B,EAAA;AAC1C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAY,CAAA,GAAA,WAAA,CAAkB,MAAM;AAZpD,IAAA,IAAA,EAAA,EAAA,EAAA,CAAA;AAaI,IAAA,MAAM,KAAK,gBAAiB,CAAA,MAAA,CAAA,CAAA;AAC5B,IAAO,OAAA;AAAA,MACL,KAAS,EAAA,CAAA,EAAA,GAAA,CAAA,EAAA,IAAM,EAAoB,EAAA,WAAA,KAA1B,IAAyC,GAAA,EAAA,GAAA,CAAA;AAAA,MAClD,MAAU,EAAA,CAAA,EAAA,GAAA,CAAA,EAAA,IAAM,EAAoB,EAAA,YAAA,KAA1B,IAA0C,GAAA,EAAA,GAAA,CAAA;AAAA,KAAA,CAAA;AAAA,GAAA,CAAA,CAAA;AAIxD,EAAA,eAAA,CAAgB,MAAM;AACpB,IAAA,MAAM,KAAK,gBAAiB,CAAA,MAAA,CAAA,CAAA;AAC5B,IAAA,IAAI,CAAC,EAAI,EAAA;AACP,MAAA,OAAO,MAAM;AAAA,OAAA,CAAA;AAAA,KAAA;AAGf,IAAA,MAAM,cAAiB,GAAA,IAAI,cAAe,CAAA,CAAC,OAAmC,KAAA;AAC5E,MAAQ,OAAA,CAAA,OAAA,CAAQ,CAAC,KAA+B,KAAA;AA3BtD,QAAA,IAAA,EAAA,EAAA,EAAA,CAAA;AA4BQ,QAAS,QAAA,CAAA;AAAA,UACP,KAAO,EAAA,CAAA,EAAA,GAAA,KAAA,CAAM,MAAO,CAAA,WAAA,KAAb,IAA4B,GAAA,EAAA,GAAA,CAAA;AAAA,UACnC,MAAQ,EAAA,CAAA,EAAA,GAAA,KAAA,CAAM,MAAO,CAAA,YAAA,KAAb,IAA6B,GAAA,EAAA,GAAA,CAAA;AAAA,SAAA,CAAA,CAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA,CAAA,CAAA;AAK3C,IAAA,cAAA,CAAe,OAAQ,CAAA,EAAA,CAAA,CAAA;AACvB,IAAA,OAAO,MAAM;AACX,MAAe,cAAA,CAAA,UAAA,EAAA,CAAA;AAAA,KAAA,CAAA;AAAA,GAAA,EAEhB,CAAC,MAAA,CAAA,CAAA,CAAA;AAEJ,EAAO,OAAA,KAAA,CAAA;AAAA;;;;"}
package/es/index.css CHANGED
@@ -1338,13 +1338,45 @@
1338
1338
  display: flex;
1339
1339
  overflow: hidden;
1340
1340
  }
1341
+ .bee-point-cloud-wrapper .bee-point-cloud-container__right .bee-point-cloud-container__right-bottom .bee-point-cloud-container__empty-page {
1342
+ position: absolute;
1343
+ left: 0;
1344
+ top: 40px;
1345
+ flex: 1;
1346
+ background: black;
1347
+ color: #666666;
1348
+ display: flex;
1349
+ justify-content: center;
1350
+ align-items: center;
1351
+ flex-direction: column;
1352
+ font-size: 16px;
1353
+ z-index: 20;
1354
+ height: calc(100% - 40px);
1355
+ width: 100%;
1356
+ }
1357
+ .bee-point-cloud-wrapper .bee-point-cloud-container__right .bee-point-cloud-container__right-bottom .bee-point-cloud-container__empty-page .bee-point-cloud-container__empty-page__text {
1358
+ margin-top: 13px;
1359
+ }
1341
1360
  .bee-point-cloud-wrapper .bee-point-cloud-container__right .bee-point-cloud-container__right-bottom .bee-point-cloud-container__side-view {
1342
1361
  border-right: 1px solid white;
1343
1362
  }
1344
1363
  .bee-point-cloud-wrapper .bee-point-cloud-container__right .bee-point-cloud-container__right-bottom .bee-point-cloud-container__side-view,
1345
1364
  .bee-point-cloud-wrapper .bee-point-cloud-container__right .bee-point-cloud-container__right-bottom .bee-point-cloud-container__back-view {
1365
+ position: relative;
1346
1366
  flex: 1;
1367
+ display: flex;
1347
1368
  background: black;
1369
+ flex-direction: column;
1370
+ }
1371
+ .bee-point-cloud-wrapper .bee-point-cloud-container__right .bee-point-cloud-container__right-bottom .bee-point-cloud-container__side-view .bee-point-cloud-container__bottom-view-content,
1372
+ .bee-point-cloud-wrapper .bee-point-cloud-container__right .bee-point-cloud-container__right-bottom .bee-point-cloud-container__back-view .bee-point-cloud-container__bottom-view-content {
1373
+ flex: 1;
1374
+ }
1375
+ .bee-point-cloud-wrapper .bee-point-cloud-container__right .bee-point-cloud-container__right-bottom .bee-point-cloud-container__side-view .bee-point-cloud-container__bottom-view-content .bee-point-cloud-container__core-instance,
1376
+ .bee-point-cloud-wrapper .bee-point-cloud-container__right .bee-point-cloud-container__right-bottom .bee-point-cloud-container__back-view .bee-point-cloud-container__bottom-view-content .bee-point-cloud-container__core-instance {
1377
+ position: relative;
1378
+ width: 100%;
1379
+ height: 100%;
1348
1380
  }
1349
1381
 
1350
1382
  /** PointCloud样式 end */
package/es/index.js CHANGED
@@ -1 +1 @@
1
- export{default as AnnotationView}from"./components/AnnotationView/index.js";import{i18n as c}from"@labelbee/lb-utils";export{i18n}from"@labelbee/lb-utils";import n,{useState as m,useImperativeHandle as d}from"react";import{I18nextProvider as f}from"react-i18next";import{Provider as u}from"react-redux";import P from"./App.js";import g from"./configureStore.js";import{PageBackward as _,PageForward as v,PageJump as w}from"./store/annotation/actionCreators.js";export{VideoTagTool}from"./components/videoPlayer/TagToolInstanceAdaptorI18nProvider.js";import{PointCloudProvider as O}from"./components/pointCloudView/PointCloudContext.js";var b=Object.defineProperty,x=Object.defineProperties,j=Object.getOwnPropertyDescriptors,a=Object.getOwnPropertySymbols,I=Object.prototype.hasOwnProperty,y=Object.prototype.propertyIsEnumerable,i=(t,e,r)=>e in t?b(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r,A=(t,e)=>{for(var r in e||(e={}))I.call(e,r)&&i(t,r,e[r]);if(a)for(var r of a(e))y.call(e,r)&&i(t,r,e[r]);return t},E=(t,e)=>x(t,j(e));const o=g(),h=(t,e)=>{const[r,p]=m();return d(e,()=>({toolInstance:r,annotationEngine:o.getState().annotation.annotationEngine,pageBackwardActions:()=>o.dispatch(_()),pageForwardActions:()=>o.dispatch(v()),pageJump:s=>{const l=~~s-1;o.dispatch(w(l))},hello:()=>alert("hello labelBee!!!")}),[r]),n.createElement(u,{store:o},n.createElement(f,{i18n:c},n.createElement(O,null,n.createElement(P,E(A({},t),{setToolInstance:p})))))};var S=n.forwardRef(h);export{S as default,o as store};
1
+ export{default as AnnotationView}from"./components/AnnotationView/index.js";export{default as PointCloudAnnotationView}from"./components/AnnotationView/pointCloudAnnotationView.js";import{i18n as c}from"@labelbee/lb-utils";export{i18n}from"@labelbee/lb-utils";import n,{useState as m,useImperativeHandle as d}from"react";import{I18nextProvider as f}from"react-i18next";import{Provider as u}from"react-redux";import P from"./App.js";import g from"./configureStore.js";import{PageBackward as w,PageForward as _,PageJump as v}from"./store/annotation/actionCreators.js";export{VideoTagTool}from"./components/videoPlayer/TagToolInstanceAdaptorI18nProvider.js";import{PointCloudProvider as O}from"./components/pointCloudView/PointCloudContext.js";var x=Object.defineProperty,b=Object.defineProperties,j=Object.getOwnPropertyDescriptors,a=Object.getOwnPropertySymbols,A=Object.prototype.hasOwnProperty,I=Object.prototype.propertyIsEnumerable,i=(t,e,o)=>e in t?x(t,e,{enumerable:!0,configurable:!0,writable:!0,value:o}):t[e]=o,y=(t,e)=>{for(var o in e||(e={}))A.call(e,o)&&i(t,o,e[o]);if(a)for(var o of a(e))I.call(e,o)&&i(t,o,e[o]);return t},E=(t,e)=>b(t,j(e));const r=g(),V=(t,e)=>{const[o,p]=m();return d(e,()=>({toolInstance:o,annotationEngine:r.getState().annotation.annotationEngine,pageBackwardActions:()=>r.dispatch(w()),pageForwardActions:()=>r.dispatch(_()),pageJump:s=>{const l=~~s-1;r.dispatch(v(l))},hello:()=>alert("hello labelBee!!!")}),[o]),n.createElement(u,{store:r},n.createElement(f,{i18n:c},n.createElement(O,null,n.createElement(P,E(y({},t),{setToolInstance:p})))))};var h=n.forwardRef(V);export{h as default,r as store};
package/es/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/index.tsx"],"sourcesContent":["import { AppProps } from '@/App';\nimport AnnotationView from '@/components/AnnotationView';\nimport { i18n } from '@labelbee/lb-utils';\nimport React, { useImperativeHandle, useState } from 'react';\nimport { I18nextProvider } from 'react-i18next';\nimport { Provider } from 'react-redux';\nimport { AnyAction } from 'redux';\nimport App from './App';\nimport configureStore from './configureStore';\nimport { PageBackward, PageForward, PageJump } from './store/annotation/actionCreators';\nimport { ToolInstance } from './store/annotation/types';\nimport { VideoTagTool } from '@/components/videoPlayer/TagToolInstanceAdaptorI18nProvider';\nimport './index.scss';\nimport { PointCloudProvider } from './components/pointCloudView/PointCloudContext';\nimport { AppState } from './store';\n\nexport const store = configureStore();\n\nconst OutputApp = (props: AppProps, ref: any) => {\n const [toolInstance, setToolInstance] = useState<ToolInstance>();\n // 暴露给 ref 的一些方法\n useImperativeHandle(\n ref,\n () => {\n return {\n toolInstance,\n annotationEngine: (store.getState() as AppState).annotation.annotationEngine,\n pageBackwardActions: () => store.dispatch(PageBackward() as unknown as AnyAction),\n pageForwardActions: () => store.dispatch(PageForward() as unknown as AnyAction),\n pageJump: (page: string) => {\n const imgIndex = ~~page - 1;\n store.dispatch(PageJump(imgIndex) as unknown as AnyAction);\n },\n hello: () => alert(`hello labelBee!!!`),\n };\n },\n [toolInstance],\n );\n\n return (\n <Provider store={store}>\n <I18nextProvider i18n={i18n}>\n <PointCloudProvider>\n <App {...props} setToolInstance={setToolInstance} />\n </PointCloudProvider>\n </I18nextProvider>\n </Provider>\n );\n};\n\nexport default React.forwardRef(OutputApp);\n\nexport { AnnotationView, i18n, VideoTagTool };\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgBO,MAAM,KAAQ,GAAA,cAAA,GAAA;AAErB,MAAM,SAAA,GAAY,CAAC,KAAA,EAAiB,GAAa,KAAA;AAC/C,EAAM,MAAA,CAAC,cAAc,eAAmB,CAAA,GAAA,QAAA,EAAA,CAAA;AAExC,EAAA,mBAAA,CACE,KACA,MAAM;AACJ,IAAO,OAAA;AAAA,MACL,YAAA;AAAA,MACA,gBAAA,EAAmB,KAAM,CAAA,QAAA,EAAA,CAAwB,UAAW,CAAA,gBAAA;AAAA,MAC5D,mBAAA,EAAqB,MAAM,KAAA,CAAM,QAAS,CAAA,YAAA,EAAA,CAAA;AAAA,MAC1C,kBAAA,EAAoB,MAAM,KAAA,CAAM,QAAS,CAAA,WAAA,EAAA,CAAA;AAAA,MACzC,QAAA,EAAU,CAAC,IAAiB,KAAA;AAC1B,QAAM,MAAA,QAAA,GAAW,CAAC,CAAC,IAAO,GAAA,CAAA,CAAA;AAC1B,QAAA,KAAA,CAAM,SAAS,QAAS,CAAA,QAAA,CAAA,CAAA,CAAA;AAAA,OAAA;AAAA,MAE1B,KAAA,EAAO,MAAM,KAAM,CAAA,CAAA,iBAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAAA,GAAA,EAGvB,CAAC,YAAA,CAAA,CAAA,CAAA;AAGH,EAAA,2CACG,QAAD,EAAA;AAAA,IAAU,KAAA;AAAA,GAAA,sCACP,eAAD,EAAA;AAAA,IAAiB,IAAA;AAAA,GAAA,sCACd,kBAAD,EAAA,IAAA,kBACG,KAAA,CAAA,aAAA,CAAA,GAAA,EAAD,iCAAS,KAAT,CAAA,EAAA;AAAA,IAAgB,eAAA;AAAA,GAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA;AAO1B,YAAe,MAAM,UAAW,CAAA,SAAA,CAAA;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../src/index.tsx"],"sourcesContent":["import { AppProps } from '@/App';\nimport AnnotationView from '@/components/AnnotationView';\nimport PointCloudAnnotationView from '@/components/AnnotationView/pointCloudAnnotationView';\nimport { i18n } from '@labelbee/lb-utils';\nimport React, { useImperativeHandle, useState } from 'react';\nimport { I18nextProvider } from 'react-i18next';\nimport { Provider } from 'react-redux';\nimport { AnyAction } from 'redux';\nimport App from './App';\nimport configureStore from './configureStore';\nimport { PageBackward, PageForward, PageJump } from './store/annotation/actionCreators';\nimport { ToolInstance } from './store/annotation/types';\nimport { VideoTagTool } from '@/components/videoPlayer/TagToolInstanceAdaptorI18nProvider';\nimport './index.scss';\nimport { PointCloudProvider } from './components/pointCloudView/PointCloudContext';\nimport { AppState } from './store';\n\nexport const store = configureStore();\n\nconst OutputApp = (props: AppProps, ref: any) => {\n const [toolInstance, setToolInstance] = useState<ToolInstance>();\n // 暴露给 ref 的一些方法\n useImperativeHandle(\n ref,\n () => {\n return {\n toolInstance,\n annotationEngine: (store.getState() as AppState).annotation.annotationEngine,\n pageBackwardActions: () => store.dispatch(PageBackward() as unknown as AnyAction),\n pageForwardActions: () => store.dispatch(PageForward() as unknown as AnyAction),\n pageJump: (page: string) => {\n const imgIndex = ~~page - 1;\n store.dispatch(PageJump(imgIndex) as unknown as AnyAction);\n },\n hello: () => alert(`hello labelBee!!!`),\n };\n },\n [toolInstance],\n );\n\n return (\n <Provider store={store}>\n <I18nextProvider i18n={i18n}>\n <PointCloudProvider>\n <App {...props} setToolInstance={setToolInstance} />\n </PointCloudProvider>\n </I18nextProvider>\n </Provider>\n );\n};\n\nexport default React.forwardRef(OutputApp);\n\nexport { AnnotationView, PointCloudAnnotationView, i18n, VideoTagTool };\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiBO,MAAM,KAAQ,GAAA,cAAA,GAAA;AAErB,MAAM,SAAA,GAAY,CAAC,KAAA,EAAiB,GAAa,KAAA;AAC/C,EAAM,MAAA,CAAC,cAAc,eAAmB,CAAA,GAAA,QAAA,EAAA,CAAA;AAExC,EAAA,mBAAA,CACE,KACA,MAAM;AACJ,IAAO,OAAA;AAAA,MACL,YAAA;AAAA,MACA,gBAAA,EAAmB,KAAM,CAAA,QAAA,EAAA,CAAwB,UAAW,CAAA,gBAAA;AAAA,MAC5D,mBAAA,EAAqB,MAAM,KAAA,CAAM,QAAS,CAAA,YAAA,EAAA,CAAA;AAAA,MAC1C,kBAAA,EAAoB,MAAM,KAAA,CAAM,QAAS,CAAA,WAAA,EAAA,CAAA;AAAA,MACzC,QAAA,EAAU,CAAC,IAAiB,KAAA;AAC1B,QAAM,MAAA,QAAA,GAAW,CAAC,CAAC,IAAO,GAAA,CAAA,CAAA;AAC1B,QAAA,KAAA,CAAM,SAAS,QAAS,CAAA,QAAA,CAAA,CAAA,CAAA;AAAA,OAAA;AAAA,MAE1B,KAAA,EAAO,MAAM,KAAM,CAAA,CAAA,iBAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAAA,GAAA,EAGvB,CAAC,YAAA,CAAA,CAAA,CAAA;AAGH,EAAA,2CACG,QAAD,EAAA;AAAA,IAAU,KAAA;AAAA,GAAA,sCACP,eAAD,EAAA;AAAA,IAAiB,IAAA;AAAA,GAAA,sCACd,kBAAD,EAAA,IAAA,kBACG,KAAA,CAAA,aAAA,CAAA,GAAA,EAAD,iCAAS,KAAT,CAAA,EAAA;AAAA,IAAgB,eAAA;AAAA,GAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA;AAO1B,YAAe,MAAM,UAAW,CAAA,SAAA,CAAA;;;;"}
@@ -1 +1 @@
1
- const T={UPDATE_TOOL_INSTANCE:"@@UPDATE_TOOL_INSTANCE",UPDATE_IMG_LIST:"@@UPDATE_IMG_LIST",UPDATE_ANNOTATION_CONFIG:"@@UPDATE_ANNOTATION_CONFIG",LOAD_FILE_DATA:"@@LOAD_FILE_DATA",SUBMIT_FILE_DATA:"@@SUBMIT_FILE_DATA",SET_TASK_CONFIG:"@@SET_TASK_CONFIG",INIT_TOOL:"@@INIT_TOOL",SET_TOOL:"@@SET_TOOL",UPDATE_ON_SUBMIT:"@@UPDATE_ON_SUBMIT",UPDATE_ON_SAVE:"@@UPDATE_ON_SAVE",UPDATE_ON_PAGE_CHANGE:"@@UPDATE_ON_PAGE_CHANGE",UPDATE_ON_STEP_CHANGE:"@@UPDATE_ON_STEP_CHANGE",UPDATE_ROTATE:"@@UPDATE_ROTATE",UPDATE_GET_FILE_DATA:"@@UPDATE_GET_FILE_DATA",UPDATE_PAGE_SIZE:"@@UPDATE_PAGE_SIZE",UPDATE_LOAD_FILE_LIST:"@@UPDATE_LOAD_FILE_LIST",GET_FILE_DATA:"@@GET_FILE_DATA",SET_FILE_DATA:"@@SET_FILE_DATA",COPY_BACKWARD_RESULT:"@@COPY_BACKWARD_RESULT",SET_STEP:"@@SET_STEP",SUBMIT_RESULT:"@@SUBMIT_RESULT",SAVE_RESULT:"@@SAVE_RESULT",SET_BASIC_INDEX:"@@SET_BASIC_INDEX",CALC_STEP_PROGRESS:"@@CALC_STEP_PROGRESS",SET_TRIGGER_EVENT_AFTER_INDEX_CHANGED:"@@SET_TRIGGER_EVENT_AFTER_INDEX_CHANGED",SET_LOADING:"@@SET_LOADING"},_={UPDATE_IMG_ATTRIBUTE:"@@UPDATE_IMG_ATTRIBUTE",INIT_IMG_ATTRIBUTE:"@@INIT_IMG_ATTRIBUTE"},E={INIT_TOOL_STYLE_CONFIG:"@@INIT_TOOL_STYLE_CONFIG",UPDATE_TOOL_STYLE_CONFIG:"@@UPDATE_TOOL_STYLE_CONFIG"};export{T as ANNOTATION_ACTIONS,_ as IMAGE_ATTRIBUTE_ACTIONS,E as TOOL_STYLE_ACTIONS};
1
+ const T={UPDATE_TOOL_INSTANCE:"@@UPDATE_TOOL_INSTANCE",UPDATE_IMG_LIST:"@@UPDATE_IMG_LIST",UPDATE_ANNOTATION_CONFIG:"@@UPDATE_ANNOTATION_CONFIG",LOAD_FILE_DATA:"@@LOAD_FILE_DATA",SUBMIT_FILE_DATA:"@@SUBMIT_FILE_DATA",SET_TASK_CONFIG:"@@SET_TASK_CONFIG",INIT_TOOL:"@@INIT_TOOL",SET_TOOL:"@@SET_TOOL",UPDATE_ON_SUBMIT:"@@UPDATE_ON_SUBMIT",UPDATE_ON_SAVE:"@@UPDATE_ON_SAVE",UPDATE_ON_PAGE_CHANGE:"@@UPDATE_ON_PAGE_CHANGE",UPDATE_ON_STEP_CHANGE:"@@UPDATE_ON_STEP_CHANGE",UPDATE_ROTATE:"@@UPDATE_ROTATE",UPDATE_GET_FILE_DATA:"@@UPDATE_GET_FILE_DATA",UPDATE_PAGE_SIZE:"@@UPDATE_PAGE_SIZE",UPDATE_LOAD_FILE_LIST:"@@UPDATE_LOAD_FILE_LIST",GET_FILE_DATA:"@@GET_FILE_DATA",SET_FILE_DATA:"@@SET_FILE_DATA",COPY_BACKWARD_RESULT:"@@COPY_BACKWARD_RESULT",SET_STEP:"@@SET_STEP",SUBMIT_RESULT:"@@SUBMIT_RESULT",SAVE_RESULT:"@@SAVE_RESULT",SET_BASIC_INDEX:"@@SET_BASIC_INDEX",CALC_STEP_PROGRESS:"@@CALC_STEP_PROGRESS",SET_TRIGGER_EVENT_AFTER_INDEX_CHANGED:"@@SET_TRIGGER_EVENT_AFTER_INDEX_CHANGED",SKIP_BEFORE_PAGE_TURNING:"@@SKIP_BEFORE_PAGE_TURNING",SET_LOADING:"@@SET_LOADING",SET_POINT_CLOUD_LOADING:"@@SET_POINT_CLOUD_LOADING"},_={UPDATE_IMG_ATTRIBUTE:"@@UPDATE_IMG_ATTRIBUTE",INIT_IMG_ATTRIBUTE:"@@INIT_IMG_ATTRIBUTE"},E={INIT_TOOL_STYLE_CONFIG:"@@INIT_TOOL_STYLE_CONFIG",UPDATE_TOOL_STYLE_CONFIG:"@@UPDATE_TOOL_STYLE_CONFIG"};export{T as ANNOTATION_ACTIONS,_ as IMAGE_ATTRIBUTE_ACTIONS,E as TOOL_STYLE_ACTIONS};
@@ -1 +1 @@
1
- {"version":3,"file":"Actions.js","sources":["../../src/store/Actions.ts"],"sourcesContent":["export const ANNOTATION_ACTIONS = {\n UPDATE_TOOL_INSTANCE: '@@UPDATE_TOOL_INSTANCE',\n UPDATE_IMG_LIST: '@@UPDATE_IMG_LIST',\n UPDATE_ANNOTATION_CONFIG: '@@UPDATE_ANNOTATION_CONFIG',\n LOAD_FILE_DATA: '@@LOAD_FILE_DATA',\n SUBMIT_FILE_DATA: '@@SUBMIT_FILE_DATA',\n SET_TASK_CONFIG: '@@SET_TASK_CONFIG',\n INIT_TOOL: '@@INIT_TOOL',\n SET_TOOL: '@@SET_TOOL',\n UPDATE_ON_SUBMIT: '@@UPDATE_ON_SUBMIT',\n UPDATE_ON_SAVE: '@@UPDATE_ON_SAVE',\n UPDATE_ON_PAGE_CHANGE: '@@UPDATE_ON_PAGE_CHANGE',\n UPDATE_ON_STEP_CHANGE: '@@UPDATE_ON_STEP_CHANGE',\n UPDATE_ROTATE: '@@UPDATE_ROTATE',\n UPDATE_GET_FILE_DATA: '@@UPDATE_GET_FILE_DATA',\n UPDATE_PAGE_SIZE: '@@UPDATE_PAGE_SIZE',\n UPDATE_LOAD_FILE_LIST: '@@UPDATE_LOAD_FILE_LIST',\n GET_FILE_DATA: '@@GET_FILE_DATA',\n SET_FILE_DATA: '@@SET_FILE_DATA',\n COPY_BACKWARD_RESULT: '@@COPY_BACKWARD_RESULT',\n SET_STEP: '@@SET_STEP',\n SUBMIT_RESULT: '@@SUBMIT_RESULT',\n SAVE_RESULT: '@@SAVE_RESULT',\n SET_BASIC_INDEX: '@@SET_BASIC_INDEX',\n CALC_STEP_PROGRESS: '@@CALC_STEP_PROGRESS',\n SET_TRIGGER_EVENT_AFTER_INDEX_CHANGED: '@@SET_TRIGGER_EVENT_AFTER_INDEX_CHANGED',\n\n SET_LOADING: '@@SET_LOADING',\n};\n\nexport const IMAGE_ATTRIBUTE_ACTIONS = {\n UPDATE_IMG_ATTRIBUTE: '@@UPDATE_IMG_ATTRIBUTE',\n INIT_IMG_ATTRIBUTE: '@@INIT_IMG_ATTRIBUTE',\n};\n\nexport const TOOL_STYLE_ACTIONS = {\n INIT_TOOL_STYLE_CONFIG: '@@INIT_TOOL_STYLE_CONFIG',\n UPDATE_TOOL_STYLE_CONFIG: '@@UPDATE_TOOL_STYLE_CONFIG',\n};\n"],"names":[],"mappings":"AAAO,MAAM,kBAAqB,GAAA;AAAA,EAChC,oBAAsB,EAAA,wBAAA;AAAA,EACtB,eAAiB,EAAA,mBAAA;AAAA,EACjB,wBAA0B,EAAA,4BAAA;AAAA,EAC1B,cAAgB,EAAA,kBAAA;AAAA,EAChB,gBAAkB,EAAA,oBAAA;AAAA,EAClB,eAAiB,EAAA,mBAAA;AAAA,EACjB,SAAW,EAAA,aAAA;AAAA,EACX,QAAU,EAAA,YAAA;AAAA,EACV,gBAAkB,EAAA,oBAAA;AAAA,EAClB,cAAgB,EAAA,kBAAA;AAAA,EAChB,qBAAuB,EAAA,yBAAA;AAAA,EACvB,qBAAuB,EAAA,yBAAA;AAAA,EACvB,aAAe,EAAA,iBAAA;AAAA,EACf,oBAAsB,EAAA,wBAAA;AAAA,EACtB,gBAAkB,EAAA,oBAAA;AAAA,EAClB,qBAAuB,EAAA,yBAAA;AAAA,EACvB,aAAe,EAAA,iBAAA;AAAA,EACf,aAAe,EAAA,iBAAA;AAAA,EACf,oBAAsB,EAAA,wBAAA;AAAA,EACtB,QAAU,EAAA,YAAA;AAAA,EACV,aAAe,EAAA,iBAAA;AAAA,EACf,WAAa,EAAA,eAAA;AAAA,EACb,eAAiB,EAAA,mBAAA;AAAA,EACjB,kBAAoB,EAAA,sBAAA;AAAA,EACpB,qCAAuC,EAAA,yCAAA;AAAA,EAEvC,WAAa,EAAA,eAAA;AAAA,EAAA;AAGR,MAAM,uBAA0B,GAAA;AAAA,EACrC,oBAAsB,EAAA,wBAAA;AAAA,EACtB,kBAAoB,EAAA,sBAAA;AAAA,EAAA;AAGf,MAAM,kBAAqB,GAAA;AAAA,EAChC,sBAAwB,EAAA,0BAAA;AAAA,EACxB,wBAA0B,EAAA,4BAAA;AAAA;;;;"}
1
+ {"version":3,"file":"Actions.js","sources":["../../src/store/Actions.ts"],"sourcesContent":["export const ANNOTATION_ACTIONS = {\n UPDATE_TOOL_INSTANCE: '@@UPDATE_TOOL_INSTANCE',\n UPDATE_IMG_LIST: '@@UPDATE_IMG_LIST',\n UPDATE_ANNOTATION_CONFIG: '@@UPDATE_ANNOTATION_CONFIG',\n LOAD_FILE_DATA: '@@LOAD_FILE_DATA',\n SUBMIT_FILE_DATA: '@@SUBMIT_FILE_DATA',\n SET_TASK_CONFIG: '@@SET_TASK_CONFIG',\n INIT_TOOL: '@@INIT_TOOL',\n SET_TOOL: '@@SET_TOOL',\n UPDATE_ON_SUBMIT: '@@UPDATE_ON_SUBMIT',\n UPDATE_ON_SAVE: '@@UPDATE_ON_SAVE',\n UPDATE_ON_PAGE_CHANGE: '@@UPDATE_ON_PAGE_CHANGE',\n UPDATE_ON_STEP_CHANGE: '@@UPDATE_ON_STEP_CHANGE',\n UPDATE_ROTATE: '@@UPDATE_ROTATE',\n UPDATE_GET_FILE_DATA: '@@UPDATE_GET_FILE_DATA',\n UPDATE_PAGE_SIZE: '@@UPDATE_PAGE_SIZE',\n UPDATE_LOAD_FILE_LIST: '@@UPDATE_LOAD_FILE_LIST',\n GET_FILE_DATA: '@@GET_FILE_DATA',\n SET_FILE_DATA: '@@SET_FILE_DATA',\n COPY_BACKWARD_RESULT: '@@COPY_BACKWARD_RESULT',\n SET_STEP: '@@SET_STEP',\n SUBMIT_RESULT: '@@SUBMIT_RESULT',\n SAVE_RESULT: '@@SAVE_RESULT',\n SET_BASIC_INDEX: '@@SET_BASIC_INDEX',\n CALC_STEP_PROGRESS: '@@CALC_STEP_PROGRESS',\n SET_TRIGGER_EVENT_AFTER_INDEX_CHANGED: '@@SET_TRIGGER_EVENT_AFTER_INDEX_CHANGED',\n SKIP_BEFORE_PAGE_TURNING: '@@SKIP_BEFORE_PAGE_TURNING',\n SET_LOADING: '@@SET_LOADING',\n SET_POINT_CLOUD_LOADING: '@@SET_POINT_CLOUD_LOADING',\n\n \n};\n\nexport const IMAGE_ATTRIBUTE_ACTIONS = {\n UPDATE_IMG_ATTRIBUTE: '@@UPDATE_IMG_ATTRIBUTE',\n INIT_IMG_ATTRIBUTE: '@@INIT_IMG_ATTRIBUTE',\n};\n\nexport const TOOL_STYLE_ACTIONS = {\n INIT_TOOL_STYLE_CONFIG: '@@INIT_TOOL_STYLE_CONFIG',\n UPDATE_TOOL_STYLE_CONFIG: '@@UPDATE_TOOL_STYLE_CONFIG',\n};\n"],"names":[],"mappings":"AAAO,MAAM,kBAAqB,GAAA;AAAA,EAChC,oBAAsB,EAAA,wBAAA;AAAA,EACtB,eAAiB,EAAA,mBAAA;AAAA,EACjB,wBAA0B,EAAA,4BAAA;AAAA,EAC1B,cAAgB,EAAA,kBAAA;AAAA,EAChB,gBAAkB,EAAA,oBAAA;AAAA,EAClB,eAAiB,EAAA,mBAAA;AAAA,EACjB,SAAW,EAAA,aAAA;AAAA,EACX,QAAU,EAAA,YAAA;AAAA,EACV,gBAAkB,EAAA,oBAAA;AAAA,EAClB,cAAgB,EAAA,kBAAA;AAAA,EAChB,qBAAuB,EAAA,yBAAA;AAAA,EACvB,qBAAuB,EAAA,yBAAA;AAAA,EACvB,aAAe,EAAA,iBAAA;AAAA,EACf,oBAAsB,EAAA,wBAAA;AAAA,EACtB,gBAAkB,EAAA,oBAAA;AAAA,EAClB,qBAAuB,EAAA,yBAAA;AAAA,EACvB,aAAe,EAAA,iBAAA;AAAA,EACf,aAAe,EAAA,iBAAA;AAAA,EACf,oBAAsB,EAAA,wBAAA;AAAA,EACtB,QAAU,EAAA,YAAA;AAAA,EACV,aAAe,EAAA,iBAAA;AAAA,EACf,WAAa,EAAA,eAAA;AAAA,EACb,eAAiB,EAAA,mBAAA;AAAA,EACjB,kBAAoB,EAAA,sBAAA;AAAA,EACpB,qCAAuC,EAAA,yCAAA;AAAA,EACvC,wBAA0B,EAAA,4BAAA;AAAA,EAC1B,WAAa,EAAA,eAAA;AAAA,EACb,uBAAyB,EAAA,2BAAA;AAAA,EAAA;AAKpB,MAAM,uBAA0B,GAAA;AAAA,EACrC,oBAAsB,EAAA,wBAAA;AAAA,EACtB,kBAAoB,EAAA,sBAAA;AAAA,EAAA;AAGf,MAAM,kBAAqB,GAAA;AAAA,EAChC,sBAAwB,EAAA,0BAAA;AAAA,EACxB,wBAA0B,EAAA,4BAAA;AAAA;;;;"}
@@ -1 +1 @@
1
- import{ANNOTATION_ACTIONS as r}from"../Actions.js";import{LoadFileAndFileData as S,getStepConfig as N}from"./reducer.js";import{ESubmitType as c}from"../../constant/index.js";import{EPageTurningOperation as _}from"../../data/enums/AnnotationSize.js";import w from"../../utils/PageOperator.js";import{jsonParser as R}from"../../utils/index.js";var A=(t,e,n)=>new Promise((o,s)=>{var l=u=>{try{d(n.next(u))}catch(a){s(a)}},i=u=>{try{d(n.throw(u))}catch(a){s(a)}},d=u=>u.done?o(u.value):Promise.resolve(u.value).then(l,i);d((n=n.apply(t,e)).next())});const B=(t,e)=>e.map(n=>t(n)),h=t=>t===_.Forward?c.Forward:t===_.Backward?c.Backward:t===_.Jump?c.Jump:c.Forward,F=(t,e)=>{var n,o;const{imgList:s,imgIndex:l}=t,{dataSourceStep:i}=N(t.stepList,t.step);return((o=(n=R(s[l-1].result)[`step_${i}`])==null?void 0:n.result)==null?void 0:o.length)-1||e};function G(t){return{type:r.UPDATE_TOOL_INSTANCE,payload:{toolInstance:t}}}function I({stepList:t,step:e}){return{type:r.SET_TASK_CONFIG,payload:{stepList:t,step:e}}}function m(t){return{type:r.UPDATE_ON_SUBMIT,payload:{onSubmit:t}}}function g(t){return{type:r.UPDATE_ON_SAVE,payload:{onSave:t}}}function P(t){return{type:r.UPDATE_ON_PAGE_CHANGE,payload:{onPageChange:t}}}function U(t){return{type:r.UPDATE_ON_STEP_CHANGE,payload:{onStepChange:t}}}function L(t){return{type:r.UPDATE_GET_FILE_DATA,payload:{getFileData:t}}}function v(t){return{type:r.UPDATE_PAGE_SIZE,payload:{pageSize:t}}}function C(t){return{type:r.UPDATE_LOAD_FILE_LIST,payload:{loadFileList:t}}}function b(){return{type:r.UPDATE_ROTATE}}function k(){return{type:r.COPY_BACKWARD_RESULT}}function M({onSubmit:t,onSave:e,onPageChange:n,onStepChange:o,getFileData:s,pageSize:l,loadFileList:i,step:d,stepList:u}){const a=[];return t&&a.push(m(t)),e&&a.push(g(e)),n&&a.push(P(n)),o&&a.push(U(o)),s&&a.push(L(s)),i&&a.push(C(i)),l&&a.push(v(l)),a.push(I({stepList:u,step:d})),a.push({type:r.CALC_STEP_PROGRESS}),a.push({type:r.INIT_TOOL}),p=>B(p,a)}const j=(t,e)=>{var n;const o=e==null?void 0:e.findIndex(s=>(s==null?void 0:s.step)===t);return(n=e[o+1])==null?void 0:n.step},J=t=>(e,n)=>{const{annotation:o}=n(),{step:s,stepList:l}=o,i=j(s,l);return[e(x(i,t))]},x=(t,e)=>(n,o)=>{var s,l;const{annotation:i}=o();(s=i==null?void 0:i.onStepChange)==null||s.call(i,t);const d=(l=i==null?void 0:i.imgIndex)!=null?l:0;return[n({type:r.SUBMIT_RESULT}),n({type:r.SUBMIT_FILE_DATA,payload:{submitType:c.StepChanged}}),n({type:r.SET_STEP,payload:{toStep:t}}),n({type:r.CALC_STEP_PROGRESS}),n(S(e!=null?e:d,0))]},f=t=>e=>[e({type:r.SUBMIT_RESULT}),e({type:r.SUBMIT_FILE_DATA,payload:{submitType:t}})],H=(t,e,n,o)=>[t(f(n)),t(S(e,o))],V=(t,e)=>[t({type:r.SUBMIT_RESULT}),t({type:r.SET_BASIC_INDEX,payload:{basicIndex:e}})],z=(t,e)=>{t({type:r.SET_TRIGGER_EVENT_AFTER_INDEX_CHANGED,payload:{triggerEventAfterIndexChanged:e}})},K=(t=!1)=>(e,n)=>T(e,n,_.Backward,t),W=(t=!1)=>(e,n)=>T(e,n,_.Forward,t),X=(t,e=!1)=>(n,o)=>{if(t!==o().imgIndex)return T(n,o,_.Jump,e,t)},D=(t,e,n,o)=>A(void 0,null,function*(){var s;const{loadFileList:l,imgList:i,pageSize:d}=e().annotation,u=Math.floor(n/d);y(t,!0);try{const a=yield l(u,d);if(y(t,!1),!((s=a==null?void 0:a.fileList)==null?void 0:s.length)||!(a==null?void 0:a.total))throw new Error("fileList and total are required");const p=o?new Array(a.total):[...i];return p.splice(u*d,d,...a.fileList),t({type:r.UPDATE_IMG_LIST,payload:{imgList:p}}),!0}catch(a){y(t,!1),console.error(a)}}),T=(t,e,n,o=!1,s)=>A(void 0,null,function*(){var l;const i=e().annotation,{fileIndexChanged:d,fileIndex:u,basicIndexChanged:a,basicIndex:p}=w.getNextPageInfo(n,i,s),E=h(n);if(z(t,o),d){if(i.loading||!i.imgList[u]&&!(yield D(t,e,u)))return;(l=i.onPageChange)==null||l.call(i,u);const O=E===c.Backward?F(e().annotation,p):p;return H(t,u,E,O)}return a?V(t,p):t(f(E))}),q=t=>{t(f(c.Save)),t({type:r.SAVE_RESULT})},y=(t,e)=>{t({type:r.SET_LOADING,payload:{loading:e}})};export{q as ChangeSave,k as CopyBackWordResult,T as DispatcherTurning,M as InitTaskData,K as PageBackward,W as PageForward,X as PageJump,y as SetAnnotationLoading,I as SetTaskConfig,J as ToNextStep,f as ToSubmitFileData,L as UpdateGetFileData,C as UpdateGetFileList,P as UpdateOnPageChange,g as UpdateOnSave,U as UpdateOnStepChange,m as UpdateOnSubmit,v as UpdatePageSize,x as UpdateProcessingStep,b as UpdateRotate,G as UpdateToolInstance,D as loadImgList};
1
+ import{ANNOTATION_ACTIONS as a}from"../Actions.js";import{LoadFileAndFileData as S,getStepConfig as R}from"./reducer.js";import{ESubmitType as c}from"../../constant/index.js";import{EPageTurningOperation as _}from"../../data/enums/AnnotationSize.js";import w from"../../utils/PageOperator.js";import{jsonParser as B}from"../../utils/index.js";var I=(t,e,n)=>new Promise((o,i)=>{var p=s=>{try{d(n.next(s))}catch(l){i(l)}},r=s=>{try{d(n.throw(s))}catch(l){i(l)}},d=s=>s.done?o(s.value):Promise.resolve(s.value).then(p,r);d((n=n.apply(t,e)).next())});const G=(t,e)=>e.map(n=>t(n)),h=t=>t===_.Forward?c.Forward:t===_.Backward?c.Backward:t===_.Jump?c.Jump:c.Forward,F=(t,e)=>{var n,o;const{imgList:i,imgIndex:p}=t,{dataSourceStep:r}=R(t.stepList,t.step);return((o=(n=B(i[p-1].result)[`step_${r}`])==null?void 0:n.result)==null?void 0:o.length)-1||e};function b(t){return{type:a.UPDATE_TOOL_INSTANCE,payload:{toolInstance:t}}}function A({stepList:t,step:e}){return{type:a.SET_TASK_CONFIG,payload:{stepList:t,step:e}}}function P(t){return{type:a.UPDATE_ON_SUBMIT,payload:{onSubmit:t}}}function g(t){return{type:a.UPDATE_ON_SAVE,payload:{onSave:t}}}function m(t){return{type:a.UPDATE_ON_PAGE_CHANGE,payload:{onPageChange:t}}}function U(t){return{type:a.UPDATE_ON_STEP_CHANGE,payload:{onStepChange:t}}}function L(t){return{type:a.UPDATE_GET_FILE_DATA,payload:{getFileData:t}}}function v(t){return{type:a.UPDATE_PAGE_SIZE,payload:{pageSize:t}}}function C(t){return{type:a.UPDATE_LOAD_FILE_LIST,payload:{loadFileList:t}}}function k(){return{type:a.UPDATE_ROTATE}}function N(t){return{type:a.SKIP_BEFORE_PAGE_TURNING,payload:{skipBeforePageTurning:t}}}function M(){return{type:a.COPY_BACKWARD_RESULT}}function j({onSubmit:t,onSave:e,onPageChange:n,onStepChange:o,getFileData:i,pageSize:p,loadFileList:r,step:d,stepList:s,skipBeforePageTurning:l}){const u=[];return t&&u.push(P(t)),e&&u.push(g(e)),n&&u.push(m(n)),o&&u.push(U(o)),i&&u.push(L(i)),r&&u.push(C(r)),p&&u.push(v(p)),l&&u.push(N(l)),u.push(A({stepList:s,step:d})),u.push({type:a.CALC_STEP_PROGRESS}),u.push({type:a.INIT_TOOL}),f=>G(f,u)}const J=(t,e)=>{var n;const o=e==null?void 0:e.findIndex(i=>(i==null?void 0:i.step)===t);return(n=e[o+1])==null?void 0:n.step},H=t=>(e,n)=>{const{annotation:o}=n(),{step:i,stepList:p}=o,r=J(i,p);return[e(O(r,t))]},O=(t,e)=>(n,o)=>{var i,p;const{annotation:r}=o();(i=r==null?void 0:r.onStepChange)==null||i.call(r,t);const d=(p=r==null?void 0:r.imgIndex)!=null?p:0;return[n({type:a.SUBMIT_RESULT}),n({type:a.SUBMIT_FILE_DATA,payload:{submitType:c.StepChanged}}),n({type:a.SET_STEP,payload:{toStep:t}}),n({type:a.CALC_STEP_PROGRESS}),n(S(e!=null?e:d,0))]},T=t=>e=>[e({type:a.SUBMIT_RESULT}),e({type:a.SUBMIT_FILE_DATA,payload:{submitType:t}})],K=(t,e,n,o)=>[t(T(n)),t(S(e,o))],V=(t,e)=>[t({type:a.SUBMIT_RESULT}),t({type:a.SET_BASIC_INDEX,payload:{basicIndex:e}})],z=(t,e)=>{t({type:a.SET_TRIGGER_EVENT_AFTER_INDEX_CHANGED,payload:{triggerEventAfterIndexChanged:e}})},W=(t=!1)=>(e,n)=>y(e,n,_.Backward,t),X=(t=!1)=>(e,n)=>y(e,n,_.Forward,t),q=(t,e=!1)=>(n,o)=>{if(t!==o().imgIndex)return y(n,o,_.Jump,e,t)},D=(t,e,n,o)=>I(void 0,null,function*(){var i;const{loadFileList:p,imgList:r,pageSize:d}=e().annotation,s=Math.floor(n/d);E(t,!0);try{const l=yield p(s,d);if(E(t,!1),!((i=l==null?void 0:l.fileList)==null?void 0:i.length)||!(l==null?void 0:l.total))throw new Error("fileList and total are required");const u=o?new Array(l.total):[...r];return u.splice(s*d,d,...l.fileList),t({type:a.UPDATE_IMG_LIST,payload:{imgList:u}}),!0}catch(l){E(t,!1),console.error(l)}}),y=(t,e,n,o=!1,i)=>I(void 0,null,function*(){var p;const r=e().annotation,{fileIndexChanged:d,fileIndex:s,basicIndexChanged:l,basicIndex:u}=w.getNextPageInfo(n,r,i),f=h(n);if(z(t,o),d){if(r.loading||!r.imgList[s]&&!(yield D(t,e,s)))return;(p=r.onPageChange)==null||p.call(r,s);const x=f===c.Backward?F(e().annotation,u):u;return K(t,s,f,x)}return l?V(t,u):t(T(f))}),Y=t=>{t(T(c.Save)),t({type:a.SAVE_RESULT})},E=(t,e)=>{t({type:a.SET_LOADING,payload:{loading:e}})},Z=(t,e)=>{t({type:a.SET_LOADING,payload:{loading:e}})};export{Y as ChangeSave,M as CopyBackWordResult,y as DispatcherTurning,j as InitTaskData,W as PageBackward,X as PageForward,q as PageJump,E as SetAnnotationLoading,Z as SetPointCloudLoading,A as SetTaskConfig,H as ToNextStep,T as ToSubmitFileData,L as UpdateGetFileData,C as UpdateGetFileList,m as UpdateOnPageChange,g as UpdateOnSave,U as UpdateOnStepChange,P as UpdateOnSubmit,v as UpdatePageSize,O as UpdateProcessingStep,k as UpdateRotate,N as UpdateSkipBeforePageTurning,b as UpdateToolInstance,D as loadImgList};