@labelbee/lb-components 1.7.0-alpha.0 → 1.7.0-alpha.3

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 (71) hide show
  1. package/dist/App.js +1 -1
  2. package/dist/components/attributeList/index.js +1 -1
  3. package/dist/components/pointCloudView/PointCloud2DView.js +1 -1
  4. package/dist/components/pointCloudView/PointCloud3DView.js +1 -1
  5. package/dist/components/pointCloudView/PointCloudBackView.js +1 -1
  6. package/dist/components/pointCloudView/PointCloudInfos.js +1 -1
  7. package/dist/components/pointCloudView/PointCloudListener.js +1 -1
  8. package/dist/components/pointCloudView/PointCloudSideView.js +1 -1
  9. package/dist/components/pointCloudView/PointCloudTopView.js +1 -1
  10. package/dist/components/pointCloudView/hooks/useAttribute.js +1 -0
  11. package/dist/components/pointCloudView/hooks/useHistory.js +1 -1
  12. package/dist/components/pointCloudView/hooks/usePointCloudViews.js +1 -1
  13. package/dist/components/videoPlayer/components/controller/index.js +1 -1
  14. package/dist/constant/styleString.js +1 -1
  15. package/dist/store/annotation/map.js +1 -1
  16. package/dist/types/components/attributeList/index.d.ts +3 -2
  17. package/dist/types/components/pointCloudView/PointCloud2DView.d.ts +2 -5
  18. package/dist/types/components/pointCloudView/PointCloud3DView.d.ts +3 -3
  19. package/dist/types/components/pointCloudView/PointCloudBackView.d.ts +2 -2
  20. package/dist/types/components/pointCloudView/PointCloudListener.d.ts +3 -3
  21. package/dist/types/components/pointCloudView/PointCloudSideView.d.ts +3 -3
  22. package/dist/types/components/pointCloudView/PointCloudTopView.d.ts +1 -1
  23. package/dist/types/components/pointCloudView/hooks/useAttribute.d.ts +7 -0
  24. package/dist/types/components/pointCloudView/hooks/usePointCloudViews.d.ts +2 -1
  25. package/dist/types/constant/styleString.d.ts +1 -1
  26. package/dist/types/store/annotation/map.d.ts +5 -0
  27. package/dist/types/views/MainView/toolFooter/FooterTips/ToolHotKey/index.d.ts +16 -1
  28. package/dist/views/MainView/sidebar/PointCloudToolSidebar/components/batchUpdateModal/index.js +1 -1
  29. package/dist/views/MainView/sidebar/PointCloudToolSidebar/index.js +1 -1
  30. package/dist/views/MainView/toolFooter/FooterTips/ToolHotKey/index.js +1 -1
  31. package/dist/views/MainView/toolFooter/FooterTips/index.js +1 -1
  32. package/dist/views/MainView/toolFooter/index.js +1 -1
  33. package/es/App.js +1 -1
  34. package/es/App.js.map +1 -1
  35. package/es/components/attributeList/index.js +1 -1
  36. package/es/components/attributeList/index.js.map +1 -1
  37. package/es/components/pointCloudView/PointCloud2DView.js +1 -1
  38. package/es/components/pointCloudView/PointCloud2DView.js.map +1 -1
  39. package/es/components/pointCloudView/PointCloud3DView.js +1 -1
  40. package/es/components/pointCloudView/PointCloud3DView.js.map +1 -1
  41. package/es/components/pointCloudView/PointCloudBackView.js +1 -1
  42. package/es/components/pointCloudView/PointCloudBackView.js.map +1 -1
  43. package/es/components/pointCloudView/PointCloudInfos.js +1 -1
  44. package/es/components/pointCloudView/PointCloudInfos.js.map +1 -1
  45. package/es/components/pointCloudView/PointCloudListener.js +1 -1
  46. package/es/components/pointCloudView/PointCloudListener.js.map +1 -1
  47. package/es/components/pointCloudView/PointCloudSideView.js +1 -1
  48. package/es/components/pointCloudView/PointCloudSideView.js.map +1 -1
  49. package/es/components/pointCloudView/PointCloudTopView.js +1 -1
  50. package/es/components/pointCloudView/PointCloudTopView.js.map +1 -1
  51. package/es/components/pointCloudView/hooks/useAttribute.js +1 -0
  52. package/es/components/pointCloudView/hooks/useAttribute.js.map +1 -0
  53. package/es/components/pointCloudView/hooks/useHistory.js +1 -1
  54. package/es/components/pointCloudView/hooks/useHistory.js.map +1 -1
  55. package/es/components/pointCloudView/hooks/usePointCloudViews.js +1 -1
  56. package/es/components/pointCloudView/hooks/usePointCloudViews.js.map +1 -1
  57. package/es/constant/styleString.js +1 -1
  58. package/es/constant/styleString.js.map +1 -1
  59. package/es/store/annotation/map.js +1 -1
  60. package/es/store/annotation/map.js.map +1 -1
  61. package/es/views/MainView/sidebar/PointCloudToolSidebar/components/batchUpdateModal/index.js +1 -1
  62. package/es/views/MainView/sidebar/PointCloudToolSidebar/components/batchUpdateModal/index.js.map +1 -1
  63. package/es/views/MainView/sidebar/PointCloudToolSidebar/index.js +1 -1
  64. package/es/views/MainView/sidebar/PointCloudToolSidebar/index.js.map +1 -1
  65. package/es/views/MainView/toolFooter/FooterTips/ToolHotKey/index.js +1 -1
  66. package/es/views/MainView/toolFooter/FooterTips/ToolHotKey/index.js.map +1 -1
  67. package/es/views/MainView/toolFooter/FooterTips/index.js +1 -1
  68. package/es/views/MainView/toolFooter/FooterTips/index.js.map +1 -1
  69. package/es/views/MainView/toolFooter/index.js +1 -1
  70. package/es/views/MainView/toolFooter/index.js.map +1 -1
  71. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"PointCloudBackView.js","sources":["../../../src/components/pointCloudView/PointCloudBackView.tsx"],"sourcesContent":["/*\n * @Author: Laoluo luozefeng@sensetime.com\n * @Date: 2022-06-22 11:08:31\n * @LastEditors: Laoluo luozefeng@sensetime.com\n * @LastEditTime: 2022-07-08 11:08:02\n */\nimport { PointCloud, MathUtils, PointCloudAnnotation } from '@labelbee/lb-annotation';\nimport { getClassName } from '@/utils/dom';\nimport { PointCloudContainer } from './PointCloudLayout';\nimport React, { useEffect, useRef } from 'react';\nimport { PointCloudContext } from './PointCloudContext';\nimport { useSingleBox } from './hooks/useSingleBox';\nimport { EPerspectiveView, IPointCloudBox, IPolygonPoint } from '@labelbee/lb-utils';\nimport { SizeInfoForView } from './PointCloudInfos';\nimport { connect } from 'react-redux';\nimport { aMapStateToProps, IAnnotationStateProps } from '@/store/annotation/map';\nimport { synchronizeSideView, synchronizeTopView } from './hooks/usePointCloudViews';\nimport useSize from '@/hooks/useSize';\nimport EmptyPage from './components/EmptyPage';\nimport { useTranslation } from 'react-i18next';\nimport { LabelBeeContext } from '@/store/ctx';\n\n/**\n * 统一一下,将其拓展为 二维转换为 三维坐标的转换\n * Get the offset from canvas2d-coordinate to world coordinate\n * @param currentPos\n * @param size\n * @param zoom\n * @returns\n */\nconst TransferCanvas2WorldOffset = (\n currentPos: { x: number; y: number },\n size: { width: number; height: number },\n zoom = 1,\n) => {\n const { width: w, height: h } = size;\n\n const canvasCenterPoint = {\n x: currentPos.x + (w * zoom) / 2,\n y: currentPos.y + (h * zoom) / 2,\n };\n\n const worldCenterPoint = {\n x: size.width / 2,\n y: size.height / 2,\n };\n\n return {\n offsetX: (worldCenterPoint.x - canvasCenterPoint.x) / zoom,\n offsetY: -(worldCenterPoint.y - canvasCenterPoint.y) / zoom,\n };\n};\nconst updateBackViewByCanvas2D = (\n currentPos: { x: number; y: number },\n zoom: number,\n size: { width: number; height: number },\n selectedPointCloudBox: IPointCloudBox,\n backPointCloud: PointCloud,\n) => {\n const { offsetX, offsetY } = TransferCanvas2WorldOffset(currentPos, size, zoom);\n backPointCloud.camera.zoom = zoom;\n if (currentPos) {\n const cos = Math.cos(selectedPointCloudBox.rotation);\n const sin = Math.sin(selectedPointCloudBox.rotation);\n const offsetXX = offsetX * cos;\n const offsetXY = offsetX * sin;\n const { x, y, z } = backPointCloud.initCameraPosition;\n backPointCloud.camera.position.set(x + offsetXY, y - offsetXX, z + offsetY);\n }\n backPointCloud.camera.updateProjectionMatrix();\n backPointCloud.render();\n};\n\nconst PointCloudSideView = ({ currentData }: IAnnotationStateProps) => {\n const ptCtx = React.useContext(PointCloudContext);\n const ref = useRef<HTMLDivElement>(null);\n const size = useSize(ref);\n const { updateSelectedBox, selectedBox } = useSingleBox();\n const { t } = useTranslation();\n\n useEffect(() => {\n if (ref.current) {\n const size = {\n width: ref.current.clientWidth,\n height: ref.current.clientHeight,\n };\n\n const pointCloudAnnotation = new PointCloudAnnotation({\n container: ref.current,\n size,\n polygonOperationProps: { showDirectionLine: false, forbidAddNew: true },\n });\n ptCtx.setBackViewInstance(pointCloudAnnotation);\n }\n }, []);\n\n useEffect(() => {\n // By the way as an initialization judgment\n if (!size || !ptCtx.backViewInstance) {\n return;\n }\n\n const {\n pointCloud2dOperation: backPointCloudPolygonOperation,\n pointCloudInstance: backPointCloud,\n } = ptCtx.backViewInstance;\n\n /**\n * Synchronized 3d point cloud view displacement operations\n *\n * Change Orthographic Camera size\n */\n backPointCloudPolygonOperation.singleOn('renderZoom', (zoom: number, currentPos: any) => {\n if (!ptCtx.selectedPointCloudBox) {\n return;\n }\n updateBackViewByCanvas2D(currentPos, zoom, size, ptCtx.selectedPointCloudBox, backPointCloud);\n });\n\n // Synchronized 3d point cloud view displacement operations\n backPointCloudPolygonOperation.singleOn('dragMove', ({ currentPos, zoom }: any) => {\n if (!ptCtx.selectedPointCloudBox) {\n return;\n }\n updateBackViewByCanvas2D(currentPos, zoom, size, ptCtx.selectedPointCloudBox, backPointCloud);\n });\n\n backPointCloudPolygonOperation.singleOn(\n 'updatePolygonByDrag',\n ({ newPolygon, originPolygon }: any) => {\n if (!ptCtx.selectedPointCloudBox || !ptCtx.mainViewInstance || !currentData.url) {\n return;\n }\n\n // Notice. The sort of polygon is important.\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 offsetCenterPoint = {\n x: offset.x,\n y: 0, // Not be used.\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 let { newBoxParams } = backPointCloud.getNewBoxByBackUpdate(\n offsetCenterPoint,\n offsetWidth,\n offsetHeight,\n ptCtx.selectedPointCloudBox,\n );\n\n // Update count\n if (ptCtx.mainViewInstance) {\n const { count } = ptCtx.mainViewInstance.getSensesPointZAxisInPolygon(\n ptCtx.mainViewInstance.getCuboidFromPointCloudBox(newBoxParams)\n .polygonPointList as IPolygonPoint[],\n [\n newBoxParams.center.z - newBoxParams.depth / 2,\n newBoxParams.center.z + newBoxParams.depth / 2,\n ],\n );\n\n newBoxParams = {\n ...newBoxParams,\n count,\n };\n }\n\n synchronizeTopView(newBoxParams, newPolygon, ptCtx.topViewInstance, ptCtx.mainViewInstance);\n synchronizeSideView(newBoxParams, newPolygon, ptCtx.sideViewInstance, currentData.url);\n ptCtx.mainViewInstance.highlightOriginPointCloud(newBoxParams);\n updateSelectedBox(newBoxParams);\n },\n );\n }, [ptCtx, size]);\n\n useEffect(() => {\n // Update Size\n ptCtx?.backViewInstance?.initSize(size);\n }, [size]);\n\n return (\n <PointCloudContainer\n className={getClassName('point-cloud-container', 'back-view')}\n title={t('BackView')}\n toolbar={<SizeInfoForView perspectiveView={EPerspectiveView.Back} />}\n >\n <div className={getClassName('point-cloud-container', 'bottom-view-content')}>\n <div className={getClassName('point-cloud-container', 'core-instance')} ref={ref} />\n {!selectedBox && <EmptyPage />}\n </div>\n </PointCloudContainer>\n );\n};\n\nexport default connect(aMapStateToProps, null, null, { context: LabelBeeContext })(\n PointCloudSideView,\n);\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PointCloudBackView.js","sources":["../../../src/components/pointCloudView/PointCloudBackView.tsx"],"sourcesContent":["/*\n * @Author: Laoluo luozefeng@sensetime.com\n * @Date: 2022-06-22 11:08:31\n * @LastEditors: Laoluo luozefeng@sensetime.com\n * @LastEditTime: 2022-07-08 11:08:02\n */\nimport {\n PointCloud,\n MathUtils,\n PointCloudAnnotation,\n getCuboidFromPointCloudBox,\n} from '@labelbee/lb-annotation';\nimport { getClassName } from '@/utils/dom';\nimport { PointCloudContainer } from './PointCloudLayout';\nimport React, { useEffect, useRef } from 'react';\nimport { PointCloudContext } from './PointCloudContext';\nimport { useSingleBox } from './hooks/useSingleBox';\nimport { EPerspectiveView, IPointCloudBox, IPolygonPoint } from '@labelbee/lb-utils';\nimport { SizeInfoForView } from './PointCloudInfos';\nimport { connect } from 'react-redux';\nimport { a2MapStateToProps, IA2MapStateProps } from '@/store/annotation/map';\nimport { synchronizeSideView, synchronizeTopView } from './hooks/usePointCloudViews';\nimport useSize from '@/hooks/useSize';\nimport EmptyPage from './components/EmptyPage';\nimport { useTranslation } from 'react-i18next';\nimport { LabelBeeContext } from '@/store/ctx';\n\n/**\n * 统一一下,将其拓展为 二维转换为 三维坐标的转换\n * Get the offset from canvas2d-coordinate to world coordinate\n * @param currentPos\n * @param size\n * @param zoom\n * @returns\n */\nconst TransferCanvas2WorldOffset = (\n currentPos: { x: number; y: number },\n size: { width: number; height: number },\n zoom = 1,\n) => {\n const { width: w, height: h } = size;\n\n const canvasCenterPoint = {\n x: currentPos.x + (w * zoom) / 2,\n y: currentPos.y + (h * zoom) / 2,\n };\n\n const worldCenterPoint = {\n x: size.width / 2,\n y: size.height / 2,\n };\n\n return {\n offsetX: (worldCenterPoint.x - canvasCenterPoint.x) / zoom,\n offsetY: -(worldCenterPoint.y - canvasCenterPoint.y) / zoom,\n };\n};\nconst updateBackViewByCanvas2D = (\n currentPos: { x: number; y: number },\n zoom: number,\n size: { width: number; height: number },\n selectedPointCloudBox: IPointCloudBox,\n backPointCloud: PointCloud,\n) => {\n const { offsetX, offsetY } = TransferCanvas2WorldOffset(currentPos, size, zoom);\n backPointCloud.camera.zoom = zoom;\n if (currentPos) {\n const cos = Math.cos(selectedPointCloudBox.rotation);\n const sin = Math.sin(selectedPointCloudBox.rotation);\n const offsetXX = offsetX * cos;\n const offsetXY = offsetX * sin;\n const { x, y, z } = backPointCloud.initCameraPosition;\n backPointCloud.camera.position.set(x + offsetXY, y - offsetXX, z + offsetY);\n }\n backPointCloud.camera.updateProjectionMatrix();\n backPointCloud.render();\n};\n\nconst PointCloudSideView = ({ currentData, config }: IA2MapStateProps) => {\n const ptCtx = React.useContext(PointCloudContext);\n const ref = useRef<HTMLDivElement>(null);\n const size = useSize(ref);\n const { updateSelectedBox, selectedBox } = useSingleBox();\n const { t } = useTranslation();\n\n useEffect(() => {\n if (ref.current) {\n const size = {\n width: ref.current.clientWidth,\n height: ref.current.clientHeight,\n };\n\n const pointCloudAnnotation = new PointCloudAnnotation({\n container: ref.current,\n size,\n polygonOperationProps: { showDirectionLine: false, forbidAddNew: true },\n config,\n });\n ptCtx.setBackViewInstance(pointCloudAnnotation);\n }\n }, []);\n\n useEffect(() => {\n // By the way as an initialization judgment\n if (!size || !ptCtx.backViewInstance) {\n return;\n }\n\n const {\n pointCloud2dOperation: backPointCloudPolygonOperation,\n pointCloudInstance: backPointCloud,\n } = ptCtx.backViewInstance;\n\n /**\n * Synchronized 3d point cloud view displacement operations\n *\n * Change Orthographic Camera size\n */\n backPointCloudPolygonOperation.singleOn('renderZoom', (zoom: number, currentPos: any) => {\n if (!ptCtx.selectedPointCloudBox) {\n return;\n }\n updateBackViewByCanvas2D(currentPos, zoom, size, ptCtx.selectedPointCloudBox, backPointCloud);\n });\n\n // Synchronized 3d point cloud view displacement operations\n backPointCloudPolygonOperation.singleOn('dragMove', ({ currentPos, zoom }: any) => {\n if (!ptCtx.selectedPointCloudBox) {\n return;\n }\n updateBackViewByCanvas2D(currentPos, zoom, size, ptCtx.selectedPointCloudBox, backPointCloud);\n });\n\n backPointCloudPolygonOperation.singleOn(\n 'updatePolygonByDrag',\n ({ newPolygon, originPolygon }: any) => {\n if (!ptCtx.selectedPointCloudBox || !ptCtx.mainViewInstance || !currentData.url) {\n return;\n }\n\n // Notice. The sort of polygon is important.\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 offsetCenterPoint = {\n x: offset.x,\n y: 0, // Not be used.\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 let { newBoxParams } = backPointCloud.getNewBoxByBackUpdate(\n offsetCenterPoint,\n offsetWidth,\n offsetHeight,\n ptCtx.selectedPointCloudBox,\n );\n\n // Update count\n if (ptCtx.mainViewInstance) {\n const { count } = ptCtx.mainViewInstance.getSensesPointZAxisInPolygon(\n getCuboidFromPointCloudBox(newBoxParams).polygonPointList as IPolygonPoint[],\n [\n newBoxParams.center.z - newBoxParams.depth / 2,\n newBoxParams.center.z + newBoxParams.depth / 2,\n ],\n );\n\n newBoxParams = {\n ...newBoxParams,\n count,\n };\n }\n\n synchronizeTopView(newBoxParams, newPolygon, ptCtx.topViewInstance, ptCtx.mainViewInstance);\n synchronizeSideView(newBoxParams, newPolygon, ptCtx.sideViewInstance, currentData.url);\n ptCtx.mainViewInstance.highlightOriginPointCloud(newBoxParams);\n updateSelectedBox(newBoxParams);\n },\n );\n }, [ptCtx, size]);\n\n useEffect(() => {\n // Update Size\n ptCtx?.backViewInstance?.initSize(size);\n }, [size]);\n\n return (\n <PointCloudContainer\n className={getClassName('point-cloud-container', 'back-view')}\n title={t('BackView')}\n toolbar={<SizeInfoForView perspectiveView={EPerspectiveView.Back} />}\n >\n <div className={getClassName('point-cloud-container', 'bottom-view-content')}>\n <div className={getClassName('point-cloud-container', 'core-instance')} ref={ref} />\n {!selectedBox && <EmptyPage />}\n </div>\n </PointCloudContainer>\n );\n};\n\nexport default connect(a2MapStateToProps, null, null, { context: LabelBeeContext })(\n PointCloudSideView,\n);\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- import{PointCloudUtils as h,EPerspectiveView as v}from"@labelbee/lb-utils";import o,{useState as C,useEffect as B}from"react";import{PointCloudContext as g}from"./PointCloudContext.js";import{UnitUtils as y}from"@labelbee/lb-annotation";import{useSingleBox as E}from"./hooks/useSingleBox.js";import{useTranslation as m}from"react-i18next";const r=2,I=({perspectiveView:l})=>{const{pointCloudBoxList:e,selectedID:s}=o.useContext(g),i=e.find(a=>a.id===s),f=m(),{t}=f;if(s&&i){const{length:a,width:n,height:u}=h.transferBox2Kitti(i),x=l===v.Back?[{label:t("Width"),value:n},{label:t("Height"),value:u}]:[{label:t("Length"),value:a},{label:t("Height"),value:u}];return o.createElement(o.Fragment,null,x.map((c,d)=>o.createElement("span",{key:d,style:{marginRight:d===0?16:0,fontSize:12}},`${c.label}: ${c.value.toFixed(r)}`)))}return null},P=()=>{const l=o.useContext(g),{selectedBox:e}=E(),[s,i]=C([]),f=m(),{t,i18n:a}=f;return B(()=>{var n;if(!e)return;const{length:u,width:x,height:c,rotation_y:d}=h.transferBox2Kitti(e.info);let b=[{label:t("Length"),value:u.toFixed(r)},{label:t("Width"),value:x.toFixed(r)},{label:t("Height"),value:c.toFixed(r)},{label:t("Rotation_y"),value:y.rad2deg(d).toFixed(r)}];(n=l.mainViewInstance)==null||n.filterPointsByBox(e.info).then(p=>{if(!p){i(b);return}b.push({label:t("PointCount"),value:`${p.num}`}),i(b)})},[e,a.language]),e?o.createElement("div",{style:{position:"absolute",color:"white",backgroundColor:"rgba(153, 153, 153, 0.3)",right:8,top:8,fontSize:12,padding:8,zIndex:20}},s.map(n=>o.createElement("div",{key:n.label},`${n.label}: ${n.value}`))):null},S=()=>{const l=o.useContext(g),{t:e}=m();return l.valid===!1?o.createElement("div",{style:{position:"absolute",backgroundColor:"rgb(242, 101, 73)",color:"white",left:0,top:0,fontSize:20,padding:"8px 16px",zIndex:20}},e("Invalid")):null};export{P as BoxInfos,S as PointCloudValidity,I as SizeInfoForView};
1
+ import{PointCloudUtils as m,EPerspectiveView as v}from"@labelbee/lb-utils";import o,{useState as C,useEffect as y}from"react";import{PointCloudContext as b}from"./PointCloudContext.js";import{UnitUtils as B}from"@labelbee/lb-annotation";import{useSingleBox as I}from"./hooks/useSingleBox.js";import{useTranslation as h}from"react-i18next";const r=2,E=({perspectiveView:l})=>{const{pointCloudBoxList:e,selectedID:s}=o.useContext(b),i=e.find(a=>a.id===s),f=h(),{t}=f;if(s&&i){const{length:a,width:n,height:u}=m.transferBox2Kitti(i),x=l===v.Back?[{label:t("Width"),value:n},{label:t("Height"),value:u}]:[{label:t("Length"),value:a},{label:t("Height"),value:u}];return o.createElement(o.Fragment,null,x.map((c,d)=>o.createElement("span",{key:d,style:{marginRight:d===0?16:0,fontSize:12}},`${c.label}: ${c.value.toFixed(r)}`)))}return null},w=()=>{const l=o.useContext(b),{selectedBox:e}=I(),[s,i]=C([]),f=h(),{t,i18n:a}=f;return y(()=>{var n;if(!e)return;const{length:u,width:x,height:c,rotation_y:d}=m.transferBox2Kitti(e.info);let g=[{label:t("Length"),value:u.toFixed(r)},{label:t("Width"),value:x.toFixed(r)},{label:t("Height"),value:c.toFixed(r)},{label:t("Rotation_y"),value:B.rad2deg(d).toFixed(r)}];(n=l.mainViewInstance)==null||n.filterPointsByBox(e.info).then(p=>{if(!p){i(g);return}g.push({label:t("PointCount"),value:`${p.num}`}),i(g)})},[e,a.language]),e?o.createElement("div",{style:{position:"absolute",color:"white",backgroundColor:"rgba(153, 153, 153, 0.3)",right:8,top:8,fontSize:12,padding:8,zIndex:20}},s.map(n=>o.createElement("div",{key:n.label},`${n.label}: ${n.value}`))):null},P=()=>{const l=o.useContext(b),{t:e}=h();return l.valid===!1?o.createElement("div",{style:{position:"absolute",backgroundColor:"rgb(242, 101, 73)",color:"white",opacity:.7,left:0,top:0,fontSize:30,padding:"8px 16px",zIndex:20,width:"100%",height:"100%",display:"flex",justifyContent:"center",alignItems:"center"}},e("Invalid")):null};export{w as BoxInfos,P as PointCloudValidity,E as SizeInfoForView};
@@ -1 +1 @@
1
- {"version":3,"file":"PointCloudInfos.js","sources":["../../../src/components/pointCloudView/PointCloudInfos.tsx"],"sourcesContent":["/**\n * @author Glenfiddish <edwinlee0927@hotmail.com>\n * @file Display selected box's infos\n * @createdate 2022-07-13\n */\n\nimport { EPerspectiveView, PointCloudUtils } from '@labelbee/lb-utils';\nimport React, { useEffect, useState } from 'react';\nimport { PointCloudContext } from './PointCloudContext';\nimport { UnitUtils } from '@labelbee/lb-annotation';\nimport { useSingleBox } from './hooks/useSingleBox';\nimport { useTranslation } from 'react-i18next';\n\nconst DECIMAL_PLACES = 2;\n\n/**\n * Display size info for views\n * @param param0\n * @returns\n */\nexport const SizeInfoForView = ({ perspectiveView }: { perspectiveView: EPerspectiveView }) => {\n const { pointCloudBoxList, selectedID } = React.useContext(PointCloudContext);\n const box = pointCloudBoxList.find((i) => i.id === selectedID);\n const trans = useTranslation();\n const { t } = trans;\n\n if (selectedID && box) {\n const { length, width, height } = PointCloudUtils.transferBox2Kitti(box);\n const infos =\n perspectiveView === EPerspectiveView.Back\n ? [\n {\n label: t('Width'),\n value: width,\n },\n {\n label: t('Height'),\n value: height,\n },\n ]\n : [\n {\n label: t('Length'),\n value: length,\n },\n {\n label: t('Height'),\n value: height,\n },\n ];\n\n return (\n <>\n {infos.map((info, index) => (\n <span key={index} style={{ marginRight: index === 0 ? 16 : 0, fontSize: 12 }}>{`${\n info.label\n }: ${info.value.toFixed(DECIMAL_PLACES)}`}</span>\n ))}\n </>\n );\n }\n return null;\n};\n\n/**\n * Display selected box's infos\n */\nexport const BoxInfos = () => {\n const ptCtx = React.useContext(PointCloudContext);\n const { selectedBox } = useSingleBox();\n const [infos, setInfos] = useState<Array<{ label: string; value: string }>>([]);\n const trans = useTranslation();\n const { t, i18n } = trans;\n\n useEffect(() => {\n if (!selectedBox) {\n return;\n }\n\n const { length, width, height, rotation_y } = PointCloudUtils.transferBox2Kitti(\n selectedBox.info,\n );\n\n let infos = [\n {\n label: t('Length'),\n value: length.toFixed(DECIMAL_PLACES),\n },\n {\n label: t('Width'),\n value: width.toFixed(DECIMAL_PLACES),\n },\n {\n label: t('Height'),\n value: height.toFixed(DECIMAL_PLACES),\n },\n {\n label: t('Rotation_y'),\n value: UnitUtils.rad2deg(rotation_y).toFixed(DECIMAL_PLACES),\n },\n ];\n\n // Get Point Count.\n ptCtx.mainViewInstance?.filterPointsByBox(selectedBox.info).then((data) => {\n if (!data) {\n setInfos(infos);\n return;\n }\n\n infos.push({\n label: t('PointCount'),\n value: `${data.num}`,\n });\n setInfos(infos);\n });\n }, [selectedBox, i18n.language]);\n\n if (selectedBox) {\n return (\n <div\n style={{\n position: 'absolute',\n color: 'white',\n backgroundColor: 'rgba(153, 153, 153, 0.3)',\n right: 8,\n top: 8,\n fontSize: 12,\n padding: 8,\n zIndex: 20,\n }}\n >\n {infos.map((i) => (\n <div key={i.label}>{`${i.label}: ${i.value}`}</div>\n ))}\n </div>\n );\n }\n\n return null;\n};\n\nexport const PointCloudValidity = () => {\n const ptCtx = React.useContext(PointCloudContext);\n const { t } = useTranslation();\n\n if (ptCtx.valid === false) {\n return (\n <div\n style={{\n position: 'absolute',\n backgroundColor: 'rgb(242, 101, 73)',\n color: 'white',\n left: 0,\n top: 0,\n fontSize: 20,\n padding: '8px 16px',\n zIndex: 20,\n }}\n >\n {t('Invalid')}\n </div>\n );\n }\n return null;\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PointCloudInfos.js","sources":["../../../src/components/pointCloudView/PointCloudInfos.tsx"],"sourcesContent":["/**\n * @author Glenfiddish <edwinlee0927@hotmail.com>\n * @file Display selected box's infos\n * @createdate 2022-07-13\n */\n\nimport { EPerspectiveView, PointCloudUtils } from '@labelbee/lb-utils';\nimport React, { useEffect, useState } from 'react';\nimport { PointCloudContext } from './PointCloudContext';\nimport { UnitUtils } from '@labelbee/lb-annotation';\nimport { useSingleBox } from './hooks/useSingleBox';\nimport { useTranslation } from 'react-i18next';\n\nconst DECIMAL_PLACES = 2;\n\n/**\n * Display size info for views\n * @param param0\n * @returns\n */\nexport const SizeInfoForView = ({ perspectiveView }: { perspectiveView: EPerspectiveView }) => {\n const { pointCloudBoxList, selectedID } = React.useContext(PointCloudContext);\n const box = pointCloudBoxList.find((i) => i.id === selectedID);\n const trans = useTranslation();\n const { t } = trans;\n\n if (selectedID && box) {\n const { length, width, height } = PointCloudUtils.transferBox2Kitti(box);\n const infos =\n perspectiveView === EPerspectiveView.Back\n ? [\n {\n label: t('Width'),\n value: width,\n },\n {\n label: t('Height'),\n value: height,\n },\n ]\n : [\n {\n label: t('Length'),\n value: length,\n },\n {\n label: t('Height'),\n value: height,\n },\n ];\n\n return (\n <>\n {infos.map((info, index) => (\n <span key={index} style={{ marginRight: index === 0 ? 16 : 0, fontSize: 12 }}>{`${\n info.label\n }: ${info.value.toFixed(DECIMAL_PLACES)}`}</span>\n ))}\n </>\n );\n }\n return null;\n};\n\n/**\n * Display selected box's infos\n */\nexport const BoxInfos = () => {\n const ptCtx = React.useContext(PointCloudContext);\n const { selectedBox } = useSingleBox();\n const [infos, setInfos] = useState<Array<{ label: string; value: string }>>([]);\n const trans = useTranslation();\n const { t, i18n } = trans;\n\n useEffect(() => {\n if (!selectedBox) {\n return;\n }\n\n const { length, width, height, rotation_y } = PointCloudUtils.transferBox2Kitti(\n selectedBox.info,\n );\n\n let infos = [\n {\n label: t('Length'),\n value: length.toFixed(DECIMAL_PLACES),\n },\n {\n label: t('Width'),\n value: width.toFixed(DECIMAL_PLACES),\n },\n {\n label: t('Height'),\n value: height.toFixed(DECIMAL_PLACES),\n },\n {\n label: t('Rotation_y'),\n value: UnitUtils.rad2deg(rotation_y).toFixed(DECIMAL_PLACES),\n },\n ];\n\n // Get Point Count.\n ptCtx.mainViewInstance?.filterPointsByBox(selectedBox.info).then((data) => {\n if (!data) {\n setInfos(infos);\n return;\n }\n\n infos.push({\n label: t('PointCount'),\n value: `${data.num}`,\n });\n setInfos(infos);\n });\n }, [selectedBox, i18n.language]);\n\n if (selectedBox) {\n return (\n <div\n style={{\n position: 'absolute',\n color: 'white',\n backgroundColor: 'rgba(153, 153, 153, 0.3)',\n right: 8,\n top: 8,\n fontSize: 12,\n padding: 8,\n zIndex: 20,\n }}\n >\n {infos.map((i) => (\n <div key={i.label}>{`${i.label}: ${i.value}`}</div>\n ))}\n </div>\n );\n }\n\n return null;\n};\n\nexport const PointCloudValidity = () => {\n const ptCtx = React.useContext(PointCloudContext);\n const { t } = useTranslation();\n\n if (ptCtx.valid === false) {\n return (\n <div\n style={{\n position: 'absolute',\n backgroundColor: 'rgb(242, 101, 73)',\n color: 'white',\n opacity: 0.7,\n left: 0,\n top: 0,\n fontSize: 30,\n padding: '8px 16px',\n zIndex: 20,\n width: '100%',\n height: '100%',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n }}\n >\n {t('Invalid')}\n </div>\n );\n }\n return null;\n};\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- import{PointCloudContext as R}from"./PointCloudContext.js";import{useRotate as V}from"./hooks/useRotate.js";import{useBoxes as I}from"./hooks/useBoxes.js";import{useSingleBox as A}from"./hooks/useSingleBox.js";import{useContext as E,useEffect as u}from"react";import{cTool as N}from"@labelbee/lb-annotation";import{message as D}from"antd";import{connect as T}from"react-redux";import{aMapStateToProps as K}from"../../store/annotation/map.js";import{useCustomToolInstance as H}from"../../hooks/annotation.js";import{useStatus as z}from"./hooks/useStatus.js";import{jsonParser as $}from"../../utils/index.js";import{usePointCloudViews as q}from"./hooks/usePointCloudViews.js";import{LabelBeeContext as G}from"../../store/ctx.js";import{useHistory as M}from"./hooks/useHistory.js";var W=Object.defineProperty,Y=Object.defineProperties,F=Object.getOwnPropertyDescriptors,y=Object.getOwnPropertySymbols,J=Object.prototype.hasOwnProperty,Q=Object.prototype.propertyIsEnumerable,w=(o,e,r)=>e in o?W(o,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):o[e]=r,U=(o,e)=>{for(var r in e||(e={}))J.call(e,r)&&w(o,r,e[r]);if(y)for(var r of y(e))Q.call(e,r)&&w(o,r,e[r]);return o},X=(o,e)=>Y(o,F(e));const{EPolygonPattern:c}=N,Z=({currentData:o})=>{const e=E(R),{changeSelectedBoxValid:r,selectNextBox:C,selectPrevBox:k,updateSelectedBox:p}=A(),{clearAllResult:m}=z(),_=$(o.result),{copySelectedBoxes:B,pasteSelectedBoxes:h,copiedBoxes:g}=I(),{toolInstanceRef:n}=H({basicInfo:_}),{updateRotate:d}=V({currentData:o}),{updatePointCloudData:f}=q(),{redo:P,undo:b,pushHistoryWithList:S}=M(),j=(t,s)=>{const{topViewInstance:l,mainViewInstance:a}=e;if(!l)return;const{pointCloud2dOperation:i}=l;switch(t){case"q":{d(2);break}case"e":d(-2);break;case"g":d(180);break;case"u":{const v=i.pattern===c.Normal?c.Rect:c.Normal;i.setPattern(v);const L={[c.Normal]:"Normal Pattern",[c.Rect]:"Rect Pattern"};D.success(`Change Pattern to ${L[v]} successfully`),i.clearActiveStatus(),i.clearDrawingStatus()}break;case"+":a==null||a.updatePointSize(!0);break;case"-":a==null||a.updatePointSize(!1);break;case"v":e.setPointCloudValid(!e.valid);break;case"tab":if(s.shiftKey){k();break}C();break;case"f":r();break;default:return}},O=(t,s)=>{switch(t){case"c":B();break;case"v":h();break;case"a":e.selectedAllBoxes();break;case"z":{s.shiftKey?P():b();break}}},x=t=>{const s=t.key.toLocaleLowerCase();if(t.ctrlKey){O(s,t);return}j(s,t)};return u(()=>{const{topViewInstance:t}=e;if(!!t)return window.addEventListener("keydown",x),()=>{window.removeEventListener("keydown",x)}},[e,g]),u(()=>{f==null||f()},[o,e.mainViewInstance]),u(()=>{n.current.exportData=()=>[e.pointCloudBoxList,{valid:e.valid}],n.current.exportCustomData=()=>{var t;return{renderPolygon:(t=e.polygonList)!=null?t:[]}},n.current.setDefaultAttribute=t=>{const s=e.selectedPointCloudBox;s&&(s.attribute=t,p(s))},n.current.setSubAttribute=(t,s)=>{var l;const a=e.selectedPointCloudBox;if(a){const i=(l=a==null?void 0:a.subAttribute)!=null?l:{};a.subAttribute=X(U({},i),{[t]:s}),p(a)}},n.current.clearResult=()=>{m==null||m()}},[e.pointCloudBoxList,e.selectedID,e.valid,e.polygonList]),u(()=>{n.current.setValid=t=>{n.current.valid=t,setTimeout(()=>{e.setPointCloudValid(t)})},n.current.history={pushHistory:t=>{S({pointCloudBoxList:t})},initRecord:()=>{}},n.current.redo=()=>{P()},n.current.undo=()=>{b()}},[]),null};var ee=T(K,null,null,{context:G})(Z);export{ee as default};
1
+ import{PointCloudContext as D}from"./PointCloudContext.js";import{useRotate as N}from"./hooks/useRotate.js";import{useBoxes as T}from"./hooks/useBoxes.js";import{useSingleBox as K}from"./hooks/useSingleBox.js";import{useContext as H,useEffect as d}from"react";import{AttributeUtils as z,cTool as $}from"@labelbee/lb-annotation";import{message as b}from"antd";import{connect as q}from"react-redux";import{a2MapStateToProps as G}from"../../store/annotation/map.js";import{useCustomToolInstance as M}from"../../hooks/annotation.js";import{useStatus as U}from"./hooks/useStatus.js";import{jsonParser as W}from"../../utils/index.js";import{usePointCloudViews as Y}from"./hooks/usePointCloudViews.js";import{LabelBeeContext as F}from"../../store/ctx.js";import{useHistory as J}from"./hooks/useHistory.js";import{useAttribute as Q}from"./hooks/useAttribute.js";var X=Object.defineProperty,Z=Object.defineProperties,ee=Object.getOwnPropertyDescriptors,k=Object.getOwnPropertySymbols,te=Object.prototype.hasOwnProperty,oe=Object.prototype.propertyIsEnumerable,g=(s,r,e)=>r in s?X(s,r,{enumerable:!0,configurable:!0,writable:!0,value:e}):s[r]=e,re=(s,r)=>{for(var e in r||(r={}))te.call(r,e)&&g(s,e,r[e]);if(k)for(var e of k(r))oe.call(r,e)&&g(s,e,r[e]);return s},se=(s,r)=>Z(s,ee(r));const{EPolygonPattern:p}=$,ne=({currentData:s,config:r})=>{const e=H(D),{changeSelectedBoxValid:_,selectNextBox:h,selectPrevBox:B,updateSelectedBox:P}=K(),{clearAllResult:m}=U(),A=W(s.result),{copySelectedBoxes:j,pasteSelectedBoxes:O,copiedBoxes:S}=T(),{toolInstanceRef:n}=M({basicInfo:A}),{updateRotate:f}=N({currentData:s}),{updatePointCloudData:y}=Y(),{redo:v,undo:x,pushHistoryWithList:I}=J(),{syncThreeViewsAttribute:w,reRenderPointCloud3DBox:L}=Q(),V=(t,o)=>{var l;const{topViewInstance:a,mainViewInstance:u}=e;if(!a)return;const{pointCloud2dOperation:i}=a;switch(t){case"q":{f(2);break}case"e":f(-2);break;case"g":f(180);break;case"u":{const c=i.pattern===p.Normal?p.Rect:p.Normal;i.setPattern(c);const R={[p.Normal]:"Normal Pattern",[p.Rect]:"Rect Pattern"};b.success(`Change Pattern to ${R[c]} successfully`),i.clearActiveStatus(),i.clearDrawingStatus()}break;case"+":u==null||u.updatePointSize(!0);break;case"-":u==null||u.updatePointSize(!1);break;case"v":e.setPointCloudValid(!e.valid);break;case"tab":if(o.shiftKey){B();break}h();break;case"f":_();break;default:{if(((l=r.attributeList)==null?void 0:l.length)>0){const c=z.getAttributeByKeycode(o.keyCode,r.attributeList);c!==void 0&&n.current.setDefaultAttribute(c)}return}}},E=(t,o)=>{switch(t){case"c":j();break;case"v":O();break;case"a":e.selectedAllBoxes();break;case"z":{o.shiftKey?v():x();break}}},C=t=>{const o=t.key.toLocaleLowerCase();if(t.ctrlKey){E(o,t);return}V(o,t)};return d(()=>{const{topViewInstance:t}=e;if(!!t)return window.addEventListener("keydown",C),()=>{window.removeEventListener("keydown",C)}},[e,S,r]),d(()=>{y==null||y()},[s,e.mainViewInstance]),d(()=>{n.current.exportData=()=>[e.pointCloudBoxList,{valid:e.valid}],n.current.exportCustomData=()=>{var t;return{renderPolygon:(t=e.polygonList)!=null?t:[]}},n.current.setDefaultAttribute=t=>{w(t);const o=e.selectedPointCloudBox;o&&(o.attribute=t,P(o),L(o))},n.current.setSubAttribute=(t,o)=>{var l;const a=e.selectedPointCloudBox;if(a){const u=(l=a==null?void 0:a.subAttribute)!=null?l:{};a.subAttribute=se(re({},u),{[t]:o}),P(a)}},n.current.clearResult=()=>{m==null||m()},n.current.redo=()=>{v()},n.current.undo=()=>{x()},n.current.setValid=t=>{n.current.valid=t,setTimeout(()=>{e.setPointCloudValid(t),t===!1&&m()})}},[e.pointCloudBoxList,e.selectedID,e.valid,e.polygonList]),d(()=>{n.current.history={pushHistory:t=>{I({pointCloudBoxList:t})},initRecord:()=>{}}},[]),d(()=>{var t;const o=(t=e.topViewInstance)==null?void 0:t.pointCloud2dOperation;if(!o)return;const l=i=>{w(i)},a=i=>{b.error(i)},u=i=>{b.info(i)};return o.on("syncAttribute",l),o.on("messageError",a),o.on("messageInfo",u),()=>{o.unbind("syncAttribute",l),o.unbind("messageError",a),o.unbind("messageInfo",u)}},[e.topViewInstance]),null};var ae=q(G,null,null,{context:F})(ne);export{ae as default};
@@ -1 +1 @@
1
- {"version":3,"file":"PointCloudListener.js","sources":["../../../src/components/pointCloudView/PointCloudListener.tsx"],"sourcesContent":["import { PointCloudContext } from './PointCloudContext';\nimport { useRotate } from './hooks/useRotate';\nimport { useBoxes } from './hooks/useBoxes';\nimport { useSingleBox } from './hooks/useSingleBox';\nimport React, { useContext, useEffect } from 'react';\nimport { cTool } from '@labelbee/lb-annotation';\nimport { message } from 'antd';\nimport { connect } from 'react-redux';\nimport { aMapStateToProps, IAnnotationStateProps } from '@/store/annotation/map';\nimport { useCustomToolInstance } from '@/hooks/annotation';\nimport { useStatus } from './hooks/useStatus';\nimport { jsonParser } from '@/utils';\nimport { usePointCloudViews } from './hooks/usePointCloudViews';\nimport { LabelBeeContext } from '@/store/ctx';\nimport { useHistory } from './hooks/useHistory';\n\nconst { EPolygonPattern } = cTool;\n\nconst PointCloudListener: React.FC<IAnnotationStateProps> = ({ currentData }) => {\n const ptCtx = useContext(PointCloudContext);\n const { changeSelectedBoxValid, selectNextBox, selectPrevBox, updateSelectedBox } =\n useSingleBox();\n const { clearAllResult } = useStatus();\n const basicInfo = jsonParser(currentData.result);\n const { copySelectedBoxes, pasteSelectedBoxes, copiedBoxes } = useBoxes();\n const { toolInstanceRef } = useCustomToolInstance({ basicInfo });\n const { updateRotate } = useRotate({ currentData });\n const { updatePointCloudData } = usePointCloudViews();\n const { redo, undo, pushHistoryWithList } = useHistory();\n\n const keydownEvents = (lowerCaseKey: string, e: KeyboardEvent) => {\n const { topViewInstance, mainViewInstance } = ptCtx;\n if (!topViewInstance) {\n return;\n }\n\n const { pointCloud2dOperation: TopPointCloudPolygonOperation } = topViewInstance;\n\n switch (lowerCaseKey) {\n case 'q': {\n // Q - anticlockwise\n updateRotate(2);\n break;\n }\n\n case 'e':\n // E - closewise\n updateRotate(-2);\n\n break;\n\n case 'g':\n // G , overturn 180\n updateRotate(180);\n\n break;\n\n case 'u':\n {\n // U , change TopOpereation Pattern\n const newPattern =\n TopPointCloudPolygonOperation.pattern === EPolygonPattern.Normal\n ? EPolygonPattern.Rect\n : EPolygonPattern.Normal;\n TopPointCloudPolygonOperation.setPattern(newPattern);\n const POLYGON_PATTERN = {\n [EPolygonPattern.Normal]: 'Normal Pattern',\n [EPolygonPattern.Rect]: 'Rect Pattern',\n };\n message.success(`Change Pattern to ${POLYGON_PATTERN[newPattern]} successfully`);\n\n // Clear Status\n TopPointCloudPolygonOperation.clearActiveStatus();\n TopPointCloudPolygonOperation.clearDrawingStatus();\n }\n\n break;\n\n // +: Increase points size\n case '+':\n mainViewInstance?.updatePointSize(true);\n break;\n\n // -: Reduce points size\n case '-':\n mainViewInstance?.updatePointSize(false);\n break;\n\n case 'v':\n ptCtx.setPointCloudValid(!ptCtx.valid);\n break;\n\n case 'tab':\n if (e.shiftKey) {\n selectPrevBox();\n break;\n }\n selectNextBox();\n break;\n\n case 'f':\n changeSelectedBoxValid();\n break;\n\n default: {\n return;\n }\n }\n };\n\n const ctrlKeydownEvents = (lowerCaseKey: string, e: KeyboardEvent) => {\n switch (lowerCaseKey) {\n case 'c':\n copySelectedBoxes();\n break;\n case 'v':\n pasteSelectedBoxes();\n break;\n case 'a':\n ptCtx.selectedAllBoxes();\n break;\n case 'z': {\n if (e.shiftKey) {\n redo();\n } else {\n undo();\n }\n break;\n }\n\n default:\n break;\n }\n };\n\n const onKeyDown = (e: KeyboardEvent) => {\n const lowerCaseKey = e.key.toLocaleLowerCase();\n\n if (e.ctrlKey) {\n ctrlKeydownEvents(lowerCaseKey, e);\n return;\n }\n\n keydownEvents(lowerCaseKey, e);\n };\n\n useEffect(() => {\n const { topViewInstance } = ptCtx;\n if (!topViewInstance) {\n return;\n }\n\n window.addEventListener('keydown', onKeyDown);\n\n return () => {\n window.removeEventListener('keydown', onKeyDown);\n };\n }, [ptCtx, copiedBoxes]);\n\n // Page switch data initialization\n useEffect(() => {\n updatePointCloudData?.();\n }, [currentData, ptCtx.mainViewInstance]);\n\n // Update the listener of toolInstance.\n useEffect(() => {\n toolInstanceRef.current.exportData = () => {\n return [ptCtx.pointCloudBoxList, { valid: ptCtx.valid }];\n };\n\n toolInstanceRef.current.exportCustomData = () => {\n return {\n renderPolygon: ptCtx.polygonList ?? [],\n };\n };\n\n toolInstanceRef.current.setDefaultAttribute = (newAttribute: string) => {\n const selectBox = ptCtx.selectedPointCloudBox;\n if (selectBox) {\n selectBox.attribute = newAttribute;\n\n updateSelectedBox(selectBox);\n }\n };\n\n toolInstanceRef.current.setSubAttribute = (key: string, value: string) => {\n const selectBox = ptCtx.selectedPointCloudBox;\n if (selectBox) {\n const originSubAttribute = selectBox?.subAttribute ?? {};\n\n selectBox.subAttribute = {\n ...originSubAttribute,\n [key]: value,\n };\n\n updateSelectedBox(selectBox);\n }\n };\n toolInstanceRef.current.clearResult = () => {\n clearAllResult?.();\n };\n }, [ptCtx.pointCloudBoxList, ptCtx.selectedID, ptCtx.valid, ptCtx.polygonList]);\n\n useEffect(() => {\n toolInstanceRef.current.setValid = (valid: boolean) => {\n toolInstanceRef.current.valid = valid;\n\n // Avoid triggering SetState operations in the reducer phase\n setTimeout(() => {\n ptCtx.setPointCloudValid(valid);\n });\n };\n toolInstanceRef.current.history = {\n // Origin Result\n pushHistory: (result: any[]) => {\n // Rewrite\n // TODO, The polygon is out of range.\n pushHistoryWithList({ pointCloudBoxList: result });\n },\n initRecord: () => {},\n };\n\n toolInstanceRef.current.redo = () => {\n redo();\n };\n\n toolInstanceRef.current.undo = () => {\n undo();\n };\n }, []);\n\n return null;\n};\n\nexport default connect(aMapStateToProps, null, null, { context: LabelBeeContext })(\n PointCloudListener,\n);\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PointCloudListener.js","sources":["../../../src/components/pointCloudView/PointCloudListener.tsx"],"sourcesContent":["import { PointCloudContext } from './PointCloudContext';\nimport { useRotate } from './hooks/useRotate';\nimport { useBoxes } from './hooks/useBoxes';\nimport { useSingleBox } from './hooks/useSingleBox';\nimport React, { useContext, useEffect } from 'react';\nimport { cTool, AttributeUtils } from '@labelbee/lb-annotation';\nimport { message } from 'antd';\nimport { connect } from 'react-redux';\nimport { a2MapStateToProps, IA2MapStateProps } from '@/store/annotation/map';\nimport { useCustomToolInstance } from '@/hooks/annotation';\nimport { useStatus } from './hooks/useStatus';\nimport { jsonParser } from '@/utils';\nimport { usePointCloudViews } from './hooks/usePointCloudViews';\nimport { LabelBeeContext } from '@/store/ctx';\nimport { useHistory } from './hooks/useHistory';\nimport { useAttribute } from './hooks/useAttribute';\n\nconst { EPolygonPattern } = cTool;\n\nconst PointCloudListener: React.FC<IA2MapStateProps> = ({ currentData, config }) => {\n const ptCtx = useContext(PointCloudContext);\n const { changeSelectedBoxValid, selectNextBox, selectPrevBox, updateSelectedBox } =\n useSingleBox();\n const { clearAllResult } = useStatus();\n const basicInfo = jsonParser(currentData.result);\n const { copySelectedBoxes, pasteSelectedBoxes, copiedBoxes } = useBoxes();\n const { toolInstanceRef } = useCustomToolInstance({ basicInfo });\n const { updateRotate } = useRotate({ currentData });\n const { updatePointCloudData } = usePointCloudViews();\n const { redo, undo, pushHistoryWithList } = useHistory();\n const { syncThreeViewsAttribute, reRenderPointCloud3DBox } = useAttribute();\n\n const keydownEvents = (lowerCaseKey: string, e: KeyboardEvent) => {\n const { topViewInstance, mainViewInstance } = ptCtx;\n if (!topViewInstance) {\n return;\n }\n\n const { pointCloud2dOperation: TopPointCloudPolygonOperation } = topViewInstance;\n\n switch (lowerCaseKey) {\n case 'q': {\n // Q - anticlockwise\n updateRotate(2);\n break;\n }\n\n case 'e':\n // E - closewise\n updateRotate(-2);\n\n break;\n\n case 'g':\n // G , overturn 180\n updateRotate(180);\n\n break;\n\n case 'u':\n {\n // U , change TopOpereation Pattern\n const newPattern =\n TopPointCloudPolygonOperation.pattern === EPolygonPattern.Normal\n ? EPolygonPattern.Rect\n : EPolygonPattern.Normal;\n TopPointCloudPolygonOperation.setPattern(newPattern);\n const POLYGON_PATTERN = {\n [EPolygonPattern.Normal]: 'Normal Pattern',\n [EPolygonPattern.Rect]: 'Rect Pattern',\n };\n message.success(`Change Pattern to ${POLYGON_PATTERN[newPattern]} successfully`);\n\n // Clear Status\n TopPointCloudPolygonOperation.clearActiveStatus();\n TopPointCloudPolygonOperation.clearDrawingStatus();\n }\n\n break;\n\n // +: Increase points size\n case '+':\n mainViewInstance?.updatePointSize(true);\n break;\n\n // -: Reduce points size\n case '-':\n mainViewInstance?.updatePointSize(false);\n break;\n\n case 'v':\n ptCtx.setPointCloudValid(!ptCtx.valid);\n break;\n\n case 'tab':\n if (e.shiftKey) {\n selectPrevBox();\n break;\n }\n selectNextBox();\n break;\n\n case 'f':\n changeSelectedBoxValid();\n break;\n\n default: {\n if (config.attributeList?.length > 0) {\n const keyCode2Attribute = AttributeUtils.getAttributeByKeycode(\n e.keyCode,\n config.attributeList,\n );\n\n if (keyCode2Attribute !== undefined) {\n toolInstanceRef.current.setDefaultAttribute(keyCode2Attribute);\n }\n }\n return;\n }\n }\n };\n\n const ctrlKeydownEvents = (lowerCaseKey: string, e: KeyboardEvent) => {\n switch (lowerCaseKey) {\n case 'c':\n copySelectedBoxes();\n break;\n case 'v':\n pasteSelectedBoxes();\n break;\n case 'a':\n ptCtx.selectedAllBoxes();\n break;\n case 'z': {\n if (e.shiftKey) {\n redo();\n } else {\n undo();\n }\n break;\n }\n\n default:\n break;\n }\n };\n\n const onKeyDown = (e: KeyboardEvent) => {\n const lowerCaseKey = e.key.toLocaleLowerCase();\n\n if (e.ctrlKey) {\n ctrlKeydownEvents(lowerCaseKey, e);\n return;\n }\n\n keydownEvents(lowerCaseKey, e);\n };\n\n useEffect(() => {\n const { topViewInstance } = ptCtx;\n if (!topViewInstance) {\n return;\n }\n\n window.addEventListener('keydown', onKeyDown);\n\n return () => {\n window.removeEventListener('keydown', onKeyDown);\n };\n }, [ptCtx, copiedBoxes, config]);\n\n // Page switch data initialization\n useEffect(() => {\n updatePointCloudData?.();\n }, [currentData, ptCtx.mainViewInstance]);\n\n // Update the listener of toolInstance.\n useEffect(() => {\n toolInstanceRef.current.exportData = () => {\n return [ptCtx.pointCloudBoxList, { valid: ptCtx.valid }];\n };\n\n toolInstanceRef.current.exportCustomData = () => {\n return {\n renderPolygon: ptCtx.polygonList ?? [],\n };\n };\n\n toolInstanceRef.current.setDefaultAttribute = (newAttribute: string) => {\n syncThreeViewsAttribute(newAttribute);\n const selectBox = ptCtx.selectedPointCloudBox;\n if (selectBox) {\n selectBox.attribute = newAttribute;\n\n updateSelectedBox(selectBox);\n reRenderPointCloud3DBox(selectBox);\n }\n };\n\n toolInstanceRef.current.setSubAttribute = (key: string, value: string) => {\n const selectBox = ptCtx.selectedPointCloudBox;\n if (selectBox) {\n const originSubAttribute = selectBox?.subAttribute ?? {};\n\n selectBox.subAttribute = {\n ...originSubAttribute,\n [key]: value,\n };\n\n updateSelectedBox(selectBox);\n }\n };\n toolInstanceRef.current.clearResult = () => {\n clearAllResult?.();\n };\n\n toolInstanceRef.current.redo = () => {\n redo();\n };\n\n toolInstanceRef.current.undo = () => {\n undo();\n };\n\n toolInstanceRef.current.setValid = (valid: boolean) => {\n toolInstanceRef.current.valid = valid;\n\n // Avoid triggering SetState operations in the reducer phase\n setTimeout(() => {\n ptCtx.setPointCloudValid(valid);\n\n if (valid === false) {\n clearAllResult();\n }\n });\n };\n }, [ptCtx.pointCloudBoxList, ptCtx.selectedID, ptCtx.valid, ptCtx.polygonList]);\n\n useEffect(() => {\n toolInstanceRef.current.history = {\n // Origin Result\n pushHistory: (result: any[]) => {\n // Rewrite\n // TODO, The polygon is out of range.\n pushHistoryWithList({ pointCloudBoxList: result });\n },\n initRecord: () => {},\n };\n }, []);\n\n useEffect(() => {\n const toolInstance = ptCtx.topViewInstance?.pointCloud2dOperation;\n\n if (!toolInstance) {\n return;\n }\n // TopViewOperation Emitter\n const syncAttribute = (newAttribute: string) => {\n syncThreeViewsAttribute(newAttribute);\n };\n\n const messageError = (error: string) => {\n message.error(error);\n };\n const messageInfo = (info: string) => {\n message.info(info);\n };\n\n toolInstance.on('syncAttribute', syncAttribute);\n toolInstance.on('messageError', messageError);\n toolInstance.on('messageInfo', messageInfo);\n\n return () => {\n toolInstance.unbind('syncAttribute', syncAttribute);\n toolInstance.unbind('messageError', messageError);\n toolInstance.unbind('messageInfo', messageInfo);\n };\n }, [ptCtx.topViewInstance]);\n\n return null;\n};\n\nexport default connect(a2MapStateToProps, null, null, { context: LabelBeeContext })(\n PointCloudListener,\n);\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- import{PointCloudAnnotation as h}from"@labelbee/lb-annotation";import{getClassName as m}from"../../utils/dom.js";import{PointCloudContainer as P}from"./PointCloudLayout.js";import u,{useRef as g,useEffect as f}from"react";import{EPerspectiveView as v}from"@labelbee/lb-utils";import{PointCloudContext as V}from"./PointCloudContext.js";import{SizeInfoForView as y}from"./PointCloudInfos.js";import{connect as j}from"react-redux";import{aMapStateToProps as b}from"../../store/annotation/map.js";import{usePointCloudViews as B}from"./hooks/usePointCloudViews.js";import{useSingleBox as E}from"./hooks/useSingleBox.js";import S from"./components/EmptyPage/index.js";import I from"../../hooks/useSize.js";import{useTranslation as O}from"react-i18next";import{LabelBeeContext as M}from"../../store/ctx.js";const N=(a,e,i=1)=>{const{width:c,height:t}=e,o={x:a.x+c*i/2,y:a.y+t*i/2},l={x:e.width/2,y:e.height/2};return{offsetX:(l.x-o.x)/i,offsetY:-(l.y-o.y)/i}},p=(a,e,i,c,t)=>{const{offsetX:o,offsetY:l}=N(a,i,e);if(t.camera.zoom=e,a){const n=Math.cos(c.rotation),d=Math.sin(c.rotation),s=o*n,r=o*d,{x,y:w,z:C}=t.initCameraPosition;t.camera.position.set(x-s,w-r,C+l)}t.camera.updateProjectionMatrix(),t.render()},X=({currentData:a})=>{const e=u.useContext(V),{sideViewUpdateBox:i}=B(),{selectedBox:c}=E(),t=g(null),o=I(t),{t:l}=O();return f(()=>{if(t.current){const n={width:t.current.clientWidth,height:t.current.clientHeight},d=new h({container:t.current,size:n,polygonOperationProps:{showDirectionLine:!1,forbidAddNew:!0}});e.setSideViewInstance(d)}},[]),f(()=>{if(!o||!e.sideViewInstance)return;const{pointCloud2dOperation:n,pointCloudInstance:d}=e.sideViewInstance;n.singleOn("renderZoom",(s,r)=>{!e.selectedPointCloudBox||p(r,s,o,e.selectedPointCloudBox,d)}),n.singleOn("dragMove",({currentPos:s,zoom:r})=>{!e.selectedPointCloudBox||p(s,r,o,e.selectedPointCloudBox,d)}),n.singleOn("updatePolygonByDrag",({newPolygon:s,originPolygon:r})=>{i(s,r)})},[e,o]),f(()=>{var n;(n=e==null?void 0:e.sideViewInstance)==null||n.initSize(o)},[o]),u.createElement(P,{className:m("point-cloud-container","side-view"),title:l("SideView"),toolbar:u.createElement(y,{perspectiveView:v.Left})},u.createElement("div",{className:m("point-cloud-container","bottom-view-content")},u.createElement("div",{className:m("point-cloud-container","core-instance"),ref:t}),!c&&u.createElement(S,null)))};var D=j(b,null,null,{context:M})(X);export{D as default};
1
+ import{PointCloudAnnotation as h}from"@labelbee/lb-annotation";import{getClassName as u}from"../../utils/dom.js";import{PointCloudContainer as P}from"./PointCloudLayout.js";import m,{useRef as g,useEffect as f}from"react";import{EPerspectiveView as v}from"@labelbee/lb-utils";import{PointCloudContext as V}from"./PointCloudContext.js";import{SizeInfoForView as y}from"./PointCloudInfos.js";import{connect as j}from"react-redux";import{a2MapStateToProps as b}from"../../store/annotation/map.js";import{usePointCloudViews as B}from"./hooks/usePointCloudViews.js";import{useSingleBox as E}from"./hooks/useSingleBox.js";import S from"./components/EmptyPage/index.js";import I from"../../hooks/useSize.js";import{useTranslation as O}from"react-i18next";import{LabelBeeContext as M}from"../../store/ctx.js";const N=(s,e,i=1)=>{const{width:c,height:t}=e,o={x:s.x+c*i/2,y:s.y+t*i/2},l={x:e.width/2,y:e.height/2};return{offsetX:(l.x-o.x)/i,offsetY:-(l.y-o.y)/i}},p=(s,e,i,c,t)=>{const{offsetX:o,offsetY:l}=N(s,i,e);if(t.camera.zoom=e,s){const n=Math.cos(c.rotation),d=Math.sin(c.rotation),r=o*n,a=o*d,{x,y:w,z:C}=t.initCameraPosition;t.camera.position.set(x-r,w-a,C+l)}t.camera.updateProjectionMatrix(),t.render()},X=({config:s})=>{const e=m.useContext(V),{sideViewUpdateBox:i}=B(),{selectedBox:c}=E(),t=g(null),o=I(t),{t:l}=O();return f(()=>{if(t.current){const n={width:t.current.clientWidth,height:t.current.clientHeight},d=new h({container:t.current,size:n,polygonOperationProps:{showDirectionLine:!1,forbidAddNew:!0},config:s});e.setSideViewInstance(d)}},[]),f(()=>{if(!o||!e.sideViewInstance)return;const{pointCloud2dOperation:n,pointCloudInstance:d}=e.sideViewInstance;n.singleOn("renderZoom",(r,a)=>{!e.selectedPointCloudBox||p(a,r,o,e.selectedPointCloudBox,d)}),n.singleOn("dragMove",({currentPos:r,zoom:a})=>{!e.selectedPointCloudBox||p(r,a,o,e.selectedPointCloudBox,d)}),n.singleOn("updatePolygonByDrag",({newPolygon:r,originPolygon:a})=>{i(r,a)})},[e,o]),f(()=>{var n;(n=e==null?void 0:e.sideViewInstance)==null||n.initSize(o)},[o]),m.createElement(P,{className:u("point-cloud-container","side-view"),title:l("SideView"),toolbar:m.createElement(y,{perspectiveView:v.Left})},m.createElement("div",{className:u("point-cloud-container","bottom-view-content")},m.createElement("div",{className:u("point-cloud-container","core-instance"),ref:t}),!c&&m.createElement(S,null)))};var L=j(b,null,null,{context:M})(X);export{L as default};
@@ -1 +1 @@
1
- {"version":3,"file":"PointCloudSideView.js","sources":["../../../src/components/pointCloudView/PointCloudSideView.tsx"],"sourcesContent":["/**\n * @file PointCloud sideView - React Component\n * @createdate 2022-07-11\n * @author Ron <ron.f.luo@gmail.com>\n */\nimport { PointCloud, PointCloudAnnotation } from '@labelbee/lb-annotation';\nimport { getClassName } from '@/utils/dom';\nimport { PointCloudContainer } from './PointCloudLayout';\nimport React, { useEffect, useRef } from 'react';\nimport { EPerspectiveView, IPointCloudBox } from '@labelbee/lb-utils';\nimport { PointCloudContext } from './PointCloudContext';\nimport { SizeInfoForView } from './PointCloudInfos';\nimport { connect } from 'react-redux';\nimport { aMapStateToProps, IAnnotationStateProps } from '@/store/annotation/map';\nimport { usePointCloudViews } from './hooks/usePointCloudViews';\nimport { useSingleBox } from './hooks/useSingleBox';\nimport EmptyPage from './components/EmptyPage';\nimport useSize from '@/hooks/useSize';\nimport { useTranslation } from 'react-i18next';\nimport { LabelBeeContext } from '@/store/ctx';\n/**\n * Get the offset from canvas2d-coordinate to world coordinate\n * @param currentPos\n * @param size\n * @param zoom\n * @returns\n */\nconst TransferCanvas2WorldOffset = (\n currentPos: { x: number; y: number },\n size: { width: number; height: number },\n zoom = 1,\n) => {\n const { width: w, height: h } = size;\n\n const canvasCenterPoint = {\n x: currentPos.x + (w * zoom) / 2, // 放大倍数之后的中心点的偏移量\n y: currentPos.y + (h * zoom) / 2,\n };\n\n const worldCenterPoint = {\n x: size.width / 2,\n y: size.height / 2,\n };\n\n return {\n offsetX: (worldCenterPoint.x - canvasCenterPoint.x) / zoom,\n offsetY: -(worldCenterPoint.y - canvasCenterPoint.y) / zoom,\n };\n};\n\nconst updateSideViewByCanvas2D = (\n currentPos: { x: number; y: number },\n zoom: number,\n size: { width: number; height: number },\n selectedPointCloudBox: IPointCloudBox,\n SidePointCloud: PointCloud,\n) => {\n const { offsetX, offsetY } = TransferCanvas2WorldOffset(currentPos, size, zoom);\n SidePointCloud.camera.zoom = zoom;\n if (currentPos) {\n const cos = Math.cos(selectedPointCloudBox.rotation);\n const sin = Math.sin(selectedPointCloudBox.rotation);\n const offsetXX = offsetX * cos;\n const offsetXY = offsetX * sin;\n const { x, y, z } = SidePointCloud.initCameraPosition;\n SidePointCloud.camera.position.set(x - offsetXX, y - offsetXY, z + offsetY);\n }\n SidePointCloud.camera.updateProjectionMatrix();\n SidePointCloud.render();\n};\n\nconst PointCloudSideView: React.FC<IAnnotationStateProps> = ({ currentData }) => {\n const ptCtx = React.useContext(PointCloudContext);\n const { sideViewUpdateBox } = usePointCloudViews();\n const { selectedBox } = useSingleBox();\n const ref = useRef<HTMLDivElement>(null);\n const size = useSize(ref);\n const { t } = useTranslation();\n\n useEffect(() => {\n if (ref.current) {\n const size = {\n width: ref.current.clientWidth,\n height: ref.current.clientHeight,\n };\n\n const pointCloudAnnotation = new PointCloudAnnotation({\n container: ref.current,\n size,\n polygonOperationProps: { showDirectionLine: false, forbidAddNew: true },\n });\n ptCtx.setSideViewInstance(pointCloudAnnotation);\n // };\n }\n }, []);\n\n useEffect(() => {\n // By the way as an initialization judgment\n if (!size || !ptCtx.sideViewInstance) {\n return;\n }\n\n const { pointCloud2dOperation, pointCloudInstance } = ptCtx.sideViewInstance;\n\n /**\n * Synchronized 3d point cloud view displacement operations\n *\n * Change Orthographic Camera size\n */\n pointCloud2dOperation.singleOn('renderZoom', (zoom: number, currentPos: any) => {\n if (!ptCtx.selectedPointCloudBox) {\n return;\n }\n updateSideViewByCanvas2D(\n currentPos,\n zoom,\n size,\n ptCtx.selectedPointCloudBox,\n pointCloudInstance,\n );\n });\n\n // Synchronized 3d point cloud view displacement operations\n pointCloud2dOperation.singleOn('dragMove', ({ currentPos, zoom }: any) => {\n if (!ptCtx.selectedPointCloudBox) {\n return;\n }\n updateSideViewByCanvas2D(\n currentPos,\n zoom,\n size,\n ptCtx.selectedPointCloudBox,\n pointCloudInstance,\n );\n });\n\n pointCloud2dOperation.singleOn('updatePolygonByDrag', ({ newPolygon, originPolygon }: any) => {\n sideViewUpdateBox(newPolygon, originPolygon);\n });\n }, [ptCtx, size]);\n\n useEffect(() => {\n // Update Size\n ptCtx?.sideViewInstance?.initSize(size);\n }, [size]);\n\n return (\n <PointCloudContainer\n className={getClassName('point-cloud-container', 'side-view')}\n title={t('SideView')}\n toolbar={<SizeInfoForView perspectiveView={EPerspectiveView.Left} />}\n >\n <div className={getClassName('point-cloud-container', 'bottom-view-content')}>\n <div className={getClassName('point-cloud-container', 'core-instance')} ref={ref} />\n {!selectedBox && <EmptyPage />}\n </div>\n </PointCloudContainer>\n );\n};\n\nexport default connect(aMapStateToProps, null, null, { context: LabelBeeContext })(\n PointCloudSideView,\n);\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;AA2BA,MAAM,0BAA6B,GAAA,CACjC,UACA,EAAA,IAAA,EACA,OAAO,CACJ,KAAA;AACH,EAAA,MAAM,CAAE,KAAA,EAAO,CAAG,EAAA,MAAA,EAAQ,CAAM,CAAA,GAAA,IAAA,CAAA;AAEhC,EAAA,MAAM,iBAAoB,GAAA;AAAA,IACxB,CAAG,EAAA,UAAA,CAAW,CAAK,GAAA,CAAA,GAAI,IAAQ,GAAA,CAAA;AAAA,IAC/B,CAAG,EAAA,UAAA,CAAW,CAAK,GAAA,CAAA,GAAI,IAAQ,GAAA,CAAA;AAAA,GAAA,CAAA;AAGjC,EAAA,MAAM,gBAAmB,GAAA;AAAA,IACvB,CAAA,EAAG,KAAK,KAAQ,GAAA,CAAA;AAAA,IAChB,CAAA,EAAG,KAAK,MAAS,GAAA,CAAA;AAAA,GAAA,CAAA;AAGnB,EAAO,OAAA;AAAA,IACL,OAAU,EAAA,CAAA,gBAAA,CAAiB,CAAI,GAAA,iBAAA,CAAkB,CAAK,IAAA,IAAA;AAAA,IACtD,OAAS,EAAA,EAAmB,gBAAA,CAAA,CAAA,GAAI,kBAAkB,CAAK,CAAA,GAAA,IAAA;AAAA,GAAA,CAAA;AAAA,CAAA,CAAA;AAI3D,MAAM,2BAA2B,CAC/B,UAAA,EACA,IACA,EAAA,IAAA,EACA,uBACA,cACG,KAAA;AACH,EAAA,MAAM,CAAE,OAAA,EAAS,OAAY,CAAA,GAAA,0BAAA,CAA2B,YAAY,IAAM,EAAA,IAAA,CAAA,CAAA;AAC1E,EAAA,cAAA,CAAe,OAAO,IAAO,GAAA,IAAA,CAAA;AAC7B,EAAA,IAAI,UAAY,EAAA;AACd,IAAM,MAAA,GAAA,GAAM,IAAK,CAAA,GAAA,CAAI,qBAAsB,CAAA,QAAA,CAAA,CAAA;AAC3C,IAAM,MAAA,GAAA,GAAM,IAAK,CAAA,GAAA,CAAI,qBAAsB,CAAA,QAAA,CAAA,CAAA;AAC3C,IAAA,MAAM,WAAW,OAAU,GAAA,GAAA,CAAA;AAC3B,IAAA,MAAM,WAAW,OAAU,GAAA,GAAA,CAAA;AAC3B,IAAA,MAAM,CAAE,CAAA,EAAG,CAAG,EAAA,CAAA,CAAA,GAAM,cAAe,CAAA,kBAAA,CAAA;AACnC,IAAA,cAAA,CAAe,OAAO,QAAS,CAAA,GAAA,CAAI,IAAI,QAAU,EAAA,CAAA,GAAI,UAAU,CAAI,GAAA,OAAA,CAAA,CAAA;AAAA,GAAA;AAErE,EAAA,cAAA,CAAe,MAAO,CAAA,sBAAA,EAAA,CAAA;AACtB,EAAe,cAAA,CAAA,MAAA,EAAA,CAAA;AAAA,CAAA,CAAA;AAGjB,MAAM,kBAAA,GAAsD,CAAC,CAAE,WAAkB,CAAA,KAAA;AAC/E,EAAM,MAAA,KAAA,GAAQ,MAAM,UAAW,CAAA,iBAAA,CAAA,CAAA;AAC/B,EAAA,MAAM,CAAE,iBAAsB,CAAA,GAAA,kBAAA,EAAA,CAAA;AAC9B,EAAA,MAAM,CAAE,WAAgB,CAAA,GAAA,YAAA,EAAA,CAAA;AACxB,EAAA,MAAM,MAAM,MAAuB,CAAA,IAAA,CAAA,CAAA;AACnC,EAAA,MAAM,OAAO,OAAQ,CAAA,GAAA,CAAA,CAAA;AACrB,EAAA,MAAM,CAAE,CAAM,CAAA,GAAA,cAAA,EAAA,CAAA;AAEd,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,IAAI,OAAS,EAAA;AACf,MAAA,MAAM,KAAO,GAAA;AAAA,QACX,KAAA,EAAO,IAAI,OAAQ,CAAA,WAAA;AAAA,QACnB,MAAA,EAAQ,IAAI,OAAQ,CAAA,YAAA;AAAA,OAAA,CAAA;AAGtB,MAAM,MAAA,oBAAA,GAAuB,IAAI,oBAAqB,CAAA;AAAA,QACpD,WAAW,GAAI,CAAA,OAAA;AAAA,QACf,IAAA,EAAA,KAAA;AAAA,QACA,qBAAuB,EAAA,CAAE,iBAAmB,EAAA,KAAA,EAAO,YAAc,EAAA,IAAA,CAAA;AAAA,OAAA,CAAA,CAAA;AAEnE,MAAA,KAAA,CAAM,mBAAoB,CAAA,oBAAA,CAAA,CAAA;AAAA,KAAA;AAAA,GAG3B,EAAA,EAAA,CAAA,CAAA;AAEH,EAAA,SAAA,CAAU,MAAM;AAEd,IAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,KAAA,CAAM,gBAAkB,EAAA;AACpC,MAAA,OAAA;AAAA,KAAA;AAGF,IAAM,MAAA,CAAE,qBAAuB,EAAA,kBAAA,CAAA,GAAuB,KAAM,CAAA,gBAAA,CAAA;AAO5D,IAAA,qBAAA,CAAsB,QAAS,CAAA,YAAA,EAAc,CAAC,IAAA,EAAc,UAAoB,KAAA;AAC9E,MAAI,IAAA,CAAC,MAAM,qBAAuB,EAAA;AAChC,QAAA,OAAA;AAAA,OAAA;AAEF,MAAA,wBAAA,CACE,UACA,EAAA,IAAA,EACA,IACA,EAAA,KAAA,CAAM,qBACN,EAAA,kBAAA,CAAA,CAAA;AAAA,KAAA,CAAA,CAAA;AAKJ,IAAA,qBAAA,CAAsB,QAAS,CAAA,UAAA,EAAY,CAAC,CAAE,YAAY,IAAgB,CAAA,KAAA;AACxE,MAAI,IAAA,CAAC,MAAM,qBAAuB,EAAA;AAChC,QAAA,OAAA;AAAA,OAAA;AAEF,MAAA,wBAAA,CACE,UACA,EAAA,IAAA,EACA,IACA,EAAA,KAAA,CAAM,qBACN,EAAA,kBAAA,CAAA,CAAA;AAAA,KAAA,CAAA,CAAA;AAIJ,IAAA,qBAAA,CAAsB,QAAS,CAAA,qBAAA,EAAuB,CAAC,CAAE,YAAY,aAAyB,CAAA,KAAA;AAC5F,MAAA,iBAAA,CAAkB,UAAY,EAAA,aAAA,CAAA,CAAA;AAAA,KAAA,CAAA,CAAA;AAAA,GAAA,EAE/B,CAAC,KAAO,EAAA,IAAA,CAAA,CAAA,CAAA;AAEX,EAAA,SAAA,CAAU,MAAM;AA7IlB,IAAA,IAAA,EAAA,CAAA;AA+II,IAAO,CAAA,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,KAAA,CAAA,gBAAA,KAAP,mBAAyB,QAAS,CAAA,IAAA,CAAA,CAAA;AAAA,GAAA,EACjC,CAAC,IAAA,CAAA,CAAA,CAAA;AAEJ,EAAA,2CACG,mBAAD,EAAA;AAAA,IACE,SAAA,EAAW,aAAa,uBAAyB,EAAA,WAAA,CAAA;AAAA,IACjD,OAAO,CAAE,CAAA,UAAA,CAAA;AAAA,IACT,OAAA,sCAAU,eAAD,EAAA;AAAA,MAAiB,iBAAiB,gBAAiB,CAAA,IAAA;AAAA,KAAA,CAAA;AAAA,GAAA,sCAE3D,KAAD,EAAA;AAAA,IAAK,SAAA,EAAW,aAAa,uBAAyB,EAAA,qBAAA,CAAA;AAAA,GAAA,sCACnD,KAAD,EAAA;AAAA,IAAK,SAAA,EAAW,aAAa,uBAAyB,EAAA,eAAA,CAAA;AAAA,IAAkB,GAAA;AAAA,GACvE,CAAA,EAAA,CAAC,WAAe,oBAAA,KAAA,CAAA,aAAA,CAAC,SAAD,EAAA,IAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA;AAMzB,2BAAe,QAAQ,gBAAkB,EAAA,IAAA,EAAM,IAAM,EAAA,CAAE,SAAS,eAC9D,CAAA,CAAA,CAAA,kBAAA,CAAA;;;;"}
1
+ {"version":3,"file":"PointCloudSideView.js","sources":["../../../src/components/pointCloudView/PointCloudSideView.tsx"],"sourcesContent":["/**\n * @file PointCloud sideView - React Component\n * @createdate 2022-07-11\n * @author Ron <ron.f.luo@gmail.com>\n */\nimport { PointCloud, PointCloudAnnotation } from '@labelbee/lb-annotation';\nimport { getClassName } from '@/utils/dom';\nimport { PointCloudContainer } from './PointCloudLayout';\nimport React, { useEffect, useRef } from 'react';\nimport { EPerspectiveView, IPointCloudBox } from '@labelbee/lb-utils';\nimport { PointCloudContext } from './PointCloudContext';\nimport { SizeInfoForView } from './PointCloudInfos';\nimport { connect } from 'react-redux';\nimport { a2MapStateToProps, IA2MapStateProps } from '@/store/annotation/map';\nimport { usePointCloudViews } from './hooks/usePointCloudViews';\nimport { useSingleBox } from './hooks/useSingleBox';\nimport EmptyPage from './components/EmptyPage';\nimport useSize from '@/hooks/useSize';\nimport { useTranslation } from 'react-i18next';\nimport { LabelBeeContext } from '@/store/ctx';\n/**\n * Get the offset from canvas2d-coordinate to world coordinate\n * @param currentPos\n * @param size\n * @param zoom\n * @returns\n */\nconst TransferCanvas2WorldOffset = (\n currentPos: { x: number; y: number },\n size: { width: number; height: number },\n zoom = 1,\n) => {\n const { width: w, height: h } = size;\n\n const canvasCenterPoint = {\n x: currentPos.x + (w * zoom) / 2, // 放大倍数之后的中心点的偏移量\n y: currentPos.y + (h * zoom) / 2,\n };\n\n const worldCenterPoint = {\n x: size.width / 2,\n y: size.height / 2,\n };\n\n return {\n offsetX: (worldCenterPoint.x - canvasCenterPoint.x) / zoom,\n offsetY: -(worldCenterPoint.y - canvasCenterPoint.y) / zoom,\n };\n};\n\nconst updateSideViewByCanvas2D = (\n currentPos: { x: number; y: number },\n zoom: number,\n size: { width: number; height: number },\n selectedPointCloudBox: IPointCloudBox,\n SidePointCloud: PointCloud,\n) => {\n const { offsetX, offsetY } = TransferCanvas2WorldOffset(currentPos, size, zoom);\n SidePointCloud.camera.zoom = zoom;\n if (currentPos) {\n const cos = Math.cos(selectedPointCloudBox.rotation);\n const sin = Math.sin(selectedPointCloudBox.rotation);\n const offsetXX = offsetX * cos;\n const offsetXY = offsetX * sin;\n const { x, y, z } = SidePointCloud.initCameraPosition;\n SidePointCloud.camera.position.set(x - offsetXX, y - offsetXY, z + offsetY);\n }\n SidePointCloud.camera.updateProjectionMatrix();\n SidePointCloud.render();\n};\n\nconst PointCloudSideView: React.FC<IA2MapStateProps> = ({ config }) => {\n const ptCtx = React.useContext(PointCloudContext);\n const { sideViewUpdateBox } = usePointCloudViews();\n const { selectedBox } = useSingleBox();\n const ref = useRef<HTMLDivElement>(null);\n const size = useSize(ref);\n const { t } = useTranslation();\n\n useEffect(() => {\n if (ref.current) {\n const size = {\n width: ref.current.clientWidth,\n height: ref.current.clientHeight,\n };\n\n const pointCloudAnnotation = new PointCloudAnnotation({\n container: ref.current,\n size,\n polygonOperationProps: { showDirectionLine: false, forbidAddNew: true },\n config,\n });\n ptCtx.setSideViewInstance(pointCloudAnnotation);\n // };\n }\n }, []);\n\n useEffect(() => {\n // By the way as an initialization judgment\n if (!size || !ptCtx.sideViewInstance) {\n return;\n }\n\n const { pointCloud2dOperation, pointCloudInstance } = ptCtx.sideViewInstance;\n\n /**\n * Synchronized 3d point cloud view displacement operations\n *\n * Change Orthographic Camera size\n */\n pointCloud2dOperation.singleOn('renderZoom', (zoom: number, currentPos: any) => {\n if (!ptCtx.selectedPointCloudBox) {\n return;\n }\n updateSideViewByCanvas2D(\n currentPos,\n zoom,\n size,\n ptCtx.selectedPointCloudBox,\n pointCloudInstance,\n );\n });\n\n // Synchronized 3d point cloud view displacement operations\n pointCloud2dOperation.singleOn('dragMove', ({ currentPos, zoom }: any) => {\n if (!ptCtx.selectedPointCloudBox) {\n return;\n }\n updateSideViewByCanvas2D(\n currentPos,\n zoom,\n size,\n ptCtx.selectedPointCloudBox,\n pointCloudInstance,\n );\n });\n\n pointCloud2dOperation.singleOn('updatePolygonByDrag', ({ newPolygon, originPolygon }: any) => {\n sideViewUpdateBox(newPolygon, originPolygon);\n });\n }, [ptCtx, size]);\n\n useEffect(() => {\n // Update Size\n ptCtx?.sideViewInstance?.initSize(size);\n }, [size]);\n\n return (\n <PointCloudContainer\n className={getClassName('point-cloud-container', 'side-view')}\n title={t('SideView')}\n toolbar={<SizeInfoForView perspectiveView={EPerspectiveView.Left} />}\n >\n <div className={getClassName('point-cloud-container', 'bottom-view-content')}>\n <div className={getClassName('point-cloud-container', 'core-instance')} ref={ref} />\n {!selectedBox && <EmptyPage />}\n </div>\n </PointCloudContainer>\n );\n};\n\nexport default connect(a2MapStateToProps, null, null, { context: LabelBeeContext })(\n PointCloudSideView,\n);\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- import{getClassName as p}from"../../utils/dom.js";import{FooterDivider as E}from"../../views/MainView/toolFooter/index.js";import{ZoomController as B}from"../../views/MainView/toolFooter/ZoomController/index.js";import{UpSquareOutlined as T,DownSquareOutlined as b}from"@ant-design/icons";import{PointCloudAnnotation as N,cTool as Z}from"@labelbee/lb-annotation";import n,{useRef as A,useState as R,useLayoutEffect as z,useEffect as x}from"react";import{PointCloudContext as L}from"./PointCloudContext.js";import{useRotate as M}from"./hooks/useRotate.js";import{useSingleBox as S}from"./hooks/useSingleBox.js";import{PointCloudContainer as U}from"./PointCloudLayout.js";import{BoxInfos as F,PointCloudValidity as D}from"./PointCloudInfos.js";import{usePolygon as X}from"./hooks/usePolygon.js";import{useZoom as O}from"./hooks/useZoom.js";import{Slider as Y}from"antd";import{a2MapStateToProps as _}from"../../store/annotation/map.js";import{connect as q}from"react-redux";import{usePointCloudViews as W}from"./hooks/usePointCloudViews.js";import H from"../../hooks/useSize.js";import{useTranslation as $}from"react-i18next";import{LabelBeeContext as G}from"../../store/ctx.js";const{EPolygonPattern:J}=Z,j=(i,a,s=1)=>{const{width:t,height:l}=a,d={x:i.x+t*s/2,y:i.y+l*s/2},m={x:a.width/2,y:a.height/2};return{offsetX:(m.x-d.x)/s,offsetY:-(m.y-d.y)/s}},K=({currentData:i})=>{const{zoom:a,zoomIn:s,zoomOut:t,initialPosition:l}=O(),{selectNextBox:d,selectPrevBox:m}=S(),{updateRotate:u}=M({currentData:i}),w=2,g=()=>{u(-w)},f=()=>{u(w)},h=()=>{u(180)};return n.createElement(n.Fragment,null,n.createElement("span",{onClick:f,className:p("point-cloud","rotate-reserve")}),n.createElement("span",{onClick:g,className:p("point-cloud","rotate")}),n.createElement("span",{onClick:h,className:p("point-cloud","rotate-180")}),n.createElement(E,null),n.createElement(T,{onClick:()=>{m()},className:p("point-cloud","prev")}),n.createElement(b,{onClick:()=>{d()},className:p("point-cloud","next")}),n.createElement(E,null),n.createElement(B,{initialPosition:l,zoomIn:s,zoomOut:t,zoom:a}))},Q=({setZAxisLimit:i,zAxisLimit:a})=>n.createElement("div",{style:{position:"absolute",top:128,right:8,height:"50%",zIndex:20}},n.createElement(Y,{vertical:!0,step:.5,max:10,min:.5,defaultValue:a,onAfterChange:s=>{i(s)}})),ee=({currentData:i,imgList:a})=>{const s=A(null),t=n.useContext(L),l=H(s),{setZoom:d}=O(),{addPolygon:m,deletePolygon:u}=X(),{deletePointCloudBox:w,changeBoxValidByID:g}=S(),[f,h]=R(10),{t:k}=$(),C=W();return z(()=>{if(!t.topViewInstance&&s.current&&(i==null?void 0:i.url)&&(i==null?void 0:i.result)){const e={width:s.current.clientWidth,height:s.current.clientHeight},r=new N({container:s.current,size:e,pcdPath:i.url});t.setTopViewInstance(r)}},[i]),x(()=>{if(!l||!t.topViewInstance||!t.sideViewInstance)return;const{pointCloud2dOperation:e}=t.topViewInstance;e.singleOn("polygonCreated",o=>{if(e.pattern===J.Normal||!(i==null?void 0:i.url)){m(o),t.setSelectedIDs(o.id);return}C.topViewAddBox({newPolygon:o,size:l,imgList:a})}),e.singleOn("deletedObject",({id:o})=>{w(o),u(o)}),e.singleOn("deleteSelectedIDs",()=>{t.setSelectedIDs([])}),e.singleOn("addSelectedIDs",o=>{t.addSelectedID(o)}),e.singleOn("setSelectedIDs",o=>{t.setSelectedIDs(o)}),e.singleOn("updatePolygonByDrag",({newPolygon:o})=>{var c;(c=C.topViewUpdateBox)==null||c.call(C,o,l)});const r=o=>{g(o)};return e.on("validUpdate",r),()=>{e.unbind("validUpdate",r)}},[t,l,i,C]),x(()=>{if(!(l==null?void 0:l.width)||!t.topViewInstance)return;t.topViewInstance.initSize(l),t.topViewInstance.updatePolygonList(t.pointCloudBoxList);const{topViewInstance:{pointCloudInstance:e,pointCloud2dOperation:r}}=t;r.singleOn("renderZoom",(o,c)=>{const{offsetX:v,offsetY:P}=j(c,l,o);if(e.camera.zoom=o,c){const{x:V,y:I,z:y}=e.initCameraPosition;e.camera.position.set(V+P,I-v,y)}e.camera.updateProjectionMatrix(),e.render(),d(o)}),r.singleOn("dragMove",({currentPos:o,zoom:c})=>{const{offsetX:v,offsetY:P}=j(o,l,c);e.camera.zoom=c;const{x:V,y:I,z:y}=e.initCameraPosition;e.camera.position.set(V+P,I-v,y),e.render()})},[l,t.topViewInstance]),x(()=>{var e,r;(r=(e=t.topViewInstance)==null?void 0:e.pointCloudInstance)==null||r.applyZAxisPoints(f)},[f]),x(()=>{C.topViewSelectedChanged()},[t.selectedIDs]),n.createElement(U,{className:p("point-cloud-container","top-view"),title:k("TopView"),toolbar:n.createElement(K,{currentData:i})},n.createElement("div",{style:{position:"relative",flex:1}},n.createElement("div",{style:{width:"100%",height:"100%"},ref:s}),n.createElement(F,null),n.createElement(Q,{zAxisLimit:f,setZAxisLimit:h}),n.createElement(D,null)))};var te=q(_,null,null,{context:G})(ee);export{te as default};
1
+ import{getClassName as u}from"../../utils/dom.js";import{FooterDivider as S}from"../../views/MainView/toolFooter/index.js";import{ZoomController as T}from"../../views/MainView/toolFooter/ZoomController/index.js";import{UpSquareOutlined as N,DownSquareOutlined as Z}from"@ant-design/icons";import{PointCloudAnnotation as A,cTool as R}from"@labelbee/lb-annotation";import n,{useRef as z,useState as L,useLayoutEffect as M,useEffect as x}from"react";import{PointCloudContext as U}from"./PointCloudContext.js";import{useRotate as F}from"./hooks/useRotate.js";import{useSingleBox as j}from"./hooks/useSingleBox.js";import{PointCloudContainer as D}from"./PointCloudLayout.js";import{BoxInfos as X,PointCloudValidity as Y}from"./PointCloudInfos.js";import{usePolygon as _}from"./hooks/usePolygon.js";import{useZoom as O}from"./hooks/useZoom.js";import{Slider as q}from"antd";import{a2MapStateToProps as W}from"../../store/annotation/map.js";import{connect as H}from"react-redux";import{usePointCloudViews as $}from"./hooks/usePointCloudViews.js";import G from"../../hooks/useSize.js";import{useTranslation as J}from"react-i18next";import{LabelBeeContext as K}from"../../store/ctx.js";import{jsonParser as Q}from"../../utils/index.js";const{EPolygonPattern:ee}=R,k=(i,c,l=1)=>{const{width:r,height:t}=c,s={x:i.x+r*l/2,y:i.y+t*l/2},m={x:c.width/2,y:c.height/2};return{offsetX:(m.x-s.x)/l,offsetY:-(m.y-s.y)/l}},te=({currentData:i})=>{const{zoom:c,zoomIn:l,zoomOut:r,initialPosition:t}=O(),{selectNextBox:s,selectPrevBox:m}=j(),{updateRotate:p}=F({currentData:i}),C=2,w=()=>{p(-C)},g=()=>{p(C)},P=()=>{p(180)};return n.createElement(n.Fragment,null,n.createElement("span",{onClick:g,className:u("point-cloud","rotate-reserve")}),n.createElement("span",{onClick:w,className:u("point-cloud","rotate")}),n.createElement("span",{onClick:P,className:u("point-cloud","rotate-180")}),n.createElement(S,null),n.createElement(N,{onClick:()=>{m()},className:u("point-cloud","prev")}),n.createElement(Z,{onClick:()=>{s()},className:u("point-cloud","next")}),n.createElement(S,null),n.createElement(T,{initialPosition:t,zoomIn:l,zoomOut:r,zoom:c}))},oe=({setZAxisLimit:i,zAxisLimit:c})=>n.createElement("div",{style:{position:"absolute",top:128,right:8,height:"50%",zIndex:20}},n.createElement(q,{vertical:!0,step:.5,max:10,min:.5,defaultValue:c,onAfterChange:l=>{i(l)}})),ne=({currentData:i,imgList:c,stepInfo:l})=>{const r=z(null),t=n.useContext(U),s=G(r),m=Q(l.config),{setZoom:p}=O(),{addPolygon:C,deletePolygon:w}=_(),{deletePointCloudBox:g,changeBoxValidByID:P}=j(),[h,B]=L(10),{t:b}=J(),f=$();return M(()=>{if(!t.topViewInstance&&r.current&&(i==null?void 0:i.url)&&(i==null?void 0:i.result)){const e={width:r.current.clientWidth,height:r.current.clientHeight},a=new A({container:r.current,size:e,pcdPath:i.url,config:m});t.setTopViewInstance(a)}},[i]),x(()=>{if(!s||!t.topViewInstance||!t.sideViewInstance)return;const{pointCloud2dOperation:e}=t.topViewInstance;e.singleOn("polygonCreated",o=>{if(e.pattern===ee.Normal||!(i==null?void 0:i.url)){C(o),t.setSelectedIDs(o.id);return}f.topViewAddBox({newPolygon:o,size:s,imgList:c,trackConfigurable:m.trackConfigurable})}),e.singleOn("deletedObject",({id:o})=>{g(o),w(o)}),e.singleOn("deleteSelectedIDs",()=>{t.setSelectedIDs([])}),e.singleOn("addSelectedIDs",o=>{t.addSelectedID(o)}),e.singleOn("setSelectedIDs",o=>{t.setSelectedIDs(o)}),e.singleOn("updatePolygonByDrag",({newPolygon:o})=>{var d;(d=f.topViewUpdateBox)==null||d.call(f,o,s)});const a=o=>{P(o)};return e.on("validUpdate",a),()=>{e.unbind("validUpdate",a)}},[t,s,i,f]),x(()=>{if(!(s==null?void 0:s.width)||!t.topViewInstance)return;t.topViewInstance.initSize(s),t.topViewInstance.updatePolygonList(t.pointCloudBoxList);const{topViewInstance:{pointCloudInstance:e,pointCloud2dOperation:a}}=t;a.singleOn("renderZoom",(o,d)=>{const{offsetX:v,offsetY:V}=k(d,s,o);if(e.camera.zoom=o,d){const{x:I,y,z:E}=e.initCameraPosition;e.camera.position.set(I+V,y-v,E)}e.camera.updateProjectionMatrix(),e.render(),p(o)}),a.singleOn("dragMove",({currentPos:o,zoom:d})=>{const{offsetX:v,offsetY:V}=k(o,s,d);e.camera.zoom=d;const{x:I,y,z:E}=e.initCameraPosition;e.camera.position.set(I+V,y-v,E),e.render()})},[s,t.topViewInstance]),x(()=>{var e,a;(a=(e=t.topViewInstance)==null?void 0:e.pointCloudInstance)==null||a.applyZAxisPoints(h)},[h]),x(()=>{f.topViewSelectedChanged()},[t.selectedIDs]),n.createElement(D,{className:u("point-cloud-container","top-view"),title:b("TopView"),toolbar:n.createElement(te,{currentData:i})},n.createElement("div",{style:{position:"relative",flex:1}},n.createElement("div",{style:{width:"100%",height:"100%"},ref:r}),n.createElement(X,null),n.createElement(oe,{zAxisLimit:h,setZAxisLimit:B}),n.createElement(Y,null)))};var ie=H(W,null,null,{context:K})(ne);export{ie as default};
@@ -1 +1 @@
1
- {"version":3,"file":"PointCloudTopView.js","sources":["../../../src/components/pointCloudView/PointCloudTopView.tsx"],"sourcesContent":["/*\n * @Author: Laoluo luozefeng@sensetime.com\n * @Date: 2022-06-22 11:08:31\n * @LastEditors: Laoluo luozefeng@sensetime.com\n */\nimport { getClassName } from '@/utils/dom';\nimport { FooterDivider } from '@/views/MainView/toolFooter';\nimport { ZoomController } from '@/views/MainView/toolFooter/ZoomController';\nimport { DownSquareOutlined, UpSquareOutlined } from '@ant-design/icons';\nimport { cTool, PointCloudAnnotation } from '@labelbee/lb-annotation';\nimport { IPolygonData } from '@labelbee/lb-utils';\nimport React, { useEffect, useLayoutEffect, useRef, useState } from 'react';\nimport { PointCloudContext } from './PointCloudContext';\nimport { useRotate } from './hooks/useRotate';\nimport { useSingleBox } from './hooks/useSingleBox';\nimport { PointCloudContainer } from './PointCloudLayout';\nimport { BoxInfos, PointCloudValidity } from './PointCloudInfos';\nimport { usePolygon } from './hooks/usePolygon';\nimport { useZoom } from './hooks/useZoom';\nimport { Slider } from 'antd';\nimport { a2MapStateToProps, IA2MapStateProps, IAnnotationStateProps } from '@/store/annotation/map';\nimport { connect } from 'react-redux';\nimport { usePointCloudViews } from './hooks/usePointCloudViews';\nimport useSize from '@/hooks/useSize';\nimport { useTranslation } from 'react-i18next';\nimport { LabelBeeContext } from '@/store/ctx';\n\nconst { EPolygonPattern } = cTool;\n\n/**\n * Get the offset from canvas2d-coordinate to world coordinate (Top View)\n * @param currentPos\n * @param size\n * @param zoom\n * @returns\n */\nconst TransferCanvas2WorldOffset = (\n currentPos: { x: number; y: number },\n size: { width: number; height: number },\n zoom = 1,\n) => {\n const { width: w, height: h } = size;\n\n const canvasCenterPoint = {\n x: currentPos.x + (w * zoom) / 2,\n y: currentPos.y + (h * zoom) / 2,\n };\n\n const worldCenterPoint = {\n x: size.width / 2,\n y: size.height / 2,\n };\n\n return {\n offsetX: (worldCenterPoint.x - canvasCenterPoint.x) / zoom,\n offsetY: -(worldCenterPoint.y - canvasCenterPoint.y) / zoom,\n };\n};\n\nconst TopViewToolbar = ({ currentData }: IAnnotationStateProps) => {\n const { zoom, zoomIn, zoomOut, initialPosition } = useZoom();\n const { selectNextBox, selectPrevBox } = useSingleBox();\n const { updateRotate } = useRotate({ currentData });\n\n const ratio = 2;\n\n const clockwiseRotate = () => {\n updateRotate(-ratio);\n };\n const anticlockwiseRotate = () => {\n updateRotate(ratio);\n };\n\n const reverseRotate = () => {\n updateRotate(180);\n };\n\n return (\n <>\n <span\n onClick={anticlockwiseRotate}\n className={getClassName('point-cloud', 'rotate-reserve')}\n />\n <span onClick={clockwiseRotate} className={getClassName('point-cloud', 'rotate')} />\n <span onClick={reverseRotate} className={getClassName('point-cloud', 'rotate-180')} />\n <FooterDivider />\n <UpSquareOutlined\n onClick={() => {\n selectPrevBox();\n }}\n className={getClassName('point-cloud', 'prev')}\n />\n <DownSquareOutlined\n onClick={() => {\n selectNextBox();\n }}\n className={getClassName('point-cloud', 'next')}\n />\n <FooterDivider />\n <ZoomController\n initialPosition={initialPosition}\n zoomIn={zoomIn}\n zoomOut={zoomOut}\n zoom={zoom}\n />\n </>\n );\n};\n\n/**\n * Slider for filtering Z-axis points\n */\nconst ZAxisSlider = ({\n setZAxisLimit,\n zAxisLimit,\n}: {\n setZAxisLimit: (value: number) => void;\n zAxisLimit: number;\n}) => {\n return (\n <div style={{ position: 'absolute', top: 128, right: 8, height: '50%', zIndex: 20 }}>\n <Slider\n vertical\n step={0.5}\n max={10}\n min={0.5}\n defaultValue={zAxisLimit}\n onAfterChange={(v: number) => {\n setZAxisLimit(v);\n }}\n />\n </div>\n );\n};\n\nconst PointCloudTopView: React.FC<IA2MapStateProps> = ({ currentData, imgList }) => {\n const ref = useRef<HTMLDivElement>(null);\n const ptCtx = React.useContext(PointCloudContext);\n const size = useSize(ref);\n const { setZoom } = useZoom();\n\n const { addPolygon, deletePolygon } = usePolygon();\n const { deletePointCloudBox, changeBoxValidByID } = useSingleBox();\n const [zAxisLimit, setZAxisLimit] = useState<number>(10);\n const { t } = useTranslation();\n const pointCloudViews = usePointCloudViews();\n\n useLayoutEffect(() => {\n if (ptCtx.topViewInstance) {\n return;\n }\n\n if (ref.current && currentData?.url && currentData?.result) {\n const size = {\n width: ref.current.clientWidth,\n height: ref.current.clientHeight,\n };\n\n const pointCloudAnnotation = new PointCloudAnnotation({\n container: ref.current,\n size,\n pcdPath: currentData.url,\n });\n ptCtx.setTopViewInstance(pointCloudAnnotation);\n }\n }, [currentData]);\n\n useEffect(() => {\n if (!size || !ptCtx.topViewInstance || !ptCtx.sideViewInstance) {\n return;\n }\n\n const { pointCloud2dOperation: TopView2dOperation } = ptCtx.topViewInstance;\n\n TopView2dOperation.singleOn('polygonCreated', (polygon: IPolygonData) => {\n if (TopView2dOperation.pattern === EPolygonPattern.Normal || !currentData?.url) {\n addPolygon(polygon);\n ptCtx.setSelectedIDs(polygon.id);\n return;\n }\n\n pointCloudViews.topViewAddBox({ newPolygon: polygon, size, imgList });\n });\n\n TopView2dOperation.singleOn('deletedObject', ({ id }) => {\n deletePointCloudBox(id);\n deletePolygon(id);\n });\n\n TopView2dOperation.singleOn('deleteSelectedIDs', () => {\n ptCtx.setSelectedIDs([]);\n });\n\n TopView2dOperation.singleOn('addSelectedIDs', (selectedID: string) => {\n ptCtx.addSelectedID(selectedID);\n });\n\n TopView2dOperation.singleOn('setSelectedIDs', (selectedIDs: string[]) => {\n ptCtx.setSelectedIDs(selectedIDs);\n });\n\n TopView2dOperation.singleOn('updatePolygonByDrag', ({ newPolygon }: any) => {\n pointCloudViews.topViewUpdateBox?.(newPolygon, size);\n });\n\n const validUpdate = (id: string) => {\n changeBoxValidByID(id);\n };\n\n TopView2dOperation.on('validUpdate', validUpdate);\n\n return () => {\n TopView2dOperation.unbind('validUpdate', validUpdate);\n };\n }, [ptCtx, size, currentData, pointCloudViews]);\n\n useEffect(() => {\n if (!size?.width || !ptCtx.topViewInstance) {\n return;\n }\n\n // 1. Update Size\n ptCtx.topViewInstance.initSize(size);\n ptCtx.topViewInstance.updatePolygonList(ptCtx.pointCloudBoxList);\n\n const {\n topViewInstance: { pointCloudInstance: pointCloud, pointCloud2dOperation: polygonOperation },\n } = ptCtx;\n\n /**\n * Synchronized 3d point cloud view displacement operations\n *\n * Change Orthographic Camera size\n */\n polygonOperation.singleOn('renderZoom', (zoom: number, currentPos: any) => {\n const { offsetX, offsetY } = TransferCanvas2WorldOffset(currentPos, size, zoom);\n pointCloud.camera.zoom = zoom;\n if (currentPos) {\n const { x, y, z } = pointCloud.initCameraPosition;\n pointCloud.camera.position.set(x + offsetY, y - offsetX, z);\n }\n\n pointCloud.camera.updateProjectionMatrix();\n pointCloud.render();\n\n setZoom(zoom);\n });\n\n // Synchronized 3d point cloud view displacement operations\n polygonOperation.singleOn('dragMove', ({ currentPos, zoom }) => {\n const { offsetX, offsetY } = TransferCanvas2WorldOffset(currentPos, size, zoom);\n pointCloud.camera.zoom = zoom;\n const { x, y, z } = pointCloud.initCameraPosition;\n pointCloud.camera.position.set(x + offsetY, y - offsetX, z);\n pointCloud.render();\n });\n }, [size, ptCtx.topViewInstance]);\n\n useEffect(() => {\n ptCtx.topViewInstance?.pointCloudInstance?.applyZAxisPoints(zAxisLimit);\n }, [zAxisLimit]);\n\n useEffect(() => {\n pointCloudViews.topViewSelectedChanged();\n }, [ptCtx.selectedIDs]);\n\n return (\n <PointCloudContainer\n className={getClassName('point-cloud-container', 'top-view')}\n title={t('TopView')}\n toolbar={<TopViewToolbar currentData={currentData} />}\n >\n <div style={{ position: 'relative', flex: 1 }}>\n <div style={{ width: '100%', height: '100%' }} ref={ref} />\n\n <BoxInfos />\n <ZAxisSlider zAxisLimit={zAxisLimit} setZAxisLimit={setZAxisLimit} />\n <PointCloudValidity />\n </div>\n </PointCloudContainer>\n );\n};\n\nexport default connect(a2MapStateToProps, null, null, { context: LabelBeeContext })(\n PointCloudTopView,\n);\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PointCloudTopView.js","sources":["../../../src/components/pointCloudView/PointCloudTopView.tsx"],"sourcesContent":["/*\n * @Author: Laoluo luozefeng@sensetime.com\n * @Date: 2022-06-22 11:08:31\n * @LastEditors: Laoluo luozefeng@sensetime.com\n */\nimport { getClassName } from '@/utils/dom';\nimport { FooterDivider } from '@/views/MainView/toolFooter';\nimport { ZoomController } from '@/views/MainView/toolFooter/ZoomController';\nimport { DownSquareOutlined, UpSquareOutlined } from '@ant-design/icons';\nimport { cTool, PointCloudAnnotation } from '@labelbee/lb-annotation';\nimport { IPolygonData } from '@labelbee/lb-utils';\nimport React, { useEffect, useLayoutEffect, useRef, useState } from 'react';\nimport { PointCloudContext } from './PointCloudContext';\nimport { useRotate } from './hooks/useRotate';\nimport { useSingleBox } from './hooks/useSingleBox';\nimport { PointCloudContainer } from './PointCloudLayout';\nimport { BoxInfos, PointCloudValidity } from './PointCloudInfos';\nimport { usePolygon } from './hooks/usePolygon';\nimport { useZoom } from './hooks/useZoom';\nimport { Slider } from 'antd';\nimport { a2MapStateToProps, IA2MapStateProps, IAnnotationStateProps } from '@/store/annotation/map';\nimport { connect } from 'react-redux';\nimport { usePointCloudViews } from './hooks/usePointCloudViews';\nimport useSize from '@/hooks/useSize';\nimport { useTranslation } from 'react-i18next';\nimport { LabelBeeContext } from '@/store/ctx';\nimport { jsonParser } from '@/utils';\n\nconst { EPolygonPattern } = cTool;\n\n/**\n * Get the offset from canvas2d-coordinate to world coordinate (Top View)\n * @param currentPos\n * @param size\n * @param zoom\n * @returns\n */\nconst TransferCanvas2WorldOffset = (\n currentPos: { x: number; y: number },\n size: { width: number; height: number },\n zoom = 1,\n) => {\n const { width: w, height: h } = size;\n\n const canvasCenterPoint = {\n x: currentPos.x + (w * zoom) / 2,\n y: currentPos.y + (h * zoom) / 2,\n };\n\n const worldCenterPoint = {\n x: size.width / 2,\n y: size.height / 2,\n };\n\n return {\n offsetX: (worldCenterPoint.x - canvasCenterPoint.x) / zoom,\n offsetY: -(worldCenterPoint.y - canvasCenterPoint.y) / zoom,\n };\n};\n\nconst TopViewToolbar = ({ currentData }: IAnnotationStateProps) => {\n const { zoom, zoomIn, zoomOut, initialPosition } = useZoom();\n const { selectNextBox, selectPrevBox } = useSingleBox();\n const { updateRotate } = useRotate({ currentData });\n\n const ratio = 2;\n\n const clockwiseRotate = () => {\n updateRotate(-ratio);\n };\n const anticlockwiseRotate = () => {\n updateRotate(ratio);\n };\n\n const reverseRotate = () => {\n updateRotate(180);\n };\n\n return (\n <>\n <span\n onClick={anticlockwiseRotate}\n className={getClassName('point-cloud', 'rotate-reserve')}\n />\n <span onClick={clockwiseRotate} className={getClassName('point-cloud', 'rotate')} />\n <span onClick={reverseRotate} className={getClassName('point-cloud', 'rotate-180')} />\n <FooterDivider />\n <UpSquareOutlined\n onClick={() => {\n selectPrevBox();\n }}\n className={getClassName('point-cloud', 'prev')}\n />\n <DownSquareOutlined\n onClick={() => {\n selectNextBox();\n }}\n className={getClassName('point-cloud', 'next')}\n />\n <FooterDivider />\n <ZoomController\n initialPosition={initialPosition}\n zoomIn={zoomIn}\n zoomOut={zoomOut}\n zoom={zoom}\n />\n </>\n );\n};\n\n/**\n * Slider for filtering Z-axis points\n */\nconst ZAxisSlider = ({\n setZAxisLimit,\n zAxisLimit,\n}: {\n setZAxisLimit: (value: number) => void;\n zAxisLimit: number;\n}) => {\n return (\n <div style={{ position: 'absolute', top: 128, right: 8, height: '50%', zIndex: 20 }}>\n <Slider\n vertical\n step={0.5}\n max={10}\n min={0.5}\n defaultValue={zAxisLimit}\n onAfterChange={(v: number) => {\n setZAxisLimit(v);\n }}\n />\n </div>\n );\n};\n\nconst PointCloudTopView: React.FC<IA2MapStateProps> = ({ currentData, imgList, stepInfo }) => {\n const ref = useRef<HTMLDivElement>(null);\n const ptCtx = React.useContext(PointCloudContext);\n const size = useSize(ref);\n const config = jsonParser(stepInfo.config);\n const { setZoom } = useZoom();\n\n const { addPolygon, deletePolygon } = usePolygon();\n const { deletePointCloudBox, changeBoxValidByID } = useSingleBox();\n const [zAxisLimit, setZAxisLimit] = useState<number>(10);\n const { t } = useTranslation();\n const pointCloudViews = usePointCloudViews();\n\n useLayoutEffect(() => {\n if (ptCtx.topViewInstance) {\n return;\n }\n\n if (ref.current && currentData?.url && currentData?.result) {\n const size = {\n width: ref.current.clientWidth,\n height: ref.current.clientHeight,\n };\n\n const pointCloudAnnotation = new PointCloudAnnotation({\n container: ref.current,\n size,\n pcdPath: currentData.url,\n config,\n });\n ptCtx.setTopViewInstance(pointCloudAnnotation);\n }\n }, [currentData]);\n\n useEffect(() => {\n if (!size || !ptCtx.topViewInstance || !ptCtx.sideViewInstance) {\n return;\n }\n\n const { pointCloud2dOperation: TopView2dOperation } = ptCtx.topViewInstance;\n\n TopView2dOperation.singleOn('polygonCreated', (polygon: IPolygonData) => {\n if (TopView2dOperation.pattern === EPolygonPattern.Normal || !currentData?.url) {\n addPolygon(polygon);\n ptCtx.setSelectedIDs(polygon.id);\n return;\n }\n\n pointCloudViews.topViewAddBox({\n newPolygon: polygon,\n size,\n imgList,\n trackConfigurable: config.trackConfigurable,\n });\n });\n\n TopView2dOperation.singleOn('deletedObject', ({ id }) => {\n deletePointCloudBox(id);\n deletePolygon(id);\n });\n\n TopView2dOperation.singleOn('deleteSelectedIDs', () => {\n ptCtx.setSelectedIDs([]);\n });\n\n TopView2dOperation.singleOn('addSelectedIDs', (selectedID: string) => {\n ptCtx.addSelectedID(selectedID);\n });\n\n TopView2dOperation.singleOn('setSelectedIDs', (selectedIDs: string[]) => {\n ptCtx.setSelectedIDs(selectedIDs);\n });\n\n TopView2dOperation.singleOn('updatePolygonByDrag', ({ newPolygon }: any) => {\n pointCloudViews.topViewUpdateBox?.(newPolygon, size);\n });\n\n const validUpdate = (id: string) => {\n changeBoxValidByID(id);\n };\n\n TopView2dOperation.on('validUpdate', validUpdate);\n\n return () => {\n TopView2dOperation.unbind('validUpdate', validUpdate);\n };\n }, [ptCtx, size, currentData, pointCloudViews]);\n\n useEffect(() => {\n if (!size?.width || !ptCtx.topViewInstance) {\n return;\n }\n\n // 1. Update Size\n ptCtx.topViewInstance.initSize(size);\n ptCtx.topViewInstance.updatePolygonList(ptCtx.pointCloudBoxList);\n\n const {\n topViewInstance: { pointCloudInstance: pointCloud, pointCloud2dOperation: polygonOperation },\n } = ptCtx;\n\n /**\n * Synchronized 3d point cloud view displacement operations\n *\n * Change Orthographic Camera size\n */\n polygonOperation.singleOn('renderZoom', (zoom: number, currentPos: any) => {\n const { offsetX, offsetY } = TransferCanvas2WorldOffset(currentPos, size, zoom);\n pointCloud.camera.zoom = zoom;\n if (currentPos) {\n const { x, y, z } = pointCloud.initCameraPosition;\n pointCloud.camera.position.set(x + offsetY, y - offsetX, z);\n }\n\n pointCloud.camera.updateProjectionMatrix();\n pointCloud.render();\n\n setZoom(zoom);\n });\n\n // Synchronized 3d point cloud view displacement operations\n polygonOperation.singleOn('dragMove', ({ currentPos, zoom }) => {\n const { offsetX, offsetY } = TransferCanvas2WorldOffset(currentPos, size, zoom);\n pointCloud.camera.zoom = zoom;\n const { x, y, z } = pointCloud.initCameraPosition;\n pointCloud.camera.position.set(x + offsetY, y - offsetX, z);\n pointCloud.render();\n });\n }, [size, ptCtx.topViewInstance]);\n\n useEffect(() => {\n ptCtx.topViewInstance?.pointCloudInstance?.applyZAxisPoints(zAxisLimit);\n }, [zAxisLimit]);\n\n useEffect(() => {\n pointCloudViews.topViewSelectedChanged();\n }, [ptCtx.selectedIDs]);\n\n return (\n <PointCloudContainer\n className={getClassName('point-cloud-container', 'top-view')}\n title={t('TopView')}\n toolbar={<TopViewToolbar currentData={currentData} />}\n >\n <div style={{ position: 'relative', flex: 1 }}>\n <div style={{ width: '100%', height: '100%' }} ref={ref} />\n\n <BoxInfos />\n <ZAxisSlider zAxisLimit={zAxisLimit} setZAxisLimit={setZAxisLimit} />\n <PointCloudValidity />\n </div>\n </PointCloudContainer>\n );\n};\n\nexport default connect(a2MapStateToProps, null, null, { context: LabelBeeContext })(\n PointCloudTopView,\n);\n"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ import{useContext as p,useState as s,useEffect as b}from"react";import{PointCloudContext as c}from"../PointCloudContext.js";const C=()=>{var o,n;const{topViewInstance:t,sideViewInstance:i,backViewInstance:u,mainViewInstance:l}=p(c),[r,a]=s((n=(o=t==null?void 0:t.pointCloud2dOperation)==null?void 0:o.defaultAttribute)!=null?n:"");return b(()=>{if(!(t==null?void 0:t.pointCloud2dOperation))return;const e=()=>{a(t==null?void 0:t.pointCloud2dOperation.defaultAttribute)};return t==null||t.pointCloud2dOperation.on("changeAttributeSidebar",e),()=>{t==null||t.pointCloud2dOperation.unbind("changeAttributeSidebar",e)}},[t==null?void 0:t.pointCloud2dOperation]),{syncThreeViewsAttribute:e=>{[t==null?void 0:t.pointCloud2dOperation,i==null?void 0:i.pointCloud2dOperation,u==null?void 0:u.pointCloud2dOperation].forEach(d=>{d==null||d.setDefaultAttribute(e)})},updateDefaultAttribute:e=>{t==null||t.pointCloud2dOperation.setDefaultAttribute(e)},reRenderPointCloud3DBox:e=>{l==null||l.generateBox(e)},defaultAttribute:r}};export{C as useAttribute};
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAttribute.js","sources":["../../../../src/components/pointCloudView/hooks/useAttribute.ts"],"sourcesContent":["import { IPointCloudBox } from '@labelbee/lb-utils';\nimport { useContext, useEffect, useState } from 'react';\nimport { PointCloudContext } from '../PointCloudContext';\n\nexport const useAttribute = () => {\n const { topViewInstance, sideViewInstance, backViewInstance, mainViewInstance } =\n useContext(PointCloudContext);\n const [defaultAttribute, setDefaultAttribute] = useState(\n topViewInstance?.pointCloud2dOperation?.defaultAttribute ?? '',\n );\n\n useEffect(() => {\n if (!topViewInstance?.pointCloud2dOperation) {\n return;\n }\n\n const updateDefaultAttribute = () => {\n setDefaultAttribute(topViewInstance?.pointCloud2dOperation.defaultAttribute);\n };\n\n topViewInstance?.pointCloud2dOperation.on('changeAttributeSidebar', updateDefaultAttribute);\n\n return () => {\n topViewInstance?.pointCloud2dOperation.unbind(\n 'changeAttributeSidebar',\n updateDefaultAttribute,\n );\n };\n }, [topViewInstance?.pointCloud2dOperation]);\n\n const syncThreeViewsAttribute = (attribute?: string) => {\n [\n topViewInstance?.pointCloud2dOperation,\n sideViewInstance?.pointCloud2dOperation,\n backViewInstance?.pointCloud2dOperation,\n ].forEach((instance) => {\n instance?.setDefaultAttribute(attribute);\n });\n };\n\n const updateDefaultAttribute = (attribute?: string) => {\n topViewInstance?.pointCloud2dOperation.setDefaultAttribute(attribute);\n };\n\n const reRenderPointCloud3DBox = (newBox: IPointCloudBox) => {\n mainViewInstance?.generateBox(newBox);\n };\n\n return {\n syncThreeViewsAttribute,\n updateDefaultAttribute,\n reRenderPointCloud3DBox,\n defaultAttribute,\n };\n};\n"],"names":[],"mappings":";;;AAIO,MAAM,eAAe,MAAM;AAJlC,EAAA,IAAA,EAAA,EAAA,EAAA,CAAA;AAKE,EAAA,MAAM,CAAE,eAAA,EAAiB,gBAAkB,EAAA,gBAAA,EAAkB,oBAC3D,UAAW,CAAA,iBAAA,CAAA,CAAA;AACb,EAAM,MAAA,CAAC,kBAAkB,mBAAuB,CAAA,GAAA,QAAA,CAC9C,+DAAiB,qBAAjB,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAwC,qBAAxC,IAA4D,GAAA,EAAA,GAAA,EAAA,CAAA,CAAA;AAG9D,EAAA,SAAA,CAAU,MAAM;AACd,IAAI,IAAA,qDAAkB,qBAAuB,CAAA,EAAA;AAC3C,MAAA,OAAA;AAAA,KAAA;AAGF,IAAA,MAAM,0BAAyB,MAAM;AACnC,MAAA,mBAAA,CAAoB,mDAAiB,qBAAsB,CAAA,gBAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAG7D,IAAiB,eAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,eAAA,CAAA,qBAAA,CAAsB,GAAG,wBAA0B,EAAA,uBAAA,CAAA,CAAA;AAEpE,IAAA,OAAO,MAAM;AACX,MAAiB,eAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,eAAA,CAAA,qBAAA,CAAsB,OACrC,wBACA,EAAA,uBAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAAA,GAAA,EAGH,CAAC,eAAiB,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,eAAA,CAAA,qBAAA,CAAA,CAAA,CAAA;AAErB,EAAM,MAAA,uBAAA,GAA0B,CAAC,SAAuB,KAAA;AACtD,IAAA;AAAA,MACE,eAAiB,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,eAAA,CAAA,qBAAA;AAAA,MACjB,gBAAkB,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,gBAAA,CAAA,qBAAA;AAAA,MAClB,gBAAkB,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,gBAAA,CAAA,qBAAA;AAAA,KAClB,CAAA,OAAA,CAAQ,CAAC,QAAa,KAAA;AACtB,MAAA,QAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,QAAA,CAAU,mBAAoB,CAAA,SAAA,CAAA,CAAA;AAAA,KAAA,CAAA,CAAA;AAAA,GAAA,CAAA;AAIlC,EAAM,MAAA,sBAAA,GAAyB,CAAC,SAAuB,KAAA;AACrD,IAAA,eAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,eAAA,CAAiB,sBAAsB,mBAAoB,CAAA,SAAA,CAAA,CAAA;AAAA,GAAA,CAAA;AAG7D,EAAM,MAAA,uBAAA,GAA0B,CAAC,MAA2B,KAAA;AAC1D,IAAA,gBAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,gBAAA,CAAkB,WAAY,CAAA,MAAA,CAAA,CAAA;AAAA,GAAA,CAAA;AAGhC,EAAO,OAAA;AAAA,IACL,uBAAA;AAAA,IACA,sBAAA;AAAA,IACA,uBAAA;AAAA,IACA,gBAAA;AAAA,GAAA,CAAA;AAAA;;;;"}
@@ -1 +1 @@
1
- import{useContext as v}from"react";import{PointCloudContext as B}from"../PointCloudContext.js";var m=Object.defineProperty,f=Object.getOwnPropertySymbols,O=Object.prototype.hasOwnProperty,H=Object.prototype.propertyIsEnumerable,L=(i,e,s)=>e in i?m(i,e,{enumerable:!0,configurable:!0,writable:!0,value:s}):i[e]=s,w=(i,e)=>{for(var s in e||(e={}))O.call(e,s)&&L(i,s,e[s]);if(f)for(var s of f(e))H.call(e,s)&&L(i,s,e[s]);return i};const I=()=>{const{history:i,setPointCloudResult:e,setSelectedIDs:s,pointCloudBoxList:r,mainViewInstance:u,topViewInstance:p,polygonList:d,setPolygonList:a}=v(B),g=({newBoxParams:t,newPolygon:o})=>{const n={pointCloudBoxList:r,polygonList:d};t&&(n.pointCloudBoxList=r.concat(t)),o&&(n.polygonList=d.concat(o)),i.pushHistory(n)},C=t=>{const o={pointCloudBoxList:r,polygonList:d};t.pointCloudBoxList&&(o.pointCloudBoxList=t.pointCloudBoxList),t.polygonList&&(o.polygonList=t.polygonList),i.pushHistory(o)},P=t=>{d.find(n=>n.id===t.id)&&i.pushHistory({pointCloudBoxList:r,polygonList:d.map(n=>n.id===t.id?t:w({},n))})},h=({pointCloudBoxList:t,polygonList:o})=>{i.initRecord([{pointCloudBoxList:t,polygonList:o}],!0)},y=t=>{if(!t)return;const{pointCloudBoxList:o,polygonList:n}=t;if(o){r.length!==o.length&&s();const x=r.filter(l=>o.findIndex(c=>c.id===l.id)>=0),_=o.filter(l=>r.findIndex(c=>c.id!==l.id)>=0);x.forEach(l=>{u==null||u.removeObjectByName(l.id)}),_.forEach(l=>{u==null||u.generateBox(l)}),e(o)}n&&a(n),console.log("asd",o,n),p==null||p.updatePolygonList(o!=null?o:[],n!=null?n:[])};return{addHistory:g,pushHistoryWithList:C,initHistory:h,pushHistoryUnderUpdatePolygon:P,redo:()=>{y(i.redo())},undo:()=>{y(i.undo())}}};export{I as useHistory};
1
+ import{useContext as v}from"react";import{PointCloudContext as B}from"../PointCloudContext.js";var m=Object.defineProperty,f=Object.getOwnPropertySymbols,O=Object.prototype.hasOwnProperty,H=Object.prototype.propertyIsEnumerable,L=(i,n,s)=>n in i?m(i,n,{enumerable:!0,configurable:!0,writable:!0,value:s}):i[n]=s,w=(i,n)=>{for(var s in n||(n={}))O.call(n,s)&&L(i,s,n[s]);if(f)for(var s of f(n))H.call(n,s)&&L(i,s,n[s]);return i};const I=()=>{const{history:i,setPointCloudResult:n,setSelectedIDs:s,pointCloudBoxList:r,mainViewInstance:u,topViewInstance:p,polygonList:l,setPolygonList:a}=v(B),g=({newBoxParams:t,newPolygon:o})=>{const e={pointCloudBoxList:r,polygonList:l};t&&(e.pointCloudBoxList=r.concat(t)),o&&(e.polygonList=l.concat(o)),i.pushHistory(e)},C=t=>{const o={pointCloudBoxList:r,polygonList:l};t.pointCloudBoxList&&(o.pointCloudBoxList=t.pointCloudBoxList),t.polygonList&&(o.polygonList=t.polygonList),i.pushHistory(o)},P=t=>{l.find(e=>e.id===t.id)&&i.pushHistory({pointCloudBoxList:r,polygonList:l.map(e=>e.id===t.id?t:w({},e))})},h=({pointCloudBoxList:t,polygonList:o})=>{i.initRecord([{pointCloudBoxList:t,polygonList:o}],!0)},y=t=>{if(!t)return;const{pointCloudBoxList:o,polygonList:e}=t;if(o){r.length!==o.length&&s();const x=r.filter(d=>o.findIndex(c=>c.id===d.id)>=0),_=o.filter(d=>r.findIndex(c=>c.id!==d.id)>=0);x.forEach(d=>{u==null||u.removeObjectByName(d.id)}),_.forEach(d=>{u==null||u.generateBox(d)}),n(o)}e&&a(e),p==null||p.updatePolygonList(o!=null?o:[],e!=null?e:[])};return{addHistory:g,pushHistoryWithList:C,initHistory:h,pushHistoryUnderUpdatePolygon:P,redo:()=>{y(i.redo())},undo:()=>{y(i.undo())}}};export{I as useHistory};
@@ -1 +1 @@
1
- {"version":3,"file":"useHistory.js","sources":["../../../../src/components/pointCloudView/hooks/useHistory.ts"],"sourcesContent":["import { IPointCloudBox, IPointCloudBoxList, IPolygonData } from '@labelbee/lb-utils';\nimport { useContext } from 'react';\nimport { PointCloudContext } from '../PointCloudContext';\n\nexport const useHistory = () => {\n const {\n history,\n setPointCloudResult,\n setSelectedIDs,\n pointCloudBoxList,\n mainViewInstance,\n topViewInstance,\n polygonList,\n setPolygonList,\n } = useContext(PointCloudContext);\n\n const addHistory = ({\n newBoxParams,\n newPolygon,\n }: {\n newBoxParams?: IPointCloudBox;\n newPolygon?: IPolygonData;\n }) => {\n const historyRecord = {\n pointCloudBoxList,\n polygonList,\n };\n\n if (newBoxParams) {\n historyRecord.pointCloudBoxList = pointCloudBoxList.concat(newBoxParams);\n }\n\n if (newPolygon) {\n historyRecord.polygonList = polygonList.concat(newPolygon);\n }\n\n history.pushHistory(historyRecord);\n };\n\n const pushHistoryWithList = (\n params: Partial<{\n pointCloudBoxList: IPointCloudBoxList;\n polygonList: IPolygonData[];\n }>,\n ) => {\n const historyRecord = {\n pointCloudBoxList,\n polygonList,\n };\n\n if (params.pointCloudBoxList) {\n historyRecord.pointCloudBoxList = params.pointCloudBoxList;\n }\n\n if (params.polygonList) {\n historyRecord.polygonList = params.polygonList;\n }\n\n history.pushHistory(historyRecord);\n };\n\n const pushHistoryUnderUpdatePolygon = (polygon: IPolygonData) => {\n const selectedPolygon = polygonList.find((v) => v.id === polygon.id);\n\n if (selectedPolygon) {\n history.pushHistory({\n pointCloudBoxList,\n polygonList: polygonList.map((v) => {\n if (v.id === polygon.id) {\n return polygon;\n }\n return {\n ...v,\n };\n }),\n });\n }\n };\n\n const initHistory = ({\n pointCloudBoxList,\n polygonList,\n }: {\n pointCloudBoxList: IPointCloudBoxList;\n polygonList: IPolygonData[];\n }) => {\n history.initRecord([{ pointCloudBoxList, polygonList }], true);\n };\n\n const updatePointCloud = (params?: {\n pointCloudBoxList: IPointCloudBoxList;\n polygonList: IPolygonData[];\n }) => {\n if (!params) {\n return;\n }\n\n const { pointCloudBoxList: newPointCloudBoxList, polygonList: newPolygonList } = params;\n\n if (newPointCloudBoxList) {\n if (pointCloudBoxList.length !== newPointCloudBoxList.length) {\n setSelectedIDs();\n }\n\n const deletePointCloudList = pointCloudBoxList.filter(\n (v) => newPointCloudBoxList.findIndex((d) => d.id === v.id) >= 0,\n );\n const addPointCloudList = newPointCloudBoxList.filter(\n (v) => pointCloudBoxList.findIndex((d) => d.id !== v.id) >= 0,\n );\n\n // Clear All Data\n deletePointCloudList.forEach((v) => {\n mainViewInstance?.removeObjectByName(v.id);\n });\n\n // Add Init Box\n addPointCloudList.forEach((v) => {\n mainViewInstance?.generateBox(v);\n });\n\n setPointCloudResult(newPointCloudBoxList);\n }\n\n if (newPolygonList) {\n setPolygonList(newPolygonList);\n }\n\n console.log('asd', newPointCloudBoxList, newPolygonList);\n topViewInstance?.updatePolygonList(newPointCloudBoxList ?? [], newPolygonList ?? []);\n };\n\n const redo = () => {\n updatePointCloud(history.redo());\n };\n\n const undo = () => {\n updatePointCloud(history.undo());\n };\n\n return {\n addHistory,\n pushHistoryWithList,\n initHistory,\n pushHistoryUnderUpdatePolygon,\n redo,\n undo,\n };\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useHistory.js","sources":["../../../../src/components/pointCloudView/hooks/useHistory.ts"],"sourcesContent":["import { IPointCloudBox, IPointCloudBoxList, IPolygonData } from '@labelbee/lb-utils';\nimport { useContext } from 'react';\nimport { PointCloudContext } from '../PointCloudContext';\n\nexport const useHistory = () => {\n const {\n history,\n setPointCloudResult,\n setSelectedIDs,\n pointCloudBoxList,\n mainViewInstance,\n topViewInstance,\n polygonList,\n setPolygonList,\n } = useContext(PointCloudContext);\n\n const addHistory = ({\n newBoxParams,\n newPolygon,\n }: {\n newBoxParams?: IPointCloudBox;\n newPolygon?: IPolygonData;\n }) => {\n const historyRecord = {\n pointCloudBoxList,\n polygonList,\n };\n\n if (newBoxParams) {\n historyRecord.pointCloudBoxList = pointCloudBoxList.concat(newBoxParams);\n }\n\n if (newPolygon) {\n historyRecord.polygonList = polygonList.concat(newPolygon);\n }\n\n history.pushHistory(historyRecord);\n };\n\n const pushHistoryWithList = (\n params: Partial<{\n pointCloudBoxList: IPointCloudBoxList;\n polygonList: IPolygonData[];\n }>,\n ) => {\n const historyRecord = {\n pointCloudBoxList,\n polygonList,\n };\n\n if (params.pointCloudBoxList) {\n historyRecord.pointCloudBoxList = params.pointCloudBoxList;\n }\n\n if (params.polygonList) {\n historyRecord.polygonList = params.polygonList;\n }\n\n history.pushHistory(historyRecord);\n };\n\n const pushHistoryUnderUpdatePolygon = (polygon: IPolygonData) => {\n const selectedPolygon = polygonList.find((v) => v.id === polygon.id);\n\n if (selectedPolygon) {\n history.pushHistory({\n pointCloudBoxList,\n polygonList: polygonList.map((v) => {\n if (v.id === polygon.id) {\n return polygon;\n }\n return {\n ...v,\n };\n }),\n });\n }\n };\n\n const initHistory = ({\n pointCloudBoxList,\n polygonList,\n }: {\n pointCloudBoxList: IPointCloudBoxList;\n polygonList: IPolygonData[];\n }) => {\n history.initRecord([{ pointCloudBoxList, polygonList }], true);\n };\n\n const updatePointCloud = (params?: {\n pointCloudBoxList: IPointCloudBoxList;\n polygonList: IPolygonData[];\n }) => {\n if (!params) {\n return;\n }\n\n const { pointCloudBoxList: newPointCloudBoxList, polygonList: newPolygonList } = params;\n\n if (newPointCloudBoxList) {\n if (pointCloudBoxList.length !== newPointCloudBoxList.length) {\n setSelectedIDs();\n }\n\n const deletePointCloudList = pointCloudBoxList.filter(\n (v) => newPointCloudBoxList.findIndex((d) => d.id === v.id) >= 0,\n );\n const addPointCloudList = newPointCloudBoxList.filter(\n (v) => pointCloudBoxList.findIndex((d) => d.id !== v.id) >= 0,\n );\n\n // Clear All Data\n deletePointCloudList.forEach((v) => {\n mainViewInstance?.removeObjectByName(v.id);\n });\n\n // Add Init Box\n addPointCloudList.forEach((v) => {\n mainViewInstance?.generateBox(v);\n });\n\n setPointCloudResult(newPointCloudBoxList);\n }\n\n if (newPolygonList) {\n setPolygonList(newPolygonList);\n }\n\n topViewInstance?.updatePolygonList(newPointCloudBoxList ?? [], newPolygonList ?? []);\n };\n\n const redo = () => {\n updatePointCloud(history.redo());\n };\n\n const undo = () => {\n updatePointCloud(history.undo());\n };\n\n return {\n addHistory,\n pushHistoryWithList,\n initHistory,\n pushHistoryUnderUpdatePolygon,\n redo,\n undo,\n };\n};\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- import{MathUtils as v}from"@labelbee/lb-annotation";import{EPerspectiveView as T,PointCloudUtils as k}from"@labelbee/lb-utils";import{useContext as nt}from"react";import{PointCloudContext as it}from"../PointCloudContext.js";import{useSingleBox as F}from"./useSingleBox.js";import st from"lodash";import{useSelector as rt,useDispatch as dt}from"../../../store/ctx.js";import lt from"../../../utils/StepUtils.js";import{jsonParser as N}from"../../../utils/index.js";import{SetPointCloudLoading as H}from"../../../store/annotation/actionCreators.js";import{message as at}from"antd";import{useTranslation as ct}from"react-i18next";import{useHistory as ut}from"./useHistory.js";import{usePolygon as pt}from"./usePolygon.js";var mt=Object.defineProperty,gt=Object.defineProperties,ft=Object.getOwnPropertyDescriptors,Z=Object.getOwnPropertySymbols,Pt=Object.prototype.hasOwnProperty,Ct=Object.prototype.propertyIsEnumerable,M=(o,e,n)=>e in o?mt(o,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):o[e]=n,b=(o,e)=>{for(var n in e||(e={}))Pt.call(e,n)&&M(o,n,e[n]);if(Z)for(var n of Z(e))Ct.call(e,n)&&M(o,n,e[n]);return o},W=(o,e)=>gt(o,ft(e)),vt=(o,e,n)=>new Promise((d,t)=>{var i=r=>{try{c(n.next(r))}catch(f){t(f)}},m=r=>{try{c(n.throw(r))}catch(f){t(f)}},c=r=>r.done?d(r.value):Promise.resolve(r.value).then(i,m);c((n=n.apply(o,e)).next())});const z=5,G=90,D={"3D":"3D",Top:"Top",Side:"Side",Back:"Back"},Q=(o,e)=>{const{width:n,height:d}=e,{x:t,y:i}=o;return{x:-i+d/2,y:-(t-n/2)}},R=(o,e,n,d,t)=>{const[i,m,c,r]=o.pointList.map(C=>Q(C,e)),f=v.getLineCenterPoint([i,c]),h=v.getLineLength(i,m),I=v.getLineLength(m,c),V=v.getRadiusFromQuadrangle(o.pointList);let y=0,p=1,g={};if(n){const C=n.getSensesPointZAxisInPolygon([i,m,c,r]);y=(C.maxZ+C.minZ)/2,p=C.maxZ-C.minZ,g={count:C.zCount}}d&&(y=d.center.z,p=d.depth);const O={center:{x:f.x,y:f.y,z:y},width:I,height:h,depth:p,rotation:V,id:o.id},x=b(d?b(b({},d),O):W(b({},O),{attribute:"",valid:!0}),g);return t&&Object.assign(x,t),x},ht=(o,e,n,d)=>{const[t,i,m]=o.pointList,[c,r,f]=e.pointList,h=v.getLineCenterPoint([t,m]),I=v.getLineCenterPoint([c,f]),y={x:{x:h.x-I.x,y:h.y-I.y}.x,y:0,z:h.y-I.y},p=v.getLineLength(t,i),g=v.getLineLength(c,r),O=p-g,x=v.getLineLength(i,m),C=v.getLineLength(r,f),L=x-C,{newBoxParams:A}=d.getNewBoxBySideUpdate(y,L,O,n);return A},q=(o,e,n,d)=>{if(!n)return;const{pointCloud2dOperation:t,pointCloudInstance:i}=n;i.loadPCDFileByBox(d,o,{width:z,depth:z});const{cameraPositionVector:m}=i.updateOrthoCamera(o,T.Left);i.setInitCameraPosition(m);const{polygon2d:c,zoom:r}=i.getBoxSidePolygon2DCoordinate(o);i.camera.zoom=r,i.camera.updateProjectionMatrix(),i.render(),t.initPosition(),t.zoomChangeOnCenter(r),t.setResultAndSelectedID([{id:e.id,valid:o.valid,pointList:c,textAttribute:"",isRect:!0}],e.id)},J=(o,e,n,d)=>{if(!n)return;const{pointCloud2dOperation:t,pointCloudInstance:i}=n;i.loadPCDFileByBox(d,o,{height:z,depth:z});const{cameraPositionVector:m}=i.updateOrthoCamera(o,T.Back);i.setInitCameraPosition(m);const{polygon2d:c,zoom:r}=i.getBoxBackPolygon2DCoordinate(o);i.camera.zoom=r,i.camera.updateProjectionMatrix(),i.render(),t.initPosition(),t.zoomChangeOnCenter(r),t.setResultAndSelectedID([{id:e.id,valid:o.valid,pointList:c,textAttribute:"",isRect:!0}],e.id)},K=(o,e,n,d)=>{var t;if(!n||!d)return;d.generateBox(o,e.id),d.updateCameraByBox(o,T.Top),d.render();const{pointCloud2dOperation:i,pointCloudInstance:m}=n,{polygon2d:c}=m.getBoxTopPolygon2DCoordinate(o),r=[...i.polygonList],f=r.find(h=>h.id===e.id);f?f.pointList=c:r.push({id:e.id,pointList:c,textAttribute:"",isRect:!0,valid:(t=o.valid)!=null?t:!0}),i.setResultAndSelectedID(r,e.id)},xt=()=>{const o=nt(it),{topViewInstance:e,sideViewInstance:n,backViewInstance:d,mainViewInstance:t,addPointCloudBox:i,setSelectedIDs:m,selectedIDs:c,pointCloudBoxList:r}=o,{addHistory:f,initHistory:h,pushHistoryUnderUpdatePolygon:I}=ut(),{selectedPolygon:V}=pt(),{updateSelectedBox:y}=F(),{currentData:p,config:g}=rt(s=>{const{stepList:l,step:u,imgList:a,imgIndex:P}=s.annotation;return{currentData:a[P],config:N(lt.getCurrentStepInfo(u,l).config)}}),O=dt(),{selectedBox:x}=F(),{t:C}=ct(),L=x==null?void 0:x.info;if(!e||!n)return{topViewAddBox:()=>{},topViewSelectedChanged:()=>{},sideViewUpdateBox:()=>{}};const{pointCloudInstance:A}=e,X=s=>{t==null||t.generateBox(s),t==null||t.controls.update(),t==null||t.render()},Y=({newPolygon:s,size:l,imgList:u})=>{var a,P,B;const S=u,w=R(s,l,A,void 0,{attribute:(B=(P=(a=g==null?void 0:g.attributeList)==null?void 0:a[0])==null?void 0:P.value)!=null?B:"",trackID:k.getNextTrackID({imgList:S,extraBoxList:r})}),U=e==null?void 0:e.pointCloud2dOperation,_=w;if((g==null?void 0:g.lowerLimitPointsNumInBox)&&typeof w.count=="number"&&w.count<g.lowerLimitPointsNumInBox){at.info(C("LowerLimitPointsNumInBox",{num:g.lowerLimitPointsNumInBox})),U.deletePolygon(w.id);return}U.setSelectedIDs([s.id]),m(_.id),j(D.Top,s,_),i(_),f({newBoxParams:_})},$=()=>{const s=x==null?void 0:x.info,l=e==null?void 0:e.pointCloud2dOperation;if(l.setSelectedIDs(c),!s||!l)return;const u=l.selectedPolygon;j(D.Top,u,s)},E=(s,l,u)=>{if(L){let a=ht(s,l,L,n.pointCloudInstance);if(t){const{count:P}=t.getSensesPointZAxisInPolygon(t.getCuboidFromPointCloudBox(a).polygonPointList,[a.center.z-a.depth/2,a.center.z+a.depth/2]);a=W(b({},a),{count:P})}y(a),j(u,s,a)}},tt=(s,l)=>{E(s,l,D.Side)},ot=(s,l)=>{E(s,l,D.Back)},et=(s,l)=>{if(V){I(s);return}if(L){const u=R(s,l,e.pointCloudInstance,L);Object.assign(L,st.pickBy(u,(a,P)=>["width","height","x","y"])),y(u),j(D.Top,s,L)}},j=(s,l,u)=>{const a=p==null?void 0:p.url,P={[D.Side]:()=>{q(u,l,n,a)},[D.Back]:()=>{d&&J(u,l,d,a)},[D.Top]:()=>{K(u,l,e,t)}};Object.keys(P).forEach(B=>{B!==s&&P[B]()}),X(u),t==null||t.highlightOriginPointCloud(u)};return{topViewAddBox:Y,topViewSelectedChanged:$,topViewUpdateBox:et,sideViewUpdateBox:tt,backViewUpdateBox:ot,pointCloudBoxListUpdated:s=>{e.updatePolygonList(s),t==null||t.generateBoxes(s)},initPointCloud3d:()=>{!t||(t.initPerspectiveCamera(),t.initRenderer(),t.render())},updatePointCloudData:()=>vt(void 0,null,function*(){var s,l,u,a,P,B;if(!(p==null?void 0:p.url)||!t)return;H(O,!0),yield t.loadPCDFile(p.url,(s=g==null?void 0:g.radius)!=null?s:G),r.forEach(_=>{t==null||t.removeObjectByName(_.id)});let S=[],w=[];p.result?(S=k.getBoxParamsFromResultList(p.result),w=k.getPolygonListFromResultList(p.result),S.forEach(_=>{t==null||t.generateBox(_)}),o.setPointCloudResult(S),o.setPolygonList(w)):(o.setPointCloudResult([]),o.setPolygonList([])),h({pointCloudBoxList:S,polygonList:w}),t.updateTopCamera();const U=(u=(l=N(p.result))==null?void 0:l.valid)!=null?u:!0;o.setPointCloudValid(U),(a=o.sideViewInstance)==null||a.clearAllData(),(P=o.backViewInstance)==null||P.clearAllData(),e.updateData(p.url,p.result,{radius:(B=g==null?void 0:g.radius)!=null?B:G}),H(O,!1)})}};export{J as synchronizeBackView,q as synchronizeSideView,K as synchronizeTopView,R as topViewPolygon2PointCloud,Q as transferCanvas2World,xt as usePointCloudViews};
1
+ import{MathUtils as h,getCuboidFromPointCloudBox as nt}from"@labelbee/lb-annotation";import{EPerspectiveView as T,PointCloudUtils as k}from"@labelbee/lb-utils";import{useContext as it}from"react";import{PointCloudContext as st}from"../PointCloudContext.js";import{useSingleBox as F}from"./useSingleBox.js";import rt from"lodash";import{useSelector as dt,useDispatch as lt}from"../../../store/ctx.js";import at from"../../../utils/StepUtils.js";import{jsonParser as N}from"../../../utils/index.js";import{SetPointCloudLoading as H}from"../../../store/annotation/actionCreators.js";import{message as ct}from"antd";import{useTranslation as ut}from"react-i18next";import{useHistory as pt}from"./useHistory.js";import{usePolygon as ft}from"./usePolygon.js";var gt=Object.defineProperty,mt=Object.defineProperties,Ct=Object.getOwnPropertyDescriptors,Z=Object.getOwnPropertySymbols,Pt=Object.prototype.hasOwnProperty,ht=Object.prototype.propertyIsEnumerable,M=(o,e,n)=>e in o?gt(o,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):o[e]=n,b=(o,e)=>{for(var n in e||(e={}))Pt.call(e,n)&&M(o,n,e[n]);if(Z)for(var n of Z(e))ht.call(e,n)&&M(o,n,e[n]);return o},W=(o,e)=>mt(o,Ct(e)),vt=(o,e,n)=>new Promise((d,t)=>{var i=r=>{try{c(n.next(r))}catch(g){t(g)}},f=r=>{try{c(n.throw(r))}catch(g){t(g)}},c=r=>r.done?d(r.value):Promise.resolve(r.value).then(i,f);c((n=n.apply(o,e)).next())});const z=5,G=90,D={"3D":"3D",Top:"Top",Side:"Side",Back:"Back"},Q=(o,e)=>{const{width:n,height:d}=e,{x:t,y:i}=o;return{x:-i+d/2,y:-(t-n/2)}},R=(o,e,n,d,t)=>{const[i,f,c,r]=o.pointList.map(P=>Q(P,e)),g=h.getLineCenterPoint([i,c]),v=h.getLineLength(i,f),O=h.getLineLength(f,c),V=h.getRadiusFromQuadrangle(o.pointList);let y=0,p=1,m={};if(n){const P=n.getSensesPointZAxisInPolygon([i,f,c,r]);y=(P.maxZ+P.minZ)/2,p=P.maxZ-P.minZ,m={count:P.zCount}}d&&(y=d.center.z,p=d.depth);const _={center:{x:g.x,y:g.y,z:y},width:O,height:v,depth:p,rotation:V,id:o.id},x=b(d?b(b({},d),_):W(b({},_),{attribute:"",valid:!0}),m);return t&&Object.assign(x,t),x},xt=(o,e,n,d)=>{const[t,i,f]=o.pointList,[c,r,g]=e.pointList,v=h.getLineCenterPoint([t,f]),O=h.getLineCenterPoint([c,g]),y={x:{x:v.x-O.x,y:v.y-O.y}.x,y:0,z:v.y-O.y},p=h.getLineLength(t,i),m=h.getLineLength(c,r),_=p-m,x=h.getLineLength(i,f),P=h.getLineLength(r,g),L=x-P,{newBoxParams:A}=d.getNewBoxBySideUpdate(y,L,_,n);return A},q=(o,e,n,d)=>{if(!n)return;const{pointCloud2dOperation:t,pointCloudInstance:i}=n;i.loadPCDFileByBox(d,o,{width:z,depth:z});const{cameraPositionVector:f}=i.updateOrthoCamera(o,T.Left);i.setInitCameraPosition(f);const{polygon2d:c,zoom:r}=i.getBoxSidePolygon2DCoordinate(o);i.camera.zoom=r,i.camera.updateProjectionMatrix(),i.render(),t.initPosition(),t.zoomChangeOnCenter(r),t.setResultAndSelectedID([{id:e.id,valid:o.valid,pointList:c,textAttribute:"",isRect:!0,attribute:o.attribute}],e.id)},J=(o,e,n,d)=>{if(!n)return;const{pointCloud2dOperation:t,pointCloudInstance:i}=n;i.loadPCDFileByBox(d,o,{height:z,depth:z});const{cameraPositionVector:f}=i.updateOrthoCamera(o,T.Back);i.setInitCameraPosition(f);const{polygon2d:c,zoom:r}=i.getBoxBackPolygon2DCoordinate(o);i.camera.zoom=r,i.camera.updateProjectionMatrix(),i.render(),t.initPosition(),t.zoomChangeOnCenter(r),t.setResultAndSelectedID([{id:e.id,valid:o.valid,pointList:c,textAttribute:"",isRect:!0,attribute:o.attribute}],e.id)},K=(o,e,n,d)=>{var t;if(!n||!d)return;d.generateBox(o,e.id),d.updateCameraByBox(o,T.Top),d.render();const{pointCloud2dOperation:i,pointCloudInstance:f}=n,{polygon2d:c}=f.getBoxTopPolygon2DCoordinate(o),r=[...i.polygonList],g=r.find(v=>v.id===e.id);g?g.pointList=c:r.push({id:e.id,pointList:c,textAttribute:"",isRect:!0,valid:(t=o.valid)!=null?t:!0}),i.setResultAndSelectedID(r,e.id)},yt=()=>{const o=it(st),{topViewInstance:e,sideViewInstance:n,backViewInstance:d,mainViewInstance:t,addPointCloudBox:i,setSelectedIDs:f,selectedIDs:c,pointCloudBoxList:r}=o,{addHistory:g,initHistory:v,pushHistoryUnderUpdatePolygon:O}=pt(),{selectedPolygon:V}=ft(),{updateSelectedBox:y}=F(),{currentData:p,config:m}=dt(s=>{const{stepList:l,step:u,imgList:a,imgIndex:C}=s.annotation;return{currentData:a[C],config:N(at.getCurrentStepInfo(u,l).config)}}),_=lt(),{selectedBox:x}=F(),{t:P}=ut(),L=x==null?void 0:x.info;if(!e||!n)return{topViewAddBox:()=>{},topViewSelectedChanged:()=>{},sideViewUpdateBox:()=>{}};const{pointCloudInstance:A}=e,X=s=>{t==null||t.generateBox(s),t==null||t.controls.update(),t==null||t.render()},Y=({newPolygon:s,size:l,imgList:u,trackConfigurable:a})=>{var C;const I=u,S={attribute:(C=e.pointCloud2dOperation.defaultAttribute)!=null?C:""};a===!0&&Object.assign(S,{trackID:k.getNextTrackID({imgList:I,extraBoxList:r})});const B=R(s,l,A,void 0,S),U=e==null?void 0:e.pointCloud2dOperation,w=B;if((m==null?void 0:m.lowerLimitPointsNumInBox)&&typeof B.count=="number"&&B.count<m.lowerLimitPointsNumInBox){ct.info(P("LowerLimitPointsNumInBox",{num:m.lowerLimitPointsNumInBox})),U.deletePolygon(B.id);return}U.setSelectedIDs([s.id]),f(w.id),j(D.Top,s,w),i(w),g({newBoxParams:w})},$=()=>{const s=x==null?void 0:x.info,l=e==null?void 0:e.pointCloud2dOperation;if(l.setSelectedIDs(c),!s||!l)return;const u=l.selectedPolygon;j(D.Top,u,s)},E=(s,l,u)=>{if(L){let a=xt(s,l,L,n.pointCloudInstance);if(t){const{count:C}=t.getSensesPointZAxisInPolygon(nt(a).polygonPointList,[a.center.z-a.depth/2,a.center.z+a.depth/2]);a=W(b({},a),{count:C})}y(a),j(u,s,a)}},tt=(s,l)=>{E(s,l,D.Side)},ot=(s,l)=>{E(s,l,D.Back)},et=(s,l)=>{if(V){O(s);return}if(L){const u=R(s,l,e.pointCloudInstance,L);Object.assign(L,rt.pickBy(u,(a,C)=>["width","height","x","y"])),y(u),j(D.Top,s,L)}},j=(s,l,u)=>{const a=p==null?void 0:p.url,C={[D.Side]:()=>{q(u,l,n,a)},[D.Back]:()=>{d&&J(u,l,d,a)},[D.Top]:()=>{K(u,l,e,t)}};Object.keys(C).forEach(I=>{I!==s&&C[I]()}),X(u),t==null||t.highlightOriginPointCloud(u)};return{topViewAddBox:Y,topViewSelectedChanged:$,topViewUpdateBox:et,sideViewUpdateBox:tt,backViewUpdateBox:ot,pointCloudBoxListUpdated:s=>{e.updatePolygonList(s),t==null||t.generateBoxes(s)},initPointCloud3d:()=>{!t||(t.initPerspectiveCamera(),t.initRenderer(),t.render())},updatePointCloudData:()=>vt(void 0,null,function*(){var s,l,u,a,C,I;if(!(p==null?void 0:p.url)||!t)return;H(_,!0),yield t.loadPCDFile(p.url,(s=m==null?void 0:m.radius)!=null?s:G),r.forEach(w=>{t==null||t.removeObjectByName(w.id)});let S=[],B=[];p.result?(S=k.getBoxParamsFromResultList(p.result),B=k.getPolygonListFromResultList(p.result),S.forEach(w=>{t==null||t.generateBox(w)}),o.setPointCloudResult(S),o.setPolygonList(B)):(o.setPointCloudResult([]),o.setPolygonList([])),v({pointCloudBoxList:S,polygonList:B}),t.updateTopCamera();const U=(u=(l=N(p.result))==null?void 0:l.valid)!=null?u:!0;o.setPointCloudValid(U),(a=o.sideViewInstance)==null||a.clearAllData(),(C=o.backViewInstance)==null||C.clearAllData(),e.updateData(p.url,p.result,{radius:(I=m==null?void 0:m.radius)!=null?I:G}),H(_,!1)})}};export{J as synchronizeBackView,q as synchronizeSideView,K as synchronizeTopView,R as topViewPolygon2PointCloud,Q as transferCanvas2World,yt as usePointCloudViews};