@labelbee/lb-components 1.6.0-alpha.1 → 1.6.0-alpha.11
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.
- package/dist/App.js +1 -1
- package/dist/assets/annotation/pointCloudTool/nodata.svg.js +1 -0
- package/dist/assets/attributeIcon/eraser.svg.js +1 -0
- package/dist/assets/attributeIcon/eraser_a.svg.js +1 -0
- package/dist/assets/attributeIcon/pen.svg.js +1 -0
- package/dist/assets/attributeIcon/pen_a.svg.js +1 -0
- package/dist/components/AnnotationView/index.js +1 -1
- package/dist/components/AnnotationView/pointCloudAnnotationView.js +1 -0
- package/dist/components/attributeList/index.js +1 -1
- package/dist/components/customResizeHook/index.js +1 -1
- package/dist/components/pointCloudView/PointCloud2DView.js +1 -1
- package/dist/components/pointCloudView/PointCloud3DView.js +1 -1
- package/dist/components/pointCloudView/PointCloudBackView.js +1 -1
- package/dist/components/pointCloudView/PointCloudContext.js +1 -1
- package/dist/components/pointCloudView/PointCloudInfos.js +1 -1
- package/dist/components/pointCloudView/PointCloudLayout.js +1 -1
- package/dist/components/pointCloudView/PointCloudListener.js +1 -1
- package/dist/components/pointCloudView/PointCloudSideView.js +1 -1
- package/dist/components/pointCloudView/PointCloudTopView.js +1 -1
- package/dist/components/pointCloudView/components/EmptyPage/index.js +1 -0
- package/dist/components/pointCloudView/hooks/useBoxes.js +1 -1
- package/dist/components/pointCloudView/hooks/usePointCloudViews.js +1 -1
- package/dist/components/pointCloudView/hooks/usePolygon.js +1 -0
- package/dist/components/pointCloudView/hooks/useRotate.js +1 -1
- package/dist/components/pointCloudView/hooks/useSingleBox.js +1 -1
- package/dist/components/pointCloudView/hooks/useStatus.js +1 -0
- package/dist/components/pointCloudView/hooks/useZoom.js +1 -0
- package/dist/components/pointCloudView/index.js +1 -1
- package/dist/components/videoAnnotate/index.js +1 -1
- package/dist/data/enums/ToolType.js +1 -1
- package/dist/hooks/annotation.js +1 -1
- package/dist/hooks/useSize.js +1 -1
- package/dist/index.css +64 -10
- package/dist/index.js +1 -1
- package/dist/store/Actions.js +1 -1
- package/dist/store/annotation/actionCreators.js +1 -1
- package/dist/store/annotation/map.js +1 -1
- package/dist/store/annotation/reducer.js +1 -1
- package/dist/store/ctx.js +1 -0
- package/dist/types/App.d.ts +8 -0
- package/dist/types/components/AnnotationView/index.d.ts +4 -3
- package/dist/types/components/AnnotationView/pointCloudAnnotationView.d.ts +10 -0
- package/dist/types/components/attributeList/index.d.ts +1 -0
- package/dist/types/components/pointCloudView/PointCloudContext.d.ts +5 -1
- package/dist/types/components/pointCloudView/PointCloudLayout.d.ts +1 -0
- package/dist/types/components/pointCloudView/components/EmptyPage/index.d.ts +2 -0
- package/dist/types/components/pointCloudView/hooks/usePointCloudViews.d.ts +9 -1
- package/dist/types/components/pointCloudView/hooks/usePolygon.d.ts +9 -0
- package/dist/types/components/pointCloudView/hooks/useStatus.d.ts +11 -0
- package/dist/types/components/pointCloudView/hooks/useZoom.d.ts +7 -0
- package/dist/types/data/enums/ToolType.d.ts +14 -8
- package/dist/types/hooks/annotation.d.ts +14 -2
- package/dist/types/hooks/useSize.d.ts +2 -2
- package/dist/types/index.d.ts +2 -1
- package/dist/types/store/Actions.d.ts +3 -0
- package/dist/types/store/annotation/actionCreators.d.ts +11 -1
- package/dist/types/store/annotation/types.d.ts +2 -0
- package/dist/types/store/ctx.d.ts +4 -0
- package/dist/types/utils/data.d.ts +1 -1
- package/dist/types/views/MainView/annotationOperation/index.d.ts +3 -0
- package/dist/types/views/MainView/sidebar/ScribbleSidebar/index.d.ts +6 -0
- package/dist/types/views/MainView/toolFooter/ZoomController/ZoomLevel/index.d.ts +1 -0
- package/dist/types/views/MainView/toolFooter/ZoomController/index.d.ts +1 -0
- package/dist/types/views/MainView/toolFooter/index.d.ts +2 -1
- package/dist/utils/data.js +1 -1
- package/dist/views/MainView/annotationOperation/index.js +1 -1
- package/dist/views/MainView/annotationTips/index.js +1 -1
- package/dist/views/MainView/index.js +1 -1
- package/dist/views/MainView/sidebar/AnnotationText/index.js +1 -1
- package/dist/views/MainView/sidebar/GeneralOperation/ActionsConfirm.js +1 -1
- package/dist/views/MainView/sidebar/GeneralOperation/index.js +1 -1
- package/dist/views/MainView/sidebar/GeneralOperation/useOperationList.js +1 -1
- package/dist/views/MainView/sidebar/ImgAttributeInfo/index.js +1 -1
- package/dist/views/MainView/sidebar/PointCloudToolSidebar/index.js +1 -1
- package/dist/views/MainView/sidebar/ScribbleSidebar/index.js +1 -0
- package/dist/views/MainView/sidebar/SwitchAttributeList/index.js +1 -1
- package/dist/views/MainView/sidebar/TagSidebar/index.js +1 -1
- package/dist/views/MainView/sidebar/TextToolSidebar/index.js +1 -1
- package/dist/views/MainView/sidebar/ToolIcons.js +1 -1
- package/dist/views/MainView/sidebar/ToolStyle/index.js +1 -1
- package/dist/views/MainView/sidebar/index.js +1 -1
- package/dist/views/MainView/toolFooter/FooterTips/ToolHotKey/pointCloud/index.js +1 -1
- package/dist/views/MainView/toolFooter/FooterTips/index.js +1 -1
- package/dist/views/MainView/toolFooter/HiddenTips/index.js +1 -1
- package/dist/views/MainView/toolFooter/PageNumber/index.js +1 -1
- package/dist/views/MainView/toolFooter/ZoomController/ZoomLevel/index.js +1 -1
- package/dist/views/MainView/toolFooter/ZoomController/index.js +1 -1
- package/dist/views/MainView/toolFooter/index.js +1 -1
- package/dist/views/MainView/toolHeader/ExportData/index.js +1 -1
- package/dist/views/MainView/toolHeader/StepSwitch/index.js +1 -1
- package/dist/views/MainView/toolHeader/headerOption/index.js +1 -1
- package/dist/views/MainView/toolHeader/index.js +1 -1
- package/es/App.js +1 -1
- package/es/App.js.map +1 -1
- package/es/assets/annotation/pointCloudTool/nodata.svg.js +1 -0
- package/es/assets/annotation/pointCloudTool/nodata.svg.js.map +1 -0
- package/es/assets/attributeIcon/eraser.svg.js +1 -0
- package/es/assets/attributeIcon/eraser.svg.js.map +1 -0
- package/es/assets/attributeIcon/eraser_a.svg.js +1 -0
- package/es/assets/attributeIcon/eraser_a.svg.js.map +1 -0
- package/es/assets/attributeIcon/pen.svg.js +1 -0
- package/es/assets/attributeIcon/pen.svg.js.map +1 -0
- package/es/assets/attributeIcon/pen_a.svg.js +1 -0
- package/es/assets/attributeIcon/pen_a.svg.js.map +1 -0
- package/es/components/AnnotationView/index.js +1 -1
- package/es/components/AnnotationView/index.js.map +1 -1
- package/es/components/AnnotationView/pointCloudAnnotationView.js +1 -0
- package/es/components/AnnotationView/pointCloudAnnotationView.js.map +1 -0
- package/es/components/attributeList/index.js +1 -1
- package/es/components/attributeList/index.js.map +1 -1
- package/es/components/customResizeHook/index.js +1 -1
- package/es/components/customResizeHook/index.js.map +1 -1
- package/es/components/pointCloudView/PointCloud2DView.js +1 -1
- package/es/components/pointCloudView/PointCloud2DView.js.map +1 -1
- package/es/components/pointCloudView/PointCloud3DView.js +1 -1
- package/es/components/pointCloudView/PointCloud3DView.js.map +1 -1
- package/es/components/pointCloudView/PointCloudBackView.js +1 -1
- package/es/components/pointCloudView/PointCloudBackView.js.map +1 -1
- package/es/components/pointCloudView/PointCloudContext.js +1 -1
- package/es/components/pointCloudView/PointCloudContext.js.map +1 -1
- package/es/components/pointCloudView/PointCloudInfos.js +1 -1
- package/es/components/pointCloudView/PointCloudInfos.js.map +1 -1
- package/es/components/pointCloudView/PointCloudLayout.js +1 -1
- package/es/components/pointCloudView/PointCloudLayout.js.map +1 -1
- package/es/components/pointCloudView/PointCloudListener.js +1 -1
- package/es/components/pointCloudView/PointCloudListener.js.map +1 -1
- package/es/components/pointCloudView/PointCloudSideView.js +1 -1
- package/es/components/pointCloudView/PointCloudSideView.js.map +1 -1
- package/es/components/pointCloudView/PointCloudTopView.js +1 -1
- package/es/components/pointCloudView/PointCloudTopView.js.map +1 -1
- package/es/components/pointCloudView/components/EmptyPage/index.js +1 -0
- package/es/components/pointCloudView/components/EmptyPage/index.js.map +1 -0
- package/es/components/pointCloudView/hooks/useBoxes.js +1 -1
- package/es/components/pointCloudView/hooks/useBoxes.js.map +1 -1
- package/es/components/pointCloudView/hooks/useConfig.js +19 -0
- package/es/components/pointCloudView/hooks/useConfig.js.map +1 -0
- package/es/components/pointCloudView/hooks/usePointCloudViews.js +1 -1
- package/es/components/pointCloudView/hooks/usePointCloudViews.js.map +1 -1
- package/es/components/pointCloudView/hooks/usePolygon.js +1 -0
- package/es/components/pointCloudView/hooks/usePolygon.js.map +1 -0
- package/es/components/pointCloudView/hooks/useRotate.js +1 -1
- package/es/components/pointCloudView/hooks/useRotate.js.map +1 -1
- package/es/components/pointCloudView/hooks/useSingleBox.js +1 -1
- package/es/components/pointCloudView/hooks/useSingleBox.js.map +1 -1
- package/es/components/pointCloudView/hooks/useStatus.js +1 -0
- package/es/components/pointCloudView/hooks/useStatus.js.map +1 -0
- package/es/components/pointCloudView/hooks/useZoom.js +1 -0
- package/es/components/pointCloudView/hooks/useZoom.js.map +1 -0
- package/es/components/pointCloudView/index.js +1 -1
- package/es/components/pointCloudView/index.js.map +1 -1
- package/es/components/videoAnnotate/index.js +1 -1
- package/es/components/videoAnnotate/index.js.map +1 -1
- package/es/data/enums/ToolType.js +1 -1
- package/es/data/enums/ToolType.js.map +1 -1
- package/es/hooks/annotation.js +1 -1
- package/es/hooks/annotation.js.map +1 -1
- package/es/hooks/useConfig.js +18 -0
- package/es/hooks/useConfig.js.map +1 -0
- package/es/hooks/useSize.js +1 -1
- package/es/hooks/useSize.js.map +1 -1
- package/es/index.css +64 -10
- package/es/index.js +1 -1
- package/es/index.js.map +1 -1
- package/es/store/Actions.js +1 -1
- package/es/store/Actions.js.map +1 -1
- package/es/store/annotation/actionCreators.js +1 -1
- package/es/store/annotation/actionCreators.js.map +1 -1
- package/es/store/annotation/map.js +1 -1
- package/es/store/annotation/map.js.map +1 -1
- package/es/store/annotation/reducer.js +1 -1
- package/es/store/annotation/reducer.js.map +1 -1
- package/es/store/ctx.js +1 -0
- package/es/store/ctx.js.map +1 -0
- package/es/utils/data.js +1 -1
- package/es/utils/data.js.map +1 -1
- package/es/views/MainView/annotationOperation/index.js +1 -1
- package/es/views/MainView/annotationOperation/index.js.map +1 -1
- package/es/views/MainView/annotationTips/index.js +1 -1
- package/es/views/MainView/annotationTips/index.js.map +1 -1
- package/es/views/MainView/index.js +1 -1
- package/es/views/MainView/index.js.map +1 -1
- package/es/views/MainView/sidebar/AnnotationText/index.js +1 -1
- package/es/views/MainView/sidebar/AnnotationText/index.js.map +1 -1
- package/es/views/MainView/sidebar/GeneralOperation/ActionsConfirm.js +1 -1
- package/es/views/MainView/sidebar/GeneralOperation/ActionsConfirm.js.map +1 -1
- package/es/views/MainView/sidebar/GeneralOperation/index.js +1 -1
- package/es/views/MainView/sidebar/GeneralOperation/index.js.map +1 -1
- package/es/views/MainView/sidebar/GeneralOperation/useOperationList.js +1 -1
- package/es/views/MainView/sidebar/GeneralOperation/useOperationList.js.map +1 -1
- package/es/views/MainView/sidebar/ImgAttributeInfo/index.js +1 -1
- package/es/views/MainView/sidebar/ImgAttributeInfo/index.js.map +1 -1
- package/es/views/MainView/sidebar/PointCloudToolSidebar/index.js +1 -1
- package/es/views/MainView/sidebar/PointCloudToolSidebar/index.js.map +1 -1
- package/es/views/MainView/sidebar/ScribbleSidebar/index.js +1 -0
- package/es/views/MainView/sidebar/ScribbleSidebar/index.js.map +1 -0
- package/es/views/MainView/sidebar/SwitchAttributeList/index.js +1 -1
- package/es/views/MainView/sidebar/SwitchAttributeList/index.js.map +1 -1
- package/es/views/MainView/sidebar/TagSidebar/index.js +1 -1
- package/es/views/MainView/sidebar/TagSidebar/index.js.map +1 -1
- package/es/views/MainView/sidebar/TextToolSidebar/index.js +1 -1
- package/es/views/MainView/sidebar/TextToolSidebar/index.js.map +1 -1
- package/es/views/MainView/sidebar/ToolIcons.js +1 -1
- package/es/views/MainView/sidebar/ToolIcons.js.map +1 -1
- package/es/views/MainView/sidebar/ToolStyle/index.js +1 -1
- package/es/views/MainView/sidebar/ToolStyle/index.js.map +1 -1
- package/es/views/MainView/sidebar/index.js +1 -1
- package/es/views/MainView/sidebar/index.js.map +1 -1
- package/es/views/MainView/toolFooter/FooterTips/ToolHotKey/pointCloud/index.js +1 -1
- package/es/views/MainView/toolFooter/FooterTips/ToolHotKey/pointCloud/index.js.map +1 -1
- package/es/views/MainView/toolFooter/FooterTips/index.js +1 -1
- package/es/views/MainView/toolFooter/FooterTips/index.js.map +1 -1
- package/es/views/MainView/toolFooter/HiddenTips/index.js +1 -1
- package/es/views/MainView/toolFooter/HiddenTips/index.js.map +1 -1
- package/es/views/MainView/toolFooter/PageNumber/index.js +1 -1
- package/es/views/MainView/toolFooter/PageNumber/index.js.map +1 -1
- package/es/views/MainView/toolFooter/ZoomController/ZoomLevel/index.js +1 -1
- package/es/views/MainView/toolFooter/ZoomController/ZoomLevel/index.js.map +1 -1
- package/es/views/MainView/toolFooter/ZoomController/index.js +1 -1
- package/es/views/MainView/toolFooter/ZoomController/index.js.map +1 -1
- package/es/views/MainView/toolFooter/index.js +1 -1
- package/es/views/MainView/toolFooter/index.js.map +1 -1
- package/es/views/MainView/toolHeader/ExportData/index.js +1 -1
- package/es/views/MainView/toolHeader/ExportData/index.js.map +1 -1
- package/es/views/MainView/toolHeader/StepSwitch/index.js +1 -1
- package/es/views/MainView/toolHeader/StepSwitch/index.js.map +1 -1
- package/es/views/MainView/toolHeader/headerOption/index.js +1 -1
- package/es/views/MainView/toolHeader/headerOption/index.js.map +1 -1
- package/es/views/MainView/toolHeader/index.js +1 -1
- package/es/views/MainView/toolHeader/index.js.map +1 -1
- package/package.json +5 -6
|
@@ -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 } from '@labelbee/lb-utils';\nimport React from 'react';\nimport { PointCloudContext } from './PointCloudContext';\nimport { UnitUtils } from '@labelbee/lb-annotation';\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\n if (selectedID && box) {\n const infos =\n perspectiveView === EPerspectiveView.Back\n ? [\n {
|
|
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":";;;;;;;AAaA,MAAM,cAAiB,GAAA,CAAA,CAAA;AAOV,MAAA,eAAA,GAAkB,CAAC,CAAE,eAA6D,CAAA,KAAA;AAC7F,EAAA,MAAM,CAAE,iBAAA,EAAmB,UAAe,CAAA,GAAA,KAAA,CAAM,UAAW,CAAA,iBAAA,CAAA,CAAA;AAC3D,EAAA,MAAM,MAAM,iBAAkB,CAAA,IAAA,CAAK,CAAC,CAAA,KAAM,EAAE,EAAO,KAAA,UAAA,CAAA,CAAA;AACnD,EAAA,MAAM,KAAQ,GAAA,cAAA,EAAA,CAAA;AACd,EAAA,MAAM,CAAE,CAAM,CAAA,GAAA,KAAA,CAAA;AAEd,EAAA,IAAI,cAAc,GAAK,EAAA;AACrB,IAAA,MAAM,CAAE,MAAA,EAAQ,KAAO,EAAA,MAAA,CAAA,GAAW,gBAAgB,iBAAkB,CAAA,GAAA,CAAA,CAAA;AACpE,IAAM,MAAA,KAAA,GACJ,eAAoB,KAAA,gBAAA,CAAiB,IACjC,GAAA;AAAA,MACE;AAAA,QACE,OAAO,CAAE,CAAA,OAAA,CAAA;AAAA,QACT,KAAO,EAAA,KAAA;AAAA,OAAA;AAAA,MAET;AAAA,QACE,OAAO,CAAE,CAAA,QAAA,CAAA;AAAA,QACT,KAAO,EAAA,MAAA;AAAA,OAAA;AAAA,KAGX,GAAA;AAAA,MACE;AAAA,QACE,OAAO,CAAE,CAAA,QAAA,CAAA;AAAA,QACT,KAAO,EAAA,MAAA;AAAA,OAAA;AAAA,MAET;AAAA,QACE,OAAO,CAAE,CAAA,QAAA,CAAA;AAAA,QACT,KAAO,EAAA,MAAA;AAAA,OAAA;AAAA,KAAA,CAAA;AAIjB,IAAA,iEAEK,KAAM,CAAA,GAAA,CAAI,CAAC,IAAM,EAAA,KAAA,yCACf,MAAD,EAAA;AAAA,MAAM,GAAK,EAAA,KAAA;AAAA,MAAO,OAAO,CAAE,WAAA,EAAa,UAAU,CAAI,GAAA,EAAA,GAAK,GAAG,QAAU,EAAA,EAAA,CAAA;AAAA,KAAA,EAAO,CAC7E,EAAA,IAAA,CAAK,KACF,CAAA,EAAA,EAAA,IAAA,CAAK,MAAM,OAAQ,CAAA,cAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,GAAA;AAKhC,EAAO,OAAA,IAAA,CAAA;AAAA,EAAA;AAMF,MAAM,WAAW,MAAM;AAC5B,EAAM,MAAA,KAAA,GAAQ,MAAM,UAAW,CAAA,iBAAA,CAAA,CAAA;AAC/B,EAAA,MAAM,CAAE,WAAgB,CAAA,GAAA,YAAA,EAAA,CAAA;AACxB,EAAM,MAAA,CAAC,KAAO,EAAA,QAAA,CAAA,GAAY,QAAkD,CAAA,EAAA,CAAA,CAAA;AAC5E,EAAA,MAAM,KAAQ,GAAA,cAAA,EAAA,CAAA;AACd,EAAM,MAAA,CAAE,GAAG,IAAS,CAAA,GAAA,KAAA,CAAA;AAEpB,EAAA,SAAA,CAAU,MAAM;AA1ElB,IAAA,IAAA,EAAA,CAAA;AA2EI,IAAA,IAAI,CAAC,WAAa,EAAA;AAChB,MAAA,OAAA;AAAA,KAAA;AAGF,IAAA,MAAM,CAAE,MAAQ,EAAA,KAAA,EAAO,QAAQ,UAAe,CAAA,GAAA,eAAA,CAAgB,kBAC5D,WAAY,CAAA,IAAA,CAAA,CAAA;AAGd,IAAA,IAAI,MAAQ,GAAA;AAAA,MACV;AAAA,QACE,OAAO,CAAE,CAAA,QAAA,CAAA;AAAA,QACT,KAAA,EAAO,OAAO,OAAQ,CAAA,cAAA,CAAA;AAAA,OAAA;AAAA,MAExB;AAAA,QACE,OAAO,CAAE,CAAA,OAAA,CAAA;AAAA,QACT,KAAA,EAAO,MAAM,OAAQ,CAAA,cAAA,CAAA;AAAA,OAAA;AAAA,MAEvB;AAAA,QACE,OAAO,CAAE,CAAA,QAAA,CAAA;AAAA,QACT,KAAA,EAAO,OAAO,OAAQ,CAAA,cAAA,CAAA;AAAA,OAAA;AAAA,MAExB;AAAA,QACE,OAAO,CAAE,CAAA,YAAA,CAAA;AAAA,QACT,KAAO,EAAA,SAAA,CAAU,OAAQ,CAAA,UAAA,CAAA,CAAY,OAAQ,CAAA,cAAA,CAAA;AAAA,OAAA;AAAA,KAAA,CAAA;AAKjD,IAAA,CAAA,EAAA,GAAA,KAAA,CAAM,qBAAN,IAAwB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,iBAAA,CAAkB,YAAY,IAAM,CAAA,CAAA,IAAA,CAAK,CAAC,IAAS,KAAA;AACzE,MAAA,IAAI,CAAC,IAAM,EAAA;AACT,QAAS,QAAA,CAAA,MAAA,CAAA,CAAA;AACT,QAAA,OAAA;AAAA,OAAA;AAGF,MAAA,MAAA,CAAM,IAAK,CAAA;AAAA,QACT,OAAO,CAAE,CAAA,YAAA,CAAA;AAAA,QACT,KAAA,EAAO,GAAG,IAAK,CAAA,GAAA,CAAA,CAAA;AAAA,OAAA,CAAA,CAAA;AAEjB,MAAS,QAAA,CAAA,MAAA,CAAA,CAAA;AAAA,KAAA,CAAA,CAAA;AAAA,GAEV,EAAA,CAAC,aAAa,IAAK,CAAA,QAAA,CAAA,CAAA,CAAA;AAEtB,EAAA,IAAI,WAAa,EAAA;AACf,IAAA,2CACG,KAAD,EAAA;AAAA,MACE,KAAO,EAAA;AAAA,QACL,QAAU,EAAA,UAAA;AAAA,QACV,KAAO,EAAA,OAAA;AAAA,QACP,eAAiB,EAAA,0BAAA;AAAA,QACjB,KAAO,EAAA,CAAA;AAAA,QACP,GAAK,EAAA,CAAA;AAAA,QACL,QAAU,EAAA,EAAA;AAAA,QACV,OAAS,EAAA,CAAA;AAAA,QACT,MAAQ,EAAA,EAAA;AAAA,OAAA;AAAA,KAAA,EAGT,KAAM,CAAA,GAAA,CAAI,CAAC,CAAA,yCACT,KAAD,EAAA;AAAA,MAAK,KAAK,CAAE,CAAA,KAAA;AAAA,KAAQ,EAAA,CAAA,EAAG,CAAE,CAAA,KAAA,CAAA,EAAA,EAAU,CAAE,CAAA,KAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,GAAA;AAM7C,EAAO,OAAA,IAAA,CAAA;AAAA,EAAA;AAGF,MAAM,qBAAqB,MAAM;AACtC,EAAM,MAAA,KAAA,GAAQ,MAAM,UAAW,CAAA,iBAAA,CAAA,CAAA;AAC/B,EAAA,MAAM,CAAE,CAAM,CAAA,GAAA,cAAA,EAAA,CAAA;AAEd,EAAI,IAAA,KAAA,CAAM,UAAU,KAAO,EAAA;AACzB,IAAA,2CACG,KAAD,EAAA;AAAA,MACE,KAAO,EAAA;AAAA,QACL,QAAU,EAAA,UAAA;AAAA,QACV,eAAiB,EAAA,mBAAA;AAAA,QACjB,KAAO,EAAA,OAAA;AAAA,QACP,IAAM,EAAA,CAAA;AAAA,QACN,GAAK,EAAA,CAAA;AAAA,QACL,QAAU,EAAA,EAAA;AAAA,QACV,OAAS,EAAA,UAAA;AAAA,QACT,MAAQ,EAAA,EAAA;AAAA,OAAA;AAAA,KAAA,EAGT,CAAE,CAAA,SAAA,CAAA,CAAA,CAAA;AAAA,GAAA;AAIT,EAAO,OAAA,IAAA,CAAA;AAAA;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{getClassName as e}from"../../utils/dom.js";import
|
|
1
|
+
import{getClassName as e}from"../../utils/dom.js";import s from"classnames";import t from"react";const i=({title:o,toolbar:a,children:n,className:r,style:c})=>t.createElement("div",{className:s([r,e("point-cloud-container")]),style:c},t.createElement("div",{className:e("point-cloud-container","header")},t.createElement("span",{className:e("point-cloud-container","header-title")},o),a&&t.createElement("div",{className:e("point-cloud-container","header-toolbar")},a)),n);export{i as PointCloudContainer};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PointCloudLayout.js","sources":["../../../src/components/pointCloudView/PointCloudLayout.tsx"],"sourcesContent":["import { getClassName } from '@/utils/dom';\nimport classNames from 'classnames';\nimport React from 'react';\n\nexport const PointCloudContainer: React.FC<{\n title: string;\n toolbar?: React.ReactElement;\n className?: string;\n}> = ({ title, toolbar, children, className }) => {\n return (\n <div className={classNames([className, getClassName('point-cloud-container')])}>\n <div className={getClassName('point-cloud-container', 'header')}>\n <span className={getClassName('point-cloud-container', 'header-title')}>{title}</span>\n\n {toolbar && (\n <div className={getClassName('point-cloud-container', 'header-toolbar')}>{toolbar}</div>\n )}\n </div>\n\n {children}\n </div>\n );\n};\n"],"names":[],"mappings":";;;;AAIO,MAAM,
|
|
1
|
+
{"version":3,"file":"PointCloudLayout.js","sources":["../../../src/components/pointCloudView/PointCloudLayout.tsx"],"sourcesContent":["import { getClassName } from '@/utils/dom';\nimport classNames from 'classnames';\nimport React from 'react';\n\nexport const PointCloudContainer: React.FC<{\n title: string;\n toolbar?: React.ReactElement;\n className?: string;\n style?: React.CSSProperties;\n}> = ({ title, toolbar, children, className, style }) => {\n return (\n <div className={classNames([className, getClassName('point-cloud-container')])} style={style}>\n <div className={getClassName('point-cloud-container', 'header')}>\n <span className={getClassName('point-cloud-container', 'header-title')}>{title}</span>\n\n {toolbar && (\n <div className={getClassName('point-cloud-container', 'header-toolbar')}>{toolbar}</div>\n )}\n </div>\n\n {children}\n </div>\n );\n};\n"],"names":[],"mappings":";;;;AAIO,MAAM,sBAKR,CAAC,CAAE,OAAO,OAAS,EAAA,QAAA,EAAU,WAAW,KAAY,CAAA,KAAA;AACvD,EAAA,2CACG,KAAD,EAAA;AAAA,IAAK,SAAW,EAAA,UAAA,CAAW,CAAC,SAAA,EAAW,YAAa,CAAA,uBAAA,CAAA,CAAA,CAAA;AAAA,IAA4B,KAAA;AAAA,GAAA,sCAC7E,KAAD,EAAA;AAAA,IAAK,SAAA,EAAW,aAAa,uBAAyB,EAAA,QAAA,CAAA;AAAA,GAAA,sCACnD,MAAD,EAAA;AAAA,IAAM,SAAA,EAAW,aAAa,uBAAyB,EAAA,cAAA,CAAA;AAAA,GAAkB,EAAA,KAAA,CAAA,EAExE,OACC,oBAAA,KAAA,CAAA,aAAA,CAAC,KAAD,EAAA;AAAA,IAAK,SAAA,EAAW,aAAa,uBAAyB,EAAA,gBAAA,CAAA;AAAA,GAAA,EAAoB,OAI7E,CAAA,CAAA,EAAA,QAAA,CAAA,CAAA;AAAA;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{PointCloudContext as
|
|
1
|
+
import{PointCloudContext as j}from"./PointCloudContext.js";import{useRotate as h}from"./hooks/useRotate.js";import{useBoxes as L}from"./hooks/useBoxes.js";import{useSingleBox as V}from"./hooks/useSingleBox.js";import{useContext as I,useEffect as u}from"react";import{cTool as R}from"@labelbee/lb-annotation";import{message as A}from"antd";import{connect as E}from"react-redux";import{aMapStateToProps as N}from"../../store/annotation/map.js";import{useCustomToolInstance as D}from"../../hooks/annotation.js";import{useStatus as T}from"./hooks/useStatus.js";import{jsonParser as K}from"../../utils/index.js";import{usePointCloudViews as z}from"./hooks/usePointCloudViews.js";import{LabelBeeContext as $}from"../../store/ctx.js";var q=Object.defineProperty,G=Object.defineProperties,M=Object.getOwnPropertyDescriptors,v=Object.getOwnPropertySymbols,Y=Object.prototype.hasOwnProperty,F=Object.prototype.propertyIsEnumerable,x=(o,e,r)=>e in o?q(o,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):o[e]=r,H=(o,e)=>{for(var r in e||(e={}))Y.call(e,r)&&x(o,r,e[r]);if(v)for(var r of v(e))F.call(e,r)&&x(o,r,e[r]);return o},J=(o,e)=>G(o,M(e));const{EPolygonPattern:c}=R,Q=({currentData:o})=>{const e=I(j),{changeSelectedBoxValid:r,selectNextBox:w,selectPrevBox:C,updateSelectedBox:p}=V(),{clearAllResult:m}=T(),y=K(o.result),{copySelectedBoxes:k,pasteSelectedBoxes:_,copiedBoxes:B}=L(),{toolInstanceRef:a}=D({basicInfo:y}),{updateRotate:d}=h({currentData:o}),{updatePointCloudData:f}=z(),g=(t,s)=>{const{topViewInstance:l,mainViewInstance:n}=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 b=i.pattern===c.Normal?c.Rect:c.Normal;i.setPattern(b);const O={[c.Normal]:"Normal Pattern",[c.Rect]:"Rect Pattern"};A.success(`Change Pattern to ${O[b]} successfully`),i.clearActiveStatus(),i.clearDrawingStatus()}break;case"+":n==null||n.updatePointSize(!0);break;case"-":n==null||n.updatePointSize(!1);break;case"v":e.setPointCloudValid(!e.valid);break;case"tab":if(s.shiftKey){C();break}w();break;case"f":r();break;default:return}},S=t=>{switch(t){case"c":k();break;case"v":_();break;case"a":e.selectedAllBoxes();break}},P=t=>{const s=t.key.toLocaleLowerCase();if(t.ctrlKey){S(s);return}g(s,t)};return u(()=>{const{topViewInstance:t}=e;if(!!t)return window.addEventListener("keydown",P),()=>{window.removeEventListener("keydown",P)}},[e,B]),u(()=>{f==null||f()},[o,e.mainViewInstance]),u(()=>{a.current.exportData=()=>[e.pointCloudBoxList,{valid:e.valid}],a.current.exportCustomData=()=>{var t;return{renderPolygon:(t=e.polygonList)!=null?t:[]}},a.current.setDefaultAttribute=t=>{const s=e.selectedPointCloudBox;s&&(s.attribute=t,p(s))},a.current.setSubAttribute=(t,s)=>{var l;const n=e.selectedPointCloudBox;if(n){const i=(l=n==null?void 0:n.subAttribute)!=null?l:{};n.subAttribute=J(H({},i),{[t]:s}),p(n)}},a.current.clearResult=()=>{m==null||m()}},[e.pointCloudBoxList,e.selectedID,e.valid,e.polygonList]),u(()=>{a.current.setValid=t=>{a.current.valid=t,setTimeout(()=>{e.setPointCloudValid(t)})}},[]),null};var U=E(N,null,null,{context:$})(Q);export{U 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 { IPointCloudBox, PointCloudUtils } from '@labelbee/lb-utils';\nimport { useCustomToolInstance } from '@/hooks/annotation';\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 { copySelectedBoxes, pasteSelectedBoxes, copiedBoxes } = useBoxes();\n const { toolInstanceRef } = useCustomToolInstance();\n const { updateRotate } = useRotate({ currentData });\n\n const keydownEvents = (lowerCaseKey: string) => {\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 'z':\n selectNextBox();\n break;\n\n case 'c':\n selectPrevBox();\n break;\n\n case 'f':\n changeSelectedBoxValid();\n break;\n\n default: {\n return;\n }\n }\n };\n\n const ctrlKeydownEvents = (lowerCaseKey: string) => {\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 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);\n return;\n }\n\n keydownEvents(lowerCaseKey);\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 const pointCloud = ptCtx.mainViewInstance;\n if (currentData?.url && pointCloud) {\n pointCloud.loadPCDFile(currentData.url);\n\n // Clear All Data\n ptCtx.pointCloudBoxList.forEach((v) => {\n pointCloud?.removeObjectByName(v.id);\n });\n\n if (currentData.result) {\n const boxParamsList = PointCloudUtils.getBoxParamsFromResultList(currentData.result);\n\n // Add Init Box\n boxParamsList.forEach((v: IPointCloudBox) => {\n pointCloud?.generateBox(v);\n });\n\n ptCtx.setPointCloudResult(boxParamsList);\n } else {\n ptCtx.setPointCloudResult([]);\n }\n\n pointCloud.updateTopCamera();\n\n // Clear other view data during initialization\n ptCtx.sideViewInstance?.clearAllData();\n ptCtx.backViewInstance?.clearAllData();\n }\n }, [currentData, ptCtx.mainViewInstance]);\n\n useEffect(() => {\n toolInstanceRef.current.exportData = () => {\n return [ptCtx.pointCloudBoxList, {}];\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 }, [ptCtx.pointCloudBoxList, ptCtx.selectedID]);\n\n return null;\n};\n\nexport default connect(aMapStateToProps)(PointCloudListener);\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 } 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';\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\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) => {\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 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);\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 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 }, []);\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 +1 @@
|
|
|
1
|
-
import{PointCloudAnnotation as h}from"@labelbee/lb-annotation";import{getClassName as
|
|
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 +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
|
|
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":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{getClassName as p}from"../../utils/dom.js";import{FooterDivider as
|
|
1
|
+
import{getClassName as p}from"../../utils/dom.js";import{FooterDivider as y}from"../../views/MainView/toolFooter/index.js";import{ZoomController as j}from"../../views/MainView/toolFooter/ZoomController/index.js";import{UpSquareOutlined as k,DownSquareOutlined as B}from"@ant-design/icons";import{PointCloudAnnotation as T,cTool as b}from"@labelbee/lb-annotation";import o,{useRef as N,useState as Z,useLayoutEffect as A,useEffect as w}from"react";import{PointCloudContext as R}from"./PointCloudContext.js";import{useRotate as z}from"./hooks/useRotate.js";import{useSingleBox as E}from"./hooks/useSingleBox.js";import{PointCloudContainer as L}from"./PointCloudLayout.js";import{BoxInfos as M,PointCloudValidity as F}from"./PointCloudInfos.js";import{usePolygon as X}from"./hooks/usePolygon.js";import{useZoom as S}from"./hooks/useZoom.js";import{Slider as Y}from"antd";import{aMapStateToProps as _}from"../../store/annotation/map.js";import{connect as q}from"react-redux";import{usePointCloudViews as U}from"./hooks/usePointCloudViews.js";import W from"../../hooks/useSize.js";import{useTranslation as D}from"react-i18next";import{LabelBeeContext as H}from"../../store/ctx.js";const{EPolygonPattern:$}=b,O=(i,s,e=1)=>{const{width:l,height:u}=s,c={x:i.x+l*e/2,y:i.y+u*e/2},d={x:s.width/2,y:s.height/2};return{offsetX:(d.x-c.x)/e,offsetY:-(d.y-c.y)/e}},G=({currentData:i})=>{const{zoom:s,zoomIn:e,zoomOut:l,initialPosition:u}=S(),{selectNextBox:c,selectPrevBox:d}=E(),{updateRotate:f}=z({currentData:i}),m=2,x=()=>{f(-m)},g=()=>{f(m)},a=()=>{f(180)};return o.createElement(o.Fragment,null,o.createElement("span",{onClick:g,className:p("point-cloud","rotate-reserve")}),o.createElement("span",{onClick:x,className:p("point-cloud","rotate")}),o.createElement("span",{onClick:a,className:p("point-cloud","rotate-180")}),o.createElement(y,null),o.createElement(k,{onClick:()=>{d()},className:p("point-cloud","prev")}),o.createElement(B,{onClick:()=>{c()},className:p("point-cloud","next")}),o.createElement(y,null),o.createElement(j,{initialPosition:u,zoomIn:e,zoomOut:l,zoom:s}))},J=({setZAxisLimit:i,zAxisLimit:s})=>o.createElement("div",{style:{position:"absolute",top:128,right:8,height:"50%",zIndex:20}},o.createElement(Y,{vertical:!0,step:.5,max:10,min:.5,defaultValue:s,onAfterChange:e=>{i(e)}})),K=({currentData:i})=>{const s=N(null),e=o.useContext(R),l=W(s),{setZoom:u}=S(),{addPolygon:c,deletePolygon:d}=X(),{deletePointCloudBox:f}=E(),[m,x]=Z(10),{t:g}=D(),a=U();return A(()=>{if(!e.topViewInstance&&s.current&&(i==null?void 0:i.url)&&(i==null?void 0:i.result)){const t={width:s.current.clientWidth,height:s.current.clientHeight},n=new T({container:s.current,size:t,pcdPath:i.url});e.setTopViewInstance(n)}},[i]),w(()=>{if(!l||!e.topViewInstance||!e.sideViewInstance)return;const{pointCloud2dOperation:t}=e.topViewInstance;t.singleOn("polygonCreated",n=>{if(t.pattern===$.Normal||!(i==null?void 0:i.url)){c(n);return}a.topViewAddBox(n,l)}),t.singleOn("deletedObject",({id:n})=>{f(n),d(n)}),t.singleOn("deleteSelectedIDs",()=>{e.setSelectedIDs([])}),t.singleOn("addSelectedIDs",n=>{e.addSelectedID(n)}),t.singleOn("setSelectedIDs",n=>{e.setSelectedIDs(n)}),t.singleOn("updatePolygonByDrag",({newPolygon:n})=>{var r;(r=a.topViewUpdateBox)==null||r.call(a,n,l)})},[e,l,i,a]),w(()=>{if(!(l==null?void 0:l.width)||!e.topViewInstance)return;e.topViewInstance.initSize(l),e.topViewInstance.updatePolygonList(e.pointCloudBoxList);const{topViewInstance:{pointCloudInstance:t,pointCloud2dOperation:n}}=e;n.singleOn("renderZoom",(r,C)=>{const{offsetX:h,offsetY:P}=O(C,l,r);if(t.camera.zoom=r,C){const{x:v,y:V,z:I}=t.initCameraPosition;t.camera.position.set(v+P,V-h,I)}t.camera.updateProjectionMatrix(),t.render(),u(r)}),n.singleOn("dragMove",({currentPos:r,zoom:C})=>{const{offsetX:h,offsetY:P}=O(r,l,C);t.camera.zoom=C;const{x:v,y:V,z:I}=t.initCameraPosition;t.camera.position.set(v+P,V-h,I),t.render()})},[l,e.topViewInstance]),w(()=>{var t,n;(n=(t=e.topViewInstance)==null?void 0:t.pointCloudInstance)==null||n.applyZAxisPoints(m)},[m]),w(()=>{a.topViewSelectedChanged()},[e.selectedIDs]),o.createElement(L,{className:p("point-cloud-container","top-view"),title:g("TopView"),toolbar:o.createElement(G,{currentData:i})},o.createElement("div",{style:{position:"relative",flex:1}},o.createElement("div",{style:{width:"100%",height:"100%"},ref:s}),o.createElement(M,null),o.createElement(J,{zAxisLimit:m,setZAxisLimit:x}),o.createElement(F,null)))};var Q=q(_,null,null,{context:H})(K);export{Q 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, PointCloud, PointCloudAnnotation } from '@labelbee/lb-annotation';\nimport React, { useEffect, 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 { Slider } from 'antd';\nimport { aMapStateToProps, IAnnotationStateProps } from '@/store/annotation/map';\nimport { connect } from 'react-redux';\nimport { usePointCloudViews } from './hooks/usePointCloudViews';\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 { selectNextBox, selectPrevBox } = useSingleBox();\n const { updateRotate } = useRotate({ currentData });\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 </>\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<IAnnotationStateProps> = ({ currentData }) => {\n const ref = useRef<HTMLDivElement>(null);\n const ptCtx = React.useContext(PointCloudContext);\n const pointCloudRef = useRef<PointCloud | null>();\n const { deletePointCloudBox } = useSingleBox();\n\n const [size, setSize] = useState<{ width: number; height: number } | null>(null);\n const [zAxisLimit, setZAxisLimit] = useState<number>(10);\n\n const pointCloudViews = usePointCloudViews();\n\n useEffect(() => {\n if (ref.current && currentData?.url && currentData?.result) {\n const size = {\n width: ref.current.clientWidth,\n height: ref.current.clientHeight,\n };\n\n if (ptCtx.topViewInstance) {\n /**\n * Listen to flip\n * 1. Init\n * 2. Reload PointCloud\n * 3. Clear Polygon\n */\n ptCtx.topViewInstance.updateData(currentData.url, currentData.result);\n return;\n }\n\n const pointCloudAnnotation = new PointCloudAnnotation({\n container: ref.current,\n size,\n pcdPath: currentData.url,\n });\n pointCloudAnnotation.addPolygonListOnTopView(currentData.result);\n\n ptCtx.setTopViewInstance(pointCloudAnnotation);\n\n const pointCloud = pointCloudAnnotation.pointCloudInstance;\n const polygonOperation = pointCloudAnnotation.pointCloud2dOperation;\n\n pointCloudRef.current = pointCloud;\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\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\n setSize(size);\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: any) => {\n if (TopView2dOperation.pattern === EPolygonPattern.Normal || !currentData?.url) {\n return;\n }\n\n pointCloudViews.topViewAddBox(polygon, size);\n });\n\n TopView2dOperation.singleOn('deletedObject', ({ id }) => {\n deletePointCloudBox(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 }, [ptCtx, size, currentData, pointCloudViews]);\n\n useEffect(() => {\n if (pointCloudRef.current) {\n pointCloudRef.current.applyZAxisPoints(zAxisLimit);\n }\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='俯视图'\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(aMapStateToProps)(PointCloudTopView);\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 { aMapStateToProps, 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<IAnnotationStateProps> = ({ currentData }) => {\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 } = 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 return;\n }\n\n pointCloudViews.topViewAddBox(polygon, size);\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 }, [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(aMapStateToProps, null, null, { context: LabelBeeContext })(\n PointCloudTopView,\n);\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import t from"react";import a from"../../../../assets/annotation/pointCloudTool/nodata.svg.js";import{getClassName as e}from"../../../../utils/dom.js";const o=()=>t.createElement("div",{className:e("point-cloud-container","empty-page")},t.createElement("img",{src:a}),t.createElement("span",{className:e("point-cloud-container","empty-page","text")},"\u6682\u65E0\u6570\u636E"));export{o as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../src/components/pointCloudView/components/EmptyPage/index.tsx"],"sourcesContent":["/**\n * @file EmptyPage\n * @createDate 2022-08-31\n * @author Ron <ron.f.luo@gmail.com>\n */\nimport React from 'react';\nimport NoDataSvg from '@/assets/annotation/pointCloudTool/nodata.svg';\nimport { getClassName } from '@/utils/dom';\n\nconst EmptyPage = () => {\n return (\n <div className={getClassName('point-cloud-container', 'empty-page')}>\n <img src={NoDataSvg} />\n <span className={getClassName('point-cloud-container', 'empty-page', 'text')}>暂无数据</span>\n </div>\n );\n};\n\nexport default EmptyPage;\n"],"names":["NoDataSvg"],"mappings":";;;;AASA,MAAM,YAAY,MAAM;AACtB,EAAA,2CACG,KAAD,EAAA;AAAA,IAAK,SAAA,EAAW,aAAa,uBAAyB,EAAA,YAAA,CAAA;AAAA,GAAA,sCACnD,KAAD,EAAA;AAAA,IAAK,GAAK,EAAAA,GAAA;AAAA,GAAA,CAAA,sCACT,MAAD,EAAA;AAAA,IAAM,SAAA,EAAW,YAAa,CAAA,uBAAA,EAAyB,YAAc,EAAA,MAAA,CAAA;AAAA,GAAS,EAAA,0BAAA,CAAA,CAAA,CAAA;AAAA;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{useContext as
|
|
1
|
+
import{useContext as C,useState as x,useMemo as f,useCallback as d}from"react";import P from"lodash";import{message as c}from"antd";import{usePointCloudViews as B}from"./usePointCloudViews.js";import{PointCloudContext as g}from"../PointCloudContext.js";import{useTranslation as y}from"react-i18next";const h=()=>{const{selectedIDs:s,pointCloudBoxList:e,setPointCloudResult:p}=C(g),[o,n]=x([]),{pointCloudBoxListUpdated:l}=B(),{t:r,i18n:u}=y(),i=f(()=>e.filter(t=>s.includes(t.id)),[s,e]),a=d(()=>{i.length>0?n(P.cloneDeep(i)):(n([]),c.error(r("CopyEmptyInPointCloud")))},[s,e,u.language]),m=d(()=>{if(o.length===0){c.error(r("PasteEmptyInPointCloud"));return}{const t=[...e,...o];p(t),l==null||l(t),n([])}},[o,e,u.language]);return{copySelectedBoxes:a,pasteSelectedBoxes:m,copiedBoxes:o,selectedBoxes:i}};export{h as useBoxes};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useBoxes.js","sources":["../../../../src/components/pointCloudView/hooks/useBoxes.
|
|
1
|
+
{"version":3,"file":"useBoxes.js","sources":["../../../../src/components/pointCloudView/hooks/useBoxes.ts"],"sourcesContent":["import { IPointCloudBoxList } from '@labelbee/lb-utils';\nimport { useCallback, useContext, useMemo, useState } from 'react';\nimport _ from 'lodash';\nimport { message } from 'antd';\nimport { usePointCloudViews } from './usePointCloudViews';\nimport { PointCloudContext } from '../PointCloudContext';\nimport { useTranslation } from 'react-i18next';\n\n/**\n * Actions for selected boxes\n */\nexport const useBoxes = () => {\n const { selectedIDs, pointCloudBoxList, setPointCloudResult } = useContext(PointCloudContext);\n const [copiedBoxes, setCopiedBoxes] = useState<IPointCloudBoxList>([]);\n const { pointCloudBoxListUpdated } = usePointCloudViews();\n const { t, i18n } = useTranslation();\n\n // const hasDuplicateID = (checkBoxList: IPointCloudBoxList) => {\n // return pointCloudBoxList.some((item) => {\n // return checkBoxList.some((i) => i.id === item.id);\n // });\n // };\n\n const selectedBoxes = useMemo(() => {\n return pointCloudBoxList.filter((i) => selectedIDs.includes(i.id));\n }, [selectedIDs, pointCloudBoxList]);\n\n const copySelectedBoxes = useCallback(() => {\n if (selectedBoxes.length > 0) {\n setCopiedBoxes(_.cloneDeep(selectedBoxes));\n } else {\n setCopiedBoxes([]);\n message.error(t('CopyEmptyInPointCloud'));\n }\n }, [selectedIDs, pointCloudBoxList, i18n.language]);\n\n const pasteSelectedBoxes = useCallback(() => {\n if (copiedBoxes.length === 0) {\n message.error(t('PasteEmptyInPointCloud'));\n return;\n }\n\n // const hasDuplicate = hasDuplicateID(copiedBoxes);\n const hasDuplicate = false; // Temporarily hide the duplicate check;\n\n if (hasDuplicate) {\n message.error(t('HasDuplicateID'));\n } else {\n /** Paste succeed and empty */\n const newPointCloudResult = [...pointCloudBoxList, ...copiedBoxes];\n\n setPointCloudResult(newPointCloudResult);\n pointCloudBoxListUpdated?.(newPointCloudResult);\n setCopiedBoxes([]);\n }\n }, [copiedBoxes, pointCloudBoxList, i18n.language]);\n\n return { copySelectedBoxes, pasteSelectedBoxes, copiedBoxes, selectedBoxes };\n};\n"],"names":[],"mappings":";;;;;;;AAWO,MAAM,WAAW,MAAM;AAC5B,EAAA,MAAM,CAAE,WAAA,EAAa,iBAAmB,EAAA,mBAAA,CAAA,GAAwB,UAAW,CAAA,iBAAA,CAAA,CAAA;AAC3E,EAAM,MAAA,CAAC,WAAa,EAAA,cAAA,CAAA,GAAkB,QAA6B,CAAA,EAAA,CAAA,CAAA;AACnE,EAAA,MAAM,CAAE,wBAA6B,CAAA,GAAA,kBAAA,EAAA,CAAA;AACrC,EAAM,MAAA,CAAE,GAAG,IAAS,CAAA,GAAA,cAAA,EAAA,CAAA;AAQpB,EAAM,MAAA,aAAA,GAAgB,QAAQ,MAAM;AAClC,IAAA,OAAO,kBAAkB,MAAO,CAAA,CAAC,CAAM,KAAA,WAAA,CAAY,SAAS,CAAE,CAAA,EAAA,CAAA,CAAA,CAAA;AAAA,GAAA,EAC7D,CAAC,WAAa,EAAA,iBAAA,CAAA,CAAA,CAAA;AAEjB,EAAM,MAAA,iBAAA,GAAoB,YAAY,MAAM;AAC1C,IAAI,IAAA,aAAA,CAAc,SAAS,CAAG,EAAA;AAC5B,MAAA,cAAA,CAAe,EAAE,SAAU,CAAA,aAAA,CAAA,CAAA,CAAA;AAAA,KACtB,MAAA;AACL,MAAe,cAAA,CAAA,EAAA,CAAA,CAAA;AACf,MAAA,OAAA,CAAQ,MAAM,CAAE,CAAA,uBAAA,CAAA,CAAA,CAAA;AAAA,KAAA;AAAA,GAEjB,EAAA,CAAC,WAAa,EAAA,iBAAA,EAAmB,IAAK,CAAA,QAAA,CAAA,CAAA,CAAA;AAEzC,EAAM,MAAA,kBAAA,GAAqB,YAAY,MAAM;AAC3C,IAAI,IAAA,WAAA,CAAY,WAAW,CAAG,EAAA;AAC5B,MAAA,OAAA,CAAQ,MAAM,CAAE,CAAA,wBAAA,CAAA,CAAA,CAAA;AAChB,MAAA,OAAA;AAAA,KAAA;AAMF,IAEO;AAEL,MAAA,MAAM,mBAAsB,GAAA,CAAC,GAAG,iBAAA,EAAmB,GAAG,WAAA,CAAA,CAAA;AAEtD,MAAoB,mBAAA,CAAA,mBAAA,CAAA,CAAA;AACpB,MAA2B,wBAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,wBAAA,CAAA,mBAAA,CAAA,CAAA;AAC3B,MAAe,cAAA,CAAA,EAAA,CAAA,CAAA;AAAA,KAAA;AAAA,GAEhB,EAAA,CAAC,WAAa,EAAA,iBAAA,EAAmB,IAAK,CAAA,QAAA,CAAA,CAAA,CAAA;AAEzC,EAAO,OAAA,CAAE,iBAAmB,EAAA,kBAAA,EAAoB,WAAa,EAAA,aAAA,CAAA,CAAA;AAAA;;;;"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { useSelector } from '../../../store/ctx.js';
|
|
2
|
+
import { jsonParser } from '../../../utils/index.js';
|
|
3
|
+
import StepUtils from '../../../utils/StepUtils.js';
|
|
4
|
+
|
|
5
|
+
const useConfig = () => {
|
|
6
|
+
const {config} = useSelector((state) => {
|
|
7
|
+
const {stepList, step, imgList, imgIndex} = state.annotation;
|
|
8
|
+
return {
|
|
9
|
+
currentData: imgList[imgIndex],
|
|
10
|
+
config: jsonParser(StepUtils.getCurrentStepInfo(step, stepList).config)
|
|
11
|
+
};
|
|
12
|
+
});
|
|
13
|
+
return {
|
|
14
|
+
config
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
export { useConfig };
|
|
19
|
+
//# sourceMappingURL=useConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useConfig.js","sources":["../../../../src/components/pointCloudView/hooks/useConfig.ts"],"sourcesContent":["import { AppState } from '@/store';\nimport { useSelector } from '@/store/ctx';\nimport { jsonParser } from '@/utils';\nimport StepUtils from '@/utils/StepUtils';\n\nexport const useConfig = () => {\n const { config } = useSelector((state: AppState) => {\n const { stepList, step, imgList, imgIndex } = state.annotation;\n\n return {\n currentData: imgList[imgIndex],\n config: jsonParser(StepUtils.getCurrentStepInfo(step, stepList).config),\n };\n });\n\n return {\n config\n }\n}\n"],"names":[],"mappings":";;;;AAKO,MAAM,YAAY,MAAM;AAC7B,EAAA,MAAM,CAAE,MAAA,CAAA,GAAY,WAAY,CAAA,CAAC,KAAoB,KAAA;AACnD,IAAA,MAAM,CAAE,QAAA,EAAU,IAAM,EAAA,OAAA,EAAS,YAAa,KAAM,CAAA,UAAA,CAAA;AAEpD,IAAO,OAAA;AAAA,MACL,aAAa,OAAQ,CAAA,QAAA,CAAA;AAAA,MACrB,MAAQ,EAAA,UAAA,CAAW,SAAU,CAAA,kBAAA,CAAmB,MAAM,QAAU,CAAA,CAAA,MAAA,CAAA;AAAA,KAAA,CAAA;AAAA,GAAA,CAAA,CAAA;AAIpE,EAAO,OAAA;AAAA,IACL,MAAA;AAAA,GAAA,CAAA;AAAA;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{MathUtils as
|
|
1
|
+
import{MathUtils as L}from"@labelbee/lb-annotation";import{EPerspectiveView as U,PointCloudUtils as T}from"@labelbee/lb-utils";import{useContext as $}from"react";import{PointCloudContext as tt}from"../PointCloudContext.js";import{useSingleBox as k}from"./useSingleBox.js";import ot from"lodash";import{useSelector as et,useDispatch as nt}from"../../../store/ctx.js";import it from"../../../utils/StepUtils.js";import{jsonParser as E}from"../../../utils/index.js";import{SetPointCloudLoading as F}from"../../../store/annotation/actionCreators.js";import{message as st}from"antd";import{useTranslation as rt}from"react-i18next";var lt=Object.defineProperty,dt=Object.defineProperties,at=Object.getOwnPropertyDescriptors,N=Object.getOwnPropertySymbols,ct=Object.prototype.hasOwnProperty,ut=Object.prototype.propertyIsEnumerable,Z=(e,o,n)=>o in e?lt(e,o,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[o]=n,M=(e,o)=>{for(var n in o||(o={}))ct.call(o,n)&&Z(e,n,o[n]);if(N)for(var n of N(o))ut.call(o,n)&&Z(e,n,o[n]);return e},pt=(e,o)=>dt(e,at(o)),mt=(e,o,n)=>new Promise((d,t)=>{var i=r=>{try{c(n.next(r))}catch(g){t(g)}},p=r=>{try{c(n.throw(r))}catch(g){t(g)}},c=r=>r.done?d(r.value):Promise.resolve(r.value).then(i,p);c((n=n.apply(e,o)).next())});const b=5,W=90,O={"3D":"3D",Top:"Top",Side:"Side",Back:"Back"},H=(e,o)=>{const{width:n,height:d}=o,{x:t,y:i}=e;return{x:-i+d/2,y:-(t-n/2)}},z=(e,o,n,d,t)=>{const[i,p,c,r]=e.pointList.map(h=>H(h,o)),g=L.getLineCenterPoint([i,c]),y=L.getLineLength(i,p),m=L.getLineLength(p,c),f=L.getRadiusFromQuadrangle(e.pointList);let B=0,v=1,_={};if(n){const h=n.getSensesPointZAxisInPolygon([i,p,c,r]);B=(h.maxZ+h.minZ)/2,v=h.maxZ-h.minZ,_={count:h.zCount}}d&&(B=d.center.z,v=d.depth);const P=M({center:{x:g.x,y:g.y,z:B},width:m,height:y,depth:v,rotation:f,id:e.id,attribute:"",valid:!0},_);return t&&Object.assign(P,t),P},ft=(e,o,n,d)=>{const[t,i,p]=e.pointList,[c,r,g]=o.pointList,y=L.getLineCenterPoint([t,p]),m=L.getLineCenterPoint([c,g]),f={x:y.x-m.x,y:y.y-m.y},B=Math.cos(n.rotation),v=Math.sin(n.rotation),_={x:f.x,y:f.x*v+f.y*B,z:y.y-m.y},P=L.getLineLength(t,i),h=L.getLineLength(c,r),V=P-h,j=L.getLineLength(i,p),A=L.getLineLength(r,g),S=j-A,{newBoxParams:R}=d.getNewBoxBySideUpdate(_,S,V,n);return R},G=(e,o,n,d)=>{if(!n)return;const{pointCloud2dOperation:t,pointCloudInstance:i}=n;i.loadPCDFileByBox(d,e,{width:b,depth:b});const{cameraPositionVector:p}=i.updateOrthoCamera(e,U.Left);i.setInitCameraPosition(p);const{polygon2d:c,zoom:r}=i.getBoxSidePolygon2DCoordinate(e);i.camera.zoom=r,i.camera.updateProjectionMatrix(),i.render(),t.initPosition(),t.zoomChangeOnCenter(r),t.setResultAndSelectedID([{id:o.id,pointList:c,textAttribute:"",isRect:!0}],o.id)},Q=(e,o,n,d)=>{if(!n)return;const{pointCloud2dOperation:t,pointCloudInstance:i}=n;i.loadPCDFileByBox(d,e,{height:b,depth:b});const{cameraPositionVector:p}=i.updateOrthoCamera(e,U.Back);i.setInitCameraPosition(p);const{polygon2d:c,zoom:r}=i.getBoxBackPolygon2DCoordinate(e);i.camera.zoom=r,i.camera.updateProjectionMatrix(),i.render(),t.initPosition(),t.zoomChangeOnCenter(r),t.setResultAndSelectedID([{id:o.id,pointList:c,textAttribute:"",isRect:!0}],o.id)},q=(e,o,n,d)=>{if(!n||!d)return;d.generateBox(e,o.id),d.updateCameraByBox(e,U.Top),d.render();const{pointCloud2dOperation:t,pointCloudInstance:i}=n,{polygon2d:p}=i.getBoxTopPolygon2DCoordinate(e),c=[...t.polygonList],r=c.find(g=>g.id===o.id);r?r.pointList=p:c.push({id:o.id,pointList:p,textAttribute:"",isRect:!0}),t.setResultAndSelectedID(c,o.id)},gt=()=>{const e=$(tt),{topViewInstance:o,sideViewInstance:n,backViewInstance:d,mainViewInstance:t,addPointCloudBox:i,setSelectedIDs:p,selectedIDs:c,pointCloudBoxList:r,setPointCloudResult:g}=e,{updateSelectedBox:y}=k(),{currentData:m,config:f}=et(s=>{const{stepList:l,step:u,imgList:a,imgIndex:C}=s.annotation;return{currentData:a[C],config:E(it.getCurrentStepInfo(u,l).config)}}),B=nt(),{selectedBox:v}=k(),{t:_}=rt(),P=v==null?void 0:v.info;if(!o||!n)return{topViewAddBox:()=>{},topViewSelectedChanged:()=>{},sideViewUpdateBox:()=>{}};const{pointCloudInstance:h}=o,V=s=>{t==null||t.generateBox(s),t==null||t.controls.update(),t==null||t.render()},j=(s,l)=>{var u,a,C;const x=z(s,l,h,void 0,{attribute:(C=(a=(u=f==null?void 0:f.attributeList)==null?void 0:u[0])==null?void 0:a.value)!=null?C:""}),I=o==null?void 0:o.pointCloud2dOperation,w=x;if((f==null?void 0:f.lowerLimitPointsNumInBox)&&typeof x.count=="number"&&x.count<f.lowerLimitPointsNumInBox){st.info(_("LowerLimitPointsNumInBox",{num:f.lowerLimitPointsNumInBox})),I.deletePolygon(x.id);return}I.setSelectedIDs([s.id]),p(w.id),D(O.Top,s,w),i(w)},A=()=>{const s=v==null?void 0:v.info,l=o==null?void 0:o.pointCloud2dOperation;if(l.setSelectedIDs(c),!s||!l)return;const u=l.selectedPolygon;D(O.Top,u,s)},S=(s,l,u)=>{if(P){let a=ft(s,l,P,n.pointCloudInstance);if(t){const{count:C}=t.getSensesPointZAxisInPolygon(t.getCuboidFromPointCloudBox(a).polygonPointList,[a.center.z-a.depth/2,a.center.z+a.depth/2]);a=pt(M({},a),{count:C})}y(a),D(u,s,a)}},R=(s,l)=>{S(s,l,O.Side)},J=(s,l)=>{S(s,l,O.Back)},K=(s,l)=>{if(P){const u=z(s,l,o.pointCloudInstance,P);Object.assign(P,ot.pickBy(u,(a,C)=>["width","height","x","y"])),y(u),D(O.Top,s,P)}},D=(s,l,u)=>{const a=m==null?void 0:m.url,C={[O.Side]:()=>{G(u,l,n,a)},[O.Back]:()=>{d&&Q(u,l,d,a)},[O.Top]:()=>{q(u,l,o,t)}};Object.keys(C).forEach(x=>{x!==s&&C[x]()}),V(u),t==null||t.highlightOriginPointCloud(u)};return{topViewAddBox:j,topViewSelectedChanged:A,topViewUpdateBox:K,sideViewUpdateBox:R,backViewUpdateBox:J,pointCloudBoxListUpdated:s=>{o.updatePolygonList(s),t==null||t.generateBoxes(s)},clearAllResult:()=>{r.forEach(s=>{t==null||t.removeObjectByName(s.id)}),t==null||t.render(),g([]),o.pointCloud2dOperation.clearActiveStatus(),o.pointCloud2dOperation.clearResult()},initPointCloud3d:()=>{!t||(t.initPerspectiveCamera(),t.initRenderer(),t.render())},updatePointCloudData:()=>mt(void 0,null,function*(){var s,l,u,a,C,x;if(!(m==null?void 0:m.url)||!t)return;if(F(B,!0),yield t.loadPCDFile(m.url,(s=f==null?void 0:f.radius)!=null?s:W),r.forEach(w=>{t==null||t.removeObjectByName(w.id)}),m.result){const w=T.getBoxParamsFromResultList(m.result),X=T.getPolygonListFromResultList(m.result);w.forEach(Y=>{t==null||t.generateBox(Y)}),e.setPointCloudResult(w),e.setPolygonList(X)}else e.setPointCloudResult([]),e.setPolygonList([]);t.updateTopCamera();const I=(u=(l=E(m.result))==null?void 0:l.valid)!=null?u:!0;e.setPointCloudValid(I),(a=e.sideViewInstance)==null||a.clearAllData(),(C=e.backViewInstance)==null||C.clearAllData(),o.updateData(m.url,m.result,{radius:(x=f==null?void 0:f.radius)!=null?x:W}),F(B,!1)})}};export{Q as synchronizeBackView,G as synchronizeSideView,q as synchronizeTopView,z as topViewPolygon2PointCloud,H as transferCanvas2World,gt as usePointCloudViews};
|