@labelbee/lb-components 1.8.0-alpha.9 → 1.9.0-alpha.0

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 (78) hide show
  1. package/dist/components/pointCloudView/PointCloud2DView.js +1 -1
  2. package/dist/components/pointCloudView/PointCloudBackView.js +1 -1
  3. package/dist/components/pointCloudView/PointCloudContext.js +1 -1
  4. package/dist/components/pointCloudView/PointCloudListener.js +1 -1
  5. package/dist/components/pointCloudView/PointCloudSideView.js +1 -1
  6. package/dist/components/pointCloudView/PointCloudTopView.js +1 -1
  7. package/dist/components/pointCloudView/hooks/useBoxes.js +1 -1
  8. package/dist/components/pointCloudView/hooks/usePointCloudViews.js +1 -1
  9. package/dist/components/pointCloudView/hooks/useSingleBox.js +1 -1
  10. package/dist/components/pointCloudView/hooks/useStatus.js +1 -1
  11. package/dist/components/pointCloudView/index.js +1 -1
  12. package/dist/index.css +43 -0
  13. package/dist/store/annotation/selectors.js +1 -0
  14. package/dist/types/components/AnnotationView/index.d.ts +1 -1
  15. package/dist/types/components/pointCloudView/PointCloudContext.d.ts +8 -1
  16. package/dist/types/components/pointCloudView/hooks/usePointCloudViews.d.ts +3 -16
  17. package/dist/types/components/pointCloudView/hooks/useSingleBox.d.ts +4 -1
  18. package/dist/types/components/videoPlayer/types.d.ts +1 -1
  19. package/dist/types/store/annotation/selectors.d.ts +7 -0
  20. package/dist/types/store/annotation/types.d.ts +3 -3
  21. package/dist/types/store/imgAttribute/types.d.ts +1 -1
  22. package/dist/types/store/index.d.ts +1 -1
  23. package/dist/types/store/toolStyle/types.d.ts +1 -1
  24. package/dist/types/utils/dom.d.ts +2 -2
  25. package/dist/types/views/MainView/toolFooter/AnnotatedAttributes/index.d.ts +4 -0
  26. package/dist/types/views/MainView/toolFooter/index.d.ts +1 -1
  27. package/dist/views/MainView/toolFooter/AnnotatedAttributes/index.js +1 -0
  28. package/dist/views/MainView/toolFooter/index.js +1 -1
  29. package/es/assets/annotation/rectTool/icon_rectPattern.svg.js +1 -4
  30. package/es/components/ImageError/index.js +1 -53
  31. package/es/components/pointCloudView/PointCloud2DView.js +1 -1
  32. package/es/components/pointCloudView/PointCloud2DView.js.map +1 -1
  33. package/es/components/pointCloudView/PointCloudBackView.js +1 -1
  34. package/es/components/pointCloudView/PointCloudBackView.js.map +1 -1
  35. package/es/components/pointCloudView/PointCloudContext.js +1 -1
  36. package/es/components/pointCloudView/PointCloudContext.js.map +1 -1
  37. package/es/components/pointCloudView/PointCloudListener.js +1 -1
  38. package/es/components/pointCloudView/PointCloudListener.js.map +1 -1
  39. package/es/components/pointCloudView/PointCloudSideView.js +1 -1
  40. package/es/components/pointCloudView/PointCloudSideView.js.map +1 -1
  41. package/es/components/pointCloudView/PointCloudTopView.js +1 -1
  42. package/es/components/pointCloudView/PointCloudTopView.js.map +1 -1
  43. package/es/components/pointCloudView/hooks/useBoxes.js +1 -1
  44. package/es/components/pointCloudView/hooks/useBoxes.js.map +1 -1
  45. package/es/components/pointCloudView/hooks/usePointCloudBoxes.js +119 -0
  46. package/es/components/pointCloudView/hooks/usePointCloudBoxes.js.map +1 -0
  47. package/es/components/pointCloudView/hooks/usePointCloudViews.js +1 -1
  48. package/es/components/pointCloudView/hooks/usePointCloudViews.js.map +1 -1
  49. package/es/components/pointCloudView/hooks/usePolygon.js.map +1 -1
  50. package/es/components/pointCloudView/hooks/useSingleBox.js +1 -1
  51. package/es/components/pointCloudView/hooks/useSingleBox.js.map +1 -1
  52. package/es/components/pointCloudView/hooks/useStatus.js +1 -1
  53. package/es/components/pointCloudView/hooks/useStatus.js.map +1 -1
  54. package/es/components/pointCloudView/index.js +1 -1
  55. package/es/components/pointCloudView/index.js.map +1 -1
  56. package/es/components/pointCloudView/useSingleBox.js +44 -0
  57. package/es/components/pointCloudView/useSingleBox.js.map +1 -0
  58. package/es/index.css +43 -0
  59. package/es/store/annotation/selectors.js +1 -0
  60. package/es/store/annotation/selectors.js.map +1 -0
  61. package/es/views/MainView/sidebar/GeneralOperation/OperationList.js +77 -0
  62. package/es/views/MainView/sidebar/GeneralOperation/OperationList.js.map +1 -0
  63. package/es/views/MainView/toolFooter/AnnotatedAttributes/index.js +1 -0
  64. package/es/views/MainView/toolFooter/AnnotatedAttributes/index.js.map +1 -0
  65. package/es/views/MainView/toolFooter/index.js +1 -1
  66. package/es/views/MainView/toolFooter/index.js.map +1 -1
  67. package/package.json +4 -4
  68. package/es/assets/annotation/toolHotKeyIcon/icon_copyBackwardResult.svg.js +0 -4
  69. package/es/assets/annotation/toolHotKeyIcon/icon_copyBackwardResult.svg.js.map +0 -1
  70. package/es/assets/cssIcon/annotation/icon_clearSmall.svg +0 -10
  71. package/es/assets/cssIcon/annotation/icon_clearSmall_a.svg +0 -10
  72. package/es/assets/cssIcon/slide_btn.svg +0 -23
  73. package/es/components/pointCloudView/components/UnifiedParamsModal/index.js +0 -228
  74. package/es/components/pointCloudView/components/UnifiedParamsModal/index.js.map +0 -1
  75. package/es/components/pointCloudView/data.js +0 -4
  76. package/es/components/pointCloudView/data.js.map +0 -1
  77. package/es/hooks/useConfig.js +0 -18
  78. package/es/hooks/useConfig.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"usePolygon.js","sources":["../../../../src/components/pointCloudView/hooks/usePolygon.ts"],"sourcesContent":["import { IPolygonData } from '@labelbee/lb-utils';\nimport { useContext } from 'react';\nimport { PointCloudContext } from '../PointCloudContext';\nimport { useHistory } from './useHistory';\n\n/**\n * PointCloud Polygon Hook\n * @returns\n */\nexport const usePolygon = () => {\n const { polygonList, setPolygonList, selectedID } = useContext(PointCloudContext);\n const { addHistory, pushHistoryWithList } = useHistory();\n\n const selectedPolygon = polygonList.find((v) => v.id === selectedID);\n\n const addPolygon = (polygon: IPolygonData) => {\n setPolygonList(polygonList.concat(polygon));\n addHistory({ newPolygon: polygon });\n };\n\n const deletePolygon = (id: string) => {\n const newPolygonList = polygonList.filter((v) => v.id !== id).map((v) => ({ ...v }));\n setPolygonList(newPolygonList);\n pushHistoryWithList({ polygonList: newPolygonList });\n };\n\n const updateSelectedPolygon = (polygon: IPolygonData) => {\n if (selectedPolygon) {\n setPolygonList(\n polygonList.map((v) => {\n if (v.id === selectedID) {\n return polygon;\n }\n return v;\n }),\n );\n }\n };\n\n const updatePolygonValidByID = (id: string) => {\n const polygon = polygonList.find((v) => v.id === id);\n if (polygon) {\n setPolygonList(\n polygonList.map((v) => {\n if (v.id === id) {\n return {\n ...v,\n valid: !v.valid,\n };\n }\n return v;\n }),\n );\n }\n };\n\n return { addPolygon, deletePolygon, selectedPolygon, updateSelectedPolygon, updatePolygonValidByID };\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AASO,MAAM,aAAa,MAAM;AAC9B,EAAA,MAAM,CAAE,WAAA,EAAa,cAAgB,EAAA,UAAA,CAAA,GAAe,UAAW,CAAA,iBAAA,CAAA,CAAA;AAC/D,EAAM,MAAA,CAAE,YAAY,mBAAwB,CAAA,GAAA,UAAA,EAAA,CAAA;AAE5C,EAAA,MAAM,kBAAkB,WAAY,CAAA,IAAA,CAAK,CAAC,CAAA,KAAM,EAAE,EAAO,KAAA,UAAA,CAAA,CAAA;AAEzD,EAAM,MAAA,UAAA,GAAa,CAAC,OAA0B,KAAA;AAC5C,IAAA,cAAA,CAAe,YAAY,MAAO,CAAA,OAAA,CAAA,CAAA,CAAA;AAClC,IAAA,UAAA,CAAW,CAAE,UAAY,EAAA,OAAA,CAAA,CAAA,CAAA;AAAA,GAAA,CAAA;AAG3B,EAAM,MAAA,aAAA,GAAgB,CAAC,EAAe,KAAA;AACpC,IAAM,MAAA,cAAA,GAAiB,WAAY,CAAA,MAAA,CAAO,CAAC,CAAA,KAAM,CAAE,CAAA,EAAA,KAAO,EAAI,CAAA,CAAA,GAAA,CAAI,CAAC,CAAA,KAAO,cAAK,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA;AAC/E,IAAe,cAAA,CAAA,cAAA,CAAA,CAAA;AACf,IAAA,mBAAA,CAAoB,CAAE,WAAa,EAAA,cAAA,CAAA,CAAA,CAAA;AAAA,GAAA,CAAA;AAGrC,EAAM,MAAA,qBAAA,GAAwB,CAAC,OAA0B,KAAA;AACvD,IAAA,IAAI,eAAiB,EAAA;AACnB,MACE,cAAA,CAAA,WAAA,CAAY,GAAI,CAAA,CAAC,CAAM,KAAA;AACrB,QAAI,IAAA,CAAA,CAAE,OAAO,UAAY,EAAA;AACvB,UAAO,OAAA,OAAA,CAAA;AAAA,SAAA;AAET,QAAO,OAAA,CAAA,CAAA;AAAA,OAAA,CAAA,CAAA,CAAA;AAAA,KAAA;AAAA,GAAA,CAAA;AAMf,EAAM,MAAA,sBAAA,GAAyB,CAAC,EAAe,KAAA;AAC7C,IAAA,MAAM,UAAU,WAAY,CAAA,IAAA,CAAK,CAAC,CAAA,KAAM,EAAE,EAAO,KAAA,EAAA,CAAA,CAAA;AACjD,IAAA,IAAI,OAAS,EAAA;AACX,MACE,cAAA,CAAA,WAAA,CAAY,GAAI,CAAA,CAAC,CAAM,KAAA;AACrB,QAAI,IAAA,CAAA,CAAE,OAAO,EAAI,EAAA;AACf,UAAA,OAAO,iCACF,CADE,CAAA,EAAA;AAAA,YAEL,KAAA,EAAO,CAAC,CAAE,CAAA,KAAA;AAAA,WAAA,CAAA,CAAA;AAAA,SAAA;AAGd,QAAO,OAAA,CAAA,CAAA;AAAA,OAAA,CAAA,CAAA,CAAA;AAAA,KAAA;AAAA,GAAA,CAAA;AAMf,EAAA,OAAO,CAAE,UAAA,EAAY,aAAe,EAAA,eAAA,EAAiB,qBAAuB,EAAA,sBAAA,CAAA,CAAA;AAAA;;;;"}
1
+ {"version":3,"file":"usePolygon.js","sources":["../../../../src/components/pointCloudView/hooks/usePolygon.ts"],"sourcesContent":["import { IPolygonData } from '@labelbee/lb-utils';\nimport { useContext } from 'react';\nimport { PointCloudContext } from '../PointCloudContext';\nimport { useHistory } from './useHistory';\n\n/**\n * PointCloud Polygon Hook\n * @returns\n */\nexport const usePolygon = () => {\n const { polygonList, setPolygonList, selectedID } = useContext(PointCloudContext);\n const { addHistory, pushHistoryWithList } = useHistory();\n\n const selectedPolygon = polygonList.find((v) => v.id === selectedID);\n\n const addPolygon = (polygon: IPolygonData) => {\n setPolygonList(polygonList.concat(polygon));\n addHistory({ newPolygon: polygon });\n };\n\n const deletePolygon = (id: string) => {\n const newPolygonList = polygonList.filter((v) => v.id !== id).map((v) => ({ ...v }));\n setPolygonList(newPolygonList);\n pushHistoryWithList({ polygonList: newPolygonList });\n };\n\n const updateSelectedPolygon = (polygon: IPolygonData) => {\n if (selectedPolygon) {\n setPolygonList(\n polygonList.map((v) => {\n if (v.id === selectedID) {\n return polygon;\n }\n return v;\n }),\n );\n }\n };\n\n const updatePolygonValidByID = (id: string) => {\n const polygon = polygonList.find((v) => v.id === id);\n if (polygon) {\n setPolygonList(\n polygonList.map((v) => {\n if (v.id === id) {\n return {\n ...v,\n valid: !v.valid,\n };\n }\n return v;\n }),\n );\n }\n };\n\n return {\n addPolygon,\n deletePolygon,\n selectedPolygon,\n updateSelectedPolygon,\n updatePolygonValidByID,\n };\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AASO,MAAM,aAAa,MAAM;AAC9B,EAAA,MAAM,CAAE,WAAA,EAAa,cAAgB,EAAA,UAAA,CAAA,GAAe,UAAW,CAAA,iBAAA,CAAA,CAAA;AAC/D,EAAM,MAAA,CAAE,YAAY,mBAAwB,CAAA,GAAA,UAAA,EAAA,CAAA;AAE5C,EAAA,MAAM,kBAAkB,WAAY,CAAA,IAAA,CAAK,CAAC,CAAA,KAAM,EAAE,EAAO,KAAA,UAAA,CAAA,CAAA;AAEzD,EAAM,MAAA,UAAA,GAAa,CAAC,OAA0B,KAAA;AAC5C,IAAA,cAAA,CAAe,YAAY,MAAO,CAAA,OAAA,CAAA,CAAA,CAAA;AAClC,IAAA,UAAA,CAAW,CAAE,UAAY,EAAA,OAAA,CAAA,CAAA,CAAA;AAAA,GAAA,CAAA;AAG3B,EAAM,MAAA,aAAA,GAAgB,CAAC,EAAe,KAAA;AACpC,IAAM,MAAA,cAAA,GAAiB,WAAY,CAAA,MAAA,CAAO,CAAC,CAAA,KAAM,CAAE,CAAA,EAAA,KAAO,EAAI,CAAA,CAAA,GAAA,CAAI,CAAC,CAAA,KAAO,cAAK,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA;AAC/E,IAAe,cAAA,CAAA,cAAA,CAAA,CAAA;AACf,IAAA,mBAAA,CAAoB,CAAE,WAAa,EAAA,cAAA,CAAA,CAAA,CAAA;AAAA,GAAA,CAAA;AAGrC,EAAM,MAAA,qBAAA,GAAwB,CAAC,OAA0B,KAAA;AACvD,IAAA,IAAI,eAAiB,EAAA;AACnB,MACE,cAAA,CAAA,WAAA,CAAY,GAAI,CAAA,CAAC,CAAM,KAAA;AACrB,QAAI,IAAA,CAAA,CAAE,OAAO,UAAY,EAAA;AACvB,UAAO,OAAA,OAAA,CAAA;AAAA,SAAA;AAET,QAAO,OAAA,CAAA,CAAA;AAAA,OAAA,CAAA,CAAA,CAAA;AAAA,KAAA;AAAA,GAAA,CAAA;AAMf,EAAM,MAAA,sBAAA,GAAyB,CAAC,EAAe,KAAA;AAC7C,IAAA,MAAM,UAAU,WAAY,CAAA,IAAA,CAAK,CAAC,CAAA,KAAM,EAAE,EAAO,KAAA,EAAA,CAAA,CAAA;AACjD,IAAA,IAAI,OAAS,EAAA;AACX,MACE,cAAA,CAAA,WAAA,CAAY,GAAI,CAAA,CAAC,CAAM,KAAA;AACrB,QAAI,IAAA,CAAA,CAAE,OAAO,EAAI,EAAA;AACf,UAAA,OAAO,iCACF,CADE,CAAA,EAAA;AAAA,YAEL,KAAA,EAAO,CAAC,CAAE,CAAA,KAAA;AAAA,WAAA,CAAA,CAAA;AAAA,SAAA;AAGd,QAAO,OAAA,CAAA,CAAA;AAAA,OAAA,CAAA,CAAA,CAAA;AAAA,KAAA;AAAA,GAAA,CAAA;AAMf,EAAO,OAAA;AAAA,IACL,UAAA;AAAA,IACA,aAAA;AAAA,IACA,eAAA;AAAA,IACA,qBAAA;AAAA,IACA,sBAAA;AAAA,GAAA,CAAA;AAAA;;;;"}
@@ -1 +1 @@
1
- import{useContext as R,useMemo as E,useCallback as c}from"react";import p from"lodash";import{PointCloudContext as H}from"../PointCloudContext.js";import{cAnnotation as T}from"@labelbee/lb-annotation";import{useHistory as M}from"./useHistory.js";import{usePolygon as W}from"./usePolygon.js";var k=Object.defineProperty,q=Object.defineProperties,z=Object.getOwnPropertyDescriptors,m=Object.getOwnPropertySymbols,F=Object.prototype.hasOwnProperty,G=Object.prototype.propertyIsEnumerable,w=(e,n,o)=>n in e?k(e,n,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[n]=o,J=(e,n)=>{for(var o in n||(n={}))F.call(n,o)&&w(e,o,n[o]);if(m)for(var o of m(n))G.call(n,o)&&w(e,o,n[o]);return e},K=(e,n)=>q(e,z(n));const{ESortDirection:B}=T,Q=()=>{const{pointCloudBoxList:e,setPointCloudResult:n,topViewInstance:o,backViewInstance:P,sideViewInstance:f,selectedIDs:O,selectedID:x,mainViewInstance:u,setSelectedIDs:_,syncAllViewPointCloudColor:y,polygonList:I}=R(H),{selectedPolygon:r,updateSelectedPolygon:V,updatePolygonValidByID:b,deletePolygon:D}=W(),{pushHistoryWithList:h}=M(),d=E(()=>{const t=e.findIndex(i=>i.id===x);if(t>-1)return{info:e[t],index:t}},[x,e]),g=c(t=>{if(d==null?void 0:d.info){e.splice(d.index,1,p.merge(d.info,t));const i=p.cloneDeep(e);return n(i),h({pointCloudBoxList:i}),i}return e},[x,e]),S=c((t,i)=>{const l=e.findIndex(s=>s.id===i);if(l>-1){e.splice(l,1,p.merge(e[l],t));const s=p.cloneDeep(e);return n(s),s}return e},[e]),a=c(t=>{o==null||o.pointCloud2dOperation.setPolygonValidAndRender(t,!0),f==null||f.pointCloud2dOperation.setPolygonValidAndRender(t,!0),P==null||P.pointCloud2dOperation.setPolygonValidAndRender(t,!0)},[o,f,P]),L=c(()=>{if(d==null?void 0:d.info){const{id:t,valid:i=!0}=d.info,l=g({valid:!i});y(l),a(t)}r&&(V(K(J({},r),{valid:!r.valid})),o==null||o.pointCloud2dOperation.setPolygonValidAndRender(r.id,!0))},[a,d,r]),j=c(t=>{const i=e.find(l=>l.id===t);if(i){const{id:l,valid:s=!0}=i,N=S({valid:!s},l);return a(l),N}b(t)},[a,e,I]),v=c((t=B.ascend)=>{if(!o||O.length>1)return;const{pointCloud2dOperation:i}=o,l=i.switchToNextPolygon(t);l&&_(l)},[o]),A=()=>{v(B.descend)},C=t=>{const i=e.filter(l=>l.id!==t);n(i),u==null||u.removeObjectByName(t),u==null||u.render(),y(i)};return{selectedBox:d,updateSelectedBox:g,changeSelectedBoxValid:L,changeValidByID:j,selectNextBox:v,selectPrevBox:A,deletePointCloudBox:C,deleteSelectedPointCloudBoxAndPolygon:()=>{d&&(C(d.info.id),o==null||o.pointCloud2dOperation.deletePolygon(d.info.id)),r&&(D(r.id),o==null||o.pointCloud2dOperation.deletePolygon(r.id))}}};export{Q as useSingleBox};
1
+ import{useContext as k,useMemo as O,useCallback as u}from"react";import a from"lodash";import{PointCloudContext as q}from"../PointCloudContext.js";import{cAnnotation as z}from"@labelbee/lb-annotation";import{useHistory as F}from"./useHistory.js";import{usePolygon as G}from"./usePolygon.js";var J=Object.defineProperty,K=Object.defineProperties,Q=Object.getOwnPropertyDescriptors,_=Object.getOwnPropertySymbols,U=Object.prototype.hasOwnProperty,X=Object.prototype.propertyIsEnumerable,V=(e,i,n)=>i in e?J(e,i,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[i]=n,Y=(e,i)=>{for(var n in i||(i={}))U.call(i,n)&&V(e,n,i[n]);if(_)for(var n of _(i))X.call(i,n)&&V(e,n,i[n]);return e},Z=(e,i)=>K(e,Q(i));const{ESortDirection:D}=z,$=()=>{const{pointCloudBoxList:e,setPointCloudResult:i,topViewInstance:n,backViewInstance:y,sideViewInstance:g,selectedIDs:f,selectedID:v,mainViewInstance:s,setSelectedIDs:b,syncAllViewPointCloudColor:C,polygonList:h}=k(q),{selectedPolygon:c,updateSelectedPolygon:L,updatePolygonValidByID:S,deletePolygon:j}=G(),{pushHistoryWithList:m}=F(),l=O(()=>{const o=e.findIndex(t=>t.id===v);if(o>-1)return{info:e[o],index:o}},[v,e]),B=u(o=>{if(l==null?void 0:l.info){e.splice(l.index,1,a.merge(l.info,o));const t=a.cloneDeep(e);return i(t),m({pointCloudBoxList:t}),t}return e},[v,e]),A=u((o,t)=>{const d=e.findIndex(r=>r.id===t);if(d>-1){e.splice(d,1,a.merge(e[d],o));const r=a.cloneDeep(e);return i(r),r}return e},[e]),P=u(o=>{n==null||n.pointCloud2dOperation.setPolygonValidAndRender(o,!0),g==null||g.pointCloud2dOperation.setPolygonValidAndRender(o,!0),y==null||y.pointCloud2dOperation.setPolygonValidAndRender(o,!0)},[n,g,y]),N=u(()=>{if(l==null?void 0:l.info){const{id:o,valid:t=!0}=l.info,d=B({valid:!t});C(d),P(o)}c&&(L(Z(Y({},c),{valid:!c.valid})),n==null||n.pointCloud2dOperation.setPolygonValidAndRender(c.id,!0))},[P,l,c]),R=u(o=>{const t=e.find(d=>d.id===o);if(t){const{id:d,valid:r=!0}=t,p=A({valid:!r},d);return P(d),p}S(o)},[P,e,h]),w=u((o=D.ascend)=>{if(!n||f.length>1)return;const{pointCloud2dOperation:t}=n,d=t.switchToNextPolygon(o);d&&b(d)},[n]),E=()=>{w(D.descend)},I=o=>{const t=e.filter(d=>d.id!==o);i(t),s==null||s.removeObjectByName(o),s==null||s.render(),C(t)},H=()=>{l&&(I(l.info.id),n==null||n.pointCloud2dOperation.deletePolygon(l.info.id)),c&&(j(c.id),n==null||n.pointCloud2dOperation.deletePolygon(c.id))},M=O(()=>e.filter(o=>f.includes(o.id)),[f,e]),T=u(o=>{const t=a.cloneDeep(e);let d=!1;if(o.forEach(r=>{const p=t.findIndex(x=>x.id===r.id);if(p>-1){const x=a.merge(t[p],r);t.splice(p,1,x),s==null||s.generateBox(x),d=!0}}),d)return i(t),m({pointCloudBoxList:t}),s==null||s.render(),t},[f,e]),W=u(o=>e.find(t=>t.id===o),[e]);return{selectedBox:l,updateSelectedBox:B,changeSelectedBoxValid:N,changeValidByID:R,selectNextBox:w,selectPrevBox:E,deletePointCloudBox:I,selectedBoxes:M,updateSelectedBoxes:T,getPointCloudByID:W,deleteSelectedPointCloudBoxAndPolygon:H}};export{$ as useSingleBox};
@@ -1 +1 @@
1
- {"version":3,"file":"useSingleBox.js","sources":["../../../../src/components/pointCloudView/hooks/useSingleBox.ts"],"sourcesContent":["import { IPointCloudBox } from '@labelbee/lb-utils';\nimport { useCallback, useContext, useMemo } from 'react';\nimport _ from 'lodash';\nimport { PointCloudContext } from '../PointCloudContext';\nimport { cAnnotation } from '@labelbee/lb-annotation';\nimport { useHistory } from './useHistory';\nimport { usePolygon } from './usePolygon';\n\nconst { ESortDirection } = cAnnotation;\n\n/** Actions for single selected box */\nexport const useSingleBox = () => {\n const {\n pointCloudBoxList,\n setPointCloudResult,\n topViewInstance,\n backViewInstance,\n sideViewInstance,\n selectedIDs,\n selectedID,\n mainViewInstance,\n setSelectedIDs,\n syncAllViewPointCloudColor,\n polygonList,\n } = useContext(PointCloudContext);\n const { selectedPolygon, updateSelectedPolygon, updatePolygonValidByID, deletePolygon } =\n usePolygon();\n\n const { pushHistoryWithList } = useHistory();\n\n /** Returns { info: selected box, index: selected box index } */\n const selectedBox = useMemo(() => {\n const boxIndex = pointCloudBoxList.findIndex((i: { id: string }) => i.id === selectedID);\n if (boxIndex > -1) {\n return { info: pointCloudBoxList[boxIndex], index: boxIndex };\n }\n }, [selectedID, pointCloudBoxList]);\n\n /** Use Partial<IPointCloudBox> to update selected box */\n const updateSelectedBox = useCallback(\n (params: Partial<IPointCloudBox>) => {\n if (selectedBox?.info) {\n pointCloudBoxList.splice(selectedBox.index, 1, _.merge(selectedBox.info, params));\n const newPointCloudBoxList = _.cloneDeep(pointCloudBoxList);\n setPointCloudResult(newPointCloudBoxList);\n pushHistoryWithList({ pointCloudBoxList: newPointCloudBoxList });\n return newPointCloudBoxList;\n }\n\n return pointCloudBoxList;\n },\n [selectedID, pointCloudBoxList],\n );\n\n /** Use Partial<IPointCloudBox> to update box by ID */\n const updateBoxByID = useCallback(\n (params: Partial<IPointCloudBox>, id: string) => {\n const boxIndex = pointCloudBoxList.findIndex((v) => v.id === id);\n\n if (boxIndex > -1) {\n pointCloudBoxList.splice(boxIndex, 1, _.merge(pointCloudBoxList[boxIndex], params));\n const newPointCloudBoxList = _.cloneDeep(pointCloudBoxList);\n setPointCloudResult(newPointCloudBoxList);\n return newPointCloudBoxList;\n }\n return pointCloudBoxList;\n },\n [pointCloudBoxList],\n );\n\n /**\n * Change all polygonView Valid.\n */\n const changePolygonViewValid = useCallback(\n (id: string) => {\n topViewInstance?.pointCloud2dOperation.setPolygonValidAndRender(id, true);\n sideViewInstance?.pointCloud2dOperation.setPolygonValidAndRender(id, true);\n backViewInstance?.pointCloud2dOperation.setPolygonValidAndRender(id, true);\n },\n [topViewInstance, sideViewInstance, backViewInstance],\n );\n\n /** Toggle selected box‘s validity */\n const changeSelectedBoxValid = useCallback(() => {\n if (selectedBox?.info) {\n const { id, valid = true } = selectedBox.info;\n\n // PointCloud\n const newPointCloudList = updateSelectedBox({ valid: !valid });\n\n // Async\n syncAllViewPointCloudColor(newPointCloudList);\n changePolygonViewValid(id);\n }\n\n if (selectedPolygon) {\n updateSelectedPolygon({ ...selectedPolygon, valid: !selectedPolygon.valid });\n topViewInstance?.pointCloud2dOperation.setPolygonValidAndRender(selectedPolygon.id, true);\n }\n }, [changePolygonViewValid, selectedBox, selectedPolygon]);\n\n const changeValidByID = useCallback(\n (id: string) => {\n const boxInfo = pointCloudBoxList.find((v) => v.id === id);\n\n if (boxInfo) {\n const { id, valid = true } = boxInfo;\n\n // PointCloud\n const newPointCloudBoxList = updateBoxByID({ valid: !valid }, id);\n\n changePolygonViewValid(id);\n\n return newPointCloudBoxList;\n }\n updatePolygonValidByID(id);\n },\n [changePolygonViewValid, pointCloudBoxList, polygonList],\n );\n\n /** PointCloud select next/prev one */\n const switchToNextBox = useCallback(\n (sort = ESortDirection.ascend) => {\n if (!topViewInstance || selectedIDs.length > 1) {\n return;\n }\n\n const { pointCloud2dOperation } = topViewInstance;\n\n const newSelectedIDs = pointCloud2dOperation.switchToNextPolygon(sort);\n if (newSelectedIDs) {\n setSelectedIDs(newSelectedIDs);\n }\n },\n [topViewInstance],\n );\n\n const selectPrevBox = () => {\n switchToNextBox(ESortDirection.descend);\n };\n\n const deletePointCloudBox = (id: string) => {\n const newPointCloudList = pointCloudBoxList.filter((v) => v.id !== id);\n setPointCloudResult(newPointCloudList);\n mainViewInstance?.removeObjectByName(id);\n mainViewInstance?.render();\n syncAllViewPointCloudColor(newPointCloudList);\n };\n\n /**\n * Delete all polygon by hotkey.\n */\n const deleteSelectedPointCloudBoxAndPolygon = () => {\n if (selectedBox) {\n deletePointCloudBox(selectedBox.info.id);\n topViewInstance?.pointCloud2dOperation.deletePolygon(selectedBox.info.id);\n }\n\n if (selectedPolygon) {\n deletePolygon(selectedPolygon.id);\n topViewInstance?.pointCloud2dOperation.deletePolygon(selectedPolygon.id);\n }\n };\n\n return {\n selectedBox,\n updateSelectedBox,\n changeSelectedBoxValid,\n changeValidByID,\n selectNextBox: switchToNextBox,\n selectPrevBox,\n deletePointCloudBox,\n deleteSelectedPointCloudBoxAndPolygon,\n };\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useSingleBox.js","sources":["../../../../src/components/pointCloudView/hooks/useSingleBox.ts"],"sourcesContent":["import { IPointCloudBox, PartialIPointCloudBoxList } from '@labelbee/lb-utils';\nimport { useCallback, useContext, useMemo } from 'react';\nimport _ from 'lodash';\nimport { PointCloudContext } from '../PointCloudContext';\nimport { cAnnotation } from '@labelbee/lb-annotation';\nimport { useHistory } from './useHistory';\nimport { usePolygon } from './usePolygon';\n\nconst { ESortDirection } = cAnnotation;\n\n/** Actions for single selected box */\nexport const useSingleBox = () => {\n const {\n pointCloudBoxList,\n setPointCloudResult,\n topViewInstance,\n backViewInstance,\n sideViewInstance,\n selectedIDs,\n selectedID,\n mainViewInstance,\n setSelectedIDs,\n syncAllViewPointCloudColor,\n polygonList,\n } = useContext(PointCloudContext);\n const { selectedPolygon, updateSelectedPolygon, updatePolygonValidByID, deletePolygon } =\n usePolygon();\n\n const { pushHistoryWithList } = useHistory();\n\n /** Returns { info: selected box, index: selected box index } */\n const selectedBox = useMemo(() => {\n const boxIndex = pointCloudBoxList.findIndex((i: { id: string }) => i.id === selectedID);\n if (boxIndex > -1) {\n return { info: pointCloudBoxList[boxIndex], index: boxIndex };\n }\n }, [selectedID, pointCloudBoxList]);\n\n /** Use Partial<IPointCloudBox> to update selected box */\n const updateSelectedBox = useCallback(\n (params: Partial<IPointCloudBox>) => {\n if (selectedBox?.info) {\n pointCloudBoxList.splice(selectedBox.index, 1, _.merge(selectedBox.info, params));\n const newPointCloudBoxList = _.cloneDeep(pointCloudBoxList);\n setPointCloudResult(newPointCloudBoxList);\n pushHistoryWithList({ pointCloudBoxList: newPointCloudBoxList });\n return newPointCloudBoxList;\n }\n\n return pointCloudBoxList;\n },\n [selectedID, pointCloudBoxList],\n );\n\n /** Use Partial<IPointCloudBox> to update box by ID */\n const updateBoxByID = useCallback(\n (params: Partial<IPointCloudBox>, id: string) => {\n const boxIndex = pointCloudBoxList.findIndex((v) => v.id === id);\n\n if (boxIndex > -1) {\n pointCloudBoxList.splice(boxIndex, 1, _.merge(pointCloudBoxList[boxIndex], params));\n const newPointCloudBoxList = _.cloneDeep(pointCloudBoxList);\n setPointCloudResult(newPointCloudBoxList);\n return newPointCloudBoxList;\n }\n return pointCloudBoxList;\n },\n [pointCloudBoxList],\n );\n\n /**\n * Change all polygonView Valid.\n */\n const changePolygonViewValid = useCallback(\n (id: string) => {\n topViewInstance?.pointCloud2dOperation.setPolygonValidAndRender(id, true);\n sideViewInstance?.pointCloud2dOperation.setPolygonValidAndRender(id, true);\n backViewInstance?.pointCloud2dOperation.setPolygonValidAndRender(id, true);\n },\n [topViewInstance, sideViewInstance, backViewInstance],\n );\n\n /** Toggle selected box‘s validity */\n const changeSelectedBoxValid = useCallback(() => {\n if (selectedBox?.info) {\n const { id, valid = true } = selectedBox.info;\n\n // PointCloud\n const newPointCloudList = updateSelectedBox({ valid: !valid });\n\n // Async\n syncAllViewPointCloudColor(newPointCloudList);\n changePolygonViewValid(id);\n }\n\n if (selectedPolygon) {\n updateSelectedPolygon({ ...selectedPolygon, valid: !selectedPolygon.valid });\n topViewInstance?.pointCloud2dOperation.setPolygonValidAndRender(selectedPolygon.id, true);\n }\n }, [changePolygonViewValid, selectedBox, selectedPolygon]);\n\n const changeValidByID = useCallback(\n (id: string) => {\n const boxInfo = pointCloudBoxList.find((v) => v.id === id);\n\n if (boxInfo) {\n const { id, valid = true } = boxInfo;\n\n // PointCloud\n const newPointCloudBoxList = updateBoxByID({ valid: !valid }, id);\n\n changePolygonViewValid(id);\n\n return newPointCloudBoxList;\n }\n updatePolygonValidByID(id);\n },\n [changePolygonViewValid, pointCloudBoxList, polygonList],\n );\n\n /** PointCloud select next/prev one */\n const switchToNextBox = useCallback(\n (sort = ESortDirection.ascend) => {\n if (!topViewInstance || selectedIDs.length > 1) {\n return;\n }\n\n const { pointCloud2dOperation } = topViewInstance;\n\n const newSelectedIDs = pointCloud2dOperation.switchToNextPolygon(sort);\n if (newSelectedIDs) {\n setSelectedIDs(newSelectedIDs);\n }\n },\n [topViewInstance],\n );\n\n const selectPrevBox = () => {\n switchToNextBox(ESortDirection.descend);\n };\n\n const deletePointCloudBox = (id: string) => {\n const newPointCloudList = pointCloudBoxList.filter((v) => v.id !== id);\n setPointCloudResult(newPointCloudList);\n mainViewInstance?.removeObjectByName(id);\n mainViewInstance?.render();\n syncAllViewPointCloudColor(newPointCloudList);\n };\n\n /**\n * Delete all polygon by hotkey.\n */\n const deleteSelectedPointCloudBoxAndPolygon = () => {\n if (selectedBox) {\n deletePointCloudBox(selectedBox.info.id);\n topViewInstance?.pointCloud2dOperation.deletePolygon(selectedBox.info.id);\n }\n\n if (selectedPolygon) {\n deletePolygon(selectedPolygon.id);\n topViewInstance?.pointCloud2dOperation.deletePolygon(selectedPolygon.id);\n }\n };\n\n /**\n * According to selectedIDs, return selected pointCloudList\n * @returns pointCloudList {IPointCloudBoxList}\n */\n const selectedBoxes = useMemo(() => {\n return pointCloudBoxList.filter((i) => selectedIDs.includes(i.id));\n }, [selectedIDs, pointCloudBoxList]);\n\n /**\n * Update point cloud boxes list by updateList\n * @param updateList {PartialIPointCloudBoxList}\n */\n const updateSelectedBoxes = useCallback(\n (updateList: PartialIPointCloudBoxList) => {\n const newPointCloudBoxList = _.cloneDeep(pointCloudBoxList);\n let hasModify = false;\n\n updateList.forEach((i) => {\n const index = newPointCloudBoxList.findIndex((p) => p.id === i.id);\n\n if (index > -1) {\n const updatedBoxParam = _.merge(newPointCloudBoxList[index], i);\n newPointCloudBoxList.splice(index, 1, updatedBoxParam);\n mainViewInstance?.generateBox(updatedBoxParam);\n hasModify = true;\n }\n });\n\n if (hasModify) {\n setPointCloudResult(newPointCloudBoxList);\n pushHistoryWithList({ pointCloudBoxList: newPointCloudBoxList });\n mainViewInstance?.render();\n return newPointCloudBoxList;\n }\n },\n\n [selectedIDs, pointCloudBoxList],\n );\n\n /**\n * @param id {string}\n * @returns pointCloud {IPointCloudBox | undefined }\n */\n const getPointCloudByID = useCallback(\n (id: string) => {\n return pointCloudBoxList.find((i) => i.id === id);\n },\n [pointCloudBoxList],\n );\n\n return {\n selectedBox,\n updateSelectedBox,\n changeSelectedBoxValid,\n changeValidByID,\n selectNextBox: switchToNextBox,\n selectPrevBox,\n deletePointCloudBox,\n selectedBoxes,\n updateSelectedBoxes,\n getPointCloudByID,\n deleteSelectedPointCloudBoxAndPolygon,\n };\n};\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- import{useContext as P}from"react";import{PointCloudContext as C}from"../PointCloudContext.js";import{cTool as m}from"@labelbee/lb-annotation";import{useHistory as y}from"./useHistory.js";const{EToolName:n,EPolygonPattern:r}=m,v=()=>{const{topViewInstance:t,mainViewInstance:o,pointCloudBoxList:s,setPointCloudResult:a,setPolygonList:u,pointCloudPattern:c,setPointCloudPattern:i,syncAllViewPointCloudColor:d}=P(C),{pushHistoryWithList:p}=y();return{clearAllResult:()=>{s.forEach(l=>{o==null||o.removeObjectByName(l.id)}),o==null||o.render(),a([]),u([]),t==null||t.pointCloud2dOperation.clearActiveStatus(),t==null||t.pointCloud2dOperation.clearResult(),d([]),p({pointCloudBoxList:[],polygonList:[]})},updatePointCloudPattern:l=>{const e=t==null?void 0:t.pointCloud2dOperation;if(!!e)switch(e.clearActiveStatus(),l){case n.Rect:e.setPattern(r.Rect),i(n.Rect);break;case n.Polygon:e.setPattern(r.Normal),i(n.Polygon);break}},pointCloudPattern:c}};export{v as useStatus};
1
+ import{useContext as P}from"react";import{PointCloudContext as C}from"../PointCloudContext.js";import{cTool as m}from"@labelbee/lb-annotation";import{useHistory as y}from"./useHistory.js";const{EToolName:l,EPolygonPattern:s}=m,v=()=>{const{topViewInstance:t,mainViewInstance:o,pointCloudBoxList:a,setPointCloudResult:u,setPolygonList:c,pointCloudPattern:i,setPointCloudPattern:r,syncAllViewPointCloudColor:d}=P(C),{pushHistoryWithList:p}=y();return{clearAllResult:()=>{a.forEach(e=>{o==null||o.removeObjectByName(e.id)}),o==null||o.render(),u([]),c([]),t==null||t.pointCloud2dOperation.clearActiveStatus(),t==null||t.pointCloud2dOperation.clearResult(),d([]),p({pointCloudBoxList:[],polygonList:[]})},updatePointCloudPattern:e=>{const n=t==null?void 0:t.pointCloud2dOperation;if(!!n&&(n.clearActiveStatus(),e!==i))switch(e){case l.Rect:n.setPattern(s.Rect),r(l.Rect);break;case l.Polygon:n.setPattern(s.Normal),r(l.Polygon);break}},pointCloudPattern:i}};export{v as useStatus};
@@ -1 +1 @@
1
- {"version":3,"file":"useStatus.js","sources":["../../../../src/components/pointCloudView/hooks/useStatus.ts"],"sourcesContent":["/**\n * @file Update PointCloud Status\n * @createDate 2022-08-26\n * @author Ron <ron.f.luo@gmail.com>\n */\n\nimport { useContext } from 'react';\nimport { PointCloudContext } from '../PointCloudContext';\nimport { cTool } from '@labelbee/lb-annotation';\nimport { useHistory } from './useHistory';\n\nconst { EToolName, EPolygonPattern } = cTool;\n\nexport const useStatus = () => {\n const {\n topViewInstance,\n mainViewInstance,\n pointCloudBoxList,\n setPointCloudResult,\n setPolygonList,\n pointCloudPattern,\n setPointCloudPattern,\n syncAllViewPointCloudColor\n } = useContext(PointCloudContext);\n const { pushHistoryWithList } = useHistory();\n\n // Clear All PointView Data\n const clearAllResult = () => {\n pointCloudBoxList.forEach((v) => {\n mainViewInstance?.removeObjectByName(v.id);\n });\n mainViewInstance?.render();\n\n setPointCloudResult([]);\n setPolygonList([]);\n\n topViewInstance?.pointCloud2dOperation.clearActiveStatus();\n topViewInstance?.pointCloud2dOperation.clearResult();\n \n syncAllViewPointCloudColor([]);\n\n // Add History\n pushHistoryWithList({ pointCloudBoxList: [], polygonList: [] });\n };\n\n const updatePointCloudPattern = (toolName: any) => {\n const polygon2dOperation = topViewInstance?.pointCloud2dOperation;\n if (!polygon2dOperation) {\n return;\n }\n\n polygon2dOperation.clearActiveStatus();\n\n switch (toolName) {\n case EToolName.Rect:\n polygon2dOperation.setPattern(EPolygonPattern.Rect);\n setPointCloudPattern(EToolName.Rect);\n\n break;\n case EToolName.Polygon:\n polygon2dOperation.setPattern(EPolygonPattern.Normal);\n setPointCloudPattern(EToolName.Polygon);\n break;\n }\n };\n\n return {\n clearAllResult,\n updatePointCloudPattern,\n pointCloudPattern,\n };\n};\n"],"names":[],"mappings":";;;;;AAWA,MAAM,CAAE,WAAW,eAAoB,CAAA,GAAA,KAAA,CAAA;AAEhC,MAAM,YAAY,MAAM;AAC7B,EAAM,MAAA;AAAA,IACJ,eAAA;AAAA,IACA,gBAAA;AAAA,IACA,iBAAA;AAAA,IACA,mBAAA;AAAA,IACA,cAAA;AAAA,IACA,iBAAA;AAAA,IACA,oBAAA;AAAA,IACA,0BAAA;AAAA,GAAA,GACE,UAAW,CAAA,iBAAA,CAAA,CAAA;AACf,EAAA,MAAM,CAAE,mBAAwB,CAAA,GAAA,UAAA,EAAA,CAAA;AAGhC,EAAA,MAAM,iBAAiB,MAAM;AAC3B,IAAkB,iBAAA,CAAA,OAAA,CAAQ,CAAC,CAAM,KAAA;AAC/B,MAAA,gBAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,gBAAA,CAAkB,mBAAmB,CAAE,CAAA,EAAA,CAAA,CAAA;AAAA,KAAA,CAAA,CAAA;AAEzC,IAAkB,gBAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,gBAAA,CAAA,MAAA,EAAA,CAAA;AAElB,IAAoB,mBAAA,CAAA,EAAA,CAAA,CAAA;AACpB,IAAe,cAAA,CAAA,EAAA,CAAA,CAAA;AAEf,IAAA,eAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,eAAA,CAAiB,qBAAsB,CAAA,iBAAA,EAAA,CAAA;AACvC,IAAA,eAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,eAAA,CAAiB,qBAAsB,CAAA,WAAA,EAAA,CAAA;AAEvC,IAA2B,0BAAA,CAAA,EAAA,CAAA,CAAA;AAG3B,IAAoB,mBAAA,CAAA,CAAE,iBAAmB,EAAA,EAAA,EAAI,WAAa,EAAA,EAAA,CAAA,CAAA,CAAA;AAAA,GAAA,CAAA;AAG5D,EAAM,MAAA,uBAAA,GAA0B,CAAC,QAAkB,KAAA;AACjD,IAAA,MAAM,qBAAqB,eAAiB,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,eAAA,CAAA,qBAAA,CAAA;AAC5C,IAAA,IAAI,CAAC,kBAAoB,EAAA;AACvB,MAAA,OAAA;AAAA,KAAA;AAGF,IAAmB,kBAAA,CAAA,iBAAA,EAAA,CAAA;AAEnB,IAAQ,QAAA,QAAA;AAAA,MAAA,KACD,SAAU,CAAA,IAAA;AACb,QAAA,kBAAA,CAAmB,WAAW,eAAgB,CAAA,IAAA,CAAA,CAAA;AAC9C,QAAA,oBAAA,CAAqB,SAAU,CAAA,IAAA,CAAA,CAAA;AAE/B,QAAA,MAAA;AAAA,MAAA,KACG,SAAU,CAAA,OAAA;AACb,QAAA,kBAAA,CAAmB,WAAW,eAAgB,CAAA,MAAA,CAAA,CAAA;AAC9C,QAAA,oBAAA,CAAqB,SAAU,CAAA,OAAA,CAAA,CAAA;AAC/B,QAAA,MAAA;AAAA,KAAA;AAAA,GAAA,CAAA;AAIN,EAAO,OAAA;AAAA,IACL,cAAA;AAAA,IACA,uBAAA;AAAA,IACA,iBAAA;AAAA,GAAA,CAAA;AAAA;;;;"}
1
+ {"version":3,"file":"useStatus.js","sources":["../../../../src/components/pointCloudView/hooks/useStatus.ts"],"sourcesContent":["/**\n * @file Update PointCloud Status\n * @createDate 2022-08-26\n * @author Ron <ron.f.luo@gmail.com>\n */\n\nimport { useContext } from 'react';\nimport { PointCloudContext } from '../PointCloudContext';\nimport { cTool } from '@labelbee/lb-annotation';\nimport { useHistory } from './useHistory';\n\nconst { EToolName, EPolygonPattern } = cTool;\n\nexport const useStatus = () => {\n const {\n topViewInstance,\n mainViewInstance,\n pointCloudBoxList,\n setPointCloudResult,\n setPolygonList,\n pointCloudPattern,\n setPointCloudPattern,\n syncAllViewPointCloudColor\n } = useContext(PointCloudContext);\n const { pushHistoryWithList } = useHistory();\n\n // Clear All PointView Data\n const clearAllResult = () => {\n pointCloudBoxList.forEach((v) => {\n mainViewInstance?.removeObjectByName(v.id);\n });\n mainViewInstance?.render();\n\n setPointCloudResult([]);\n setPolygonList([]);\n\n topViewInstance?.pointCloud2dOperation.clearActiveStatus();\n topViewInstance?.pointCloud2dOperation.clearResult();\n \n syncAllViewPointCloudColor([]);\n\n // Add History\n pushHistoryWithList({ pointCloudBoxList: [], polygonList: [] });\n };\n\n const updatePointCloudPattern = (toolName: any) => {\n const polygon2dOperation = topViewInstance?.pointCloud2dOperation;\n if (!polygon2dOperation) {\n return;\n }\n\n polygon2dOperation.clearActiveStatus();\n\n if (toolName === pointCloudPattern) {\n return;\n }\n\n switch (toolName) {\n case EToolName.Rect:\n polygon2dOperation.setPattern(EPolygonPattern.Rect);\n setPointCloudPattern(EToolName.Rect);\n break;\n case EToolName.Polygon:\n polygon2dOperation.setPattern(EPolygonPattern.Normal);\n setPointCloudPattern(EToolName.Polygon);\n break;\n }\n };\n\n return {\n clearAllResult,\n updatePointCloudPattern,\n pointCloudPattern,\n };\n};\n"],"names":[],"mappings":";;;;;AAWA,MAAM,CAAE,WAAW,eAAoB,CAAA,GAAA,KAAA,CAAA;AAEhC,MAAM,YAAY,MAAM;AAC7B,EAAM,MAAA;AAAA,IACJ,eAAA;AAAA,IACA,gBAAA;AAAA,IACA,iBAAA;AAAA,IACA,mBAAA;AAAA,IACA,cAAA;AAAA,IACA,iBAAA;AAAA,IACA,oBAAA;AAAA,IACA,0BAAA;AAAA,GAAA,GACE,UAAW,CAAA,iBAAA,CAAA,CAAA;AACf,EAAA,MAAM,CAAE,mBAAwB,CAAA,GAAA,UAAA,EAAA,CAAA;AAGhC,EAAA,MAAM,iBAAiB,MAAM;AAC3B,IAAkB,iBAAA,CAAA,OAAA,CAAQ,CAAC,CAAM,KAAA;AAC/B,MAAA,gBAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,gBAAA,CAAkB,mBAAmB,CAAE,CAAA,EAAA,CAAA,CAAA;AAAA,KAAA,CAAA,CAAA;AAEzC,IAAkB,gBAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,gBAAA,CAAA,MAAA,EAAA,CAAA;AAElB,IAAoB,mBAAA,CAAA,EAAA,CAAA,CAAA;AACpB,IAAe,cAAA,CAAA,EAAA,CAAA,CAAA;AAEf,IAAA,eAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,eAAA,CAAiB,qBAAsB,CAAA,iBAAA,EAAA,CAAA;AACvC,IAAA,eAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,eAAA,CAAiB,qBAAsB,CAAA,WAAA,EAAA,CAAA;AAEvC,IAA2B,0BAAA,CAAA,EAAA,CAAA,CAAA;AAG3B,IAAoB,mBAAA,CAAA,CAAE,iBAAmB,EAAA,EAAA,EAAI,WAAa,EAAA,EAAA,CAAA,CAAA,CAAA;AAAA,GAAA,CAAA;AAG5D,EAAM,MAAA,uBAAA,GAA0B,CAAC,QAAkB,KAAA;AACjD,IAAA,MAAM,qBAAqB,eAAiB,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,eAAA,CAAA,qBAAA,CAAA;AAC5C,IAAA,IAAI,CAAC,kBAAoB,EAAA;AACvB,MAAA,OAAA;AAAA,KAAA;AAGF,IAAmB,kBAAA,CAAA,iBAAA,EAAA,CAAA;AAEnB,IAAA,IAAI,aAAa,iBAAmB,EAAA;AAClC,MAAA,OAAA;AAAA,KAAA;AAGF,IAAQ,QAAA,QAAA;AAAA,MAAA,KACD,SAAU,CAAA,IAAA;AACb,QAAA,kBAAA,CAAmB,WAAW,eAAgB,CAAA,IAAA,CAAA,CAAA;AAC9C,QAAA,oBAAA,CAAqB,SAAU,CAAA,IAAA,CAAA,CAAA;AAC/B,QAAA,MAAA;AAAA,MAAA,KACG,SAAU,CAAA,OAAA;AACb,QAAA,kBAAA,CAAmB,WAAW,eAAgB,CAAA,MAAA,CAAA,CAAA;AAC9C,QAAA,oBAAA,CAAqB,SAAU,CAAA,OAAA,CAAA,CAAA;AAC/B,QAAA,MAAA;AAAA,KAAA;AAAA,GAAA,CAAA;AAIN,EAAO,OAAA;AAAA,IACL,cAAA;AAAA,IACA,uBAAA;AAAA,IACA,iBAAA;AAAA,GAAA,CAAA;AAAA;;;;"}
@@ -1 +1 @@
1
- import{getClassName as t}from"../../utils/dom.js";import e from"react";import r from"./PointCloud3DView.js";import a from"./PointCloudBackView.js";import m from"./PointCloudTopView.js";import u from"./PointCloudSideView.js";import c from"./PointCloud2DView.js";import s from"./PointCloudListener.js";import{connect as d}from"react-redux";import{LabelBeeContext as p}from"../../store/ctx.js";const C=({imgList:i,drawLayerSlot:n,checkMode:o})=>i.length===0?null:e.createElement(e.Fragment,null,e.createElement(s,{checkMode:o}),e.createElement("div",{className:t("point-cloud-layout"),onContextMenu:l=>l.preventDefault()},e.createElement("div",{className:t("point-cloud-wrapper")},e.createElement("div",{className:t("point-cloud-container","left")},e.createElement(c,null),e.createElement(r,null)),e.createElement("div",{className:t("point-cloud-container","right")},e.createElement(m,{drawLayerSlot:n,checkMode:o}),e.createElement("div",{className:t("point-cloud-container","right-bottom")},e.createElement(u,{checkMode:o}),e.createElement(a,{checkMode:o})))))),P=i=>({imgList:i.annotation.imgList});var f=d(P,null,null,{context:p})(C);export{f as default};
1
+ import{getClassName as t}from"../../utils/dom.js";import e from"react";import r from"./PointCloud3DView.js";import a from"./PointCloudBackView.js";import m from"./PointCloudTopView.js";import u from"./PointCloudSideView.js";import c from"./PointCloud2DView.js";import s from"./PointCloudListener.js";import{connect as d}from"react-redux";import{LabelBeeContext as p}from"../../store/ctx.js";import{AnnotatedAttributesPanelFixedLeft as C,AnnotatedAttributesPanelFixedRight as P}from"../../views/MainView/toolFooter/AnnotatedAttributes/index.js";const f=({imgList:o,drawLayerSlot:i,checkMode:n})=>o.length===0?null:e.createElement(e.Fragment,null,e.createElement(s,{checkMode:n}),e.createElement("div",{className:t("point-cloud-layout"),onContextMenu:l=>l.preventDefault()},e.createElement("div",{className:t("point-cloud-wrapper")},e.createElement(C,null),e.createElement("div",{className:t("point-cloud-content")},e.createElement("div",{className:t("point-cloud-container","left")},e.createElement(c,null),e.createElement(r,null)),e.createElement("div",{className:t("point-cloud-container","right")},e.createElement(m,{drawLayerSlot:i,checkMode:n}),e.createElement("div",{className:t("point-cloud-container","right-bottom")},e.createElement(u,null),e.createElement(a,null)))),e.createElement(P,null)))),w=o=>({imgList:o.annotation.imgList});var E=d(w,null,null,{context:p})(f);export{E as default};
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/components/pointCloudView/index.tsx"],"sourcesContent":["/*\n * @Author: Laoluo luozefeng@sensetime.com\n * @Date: 2022-07-04 14:39:44\n * @LastEditors: Laoluo luozefeng@sensetime.com\n * @LastEditTime: 2022-07-08 10:01:08\n */\n/**\n * @author Glenfiddish <edwinlee0927@hotmail.com>\n * @file Point cloud tool view\n * Includes 2D-view、3Dview、top-view、side-view、back-view\n * @date 2022-06-21\n */\n\nimport { getClassName } from '@/utils/dom';\nimport React from 'react';\nimport PointCloud3DView from './PointCloud3DView';\nimport PointCloudBackView from './PointCloudBackView';\nimport PointCloudTopView from './PointCloudTopView';\nimport PointCloudSideView from './PointCloudSideView';\nimport PointCloud2DView from './PointCloud2DView';\nimport PointCloudListener from './PointCloudListener';\nimport { AppState } from '@/store';\nimport { connect } from 'react-redux';\nimport { IFileItem } from '@/types/data';\nimport { LabelBeeContext } from '@/store/ctx';\nimport { TDrawLayerSlot } from '@/types/main';\n\ninterface IProps {\n imgList: IFileItem[];\n drawLayerSlot?: TDrawLayerSlot;\n checkMode?: boolean;\n}\n\nconst PointCloudView: React.FC<IProps> = ({ imgList, drawLayerSlot, checkMode }) => {\n if (imgList.length === 0) {\n return null;\n }\n\n return (\n <>\n <PointCloudListener checkMode={checkMode}/>\n <div className={getClassName('point-cloud-layout')} onContextMenu={(e) => e.preventDefault()}>\n <div className={getClassName('point-cloud-wrapper')}>\n <div className={getClassName('point-cloud-container', 'left')}>\n <PointCloud2DView />\n <PointCloud3DView />\n </div>\n\n <div className={getClassName('point-cloud-container', 'right')}>\n <PointCloudTopView drawLayerSlot={drawLayerSlot} checkMode={checkMode} />\n <div className={getClassName('point-cloud-container', 'right-bottom')}>\n <PointCloudSideView checkMode={checkMode} />\n <PointCloudBackView checkMode={checkMode} />\n </div>\n </div>\n </div>\n </div>\n </>\n );\n};\n\nconst mapStateToProps = (state: AppState) => ({\n imgList: state.annotation.imgList,\n});\n\nexport default connect(mapStateToProps, null, null, { context: LabelBeeContext })(PointCloudView);\n"],"names":[],"mappings":";;;;;;;;;;;AAiCA,MAAM,cAAmC,GAAA,CAAC,CAAE,OAAA,EAAS,eAAe,SAAgB,CAAA,KAAA;AAClF,EAAI,IAAA,OAAA,CAAQ,WAAW,CAAG,EAAA;AACxB,IAAO,OAAA,IAAA,CAAA;AAAA,GAAA;AAGT,EACE,uBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA,sCACG,kBAAD,EAAA;AAAA,IAAoB,SAAA;AAAA,GAAA,CAAA,sCACnB,KAAD,EAAA;AAAA,IAAK,WAAW,YAAa,CAAA,oBAAA,CAAA;AAAA,IAAuB,aAAA,EAAe,CAAC,CAAA,KAAM,CAAE,CAAA,cAAA,EAAA;AAAA,GAAA,sCACzE,KAAD,EAAA;AAAA,IAAK,WAAW,YAAa,CAAA,qBAAA,CAAA;AAAA,GAAA,sCAC1B,KAAD,EAAA;AAAA,IAAK,SAAA,EAAW,aAAa,uBAAyB,EAAA,MAAA,CAAA;AAAA,GAAA,sCACnD,gBAAD,EAAA,IAAA,CAAA,sCACC,gBAAD,EAAA,IAAA,CAAA,CAAA,sCAGD,KAAD,EAAA;AAAA,IAAK,SAAA,EAAW,aAAa,uBAAyB,EAAA,OAAA,CAAA;AAAA,GAAA,sCACnD,iBAAD,EAAA;AAAA,IAAmB,aAAA;AAAA,IAA8B,SAAA;AAAA,GAAA,CAAA,sCAChD,KAAD,EAAA;AAAA,IAAK,SAAA,EAAW,aAAa,uBAAyB,EAAA,cAAA,CAAA;AAAA,GAAA,sCACnD,kBAAD,EAAA;AAAA,IAAoB,SAAA;AAAA,GAAA,CAAA,sCACnB,kBAAD,EAAA;AAAA,IAAoB,SAAA;AAAA,GAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA;AASlC,MAAM,eAAA,GAAkB,CAAC,KAAqB,MAAA;AAAA,EAC5C,OAAA,EAAS,MAAM,UAAW,CAAA,OAAA;AAAA,CAAA,CAAA,CAAA;AAG5B,uBAAe,QAAQ,eAAiB,EAAA,IAAA,EAAM,IAAM,EAAA,CAAE,SAAS,eAAmB,CAAA,CAAA,CAAA,cAAA,CAAA;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/components/pointCloudView/index.tsx"],"sourcesContent":["/*\n * @Author: Laoluo luozefeng@sensetime.com\n * @Date: 2022-07-04 14:39:44\n * @LastEditors: Laoluo luozefeng@sensetime.com\n * @LastEditTime: 2022-07-08 10:01:08\n */\n/**\n * @author Glenfiddish <edwinlee0927@hotmail.com>\n * @file Point cloud tool view\n * Includes 2D-view、3Dview、top-view、side-view、back-view\n * @date 2022-06-21\n */\n\nimport { getClassName } from '@/utils/dom';\nimport React from 'react';\nimport PointCloud3DView from './PointCloud3DView';\nimport PointCloudBackView from './PointCloudBackView';\nimport PointCloudTopView from './PointCloudTopView';\nimport PointCloudSideView from './PointCloudSideView';\nimport PointCloud2DView from './PointCloud2DView';\nimport PointCloudListener from './PointCloudListener';\nimport { AppState } from '@/store';\nimport { connect } from 'react-redux';\nimport { IFileItem } from '@/types/data';\nimport { LabelBeeContext } from '@/store/ctx';\nimport {\n AnnotatedAttributesPanelFixedLeft,\n AnnotatedAttributesPanelFixedRight,\n} from '@/views/MainView/toolFooter/AnnotatedAttributes';\nimport { TDrawLayerSlot } from '@/types/main';\n\ninterface IProps {\n imgList: IFileItem[];\n drawLayerSlot?: TDrawLayerSlot;\n checkMode?: boolean;\n}\n\nconst PointCloudView: React.FC<IProps> = ({ imgList, drawLayerSlot, checkMode }) => {\n if (imgList.length === 0) {\n return null;\n }\n\n return (\n <>\n <PointCloudListener checkMode={checkMode} />\n <div className={getClassName('point-cloud-layout')} onContextMenu={(e) => e.preventDefault()}>\n <div className={getClassName('point-cloud-wrapper')}>\n <AnnotatedAttributesPanelFixedLeft />\n\n <div className={getClassName('point-cloud-content')}>\n <div className={getClassName('point-cloud-container', 'left')}>\n <PointCloud2DView />\n <PointCloud3DView />\n </div>\n\n <div className={getClassName('point-cloud-container', 'right')}>\n <PointCloudTopView drawLayerSlot={drawLayerSlot} checkMode={checkMode} />\n <div className={getClassName('point-cloud-container', 'right-bottom')}>\n <PointCloudSideView />\n <PointCloudBackView />\n </div>\n </div>\n </div>\n\n <AnnotatedAttributesPanelFixedRight />\n </div>\n </div>\n </>\n );\n};\n\nconst mapStateToProps = (state: AppState) => ({\n imgList: state.annotation.imgList,\n});\n\nexport default connect(mapStateToProps, null, null, { context: LabelBeeContext })(PointCloudView);\n"],"names":[],"mappings":";;;;;;;;;;;;AAqCA,MAAM,cAAmC,GAAA,CAAC,CAAE,OAAA,EAAS,eAAe,SAAgB,CAAA,KAAA;AAClF,EAAI,IAAA,OAAA,CAAQ,WAAW,CAAG,EAAA;AACxB,IAAO,OAAA,IAAA,CAAA;AAAA,GAAA;AAGT,EACE,uBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA,sCACG,kBAAD,EAAA;AAAA,IAAoB,SAAA;AAAA,GAAA,CAAA,sCACnB,KAAD,EAAA;AAAA,IAAK,WAAW,YAAa,CAAA,oBAAA,CAAA;AAAA,IAAuB,aAAA,EAAe,CAAC,CAAA,KAAM,CAAE,CAAA,cAAA,EAAA;AAAA,GAAA,sCACzE,KAAD,EAAA;AAAA,IAAK,WAAW,YAAa,CAAA,qBAAA,CAAA;AAAA,GAAA,kBAC1B,KAAA,CAAA,aAAA,CAAA,iCAAA,EAAD,IAEA,CAAA,kBAAA,KAAA,CAAA,aAAA,CAAC,KAAD,EAAA;AAAA,IAAK,WAAW,YAAa,CAAA,qBAAA,CAAA;AAAA,GAAA,sCAC1B,KAAD,EAAA;AAAA,IAAK,SAAA,EAAW,aAAa,uBAAyB,EAAA,MAAA,CAAA;AAAA,GAAA,sCACnD,gBAAD,EAAA,IAAA,CAAA,sCACC,gBAAD,EAAA,IAAA,CAAA,CAAA,sCAGD,KAAD,EAAA;AAAA,IAAK,SAAA,EAAW,aAAa,uBAAyB,EAAA,OAAA,CAAA;AAAA,GAAA,sCACnD,iBAAD,EAAA;AAAA,IAAmB,aAAA;AAAA,IAA8B,SAAA;AAAA,GAAA,CAAA,sCAChD,KAAD,EAAA;AAAA,IAAK,SAAA,EAAW,aAAa,uBAAyB,EAAA,cAAA,CAAA;AAAA,GAAA,sCACnD,kBAAD,EAAA,IAAA,CAAA,sCACC,kBAAD,EAAA,IAAA,CAAA,CAAA,CAAA,CAAA,sCAKL,kCAAD,EAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA;AAOV,MAAM,eAAA,GAAkB,CAAC,KAAqB,MAAA;AAAA,EAC5C,OAAA,EAAS,MAAM,UAAW,CAAA,OAAA;AAAA,CAAA,CAAA,CAAA;AAG5B,uBAAe,QAAQ,eAAiB,EAAA,IAAA,EAAM,IAAM,EAAA,CAAE,SAAS,eAAmB,CAAA,CAAA,CAAA,cAAA,CAAA;;;;"}
@@ -0,0 +1,44 @@
1
+ import { useContext, useMemo, useCallback } from 'react';
2
+ import _ from 'lodash';
3
+ import { PointCloudContext } from './PointCloudContext.js';
4
+
5
+ const useSingleBox = () => {
6
+ const {pointCloudBoxList, setPointCloudResult, topViewInstance, selectedIDs, selectedID} = useContext(PointCloudContext);
7
+ const selectedBox = useMemo(() => {
8
+ const boxIndex = pointCloudBoxList.findIndex((i) => i.id === selectedID);
9
+ if (boxIndex > -1) {
10
+ return {info: pointCloudBoxList[boxIndex], index: boxIndex};
11
+ }
12
+ }, [selectedID, pointCloudBoxList]);
13
+ const updateSelectedBox = useCallback((params) => {
14
+ if (selectedBox == null ? void 0 : selectedBox.info) {
15
+ pointCloudBoxList.splice(selectedBox.index, 1, _.merge(selectedBox.info, params));
16
+ setPointCloudResult(_.cloneDeep(pointCloudBoxList));
17
+ }
18
+ }, [selectedID]);
19
+ const changeSelectedBoxValid = useCallback(() => {
20
+ if (selectedBox == null ? void 0 : selectedBox.info) {
21
+ updateSelectedBox({valid: !selectedBox.info.valid});
22
+ }
23
+ }, [selectedID]);
24
+ const switchToNextBox = useCallback((sort = ESortDirection.ascend) => {
25
+ if (!topViewInstance || selectedIDs.length > 1) {
26
+ return;
27
+ }
28
+ const {pointCloud2dOperation} = topViewInstance;
29
+ pointCloud2dOperation.switchToNextPolygon(sort);
30
+ }, [topViewInstance]);
31
+ const selectPrevBox = () => {
32
+ switchToNextBox(ESortDirection.descend);
33
+ };
34
+ return {
35
+ selectedBox,
36
+ updateSelectedBox,
37
+ changeSelectedBoxValid,
38
+ selectNextBox: switchToNextBox,
39
+ selectPrevBox
40
+ };
41
+ };
42
+
43
+ export { useSingleBox };
44
+ //# sourceMappingURL=useSingleBox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSingleBox.js","sources":["../../../src/components/pointCloudView/useSingleBox.tsx"],"sourcesContent":["import { IPointCloudBox } from '@labelbee/lb-utils';\nimport { useCallback, useContext, useMemo } from 'react';\nimport _ from 'lodash';\nimport { PointCloudContext } from './PointCloudContext';\n\n/** Actions for single selected box */\n\nexport const useSingleBox = () => {\n const { pointCloudBoxList, setPointCloudResult, topViewInstance, selectedIDs, selectedID } = useContext(PointCloudContext);\n\n /** Returns { info: selected box, index: selected box index } */\n const selectedBox = useMemo(() => {\n const boxIndex = pointCloudBoxList.findIndex((i: { id: string; }) => i.id === selectedID);\n if (boxIndex > -1) {\n return { info: pointCloudBoxList[boxIndex], index: boxIndex };\n }\n }, [selectedID, pointCloudBoxList]);\n\n /** Use Partial<IPointCloudBox> to update selected box */\n const updateSelectedBox = useCallback(\n (params: Partial<IPointCloudBox>) => {\n if (selectedBox?.info) {\n pointCloudBoxList.splice(selectedBox.index, 1, _.merge(selectedBox.info, params));\n setPointCloudResult(_.cloneDeep(pointCloudBoxList));\n }\n },\n [selectedID]\n );\n\n /** Toggle selected box‘s validity */\n const changeSelectedBoxValid = useCallback(() => {\n if (selectedBox?.info) {\n updateSelectedBox({ valid: !selectedBox.info.valid });\n }\n }, [selectedID]);\n\n /** PointCloud select next/prev one */\n const switchToNextBox = useCallback(\n (sort = ESortDirection.ascend) => {\n if (!topViewInstance || selectedIDs.length > 1) {\n return;\n }\n\n const { pointCloud2dOperation } = topViewInstance;\n\n pointCloud2dOperation.switchToNextPolygon(sort);\n },\n [topViewInstance]\n );\n\n const selectPrevBox = () => {\n switchToNextBox(ESortDirection.descend);\n };\n\n return {\n selectedBox,\n updateSelectedBox,\n changeSelectedBoxValid,\n selectNextBox: switchToNextBox,\n selectPrevBox,\n };\n};\n"],"names":[],"mappings":";;;;AAOO,MAAM,eAAe,MAAM;AAChC,EAAA,MAAM,CAAE,iBAAmB,EAAA,mBAAA,EAAqB,eAAiB,EAAA,WAAA,EAAa,cAAe,UAAW,CAAA,iBAAA,CAAA,CAAA;AAGxG,EAAM,MAAA,WAAA,GAAc,QAAQ,MAAM;AAChC,IAAA,MAAM,WAAW,iBAAkB,CAAA,SAAA,CAAU,CAAC,CAAA,KAAuB,EAAE,EAAO,KAAA,UAAA,CAAA,CAAA;AAC9E,IAAA,IAAI,WAAW,CAAI,CAAA,EAAA;AACjB,MAAA,OAAO,CAAE,IAAA,EAAM,iBAAkB,CAAA,QAAA,CAAA,EAAW,KAAO,EAAA,QAAA,CAAA,CAAA;AAAA,KAAA;AAAA,GAAA,EAEpD,CAAC,UAAY,EAAA,iBAAA,CAAA,CAAA,CAAA;AAGhB,EAAM,MAAA,iBAAA,GAAoB,WACxB,CAAA,CAAC,MAAoC,KAAA;AACnC,IAAA,IAAI,2CAAa,IAAM,EAAA;AACrB,MAAA,iBAAA,CAAkB,OAAO,WAAY,CAAA,KAAA,EAAO,GAAG,CAAE,CAAA,KAAA,CAAM,YAAY,IAAM,EAAA,MAAA,CAAA,CAAA,CAAA;AACzE,MAAA,mBAAA,CAAoB,EAAE,SAAU,CAAA,iBAAA,CAAA,CAAA,CAAA;AAAA,KAAA;AAAA,GAAA,EAGpC,CAAC,UAAA,CAAA,CAAA,CAAA;AAIH,EAAM,MAAA,sBAAA,GAAyB,YAAY,MAAM;AAC/C,IAAA,IAAI,2CAAa,IAAM,EAAA;AACrB,MAAA,iBAAA,CAAkB,CAAE,KAAA,EAAO,CAAC,WAAA,CAAY,IAAK,CAAA,KAAA,CAAA,CAAA,CAAA;AAAA,KAAA;AAAA,GAAA,EAE9C,CAAC,UAAA,CAAA,CAAA,CAAA;AAGJ,EAAA,MAAM,eAAkB,GAAA,WAAA,CACtB,CAAC,IAAA,GAAO,eAAe,MAAW,KAAA;AAChC,IAAA,IAAI,CAAC,eAAA,IAAmB,WAAY,CAAA,MAAA,GAAS,CAAG,EAAA;AAC9C,MAAA,OAAA;AAAA,KAAA;AAGF,IAAA,MAAM,CAAE,qBAA0B,CAAA,GAAA,eAAA,CAAA;AAElC,IAAA,qBAAA,CAAsB,mBAAoB,CAAA,IAAA,CAAA,CAAA;AAAA,GAAA,EAE5C,CAAC,eAAA,CAAA,CAAA,CAAA;AAGH,EAAA,MAAM,gBAAgB,MAAM;AAC1B,IAAA,eAAA,CAAgB,cAAe,CAAA,OAAA,CAAA,CAAA;AAAA,GAAA,CAAA;AAGjC,EAAO,OAAA;AAAA,IACL,WAAA;AAAA,IACA,iBAAA;AAAA,IACA,sBAAA;AAAA,IACA,aAAe,EAAA,eAAA;AAAA,IACf,aAAA;AAAA,GAAA,CAAA;AAAA;;;;"}
package/es/index.css CHANGED
@@ -21,6 +21,7 @@
21
21
  position: relative;
22
22
  z-index: 10;
23
23
  border-top: 1px solid #e2e2e2;
24
+ border-left: 1px solid #e2e2e2;
24
25
  }
25
26
  .bee-layout__side .ant-collapse-borderless > .ant-collapse-item {
26
27
  border-bottom: 1px solid #eee;
@@ -1062,6 +1063,44 @@
1062
1063
  min-width: 116px;
1063
1064
  }
1064
1065
 
1066
+ .bee-annotated-attribute {
1067
+ width: 240px;
1068
+ background: white;
1069
+ }
1070
+ .bee-annotated-attribute__popover .ant-popover-inner-content {
1071
+ padding: 0;
1072
+ }
1073
+ .bee-annotated-attribute__pin {
1074
+ cursor: pointer;
1075
+ color: #666fff;
1076
+ }
1077
+ .bee-annotated-attribute__pin .anticon {
1078
+ margin-right: 4px;
1079
+ }
1080
+ .bee-annotated-attribute__text {
1081
+ display: flex;
1082
+ justify-content: space-between;
1083
+ padding: 8px 20px;
1084
+ color: #333;
1085
+ }
1086
+ .bee-annotated-attribute__item {
1087
+ height: 40px;
1088
+ line-height: 40px;
1089
+ padding: 12px;
1090
+ display: flex;
1091
+ align-items: center;
1092
+ }
1093
+ .bee-annotated-attribute__item .anticon {
1094
+ cursor: pointer;
1095
+ }
1096
+ .bee-annotated-attribute__item .anticon-eye,
1097
+ .bee-annotated-attribute__item .anticon-caret-down {
1098
+ margin-right: 8px;
1099
+ }
1100
+ .bee-annotated-attribute__item__text {
1101
+ flex: 1;
1102
+ }
1103
+
1065
1104
  /** VideoPlayer样式 start */
1066
1105
  .bee-video-wrapper {
1067
1106
  width: 100%;
@@ -1201,6 +1240,10 @@
1201
1240
  overflow: hidden;
1202
1241
  flex: 1;
1203
1242
  }
1243
+ .bee-point-cloud-wrapper .bee-point-cloud-content {
1244
+ flex: 1;
1245
+ display: flex;
1246
+ }
1204
1247
  .bee-point-cloud-wrapper .bee-point-cloud-container {
1205
1248
  position: relative;
1206
1249
  }
@@ -0,0 +1 @@
1
+ import{jsonParser as s}from"../../utils/index.js";import{getStepConfig as i}from"./reducer.js";const n=({annotation:e})=>{var t;const{stepList:o,step:r}=e;return s((t=i(o,r))==null?void 0:t.config)};export{n as stepConfigSelector};
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selectors.js","sources":["../../../src/store/annotation/selectors.ts"],"sourcesContent":["import { jsonParser } from '@/utils';\nimport { getStepConfig } from './reducer';\nimport { AnnotationState } from './types';\n\n/**\n * select current step config\n */\nexport const stepConfigSelector = ({ annotation }: { annotation: AnnotationState }) => {\n const { stepList, step } = annotation;\n return jsonParser(getStepConfig(stepList, step)?.config);\n};\n"],"names":[],"mappings":";;;AAOa,MAAA,kBAAA,GAAqB,CAAC,CAAE,UAAkD,CAAA,KAAA;AAPvF,EAAA,IAAA,EAAA,CAAA;AAQE,EAAM,MAAA,CAAE,UAAU,IAAS,CAAA,GAAA,UAAA,CAAA;AAC3B,EAAA,OAAO,UAAW,CAAA,CAAA,EAAA,GAAA,aAAA,CAAc,QAAU,EAAA,IAAA,CAAA,KAAxB,IAA+B,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAA,CAAA,CAAA;AAAA;;;;"}
@@ -0,0 +1,77 @@
1
+ import img from '../../../../assets/annotation/common/icon_clear.svg.js';
2
+ import img$1 from '../../../../assets/annotation/common/icon_clear_a.svg.js';
3
+ import img$2 from '../../../../assets/annotation/common/icon_invalid.svg.js';
4
+ import img$3 from '../../../../assets/annotation/common/icon_invalid_a.svg.js';
5
+ import { StopOutlined } from '@ant-design/icons';
6
+ import { useTranslation } from 'react-i18next';
7
+ import React from 'react';
8
+ import { CopyBackWordResult } from '../../../../store/annotation/actionCreators.js';
9
+ import { store } from '../../../../index.js';
10
+
11
+ var __defProp = Object.defineProperty;
12
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
13
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
14
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
15
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, {enumerable: true, configurable: true, writable: true, value}) : obj[key] = value;
16
+ var __spreadValues = (a, b) => {
17
+ for (var prop in b || (b = {}))
18
+ if (__hasOwnProp.call(b, prop))
19
+ __defNormalProp(a, prop, b[prop]);
20
+ if (__getOwnPropSymbols)
21
+ for (var prop of __getOwnPropSymbols(b)) {
22
+ if (__propIsEnum.call(b, prop))
23
+ __defNormalProp(a, prop, b[prop]);
24
+ }
25
+ return a;
26
+ };
27
+ const useOperationList = (toolInstance) => {
28
+ const {t} = useTranslation();
29
+ const iconStyle = {
30
+ height: "25px",
31
+ lineHeight: "25px",
32
+ display: "flex",
33
+ justifyContent: "center",
34
+ alignItems: "center"
35
+ };
36
+ const empty = [
37
+ {
38
+ name: t("ClearLabel"),
39
+ key: "sureClear",
40
+ imgSvg: img,
41
+ hoverSvg: img$1,
42
+ onClick: () => {
43
+ toolInstance == null ? void 0 : toolInstance.clearResult();
44
+ }
45
+ }
46
+ ];
47
+ const setQuestion = {
48
+ name: t(toolInstance.valid === true ? "SetAsInvalid" : "SetAsValid"),
49
+ key: "sureQuestion",
50
+ imgSvg: /* @__PURE__ */ React.createElement(StopOutlined, {
51
+ style: iconStyle
52
+ }),
53
+ hoverSvg: /* @__PURE__ */ React.createElement(StopOutlined, {
54
+ style: __spreadValues({color: "#666fff"}, iconStyle)
55
+ }),
56
+ onClick: () => {
57
+ toolInstance.setValid(!toolInstance.valid);
58
+ }
59
+ };
60
+ const copyThePrevious = {
61
+ name: t("CopyThePrevious"),
62
+ key: "sureCopy",
63
+ imgSvg: img$2,
64
+ hoverSvg: img$3,
65
+ onClick: () => {
66
+ store.dispatch(CopyBackWordResult());
67
+ }
68
+ };
69
+ return {
70
+ setQuestion,
71
+ empty,
72
+ copyThePrevious
73
+ };
74
+ };
75
+
76
+ export { useOperationList as default };
77
+ //# sourceMappingURL=OperationList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OperationList.js","sources":["../../../../../src/views/MainView/sidebar/GeneralOperation/OperationList.tsx"],"sourcesContent":["import { IOperationConfig } from './ActionsConfirm';\nimport clearResultSvg from '@/assets/annotation/common/icon_clear.svg';\nimport clearResultASvg from '@/assets/annotation/common/icon_clear_a.svg';\nimport copyBackStepSvg from '@/assets/annotation/common/icon_invalid.svg';\nimport copyBackStepASvg from '@/assets/annotation/common/icon_invalid_a.svg';\nimport { StopOutlined } from '@ant-design/icons';\nimport { useTranslation } from 'react-i18next';\nimport React from 'react';\nimport { CopyBackWordResult } from '@/store/annotation/actionCreators';\nimport { store } from '@/index';\n\nconst useOperationList = (toolInstance: any) => {\n const { t } = useTranslation();\n const iconStyle = {\n height: '25px',\n lineHeight: '25px',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n };\n\n const empty: IOperationConfig[] = [\n {\n name: t('ClearLabel'),\n key: 'sureClear',\n imgSvg: clearResultSvg,\n hoverSvg: clearResultASvg,\n onClick: () => {\n toolInstance?.clearResult();\n },\n },\n ];\n\n const setQuestion = {\n name: t(toolInstance.valid === true ? 'SetAsInvalid' : 'SetAsValid'),\n key: 'sureQuestion',\n imgSvg: <StopOutlined style={iconStyle} />,\n hoverSvg: <StopOutlined style={{ color: '#666fff', ...iconStyle }} />,\n onClick: () => {\n toolInstance.setValid(!toolInstance.valid);\n },\n };\n\n const copyThePrevious = {\n name: t('CopyThePrevious'),\n key: 'sureCopy',\n imgSvg: copyBackStepSvg,\n hoverSvg: copyBackStepASvg,\n onClick: () => {\n store.dispatch(CopyBackWordResult());\n },\n };\n\n return {\n setQuestion,\n empty,\n copyThePrevious,\n };\n};\n\nexport default useOperationList;\n"],"names":["clearResultSvg","clearResultASvg","copyBackStepSvg","copyBackStepASvg"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAWM,MAAA,gBAAA,GAAmB,CAAC,YAAsB,KAAA;AAC9C,EAAA,MAAM,CAAE,CAAM,CAAA,GAAA,cAAA,EAAA,CAAA;AACd,EAAA,MAAM,SAAY,GAAA;AAAA,IAChB,MAAQ,EAAA,MAAA;AAAA,IACR,UAAY,EAAA,MAAA;AAAA,IACZ,OAAS,EAAA,MAAA;AAAA,IACT,cAAgB,EAAA,QAAA;AAAA,IAChB,UAAY,EAAA,QAAA;AAAA,GAAA,CAAA;AAGd,EAAA,MAAM,KAA4B,GAAA;AAAA,IAChC;AAAA,MACE,MAAM,CAAE,CAAA,YAAA,CAAA;AAAA,MACR,GAAK,EAAA,WAAA;AAAA,MACL,MAAQ,EAAAA,GAAA;AAAA,MACR,QAAU,EAAAC,KAAA;AAAA,MACV,SAAS,MAAM;AACb,QAAc,YAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,YAAA,CAAA,WAAA,EAAA,CAAA;AAAA,OAAA;AAAA,KAAA;AAAA,GAAA,CAAA;AAKpB,EAAA,MAAM,WAAc,GAAA;AAAA,IAClB,IAAM,EAAA,CAAA,CAAE,YAAa,CAAA,KAAA,KAAU,OAAO,cAAiB,GAAA,YAAA,CAAA;AAAA,IACvD,GAAK,EAAA,cAAA;AAAA,IACL,MAAA,sCAAS,YAAD,EAAA;AAAA,MAAc,KAAO,EAAA,SAAA;AAAA,KAAA,CAAA;AAAA,IAC7B,QAAA,sCAAW,YAAD,EAAA;AAAA,MAAc,KAAA,EAAO,cAAE,CAAA,CAAA,KAAA,EAAO,SAAc,CAAA,EAAA,SAAA,CAAA;AAAA,KAAA,CAAA;AAAA,IACtD,SAAS,MAAM;AACb,MAAa,YAAA,CAAA,QAAA,CAAS,CAAC,YAAa,CAAA,KAAA,CAAA,CAAA;AAAA,KAAA;AAAA,GAAA,CAAA;AAIxC,EAAA,MAAM,eAAkB,GAAA;AAAA,IACtB,MAAM,CAAE,CAAA,iBAAA,CAAA;AAAA,IACR,GAAK,EAAA,UAAA;AAAA,IACL,MAAQ,EAAAC,KAAA;AAAA,IACR,QAAU,EAAAC,KAAA;AAAA,IACV,SAAS,MAAM;AACb,MAAA,KAAA,CAAM,QAAS,CAAA,kBAAA,EAAA,CAAA,CAAA;AAAA,KAAA;AAAA,GAAA,CAAA;AAInB,EAAO,OAAA;AAAA,IACL,WAAA;AAAA,IACA,KAAA;AAAA,IACA,eAAA;AAAA,GAAA,CAAA;AAAA;;;;"}
@@ -0,0 +1 @@
1
+ import{PointCloudContext as r}from"../../../../components/pointCloudView/PointCloudContext.js";import{Popover as k}from"antd";import t,{useContext as s,useState as N}from"react";import{stepConfigSelector as B}from"../../../../store/annotation/selectors.js";import{useSelector as D}from"../../../../store/ctx.js";import{PushpinFilled as p,EyeInvisibleFilled as j,EyeFilled as w,CaretDownFilled as H,DeleteOutlined as R}from"@ant-design/icons";import{useHistory as S}from"../../../../components/pointCloudView/hooks/useHistory.js";import{getClassName as o}from"../../../../utils/dom.js";const V=({attribute:e})=>{const c=s(r),{pointCloudBoxList:l,hideAttributes:i,toggleAttributesVisible:b,polygonList:E,setPolygonList:g,setPointCloudResult:L,reRender:P}=c,[C,v]=N(!1),{pushHistoryWithList:x}=S(),f=[...l,...E].filter(n=>n.attribute===e.value),A=()=>{b(e.value)},F=i.includes(e.value),y=({trackID:n,order:a})=>n||a,h=n=>{if(f.length===0)return;const a=E.filter(d=>n!==d.attribute),m=l.filter(d=>n!==d.attribute);g(a),L(m),P(m,a),x({pointCloudBoxList:m,polygonList:a})};return t.createElement(t.Fragment,null,t.createElement("div",{className:o("annotated-attribute","item")},F?t.createElement(j,{onClick:A}):t.createElement(w,{onClick:A}),t.createElement(H,{rotate:C?270:0,onClick:()=>{v(!C)}}),t.createElement("span",{className:o("annotated-attribute","item","text")},e.key),t.createElement(R,{onClick:()=>h(e.value)})),f.map(n=>t.createElement("div",{key:y(n),style:{paddingLeft:54}},`${y(n)}.${e.key}`)))},u=()=>{const e=D(B),{attrPanelLayout:c,setAttrPanelLayout:l}=s(r);return t.createElement("div",{className:o("annotated-attribute")},c?t.createElement("div",{className:o("annotated-attribute","text")},t.createElement("span",null,"\u6807\u6CE8\u7ED3\u679C"),t.createElement("span",{className:o("annotated-attribute","pin"),onClick:()=>{l("")}},t.createElement(p,null),"\u53D6\u6D88\u56FA\u5B9A")):t.createElement("div",{className:o("annotated-attribute","text")},t.createElement("span",{onClick:()=>{l("left")},className:o("annotated-attribute","pin")},t.createElement(p,null),"\u56FA\u5B9A\u5728\u5DE6\u4FA7"),t.createElement("span",{onClick:()=>{l("right")},className:o("annotated-attribute","pin")},t.createElement(p,null),"\u56FA\u5B9A\u5728\u53F3\u4FA7")),t.createElement("div",null,e.attributeList.map(i=>t.createElement(V,{attribute:i,key:i.value}))))},I=()=>{const{attrPanelLayout:e}=s(r);return e==="left"?t.createElement(u,null):null},$=()=>{const{attrPanelLayout:e}=s(r);return e==="right"?t.createElement(u,null):null},G=()=>{const{attrPanelLayout:e}=s(r);return e?null:t.createElement(k,{placement:"topLeft",content:t.createElement(u,null),overlayClassName:o("annotated-attribute","popover")},t.createElement("span",null,"\u56FE\u7247\u5217\u8868"))};export{G as AnnotatedAttributesIcon,u as AnnotatedAttributesPanel,I as AnnotatedAttributesPanelFixedLeft,$ as AnnotatedAttributesPanelFixedRight};
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../../../src/views/MainView/toolFooter/AnnotatedAttributes/index.tsx"],"sourcesContent":["import { PointCloudContext } from '@/components/pointCloudView/PointCloudContext';\nimport { Popover } from 'antd';\nimport React, { useContext, useState } from 'react';\nimport { stepConfigSelector } from '@/store/annotation/selectors';\nimport { useSelector } from '@/store/ctx';\nimport { IPointCloudConfig } from '@labelbee/lb-utils';\nimport {\n CaretDownFilled,\n DeleteOutlined,\n EyeFilled,\n EyeInvisibleFilled,\n PushpinFilled,\n} from '@ant-design/icons';\nimport { IInputList } from '@/types/main';\nimport { useHistory } from '@/components/pointCloudView/hooks/useHistory';\nimport { getClassName } from '@/utils/dom';\n\nconst AnnotatedAttributesItem = ({ attribute }: { attribute: IInputList }) => {\n const pointCloudCtx = useContext(PointCloudContext);\n const {\n pointCloudBoxList,\n hideAttributes,\n toggleAttributesVisible,\n polygonList,\n setPolygonList,\n setPointCloudResult,\n reRender,\n } = pointCloudCtx;\n\n const [expanded, setExpanded] = useState(false);\n\n const { pushHistoryWithList } = useHistory();\n\n const pointCloudListForSpecAttribute = [...pointCloudBoxList, ...polygonList].filter(\n (i) => i.attribute === attribute.value,\n );\n\n const onVisibleChange = () => {\n toggleAttributesVisible(attribute.value);\n };\n\n const isHidden = hideAttributes.includes(attribute.value);\n\n const getBoxID = ({ trackID, order }: { trackID?: number; order?: number }) => {\n return trackID ? trackID : order;\n };\n\n const deleteGraphByAttr = (attribute: string) => {\n if (pointCloudListForSpecAttribute.length === 0) {\n return;\n }\n\n const newPolygonList = polygonList.filter((i) => attribute !== i.attribute);\n const newPointCloudList = pointCloudBoxList.filter((i) => attribute !== i.attribute);\n setPolygonList(newPolygonList);\n setPointCloudResult(newPointCloudList);\n\n reRender(newPointCloudList, newPolygonList);\n\n pushHistoryWithList({ pointCloudBoxList: newPointCloudList, polygonList: newPolygonList });\n };\n\n return (\n <>\n <div className={getClassName('annotated-attribute', 'item')}>\n {isHidden ? (\n <EyeInvisibleFilled onClick={onVisibleChange} />\n ) : (\n <EyeFilled onClick={onVisibleChange} />\n )}\n <CaretDownFilled\n rotate={expanded ? 270 : 0}\n onClick={() => {\n setExpanded(!expanded);\n }}\n />\n <span className={getClassName('annotated-attribute', 'item', 'text')}>{attribute.key}</span>\n\n <DeleteOutlined onClick={() => deleteGraphByAttr(attribute.value)} />\n </div>\n {pointCloudListForSpecAttribute.map((box) => {\n return (\n <div key={getBoxID(box)} style={{ paddingLeft: 54 }}>\n {`${getBoxID(box)}.${attribute.key}`}\n </div>\n );\n })}\n </>\n );\n};\n\nexport const AnnotatedAttributesPanel = () => {\n const stepConfig: IPointCloudConfig = useSelector(stepConfigSelector);\n const { attrPanelLayout, setAttrPanelLayout } = useContext(PointCloudContext);\n\n return (\n <div className={getClassName('annotated-attribute')}>\n {attrPanelLayout ? (\n <div className={getClassName('annotated-attribute', 'text')}>\n <span>标注结果</span>\n <span\n className={getClassName('annotated-attribute', 'pin')}\n onClick={() => {\n setAttrPanelLayout('');\n }}\n >\n <PushpinFilled />\n 取消固定\n </span>\n </div>\n ) : (\n <div className={getClassName('annotated-attribute', 'text')}>\n <span\n onClick={() => {\n setAttrPanelLayout('left');\n }}\n className={getClassName('annotated-attribute', 'pin')}\n >\n <PushpinFilled />\n 固定在左侧\n </span>\n <span\n onClick={() => {\n setAttrPanelLayout('right');\n }}\n className={getClassName('annotated-attribute', 'pin')}\n >\n <PushpinFilled />\n 固定在右侧\n </span>\n </div>\n )}\n\n <div>\n {stepConfig.attributeList.map((i) => (\n <AnnotatedAttributesItem attribute={i} key={i.value} />\n ))}\n </div>\n </div>\n );\n};\n\nexport const AnnotatedAttributesPanelFixedLeft = () => {\n const { attrPanelLayout } = useContext(PointCloudContext);\n if (attrPanelLayout === 'left') {\n return <AnnotatedAttributesPanel />;\n }\n\n return null;\n};\n\nexport const AnnotatedAttributesPanelFixedRight = () => {\n const { attrPanelLayout } = useContext(PointCloudContext);\n\n if (attrPanelLayout === 'right') {\n return <AnnotatedAttributesPanel />;\n }\n return null;\n};\n\nexport const AnnotatedAttributesIcon = () => {\n const { attrPanelLayout } = useContext(PointCloudContext);\n\n if (attrPanelLayout) {\n return null;\n }\n\n return (\n <Popover\n placement='topLeft'\n content={<AnnotatedAttributesPanel />}\n overlayClassName={getClassName('annotated-attribute', 'popover')}\n >\n <span>图片列表</span>\n </Popover>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- import{prefix as L}from"../../../constant/index.js";import{PageBackward as f,PageForward as x,PageJump as T}from"../../../store/annotation/actionCreators.js";import{getTotalPage as N}from"../../../store/annotation/reducer.js";import{Divider as k}from"antd/es";import t from"react";import{useTranslation as B}from"react-i18next";import{connect as S}from"react-redux";import{LabelBeeContext as w,useDispatch as D}from"../../../store/ctx.js";import P from"./FooterTips/index.js";import H from"./HiddenTips/index.js";import R from"./PageNumber/index.js";import $ from"./ZoomController/index.js";import{Pagination as J}from"./Pagination.js";import{cTool as K}from"@labelbee/lb-annotation";import{shortCutTable as Z,ToolHotKeyCom as z}from"./FooterTips/ToolHotKey/index.js";const{EPointCloudName:_}=K,l=`${L}-footer`,b=()=>t.createElement(k,{type:"vertical",style:{background:"rgba(153, 153, 153, 1)",height:"16px"}}),E=({footerTips:e,hiddenTips:r,pageNumber:s,pagination:m,zoomController:a,curItems:c,footerDivider:u})=>t.createElement(t.Fragment,null,e,t.createElement("div",{style:{flex:1}}),r,s,m,c,u,a),q=e=>{var r;const{stepList:s,step:m,basicResultList:a,basicIndex:c,mode:u="light",footer:i=E,skipBeforePageTurning:o}=e,n=D(),{t:y}=B(),p=(r=s[m-1])!=null?r:{},I=!!p.dataSourceStep,h=()=>{if(o){o(()=>n(f()));return}n(f())},j=()=>{if(o){o(()=>n(x()));return}n(x())},v=F=>{const g=~~F-1;if(o){o(()=>n(T(g)));return}n(T(g))},d=t.createElement(J,{imgIndex:e.imgIndex,totalPage:e.totalPage,pageJump:v,pageBackward:h,pageForward:j,footerCls:l}),C=I&&a.length>0?t.createElement("span",null,y("curItems",{current:c+1,total:a.length})):null;return typeof i=="function"?i===E&&p.tool===_.PointCloud?t.createElement("div",{className:`${l}`,style:e.style},t.createElement(P,null),t.createElement("div",{style:{flex:1}}),d):t.createElement("div",{className:`${l}`,style:e.style},i({footerTips:t.createElement(P,null),hiddenTips:t.createElement(H,null),pageNumber:t.createElement(R,null),pagination:d,zoomController:t.createElement($,{mode:u}),curItems:C,footerDivider:t.createElement(b,null),shortCutTable:Z,ToolHotKeyCom:z})):i},A=e=>({totalPage:N(e.annotation),imgIndex:e.annotation.imgIndex,stepList:e.annotation.stepList,step:e.annotation.step,basicIndex:e.annotation.basicIndex,basicResultList:e.annotation.basicResultList,skipBeforePageTurning:e.annotation.skipBeforePageTurning});var G=S(A,null,null,{context:w})(q);export{b as FooterDivider,G as default,l as footerCls};
1
+ import{prefix as L}from"../../../constant/index.js";import{PageBackward as g,PageForward as x,PageJump as b}from"../../../store/annotation/actionCreators.js";import{getTotalPage as N}from"../../../store/annotation/reducer.js";import{Divider as k}from"antd/es";import e from"react";import{useTranslation as B}from"react-i18next";import{connect as S}from"react-redux";import{LabelBeeContext as w,useDispatch as A}from"../../../store/ctx.js";import T from"./FooterTips/index.js";import D from"./HiddenTips/index.js";import H from"./PageNumber/index.js";import R from"./ZoomController/index.js";import{Pagination as $}from"./Pagination.js";import{AnnotatedAttributesIcon as J}from"./AnnotatedAttributes/index.js";import{cTool as K}from"@labelbee/lb-annotation";import{shortCutTable as Z,ToolHotKeyCom as z}from"./FooterTips/ToolHotKey/index.js";const{EPointCloudName:_}=K,l=`${L}-footer`,P=()=>e.createElement(k,{type:"vertical",style:{background:"rgba(153, 153, 153, 1)",height:"16px"}}),E=({footerTips:t,hiddenTips:r,pageNumber:s,pagination:m,zoomController:a,curItems:c,footerDivider:u})=>e.createElement(e.Fragment,null,t,e.createElement("div",{style:{flex:1}}),r,s,m,c,u,a),q=t=>{var r;const{stepList:s,step:m,basicResultList:a,basicIndex:c,mode:u="light",footer:i=E,skipBeforePageTurning:o}=t,n=A(),{t:I}=B(),d=(r=s[m-1])!=null?r:{},j=!!d.dataSourceStep,y=()=>{if(o){o(()=>n(g()));return}n(g())},h=()=>{if(o){o(()=>n(x()));return}n(x())},v=F=>{const f=~~F-1;if(o){o(()=>n(b(f)));return}n(b(f))},p=e.createElement($,{imgIndex:t.imgIndex,totalPage:t.totalPage,pageJump:v,pageBackward:y,pageForward:h,footerCls:l}),C=j&&a.length>0?e.createElement("span",null,I("curItems",{current:c+1,total:a.length})):null;return typeof i=="function"?i===E&&d.tool===_.PointCloud?e.createElement("div",{className:`${l}`,style:t.style},e.createElement(T,null),e.createElement(J,null),e.createElement("div",{style:{flex:1}}),p):e.createElement("div",{className:`${l}`,style:t.style},i({footerTips:e.createElement(T,null),hiddenTips:e.createElement(D,null),pageNumber:e.createElement(H,null),pagination:p,zoomController:e.createElement(R,{mode:u}),curItems:C,footerDivider:e.createElement(P,null),shortCutTable:Z,ToolHotKeyCom:z})):i},G=t=>({totalPage:N(t.annotation),imgIndex:t.annotation.imgIndex,stepList:t.annotation.stepList,step:t.annotation.step,basicIndex:t.annotation.basicIndex,basicResultList:t.annotation.basicResultList,skipBeforePageTurning:t.annotation.skipBeforePageTurning});var M=S(G,null,null,{context:w})(q);export{P as FooterDivider,M as default,l as footerCls};
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../src/views/MainView/toolFooter/index.tsx"],"sourcesContent":["import { prefix } from '@/constant';\nimport { AppState } from '@/store';\nimport { PageBackward, PageForward, PageJump } from '@/store/annotation/actionCreators';\nimport { getTotalPage } from '@/store/annotation/reducer';\nimport { RenderFooter } from '@/types/main';\nimport { IStepInfo } from '@/types/step';\nimport { Divider } from 'antd/es';\nimport React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { connect } from 'react-redux';\nimport { useDispatch, LabelBeeContext } from '@/store/ctx';\nimport FooterTips from './FooterTips';\nimport HiddenTips from './HiddenTips';\nimport PageNumber from './PageNumber';\nimport ZoomController from './ZoomController';\nimport { Pagination } from './Pagination';\nimport { cTool } from '@labelbee/lb-annotation';\nimport { shortCutTable, ToolHotKeyCom } from './FooterTips/ToolHotKey';\n\nconst { EPointCloudName } = cTool;\n\nexport type FooterTheme = 'light' | 'dark';\ninterface IProps {\n totalPage: number;\n imgIndex: number;\n style?: { [key: string]: any };\n stepList: IStepInfo[];\n step: number;\n basicResultList: any[];\n basicIndex: number;\n mode?: FooterTheme; // 后面通过 context 的形式进行编写\n footer?: RenderFooter;\n\n skipBeforePageTurning?: (pageTurning: Function) => void;\n}\n\nexport const footerCls = `${prefix}-footer`;\n\nexport const FooterDivider = () => (\n <Divider type='vertical' style={{ background: 'rgba(153, 153, 153, 1)', height: '16px' }} />\n);\n\n/**\n * default footer renderer\n * @param param0\n * @returns\n */\nconst renderFooter: RenderFooter = ({\n footerTips,\n hiddenTips,\n pageNumber,\n pagination,\n zoomController,\n curItems,\n footerDivider,\n}) => {\n return (\n <>\n {footerTips}\n <div style={{ flex: 1 }} />\n {hiddenTips}\n {pageNumber}\n {pagination}\n {curItems}\n {footerDivider}\n {zoomController}\n </>\n );\n};\n\nconst ToolFooter: React.FC<IProps> = (props: IProps) => {\n const {\n stepList,\n step,\n basicResultList,\n basicIndex,\n mode = 'light',\n footer = renderFooter,\n skipBeforePageTurning,\n } = props;\n\n const dispatch = useDispatch();\n const { t } = useTranslation();\n const stepInfo = stepList[step - 1] ?? {};\n const hasSourceStep = !!stepInfo.dataSourceStep;\n\n const pageBackward = () => {\n if (skipBeforePageTurning) {\n skipBeforePageTurning(() => dispatch(PageBackward()));\n return;\n }\n\n dispatch(PageBackward());\n };\n\n const pageForward = () => {\n if (skipBeforePageTurning) {\n skipBeforePageTurning(() => dispatch(PageForward()));\n return;\n }\n dispatch(PageForward());\n };\n\n const toPageNumber = (page: string) => {\n const imgIndex = ~~page - 1;\n if (skipBeforePageTurning) {\n skipBeforePageTurning(() => dispatch(PageJump(imgIndex)));\n return;\n }\n dispatch(PageJump(imgIndex));\n };\n\n const pagination = (\n <Pagination\n imgIndex={props.imgIndex}\n totalPage={props.totalPage}\n pageJump={toPageNumber}\n pageBackward={pageBackward}\n pageForward={pageForward}\n footerCls={footerCls}\n />\n );\n\n const curItems =\n hasSourceStep && basicResultList.length > 0 ? (\n <span>{t('curItems', { current: basicIndex + 1, total: basicResultList.length })}</span>\n ) : null;\n\n if (typeof footer === 'function') {\n if (footer === renderFooter && stepInfo.tool === EPointCloudName.PointCloud) {\n return (\n <div className={`${footerCls}`} style={props.style}>\n <FooterTips />\n <div style={{ flex: 1 }} />\n {pagination}\n </div>\n );\n }\n\n return (\n <div className={`${footerCls}`} style={props.style}>\n {footer({\n footerTips: <FooterTips />,\n hiddenTips: <HiddenTips />,\n pageNumber: <PageNumber />,\n pagination,\n zoomController: <ZoomController mode={mode} />,\n curItems,\n footerDivider: <FooterDivider />,\n shortCutTable,\n ToolHotKeyCom,\n })}\n </div>\n );\n }\n\n return footer;\n};\n\nconst mapStateToProps = (state: AppState) => ({\n totalPage: getTotalPage(state.annotation),\n imgIndex: state.annotation.imgIndex,\n stepList: state.annotation.stepList,\n step: state.annotation.step,\n basicIndex: state.annotation.basicIndex,\n basicResultList: state.annotation.basicResultList,\n skipBeforePageTurning: state.annotation.skipBeforePageTurning,\n});\n\nexport default connect(mapStateToProps, null, null, { context: LabelBeeContext })(ToolFooter);\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../src/views/MainView/toolFooter/index.tsx"],"sourcesContent":["import { prefix } from '@/constant';\nimport { AppState } from '@/store';\nimport { PageBackward, PageForward, PageJump } from '@/store/annotation/actionCreators';\nimport { getTotalPage } from '@/store/annotation/reducer';\nimport { RenderFooter } from '@/types/main';\nimport { IStepInfo } from '@/types/step';\nimport { Divider } from 'antd/es';\nimport React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { connect } from 'react-redux';\nimport { useDispatch, LabelBeeContext } from '@/store/ctx';\nimport FooterTips from './FooterTips';\nimport HiddenTips from './HiddenTips';\nimport PageNumber from './PageNumber';\nimport ZoomController from './ZoomController';\nimport { Pagination } from './Pagination';\nimport { AnnotatedAttributesIcon } from './AnnotatedAttributes';\nimport { cTool } from '@labelbee/lb-annotation';\nimport { shortCutTable, ToolHotKeyCom } from './FooterTips/ToolHotKey';\n\nconst { EPointCloudName } = cTool;\n\nexport type FooterTheme = 'light' | 'dark';\ninterface IProps {\n totalPage: number;\n imgIndex: number;\n style?: { [key: string]: any };\n stepList: IStepInfo[];\n step: number;\n basicResultList: any[];\n basicIndex: number;\n mode?: FooterTheme; // 后面通过 context 的形式进行编写\n footer?: RenderFooter;\n\n skipBeforePageTurning?: (pageTurning: Function) => void;\n}\n\nexport const footerCls = `${prefix}-footer`;\n\nexport const FooterDivider = () => (\n <Divider type='vertical' style={{ background: 'rgba(153, 153, 153, 1)', height: '16px' }} />\n);\n\n/**\n * default footer renderer\n * @param param0\n * @returns\n */\nconst renderFooter: RenderFooter = ({\n footerTips,\n hiddenTips,\n pageNumber,\n pagination,\n zoomController,\n curItems,\n footerDivider,\n}) => {\n return (\n <>\n {footerTips}\n <div style={{ flex: 1 }} />\n {hiddenTips}\n {pageNumber}\n {pagination}\n {curItems}\n {footerDivider}\n {zoomController}\n </>\n );\n};\n\nconst ToolFooter: React.FC<IProps> = (props: IProps) => {\n const {\n stepList,\n step,\n basicResultList,\n basicIndex,\n mode = 'light',\n footer = renderFooter,\n skipBeforePageTurning,\n } = props;\n\n const dispatch = useDispatch();\n const { t } = useTranslation();\n const stepInfo = stepList[step - 1] ?? {};\n const hasSourceStep = !!stepInfo.dataSourceStep;\n\n const pageBackward = () => {\n if (skipBeforePageTurning) {\n skipBeforePageTurning(() => dispatch(PageBackward()));\n return;\n }\n\n dispatch(PageBackward());\n };\n\n const pageForward = () => {\n if (skipBeforePageTurning) {\n skipBeforePageTurning(() => dispatch(PageForward()));\n return;\n }\n dispatch(PageForward());\n };\n\n const toPageNumber = (page: string) => {\n const imgIndex = ~~page - 1;\n if (skipBeforePageTurning) {\n skipBeforePageTurning(() => dispatch(PageJump(imgIndex)));\n return;\n }\n dispatch(PageJump(imgIndex));\n };\n\n const pagination = (\n <Pagination\n imgIndex={props.imgIndex}\n totalPage={props.totalPage}\n pageJump={toPageNumber}\n pageBackward={pageBackward}\n pageForward={pageForward}\n footerCls={footerCls}\n />\n );\n\n const curItems =\n hasSourceStep && basicResultList.length > 0 ? (\n <span>{t('curItems', { current: basicIndex + 1, total: basicResultList.length })}</span>\n ) : null;\n\n if (typeof footer === 'function') {\n if (footer === renderFooter && stepInfo.tool === EPointCloudName.PointCloud) {\n return (\n <div className={`${footerCls}`} style={props.style}>\n <FooterTips />\n <AnnotatedAttributesIcon />\n <div style={{ flex: 1 }} />\n {pagination}\n </div>\n );\n }\n\n return (\n <div className={`${footerCls}`} style={props.style}>\n {footer({\n footerTips: <FooterTips />,\n hiddenTips: <HiddenTips />,\n pageNumber: <PageNumber />,\n pagination,\n zoomController: <ZoomController mode={mode} />,\n curItems,\n footerDivider: <FooterDivider />,\n shortCutTable,\n ToolHotKeyCom,\n })}\n </div>\n );\n }\n\n return footer;\n};\n\nconst mapStateToProps = (state: AppState) => ({\n totalPage: getTotalPage(state.annotation),\n imgIndex: state.annotation.imgIndex,\n stepList: state.annotation.stepList,\n step: state.annotation.step,\n basicIndex: state.annotation.basicIndex,\n basicResultList: state.annotation.basicResultList,\n skipBeforePageTurning: state.annotation.skipBeforePageTurning,\n});\n\nexport default connect(mapStateToProps, null, null, { context: LabelBeeContext })(ToolFooter);\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@labelbee/lb-components",
3
- "version": "1.8.0-alpha.9",
3
+ "version": "1.9.0-alpha.0",
4
4
  "description": "Provide a complete library of annotation components",
5
5
  "main": "./dist/index.js",
6
6
  "es": "./es/index.js",
@@ -41,8 +41,8 @@
41
41
  },
42
42
  "dependencies": {
43
43
  "@ant-design/icons": "^4.6.2",
44
- "@labelbee/lb-annotation": "^1.12.0-alpha.9",
45
- "@labelbee/lb-utils": "^1.5.0-alpha.9",
44
+ "@labelbee/lb-annotation": "^1.13.0-alpha.0",
45
+ "@labelbee/lb-utils": "^1.6.0-alpha.0",
46
46
  "ahooks": "^3.4.0",
47
47
  "classnames": "^2.3.0",
48
48
  "lodash": "^4.17.21",
@@ -97,5 +97,5 @@
97
97
  "path": "node_modules/cz-conventional-changelog"
98
98
  }
99
99
  },
100
- "gitHead": "6aa9606a4334bd39d8fe33bb14274ccc462cecb2"
100
+ "gitHead": "64d6eb967546eab89016dc7dbc4b854bcb115037"
101
101
  }
@@ -1,4 +0,0 @@
1
- var img = "data:image/svg+xml,%3c%3fxml version='1.0' standalone='no'%3f%3e%3csvg xmlns='http://www.w3.org/2000/svg' class='icon' viewBox='0 0 1024 1024'%3e %3cpath d='M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z'/%3e%3c/svg%3e";
2
-
3
- export { img as default };
4
- //# sourceMappingURL=icon_copyBackwardResult.svg.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"icon_copyBackwardResult.svg.js","sources":["../../../../src/assets/annotation/toolHotKeyIcon/icon_copyBackwardResult.svg"],"sourcesContent":["var img = \"data:image/svg+xml,%3c%3fxml version='1.0' standalone='no'%3f%3e%3csvg xmlns='http://www.w3.org/2000/svg' class='icon' viewBox='0 0 1024 1024'%3e %3cpath d='M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z'/%3e%3c/svg%3e\";\n export default img;"],"names":[],"mappings":"AAAG,IAAC,GAAG,GAAG;;;;"}
@@ -1,10 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="12.004" height="11.999" viewBox="0 0 12.004 11.999">
2
- <defs>
3
- <style>
4
- .cls-1 {
5
- fill: #999;
6
- }
7
- </style>
8
- </defs>
9
- <path id="icon_clearSmall" class="cls-1" d="M17526.469-1204.464l-.678-.678,1.752-1.751a.489.489,0,0,0-.006-.691.482.482,0,0,0-.689,0l-1.752,1.751-1.039-1.043,1.752-1.751a.484.484,0,0,0,0-.691.489.489,0,0,0-.7,0l-1.752,1.751-1.037-1.038,1.75-1.756a.484.484,0,0,0,0-.691.482.482,0,0,0-.689,0l-1.752,1.751-.682-.678a1,1,0,0,1,0-1.417l3.1-3.1a.972.972,0,0,1,0-1.384.981.981,0,0,1,1.387,0l2.422,2.422,1.736-1.732a1.47,1.47,0,0,1,2.076,0,1.476,1.476,0,0,1,0,2.081l-1.73,1.731,2.426,2.427a.98.98,0,0,1,0,1.386.985.985,0,0,1-1.391,0l-3.1,3.1a.989.989,0,0,1-.707.294A.987.987,0,0,1,17526.469-1204.464Z" transform="translate(-17520.656 1216.17)"/>
10
- </svg>
@@ -1,10 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="12.004" height="11.999" viewBox="0 0 12.004 11.999">
2
- <defs>
3
- <style>
4
- .cls-1 {
5
- fill: #666fff;
6
- }
7
- </style>
8
- </defs>
9
- <path id="icon_clearSmall_a" class="cls-1" d="M17526.469-1204.464l-.678-.678,1.752-1.751a.489.489,0,0,0-.006-.691.482.482,0,0,0-.689,0l-1.752,1.751-1.039-1.043,1.752-1.751a.484.484,0,0,0,0-.691.489.489,0,0,0-.7,0l-1.752,1.751-1.037-1.038,1.75-1.756a.484.484,0,0,0,0-.691.482.482,0,0,0-.689,0l-1.752,1.751-.682-.678a1,1,0,0,1,0-1.417l3.1-3.1a.972.972,0,0,1,0-1.384.981.981,0,0,1,1.387,0l2.422,2.422,1.736-1.732a1.47,1.47,0,0,1,2.076,0,1.476,1.476,0,0,1,0,2.081l-1.73,1.731,2.426,2.427a.98.98,0,0,1,0,1.386.985.985,0,0,1-1.391,0l-3.1,3.1a.989.989,0,0,1-.707.294A.987.987,0,0,1,17526.469-1204.464Z" transform="translate(-17520.656 1216.17)"/>
10
- </svg>
@@ -1,23 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="21" height="23.011" viewBox="0 0 21 23.011">
2
- <defs>
3
- <style>
4
- .cls-1 {
5
- fill: #fff;
6
- }
7
-
8
- .cls-2 {
9
- filter: url(#形状结合);
10
- }
11
- </style>
12
- <filter id="形状结合" x="0" y="0" width="21" height="23.011" filterUnits="userSpaceOnUse">
13
- <feOffset dy="1" input="SourceAlpha"/>
14
- <feGaussianBlur stdDeviation="1.5" result="blur"/>
15
- <feFlood flood-opacity="0.302"/>
16
- <feComposite operator="in" in2="blur"/>
17
- <feComposite in="SourceGraphic"/>
18
- </filter>
19
- </defs>
20
- <g class="cls-2" transform="matrix(1, 0, 0, 1, 0, 0)">
21
- <path id="形状结合-2" data-name="形状结合" class="cls-1" d="M5.252,13.674,0,7.744H12l-5.251,5.93a1,1,0,0,1-1.5,0ZM0,7.744V1A1,1,0,0,1,1,0H11a1,1,0,0,1,1,1V7.744Z" transform="translate(4.5 3.5)"/>
22
- </g>
23
- </svg>