@labelbee/lb-components 1.7.0-alpha.2 → 1.7.0-alpha.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/dist/assets/annotation/pointCloudTool/unitAttribute.svg.js +1 -0
  2. package/dist/assets/annotation/pointCloudTool/unitAttributeForbid.svg.js +1 -0
  3. package/dist/assets/annotation/pointCloudTool/unitAttributeHover.svg.js +1 -0
  4. package/dist/components/pointCloudView/PointCloud2DView.js +1 -1
  5. package/dist/components/pointCloudView/PointCloudBackView.js +1 -1
  6. package/dist/components/pointCloudView/components/UnifyParamsModal/index.js +1 -0
  7. package/dist/components/pointCloudView/hooks/usePointCloudViews.js +1 -1
  8. package/dist/constant/index.js +1 -1
  9. package/dist/store/Actions.js +1 -1
  10. package/dist/store/annotation/actionCreators.js +1 -1
  11. package/dist/store/annotation/reducer.js +1 -1
  12. package/dist/types/components/pointCloudView/components/UnifyParamsModal/index.d.ts +12 -0
  13. package/dist/types/constant/index.d.ts +2 -1
  14. package/dist/types/store/Actions.d.ts +1 -0
  15. package/dist/types/store/annotation/actionCreators.d.ts +3 -0
  16. package/dist/types/store/annotation/types.d.ts +10 -1
  17. package/dist/types/views/MainView/sidebar/GeneralOperation/ActionsConfirm.d.ts +3 -1
  18. package/dist/views/MainView/sidebar/GeneralOperation/ActionsConfirm.js +1 -1
  19. package/dist/views/MainView/sidebar/GeneralOperation/index.js +1 -1
  20. package/dist/views/MainView/sidebar/PointCloudToolSidebar/components/batchUpdateModal/index.js +1 -1
  21. package/dist/views/MainView/sidebar/PointCloudToolSidebar/index.js +1 -1
  22. package/dist/views/MainView/toolFooter/FooterTips/ToolHotKey/index.js +1 -1
  23. package/es/assets/annotation/pointCloudTool/unitAttribute.svg.js +1 -0
  24. package/es/assets/annotation/pointCloudTool/unitAttribute.svg.js.map +1 -0
  25. package/es/assets/annotation/pointCloudTool/unitAttributeForbid.svg.js +1 -0
  26. package/es/assets/annotation/pointCloudTool/unitAttributeForbid.svg.js.map +1 -0
  27. package/es/assets/annotation/pointCloudTool/unitAttributeHover.svg.js +1 -0
  28. package/es/assets/annotation/pointCloudTool/unitAttributeHover.svg.js.map +1 -0
  29. package/es/components/pointCloudView/PointCloud2DView.js +1 -1
  30. package/es/components/pointCloudView/PointCloud2DView.js.map +1 -1
  31. package/es/components/pointCloudView/PointCloudBackView.js +1 -1
  32. package/es/components/pointCloudView/PointCloudBackView.js.map +1 -1
  33. package/es/components/pointCloudView/components/UnifiedParamsModal/index.js +228 -0
  34. package/es/components/pointCloudView/components/UnifiedParamsModal/index.js.map +1 -0
  35. package/es/components/pointCloudView/components/UnifyParamsModal/index.js +1 -0
  36. package/es/components/pointCloudView/components/UnifyParamsModal/index.js.map +1 -0
  37. package/es/components/pointCloudView/hooks/usePointCloudViews.js +1 -1
  38. package/es/components/pointCloudView/hooks/usePointCloudViews.js.map +1 -1
  39. package/es/constant/index.js +1 -1
  40. package/es/constant/index.js.map +1 -1
  41. package/es/store/Actions.js +1 -1
  42. package/es/store/Actions.js.map +1 -1
  43. package/es/store/annotation/actionCreators.js +1 -1
  44. package/es/store/annotation/actionCreators.js.map +1 -1
  45. package/es/store/annotation/reducer.js +1 -1
  46. package/es/store/annotation/reducer.js.map +1 -1
  47. package/es/views/MainView/sidebar/GeneralOperation/ActionsConfirm.js +1 -1
  48. package/es/views/MainView/sidebar/GeneralOperation/ActionsConfirm.js.map +1 -1
  49. package/es/views/MainView/sidebar/GeneralOperation/index.js +1 -1
  50. package/es/views/MainView/sidebar/GeneralOperation/index.js.map +1 -1
  51. package/es/views/MainView/sidebar/PointCloudToolSidebar/components/batchUpdateModal/index.js +1 -1
  52. package/es/views/MainView/sidebar/PointCloudToolSidebar/components/batchUpdateModal/index.js.map +1 -1
  53. package/es/views/MainView/sidebar/PointCloudToolSidebar/index.js +1 -1
  54. package/es/views/MainView/sidebar/PointCloudToolSidebar/index.js.map +1 -1
  55. package/es/views/MainView/toolFooter/FooterTips/ToolHotKey/index.js +1 -1
  56. package/es/views/MainView/toolFooter/FooterTips/ToolHotKey/index.js.map +1 -1
  57. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"PointCloud2DView.js","sources":["../../../src/components/pointCloudView/PointCloud2DView.tsx"],"sourcesContent":["import { getClassName } from '@/utils/dom';\nimport React, { useCallback, useContext, useEffect, useRef, useState } from 'react';\nimport { PointCloudContainer } from './PointCloudLayout';\nimport AnnotationView from '@/components/AnnotationView';\nimport { PointCloudContext } from './PointCloudContext';\nimport { connect } from 'react-redux';\nimport { LeftOutlined, RightOutlined } from '@ant-design/icons';\nimport useSize from '@/hooks/useSize';\nimport { useSingleBox } from './hooks/useSingleBox';\nimport { ViewOperation } from '@labelbee/lb-annotation';\nimport { useTranslation } from 'react-i18next';\nimport { LabelBeeContext } from '@/store/ctx';\nimport { a2MapStateToProps, IA2MapStateProps } from '@/store/annotation/map';\nimport { toolStyleConverter } from '@labelbee/lb-utils';\n\nconst Toolbar = ({\n onNext,\n onPrev,\n imgLength,\n imgIndex,\n}: {\n onNext: () => void;\n onPrev: () => void;\n imgLength: number;\n imgIndex: number;\n}) => {\n return (\n <div>\n <LeftOutlined onClick={onPrev} />\n <span>\n {' '}\n {imgIndex + 1} / {imgLength}{' '}\n </span>\n\n <RightOutlined onClick={onNext} />\n </div>\n );\n};\n\n// TODO, It will be deleted when the exported type of lb-annotation is work.\ninterface IAnnotationDataTemporarily {\n type: string;\n annotation: any;\n}\n\nconst PointCloud2DView = ({ currentData, config }: IA2MapStateProps) => {\n const [annotations2d, setAnnotations2d] = useState<IAnnotationDataTemporarily[]>([]);\n const { pointCloudBoxList, topViewInstance } = useContext(PointCloudContext);\n const [mappingIndex, setMappingIndex] = useState(0);\n const ref = useRef(null);\n const viewRef = useRef<{ toolInstance: ViewOperation }>();\n const { selectedBox } = useSingleBox();\n const size = useSize(ref);\n const { t } = useTranslation();\n\n const mappingData = currentData?.mappingImgList?.[mappingIndex];\n\n useEffect(() => {\n setMappingIndex(0);\n }, [currentData]);\n\n useEffect(() => {\n if (topViewInstance && mappingData) {\n const { pointCloudInstance } = topViewInstance;\n const defaultViewStyle = {\n fill: 'transparent',\n color: 'green',\n };\n\n const newAnnotations2d: IAnnotationDataTemporarily[] = pointCloudBoxList.reduce(\n (acc: IAnnotationDataTemporarily[], pointCloudBox) => {\n const viewDataPointList = pointCloudInstance.pointCloudLidar2image(\n pointCloudBox,\n mappingData.calib,\n );\n\n const stroke = toolStyleConverter.getColorFromConfig(\n { attribute: pointCloudBox.attribute },\n {\n ...config,\n attributeConfigurable: true,\n },\n {},\n )?.stroke;\n\n return [\n ...acc,\n ...viewDataPointList.map((v: any) => {\n return {\n type: v.type,\n annotation: {\n id: pointCloudBox.id,\n pointList: v.pointList,\n ...defaultViewStyle,\n stroke,\n },\n };\n }),\n ];\n },\n [],\n );\n\n setAnnotations2d(newAnnotations2d);\n }\n }, [pointCloudBoxList, mappingData]);\n\n const hiddenData =\n !currentData || !currentData?.mappingImgList || !(currentData?.mappingImgList?.length > 0);\n\n const afterImgOnLoad = useCallback(() => {\n const toolInstance = viewRef.current?.toolInstance;\n\n if (!selectedBox || !toolInstance) {\n return;\n }\n const selected2data = annotations2d.find((v) => v.annotation.id === selectedBox.info.id);\n\n if (selected2data?.annotation.pointList?.length > 0) {\n toolInstance.focusPositionByPointList(selected2data?.annotation.pointList);\n }\n }, [selectedBox, viewRef.current, annotations2d, mappingIndex]);\n\n /**\n * If the status is updated, it needs to\n */\n useEffect(() => {\n afterImgOnLoad();\n }, [afterImgOnLoad]);\n\n return (\n <PointCloudContainer\n className={getClassName('point-cloud-2d-container')}\n title={t('2DView')}\n toolbar={\n hiddenData ? undefined : (\n <Toolbar\n imgIndex={mappingIndex}\n imgLength={currentData.mappingImgList?.length ?? 0}\n onNext={() => {\n if (!currentData || !currentData?.mappingImgList) {\n return;\n }\n\n if (mappingIndex >= currentData?.mappingImgList?.length - 1) {\n return;\n }\n setMappingIndex((v) => v + 1);\n }}\n onPrev={() => {\n if (mappingIndex <= 0) {\n return;\n }\n setMappingIndex((v) => v - 1);\n }}\n />\n )\n }\n style={{ display: hiddenData ? 'none' : 'flex' }}\n >\n <div className={getClassName('point-cloud-2d-image')} ref={ref}>\n <AnnotationView\n src={mappingData?.url ?? ''}\n annotations={annotations2d}\n size={size}\n ref={viewRef}\n globalStyle={{ display: hiddenData ? 'none' : 'block' }}\n afterImgOnLoad={afterImgOnLoad}\n />\n </div>\n </PointCloudContainer>\n );\n};\n\nexport default connect(a2MapStateToProps, null, null, { context: LabelBeeContext })(\n PointCloud2DView,\n);\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PointCloud2DView.js","sources":["../../../src/components/pointCloudView/PointCloud2DView.tsx"],"sourcesContent":["import { getClassName } from '@/utils/dom';\nimport React, { useCallback, useContext, useEffect, useRef, useState } from 'react';\nimport { PointCloudContainer } from './PointCloudLayout';\nimport AnnotationView from '@/components/AnnotationView';\nimport { PointCloudContext } from './PointCloudContext';\nimport { connect } from 'react-redux';\nimport { LeftOutlined, RightOutlined } from '@ant-design/icons';\nimport useSize from '@/hooks/useSize';\nimport { useSingleBox } from './hooks/useSingleBox';\nimport { ViewOperation, pointCloudLidar2image } from '@labelbee/lb-annotation';\nimport { useTranslation } from 'react-i18next';\nimport { LabelBeeContext } from '@/store/ctx';\nimport { a2MapStateToProps, IA2MapStateProps } from '@/store/annotation/map';\nimport { toolStyleConverter } from '@labelbee/lb-utils';\n\nconst Toolbar = ({\n onNext,\n onPrev,\n imgLength,\n imgIndex,\n}: {\n onNext: () => void;\n onPrev: () => void;\n imgLength: number;\n imgIndex: number;\n}) => {\n return (\n <div>\n <LeftOutlined onClick={onPrev} />\n <span>\n {' '}\n {imgIndex + 1} / {imgLength}{' '}\n </span>\n\n <RightOutlined onClick={onNext} />\n </div>\n );\n};\n\n// TODO, It will be deleted when the exported type of lb-annotation is work.\ninterface IAnnotationDataTemporarily {\n type: string;\n annotation: any;\n}\n\nconst PointCloud2DView = ({ currentData, config }: IA2MapStateProps) => {\n const [annotations2d, setAnnotations2d] = useState<IAnnotationDataTemporarily[]>([]);\n const { pointCloudBoxList, topViewInstance } = useContext(PointCloudContext);\n const [mappingIndex, setMappingIndex] = useState(0);\n const ref = useRef(null);\n const viewRef = useRef<{ toolInstance: ViewOperation }>();\n const { selectedBox } = useSingleBox();\n const size = useSize(ref);\n const { t } = useTranslation();\n\n const mappingData = currentData?.mappingImgList?.[mappingIndex];\n\n useEffect(() => {\n setMappingIndex(0);\n }, [currentData]);\n\n useEffect(() => {\n if (topViewInstance && mappingData) {\n const defaultViewStyle = {\n fill: 'transparent',\n color: 'green',\n };\n\n const newAnnotations2d: IAnnotationDataTemporarily[] = pointCloudBoxList.reduce(\n (acc: IAnnotationDataTemporarily[], pointCloudBox) => {\n const viewDataPointList = pointCloudLidar2image(pointCloudBox, mappingData.calib);\n\n const stroke = toolStyleConverter.getColorFromConfig(\n { attribute: pointCloudBox.attribute },\n {\n ...config,\n attributeConfigurable: true,\n },\n {},\n )?.stroke;\n\n return [\n ...acc,\n ...viewDataPointList.map((v: any) => {\n return {\n type: v.type,\n annotation: {\n id: pointCloudBox.id,\n pointList: v.pointList,\n ...defaultViewStyle,\n stroke,\n },\n };\n }),\n ];\n },\n [],\n );\n\n setAnnotations2d(newAnnotations2d);\n }\n }, [pointCloudBoxList, mappingData]);\n\n const hiddenData =\n !currentData || !currentData?.mappingImgList || !(currentData?.mappingImgList?.length > 0);\n\n const afterImgOnLoad = useCallback(() => {\n const toolInstance = viewRef.current?.toolInstance;\n\n if (!selectedBox || !toolInstance) {\n return;\n }\n const selected2data = annotations2d.find((v) => v.annotation.id === selectedBox.info.id);\n\n if (selected2data?.annotation.pointList?.length > 0) {\n toolInstance.focusPositionByPointList(selected2data?.annotation.pointList);\n }\n }, [selectedBox, viewRef.current, annotations2d, mappingIndex]);\n\n /**\n * If the status is updated, it needs to\n */\n useEffect(() => {\n afterImgOnLoad();\n }, [afterImgOnLoad]);\n\n return (\n <PointCloudContainer\n className={getClassName('point-cloud-2d-container')}\n title={t('2DView')}\n toolbar={\n hiddenData ? undefined : (\n <Toolbar\n imgIndex={mappingIndex}\n imgLength={currentData.mappingImgList?.length ?? 0}\n onNext={() => {\n if (!currentData || !currentData?.mappingImgList) {\n return;\n }\n\n if (mappingIndex >= currentData?.mappingImgList?.length - 1) {\n return;\n }\n setMappingIndex((v) => v + 1);\n }}\n onPrev={() => {\n if (mappingIndex <= 0) {\n return;\n }\n setMappingIndex((v) => v - 1);\n }}\n />\n )\n }\n style={{ display: hiddenData ? 'none' : 'flex' }}\n >\n <div className={getClassName('point-cloud-2d-image')} ref={ref}>\n <AnnotationView\n src={mappingData?.url ?? ''}\n annotations={annotations2d}\n size={size}\n ref={viewRef}\n globalStyle={{ display: hiddenData ? 'none' : 'block' }}\n afterImgOnLoad={afterImgOnLoad}\n />\n </div>\n </PointCloudContainer>\n );\n};\n\nexport default connect(a2MapStateToProps, null, null, { context: LabelBeeContext })(\n PointCloud2DView,\n);\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- import{PointCloudAnnotation as M,MathUtils as f}from"@labelbee/lb-annotation";import{getClassName as x}from"../../utils/dom.js";import{PointCloudContainer as X}from"./PointCloudLayout.js";import u,{useRef as A,useEffect as C}from"react";import{PointCloudContext as D}from"./PointCloudContext.js";import{useSingleBox as T}from"./hooks/useSingleBox.js";import{EPerspectiveView as W}from"@labelbee/lb-utils";import{SizeInfoForView as H}from"./PointCloudInfos.js";import{connect as Y}from"react-redux";import{a2MapStateToProps as F}from"../../store/annotation/map.js";import{synchronizeTopView as R,synchronizeSideView as U}from"./hooks/usePointCloudViews.js";import Z from"../../hooks/useSize.js";import q from"./components/EmptyPage/index.js";import{useTranslation as G}from"react-i18next";import{LabelBeeContext as J}from"../../store/ctx.js";var K=Object.defineProperty,Q=Object.defineProperties,$=Object.getOwnPropertyDescriptors,O=Object.getOwnPropertySymbols,ee=Object.prototype.hasOwnProperty,te=Object.prototype.propertyIsEnumerable,_=(o,t,e)=>t in o?K(o,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[t]=e,oe=(o,t)=>{for(var e in t||(t={}))ee.call(t,e)&&_(o,e,t[e]);if(O)for(var e of O(t))te.call(t,e)&&_(o,e,t[e]);return o},ne=(o,t)=>Q(o,$(t));const ie=(o,t,e=1)=>{const{width:i,height:n}=t,c={x:o.x+i*e/2,y:o.y+n*e/2},d={x:t.width/2,y:t.height/2};return{offsetX:(d.x-c.x)/e,offsetY:-(d.y-c.y)/e}},I=(o,t,e,i,n)=>{const{offsetX:c,offsetY:d}=ie(o,e,t);if(n.camera.zoom=t,o){const g=Math.cos(i.rotation),s=Math.sin(i.rotation),l=c*g,a=c*s,{x:p,y:m,z:P}=n.initCameraPosition;n.camera.position.set(p+a,m-l,P+d)}n.camera.updateProjectionMatrix(),n.render()},re=({currentData:o,config:t})=>{const e=u.useContext(D),i=A(null),n=Z(i),{updateSelectedBox:c,selectedBox:d}=T(),{t:g}=G();return C(()=>{if(i.current){const s={width:i.current.clientWidth,height:i.current.clientHeight},l=new M({container:i.current,size:s,polygonOperationProps:{showDirectionLine:!1,forbidAddNew:!0},config:t});e.setBackViewInstance(l)}},[]),C(()=>{if(!n||!e.backViewInstance)return;const{pointCloud2dOperation:s,pointCloudInstance:l}=e.backViewInstance;s.singleOn("renderZoom",(a,p)=>{!e.selectedPointCloudBox||I(p,a,n,e.selectedPointCloudBox,l)}),s.singleOn("dragMove",({currentPos:a,zoom:p})=>{!e.selectedPointCloudBox||I(a,p,n,e.selectedPointCloudBox,l)}),s.singleOn("updatePolygonByDrag",({newPolygon:a,originPolygon:p})=>{if(!e.selectedPointCloudBox||!e.mainViewInstance||!o.url)return;const[m,P,y]=a.pointList,[v,V,B]=p.pointList,w=f.getLineCenterPoint([m,y]),h=f.getLineCenterPoint([v,B]),b={x:{x:w.x-h.x,y:w.y-h.y}.x,y:0,z:w.y-h.y},L=f.getLineLength(m,P),j=f.getLineLength(v,V),S=L-j,E=f.getLineLength(P,y),k=f.getLineLength(V,B),z=E-k;let{newBoxParams:r}=l.getNewBoxByBackUpdate(b,z,S,e.selectedPointCloudBox);if(e.mainViewInstance){const{count:N}=e.mainViewInstance.getSensesPointZAxisInPolygon(e.mainViewInstance.getCuboidFromPointCloudBox(r).polygonPointList,[r.center.z-r.depth/2,r.center.z+r.depth/2]);r=ne(oe({},r),{count:N})}R(r,a,e.topViewInstance,e.mainViewInstance),U(r,a,e.sideViewInstance,o.url),e.mainViewInstance.highlightOriginPointCloud(r),c(r)})},[e,n]),C(()=>{var s;(s=e==null?void 0:e.backViewInstance)==null||s.initSize(n)},[n]),u.createElement(X,{className:x("point-cloud-container","back-view"),title:g("BackView"),toolbar:u.createElement(H,{perspectiveView:W.Back})},u.createElement("div",{className:x("point-cloud-container","bottom-view-content")},u.createElement("div",{className:x("point-cloud-container","core-instance"),ref:i}),!d&&u.createElement(q,null)))};var se=Y(F,null,null,{context:J})(re);export{se as default};
1
+ import{PointCloudAnnotation as M,MathUtils as f,getCuboidFromPointCloudBox as X}from"@labelbee/lb-annotation";import{getClassName as x}from"../../utils/dom.js";import{PointCloudContainer as A}from"./PointCloudLayout.js";import u,{useRef as D,useEffect as C}from"react";import{PointCloudContext as T}from"./PointCloudContext.js";import{useSingleBox as W}from"./hooks/useSingleBox.js";import{EPerspectiveView as H}from"@labelbee/lb-utils";import{SizeInfoForView as Y}from"./PointCloudInfos.js";import{connect as F}from"react-redux";import{a2MapStateToProps as R}from"../../store/annotation/map.js";import{synchronizeTopView as U,synchronizeSideView as Z}from"./hooks/usePointCloudViews.js";import q from"../../hooks/useSize.js";import G from"./components/EmptyPage/index.js";import{useTranslation as J}from"react-i18next";import{LabelBeeContext as K}from"../../store/ctx.js";var Q=Object.defineProperty,$=Object.defineProperties,ee=Object.getOwnPropertyDescriptors,O=Object.getOwnPropertySymbols,te=Object.prototype.hasOwnProperty,oe=Object.prototype.propertyIsEnumerable,_=(o,t,e)=>t in o?Q(o,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[t]=e,ne=(o,t)=>{for(var e in t||(t={}))te.call(t,e)&&_(o,e,t[e]);if(O)for(var e of O(t))oe.call(t,e)&&_(o,e,t[e]);return o},ie=(o,t)=>$(o,ee(t));const re=(o,t,e=1)=>{const{width:i,height:n}=t,c={x:o.x+i*e/2,y:o.y+n*e/2},d={x:t.width/2,y:t.height/2};return{offsetX:(d.x-c.x)/e,offsetY:-(d.y-c.y)/e}},b=(o,t,e,i,n)=>{const{offsetX:c,offsetY:d}=re(o,e,t);if(n.camera.zoom=t,o){const g=Math.cos(i.rotation),s=Math.sin(i.rotation),l=c*g,a=c*s,{x:p,y:m,z:P}=n.initCameraPosition;n.camera.position.set(p+a,m-l,P+d)}n.camera.updateProjectionMatrix(),n.render()},se=({currentData:o,config:t})=>{const e=u.useContext(T),i=D(null),n=q(i),{updateSelectedBox:c,selectedBox:d}=W(),{t:g}=J();return C(()=>{if(i.current){const s={width:i.current.clientWidth,height:i.current.clientHeight},l=new M({container:i.current,size:s,polygonOperationProps:{showDirectionLine:!1,forbidAddNew:!0},config:t});e.setBackViewInstance(l)}},[]),C(()=>{if(!n||!e.backViewInstance)return;const{pointCloud2dOperation:s,pointCloudInstance:l}=e.backViewInstance;s.singleOn("renderZoom",(a,p)=>{!e.selectedPointCloudBox||b(p,a,n,e.selectedPointCloudBox,l)}),s.singleOn("dragMove",({currentPos:a,zoom:p})=>{!e.selectedPointCloudBox||b(a,p,n,e.selectedPointCloudBox,l)}),s.singleOn("updatePolygonByDrag",({newPolygon:a,originPolygon:p})=>{if(!e.selectedPointCloudBox||!e.mainViewInstance||!o.url)return;const[m,P,y]=a.pointList,[v,B,V]=p.pointList,w=f.getLineCenterPoint([m,y]),h=f.getLineCenterPoint([v,V]),I={x:{x:w.x-h.x,y:w.y-h.y}.x,y:0,z:w.y-h.y},L=f.getLineLength(m,P),j=f.getLineLength(v,B),S=L-j,E=f.getLineLength(P,y),k=f.getLineLength(B,V),z=E-k;let{newBoxParams:r}=l.getNewBoxByBackUpdate(I,z,S,e.selectedPointCloudBox);if(e.mainViewInstance){const{count:N}=e.mainViewInstance.getSensesPointZAxisInPolygon(X(r).polygonPointList,[r.center.z-r.depth/2,r.center.z+r.depth/2]);r=ie(ne({},r),{count:N})}U(r,a,e.topViewInstance,e.mainViewInstance),Z(r,a,e.sideViewInstance,o.url),e.mainViewInstance.highlightOriginPointCloud(r),c(r)})},[e,n]),C(()=>{var s;(s=e==null?void 0:e.backViewInstance)==null||s.initSize(n)},[n]),u.createElement(A,{className:x("point-cloud-container","back-view"),title:g("BackView"),toolbar:u.createElement(Y,{perspectiveView:H.Back})},u.createElement("div",{className:x("point-cloud-container","bottom-view-content")},u.createElement("div",{className:x("point-cloud-container","core-instance"),ref:i}),!d&&u.createElement(G,null)))};var ae=F(R,null,null,{context:K})(se);export{ae as default};
@@ -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 { 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 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(a2MapStateToProps, 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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"}
@@ -0,0 +1,228 @@
1
+ import { ESubmitType } from '../../../../constant/index.js';
2
+ import { ToSubmitFileData, BatchUpdateResultByTrackID } from '../../../../store/annotation/actionCreators.js';
3
+ import { LabelBeeContext, useDispatch } from '../../../../store/ctx.js';
4
+ import { Form, Modal, InputNumber, Select, Popover, message } from 'antd';
5
+ import React, { useState, useEffect, useCallback } from 'react';
6
+ import { useTranslation } from 'react-i18next';
7
+ import { QuestionCircleOutlined } from '@ant-design/icons';
8
+ import { PointCloudUtils } from '@labelbee/lb-utils';
9
+ import { connect } from 'react-redux';
10
+ import { useSingleBox } from '../../hooks/useSingleBox.js';
11
+ import { MathUtils } from '@labelbee/lb-annotation';
12
+
13
+ var __defProp = Object.defineProperty;
14
+ var __defProps = Object.defineProperties;
15
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
16
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
17
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
18
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
19
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, {enumerable: true, configurable: true, writable: true, value}) : obj[key] = value;
20
+ var __spreadValues = (a, b) => {
21
+ for (var prop in b || (b = {}))
22
+ if (__hasOwnProp.call(b, prop))
23
+ __defNormalProp(a, prop, b[prop]);
24
+ if (__getOwnPropSymbols)
25
+ for (var prop of __getOwnPropSymbols(b)) {
26
+ if (__propIsEnum.call(b, prop))
27
+ __defNormalProp(a, prop, b[prop]);
28
+ }
29
+ return a;
30
+ };
31
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
32
+ const layout = {
33
+ labelCol: {span: 8},
34
+ wrapperCol: {span: 16}
35
+ };
36
+ const defaultNumberRules = [{required: true, message: "\u8BF7\u586B\u5199\u4E00\u4E2A\u6570\u5B57"}];
37
+ const defaultSelectedAttribute = [{required: true, message: "\u8BF7\u9009\u62E9\u4E3B\u5C5E\u6027"}];
38
+ const PrefixTag = ({text}) => {
39
+ return /* @__PURE__ */ React.createElement("span", {
40
+ style: {
41
+ borderRadius: "4px 0px 0px 4px",
42
+ padding: "0px 12px",
43
+ background: "#FAFAFA",
44
+ border: "1px solid rgb(217 217 217)",
45
+ borderRight: "0",
46
+ display: "flex",
47
+ alignItems: "center",
48
+ height: 32
49
+ }
50
+ }, text);
51
+ };
52
+ const UnifiedParamsModal = ({id, visible, onCancel, config, imgList, imgIndex}) => {
53
+ const dispatch = useDispatch();
54
+ const {selectedBox} = useSingleBox();
55
+ const [size, setSize] = useState();
56
+ const [form] = Form.useForm();
57
+ const {t} = useTranslation();
58
+ useEffect(() => {
59
+ if (visible === false) {
60
+ form.resetFields();
61
+ setSize(void 0);
62
+ }
63
+ }, [visible]);
64
+ const onFinish = (values) => {
65
+ var _a;
66
+ if (!id) {
67
+ return;
68
+ }
69
+ if (!size) {
70
+ message.info("\u8BE5\u8303\u56F4\u4E0D\u5B58\u5728\u66F4\u6539\u6570\u636E, \u8BF7\u66F4\u6539\u7EDF\u4E00\u8303\u56F4");
71
+ return;
72
+ }
73
+ dispatch(ToSubmitFileData(ESubmitType.SyncImgList));
74
+ const newData = {
75
+ attribute: values.attribute
76
+ };
77
+ if (config.secondaryAttributeConfigurable) {
78
+ const newSubAttribute = {};
79
+ (_a = config.inputList) == null ? void 0 : _a.forEach((data) => {
80
+ const subData = values[data.value];
81
+ if (subData !== void 0) {
82
+ Object.assign(newSubAttribute, {[data.value]: subData});
83
+ }
84
+ });
85
+ if (Object.keys(newSubAttribute).length > 0) {
86
+ Object.assign(newData, {subAttribute: newSubAttribute});
87
+ }
88
+ }
89
+ if (size) {
90
+ Object.assign(newData, size);
91
+ }
92
+ dispatch(BatchUpdateResultByTrackID(id, newData, [values.prevPage - 1, values.nextPage - 1]));
93
+ onCancel();
94
+ };
95
+ const recalculateSize = useCallback(() => {
96
+ var _a;
97
+ const {prevPage, nextPage} = form.getFieldsValue(["prevPage", "nextPage"]);
98
+ const newImgList = imgList.filter((_, i) => MathUtils.isInRange(i, [prevPage - 1, nextPage - 1]));
99
+ if (!((newImgList == null ? void 0 : newImgList.length) > 0) || !(selectedBox == null ? void 0 : selectedBox.info) || ((_a = selectedBox == null ? void 0 : selectedBox.info) == null ? void 0 : _a.trackID) === void 0) {
100
+ setSize(void 0);
101
+ return;
102
+ }
103
+ const newMaxSize = PointCloudUtils.getMaxSizeFromBox({
104
+ trackID: selectedBox.info.trackID,
105
+ imgList: newImgList
106
+ });
107
+ setSize(newMaxSize);
108
+ }, [imgList, selectedBox, imgIndex]);
109
+ const onOk = () => form.submit();
110
+ const sizeShow = () => {
111
+ if (!size || !(selectedBox == null ? void 0 : selectedBox.info)) {
112
+ return;
113
+ }
114
+ const style = {marginRight: 16};
115
+ const {length, width, height} = PointCloudUtils.transferBox2Kitti(__spreadValues(__spreadValues({}, selectedBox == null ? void 0 : selectedBox.info), size));
116
+ return /* @__PURE__ */ React.createElement("div", null, /* @__PURE__ */ React.createElement("span", {
117
+ style
118
+ }, t("Length"), ": ", length.toFixed(2)), /* @__PURE__ */ React.createElement("span", {
119
+ style
120
+ }, t("Width"), ": ", width.toFixed(2)), /* @__PURE__ */ React.createElement("span", {
121
+ style
122
+ }, t("Height"), ": ", height.toFixed(2)), /* @__PURE__ */ React.createElement(Popover, {
123
+ placement: "rightBottom",
124
+ content: "\u7EDF\u4E00\u5C3A\u5BF8\u4E3A\u8BE5ID\u7684\u6240\u6709\u6807\u6CE8\u6846\u4E2D\u6700\u5927\u7684\u5C3A\u5BF8"
125
+ }, /* @__PURE__ */ React.createElement(QuestionCircleOutlined, null)));
126
+ };
127
+ const selectStyle = {
128
+ width: "200px"
129
+ };
130
+ const attributeStyle = {
131
+ marginBottom: "24px",
132
+ display: "flex",
133
+ alignItems: "center"
134
+ };
135
+ return /* @__PURE__ */ React.createElement(Modal, {
136
+ title: t("UnifiedParams"),
137
+ visible,
138
+ onCancel,
139
+ onOk,
140
+ wrapClassName: "labelbee-custom-modal"
141
+ }, /* @__PURE__ */ React.createElement(Form, __spreadProps(__spreadValues({}, layout), {
142
+ form,
143
+ onFinish
144
+ }), /* @__PURE__ */ React.createElement(Form.Item, {
145
+ name: "id",
146
+ label: t("CurrentBoxTrackIDs")
147
+ }, id), /* @__PURE__ */ React.createElement(Form.Item, {
148
+ label: t("UnifiedTrackIDRange"),
149
+ required: true
150
+ }, /* @__PURE__ */ React.createElement(Form.Item, {
151
+ style: {display: "inline-block"},
152
+ rules: defaultNumberRules,
153
+ name: "prevPage",
154
+ noStyle: true
155
+ }, /* @__PURE__ */ React.createElement(InputNumber, {
156
+ min: 1,
157
+ style: {width: "80px"},
158
+ onChange: () => recalculateSize()
159
+ })), /* @__PURE__ */ React.createElement("span", {
160
+ style: {
161
+ display: "inline-block",
162
+ width: "24px",
163
+ textAlign: "center"
164
+ }
165
+ }, "-"), /* @__PURE__ */ React.createElement(Form.Item, {
166
+ style: {display: "inline-block"},
167
+ rules: defaultNumberRules,
168
+ name: "nextPage",
169
+ noStyle: true
170
+ }, /* @__PURE__ */ React.createElement(InputNumber, {
171
+ min: 1,
172
+ style: {width: "80px"},
173
+ onChange: () => recalculateSize()
174
+ })), /* @__PURE__ */ React.createElement("span", {
175
+ style: {
176
+ display: "inline-block",
177
+ width: "40x",
178
+ marginLeft: "10px",
179
+ textAlign: "center"
180
+ }
181
+ }, t("Page"))), /* @__PURE__ */ React.createElement(Form.Item, {
182
+ name: "UnifiedSize",
183
+ label: t("UnifiedSize")
184
+ }, sizeShow()), /* @__PURE__ */ React.createElement(Form.Item, {
185
+ label: t("UnifiedTag"),
186
+ required: true
187
+ }, /* @__PURE__ */ React.createElement("div", {
188
+ style: attributeStyle
189
+ }, /* @__PURE__ */ React.createElement(PrefixTag, {
190
+ text: t("Attribute")
191
+ }), /* @__PURE__ */ React.createElement(Form.Item, {
192
+ name: "attribute",
193
+ noStyle: true,
194
+ rules: defaultSelectedAttribute
195
+ }, /* @__PURE__ */ React.createElement(Select, {
196
+ style: selectStyle
197
+ }, config.attributeList.map((v) => /* @__PURE__ */ React.createElement(Select.Option, {
198
+ key: v.value,
199
+ value: v.value
200
+ }, v.key))))), config.secondaryAttributeConfigurable && config.inputList.map((v) => {
201
+ var _a;
202
+ return /* @__PURE__ */ React.createElement("div", {
203
+ key: v.value,
204
+ style: attributeStyle
205
+ }, /* @__PURE__ */ React.createElement(PrefixTag, {
206
+ text: v.key
207
+ }), /* @__PURE__ */ React.createElement(Form.Item, {
208
+ name: v.value,
209
+ noStyle: true,
210
+ required: false
211
+ }, /* @__PURE__ */ React.createElement(Select, {
212
+ style: selectStyle
213
+ }, (_a = v.subSelected) == null ? void 0 : _a.map((subData) => /* @__PURE__ */ React.createElement(Select.Option, {
214
+ key: subData.value,
215
+ value: subData.value
216
+ }, subData.key)))));
217
+ }))));
218
+ };
219
+ const mapStateToProps = (state) => {
220
+ return {
221
+ imgList: state.annotation.imgList,
222
+ imgIndex: state.annotation.imgIndex
223
+ };
224
+ };
225
+ var UnifiedParamsModal$1 = connect(mapStateToProps, null, null, {context: LabelBeeContext})(UnifiedParamsModal);
226
+
227
+ export { UnifiedParamsModal$1 as default };
228
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../../../src/components/pointCloudView/components/UnifiedParamsModal/index.tsx"],"sourcesContent":["import { ESubmitType } from '@/constant';\nimport { BatchUpdateResultByTrackID, ToSubmitFileData } from '@/store/annotation/actionCreators';\nimport { LabelBeeContext, useDispatch } from '@/store/ctx';\nimport { Form, InputNumber, message, Modal, Popover, Select } from 'antd';\nimport React, { useCallback, useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { QuestionCircleOutlined } from '@ant-design/icons';\nimport { IPointCloudConfig, PointCloudUtils } from '@labelbee/lb-utils';\nimport { connect } from 'react-redux';\nimport { AppState } from '@/store';\nimport { AnnotationFileList } from '@/types/data';\nimport { useSingleBox } from '../../hooks/useSingleBox';\nimport { MathUtils } from '@labelbee/lb-annotation';\n\ninterface IProps {\n id?: number;\n visible: boolean;\n onCancel: () => void;\n config: IPointCloudConfig;\n imgList: AnnotationFileList;\n imgIndex: number;\n}\n\nconst layout = {\n labelCol: { span: 8 },\n wrapperCol: { span: 16 },\n};\n\nconst defaultNumberRules = [{ required: true, message: '请填写一个数字' }];\nconst defaultSelectedAttribute = [{ required: true, message: '请选择主属性' }];\nconst DECIMAL_PLACES = 2;\n\nconst PrefixTag: React.FC<{ text: string }> = ({ text }) => {\n return (\n <span\n style={{\n borderRadius: '4px 0px 0px 4px',\n padding: '0px 12px',\n background: '#FAFAFA',\n border: '1px solid rgb(217 217 217)',\n borderRight: '0',\n display: 'flex',\n alignItems: 'center',\n height: 32,\n }}\n >\n {text}\n </span>\n );\n};\n\nconst UnifiedParamsModal = ({ id, visible, onCancel, config, imgList, imgIndex }: IProps) => {\n const dispatch = useDispatch();\n const { selectedBox } = useSingleBox();\n const [size, setSize] = useState<{ width: number; height: number; depth: number }>();\n\n const [form] = Form.useForm();\n const { t } = useTranslation();\n\n useEffect(() => {\n if (visible === false) {\n // Clear All Data\n form.resetFields();\n setSize(undefined);\n }\n }, [visible]);\n\n const onFinish = (values: any) => {\n if (!id) {\n return;\n }\n\n if (!size) {\n message.info('该范围不存在更改数据, 请更改统一范围');\n return;\n }\n\n dispatch(ToSubmitFileData(ESubmitType.SyncImgList));\n const newData = {\n attribute: values.attribute,\n };\n\n if (config.secondaryAttributeConfigurable) {\n const newSubAttribute = {};\n config.inputList?.forEach((data) => {\n const subData = values[data.value];\n if (subData !== undefined) {\n Object.assign(newSubAttribute, { [data.value]: subData });\n }\n });\n\n if (Object.keys(newSubAttribute).length > 0) {\n Object.assign(newData, { subAttribute: newSubAttribute });\n }\n }\n\n if (size) {\n Object.assign(newData, size);\n }\n\n dispatch(BatchUpdateResultByTrackID(id, newData, [values.prevPage - 1, values.nextPage - 1]));\n onCancel();\n };\n\n const recalculateSize = useCallback(() => {\n const { prevPage, nextPage } = form.getFieldsValue(['prevPage', 'nextPage']);\n\n // 1. Filter the imgInfo in range.\n const newImgList = imgList.filter((_, i) =>\n MathUtils.isInRange(i, [prevPage - 1, nextPage - 1]),\n );\n\n if (\n !(newImgList?.length > 0) ||\n !selectedBox?.info ||\n selectedBox?.info?.trackID === undefined\n ) {\n setSize(undefined);\n return;\n }\n\n // 2. Get the Max Size of imgList\n const newMaxSize = PointCloudUtils.getMaxSizeFromBox({\n trackID: selectedBox.info.trackID,\n imgList: newImgList as Array<{ result: string }>,\n });\n\n setSize(newMaxSize);\n }, [imgList, selectedBox, imgIndex]);\n\n const onOk = () => form.submit();\n\n const sizeShow = () => {\n if (!size || !selectedBox?.info) {\n return;\n }\n const style = { marginRight: 16 };\n\n const { length, width, height } = PointCloudUtils.transferBox2Kitti({\n ...selectedBox?.info, // Just for the type check\n ...size,\n });\n\n return (\n <div>\n <span style={style}>\n {t('Length')}: {length.toFixed(2)}\n </span>\n <span style={style}>\n {t('Width')}: {width.toFixed(2)}\n </span>\n <span style={style}>\n {t('Height')}: {height.toFixed(2)}\n </span>\n <Popover placement='rightBottom' content='统一尺寸为该ID的所有标注框中最大的尺寸'>\n <QuestionCircleOutlined />\n </Popover>\n </div>\n );\n };\n const selectStyle = {\n width: '200px',\n };\n\n const attributeStyle = {\n marginBottom: '24px',\n display: 'flex',\n alignItems: 'center',\n };\n\n return (\n <Modal\n title={t('UnifiedParams')}\n visible={visible}\n onCancel={onCancel}\n onOk={onOk}\n wrapClassName='labelbee-custom-modal'\n >\n <Form {...layout} form={form} onFinish={onFinish}>\n <Form.Item name='id' label={t('CurrentBoxTrackIDs')}>\n {id}\n </Form.Item>\n\n <Form.Item label={t('UnifiedTrackIDRange')} required={true}>\n <Form.Item\n style={{ display: 'inline-block' }}\n rules={defaultNumberRules}\n name='prevPage'\n noStyle={true}\n >\n <InputNumber min={1} style={{ width: '80px' }} onChange={() => recalculateSize()} />\n </Form.Item>\n <span\n style={{\n display: 'inline-block',\n width: '24px',\n textAlign: 'center',\n }}\n >\n -\n </span>\n <Form.Item\n style={{ display: 'inline-block' }}\n rules={defaultNumberRules}\n name='nextPage'\n noStyle={true}\n >\n <InputNumber min={1} style={{ width: '80px' }} onChange={() => recalculateSize()} />\n </Form.Item>\n <span\n style={{\n display: 'inline-block',\n width: '40x',\n marginLeft: '10px',\n textAlign: 'center',\n }}\n >\n {t('Page')}\n </span>\n </Form.Item>\n\n <Form.Item name='UnifiedSize' label={t('UnifiedSize')}>\n {sizeShow()}\n </Form.Item>\n\n <Form.Item label={t('UnifiedTag')} required={true}>\n <div style={attributeStyle}>\n <PrefixTag text={t('Attribute')} />\n <Form.Item name='attribute' noStyle={true} rules={defaultSelectedAttribute}>\n <Select style={selectStyle}>\n {config.attributeList.map((v) => (\n <Select.Option key={v.value} value={v.value}>\n {v.key}\n </Select.Option>\n ))}\n </Select>\n </Form.Item>\n </div>\n {config.secondaryAttributeConfigurable &&\n config.inputList.map((v) => (\n <div key={v.value} style={attributeStyle}>\n <PrefixTag text={v.key} />\n <Form.Item name={v.value} noStyle={true} required={false}>\n <Select style={selectStyle}>\n {v.subSelected?.map((subData) => (\n <Select.Option key={subData.value} value={subData.value}>\n {subData.key}\n </Select.Option>\n ))}\n </Select>\n </Form.Item>\n </div>\n ))}\n </Form.Item>\n </Form>\n </Modal>\n );\n};\n\nconst mapStateToProps = (state: AppState) => {\n return {\n imgList: state.annotation.imgList,\n imgIndex: state.annotation.imgIndex,\n };\n};\n\nexport default connect(mapStateToProps, null, null, { context: LabelBeeContext })(\n UnifiedParamsModal,\n);\n"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ import{ESubmitType as U}from"../../../../constant/index.js";import{ToSubmitFileData as T,BatchUpdateResultByTrackID as z}from"../../../../store/annotation/actionCreators.js";import{LabelBeeContext as R,useDispatch as M}from"../../../../store/ctx.js";import{Form as u,Modal as q,InputNumber as F,Select as g,Popover as N,message as V}from"antd";import e,{useState as H,useEffect as K,useCallback as Q}from"react";import{useTranslation as W}from"react-i18next";import{QuestionCircleOutlined as $}from"@ant-design/icons";import{PointCloudUtils as _}from"@labelbee/lb-utils";import{connect as G}from"react-redux";import{useSingleBox as J}from"../../hooks/useSingleBox.js";import{MathUtils as X}from"@labelbee/lb-annotation";var Y=Object.defineProperty,Z=Object.defineProperties,ee=Object.getOwnPropertyDescriptors,B=Object.getOwnPropertySymbols,te=Object.prototype.hasOwnProperty,re=Object.prototype.propertyIsEnumerable,w=(r,n,a)=>n in r?Y(r,n,{enumerable:!0,configurable:!0,writable:!0,value:a}):r[n]=a,b=(r,n)=>{for(var a in n||(n={}))te.call(n,a)&&w(r,a,n[a]);if(B)for(var a of B(n))re.call(n,a)&&w(r,a,n[a]);return r},ne=(r,n)=>Z(r,ee(n));const ae={labelCol:{span:8},wrapperCol:{span:16}},O=[{required:!0,message:"\u8BF7\u586B\u5199\u4E00\u4E2A\u6570\u5B57"}],le=[{required:!0,message:"\u8BF7\u9009\u62E9\u4E3B\u5C5E\u6027"}],x=2,k=({text:r})=>e.createElement("span",{style:{borderRadius:"4px 0px 0px 4px",padding:"0px 12px",background:"#FAFAFA",border:"1px solid rgb(217 217 217)",borderRight:"0",display:"flex",alignItems:"center",height:32}},r),ie=({id:r,visible:n,onCancel:a,config:m,imgList:v,imgIndex:C})=>{const h=M(),{selectedBox:i}=J(),[p,E]=H(),[d]=u.useForm(),{t:o}=W();K(()=>{n===!1&&(d.resetFields(),E(void 0))},[n]);const A=t=>{var s;if(!r)return;if(!p){V.info("\u8BE5\u8303\u56F4\u4E0D\u5B58\u5728\u66F4\u6539\u6570\u636E, \u8BF7\u66F4\u6539\u7EDF\u4E00\u8303\u56F4");return}h(T(U.SyncImgList));const l={attribute:t.attribute};if(m.secondaryAttributeConfigurable){const c={};(s=m.inputList)==null||s.forEach(f=>{const y=t[f.value];y!==void 0&&Object.assign(c,{[f.value]:y})}),Object.keys(c).length>0&&Object.assign(l,{subAttribute:c})}p&&Object.assign(l,p),h(z(r,l,[t.prevPage-1,t.nextPage-1])),a()},P=Q(()=>{var t;const{prevPage:s,nextPage:l}=d.getFieldsValue(["prevPage","nextPage"]),c=v.filter((y,L)=>X.isInRange(L,[s-1,l-1]));if(!((c==null?void 0:c.length)>0)||!(i==null?void 0:i.info)||((t=i==null?void 0:i.info)==null?void 0:t.trackID)===void 0){E(void 0);return}const f=_.getMaxSizeFromBox({trackID:i.info.trackID,imgList:c});E(f)},[v,i,C]),D=()=>d.submit(),j=()=>{if(!p||!(i==null?void 0:i.info))return;const t={marginRight:16},{length:s,width:l,height:c}=_.transferBox2Kitti(b(b({},i==null?void 0:i.info),p));return e.createElement("div",null,e.createElement("span",{style:t},o("Length"),": ",s.toFixed(x)),e.createElement("span",{style:t},o("Width"),": ",l.toFixed(x)),e.createElement("span",{style:t},o("Height"),": ",c.toFixed(x)),e.createElement(N,{placement:"rightBottom",content:"\u7EDF\u4E00\u5C3A\u5BF8\u4E3A\u8BE5ID\u7684\u6240\u6709\u6807\u6CE8\u6846\u4E2D\u6700\u5927\u7684\u5C3A\u5BF8"},e.createElement($,null)))},S={width:"200px"},I={marginBottom:"24px",display:"flex",alignItems:"center"};return e.createElement(q,{title:o("UnifyParams"),visible:n,onCancel:a,onOk:D,wrapClassName:"labelbee-custom-modal"},e.createElement(u,ne(b({},ae),{form:d,onFinish:A}),e.createElement(u.Item,{name:"id",label:o("CurrentBoxTrackIDs")},r),e.createElement(u.Item,{label:o("UnifyTrackIDRange"),required:!0},e.createElement(u.Item,{style:{display:"inline-block"},rules:O,name:"prevPage",noStyle:!0},e.createElement(F,{min:1,style:{width:"80px"},onChange:()=>P()})),e.createElement("span",{style:{display:"inline-block",width:"24px",textAlign:"center"}},"-"),e.createElement(u.Item,{style:{display:"inline-block"},rules:O,name:"nextPage",noStyle:!0},e.createElement(F,{min:1,style:{width:"80px"},onChange:()=>P()})),e.createElement("span",{style:{display:"inline-block",width:"40x",marginLeft:"10px",textAlign:"center"}},o("Page"))),e.createElement(u.Item,{name:"UnifySize",label:o("UnifySize")},j()),e.createElement(u.Item,{label:o("UnifyTag"),required:!0},e.createElement("div",{style:I},e.createElement(k,{text:o("Attribute")}),e.createElement(u.Item,{name:"attribute",noStyle:!0,rules:le},e.createElement(g,{style:S},m.attributeList.map(t=>e.createElement(g.Option,{key:t.value,value:t.value},t.key))))),m.secondaryAttributeConfigurable&&m.inputList.map(t=>{var s;return e.createElement("div",{key:t.value,style:I},e.createElement(k,{text:t.key}),e.createElement(u.Item,{name:t.value,noStyle:!0,required:!1},e.createElement(g,{style:S},(s=t.subSelected)==null?void 0:s.map(l=>e.createElement(g.Option,{key:l.value,value:l.value},l.key)))))}))))},oe=r=>({imgList:r.annotation.imgList,imgIndex:r.annotation.imgIndex});var ue=G(oe,null,null,{context:R})(ie);export{ue as default};
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../../../src/components/pointCloudView/components/UnifyParamsModal/index.tsx"],"sourcesContent":["import { ESubmitType } from '@/constant';\nimport { BatchUpdateResultByTrackID, ToSubmitFileData } from '@/store/annotation/actionCreators';\nimport { LabelBeeContext, useDispatch } from '@/store/ctx';\nimport { Form, InputNumber, message, Modal, Popover, Select } from 'antd';\nimport React, { useCallback, useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { QuestionCircleOutlined } from '@ant-design/icons';\nimport { IPointCloudConfig, PointCloudUtils } from '@labelbee/lb-utils';\nimport { connect } from 'react-redux';\nimport { AppState } from '@/store';\nimport { AnnotationFileList } from '@/types/data';\nimport { useSingleBox } from '../../hooks/useSingleBox';\nimport { MathUtils } from '@labelbee/lb-annotation';\n\ninterface IProps {\n id?: number;\n visible: boolean;\n onCancel: () => void;\n config: IPointCloudConfig;\n imgList: AnnotationFileList;\n imgIndex: number;\n}\n\nconst layout = {\n labelCol: { span: 8 },\n wrapperCol: { span: 16 },\n};\n\nconst defaultNumberRules = [{ required: true, message: '请填写一个数字' }];\nconst defaultSelectedAttribute = [{ required: true, message: '请选择主属性' }];\nconst DECIMAL_PLACES = 2;\n\nconst PrefixTag: React.FC<{ text: string }> = ({ text }) => {\n return (\n <span\n style={{\n borderRadius: '4px 0px 0px 4px',\n padding: '0px 12px',\n background: '#FAFAFA',\n border: '1px solid rgb(217 217 217)',\n borderRight: '0',\n display: 'flex',\n alignItems: 'center',\n height: 32,\n }}\n >\n {text}\n </span>\n );\n};\n\nconst UnifyParamsModal = ({ id, visible, onCancel, config, imgList, imgIndex }: IProps) => {\n const dispatch = useDispatch();\n const { selectedBox } = useSingleBox();\n const [size, setSize] = useState<{ width: number; height: number; depth: number }>();\n\n const [form] = Form.useForm();\n const { t } = useTranslation();\n\n useEffect(() => {\n if (visible === false) {\n // Clear All Data\n form.resetFields();\n setSize(undefined);\n }\n }, [visible]);\n\n const onFinish = (values: any) => {\n if (!id) {\n return;\n }\n\n if (!size) {\n message.info('该范围不存在更改数据, 请更改统一范围');\n return;\n }\n\n dispatch(ToSubmitFileData(ESubmitType.SyncImgList));\n const newData = {\n attribute: values.attribute,\n };\n\n if (config.secondaryAttributeConfigurable) {\n const newSubAttribute = {};\n config.inputList?.forEach((data) => {\n const subData = values[data.value];\n if (subData !== undefined) {\n Object.assign(newSubAttribute, { [data.value]: subData });\n }\n });\n\n if (Object.keys(newSubAttribute).length > 0) {\n Object.assign(newData, { subAttribute: newSubAttribute });\n }\n }\n\n if (size) {\n Object.assign(newData, size);\n }\n\n dispatch(BatchUpdateResultByTrackID(id, newData, [values.prevPage - 1, values.nextPage - 1]));\n onCancel();\n };\n\n const recalculateSize = useCallback(() => {\n const { prevPage, nextPage } = form.getFieldsValue(['prevPage', 'nextPage']);\n\n // 1. Filter the imgInfo in range.\n const newImgList = imgList.filter((_, i) =>\n MathUtils.isInRange(i, [prevPage - 1, nextPage - 1]),\n );\n\n if (\n !(newImgList?.length > 0) ||\n !selectedBox?.info ||\n selectedBox?.info?.trackID === undefined\n ) {\n setSize(undefined);\n return;\n }\n\n // 2. Get the Max Size of imgList\n const newMaxSize = PointCloudUtils.getMaxSizeFromBox({\n trackID: selectedBox.info.trackID,\n imgList: newImgList as Array<{ result: string }>,\n });\n\n setSize(newMaxSize);\n }, [imgList, selectedBox, imgIndex]);\n\n const onOk = () => form.submit();\n\n const sizeShow = () => {\n if (!size || !selectedBox?.info) {\n return;\n }\n const style = { marginRight: 16 };\n\n const { length, width, height } = PointCloudUtils.transferBox2Kitti({\n ...selectedBox?.info, // Just for the type check\n ...size,\n });\n\n return (\n <div>\n <span style={style}>\n {t('Length')}: {length.toFixed(DECIMAL_PLACES)}\n </span>\n <span style={style}>\n {t('Width')}: {width.toFixed(DECIMAL_PLACES)}\n </span>\n <span style={style}>\n {t('Height')}: {height.toFixed(DECIMAL_PLACES)}\n </span>\n <Popover placement='rightBottom' content='统一尺寸为该ID的所有标注框中最大的尺寸'>\n <QuestionCircleOutlined />\n </Popover>\n </div>\n );\n };\n const selectStyle = {\n width: '200px',\n };\n\n const attributeStyle = {\n marginBottom: '24px',\n display: 'flex',\n alignItems: 'center',\n };\n\n return (\n <Modal\n title={t('UnifyParams')}\n visible={visible}\n onCancel={onCancel}\n onOk={onOk}\n wrapClassName='labelbee-custom-modal'\n >\n <Form {...layout} form={form} onFinish={onFinish}>\n <Form.Item name='id' label={t('CurrentBoxTrackIDs')}>\n {id}\n </Form.Item>\n\n <Form.Item label={t('UnifyTrackIDRange')} required={true}>\n <Form.Item\n style={{ display: 'inline-block' }}\n rules={defaultNumberRules}\n name='prevPage'\n noStyle={true}\n >\n <InputNumber min={1} style={{ width: '80px' }} onChange={() => recalculateSize()} />\n </Form.Item>\n <span\n style={{\n display: 'inline-block',\n width: '24px',\n textAlign: 'center',\n }}\n >\n -\n </span>\n <Form.Item\n style={{ display: 'inline-block' }}\n rules={defaultNumberRules}\n name='nextPage'\n noStyle={true}\n >\n <InputNumber min={1} style={{ width: '80px' }} onChange={() => recalculateSize()} />\n </Form.Item>\n <span\n style={{\n display: 'inline-block',\n width: '40x',\n marginLeft: '10px',\n textAlign: 'center',\n }}\n >\n {t('Page')}\n </span>\n </Form.Item>\n\n <Form.Item name='UnifySize' label={t('UnifySize')}>\n {sizeShow()}\n </Form.Item>\n\n <Form.Item label={t('UnifyTag')} required={true}>\n <div style={attributeStyle}>\n <PrefixTag text={t('Attribute')} />\n <Form.Item name='attribute' noStyle={true} rules={defaultSelectedAttribute}>\n <Select style={selectStyle}>\n {config.attributeList.map((v) => (\n <Select.Option key={v.value} value={v.value}>\n {v.key}\n </Select.Option>\n ))}\n </Select>\n </Form.Item>\n </div>\n {config.secondaryAttributeConfigurable &&\n config.inputList.map((v) => (\n <div key={v.value} style={attributeStyle}>\n <PrefixTag text={v.key} />\n <Form.Item name={v.value} noStyle={true} required={false}>\n <Select style={selectStyle}>\n {v.subSelected?.map((subData) => (\n <Select.Option key={subData.value} value={subData.value}>\n {subData.key}\n </Select.Option>\n ))}\n </Select>\n </Form.Item>\n </div>\n ))}\n </Form.Item>\n </Form>\n </Modal>\n );\n};\n\nconst mapStateToProps = (state: AppState) => {\n return {\n imgList: state.annotation.imgList,\n imgIndex: state.annotation.imgIndex,\n };\n};\n\nexport default connect(mapStateToProps, null, null, { context: LabelBeeContext })(UnifyParamsModal);\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuBA,MAAM,MAAS,GAAA;AAAA,EACb,QAAA,EAAU,CAAE,IAAM,EAAA,CAAA,CAAA;AAAA,EAClB,UAAA,EAAY,CAAE,IAAM,EAAA,EAAA,CAAA;AAAA,CAAA,CAAA;AAGtB,MAAM,kBAAqB,GAAA,CAAC,CAAE,QAAA,EAAU,MAAM,OAAS,EAAA,4CAAA,CAAA,CAAA,CAAA;AACvD,MAAM,wBAA2B,GAAA,CAAC,CAAE,QAAA,EAAU,MAAM,OAAS,EAAA,sCAAA,CAAA,CAAA,CAAA;AAC7D,MAAM,cAAiB,GAAA,CAAA,CAAA;AAEvB,MAAM,SAAA,GAAwC,CAAC,CAAE,IAAW,CAAA,KAAA;AAC1D,EAAA,2CACG,MAAD,EAAA;AAAA,IACE,KAAO,EAAA;AAAA,MACL,YAAc,EAAA,iBAAA;AAAA,MACd,OAAS,EAAA,UAAA;AAAA,MACT,UAAY,EAAA,SAAA;AAAA,MACZ,MAAQ,EAAA,4BAAA;AAAA,MACR,WAAa,EAAA,GAAA;AAAA,MACb,OAAS,EAAA,MAAA;AAAA,MACT,UAAY,EAAA,QAAA;AAAA,MACZ,MAAQ,EAAA,EAAA;AAAA,KAAA;AAAA,GAGT,EAAA,IAAA,CAAA,CAAA;AAAA,CAAA,CAAA;AAKP,MAAM,gBAAA,GAAmB,CAAC,CAAE,EAAA,EAAI,SAAS,QAAU,EAAA,MAAA,EAAQ,SAAS,QAAuB,CAAA,KAAA;AACzF,EAAA,MAAM,QAAW,GAAA,WAAA,EAAA,CAAA;AACjB,EAAA,MAAM,CAAE,WAAgB,CAAA,GAAA,YAAA,EAAA,CAAA;AACxB,EAAM,MAAA,CAAC,MAAM,OAAW,CAAA,GAAA,QAAA,EAAA,CAAA;AAExB,EAAM,MAAA,CAAC,QAAQ,IAAK,CAAA,OAAA,EAAA,CAAA;AACpB,EAAA,MAAM,CAAE,CAAM,CAAA,GAAA,cAAA,EAAA,CAAA;AAEd,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,YAAY,KAAO,EAAA;AAErB,MAAK,IAAA,CAAA,WAAA,EAAA,CAAA;AACL,MAAQ,OAAA,CAAA,KAAA,CAAA,CAAA,CAAA;AAAA,KAAA;AAAA,GAAA,EAET,CAAC,OAAA,CAAA,CAAA,CAAA;AAEJ,EAAM,MAAA,QAAA,GAAW,CAAC,MAAgB,KAAA;AAnEpC,IAAA,IAAA,EAAA,CAAA;AAoEI,IAAA,IAAI,CAAC,EAAI,EAAA;AACP,MAAA,OAAA;AAAA,KAAA;AAGF,IAAA,IAAI,CAAC,IAAM,EAAA;AACT,MAAA,OAAA,CAAQ,IAAK,CAAA,0GAAA,CAAA,CAAA;AACb,MAAA,OAAA;AAAA,KAAA;AAGF,IAAA,QAAA,CAAS,iBAAiB,WAAY,CAAA,WAAA,CAAA,CAAA,CAAA;AACtC,IAAA,MAAM,OAAU,GAAA;AAAA,MACd,WAAW,MAAO,CAAA,SAAA;AAAA,KAAA,CAAA;AAGpB,IAAA,IAAI,OAAO,8BAAgC,EAAA;AACzC,MAAA,MAAM,eAAkB,GAAA,EAAA,CAAA;AACxB,MAAA,CAAA,EAAA,GAAA,MAAA,CAAO,SAAP,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAkB,OAAQ,CAAA,CAAC,IAAS,KAAA;AAClC,QAAM,MAAA,OAAA,GAAU,OAAO,IAAK,CAAA,KAAA,CAAA,CAAA;AAC5B,QAAA,IAAI,YAAY,KAAW,CAAA,EAAA;AACzB,UAAA,MAAA,CAAO,MAAO,CAAA,eAAA,EAAiB,CAAG,CAAA,IAAA,CAAK,KAAQ,GAAA,OAAA,CAAA,CAAA,CAAA;AAAA,SAAA;AAAA,OAAA,CAAA,CAAA;AAInD,MAAA,IAAI,MAAO,CAAA,IAAA,CAAK,eAAiB,CAAA,CAAA,MAAA,GAAS,CAAG,EAAA;AAC3C,QAAO,MAAA,CAAA,MAAA,CAAO,OAAS,EAAA,CAAE,YAAc,EAAA,eAAA,CAAA,CAAA,CAAA;AAAA,OAAA;AAAA,KAAA;AAI3C,IAAA,IAAI,IAAM,EAAA;AACR,MAAA,MAAA,CAAO,OAAO,OAAS,EAAA,IAAA,CAAA,CAAA;AAAA,KAAA;AAGzB,IAAS,QAAA,CAAA,0BAAA,CAA2B,IAAI,OAAS,EAAA,CAAC,OAAO,QAAW,GAAA,CAAA,EAAG,OAAO,QAAW,GAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACzF,IAAA,QAAA,EAAA,CAAA;AAAA,GAAA,CAAA;AAGF,EAAM,MAAA,eAAA,GAAkB,YAAY,MAAM;AAxG5C,IAAA,IAAA,EAAA,CAAA;AAyGI,IAAA,MAAM,CAAE,QAAU,EAAA,QAAA,CAAA,GAAa,IAAK,CAAA,cAAA,CAAe,CAAC,UAAY,EAAA,UAAA,CAAA,CAAA,CAAA;AAGhE,IAAA,MAAM,UAAa,GAAA,OAAA,CAAQ,MAAO,CAAA,CAAC,CAAG,EAAA,CAAA,KACpC,SAAU,CAAA,SAAA,CAAU,CAAG,EAAA,CAAC,QAAW,GAAA,CAAA,EAAG,QAAW,GAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAGnD,IACE,IAAA,EAAc,CAAA,UAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,UAAA,CAAA,MAAA,IAAS,CACvB,CAAA,IAAA,EAAc,WAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,WAAA,CAAA,IAAA,CAAA,IACd,CAAa,CAAA,EAAA,GAAA,WAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,WAAA,CAAA,IAAA,KAAb,IAAmB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAAA,MAAY,KAC/B,CAAA,EAAA;AACA,MAAQ,OAAA,CAAA,KAAA,CAAA,CAAA,CAAA;AACR,MAAA,OAAA;AAAA,KAAA;AAIF,IAAM,MAAA,UAAA,GAAa,gBAAgB,iBAAkB,CAAA;AAAA,MACnD,OAAA,EAAS,YAAY,IAAK,CAAA,OAAA;AAAA,MAC1B,OAAS,EAAA,UAAA;AAAA,KAAA,CAAA,CAAA;AAGX,IAAQ,OAAA,CAAA,UAAA,CAAA,CAAA;AAAA,GACP,EAAA,CAAC,SAAS,WAAa,EAAA,QAAA,CAAA,CAAA,CAAA;AAE1B,EAAM,MAAA,IAAA,GAAO,MAAM,IAAK,CAAA,MAAA,EAAA,CAAA;AAExB,EAAA,MAAM,WAAW,MAAM;AACrB,IAAA,IAAI,CAAC,IAAA,IAAQ,EAAC,WAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,WAAA,CAAa,IAAM,CAAA,EAAA;AAC/B,MAAA,OAAA;AAAA,KAAA;AAEF,IAAM,MAAA,KAAA,GAAQ,CAAE,WAAa,EAAA,EAAA,CAAA,CAAA;AAE7B,IAAM,MAAA,CAAE,QAAQ,KAAO,EAAA,MAAA,CAAA,GAAW,gBAAgB,iBAAkB,CAAA,cAAA,CAAA,cAAA,CAAA,EAAA,EAC/D,2CAAa,IACb,CAAA,EAAA,IAAA,CAAA,CAAA,CAAA;AAGL,IAAA,uBACG,KAAA,CAAA,aAAA,CAAA,KAAA,EAAD,IACE,kBAAA,KAAA,CAAA,aAAA,CAAC,MAAD,EAAA;AAAA,MAAM,KAAA;AAAA,KAAA,EACH,EAAE,QAAU,CAAA,EAAA,IAAA,EAAG,OAAO,OAAQ,CAAA,cAAA,CAAA,CAAA,sCAEhC,MAAD,EAAA;AAAA,MAAM,KAAA;AAAA,KAAA,EACH,EAAE,OAAS,CAAA,EAAA,IAAA,EAAG,MAAM,OAAQ,CAAA,cAAA,CAAA,CAAA,sCAE9B,MAAD,EAAA;AAAA,MAAM,KAAA;AAAA,KAAA,EACH,EAAE,QAAU,CAAA,EAAA,IAAA,EAAG,OAAO,OAAQ,CAAA,cAAA,CAAA,CAAA,sCAEhC,OAAD,EAAA;AAAA,MAAS,SAAU,EAAA,aAAA;AAAA,MAAc,OAAQ,EAAA,gHAAA;AAAA,KAAA,sCACtC,sBAAD,EAAA,IAAA,CAAA,CAAA,CAAA,CAAA;AAAA,GAAA,CAAA;AAKR,EAAA,MAAM,WAAc,GAAA;AAAA,IAClB,KAAO,EAAA,OAAA;AAAA,GAAA,CAAA;AAGT,EAAA,MAAM,cAAiB,GAAA;AAAA,IACrB,YAAc,EAAA,MAAA;AAAA,IACd,OAAS,EAAA,MAAA;AAAA,IACT,UAAY,EAAA,QAAA;AAAA,GAAA,CAAA;AAGd,EAAA,2CACG,KAAD,EAAA;AAAA,IACE,OAAO,CAAE,CAAA,aAAA,CAAA;AAAA,IACT,OAAA;AAAA,IACA,QAAA;AAAA,IACA,IAAA;AAAA,IACA,aAAc,EAAA,uBAAA;AAAA,GAEd,kBAAA,KAAA,CAAA,aAAA,CAAC,IAAD,EAAA,aAAA,CAAA,cAAA,CAAA,EAAA,EAAU,MAAV,CAAA,EAAA;AAAA,IAAkB,IAAA;AAAA,IAAY,QAAA;AAAA,GAC5B,CAAA,kBAAA,KAAA,CAAA,aAAA,CAAC,KAAK,IAAN,EAAA;AAAA,IAAW,IAAK,EAAA,IAAA;AAAA,IAAK,OAAO,CAAE,CAAA,oBAAA,CAAA;AAAA,GAC3B,EAAA,EAAA,CAAA,kBAGF,KAAA,CAAA,aAAA,CAAA,IAAA,CAAK,IAAN,EAAA;AAAA,IAAW,OAAO,CAAE,CAAA,mBAAA,CAAA;AAAA,IAAsB,QAAU,EAAA,IAAA;AAAA,GAClD,kBAAA,KAAA,CAAA,aAAA,CAAC,KAAK,IAAN,EAAA;AAAA,IACE,KAAA,EAAO,CAAE,OAAS,EAAA,cAAA,CAAA;AAAA,IAClB,KAAO,EAAA,kBAAA;AAAA,IACP,IAAK,EAAA,UAAA;AAAA,IACL,OAAS,EAAA,IAAA;AAAA,GAAA,sCAER,WAAD,EAAA;AAAA,IAAa,GAAK,EAAA,CAAA;AAAA,IAAG,KAAA,EAAO,CAAE,KAAO,EAAA,MAAA,CAAA;AAAA,IAAU,UAAU,MAAM,eAAA,EAAA;AAAA,GAAA,CAAA,CAAA,sCAEhE,MAAD,EAAA;AAAA,IACE,KAAO,EAAA;AAAA,MACL,OAAS,EAAA,cAAA;AAAA,MACT,KAAO,EAAA,MAAA;AAAA,MACP,SAAW,EAAA,QAAA;AAAA,KAAA;AAAA,GAEd,EAAA,GAAA,CAAA,kBAGA,KAAA,CAAA,aAAA,CAAA,IAAA,CAAK,IAAN,EAAA;AAAA,IACE,KAAA,EAAO,CAAE,OAAS,EAAA,cAAA,CAAA;AAAA,IAClB,KAAO,EAAA,kBAAA;AAAA,IACP,IAAK,EAAA,UAAA;AAAA,IACL,OAAS,EAAA,IAAA;AAAA,GAAA,sCAER,WAAD,EAAA;AAAA,IAAa,GAAK,EAAA,CAAA;AAAA,IAAG,KAAA,EAAO,CAAE,KAAO,EAAA,MAAA,CAAA;AAAA,IAAU,UAAU,MAAM,eAAA,EAAA;AAAA,GAAA,CAAA,CAAA,sCAEhE,MAAD,EAAA;AAAA,IACE,KAAO,EAAA;AAAA,MACL,OAAS,EAAA,cAAA;AAAA,MACT,KAAO,EAAA,KAAA;AAAA,MACP,UAAY,EAAA,MAAA;AAAA,MACZ,SAAW,EAAA,QAAA;AAAA,KAAA;AAAA,GAAA,EAGZ,CAAE,CAAA,MAAA,CAAA,CAAA,CAAA,kBAIN,KAAA,CAAA,aAAA,CAAA,IAAA,CAAK,IAAN,EAAA;AAAA,IAAW,IAAK,EAAA,WAAA;AAAA,IAAY,OAAO,CAAE,CAAA,WAAA,CAAA;AAAA,GAClC,EAAA,QAAA,EAAA,CAAA,kBAGF,KAAA,CAAA,aAAA,CAAA,IAAA,CAAK,IAAN,EAAA;AAAA,IAAW,OAAO,CAAE,CAAA,UAAA,CAAA;AAAA,IAAa,QAAU,EAAA,IAAA;AAAA,GAAA,sCACxC,KAAD,EAAA;AAAA,IAAK,KAAO,EAAA,cAAA;AAAA,GAAA,sCACT,SAAD,EAAA;AAAA,IAAW,MAAM,CAAE,CAAA,WAAA,CAAA;AAAA,GACnB,CAAA,kBAAA,KAAA,CAAA,aAAA,CAAC,KAAK,IAAN,EAAA;AAAA,IAAW,IAAK,EAAA,WAAA;AAAA,IAAY,OAAS,EAAA,IAAA;AAAA,IAAM,KAAO,EAAA,wBAAA;AAAA,GAAA,sCAC/C,MAAD,EAAA;AAAA,IAAQ,KAAO,EAAA,WAAA;AAAA,GAAA,EACZ,OAAO,aAAc,CAAA,GAAA,CAAI,CAAC,CACzB,qBAAA,KAAA,CAAA,aAAA,CAAC,OAAO,MAAR,EAAA;AAAA,IAAe,KAAK,CAAE,CAAA,KAAA;AAAA,IAAO,OAAO,CAAE,CAAA,KAAA;AAAA,GACnC,EAAA,CAAA,CAAE,UAMZ,MAAO,CAAA,8BAAA,IACN,OAAO,SAAU,CAAA,GAAA,CAAI,CAAC,CAAG,KAAA;AA/OrC,IAAA,IAAA,EAAA,CAAA;AAgPc,IAAA,uBAAA,KAAA,CAAA,aAAA,CAAC,KAAD,EAAA;AAAA,MAAK,KAAK,CAAE,CAAA,KAAA;AAAA,MAAO,KAAO,EAAA,cAAA;AAAA,KAAA,sCACvB,SAAD,EAAA;AAAA,MAAW,MAAM,CAAE,CAAA,GAAA;AAAA,KACnB,CAAA,kBAAA,KAAA,CAAA,aAAA,CAAC,KAAK,IAAN,EAAA;AAAA,MAAW,MAAM,CAAE,CAAA,KAAA;AAAA,MAAO,OAAS,EAAA,IAAA;AAAA,MAAM,QAAU,EAAA,KAAA;AAAA,KAAA,sCAChD,MAAD,EAAA;AAAA,MAAQ,KAAO,EAAA,WAAA;AAAA,KACZ,EAAA,CAAA,EAAA,GAAA,CAAA,CAAE,gBAAF,IAAe,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,GAAA,CAAI,CAAC,OACnB,qBAAA,KAAA,CAAA,aAAA,CAAC,OAAO,MAAR,EAAA;AAAA,MAAe,KAAK,OAAQ,CAAA,KAAA;AAAA,MAAO,OAAO,OAAQ,CAAA,KAAA;AAAA,KAAA,EAC/C,OAAQ,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,GAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA;AAajC,MAAM,eAAA,GAAkB,CAAC,KAAoB,KAAA;AAC3C,EAAO,OAAA;AAAA,IACL,OAAA,EAAS,MAAM,UAAW,CAAA,OAAA;AAAA,IAC1B,QAAA,EAAU,MAAM,UAAW,CAAA,QAAA;AAAA,GAAA,CAAA;AAAA,CAAA,CAAA;AAI/B,yBAAe,QAAQ,eAAiB,EAAA,IAAA,EAAM,IAAM,EAAA,CAAE,SAAS,eAAmB,CAAA,CAAA,CAAA,gBAAA,CAAA;;;;"}
@@ -1 +1 @@
1
- import{MathUtils as h}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 ft=Object.defineProperty,gt=Object.defineProperties,mt=Object.getOwnPropertyDescriptors,Z=Object.getOwnPropertySymbols,Ct=Object.prototype.hasOwnProperty,Pt=Object.prototype.propertyIsEnumerable,M=(o,e,n)=>e in o?ft(o,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):o[e]=n,b=(o,e)=>{for(var n in e||(e={}))Ct.call(e,n)&&M(o,n,e[n]);if(Z)for(var n of Z(e))Pt.call(e,n)&&M(o,n,e[n]);return o},W=(o,e)=>gt(o,mt(e)),ht=(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},vt=(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)},xt=()=>{const o=nt(it),{topViewInstance:e,sideViewInstance:n,backViewInstance:d,mainViewInstance:t,addPointCloudBox:i,setSelectedIDs:f,selectedIDs:c,pointCloudBoxList:r}=o,{addHistory:g,initHistory:v,pushHistoryUnderUpdatePolygon:O}=ut(),{selectedPolygon:V}=pt(),{updateSelectedBox:y}=F(),{currentData:p,config:m}=rt(s=>{const{stepList:l,step:u,imgList:a,imgIndex:C}=s.annotation;return{currentData:a[C],config:N(lt.getCurrentStepInfo(u,l).config)}}),_=dt(),{selectedBox:x}=F(),{t:P}=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,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){at.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=vt(s,l,L,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=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,st.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:()=>ht(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,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};