@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.
- package/dist/components/pointCloudView/PointCloud2DView.js +1 -1
- package/dist/components/pointCloudView/PointCloudBackView.js +1 -1
- package/dist/components/pointCloudView/PointCloudContext.js +1 -1
- package/dist/components/pointCloudView/PointCloudListener.js +1 -1
- package/dist/components/pointCloudView/PointCloudSideView.js +1 -1
- package/dist/components/pointCloudView/PointCloudTopView.js +1 -1
- package/dist/components/pointCloudView/hooks/useBoxes.js +1 -1
- package/dist/components/pointCloudView/hooks/usePointCloudViews.js +1 -1
- package/dist/components/pointCloudView/hooks/useSingleBox.js +1 -1
- package/dist/components/pointCloudView/hooks/useStatus.js +1 -1
- package/dist/components/pointCloudView/index.js +1 -1
- package/dist/index.css +43 -0
- package/dist/store/annotation/selectors.js +1 -0
- package/dist/types/components/AnnotationView/index.d.ts +1 -1
- package/dist/types/components/pointCloudView/PointCloudContext.d.ts +8 -1
- package/dist/types/components/pointCloudView/hooks/usePointCloudViews.d.ts +3 -16
- package/dist/types/components/pointCloudView/hooks/useSingleBox.d.ts +4 -1
- package/dist/types/components/videoPlayer/types.d.ts +1 -1
- package/dist/types/store/annotation/selectors.d.ts +7 -0
- package/dist/types/store/annotation/types.d.ts +3 -3
- package/dist/types/store/imgAttribute/types.d.ts +1 -1
- package/dist/types/store/index.d.ts +1 -1
- package/dist/types/store/toolStyle/types.d.ts +1 -1
- package/dist/types/utils/dom.d.ts +2 -2
- package/dist/types/views/MainView/toolFooter/AnnotatedAttributes/index.d.ts +4 -0
- package/dist/types/views/MainView/toolFooter/index.d.ts +1 -1
- package/dist/views/MainView/toolFooter/AnnotatedAttributes/index.js +1 -0
- package/dist/views/MainView/toolFooter/index.js +1 -1
- package/es/assets/annotation/rectTool/icon_rectPattern.svg.js +1 -4
- package/es/components/ImageError/index.js +1 -53
- package/es/components/pointCloudView/PointCloud2DView.js +1 -1
- package/es/components/pointCloudView/PointCloud2DView.js.map +1 -1
- package/es/components/pointCloudView/PointCloudBackView.js +1 -1
- package/es/components/pointCloudView/PointCloudBackView.js.map +1 -1
- package/es/components/pointCloudView/PointCloudContext.js +1 -1
- package/es/components/pointCloudView/PointCloudContext.js.map +1 -1
- package/es/components/pointCloudView/PointCloudListener.js +1 -1
- package/es/components/pointCloudView/PointCloudListener.js.map +1 -1
- package/es/components/pointCloudView/PointCloudSideView.js +1 -1
- package/es/components/pointCloudView/PointCloudSideView.js.map +1 -1
- package/es/components/pointCloudView/PointCloudTopView.js +1 -1
- package/es/components/pointCloudView/PointCloudTopView.js.map +1 -1
- package/es/components/pointCloudView/hooks/useBoxes.js +1 -1
- package/es/components/pointCloudView/hooks/useBoxes.js.map +1 -1
- package/es/components/pointCloudView/hooks/usePointCloudBoxes.js +119 -0
- package/es/components/pointCloudView/hooks/usePointCloudBoxes.js.map +1 -0
- package/es/components/pointCloudView/hooks/usePointCloudViews.js +1 -1
- package/es/components/pointCloudView/hooks/usePointCloudViews.js.map +1 -1
- package/es/components/pointCloudView/hooks/usePolygon.js.map +1 -1
- package/es/components/pointCloudView/hooks/useSingleBox.js +1 -1
- package/es/components/pointCloudView/hooks/useSingleBox.js.map +1 -1
- package/es/components/pointCloudView/hooks/useStatus.js +1 -1
- package/es/components/pointCloudView/hooks/useStatus.js.map +1 -1
- package/es/components/pointCloudView/index.js +1 -1
- package/es/components/pointCloudView/index.js.map +1 -1
- package/es/components/pointCloudView/useSingleBox.js +44 -0
- package/es/components/pointCloudView/useSingleBox.js.map +1 -0
- package/es/index.css +43 -0
- package/es/store/annotation/selectors.js +1 -0
- package/es/store/annotation/selectors.js.map +1 -0
- package/es/views/MainView/sidebar/GeneralOperation/OperationList.js +77 -0
- package/es/views/MainView/sidebar/GeneralOperation/OperationList.js.map +1 -0
- package/es/views/MainView/toolFooter/AnnotatedAttributes/index.js +1 -0
- package/es/views/MainView/toolFooter/AnnotatedAttributes/index.js.map +1 -0
- package/es/views/MainView/toolFooter/index.js +1 -1
- package/es/views/MainView/toolFooter/index.js.map +1 -1
- package/package.json +4 -4
- package/es/assets/annotation/toolHotKeyIcon/icon_copyBackwardResult.svg.js +0 -4
- package/es/assets/annotation/toolHotKeyIcon/icon_copyBackwardResult.svg.js.map +0 -1
- package/es/assets/cssIcon/annotation/icon_clearSmall.svg +0 -10
- package/es/assets/cssIcon/annotation/icon_clearSmall_a.svg +0 -10
- package/es/assets/cssIcon/slide_btn.svg +0 -23
- package/es/components/pointCloudView/components/UnifiedParamsModal/index.js +0 -228
- package/es/components/pointCloudView/components/UnifiedParamsModal/index.js.map +0 -1
- package/es/components/pointCloudView/data.js +0 -4
- package/es/components/pointCloudView/data.js.map +0 -1
- package/es/hooks/useConfig.js +0 -18
- 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 {
|
|
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
|
|
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":";;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,MAAM,CAAE,cAAmB,CAAA,GAAA,WAAA,CAAA;AAGpB,MAAM,eAAe,MAAM;AAChC,EAAM,MAAA;AAAA,IACJ,iBAAA;AAAA,IACA,mBAAA;AAAA,IACA,eAAA;AAAA,IACA,gBAAA;AAAA,IACA,gBAAA;AAAA,IACA,WAAA;AAAA,IACA,UAAA;AAAA,IACA,gBAAA;AAAA,IACA,cAAA;AAAA,IACA,0BAAA;AAAA,IACA,WAAA;AAAA,GAAA,GACE,UAAW,CAAA,iBAAA,CAAA,CAAA;AACf,EAAA,MAAM,CAAE,eAAA,EAAiB,qBAAuB,EAAA,sBAAA,EAAwB,aACtE,CAAA,GAAA,UAAA,EAAA,CAAA;AAEF,EAAA,MAAM,CAAE,mBAAwB,CAAA,GAAA,UAAA,EAAA,CAAA;AAGhC,EAAM,MAAA,WAAA,GAAc,QAAQ,MAAM;AAChC,IAAA,MAAM,WAAW,iBAAkB,CAAA,SAAA,CAAU,CAAC,CAAA,KAAsB,EAAE,EAAO,KAAA,UAAA,CAAA,CAAA;AAC7E,IAAA,IAAI,WAAW,CAAI,CAAA,EAAA;AACjB,MAAA,OAAO,CAAE,IAAA,EAAM,iBAAkB,CAAA,QAAA,CAAA,EAAW,KAAO,EAAA,QAAA,CAAA,CAAA;AAAA,KAAA;AAAA,GAAA,EAEpD,CAAC,UAAY,EAAA,iBAAA,CAAA,CAAA,CAAA;AAGhB,EAAM,MAAA,iBAAA,GAAoB,WACxB,CAAA,CAAC,MAAoC,KAAA;AACnC,IAAA,IAAI,2CAAa,IAAM,EAAA;AACrB,MAAA,iBAAA,CAAkB,OAAO,WAAY,CAAA,KAAA,EAAO,GAAG,CAAE,CAAA,KAAA,CAAM,YAAY,IAAM,EAAA,MAAA,CAAA,CAAA,CAAA;AACzE,MAAM,MAAA,oBAAA,GAAuB,EAAE,SAAU,CAAA,iBAAA,CAAA,CAAA;AACzC,MAAoB,mBAAA,CAAA,oBAAA,CAAA,CAAA;AACpB,MAAA,mBAAA,CAAoB,CAAE,iBAAmB,EAAA,oBAAA,CAAA,CAAA,CAAA;AACzC,MAAO,OAAA,oBAAA,CAAA;AAAA,KAAA;AAGT,IAAO,OAAA,iBAAA,CAAA;AAAA,GAAA,EAET,CAAC,UAAY,EAAA,iBAAA,CAAA,CAAA,CAAA;AAIf,EAAA,MAAM,aAAgB,GAAA,WAAA,CACpB,CAAC,MAAA,EAAiC,EAAe,KAAA;AAC/C,IAAA,MAAM,WAAW,iBAAkB,CAAA,SAAA,CAAU,CAAC,CAAA,KAAM,EAAE,EAAO,KAAA,EAAA,CAAA,CAAA;AAE7D,IAAA,IAAI,WAAW,CAAI,CAAA,EAAA;AACjB,MAAA,iBAAA,CAAkB,OAAO,QAAU,EAAA,CAAA,EAAG,CAAE,CAAA,KAAA,CAAM,kBAAkB,QAAW,CAAA,EAAA,MAAA,CAAA,CAAA,CAAA;AAC3E,MAAM,MAAA,oBAAA,GAAuB,EAAE,SAAU,CAAA,iBAAA,CAAA,CAAA;AACzC,MAAoB,mBAAA,CAAA,oBAAA,CAAA,CAAA;AACpB,MAAO,OAAA,oBAAA,CAAA;AAAA,KAAA;AAET,IAAO,OAAA,iBAAA,CAAA;AAAA,GAAA,EAET,CAAC,iBAAA,CAAA,CAAA,CAAA;AAMH,EAAM,MAAA,sBAAA,GAAyB,WAC7B,CAAA,CAAC,EAAe,KAAA;AACd,IAAiB,eAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,eAAA,CAAA,qBAAA,CAAsB,yBAAyB,EAAI,EAAA,IAAA,CAAA,CAAA;AACpE,IAAkB,gBAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,gBAAA,CAAA,qBAAA,CAAsB,yBAAyB,EAAI,EAAA,IAAA,CAAA,CAAA;AACrE,IAAkB,gBAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,gBAAA,CAAA,qBAAA,CAAsB,yBAAyB,EAAI,EAAA,IAAA,CAAA,CAAA;AAAA,GAEvE,EAAA,CAAC,iBAAiB,gBAAkB,EAAA,gBAAA,CAAA,CAAA,CAAA;AAItC,EAAM,MAAA,sBAAA,GAAyB,YAAY,MAAM;AAC/C,IAAA,IAAI,2CAAa,IAAM,EAAA;AACrB,MAAA,MAAM,CAAE,EAAA,EAAI,KAAQ,GAAA,IAAA,CAAA,GAAS,WAAY,CAAA,IAAA,CAAA;AAGzC,MAAA,MAAM,iBAAoB,GAAA,iBAAA,CAAkB,CAAE,KAAA,EAAO,CAAC,KAAA,CAAA,CAAA,CAAA;AAGtD,MAA2B,0BAAA,CAAA,iBAAA,CAAA,CAAA;AAC3B,MAAuB,sBAAA,CAAA,EAAA,CAAA,CAAA;AAAA,KAAA;AAGzB,IAAA,IAAI,eAAiB,EAAA;AACnB,MAAA,qBAAA,CAAsB,aAAK,CAAA,cAAA,CAAA,EAAA,EAAA,eAAA,CAAA,EAAL,CAAsB,KAAA,EAAO,CAAC,eAAgB,CAAA,KAAA,CAAA,CAAA,CAAA,CAAA;AACpE,MAAiB,eAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,eAAA,CAAA,qBAAA,CAAsB,wBAAyB,CAAA,eAAA,CAAgB,EAAI,EAAA,IAAA,CAAA,CAAA;AAAA,KAAA;AAAA,GAErF,EAAA,CAAC,wBAAwB,WAAa,EAAA,eAAA,CAAA,CAAA,CAAA;AAEzC,EAAM,MAAA,eAAA,GAAkB,WACtB,CAAA,CAAC,EAAe,KAAA;AACd,IAAA,MAAM,UAAU,iBAAkB,CAAA,IAAA,CAAK,CAAC,CAAA,KAAM,EAAE,EAAO,KAAA,EAAA,CAAA,CAAA;AAEvD,IAAA,IAAI,OAAS,EAAA;AACX,MAAM,MAAA,CAAE,EAAI,EAAA,GAAA,EAAA,KAAA,GAAQ,IAAS,CAAA,GAAA,OAAA,CAAA;AAG7B,MAAA,MAAM,oBAAuB,GAAA,aAAA,CAAc,CAAE,KAAA,EAAO,CAAC,KAAS,CAAA,EAAA,GAAA,CAAA,CAAA;AAE9D,MAAuB,sBAAA,CAAA,GAAA,CAAA,CAAA;AAEvB,MAAO,OAAA,oBAAA,CAAA;AAAA,KAAA;AAET,IAAuB,sBAAA,CAAA,EAAA,CAAA,CAAA;AAAA,GAEzB,EAAA,CAAC,wBAAwB,iBAAmB,EAAA,WAAA,CAAA,CAAA,CAAA;AAI9C,EAAA,MAAM,eAAkB,GAAA,WAAA,CACtB,CAAC,IAAA,GAAO,eAAe,MAAW,KAAA;AAChC,IAAA,IAAI,CAAC,eAAA,IAAmB,WAAY,CAAA,MAAA,GAAS,CAAG,EAAA;AAC9C,MAAA,OAAA;AAAA,KAAA;AAGF,IAAA,MAAM,CAAE,qBAA0B,CAAA,GAAA,eAAA,CAAA;AAElC,IAAM,MAAA,cAAA,GAAiB,sBAAsB,mBAAoB,CAAA,IAAA,CAAA,CAAA;AACjE,IAAA,IAAI,cAAgB,EAAA;AAClB,MAAe,cAAA,CAAA,cAAA,CAAA,CAAA;AAAA,KAAA;AAAA,GAAA,EAGnB,CAAC,eAAA,CAAA,CAAA,CAAA;AAGH,EAAA,MAAM,gBAAgB,MAAM;AAC1B,IAAA,eAAA,CAAgB,cAAe,CAAA,OAAA,CAAA,CAAA;AAAA,GAAA,CAAA;AAGjC,EAAM,MAAA,mBAAA,GAAsB,CAAC,EAAe,KAAA;AAC1C,IAAA,MAAM,oBAAoB,iBAAkB,CAAA,MAAA,CAAO,CAAC,CAAA,KAAM,EAAE,EAAO,KAAA,EAAA,CAAA,CAAA;AACnE,IAAoB,mBAAA,CAAA,iBAAA,CAAA,CAAA;AACpB,IAAA,gBAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,gBAAA,CAAkB,kBAAmB,CAAA,EAAA,CAAA,CAAA;AACrC,IAAkB,gBAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,gBAAA,CAAA,MAAA,EAAA,CAAA;AAClB,IAA2B,0BAAA,CAAA,iBAAA,CAAA,CAAA;AAAA,GAAA,CAAA;AAM7B,EAAA,MAAM,wCAAwC,MAAM;AAClD,IAAA,IAAI,WAAa,EAAA;AACf,MAAA,mBAAA,CAAoB,YAAY,IAAK,CAAA,EAAA,CAAA,CAAA;AACrC,MAAiB,eAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,eAAA,CAAA,qBAAA,CAAsB,aAAc,CAAA,WAAA,CAAY,IAAK,CAAA,EAAA,CAAA,CAAA;AAAA,KAAA;AAGxE,IAAA,IAAI,eAAiB,EAAA;AACnB,MAAA,aAAA,CAAc,eAAgB,CAAA,EAAA,CAAA,CAAA;AAC9B,MAAiB,eAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,eAAA,CAAA,qBAAA,CAAsB,cAAc,eAAgB,CAAA,EAAA,CAAA,CAAA;AAAA,KAAA;AAAA,GAAA,CAAA;AAIzE,EAAO,OAAA;AAAA,IACL,WAAA;AAAA,IACA,iBAAA;AAAA,IACA,sBAAA;AAAA,IACA,eAAA;AAAA,IACA,aAAe,EAAA,eAAA;AAAA,IACf,aAAA;AAAA,IACA,mBAAA;AAAA,IACA,qCAAA;AAAA,GAAA,CAAA;AAAA;;;;"}
|
|
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:
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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":"
|
|
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.
|
|
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.
|
|
45
|
-
"@labelbee/lb-utils": "^1.
|
|
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": "
|
|
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>
|