@labelbee/lb-components 1.6.0-alpha.2 → 1.6.0-alpha.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/dist/App.js +1 -1
  2. package/dist/components/AnnotationView/index.js +1 -1
  3. package/dist/components/AnnotationView/pointCloudAnnotationView.js +1 -0
  4. package/dist/components/customResizeHook/index.js +1 -1
  5. package/dist/components/pointCloudView/PointCloud2DView.js +1 -1
  6. package/dist/components/pointCloudView/PointCloud3DView.js +1 -1
  7. package/dist/components/pointCloudView/PointCloudBackView.js +1 -1
  8. package/dist/components/pointCloudView/PointCloudListener.js +1 -1
  9. package/dist/components/pointCloudView/PointCloudSideView.js +1 -1
  10. package/dist/components/pointCloudView/PointCloudTopView.js +1 -1
  11. package/dist/components/pointCloudView/hooks/usePointCloudViews.js +1 -1
  12. package/dist/components/pointCloudView/hooks/useSingleBox.js +1 -1
  13. package/dist/hooks/annotation.js +1 -1
  14. package/dist/hooks/useSize.js +1 -1
  15. package/dist/index.css +20 -6
  16. package/dist/index.js +1 -1
  17. package/dist/store/Actions.js +1 -1
  18. package/dist/store/annotation/actionCreators.js +1 -1
  19. package/dist/store/annotation/reducer.js +1 -1
  20. package/dist/types/App.d.ts +1 -0
  21. package/dist/types/components/AnnotationView/index.d.ts +3 -3
  22. package/dist/types/components/AnnotationView/pointCloudAnnotationView.d.ts +10 -0
  23. package/dist/types/components/pointCloudView/hooks/usePointCloudViews.d.ts +2 -0
  24. package/dist/types/hooks/annotation.d.ts +8 -2
  25. package/dist/types/hooks/useSize.d.ts +2 -2
  26. package/dist/types/index.d.ts +2 -1
  27. package/dist/types/store/Actions.d.ts +1 -0
  28. package/dist/types/store/annotation/actionCreators.d.ts +2 -1
  29. package/dist/types/store/annotation/types.d.ts +1 -0
  30. package/dist/types/views/MainView/toolFooter/index.d.ts +2 -1
  31. package/dist/views/MainView/sidebar/GeneralOperation/useOperationList.js +1 -1
  32. package/dist/views/MainView/sidebar/index.js +1 -1
  33. package/dist/views/MainView/toolFooter/index.js +1 -1
  34. package/es/App.js +1 -1
  35. package/es/App.js.map +1 -1
  36. package/es/components/AnnotationView/index.js +1 -1
  37. package/es/components/AnnotationView/index.js.map +1 -1
  38. package/es/components/AnnotationView/pointCloudAnnotationView.js +1 -0
  39. package/es/components/AnnotationView/pointCloudAnnotationView.js.map +1 -0
  40. package/es/components/customResizeHook/index.js +1 -1
  41. package/es/components/customResizeHook/index.js.map +1 -1
  42. package/es/components/pointCloudView/PointCloud2DView.js +1 -1
  43. package/es/components/pointCloudView/PointCloud2DView.js.map +1 -1
  44. package/es/components/pointCloudView/PointCloud3DView.js +1 -1
  45. package/es/components/pointCloudView/PointCloud3DView.js.map +1 -1
  46. package/es/components/pointCloudView/PointCloudBackView.js +1 -1
  47. package/es/components/pointCloudView/PointCloudBackView.js.map +1 -1
  48. package/es/components/pointCloudView/PointCloudListener.js +1 -1
  49. package/es/components/pointCloudView/PointCloudListener.js.map +1 -1
  50. package/es/components/pointCloudView/PointCloudSideView.js +1 -1
  51. package/es/components/pointCloudView/PointCloudSideView.js.map +1 -1
  52. package/es/components/pointCloudView/PointCloudTopView.js +1 -1
  53. package/es/components/pointCloudView/PointCloudTopView.js.map +1 -1
  54. package/es/components/pointCloudView/hooks/usePointCloudViews.js +1 -1
  55. package/es/components/pointCloudView/hooks/usePointCloudViews.js.map +1 -1
  56. package/es/components/pointCloudView/hooks/useSingleBox.js +1 -1
  57. package/es/components/pointCloudView/hooks/useSingleBox.js.map +1 -1
  58. package/es/hooks/annotation.js +1 -1
  59. package/es/hooks/annotation.js.map +1 -1
  60. package/es/hooks/useSize.js +1 -1
  61. package/es/hooks/useSize.js.map +1 -1
  62. package/es/index.css +20 -6
  63. package/es/index.js +1 -1
  64. package/es/index.js.map +1 -1
  65. package/es/store/Actions.js +1 -1
  66. package/es/store/Actions.js.map +1 -1
  67. package/es/store/annotation/actionCreators.js +1 -1
  68. package/es/store/annotation/actionCreators.js.map +1 -1
  69. package/es/store/annotation/reducer.js +1 -1
  70. package/es/store/annotation/reducer.js.map +1 -1
  71. package/es/views/MainView/sidebar/GeneralOperation/useOperationList.js +1 -1
  72. package/es/views/MainView/sidebar/GeneralOperation/useOperationList.js.map +1 -1
  73. package/es/views/MainView/sidebar/index.js +1 -1
  74. package/es/views/MainView/sidebar/index.js.map +1 -1
  75. package/es/views/MainView/toolFooter/index.js +1 -1
  76. package/es/views/MainView/toolFooter/index.js.map +1 -1
  77. package/package.json +4 -4
@@ -14,10 +14,11 @@ interface IProps {
14
14
  basicIndex: number;
15
15
  mode?: FooterTheme;
16
16
  footer?: RenderFooter;
17
+ skipBeforePageTurning?: (pageTurning: Function) => void;
17
18
  }
18
19
  export declare const footerCls: string;
19
20
  export declare const FooterDivider: () => JSX.Element;
20
21
  declare const _default: import("react-redux").ConnectedComponent<React.FC<IProps>, import("react-redux").Omit<IProps & {
21
22
  children?: React.ReactNode;
22
- }, "stepList" | "step" | "imgIndex" | "basicResultList" | "basicIndex" | "totalPage">>;
23
+ }, "stepList" | "step" | "imgIndex" | "basicResultList" | "basicIndex" | "skipBeforePageTurning" | "totalPage">>;
23
24
  export default _default;
@@ -1 +1 @@
1
- "use strict";var icon_clear=require("../../../../assets/annotation/common/icon_clear.svg.js"),icon_clear_a=require("../../../../assets/annotation/common/icon_clear_a.svg.js"),icon_invalid=require("../../../../assets/annotation/common/icon_invalid.svg.js"),icon_invalid_a=require("../../../../assets/annotation/common/icon_invalid_a.svg.js"),icons=require("@ant-design/icons"),reactI18next=require("react-i18next"),React=require("react"),actionCreators=require("../../../../store/annotation/actionCreators.js"),index=require("../../../../index.js");function _interopDefaultLegacy(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var React__default=_interopDefaultLegacy(React),__defProp=Object.defineProperty,__getOwnPropSymbols=Object.getOwnPropertySymbols,__hasOwnProp=Object.prototype.hasOwnProperty,__propIsEnum=Object.prototype.propertyIsEnumerable,__defNormalProp=(e,r,t)=>r in e?__defProp(e,r,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[r]=t,__spreadValues=(e,r)=>{for(var t in r||(r={}))__hasOwnProp.call(r,t)&&__defNormalProp(e,t,r[t]);if(__getOwnPropSymbols)for(var t of __getOwnPropSymbols(r))__propIsEnum.call(r,t)&&__defNormalProp(e,t,r[t]);return e};const useOperationList=e=>{const{t:r}=reactI18next.useTranslation(),t={height:"25px",lineHeight:"25px",display:"flex",justifyContent:"center",alignItems:"center"},a={name:r("ClearLabel"),key:"empty",imgSvg:icon_clear,hoverSvg:icon_clear_a,onClick:()=>{e==null||e.clearResult()}},i={name:r((e==null?void 0:e.valid)===!0?"SetAsInvalid":"SetAsValid"),key:"setValidity",imgSvg:React__default.default.createElement(icons.StopOutlined,{style:t}),hoverSvg:React__default.default.createElement(icons.StopOutlined,{style:__spreadValues({color:"#666fff"},t)}),onClick:()=>{e.setValid(!e.valid)}},n={name:r("CopyThePrevious"),key:"copyPrevious",imgSvg:icon_invalid,hoverSvg:icon_invalid_a,onClick:()=>{index.store.dispatch(actionCreators.CopyBackWordResult())}};return React.useMemo(()=>({empty:a,setValidity:i,copyPrevious:n}),[e])};module.exports=useOperationList;
1
+ "use strict";var icon_clear=require("../../../../assets/annotation/common/icon_clear.svg.js"),icon_clear_a=require("../../../../assets/annotation/common/icon_clear_a.svg.js"),icon_invalid=require("../../../../assets/annotation/common/icon_invalid.svg.js"),icon_invalid_a=require("../../../../assets/annotation/common/icon_invalid_a.svg.js"),icons=require("@ant-design/icons"),reactI18next=require("react-i18next"),React=require("react"),actionCreators=require("../../../../store/annotation/actionCreators.js"),index=require("../../../../index.js"),reactRedux=require("react-redux");function _interopDefaultLegacy(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var React__default=_interopDefaultLegacy(React),__defProp=Object.defineProperty,__getOwnPropSymbols=Object.getOwnPropertySymbols,__hasOwnProp=Object.prototype.hasOwnProperty,__propIsEnum=Object.prototype.propertyIsEnumerable,__defNormalProp=(e,r,t)=>r in e?__defProp(e,r,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[r]=t,__spreadValues=(e,r)=>{for(var t in r||(r={}))__hasOwnProp.call(r,t)&&__defNormalProp(e,t,r[t]);if(__getOwnPropSymbols)for(var t of __getOwnPropSymbols(r))__propIsEnum.call(r,t)&&__defNormalProp(e,t,r[t]);return e};const useOperationList=e=>{const[r,t]=React.useState(0),{t:a}=reactI18next.useTranslation(),{currentData:o}=reactRedux.useSelector(i=>{const{imgList:u,imgIndex:v}=i.annotation;return{currentData:u[v]}}),n={height:"25px",lineHeight:"25px",display:"flex",justifyContent:"center",alignItems:"center"},s={name:a("ClearLabel"),key:"empty",imgSvg:icon_clear,hoverSvg:icon_clear_a,onClick:()=>{e==null||e.clearResult()}},c={name:a((e==null?void 0:e.valid)===!1?"SetAsValid":"SetAsInvalid"),key:"setValidity",imgSvg:React__default.default.createElement(icons.StopOutlined,{style:n}),hoverSvg:React__default.default.createElement(icons.StopOutlined,{style:__spreadValues({color:"#666fff"},n)}),onClick:()=>{e.setValid(!e.valid),setTimeout(()=>{t(i=>i+1)})}},l={name:a("CopyThePrevious"),key:"copyPrevious",imgSvg:icon_invalid,hoverSvg:icon_invalid_a,onClick:()=>{index.store.dispatch(actionCreators.CopyBackWordResult())}};return React.useMemo(()=>({empty:s,setValidity:c,copyPrevious:l}),[e,r,o])};module.exports=useOperationList;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var index=require("../../../constant/index.js"),ToolType=require("../../../data/enums/ToolType.js"),StepUtils=require("../../../utils/StepUtils.js"),es=require("antd/es"),React=require("react"),reactI18next=require("react-i18next"),reactRedux=require("react-redux"),index$9=require("./AnnotationText/index.js"),index$2=require("./ClearIcon/index.js"),index$6=require("./GeneralOperation/index.js"),index$3=require("./ImgAttributeInfo/index.js"),index$8=require("./SwitchAttributeList/index.js"),index$1=require("./TagSidebar/index.js"),index$4=require("./TextToolSidebar/index.js"),index$5=require("./PointCloudToolSidebar/index.js"),index$7=require("./ToolStyle/index.js"),lbAnnotation=require("@labelbee/lb-annotation"),ToolIcons=require("./ToolIcons.js");function _interopDefaultLegacy(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var React__default=_interopDefaultLegacy(React);const{EVideoToolName,EPointCloudName}=lbAnnotation.cTool,{Panel}=es.Collapse,sidebarCls=`${index.prefix}-sidebar`,Sidebar=({sider:e})=>{const r=reactRedux.useSelector(a=>StepUtils.getCurrentStepInfo(a.annotation.step,a.annotation.stepList)),t=r==null?void 0:r.tool,{t:o}=reactI18next.useTranslation();if(!t)return null;const f=a=>{const E=React__default.default.createElement(index$7,null);return React__default.default.createElement(Panel,{header:o("Style"),className:"panel",key:a},E)},i=React__default.default.createElement(ToolIcons.ToolIcons,{toolName:t,onChange:()=>{}}),u=React__default.default.createElement(index$8,null),d=React__default.default.createElement(index$9,null),c=React__default.default.createElement(es.Collapse,{defaultActiveKey:["1","imgAttribute"],bordered:!1,expandIconPosition:"right",className:`${sidebarCls}__content`,expandIcon:index$1.expandIconFuc},f("1")),s=React__default.default.createElement(es.Collapse,{defaultActiveKey:["1","imgAttribute"],bordered:!1,expandIconPosition:"right",className:`${sidebarCls}__content`,expandIcon:index$1.expandIconFuc},React__default.default.createElement(Panel,{header:React__default.default.createElement("div",null,o("Adjust"),React__default.default.createElement(index$2,null)),className:"panel",key:"imgAttribute"},React__default.default.createElement(index$3,null))),l=React__default.default.createElement(index$6.default,null),m=React__default.default.createElement(index$1.default,null),x=React__default.default.createElement(index$4.default,null),n=React__default.default.createElement("div",{className:`${sidebarCls}__horizontal`});return e?typeof e=="function"?React__default.default.createElement("div",{className:`${sidebarCls}`},e({toolIcon:i,attributeList:u,annotationText:d,toolStyle:c,imageAttributeInfo:s,operation:l,tagToolSideBar:m,textToolSideBar:x,horizontal:n})):e:[ToolType.EToolName.Rect,ToolType.EToolName.Point,ToolType.EToolName.Line,ToolType.EToolName.Rect,ToolType.EToolName.Polygon].includes(t)?React__default.default.createElement("div",{className:`${sidebarCls}`},i,n,u,d,n,React__default.default.createElement("div",{className:`${sidebarCls}__content`},c,s),l):t===ToolType.EToolName.Tag?React__default.default.createElement("div",{className:`${sidebarCls}`},React__default.default.createElement(index$1.default,null)):t===EVideoToolName.VideoTagTool?React__default.default.createElement("div",{className:`${sidebarCls}`},React__default.default.createElement("div",{className:`${sidebarCls}__content`},React__default.default.createElement(index$1.default,null)),l):t===ToolType.EToolName.Text?React__default.default.createElement("div",{className:`${sidebarCls}`},React__default.default.createElement(index$4.default,null)):t===EPointCloudName.PointCloud?React__default.default.createElement("div",{className:`${sidebarCls}`},React__default.default.createElement("div",{className:`${sidebarCls}__content`},React__default.default.createElement(index$5,null)),React__default.default.createElement(index$6.PointCloudOperation,null)):null};exports.default=Sidebar,exports.sidebarCls=sidebarCls;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var index=require("../../../constant/index.js"),ToolType=require("../../../data/enums/ToolType.js"),StepUtils=require("../../../utils/StepUtils.js"),es=require("antd/es"),React=require("react"),reactI18next=require("react-i18next"),reactRedux=require("react-redux"),index$9=require("./AnnotationText/index.js"),index$2=require("./ClearIcon/index.js"),index$6=require("./GeneralOperation/index.js"),index$3=require("./ImgAttributeInfo/index.js"),index$8=require("./SwitchAttributeList/index.js"),index$1=require("./TagSidebar/index.js"),index$4=require("./TextToolSidebar/index.js"),index$5=require("./PointCloudToolSidebar/index.js"),index$7=require("./ToolStyle/index.js"),lbAnnotation=require("@labelbee/lb-annotation"),ToolIcons=require("./ToolIcons.js");function _interopDefaultLegacy(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var React__default=_interopDefaultLegacy(React);const{EVideoToolName,EPointCloudName}=lbAnnotation.cTool,{Panel}=es.Collapse,sidebarCls=`${index.prefix}-sidebar`,Sidebar=({sider:e})=>{const o=reactRedux.useSelector(a=>StepUtils.getCurrentStepInfo(a.annotation.step,a.annotation.stepList)),t=o==null?void 0:o.tool,{t:r}=reactI18next.useTranslation();if(!t)return null;const f=a=>{const v=React__default.default.createElement(index$7,null);return React__default.default.createElement(Panel,{header:r("Style"),className:"panel",key:a},v)},i=React__default.default.createElement(ToolIcons.ToolIcons,{toolName:t,onChange:()=>{}}),u=React__default.default.createElement(index$8,null),d=React__default.default.createElement(index$9,null),c=React__default.default.createElement(es.Collapse,{defaultActiveKey:["1","imgAttribute"],bordered:!1,expandIconPosition:"right",className:`${sidebarCls}__content`,expandIcon:index$1.expandIconFuc},f("1")),s=React__default.default.createElement(es.Collapse,{defaultActiveKey:["1","imgAttribute"],bordered:!1,expandIconPosition:"right",className:`${sidebarCls}__content`,expandIcon:index$1.expandIconFuc},React__default.default.createElement(Panel,{header:React__default.default.createElement("div",null,r("Adjust"),React__default.default.createElement(index$2,null)),className:"panel",key:"imgAttribute"},React__default.default.createElement(index$3,null))),l=React__default.default.createElement(index$6.default,null),m=React__default.default.createElement(index$1.default,null),E=React__default.default.createElement(index$4.default,null),n=React__default.default.createElement("div",{className:`${sidebarCls}__horizontal`}),x=React__default.default.createElement(index$5,null),p=React__default.default.createElement(index$6.PointCloudOperation,null);return e?typeof e=="function"?React__default.default.createElement("div",{className:`${sidebarCls}`},e({toolIcon:i,attributeList:u,annotationText:d,toolStyle:c,imageAttributeInfo:s,operation:l,tagToolSideBar:m,textToolSideBar:E,horizontal:n,pointCloudToolSidebar:x,pointCloudOperation:p})):e:[ToolType.EToolName.Rect,ToolType.EToolName.Point,ToolType.EToolName.Line,ToolType.EToolName.Rect,ToolType.EToolName.Polygon].includes(t)?React__default.default.createElement("div",{className:`${sidebarCls}`},i,n,u,d,n,React__default.default.createElement("div",{className:`${sidebarCls}__content`},c,s),l):t===ToolType.EToolName.Tag?React__default.default.createElement("div",{className:`${sidebarCls}`},React__default.default.createElement(index$1.default,null)):t===EVideoToolName.VideoTagTool?React__default.default.createElement("div",{className:`${sidebarCls}`},React__default.default.createElement("div",{className:`${sidebarCls}__content`},React__default.default.createElement(index$1.default,null)),l):t===ToolType.EToolName.Text?React__default.default.createElement("div",{className:`${sidebarCls}`},React__default.default.createElement(index$4.default,null)):t===EPointCloudName.PointCloud?React__default.default.createElement("div",{className:`${sidebarCls}`},React__default.default.createElement("div",{className:`${sidebarCls}__content`},React__default.default.createElement(index$5,null)),React__default.default.createElement(index$6.PointCloudOperation,null)):null};exports.default=Sidebar,exports.sidebarCls=sidebarCls;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var index$4=require("../../../constant/index.js"),actionCreators=require("../../../store/annotation/actionCreators.js"),reducer=require("../../../store/annotation/reducer.js"),es=require("antd/es"),React=require("react"),reactI18next=require("react-i18next"),reactRedux=require("react-redux"),index=require("./FooterTips/index.js"),index$1=require("./HiddenTips/index.js"),index$2=require("./PageNumber/index.js"),index$3=require("./ZoomController/index.js"),Pagination=require("./Pagination.js"),lbAnnotation=require("@labelbee/lb-annotation");function _interopDefaultLegacy(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var React__default=_interopDefaultLegacy(React);const{EPointCloudName}=lbAnnotation.cTool,footerCls=`${index$4.prefix}-footer`,FooterDivider=()=>React__default.default.createElement(es.Divider,{type:"vertical",style:{background:"rgba(153, 153, 153, 1)",height:"16px"}}),renderFooter=({footerTips:e,hiddenTips:t,pageNumber:n,pagination:r,zoomController:a,curItems:o,footerDivider:i})=>React__default.default.createElement(React__default.default.Fragment,null,e,React__default.default.createElement("div",{style:{flex:1}}),t,n,r,o,i,a),ToolFooter=e=>{var t;const{stepList:n,step:r,basicResultList:a,basicIndex:o,mode:i="light",footer:l=renderFooter}=e,s=reactRedux.useDispatch(),{t:d}=reactI18next.useTranslation(),u=(t=n[r-1])!=null?t:{},f=!!u.dataSourceStep,m=()=>{s(actionCreators.PageBackward())},g=()=>{s(actionCreators.PageForward())},x=v=>{const b=~~v-1;s(actionCreators.PageJump(b))},c=React__default.default.createElement(Pagination.Pagination,{imgIndex:e.imgIndex,totalPage:e.totalPage,pageJump:x,pageBackward:m,pageForward:g,footerCls}),p=f&&a.length>0?React__default.default.createElement("span",null,d("curItems",{current:o+1,total:a.length})):null;return u.tool===EPointCloudName.PointCloud?React__default.default.createElement("div",{className:`${footerCls}`,style:e.style},React__default.default.createElement(index,null),React__default.default.createElement("div",{style:{flex:1}}),c):typeof l=="function"?React__default.default.createElement("div",{className:`${footerCls}`,style:e.style},l({footerTips:React__default.default.createElement(index,null),hiddenTips:React__default.default.createElement(index$1,null),pageNumber:React__default.default.createElement(index$2,null),pagination:c,zoomController:React__default.default.createElement(index$3.default,{mode:i}),curItems:p,footerDivider:React__default.default.createElement(FooterDivider,null)})):l},mapStateToProps=e=>({totalPage:reducer.getTotalPage(e.annotation),imgIndex:e.annotation.imgIndex,stepList:e.annotation.stepList,step:e.annotation.step,basicIndex:e.annotation.basicIndex,basicResultList:e.annotation.basicResultList});var ToolFooter$1=reactRedux.connect(mapStateToProps)(ToolFooter);exports.FooterDivider=FooterDivider,exports.default=ToolFooter$1,exports.footerCls=footerCls;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var index$4=require("../../../constant/index.js"),actionCreators=require("../../../store/annotation/actionCreators.js"),reducer=require("../../../store/annotation/reducer.js"),es=require("antd/es"),React=require("react"),reactI18next=require("react-i18next"),reactRedux=require("react-redux"),index=require("./FooterTips/index.js"),index$1=require("./HiddenTips/index.js"),index$2=require("./PageNumber/index.js"),index$3=require("./ZoomController/index.js"),Pagination=require("./Pagination.js"),lbAnnotation=require("@labelbee/lb-annotation");function _interopDefaultLegacy(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var React__default=_interopDefaultLegacy(React);const{EPointCloudName}=lbAnnotation.cTool,footerCls=`${index$4.prefix}-footer`,FooterDivider=()=>React__default.default.createElement(es.Divider,{type:"vertical",style:{background:"rgba(153, 153, 153, 1)",height:"16px"}}),renderFooter=({footerTips:e,hiddenTips:a,pageNumber:i,pagination:l,zoomController:n,curItems:s,footerDivider:u})=>React__default.default.createElement(React__default.default.Fragment,null,e,React__default.default.createElement("div",{style:{flex:1}}),a,i,l,s,u,n),ToolFooter=e=>{var a;const{stepList:i,step:l,basicResultList:n,basicIndex:s,mode:u="light",footer:r=renderFooter,skipBeforePageTurning:o}=e,t=reactRedux.useDispatch(),{t:f}=reactI18next.useTranslation(),c=(a=i[l-1])!=null?a:{},g=!!c.dataSourceStep,m=()=>{if(o){o(()=>t(actionCreators.PageBackward()));return}t(actionCreators.PageBackward())},p=()=>{if(o){o(()=>t(actionCreators.PageForward()));return}t(actionCreators.PageForward())},x=P=>{const b=~~P-1;t(actionCreators.PageJump(b))},d=React__default.default.createElement(Pagination.Pagination,{imgIndex:e.imgIndex,totalPage:e.totalPage,pageJump:x,pageBackward:m,pageForward:p,footerCls}),v=g&&n.length>0?React__default.default.createElement("span",null,f("curItems",{current:s+1,total:n.length})):null;return typeof r=="function"?r===renderFooter&&c.tool===EPointCloudName.PointCloud?React__default.default.createElement("div",{className:`${footerCls}`,style:e.style},React__default.default.createElement(index,null),React__default.default.createElement("div",{style:{flex:1}}),d):React__default.default.createElement("div",{className:`${footerCls}`,style:e.style},r({footerTips:React__default.default.createElement(index,null),hiddenTips:React__default.default.createElement(index$1,null),pageNumber:React__default.default.createElement(index$2,null),pagination:d,zoomController:React__default.default.createElement(index$3.default,{mode:u}),curItems:v,footerDivider:React__default.default.createElement(FooterDivider,null)})):r},mapStateToProps=e=>({totalPage:reducer.getTotalPage(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 ToolFooter$1=reactRedux.connect(mapStateToProps)(ToolFooter);exports.FooterDivider=FooterDivider,exports.default=ToolFooter$1,exports.footerCls=footerCls;
package/es/App.js CHANGED
@@ -1 +1 @@
1
- import L from"./views/MainView/index.js";import{i18n as w}from"@labelbee/lb-utils";import p,{useEffect as l}from"react";import{connect as y}from"react-redux";import{store as o}from"./index.js";import{ANNOTATION_ACTIONS as A}from"./store/Actions.js";import{InitTaskData as T,loadImgList as j}from"./store/annotation/actionCreators.js";import{LoadFileAndFileData as c}from"./store/annotation/reducer.js";var b=Object.defineProperty,m=Object.getOwnPropertySymbols,E=Object.prototype.hasOwnProperty,x=Object.prototype.propertyIsEnumerable,f=(e,t,a)=>t in e?b(e,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[t]=a,N=(e,t)=>{for(var a in t||(t={}))E.call(t,a)&&f(e,a,t[a]);if(m)for(var a of m(t))x.call(t,a)&&f(e,a,t[a]);return e};const C=e=>{const{imgList:t,step:a=1,stepList:d,onSubmit:u,onSave:g,onPageChange:_,onStepChange:I,initialIndex:r=0,toolInstance:n,setToolInstance:i,getFileData:h,pageSize:v=10,loadFileList:s,defaultLang:O="cn"}=e;l(()=>{o.dispatch(T({onSubmit:u,stepList:d,step:a,getFileData:h,pageSize:v,loadFileList:s,onSave:g,onPageChange:_,onStepChange:I})),P(),w.changeLanguage(O)},[]),l(()=>{i==null||i(n)},[n]);const P=()=>{s?j(o.dispatch,o.getState,r,!0).then(S=>{S&&o.dispatch(c(r))}):t&&t.length>0&&(o.dispatch({type:A.UPDATE_IMG_LIST,payload:{imgList:t}}),o.dispatch(c(r)))};return p.createElement("div",null,p.createElement(L,N({},e)))},D=e=>({toolInstance:e.annotation.toolInstance});var F=y(D)(C);export{F as default};
1
+ import T from"./views/MainView/index.js";import{i18n as w}from"@labelbee/lb-utils";import p,{useEffect as l}from"react";import{connect as y}from"react-redux";import{store as o}from"./index.js";import{ANNOTATION_ACTIONS as A}from"./store/Actions.js";import{InitTaskData as j,loadImgList as b}from"./store/annotation/actionCreators.js";import{LoadFileAndFileData as c}from"./store/annotation/reducer.js";var E=Object.defineProperty,m=Object.getOwnPropertySymbols,x=Object.prototype.hasOwnProperty,N=Object.prototype.propertyIsEnumerable,f=(e,t,a)=>t in e?E(e,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[t]=a,C=(e,t)=>{for(var a in t||(t={}))x.call(t,a)&&f(e,a,t[a]);if(m)for(var a of m(t))N.call(t,a)&&f(e,a,t[a]);return e};const D=e=>{const{imgList:t,step:a=1,stepList:d,onSubmit:u,onSave:g,onPageChange:_,onStepChange:I,initialIndex:r=0,toolInstance:n,setToolInstance:i,getFileData:h,pageSize:v=10,loadFileList:s,defaultLang:O="cn",skipBeforePageTurning:P}=e;l(()=>{o.dispatch(j({onSubmit:u,stepList:d,step:a,getFileData:h,pageSize:v,loadFileList:s,onSave:g,onPageChange:_,onStepChange:I,skipBeforePageTurning:P})),S(),w.changeLanguage(O)},[]),l(()=>{i==null||i(n)},[n]);const S=()=>{s?b(o.dispatch,o.getState,r,!0).then(L=>{L&&o.dispatch(c(r))}):t&&t.length>0&&(o.dispatch({type:A.UPDATE_IMG_LIST,payload:{imgList:t}}),o.dispatch(c(r)))};return p.createElement("div",null,p.createElement(T,C({},e)))},F=e=>({toolInstance:e.annotation.toolInstance});var M=y(F)(D);export{M as default};
package/es/App.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"App.js","sources":["../src/App.tsx"],"sourcesContent":["import MainView from '@/views/MainView';\nimport { i18n } from '@labelbee/lb-utils';\nimport React, { useEffect } from 'react';\nimport { connect } from 'react-redux';\nimport { store } from '.';\nimport { AppState } from './store';\nimport { ANNOTATION_ACTIONS } from './store/Actions';\nimport { InitTaskData, loadImgList } from './store/annotation/actionCreators';\nimport { LoadFileAndFileData } from './store/annotation/reducer';\nimport { ToolInstance } from './store/annotation/types';\nimport {\n GetFileData,\n IFileItem,\n LoadFileList,\n OnPageChange,\n OnSave,\n OnStepChange,\n OnSubmit,\n} from './types/data';\nimport { Header, RenderFooter, Sider } from './types/main';\nimport { IStepInfo } from './types/step';\n\ninterface IAnnotationStyle {\n strokeColor: string;\n fillColor: string;\n textColor: string;\n toolColor: any;\n}\n\nexport interface AppProps {\n exportData?: (data: any[]) => void;\n goBack?: () => void;\n imgList?: IFileItem[];\n config: string;\n stepList: IStepInfo[];\n step: number;\n onSubmit?: OnSubmit;\n onSave?: OnSave;\n onPageChange?: OnPageChange;\n onStepChange?: OnStepChange;\n getFileData?: GetFileData;\n pageSize: number;\n loadFileList?: LoadFileList;\n headerName?: string;\n initialIndex?: number;\n className?: string;\n toolInstance: ToolInstance;\n header?: Header;\n footer?: RenderFooter;\n sider?: Sider;\n style?: {\n layout?: { [key: string]: any };\n header?: { [key: string]: any };\n sider?: { [key: string]: any };\n footer?: { [key: string]: any };\n };\n setToolInstance?: (tool: ToolInstance) => void;\n mode?: 'light' | 'dark'; // 临时需求应用于 toolFooter 的操作\n showTips?: boolean; // 是否展示 tips\n defaultLang: 'en' | 'cn'; // 国际化设置\n leftSider?: () => React.ReactNode | React.ReactNode;\n\n // 标注信息扩展的功能\n dataInjectionAtCreation: (annotationData: any) => {};\n // 渲染增强\n renderEnhance: {\n staticRender?: (canvas: HTMLCanvasElement, data: any, style: IAnnotationStyle) => void;\n selectedRender?: (canvas: HTMLCanvasElement, data: any, style: IAnnotationStyle) => void;\n creatingRender?: (canvas: HTMLCanvasElement, data: any, style: IAnnotationStyle) => void;\n };\n customRenderStyle?: (data: any) => IAnnotationStyle;\n}\n\nconst App: React.FC<AppProps> = (props) => {\n const {\n imgList,\n step = 1,\n stepList,\n onSubmit,\n onSave,\n onPageChange,\n onStepChange,\n initialIndex = 0,\n toolInstance,\n setToolInstance,\n getFileData,\n pageSize = 10,\n loadFileList,\n defaultLang = 'cn',\n } = props;\n\n useEffect(() => {\n store.dispatch(\n InitTaskData({\n onSubmit,\n stepList,\n step,\n getFileData,\n pageSize,\n loadFileList,\n onSave,\n onPageChange,\n onStepChange,\n }),\n );\n\n initImgList();\n // 初始化国际化语言\n i18n.changeLanguage(defaultLang);\n }, []);\n\n useEffect(() => {\n setToolInstance?.(toolInstance);\n }, [toolInstance]);\n\n // 初始化imgList 优先以loadFileList方式加载数据\n const initImgList = () => {\n if (loadFileList) {\n loadImgList(store.dispatch, store.getState, initialIndex, true).then((isSuccess) => {\n if (isSuccess) {\n store.dispatch(LoadFileAndFileData(initialIndex));\n }\n });\n } else if (imgList && imgList.length > 0) {\n store.dispatch({\n type: ANNOTATION_ACTIONS.UPDATE_IMG_LIST,\n payload: {\n imgList,\n },\n });\n store.dispatch(LoadFileAndFileData(initialIndex));\n }\n };\n\n return (\n <div>\n <MainView {...props} />\n </div>\n );\n};\n\nconst mapStateToProps = (state: AppState) => ({\n toolInstance: state.annotation.toolInstance,\n});\n\nexport default connect(mapStateToProps)(App);\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAyEA,MAAM,GAAA,GAA0B,CAAC,KAAU,KAAA;AACzC,EAAM,MAAA;AAAA,IACJ,OAAA;AAAA,IACA,IAAO,GAAA,CAAA;AAAA,IACP,QAAA;AAAA,IACA,QAAA;AAAA,IACA,MAAA;AAAA,IACA,YAAA;AAAA,IACA,YAAA;AAAA,IACA,YAAe,GAAA,CAAA;AAAA,IACf,YAAA;AAAA,IACA,eAAA;AAAA,IACA,WAAA;AAAA,IACA,QAAW,GAAA,EAAA;AAAA,IACX,YAAA;AAAA,IACA,WAAc,GAAA,IAAA;AAAA,GACZ,GAAA,KAAA,CAAA;AAEJ,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,KAAA,CAAM,SACJ,YAAa,CAAA;AAAA,MACX,QAAA;AAAA,MACA,QAAA;AAAA,MACA,IAAA;AAAA,MACA,WAAA;AAAA,MACA,QAAA;AAAA,MACA,YAAA;AAAA,MACA,MAAA;AAAA,MACA,YAAA;AAAA,MACA,YAAA;AAAA,KAAA,CAAA,CAAA,CAAA;AAIJ,IAAA,WAAA,EAAA,CAAA;AAEA,IAAA,IAAA,CAAK,cAAe,CAAA,WAAA,CAAA,CAAA;AAAA,GACnB,EAAA,EAAA,CAAA,CAAA;AAEH,EAAA,SAAA,CAAU,MAAM;AACd,IAAkB,eAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,eAAA,CAAA,YAAA,CAAA,CAAA;AAAA,GAAA,EACjB,CAAC,YAAA,CAAA,CAAA,CAAA;AAGJ,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,IAAI,YAAc,EAAA;AAChB,MAAY,WAAA,CAAA,KAAA,CAAM,UAAU,KAAM,CAAA,QAAA,EAAU,cAAc,IAAM,CAAA,CAAA,IAAA,CAAK,CAAC,SAAc,KAAA;AAClF,QAAA,IAAI,SAAW,EAAA;AACb,UAAA,KAAA,CAAM,SAAS,mBAAoB,CAAA,YAAA,CAAA,CAAA,CAAA;AAAA,SAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAG9B,MAAA,IAAA,OAAA,IAAW,OAAQ,CAAA,MAAA,GAAS,CAAG,EAAA;AACxC,MAAA,KAAA,CAAM,QAAS,CAAA;AAAA,QACb,MAAM,kBAAmB,CAAA,eAAA;AAAA,QACzB,OAAS,EAAA;AAAA,UACP,OAAA;AAAA,SAAA;AAAA,OAAA,CAAA,CAAA;AAGJ,MAAA,KAAA,CAAM,SAAS,mBAAoB,CAAA,YAAA,CAAA,CAAA,CAAA;AAAA,KAAA;AAAA,GAAA,CAAA;AAIvC,EAAA,uBACG,KAAA,CAAA,aAAA,CAAA,KAAA,EAAD,IACE,kBAAA,KAAA,CAAA,aAAA,CAAC,UAAD,cAAc,CAAA,EAAA,EAAA,KAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA;AAKpB,MAAM,eAAA,GAAkB,CAAC,KAAqB,MAAA;AAAA,EAC5C,YAAA,EAAc,MAAM,UAAW,CAAA,YAAA;AAAA,CAAA,CAAA,CAAA;AAGjC,YAAe,QAAQ,eAAiB,CAAA,CAAA,GAAA,CAAA;;;;"}
1
+ {"version":3,"file":"App.js","sources":["../src/App.tsx"],"sourcesContent":["import MainView from '@/views/MainView';\nimport { i18n } from '@labelbee/lb-utils';\nimport React, { useEffect } from 'react';\nimport { connect } from 'react-redux';\nimport { store } from '.';\nimport { AppState } from './store';\nimport { ANNOTATION_ACTIONS } from './store/Actions';\nimport { InitTaskData, loadImgList } from './store/annotation/actionCreators';\nimport { LoadFileAndFileData } from './store/annotation/reducer';\nimport { ToolInstance } from './store/annotation/types';\nimport {\n GetFileData,\n IFileItem,\n LoadFileList,\n OnPageChange,\n OnSave,\n OnStepChange,\n OnSubmit,\n} from './types/data';\nimport { Header, RenderFooter, Sider } from './types/main';\nimport { IStepInfo } from './types/step';\n\ninterface IAnnotationStyle {\n strokeColor: string;\n fillColor: string;\n textColor: string;\n toolColor: any;\n}\n\nexport interface AppProps {\n exportData?: (data: any[]) => void;\n goBack?: () => void;\n imgList?: IFileItem[];\n config: string;\n stepList: IStepInfo[];\n step: number;\n onSubmit?: OnSubmit;\n onSave?: OnSave;\n onPageChange?: OnPageChange;\n onStepChange?: OnStepChange;\n getFileData?: GetFileData;\n pageSize: number;\n loadFileList?: LoadFileList;\n headerName?: string;\n initialIndex?: number;\n className?: string;\n toolInstance: ToolInstance;\n header?: Header;\n footer?: RenderFooter;\n sider?: Sider;\n style?: {\n layout?: { [key: string]: any };\n header?: { [key: string]: any };\n sider?: { [key: string]: any };\n footer?: { [key: string]: any };\n };\n setToolInstance?: (tool: ToolInstance) => void;\n mode?: 'light' | 'dark'; // 临时需求应用于 toolFooter 的操作\n showTips?: boolean; // 是否展示 tips\n defaultLang: 'en' | 'cn'; // 国际化设置\n leftSider?: () => React.ReactNode | React.ReactNode;\n\n // data Correction\n skipBeforePageTurning?: (pageTurning: Function) => void;\n\n // 标注信息扩展的功能\n dataInjectionAtCreation: (annotationData: any) => {};\n // 渲染增强\n renderEnhance: {\n staticRender?: (canvas: HTMLCanvasElement, data: any, style: IAnnotationStyle) => void;\n selectedRender?: (canvas: HTMLCanvasElement, data: any, style: IAnnotationStyle) => void;\n creatingRender?: (canvas: HTMLCanvasElement, data: any, style: IAnnotationStyle) => void;\n };\n customRenderStyle?: (data: any) => IAnnotationStyle;\n}\n\nconst App: React.FC<AppProps> = (props) => {\n const {\n imgList,\n step = 1,\n stepList,\n onSubmit,\n onSave,\n onPageChange,\n onStepChange,\n initialIndex = 0,\n toolInstance,\n setToolInstance,\n getFileData,\n pageSize = 10,\n loadFileList,\n defaultLang = 'cn',\n skipBeforePageTurning,\n } = props;\n\n useEffect(() => {\n store.dispatch(\n InitTaskData({\n onSubmit,\n stepList,\n step,\n getFileData,\n pageSize,\n loadFileList,\n onSave,\n onPageChange,\n onStepChange,\n skipBeforePageTurning,\n }),\n );\n\n initImgList();\n // 初始化国际化语言\n i18n.changeLanguage(defaultLang);\n }, []);\n\n useEffect(() => {\n setToolInstance?.(toolInstance);\n }, [toolInstance]);\n\n // 初始化imgList 优先以loadFileList方式加载数据\n const initImgList = () => {\n if (loadFileList) {\n loadImgList(store.dispatch, store.getState, initialIndex, true).then((isSuccess) => {\n if (isSuccess) {\n store.dispatch(LoadFileAndFileData(initialIndex));\n }\n });\n } else if (imgList && imgList.length > 0) {\n store.dispatch({\n type: ANNOTATION_ACTIONS.UPDATE_IMG_LIST,\n payload: {\n imgList,\n },\n });\n store.dispatch(LoadFileAndFileData(initialIndex));\n }\n };\n\n return (\n <div>\n <MainView {...props} />\n </div>\n );\n};\n\nconst mapStateToProps = (state: AppState) => ({\n toolInstance: state.annotation.toolInstance,\n});\n\nexport default connect(mapStateToProps)(App);\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AA4EA,MAAM,GAAA,GAA0B,CAAC,KAAU,KAAA;AACzC,EAAM,MAAA;AAAA,IACJ,OAAA;AAAA,IACA,IAAO,GAAA,CAAA;AAAA,IACP,QAAA;AAAA,IACA,QAAA;AAAA,IACA,MAAA;AAAA,IACA,YAAA;AAAA,IACA,YAAA;AAAA,IACA,YAAe,GAAA,CAAA;AAAA,IACf,YAAA;AAAA,IACA,eAAA;AAAA,IACA,WAAA;AAAA,IACA,QAAW,GAAA,EAAA;AAAA,IACX,YAAA;AAAA,IACA,WAAc,GAAA,IAAA;AAAA,IACd,qBAAA;AAAA,GACE,GAAA,KAAA,CAAA;AAEJ,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,KAAA,CAAM,SACJ,YAAa,CAAA;AAAA,MACX,QAAA;AAAA,MACA,QAAA;AAAA,MACA,IAAA;AAAA,MACA,WAAA;AAAA,MACA,QAAA;AAAA,MACA,YAAA;AAAA,MACA,MAAA;AAAA,MACA,YAAA;AAAA,MACA,YAAA;AAAA,MACA,qBAAA;AAAA,KAAA,CAAA,CAAA,CAAA;AAIJ,IAAA,WAAA,EAAA,CAAA;AAEA,IAAA,IAAA,CAAK,cAAe,CAAA,WAAA,CAAA,CAAA;AAAA,GACnB,EAAA,EAAA,CAAA,CAAA;AAEH,EAAA,SAAA,CAAU,MAAM;AACd,IAAkB,eAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,eAAA,CAAA,YAAA,CAAA,CAAA;AAAA,GAAA,EACjB,CAAC,YAAA,CAAA,CAAA,CAAA;AAGJ,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,IAAI,YAAc,EAAA;AAChB,MAAY,WAAA,CAAA,KAAA,CAAM,UAAU,KAAM,CAAA,QAAA,EAAU,cAAc,IAAM,CAAA,CAAA,IAAA,CAAK,CAAC,SAAc,KAAA;AAClF,QAAA,IAAI,SAAW,EAAA;AACb,UAAA,KAAA,CAAM,SAAS,mBAAoB,CAAA,YAAA,CAAA,CAAA,CAAA;AAAA,SAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAG9B,MAAA,IAAA,OAAA,IAAW,OAAQ,CAAA,MAAA,GAAS,CAAG,EAAA;AACxC,MAAA,KAAA,CAAM,QAAS,CAAA;AAAA,QACb,MAAM,kBAAmB,CAAA,eAAA;AAAA,QACzB,OAAS,EAAA;AAAA,UACP,OAAA;AAAA,SAAA;AAAA,OAAA,CAAA,CAAA;AAGJ,MAAA,KAAA,CAAM,SAAS,mBAAoB,CAAA,YAAA,CAAA,CAAA,CAAA;AAAA,KAAA;AAAA,GAAA,CAAA;AAIvC,EAAA,uBACG,KAAA,CAAA,aAAA,CAAA,KAAA,EAAD,IACE,kBAAA,KAAA,CAAA,aAAA,CAAC,UAAD,cAAc,CAAA,EAAA,EAAA,KAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA;AAKpB,MAAM,eAAA,GAAkB,CAAC,KAAqB,MAAA;AAAA,EAC5C,YAAA,EAAc,MAAM,UAAW,CAAA,YAAA;AAAA,CAAA,CAAA,CAAA;AAGjC,YAAe,QAAQ,eAAiB,CAAA,CAAA,GAAA,CAAA;;;;"}
@@ -1 +1 @@
1
- import m,{useState as z,useRef as g,useImperativeHandle as S,useEffect as u}from"react";import{ViewOperation as E,ImgUtils as C}from"@labelbee/lb-annotation";import{Spin as L}from"antd/es";var A=Object.defineProperty,_=Object.getOwnPropertySymbols,R=Object.prototype.hasOwnProperty,V=Object.prototype.propertyIsEnumerable,h=(o,t,e)=>t in o?A(o,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[t]=e,w=(o,t)=>{for(var e in t||(t={}))R.call(t,e)&&h(o,e,t[e]);if(_)for(var e of _(t))V.call(t,e)&&h(o,e,t[e]);return o};const Z={width:1280,height:720},j=(o,t)=>{const{size:e=Z,src:p,annotations:s=[],style:b={stroke:"blue",thickness:3},zoomChange:c,backgroundStyle:y={},onChange:d,showLoading:I=!1}=o,[O,f]=z(!1),v=g(null),n=g();S(t,()=>{const r=n.current;return r?{zoomIn:()=>r.zoomChanged(!0),zoomOut:()=>r.zoomChanged(!1),initImgPos:()=>r.initImgPos(),toolInstance:r}:{}},[n.current]),u(()=>(v.current&&(n.current=new E({container:v.current,size:e,style:b,annotations:s,config:"{}"}),n.current.init()),()=>{var r;(r=n.current)==null||r.destroy()}),[]),u(()=>{var r;n.current&&(f(!0),(r=n.current)==null||r.setLoading(!0),C.load(p).then(i=>{var a,l;(a=n.current)==null||a.setLoading(!1),f(!1),(l=n.current)==null||l.setImgNode(i)}).catch(()=>{var i;(i=n.current)==null||i.setLoading(!1),f(!1)}))},[p]),u(()=>{n.current&&n.current.updateData(s)},[s]),u(()=>{const r=n.current;(r==null?void 0:r.setSize)&&r.setSize(e)},[e==null?void 0:e.width,e==null?void 0:e.height]),u(()=>{var r,i;return n.current&&((r=n.current)==null||r.on("onChange",(...a)=>{d==null||d.apply(null,a)}),(i=n.current)==null||i.on("renderZoom",a=>{c&&c(a)})),()=>{var a,l;(a=n.current)==null||a.unbindAll("onChange"),(l=n.current)==null||l.unbindAll("renderZoom")}},[c,d]);const P=m.createElement("div",{ref:v,style:w(w({position:"relative"},e),y)});return m.createElement(L,{spinning:I||O,delay:300},P)};var D=m.forwardRef(j);export{D as default};
1
+ import h,{useState as E,useRef as p,useImperativeHandle as z,useEffect as c}from"react";import{ViewOperation as C,ImgUtils as L}from"@labelbee/lb-annotation";import{Spin as A}from"antd/es";var R=Object.defineProperty,_=Object.getOwnPropertySymbols,V=Object.prototype.hasOwnProperty,Z=Object.prototype.propertyIsEnumerable,w=(t,r,o)=>r in t?R(t,r,{enumerable:!0,configurable:!0,writable:!0,value:o}):t[r]=o,b=(t,r)=>{for(var o in r||(r={}))V.call(r,o)&&w(t,o,r[o]);if(_)for(var o of _(r))Z.call(r,o)&&w(t,o,r[o]);return t};const m={width:1280,height:720},j=t=>t?(t.width||(t.width=m.width),t.height||(t.height=m.height),t):m,D=(t,r)=>{const{src:o,annotations:s=[],style:y={stroke:"blue",thickness:3},zoomChange:d,backgroundStyle:I={},onChange:f,showLoading:O=!1}=t,a=j(t.size),[P,v]=E(!1),g=p(null),e=p();z(r,()=>{const n=e.current;return n?{zoomIn:()=>n.zoomChanged(!0),zoomOut:()=>n.zoomChanged(!1),initImgPos:()=>n.initImgPos(),toolInstance:n}:{}},[e.current]),c(()=>(g.current&&(e.current=new C({container:g.current,size:a,style:y,annotations:s,config:"{}"}),e.current.init()),()=>{var n;(n=e.current)==null||n.destroy()}),[]),c(()=>{var n;e.current&&(v(!0),(n=e.current)==null||n.setLoading(!0),L.load(o).then(l=>{var i,u;(i=e.current)==null||i.setLoading(!1),v(!1),(u=e.current)==null||u.setImgNode(l)}).catch(()=>{var l;(l=e.current)==null||l.setLoading(!1),v(!1)}))},[o]),c(()=>{e.current&&e.current.updateData(s)},[s]),c(()=>{const n=e.current;(n==null?void 0:n.setSize)&&n.setSize(a)},[a==null?void 0:a.width,a==null?void 0:a.height]),c(()=>{var n,l;return e.current&&((n=e.current)==null||n.on("onChange",(...i)=>{f==null||f.apply(null,i)}),(l=e.current)==null||l.on("renderZoom",i=>{d&&d(i)})),()=>{var i,u;(i=e.current)==null||i.unbindAll("onChange"),(u=e.current)==null||u.unbindAll("renderZoom")}},[d,f]);const S=h.createElement("div",{ref:g,style:b(b({position:"relative"},a),I)});return h.createElement(A,{spinning:O||P,delay:300},S)};var N=h.forwardRef(D);export{N as default};
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/components/AnnotationView/index.tsx"],"sourcesContent":["/**\n * 用于标注查看模式\n * @author laoluo\n */\n\nimport React, { useEffect, useRef, useImperativeHandle, useState } from 'react';\nimport { ViewOperation, ImgUtils } from '@labelbee/lb-annotation';\nimport { Spin } from 'antd/es';\n\ninterface IProps {\n src: string; // 图片路径\n size: {\n width: number;\n height: number;\n };\n style?: {\n color?: string;\n fill?: string;\n thickness?: number;\n };\n annotations: any[]; // TODO\n zoomChange?: (zoom: number) => void;\n backgroundStyle?: React.CSSProperties;\n onChange?: (type: 'hover' | 'selected', ids: string[]) => void;\n\n showLoading?: boolean;\n}\n\nconst DEFAULT_SIZE = {\n width: 1280,\n height: 720,\n};\n\nconst AnnotationView = (props: IProps, ref: any) => {\n const {\n size = DEFAULT_SIZE,\n src,\n annotations = [],\n style = {\n stroke: 'blue',\n thickness: 3,\n },\n zoomChange,\n backgroundStyle = {},\n onChange,\n showLoading = false,\n } = props;\n const [loading, setLoading] = useState(false);\n const annotationRef = useRef<HTMLDivElement>(null);\n const viewOperation = useRef<ViewOperation>();\n\n useImperativeHandle(\n ref,\n () => {\n const toolInstance = viewOperation.current;\n if (!toolInstance) {\n return {};\n }\n\n return {\n zoomIn: () => toolInstance.zoomChanged(true), // 放大\n zoomOut: () => toolInstance.zoomChanged(false), // 缩小\n initImgPos: () => toolInstance.initImgPos(),\n toolInstance,\n };\n },\n [viewOperation.current],\n );\n\n useEffect(() => {\n if (annotationRef.current) {\n viewOperation.current = new ViewOperation({\n container: annotationRef.current,\n size,\n style,\n annotations,\n config: '{}', // TODO,暂时不需要\n });\n\n viewOperation.current.init();\n }\n\n return () => {\n viewOperation.current?.destroy();\n };\n }, []);\n\n useEffect(() => {\n if (viewOperation.current) {\n setLoading(true);\n viewOperation.current?.setLoading(true);\n ImgUtils.load(src)\n .then((imgNode: HTMLImageElement) => {\n viewOperation.current?.setLoading(false);\n setLoading(false);\n\n viewOperation.current?.setImgNode(imgNode);\n })\n .catch(() => {\n viewOperation.current?.setLoading(false);\n setLoading(false);\n });\n }\n }, [src]);\n\n /**\n * 基础数据绘制监听\n */\n useEffect(() => {\n if (viewOperation.current) {\n viewOperation.current.updateData(annotations);\n }\n }, [annotations]);\n\n /** 窗口大小监听 */\n useEffect(() => {\n const toolInstance = viewOperation.current;\n\n if (toolInstance?.setSize) {\n toolInstance.setSize(size);\n }\n }, [size?.width, size?.height]);\n\n useEffect(() => {\n if (viewOperation.current) {\n viewOperation.current?.on('onChange', (...args: any) => {\n onChange?.apply(null, args);\n });\n\n viewOperation.current?.on('renderZoom', (zoom: number) => {\n if (zoomChange) {\n zoomChange(zoom);\n }\n });\n }\n return () => {\n viewOperation.current?.unbindAll('onChange');\n viewOperation.current?.unbindAll('renderZoom');\n };\n }, [zoomChange, onChange]);\n\n const mainRender = (\n <div ref={annotationRef} style={{ position: 'relative', ...size, ...backgroundStyle }} />\n );\n\n return (\n <Spin spinning={showLoading || loading} delay={300}>\n {mainRender}\n </Spin>\n );\n\n // return mainRender;\n};\n\nexport default React.forwardRef(AnnotationView);\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/components/AnnotationView/index.tsx"],"sourcesContent":["/**\n * 用于标注查看模式\n * @author laoluo\n */\n\nimport React, { useEffect, useRef, useImperativeHandle, useState } from 'react';\nimport { ViewOperation, ImgUtils } from '@labelbee/lb-annotation';\nimport { Spin } from 'antd/es';\n\ninterface IProps {\n src: string; // 图片路径\n size?: {\n width?: number;\n height?: number;\n };\n style?: {\n color?: string;\n fill?: string;\n thickness?: number;\n };\n annotations: any[]; // TODO\n zoomChange?: (zoom: number) => void;\n backgroundStyle?: React.CSSProperties;\n onChange?: (type: 'hover' | 'selected', ids: string[]) => void;\n\n showLoading?: boolean;\n}\n\nconst DEFAULT_SIZE = {\n width: 1280,\n height: 720,\n};\n\nconst sizeInitialized = (size?: { width?: number; height?: number }) => {\n if (!size) {\n return DEFAULT_SIZE;\n }\n\n if (!size.width) {\n size.width = DEFAULT_SIZE.width;\n }\n\n if (!size.height) {\n size.height = DEFAULT_SIZE.height;\n }\n\n return size;\n};\n\nconst AnnotationView = (props: IProps, ref: any) => {\n const {\n src,\n annotations = [],\n style = {\n stroke: 'blue',\n thickness: 3,\n },\n zoomChange,\n backgroundStyle = {},\n onChange,\n showLoading = false,\n } = props;\n const size = sizeInitialized(props.size);\n const [loading, setLoading] = useState(false);\n const annotationRef = useRef<HTMLDivElement>(null);\n const viewOperation = useRef<ViewOperation>();\n\n useImperativeHandle(\n ref,\n () => {\n const toolInstance = viewOperation.current;\n if (!toolInstance) {\n return {};\n }\n\n return {\n zoomIn: () => toolInstance.zoomChanged(true), // 放大\n zoomOut: () => toolInstance.zoomChanged(false), // 缩小\n initImgPos: () => toolInstance.initImgPos(),\n toolInstance,\n };\n },\n [viewOperation.current],\n );\n\n useEffect(() => {\n if (annotationRef.current) {\n viewOperation.current = new ViewOperation({\n container: annotationRef.current,\n size,\n style,\n annotations,\n config: '{}', // TODO,暂时不需要\n });\n\n viewOperation.current.init();\n }\n\n return () => {\n viewOperation.current?.destroy();\n };\n }, []);\n\n useEffect(() => {\n if (viewOperation.current) {\n setLoading(true);\n viewOperation.current?.setLoading(true);\n ImgUtils.load(src)\n .then((imgNode: HTMLImageElement) => {\n viewOperation.current?.setLoading(false);\n setLoading(false);\n\n viewOperation.current?.setImgNode(imgNode);\n })\n .catch(() => {\n viewOperation.current?.setLoading(false);\n setLoading(false);\n });\n }\n }, [src]);\n\n /**\n * 基础数据绘制监听\n */\n useEffect(() => {\n if (viewOperation.current) {\n viewOperation.current.updateData(annotations);\n }\n }, [annotations]);\n\n /** 窗口大小监听 */\n useEffect(() => {\n const toolInstance = viewOperation.current;\n\n if (toolInstance?.setSize) {\n toolInstance.setSize(size);\n }\n }, [size?.width, size?.height]);\n\n useEffect(() => {\n if (viewOperation.current) {\n viewOperation.current?.on('onChange', (...args: any) => {\n onChange?.apply(null, args);\n });\n\n viewOperation.current?.on('renderZoom', (zoom: number) => {\n if (zoomChange) {\n zoomChange(zoom);\n }\n });\n }\n return () => {\n viewOperation.current?.unbindAll('onChange');\n viewOperation.current?.unbindAll('renderZoom');\n };\n }, [zoomChange, onChange]);\n\n const mainRender = (\n <div ref={annotationRef} style={{ position: 'relative', ...size, ...backgroundStyle }} />\n );\n\n return (\n <Spin spinning={showLoading || loading} delay={300}>\n {mainRender}\n </Spin>\n );\n\n // return mainRender;\n};\n\nexport default React.forwardRef(AnnotationView);\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AA4BA,MAAM,YAAe,GAAA;AAAA,EACnB,KAAO,EAAA,IAAA;AAAA,EACP,MAAQ,EAAA,GAAA;AAAA,CAAA,CAAA;AAGV,MAAM,eAAA,GAAkB,CAAC,IAA+C,KAAA;AACtE,EAAA,IAAI,CAAC,IAAM,EAAA;AACT,IAAO,OAAA,YAAA,CAAA;AAAA,GAAA;AAGT,EAAI,IAAA,CAAC,KAAK,KAAO,EAAA;AACf,IAAA,IAAA,CAAK,QAAQ,YAAa,CAAA,KAAA,CAAA;AAAA,GAAA;AAG5B,EAAI,IAAA,CAAC,KAAK,MAAQ,EAAA;AAChB,IAAA,IAAA,CAAK,SAAS,YAAa,CAAA,MAAA,CAAA;AAAA,GAAA;AAG7B,EAAO,OAAA,IAAA,CAAA;AAAA,CAAA,CAAA;AAGT,MAAM,cAAA,GAAiB,CAAC,KAAA,EAAe,GAAa,KAAA;AAClD,EAAM,MAAA;AAAA,IACJ,GAAA;AAAA,IACA,WAAc,GAAA,EAAA;AAAA,IACd,KAAQ,GAAA;AAAA,MACN,MAAQ,EAAA,MAAA;AAAA,MACR,SAAW,EAAA,CAAA;AAAA,KAAA;AAAA,IAEb,UAAA;AAAA,IACA,eAAkB,GAAA,EAAA;AAAA,IAClB,QAAA;AAAA,IACA,WAAc,GAAA,KAAA;AAAA,GACZ,GAAA,KAAA,CAAA;AACJ,EAAM,MAAA,IAAA,GAAO,gBAAgB,KAAM,CAAA,IAAA,CAAA,CAAA;AACnC,EAAM,MAAA,CAAC,OAAS,EAAA,UAAA,CAAA,GAAc,QAAS,CAAA,KAAA,CAAA,CAAA;AACvC,EAAA,MAAM,gBAAgB,MAAuB,CAAA,IAAA,CAAA,CAAA;AAC7C,EAAA,MAAM,aAAgB,GAAA,MAAA,EAAA,CAAA;AAEtB,EAAA,mBAAA,CACE,KACA,MAAM;AACJ,IAAA,MAAM,eAAe,aAAc,CAAA,OAAA,CAAA;AACnC,IAAA,IAAI,CAAC,YAAc,EAAA;AACjB,MAAO,OAAA,EAAA,CAAA;AAAA,KAAA;AAGT,IAAO,OAAA;AAAA,MACL,MAAA,EAAQ,MAAM,YAAA,CAAa,WAAY,CAAA,IAAA,CAAA;AAAA,MACvC,OAAA,EAAS,MAAM,YAAA,CAAa,WAAY,CAAA,KAAA,CAAA;AAAA,MACxC,UAAA,EAAY,MAAM,YAAa,CAAA,UAAA,EAAA;AAAA,MAC/B,YAAA;AAAA,KAAA,CAAA;AAAA,GAAA,EAGJ,CAAC,aAAc,CAAA,OAAA,CAAA,CAAA,CAAA;AAGjB,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,cAAc,OAAS,EAAA;AACzB,MAAc,aAAA,CAAA,OAAA,GAAU,IAAI,aAAc,CAAA;AAAA,QACxC,WAAW,aAAc,CAAA,OAAA;AAAA,QACzB,IAAA;AAAA,QACA,KAAA;AAAA,QACA,WAAA;AAAA,QACA,MAAQ,EAAA,IAAA;AAAA,OAAA,CAAA,CAAA;AAGV,MAAA,aAAA,CAAc,OAAQ,CAAA,IAAA,EAAA,CAAA;AAAA,KAAA;AAGxB,IAAA,OAAO,MAAM;AAlGjB,MAAA,IAAA,EAAA,CAAA;AAmGM,MAAA,CAAA,EAAA,GAAA,aAAA,CAAc,YAAd,IAAuB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAAA,EAAA,CAAA;AAAA,KAAA,CAAA;AAAA,GAExB,EAAA,EAAA,CAAA,CAAA;AAEH,EAAA,SAAA,CAAU,MAAM;AAvGlB,IAAA,IAAA,EAAA,CAAA;AAwGI,IAAA,IAAI,cAAc,OAAS,EAAA;AACzB,MAAW,UAAA,CAAA,IAAA,CAAA,CAAA;AACX,MAAc,CAAA,EAAA,GAAA,aAAA,CAAA,OAAA,KAAd,mBAAuB,UAAW,CAAA,IAAA,CAAA,CAAA;AAClC,MAAA,QAAA,CAAS,IAAK,CAAA,GAAA,CAAA,CACX,IAAK,CAAA,CAAC,OAA8B,KAAA;AA5G7C,QAAA,IAAA,GAAA,EAAA,EAAA,CAAA;AA6GU,QAAc,CAAA,GAAA,GAAA,aAAA,CAAA,OAAA,KAAd,oBAAuB,UAAW,CAAA,KAAA,CAAA,CAAA;AAClC,QAAW,UAAA,CAAA,KAAA,CAAA,CAAA;AAEX,QAAc,CAAA,EAAA,GAAA,aAAA,CAAA,OAAA,KAAd,mBAAuB,UAAW,CAAA,OAAA,CAAA,CAAA;AAAA,OAAA,CAAA,CAEnC,MAAM,MAAM;AAlHrB,QAAA,IAAA,GAAA,CAAA;AAmHU,QAAc,CAAA,GAAA,GAAA,aAAA,CAAA,OAAA,KAAd,oBAAuB,UAAW,CAAA,KAAA,CAAA,CAAA;AAClC,QAAW,UAAA,CAAA,KAAA,CAAA,CAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA;AAAA,GAAA,EAGhB,CAAC,GAAA,CAAA,CAAA,CAAA;AAKJ,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,cAAc,OAAS,EAAA;AACzB,MAAA,aAAA,CAAc,QAAQ,UAAW,CAAA,WAAA,CAAA,CAAA;AAAA,KAAA;AAAA,GAAA,EAElC,CAAC,WAAA,CAAA,CAAA,CAAA;AAGJ,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,eAAe,aAAc,CAAA,OAAA,CAAA;AAEnC,IAAA,IAAI,6CAAc,OAAS,EAAA;AACzB,MAAA,YAAA,CAAa,OAAQ,CAAA,IAAA,CAAA,CAAA;AAAA,KAAA;AAAA,GAEtB,EAAA,CAAC,IAAM,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,IAAA,CAAA,KAAA,EAAO,IAAM,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,IAAA,CAAA,MAAA,CAAA,CAAA,CAAA;AAEvB,EAAA,SAAA,CAAU,MAAM;AA3IlB,IAAA,IAAA,EAAA,EAAA,EAAA,CAAA;AA4II,IAAA,IAAI,cAAc,OAAS,EAAA;AACzB,MAAA,CAAA,EAAA,GAAA,aAAA,CAAc,OAAd,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAuB,EAAG,CAAA,UAAA,EAAY,IAAI,IAAc,KAAA;AACtD,QAAA,QAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,QAAA,CAAU,MAAM,IAAM,EAAA,IAAA,CAAA,CAAA;AAAA,OAAA,CAAA,CAAA;AAGxB,MAAA,CAAA,EAAA,GAAA,aAAA,CAAc,OAAd,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAuB,EAAG,CAAA,YAAA,EAAc,CAAC,IAAiB,KAAA;AACxD,QAAA,IAAI,UAAY,EAAA;AACd,UAAW,UAAA,CAAA,IAAA,CAAA,CAAA;AAAA,SAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA;AAIjB,IAAA,OAAO,MAAM;AAvJjB,MAAA,IAAA,GAAA,EAAA,GAAA,CAAA;AAwJM,MAAc,CAAA,GAAA,GAAA,aAAA,CAAA,OAAA,KAAd,oBAAuB,SAAU,CAAA,UAAA,CAAA,CAAA;AACjC,MAAc,CAAA,GAAA,GAAA,aAAA,CAAA,OAAA,KAAd,oBAAuB,SAAU,CAAA,YAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAAA,GAAA,EAElC,CAAC,UAAY,EAAA,QAAA,CAAA,CAAA,CAAA;AAEhB,EAAM,MAAA,UAAA,uCACH,KAAD,EAAA;AAAA,IAAK,GAAK,EAAA,aAAA;AAAA,IAAe,KAAO,EAAA,cAAA,CAAA,cAAA,CAAA,CAAE,QAAU,EAAA,UAAA,CAAA,EAAe,IAAS,CAAA,EAAA,eAAA,CAAA;AAAA,GAAA,CAAA,CAAA;AAGtE,EAAA,2CACG,IAAD,EAAA;AAAA,IAAM,UAAU,WAAe,IAAA,OAAA;AAAA,IAAS,KAAO,EAAA,GAAA;AAAA,GAC5C,EAAA,UAAA,CAAA,CAAA;AAAA,CAAA,CAAA;AAOP,uBAAe,MAAM,UAAW,CAAA,cAAA,CAAA;;;;"}
@@ -0,0 +1 @@
1
+ import{PointCloud as f}from"@labelbee/lb-annotation";import{PointCloudUtils as b}from"@labelbee/lb-utils";import m,{useRef as s,useCallback as C,useEffect as r}from"react";const v=u=>{const{src:o,result:n,size:a}=u;let l=s();const e=s(),d=C(t=>{l.current=t},[]);return r(()=>{const t=new f({container:l.current,backgroundColor:"#ccc"});e.current=t},[]),r(()=>{var t;(t=e.current)==null||t.init()},[a]),r(()=>{var t;e.current&&o&&((t=e.current)==null||t.loadPCDFile(o))},[o]),r(()=>{n&&b.getBoxParamsFromResultList(n).forEach(i=>{var c;(c=e.current)==null||c.generateBox(i,i.id)})},[n]),m.createElement("div",{style:a,ref:d})};export{v as default};
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pointCloudAnnotationView.js","sources":["../../../src/components/AnnotationView/pointCloudAnnotationView.tsx"],"sourcesContent":["/*\n * @Author: Laoluo luozefeng@sensetime.com\n * @Date: 2022-06-13 19:31:36\n * @LastEditors: Laoluo luozefeng@sensetime.com\n * @LastEditTime: 2022-06-27 19:43:25\n */\n\nimport { PointCloud } from '@labelbee/lb-annotation';\nimport { IPointCloudBox, PointCloudUtils } from '@labelbee/lb-utils';\nimport React, { useCallback, useEffect, useRef } from 'react';\n\ninterface IProps {\n src: string; // 图片路径\n result: string;\n size: {\n width: number;\n height: number;\n };\n}\n\nconst PointCloudAnnotationView = (props: IProps) => {\n const { src, result, size } = props;\n let viewOperation = useRef<any>();\n const instance = useRef<any>();\n\n const refCallback = useCallback((node) => {\n viewOperation.current = node;\n }, []);\n\n useEffect(() => {\n const pointCloud = new PointCloud({\n container: viewOperation.current,\n backgroundColor: '#ccc',\n });\n instance.current = pointCloud;\n }, []);\n\n useEffect(() => {\n instance.current?.init();\n }, [size]);\n\n useEffect(() => {\n if (instance.current && src) {\n instance.current?.loadPCDFile(src);\n }\n }, [src]);\n\n useEffect(() => {\n if (result) {\n const boxParamsList = PointCloudUtils.getBoxParamsFromResultList(result);\n\n // Add Init Box\n boxParamsList.forEach((v: IPointCloudBox) => {\n instance.current?.generateBox(v, v.id);\n });\n }\n }, [result]);\n\n return <div style={size} ref={refCallback} />;\n};\n\nexport default PointCloudAnnotationView;\n"],"names":[],"mappings":";;;;AAoBM,MAAA,wBAAA,GAA2B,CAAC,KAAkB,KAAA;AAClD,EAAM,MAAA,CAAE,GAAK,EAAA,MAAA,EAAQ,IAAS,CAAA,GAAA,KAAA,CAAA;AAC9B,EAAA,IAAI,aAAgB,GAAA,MAAA,EAAA,CAAA;AACpB,EAAA,MAAM,QAAW,GAAA,MAAA,EAAA,CAAA;AAEjB,EAAM,MAAA,WAAA,GAAc,WAAY,CAAA,CAAC,IAAS,KAAA;AACxC,IAAA,aAAA,CAAc,OAAU,GAAA,IAAA,CAAA;AAAA,GACvB,EAAA,EAAA,CAAA,CAAA;AAEH,EAAA,SAAA,CAAU,MAAM;AACd,IAAM,MAAA,UAAA,GAAa,IAAI,UAAW,CAAA;AAAA,MAChC,WAAW,aAAc,CAAA,OAAA;AAAA,MACzB,eAAiB,EAAA,MAAA;AAAA,KAAA,CAAA,CAAA;AAEnB,IAAA,QAAA,CAAS,OAAU,GAAA,UAAA,CAAA;AAAA,GAClB,EAAA,EAAA,CAAA,CAAA;AAEH,EAAA,SAAA,CAAU,MAAM;AArClB,IAAA,IAAA,EAAA,CAAA;AAsCI,IAAA,CAAA,EAAA,GAAA,QAAA,CAAS,YAAT,IAAkB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,EAAA,CAAA;AAAA,GAAA,EACjB,CAAC,IAAA,CAAA,CAAA,CAAA;AAEJ,EAAA,SAAA,CAAU,MAAM;AAzClB,IAAA,IAAA,EAAA,CAAA;AA0CI,IAAI,IAAA,QAAA,CAAS,WAAW,GAAK,EAAA;AAC3B,MAAS,CAAA,EAAA,GAAA,QAAA,CAAA,OAAA,KAAT,mBAAkB,WAAY,CAAA,GAAA,CAAA,CAAA;AAAA,KAAA;AAAA,GAAA,EAE/B,CAAC,GAAA,CAAA,CAAA,CAAA;AAEJ,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,MAAQ,EAAA;AACV,MAAM,MAAA,aAAA,GAAgB,gBAAgB,0BAA2B,CAAA,MAAA,CAAA,CAAA;AAGjE,MAAc,aAAA,CAAA,OAAA,CAAQ,CAAC,CAAsB,KAAA;AApDnD,QAAA,IAAA,EAAA,CAAA;AAqDQ,QAAA,CAAA,EAAA,GAAA,QAAA,CAAS,OAAT,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAkB,WAAY,CAAA,CAAA,EAAG,CAAE,CAAA,EAAA,CAAA,CAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA;AAAA,GAAA,EAGtC,CAAC,MAAA,CAAA,CAAA,CAAA;AAEJ,EAAA,2CAAQ,KAAD,EAAA;AAAA,IAAK,KAAO,EAAA,IAAA;AAAA,IAAM,GAAK,EAAA,WAAA;AAAA,GAAA,CAAA,CAAA;AAAA;;;;"}
@@ -1 +1 @@
1
- import{editStepWidth as g,sidebarWidth as w,headerHeight as y,footerHeight as p}from"../../data/enums/AnnotationSize.js";import{cKeyCode as C,toolUtils as v}from"@labelbee/lb-annotation";import l,{useState as f,useEffect as E,useMemo as k}from"react";import{connect as K}from"react-redux";import{PageBackward as H,PageForward as P,UpdateRotate as S,UpdateToolInstance as T}from"../../store/annotation/actionCreators.js";import{message as L}from"antd";const a=C.default,m=l.createContext({width:window.innerWidth,height:window.innerHeight}),u=e=>{const{children:d,dispatch:n}=e,[i]=f(window.innerWidth),[r]=f(window.innerHeight),o=t=>{var c;if(!!v.hotkeyFilter(t)&&((!t.shiftKey||!t.ctrlKey)&&(t.keyCode===a.A&&n(H()),t.keyCode===a.D&&n(P()),t.keyCode===a.R&&n(S())),t.shiftKey===!0&&t.ctrlKey===!0&&t.altKey===!0&&t.keyCode===a.C)){L.success("DEVELOPMENT TESTING - Switch Last Two Canvas");const h=(c=e.annotation)==null?void 0:c.annotationEngine.switchLastTwoCanvas();if(!h)return;n(T(h))}};E(()=>(window.addEventListener("keydown",o),()=>{window.removeEventListener("keydown",o)}),[e.annotation.annotationEngine]);const s=k(()=>({width:i,height:r}),[i,r]);return l.createElement(m.Provider,{value:s},d)},W=K(e=>({annotation:e.annotation}))(u),b=(e,d=!1,n=!1)=>{const{width:i,height:r}=e,o=y+p,s=n?40+o+40:o,t=d?g+w:w;return{width:i-t,height:r-s}};export{W as ViewportProvider,u as ViewportProviderComponent,b as getFormatSize,m as viewportContext};
1
+ import{editStepWidth as C,sidebarWidth as f,headerHeight as p,footerHeight as k}from"../../data/enums/AnnotationSize.js";import{cKeyCode as E,toolUtils as P}from"@labelbee/lb-annotation";import l,{useState as g,useEffect as T,useMemo as K}from"react";import{connect as H}from"react-redux";import{PageBackward as u,PageForward as m,UpdateRotate as S,UpdateToolInstance as L}from"../../store/annotation/actionCreators.js";import{message as W}from"antd";const d=E.default,y=l.createContext({width:window.innerWidth,height:window.innerHeight}),v=e=>{const{children:s,dispatch:n,annotation:{skipBeforePageTurning:o}}=e;console.log("viewport",e);const[r]=g(window.innerWidth),[i]=g(window.innerHeight),a=t=>{var h;if(!!P.hotkeyFilter(t)){if(!t.shiftKey||!t.ctrlKey){if(t.keyCode===d.A){if(o){o(()=>n(u()));return}n(u())}if(t.keyCode===d.D){if(o){o(()=>n(m()));return}n(m())}t.keyCode===d.R&&n(S())}if(t.shiftKey===!0&&t.ctrlKey===!0&&t.altKey===!0&&t.keyCode===d.C){W.success("DEVELOPMENT TESTING - Switch Last Two Canvas");const w=(h=e.annotation)==null?void 0:h.annotationEngine.switchLastTwoCanvas();if(!w)return;n(L(w))}}};T(()=>(window.addEventListener("keydown",a),()=>{window.removeEventListener("keydown",a)}),[e.annotation.annotationEngine,e.annotation.skipBeforePageTurning]);const c=K(()=>({width:r,height:i}),[r,i]);return l.createElement(y.Provider,{value:c},s)},b=H(e=>({annotation:e.annotation}))(v),x=(e,s=!1,n=!1)=>{const{width:o,height:r}=e,i=p+k,a=n?40+i+40:i,c=s?C+f:f;return{width:o-c,height:r-a}};export{b as ViewportProvider,v as ViewportProviderComponent,x as getFormatSize,y as viewportContext};
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/components/customResizeHook/index.tsx"],"sourcesContent":["import {\n editStepWidth,\n footerHeight,\n headerHeight,\n sidebarWidth,\n} from '@/data/enums/AnnotationSize';\nimport { cKeyCode, toolUtils } from '@labelbee/lb-annotation';\n\nimport React, { useContext, useEffect, useMemo, useState } from 'react';\nimport { connect } from 'react-redux';\nimport { AppState } from '@/store';\nimport {\n UpdateRotate,\n PageBackward,\n PageForward,\n UpdateToolInstance,\n} from '@/store/annotation/actionCreators';\nimport { ISize } from '@/types/main';\nimport { message } from 'antd';\n\nconst EKeyCode = cKeyCode.default;\n\nexport const viewportContext = React.createContext<{\n width: number;\n height: number;\n}>({\n width: window.innerWidth,\n height: window.innerHeight,\n});\n\nexport const ViewportProviderComponent = (props: any) => {\n const { children, dispatch } = props;\n const [width] = useState(window.innerWidth);\n const [height] = useState(window.innerHeight);\n\n const keydown = (e: KeyboardEvent) => {\n if (!toolUtils.hotkeyFilter(e)) {\n return;\n }\n\n if (!e.shiftKey || !e.ctrlKey) {\n if (e.keyCode === EKeyCode.A) {\n dispatch(PageBackward());\n }\n\n if (e.keyCode === EKeyCode.D) {\n dispatch(PageForward());\n }\n if (e.keyCode === EKeyCode.R) {\n dispatch(UpdateRotate());\n }\n }\n\n /**\n * Hidden Feature\n *\n * User: Software Engineer\n */\n if (\n e.shiftKey === true &&\n e.ctrlKey === true &&\n e.altKey === true &&\n e.keyCode === EKeyCode.C\n ) {\n message.success('DEVELOPMENT TESTING - Switch Last Two Canvas');\n const newInstance = props.annotation?.annotationEngine.switchLastTwoCanvas();\n if (!newInstance) {\n return;\n }\n dispatch(UpdateToolInstance(newInstance));\n }\n };\n\n useEffect(() => {\n window.addEventListener('keydown', keydown);\n\n return () => {\n window.removeEventListener('keydown', keydown);\n };\n }, [props.annotation.annotationEngine]);\n\n const size = useMemo(() => ({ width, height }), [width, height]);\n\n return <viewportContext.Provider value={size}>{children}</viewportContext.Provider>;\n};\n\nexport const ViewportProvider = connect((state: AppState) => ({\n annotation: state.annotation,\n}))(ViewportProviderComponent);\n\nexport const useViewport = () => {\n const { width, height } = useContext(viewportContext);\n return { width, height };\n};\n\n/**\n * 获取当前 canvas 的大小\n * @param isEdit 是否为编辑模式\n * @param isTips 是否有 tips\n */\nexport const useCanvasViewPort = (isEdit = false, isTips = false) => {\n const { width, height } = useContext(viewportContext);\n const otherHeight = headerHeight + footerHeight;\n const placeholderHeight = isTips ? 40 + otherHeight + 40 : otherHeight;\n const placeholderWidth = isEdit ? editStepWidth + sidebarWidth : sidebarWidth;\n\n return {\n width: width - placeholderWidth,\n height: height - placeholderHeight,\n };\n};\n\n/**\n * 解析当前 windowSize 下的 canvasSize\n * @param size\n * @param isEdit\n * @param isTips\n */\nexport const getFormatSize = (windowSize: ISize, isEdit = false, isTips = false) => {\n const { width, height } = windowSize;\n const otherHeight = headerHeight + footerHeight;\n const placeholderHeight = isTips ? 40 + otherHeight + 40 : otherHeight;\n const placeholderWidth = isEdit ? editStepWidth + sidebarWidth : sidebarWidth;\n\n return {\n width: width - placeholderWidth,\n height: height - placeholderHeight,\n };\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/components/customResizeHook/index.tsx"],"sourcesContent":["import {\n editStepWidth,\n footerHeight,\n headerHeight,\n sidebarWidth,\n} from '@/data/enums/AnnotationSize';\nimport { cKeyCode, toolUtils } from '@labelbee/lb-annotation';\n\nimport React, { useContext, useEffect, useMemo, useState } from 'react';\nimport { connect } from 'react-redux';\nimport { AppState } from '@/store';\nimport {\n UpdateRotate,\n PageBackward,\n PageForward,\n UpdateToolInstance,\n} from '@/store/annotation/actionCreators';\nimport { ISize } from '@/types/main';\nimport { message } from 'antd';\n\nconst EKeyCode = cKeyCode.default;\n\nexport const viewportContext = React.createContext<{\n width: number;\n height: number;\n}>({\n width: window.innerWidth,\n height: window.innerHeight,\n});\n\nexport const ViewportProviderComponent = (props: any) => {\n const {\n children,\n dispatch,\n annotation: { skipBeforePageTurning },\n } = props;\n console.log('viewport', props);\n const [width] = useState(window.innerWidth);\n const [height] = useState(window.innerHeight);\n\n const keydown = (e: KeyboardEvent) => {\n if (!toolUtils.hotkeyFilter(e)) {\n return;\n }\n\n if (!e.shiftKey || !e.ctrlKey) {\n if (e.keyCode === EKeyCode.A) {\n if (skipBeforePageTurning) {\n skipBeforePageTurning(() => dispatch(PageBackward()));\n return;\n }\n\n dispatch(PageBackward());\n }\n\n if (e.keyCode === EKeyCode.D) {\n if (skipBeforePageTurning) {\n skipBeforePageTurning(() => dispatch(PageForward()));\n return;\n }\n dispatch(PageForward());\n }\n if (e.keyCode === EKeyCode.R) {\n dispatch(UpdateRotate());\n }\n }\n\n /**\n * Hidden Feature\n *\n * User: Software Engineer\n */\n if (\n e.shiftKey === true &&\n e.ctrlKey === true &&\n e.altKey === true &&\n e.keyCode === EKeyCode.C\n ) {\n message.success('DEVELOPMENT TESTING - Switch Last Two Canvas');\n const newInstance = props.annotation?.annotationEngine.switchLastTwoCanvas();\n if (!newInstance) {\n return;\n }\n dispatch(UpdateToolInstance(newInstance));\n }\n };\n\n useEffect(() => {\n window.addEventListener('keydown', keydown);\n\n return () => {\n window.removeEventListener('keydown', keydown);\n };\n }, [props.annotation.annotationEngine, props.annotation.skipBeforePageTurning]);\n\n const size = useMemo(() => ({ width, height }), [width, height]);\n\n return <viewportContext.Provider value={size}>{children}</viewportContext.Provider>;\n};\n\nexport const ViewportProvider = connect((state: AppState) => ({\n annotation: state.annotation,\n}))(ViewportProviderComponent);\n\nexport const useViewport = () => {\n const { width, height } = useContext(viewportContext);\n return { width, height };\n};\n\n/**\n * 获取当前 canvas 的大小\n * @param isEdit 是否为编辑模式\n * @param isTips 是否有 tips\n */\nexport const useCanvasViewPort = (isEdit = false, isTips = false) => {\n const { width, height } = useContext(viewportContext);\n const otherHeight = headerHeight + footerHeight;\n const placeholderHeight = isTips ? 40 + otherHeight + 40 : otherHeight;\n const placeholderWidth = isEdit ? editStepWidth + sidebarWidth : sidebarWidth;\n\n return {\n width: width - placeholderWidth,\n height: height - placeholderHeight,\n };\n};\n\n/**\n * 解析当前 windowSize 下的 canvasSize\n * @param size\n * @param isEdit\n * @param isTips\n */\nexport const getFormatSize = (windowSize: ISize, isEdit = false, isTips = false) => {\n const { width, height } = windowSize;\n const otherHeight = headerHeight + footerHeight;\n const placeholderHeight = isTips ? 40 + otherHeight + 40 : otherHeight;\n const placeholderWidth = isEdit ? editStepWidth + sidebarWidth : sidebarWidth;\n\n return {\n width: width - placeholderWidth,\n height: height - placeholderHeight,\n };\n};\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- import{getClassName as d}from"../../utils/dom.js";import o,{useState as f,useContext as y,useEffect as O}from"react";import{PointCloudContainer as h}from"./PointCloudLayout.js";import I from"../AnnotationView/index.js";import{PointCloudContext as V}from"./PointCloudContext.js";import{connect as b}from"react-redux";import{LeftOutlined as j,RightOutlined as D}from"@ant-design/icons";var N=Object.defineProperty,g=Object.getOwnPropertySymbols,S=Object.prototype.hasOwnProperty,A=Object.prototype.propertyIsEnumerable,v=(n,t,e)=>t in n?N(n,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):n[t]=e,R=(n,t)=>{for(var e in t||(t={}))S.call(t,e)&&v(n,e,t[e]);if(g)for(var e of g(t))A.call(t,e)&&v(n,e,t[e]);return n};const T=({onNext:n,onPrev:t,imgLength:e,imgIndex:l})=>o.createElement("div",null,o.createElement(j,{onClick:t}),o.createElement("span",null," ",l+1," / ",e," "),o.createElement(D,{onClick:n})),z=({imgInfo:n})=>{var t,e;const[l,C]=f([]),{pointCloudBoxList:c,topViewInstance:u}=y(V),[a,p]=f(0),r=(t=n==null?void 0:n.mappingImgList)==null?void 0:t[a];O(()=>{if(u&&r){const{pointCloudInstance:i}=u,w={fill:"transparent",color:"green"},E=c.reduce((_,x)=>{const L=i.pointCloudLidar2image(x,r.calib);return[..._,...L.map(m=>({type:m.type,annotation:R({pointList:m.pointList},w)}))]},[]);C(E)}},[c,r]);const P={width:700,height:400};if(!n)return o.createElement("div",null);const{mappingImgList:s}=n;return s?o.createElement(h,{className:d("point-cloud-2d-container"),title:"2D\u89C6\u56FE",toolbar:o.createElement(T,{imgIndex:a,imgLength:s.length,onNext:()=>{a>=s.length-1||p(i=>i+1)},onPrev:()=>{a<=0||p(i=>i-1)}})},o.createElement("div",{className:d("point-cloud-2d-image")},o.createElement(I,{src:(e=r==null?void 0:r.url)!=null?e:"",annotations:l,size:P}))):o.createElement("div",null)},B=n=>{const{imgList:t,imgIndex:e}=n.annotation;return{imgInfo:t[e]}};var F=b(B)(z);export{F as default};
1
+ import{getClassName as f}from"../../utils/dom.js";import o,{useState as g,useContext as O,useRef as I,useEffect as h}from"react";import{PointCloudContainer as j}from"./PointCloudLayout.js";import S from"../AnnotationView/index.js";import{PointCloudContext as V}from"./PointCloudContext.js";import{connect as b}from"react-redux";import{LeftOutlined as D,RightOutlined as N}from"@ant-design/icons";import A from"../../hooks/useSize.js";var z=Object.defineProperty,v=Object.getOwnPropertySymbols,R=Object.prototype.hasOwnProperty,T=Object.prototype.propertyIsEnumerable,C=(n,t,e)=>t in n?z(n,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):n[t]=e,k=(n,t)=>{for(var e in t||(t={}))R.call(t,e)&&C(n,e,t[e]);if(v)for(var e of v(t))T.call(t,e)&&C(n,e,t[e]);return n};const B=({onNext:n,onPrev:t,imgLength:e,imgIndex:a})=>o.createElement("div",null,o.createElement(D,{onClick:t}),o.createElement("span",null," ",a+1," / ",e," "),o.createElement(N,{onClick:n})),F=({imgInfo:n})=>{var t,e;const[a,P]=g([]),{pointCloudBoxList:u,topViewInstance:c}=O(V),[l,m]=g(0),p=I(null),E=A(p),r=(t=n==null?void 0:n.mappingImgList)==null?void 0:t[l];if(h(()=>{if(c&&r){const{pointCloudInstance:i}=c,_={fill:"transparent",color:"green"},w=u.reduce((x,L)=>{const y=i.pointCloudLidar2image(L,r.calib);return[...x,...y.map(d=>({type:d.type,annotation:k({pointList:d.pointList},_)}))]},[]);P(w)}},[u,r]),!n)return o.createElement("div",null);const{mappingImgList:s}=n;return s?(console.log("render",a),o.createElement(j,{className:f("point-cloud-2d-container"),title:"2D\u89C6\u56FE",toolbar:o.createElement(B,{imgIndex:l,imgLength:s.length,onNext:()=>{l>=s.length-1||m(i=>i+1)},onPrev:()=>{l<=0||m(i=>i-1)}})},o.createElement("div",{className:f("point-cloud-2d-image"),ref:p},o.createElement(S,{src:(e=r==null?void 0:r.url)!=null?e:"",annotations:a,size:E})))):o.createElement("div",null)},M=n=>{const{imgList:t,imgIndex:e}=n.annotation;return{imgInfo:t[e]}};var $=b(M)(F);export{$ as default};
@@ -1 +1 @@
1
- {"version":3,"file":"PointCloud2DView.js","sources":["../../../src/components/pointCloudView/PointCloud2DView.tsx"],"sourcesContent":["import { getClassName } from '@/utils/dom';\nimport React, { useContext, useEffect, useState } from 'react';\nimport { PointCloudContainer } from './PointCloudLayout';\nimport AnnotationView from '@/components/AnnotationView';\nimport { PointCloudContext } from './PointCloudContext';\nimport { AppState } from '@/store';\nimport { connect } from 'react-redux';\nimport { IFileItem } from '@/types/data';\nimport { LeftOutlined, RightOutlined } from '@ant-design/icons';\n\ninterface IProps {\n imgInfo: IFileItem;\n}\n\nconst Toolbar = ({\n onNext,\n onPrev,\n imgLength,\n imgIndex,\n}: {\n onNext: () => void;\n onPrev: () => void;\n imgLength: number;\n imgIndex: number;\n}) => {\n return (\n <div>\n <LeftOutlined onClick={onPrev} />\n <span>\n {' '}\n {imgIndex + 1} / {imgLength}{' '}\n </span>\n\n <RightOutlined onClick={onNext} />\n </div>\n );\n};\n\n// TODO, It will be deleted when the exported type of lb-annotation is work.\ninterface IAnnotationDataTemporarily {\n type: string;\n annotation: any;\n}\n\nconst PointCloud2DView = ({ imgInfo }: IProps) => {\n const [annotations2d, setAnnotations2d] = useState<IAnnotationDataTemporarily[]>([]);\n const { pointCloudBoxList, topViewInstance } = useContext(PointCloudContext);\n const [mappingIndex, setMappingIndex] = useState(0);\n\n const mappingData = imgInfo?.mappingImgList?.[mappingIndex];\n\n useEffect(() => {\n if (topViewInstance && mappingData) {\n const { pointCloudInstance } = topViewInstance;\n const defaultViewStyle = {\n fill: 'transparent',\n color: 'green',\n };\n const newAnnotations2d: IAnnotationDataTemporarily[] = pointCloudBoxList.reduce(\n (acc: IAnnotationDataTemporarily[], pointCloudBox) => {\n const viewDataPointList = pointCloudInstance.pointCloudLidar2image(\n pointCloudBox,\n mappingData.calib,\n );\n return [\n ...acc,\n ...viewDataPointList.map((v: any) => {\n return {\n type: v.type,\n annotation: {\n pointList: v.pointList,\n ...defaultViewStyle,\n },\n };\n }),\n ];\n },\n [],\n );\n setAnnotations2d(newAnnotations2d);\n }\n }, [pointCloudBoxList, mappingData]);\n\n const size = {\n width: 700,\n height: 400,\n };\n\n if (!imgInfo) {\n return <div />;\n }\n\n const { mappingImgList } = imgInfo;\n\n if (!mappingImgList) {\n return <div />;\n }\n\n return (\n <PointCloudContainer\n className={getClassName('point-cloud-2d-container')}\n title='2D视图'\n toolbar={\n <Toolbar\n imgIndex={mappingIndex}\n imgLength={mappingImgList.length}\n onNext={() => {\n if (mappingIndex >= mappingImgList.length - 1) {\n return;\n }\n setMappingIndex((v) => v + 1);\n }}\n onPrev={() => {\n if (mappingIndex <= 0) {\n return;\n }\n setMappingIndex((v) => v - 1);\n }}\n />\n }\n >\n <div className={getClassName('point-cloud-2d-image')}>\n <AnnotationView src={mappingData?.url ?? ''} annotations={annotations2d} size={size} />\n </div>\n </PointCloudContainer>\n );\n};\n\nconst mapStateToProps = (state: AppState) => {\n const { imgList, imgIndex } = state.annotation;\n\n return {\n imgInfo: imgList[imgIndex],\n };\n};\n\nexport default connect(mapStateToProps)(PointCloud2DView);\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PointCloud2DView.js","sources":["../../../src/components/pointCloudView/PointCloud2DView.tsx"],"sourcesContent":["import { getClassName } from '@/utils/dom';\nimport React, { useContext, useEffect, useRef, useState } from 'react';\nimport { PointCloudContainer } from './PointCloudLayout';\nimport AnnotationView from '@/components/AnnotationView';\nimport { PointCloudContext } from './PointCloudContext';\nimport { AppState } from '@/store';\nimport { connect } from 'react-redux';\nimport { IFileItem } from '@/types/data';\nimport { LeftOutlined, RightOutlined } from '@ant-design/icons';\nimport useSize from '@/hooks/useSize';\n\ninterface IProps {\n imgInfo: IFileItem;\n}\n\nconst Toolbar = ({\n onNext,\n onPrev,\n imgLength,\n imgIndex,\n}: {\n onNext: () => void;\n onPrev: () => void;\n imgLength: number;\n imgIndex: number;\n}) => {\n return (\n <div>\n <LeftOutlined onClick={onPrev} />\n <span>\n {' '}\n {imgIndex + 1} / {imgLength}{' '}\n </span>\n\n <RightOutlined onClick={onNext} />\n </div>\n );\n};\n\n// TODO, It will be deleted when the exported type of lb-annotation is work.\ninterface IAnnotationDataTemporarily {\n type: string;\n annotation: any;\n}\n\nconst PointCloud2DView = ({ imgInfo }: IProps) => {\n const [annotations2d, setAnnotations2d] = useState<IAnnotationDataTemporarily[]>([]);\n const { pointCloudBoxList, topViewInstance } = useContext(PointCloudContext);\n const [mappingIndex, setMappingIndex] = useState(0);\n const ref = useRef(null);\n const size = useSize(ref);\n\n const mappingData = imgInfo?.mappingImgList?.[mappingIndex];\n\n useEffect(() => {\n if (topViewInstance && mappingData) {\n const { pointCloudInstance } = topViewInstance;\n const defaultViewStyle = {\n fill: 'transparent',\n color: 'green',\n };\n const newAnnotations2d: IAnnotationDataTemporarily[] = pointCloudBoxList.reduce(\n (acc: IAnnotationDataTemporarily[], pointCloudBox) => {\n const viewDataPointList = pointCloudInstance.pointCloudLidar2image(\n pointCloudBox,\n mappingData.calib,\n );\n return [\n ...acc,\n ...viewDataPointList.map((v: any) => {\n return {\n type: v.type,\n annotation: {\n pointList: v.pointList,\n ...defaultViewStyle,\n },\n };\n }),\n ];\n },\n [],\n );\n\n setAnnotations2d(newAnnotations2d);\n }\n }, [pointCloudBoxList, mappingData]);\n\n if (!imgInfo) {\n return <div />;\n }\n\n const { mappingImgList } = imgInfo;\n\n if (!mappingImgList) {\n return <div />;\n }\n\n console.log('render', annotations2d);\n return (\n <PointCloudContainer\n className={getClassName('point-cloud-2d-container')}\n title='2D视图'\n toolbar={\n <Toolbar\n imgIndex={mappingIndex}\n imgLength={mappingImgList.length}\n onNext={() => {\n if (mappingIndex >= mappingImgList.length - 1) {\n return;\n }\n setMappingIndex((v) => v + 1);\n }}\n onPrev={() => {\n if (mappingIndex <= 0) {\n return;\n }\n setMappingIndex((v) => v - 1);\n }}\n />\n }\n >\n <div className={getClassName('point-cloud-2d-image')} ref={ref}>\n <AnnotationView src={mappingData?.url ?? ''} annotations={annotations2d} size={size} />\n </div>\n </PointCloudContainer>\n );\n};\n\nconst mapStateToProps = (state: AppState) => {\n const { imgList, imgIndex } = state.annotation;\n\n return {\n imgInfo: imgList[imgIndex],\n };\n};\n\nexport default connect(mapStateToProps)(PointCloud2DView);\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- import{getClassName as l}from"../../utils/dom.js";import{PointCloud as x}from"@labelbee/lb-annotation";import{PointCloudUtils as g,EPerspectiveView as v}from"@labelbee/lb-utils";import D from"classnames";import e,{useContext as d,useState as B,useRef as b,useEffect as w,useMemo as T}from"react";import{PointCloudContainer as L}from"./PointCloudLayout.js";import{PointCloudContext as N}from"./PointCloudContext.js";import{aMapStateToProps as h}from"../../store/annotation/map.js";import{connect as I}from"react-redux";import{jsonParser as S}from"../../utils/index.js";import{useSingleBox as j}from"./hooks/useSingleBox.js";import{Switch as R}from"antd";const k="LABELBEE-POINTCLOUD",p=e.createContext({isActive:!1,setTarget3DView:()=>{},reset3DView:()=>{}}),s=({perspectiveView:o})=>{const{isActive:i,setTarget3DView:m}=d(p),u=a=>D({[l("point-cloud-3d-view",a)]:!0,active:i});return e.createElement("span",{onClick:()=>{m(v[o])},className:u(o.toLocaleLowerCase())})},A=()=>{const{reset3DView:o}=d(p);return e.createElement("div",{className:l("point-cloud-3d-sidebar")},e.createElement(s,{perspectiveView:"Top"}),e.createElement(s,{perspectiveView:"Front"}),e.createElement(s,{perspectiveView:"Left"}),e.createElement(s,{perspectiveView:"Back"}),e.createElement(s,{perspectiveView:"Right"}),e.createElement(s,{perspectiveView:"LFT"}),e.createElement(s,{perspectiveView:"RBT"}),e.createElement("span",{onClick:()=>{o()},className:l("point-cloud-3d-view","reset")}))},F=({currentData:o})=>{const i=d(N),[m,u]=B(!0),a=b(null),{selectedBox:r}=j(),C=n=>{var t;const c=r==null?void 0:r.info;c&&((t=i.mainViewInstance)==null||t.updateCameraByBox(c,n))},f=()=>{var n;(n=i.mainViewInstance)==null||n.resetCamera()};w(()=>{var n;if(a.current&&(o==null?void 0:o.url)){let t=i.mainViewInstance;if(t||(t=new x({container:a.current,backgroundColor:"#4c4c4c"})),o.result){const c=g.getBoxParamsFromResultList(o.result);c.forEach(P=>{t==null||t.generateBox(P)}),i.setPointCloudResult(c),i.setPointCloudValid((n=S(o.result))==null?void 0:n.valid)}i.setMainViewInstance(t)}},[]),w(()=>{r&&C(v.Top)},[r]);const E=T(()=>({reset3DView:f,setTarget3DView:C,isActive:!!r}),[r]),V=e.createElement("div",null,e.createElement("span",{style:{marginRight:8}},"\u663E\u793A\u7BAD\u5934"),e.createElement(R,{size:"small",checked:m,onChange:n=>{var t;u(n),(t=i.mainViewInstance)==null||t.setShowDirection(n)}}));return e.createElement(L,{className:l("point-cloud-3d-container"),title:"3D\u89C6\u56FE",toolbar:V},e.createElement("div",{className:l("point-cloud-3d-content")},e.createElement(p.Provider,{value:E},e.createElement(A,null)),e.createElement("div",{className:l("point-cloud-3d-view"),id:k,ref:a})))};var _=I(h)(F);export{_ as default};
1
+ import{getClassName as a}from"../../utils/dom.js";import{PointCloud as D}from"@labelbee/lb-annotation";import{PointCloudUtils as B,EPerspectiveView as f}from"@labelbee/lb-utils";import b from"classnames";import e,{useContext as d,useState as h,useRef as T,useEffect as p,useMemo as L}from"react";import{PointCloudContainer as N}from"./PointCloudLayout.js";import{PointCloudContext as S}from"./PointCloudContext.js";import{aMapStateToProps as j}from"../../store/annotation/map.js";import{connect as I}from"react-redux";import{jsonParser as k}from"../../utils/index.js";import{useSingleBox as R}from"./hooks/useSingleBox.js";import{Switch as A}from"antd";import z from"../../hooks/useSize.js";import{usePointCloudViews as F}from"./hooks/usePointCloudViews.js";const _="LABELBEE-POINTCLOUD",C=e.createContext({isActive:!1,setTarget3DView:()=>{},reset3DView:()=>{}}),s=({perspectiveView:t})=>{const{isActive:i,setTarget3DView:u}=d(C),m=l=>b({[a("point-cloud-3d-view",l)]:!0,active:i});return e.createElement("span",{onClick:()=>{u(f[t])},className:m(t.toLocaleLowerCase())})},y=()=>{const{reset3DView:t}=d(C);return e.createElement("div",{className:a("point-cloud-3d-sidebar")},e.createElement(s,{perspectiveView:"Top"}),e.createElement(s,{perspectiveView:"Front"}),e.createElement(s,{perspectiveView:"Left"}),e.createElement(s,{perspectiveView:"Back"}),e.createElement(s,{perspectiveView:"Right"}),e.createElement(s,{perspectiveView:"LFT"}),e.createElement(s,{perspectiveView:"RBT"}),e.createElement("span",{onClick:()=>{t()},className:a("point-cloud-3d-view","reset")}))},M=({currentData:t})=>{const i=d(S),[u,m]=h(!0),l=T(null),{initPointCloud3d:v}=F(),E=z(l);p(()=>{!i.mainViewInstance||v==null||v()},[E]);const{selectedBox:r}=R(),w=n=>{var o;const c=r==null?void 0:r.info;c&&((o=i.mainViewInstance)==null||o.updateCameraByBox(c,n))},V=()=>{var n;(n=i.mainViewInstance)==null||n.resetCamera()};p(()=>{var n;if(l.current&&(t==null?void 0:t.url)){let o=i.mainViewInstance;if(o||(o=new D({container:l.current,backgroundColor:"#4c4c4c"})),t.result){const c=B.getBoxParamsFromResultList(t.result);c.forEach(g=>{o==null||o.generateBox(g)}),i.setPointCloudResult(c),i.setPointCloudValid((n=k(t.result))==null?void 0:n.valid)}i.setMainViewInstance(o)}},[t]),p(()=>{r&&w(f.Top)},[r]);const P=L(()=>({reset3DView:V,setTarget3DView:w,isActive:!!r}),[r]),x=e.createElement("div",null,e.createElement("span",{style:{marginRight:8}},"\u663E\u793A\u7BAD\u5934"),e.createElement(A,{size:"small",checked:u,onChange:n=>{var o;m(n),(o=i.mainViewInstance)==null||o.setShowDirection(n)}}));return e.createElement(N,{className:a("point-cloud-3d-container"),title:"3D\u89C6\u56FE",toolbar:x},e.createElement("div",{className:a("point-cloud-3d-content")},e.createElement(C.Provider,{value:P},e.createElement(y,null)),e.createElement("div",{className:a("point-cloud-3d-view"),id:_,ref:l})))};var O=I(j)(M);export{O as default};
@@ -1 +1 @@
1
- {"version":3,"file":"PointCloud3DView.js","sources":["../../../src/components/pointCloudView/PointCloud3DView.tsx"],"sourcesContent":["/*\n * @Author: Laoluo luozefeng@sensetime.com\n * @Date: 2022-06-13 19:31:36\n * @LastEditors: Laoluo luozefeng@sensetime.com\n * @LastEditTime: 2022-06-27 19:43:25\n */\n\nimport { getClassName } from '@/utils/dom';\nimport { PointCloud } from '@labelbee/lb-annotation';\nimport { EPerspectiveView, IPointCloudBox, PointCloudUtils } from '@labelbee/lb-utils';\nimport classNames from 'classnames';\nimport React, { useContext, useEffect, useMemo, useRef, useState } from 'react';\nimport { PointCloudContainer } from './PointCloudLayout';\nimport { PointCloudContext } from './PointCloudContext';\nimport { aMapStateToProps, IAnnotationStateProps } from '@/store/annotation/map';\nimport { connect } from 'react-redux';\nimport { jsonParser } from '@/utils';\nimport { useSingleBox } from './hooks/useSingleBox';\nimport { Switch } from 'antd';\n\nconst pointCloudID = 'LABELBEE-POINTCLOUD';\nconst PointCloud3DContext = React.createContext<{\n isActive: boolean;\n setTarget3DView: (perspectiveView: EPerspectiveView) => void;\n reset3DView: () => void;\n}>({\n isActive: false,\n setTarget3DView: () => {},\n reset3DView: () => {},\n});\n\nconst PointCloudViewIcon = ({\n perspectiveView,\n}: {\n perspectiveView: keyof typeof EPerspectiveView;\n}) => {\n const { isActive, setTarget3DView } = useContext(PointCloud3DContext);\n\n const getTarget3DViewClassName = (position: string) => {\n return classNames({\n [getClassName('point-cloud-3d-view', position)]: true,\n active: isActive,\n });\n };\n\n return (\n <span\n onClick={() => {\n setTarget3DView(EPerspectiveView[perspectiveView]);\n }}\n className={getTarget3DViewClassName(perspectiveView.toLocaleLowerCase())}\n />\n );\n};\n\nconst PointCloud3DSideBar = () => {\n const { reset3DView } = useContext(PointCloud3DContext);\n return (\n <div className={getClassName('point-cloud-3d-sidebar')}>\n <PointCloudViewIcon perspectiveView='Top' />\n <PointCloudViewIcon perspectiveView='Front' />\n <PointCloudViewIcon perspectiveView='Left' />\n <PointCloudViewIcon perspectiveView='Back' />\n <PointCloudViewIcon perspectiveView='Right' />\n <PointCloudViewIcon perspectiveView='LFT' />\n <PointCloudViewIcon perspectiveView='RBT' />\n <span\n onClick={() => {\n reset3DView();\n }}\n className={getClassName('point-cloud-3d-view', 'reset')}\n />\n </div>\n );\n};\n\nconst PointCloud3D: React.FC<IAnnotationStateProps> = ({ currentData }) => {\n const ptCtx = useContext(PointCloudContext);\n const [showDirection, setShowDirection] = useState(true);\n\n const ref = useRef<HTMLDivElement>(null);\n const { selectedBox } = useSingleBox();\n\n const setTarget3DView = (perspectiveView: EPerspectiveView) => {\n const box = selectedBox?.info;\n\n if (box) {\n ptCtx.mainViewInstance?.updateCameraByBox(box, perspectiveView);\n }\n };\n\n const reset3DView = () => {\n ptCtx.mainViewInstance?.resetCamera();\n };\n\n useEffect(() => {\n if (ref.current && currentData?.url) {\n let pointCloud = ptCtx.mainViewInstance;\n if (!pointCloud) {\n pointCloud = new PointCloud({\n container: ref.current,\n backgroundColor: '#4c4c4c',\n });\n }\n\n if (currentData.result) {\n const boxParamsList = PointCloudUtils.getBoxParamsFromResultList(currentData.result);\n\n // Add Init Box\n boxParamsList.forEach((v: IPointCloudBox) => {\n pointCloud?.generateBox(v);\n });\n\n ptCtx.setPointCloudResult(boxParamsList);\n ptCtx.setPointCloudValid(jsonParser(currentData.result)?.valid);\n }\n\n ptCtx.setMainViewInstance(pointCloud);\n }\n }, []);\n\n /**\n * Observe selectedID and reset camera to target top-view\n */\n useEffect(() => {\n if (selectedBox) {\n setTarget3DView(EPerspectiveView.Top);\n }\n }, [selectedBox]);\n\n const ptCloud3DCtx = useMemo(() => {\n return { reset3DView, setTarget3DView, isActive: !!selectedBox };\n }, [selectedBox]);\n\n const PointCloud3DTitle = (\n <div>\n <span style={{ marginRight: 8 }}>显示箭头</span>\n <Switch\n size='small'\n checked={showDirection}\n onChange={(showDirection) => {\n setShowDirection(showDirection);\n ptCtx.mainViewInstance?.setShowDirection(showDirection);\n }}\n />\n </div>\n );\n\n return (\n <PointCloudContainer\n className={getClassName('point-cloud-3d-container')}\n title='3D视图'\n toolbar={PointCloud3DTitle}\n >\n <div className={getClassName('point-cloud-3d-content')}>\n <PointCloud3DContext.Provider value={ptCloud3DCtx}>\n <PointCloud3DSideBar />\n </PointCloud3DContext.Provider>\n <div className={getClassName('point-cloud-3d-view')} id={pointCloudID} ref={ref} />\n </div>\n </PointCloudContainer>\n );\n};\n\nexport default connect(aMapStateToProps)(PointCloud3D);\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PointCloud3DView.js","sources":["../../../src/components/pointCloudView/PointCloud3DView.tsx"],"sourcesContent":["/*\n * @Author: Laoluo luozefeng@sensetime.com\n * @Date: 2022-06-13 19:31:36\n * @LastEditors: Laoluo luozefeng@sensetime.com\n * @LastEditTime: 2022-06-27 19:43:25\n */\n\nimport { getClassName } from '@/utils/dom';\nimport { PointCloud } from '@labelbee/lb-annotation';\nimport { EPerspectiveView, IPointCloudBox, PointCloudUtils } from '@labelbee/lb-utils';\nimport classNames from 'classnames';\nimport React, { useContext, useEffect, useMemo, useRef, useState } from 'react';\nimport { PointCloudContainer } from './PointCloudLayout';\nimport { PointCloudContext } from './PointCloudContext';\nimport { aMapStateToProps, IAnnotationStateProps } from '@/store/annotation/map';\nimport { connect } from 'react-redux';\nimport { jsonParser } from '@/utils';\nimport { useSingleBox } from './hooks/useSingleBox';\nimport { Switch } from 'antd';\nimport useSize from '@/hooks/useSize';\nimport { usePointCloudViews } from './hooks/usePointCloudViews';\n\nconst pointCloudID = 'LABELBEE-POINTCLOUD';\nconst PointCloud3DContext = React.createContext<{\n isActive: boolean;\n setTarget3DView: (perspectiveView: EPerspectiveView) => void;\n reset3DView: () => void;\n}>({\n isActive: false,\n setTarget3DView: () => {},\n reset3DView: () => {},\n});\n\nconst PointCloudViewIcon = ({\n perspectiveView,\n}: {\n perspectiveView: keyof typeof EPerspectiveView;\n}) => {\n const { isActive, setTarget3DView } = useContext(PointCloud3DContext);\n\n const getTarget3DViewClassName = (position: string) => {\n return classNames({\n [getClassName('point-cloud-3d-view', position)]: true,\n active: isActive,\n });\n };\n\n return (\n <span\n onClick={() => {\n setTarget3DView(EPerspectiveView[perspectiveView]);\n }}\n className={getTarget3DViewClassName(perspectiveView.toLocaleLowerCase())}\n />\n );\n};\n\nconst PointCloud3DSideBar = () => {\n const { reset3DView } = useContext(PointCloud3DContext);\n return (\n <div className={getClassName('point-cloud-3d-sidebar')}>\n <PointCloudViewIcon perspectiveView='Top' />\n <PointCloudViewIcon perspectiveView='Front' />\n <PointCloudViewIcon perspectiveView='Left' />\n <PointCloudViewIcon perspectiveView='Back' />\n <PointCloudViewIcon perspectiveView='Right' />\n <PointCloudViewIcon perspectiveView='LFT' />\n <PointCloudViewIcon perspectiveView='RBT' />\n <span\n onClick={() => {\n reset3DView();\n }}\n className={getClassName('point-cloud-3d-view', 'reset')}\n />\n </div>\n );\n};\n\nconst PointCloud3D: React.FC<IAnnotationStateProps> = ({ currentData }) => {\n const ptCtx = useContext(PointCloudContext);\n const [showDirection, setShowDirection] = useState(true);\n const ref = useRef<HTMLDivElement>(null);\n const { initPointCloud3d } = usePointCloudViews();\n const size = useSize(ref);\n\n useEffect(() => {\n if (!ptCtx.mainViewInstance) {\n return;\n }\n initPointCloud3d?.();\n }, [size]);\n const { selectedBox } = useSingleBox();\n\n const setTarget3DView = (perspectiveView: EPerspectiveView) => {\n const box = selectedBox?.info;\n\n if (box) {\n ptCtx.mainViewInstance?.updateCameraByBox(box, perspectiveView);\n }\n };\n\n const reset3DView = () => {\n ptCtx.mainViewInstance?.resetCamera();\n };\n\n useEffect(() => {\n if (ref.current && currentData?.url) {\n let pointCloud = ptCtx.mainViewInstance;\n if (!pointCloud) {\n pointCloud = new PointCloud({\n container: ref.current,\n backgroundColor: '#4c4c4c',\n });\n }\n\n if (currentData.result) {\n const boxParamsList = PointCloudUtils.getBoxParamsFromResultList(currentData.result);\n\n // Add Init Box\n boxParamsList.forEach((v: IPointCloudBox) => {\n pointCloud?.generateBox(v);\n });\n\n ptCtx.setPointCloudResult(boxParamsList);\n ptCtx.setPointCloudValid(jsonParser(currentData.result)?.valid);\n }\n\n ptCtx.setMainViewInstance(pointCloud);\n }\n }, [currentData]);\n\n /**\n * Observe selectedID and reset camera to target top-view\n */\n useEffect(() => {\n if (selectedBox) {\n setTarget3DView(EPerspectiveView.Top);\n }\n }, [selectedBox]);\n\n const ptCloud3DCtx = useMemo(() => {\n return { reset3DView, setTarget3DView, isActive: !!selectedBox };\n }, [selectedBox]);\n\n const PointCloud3DTitle = (\n <div>\n <span style={{ marginRight: 8 }}>显示箭头</span>\n <Switch\n size='small'\n checked={showDirection}\n onChange={(showDirection) => {\n setShowDirection(showDirection);\n ptCtx.mainViewInstance?.setShowDirection(showDirection);\n }}\n />\n </div>\n );\n\n return (\n <PointCloudContainer\n className={getClassName('point-cloud-3d-container')}\n title='3D视图'\n toolbar={PointCloud3DTitle}\n >\n <div className={getClassName('point-cloud-3d-content')}>\n <PointCloud3DContext.Provider value={ptCloud3DCtx}>\n <PointCloud3DSideBar />\n </PointCloud3DContext.Provider>\n <div className={getClassName('point-cloud-3d-view')} id={pointCloudID} ref={ref} />\n </div>\n </PointCloudContainer>\n );\n};\n\nexport default connect(aMapStateToProps)(PointCloud3D);\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- import{PointCloudAnnotation as M,MathUtils as p}from"@labelbee/lb-annotation";import{getClassName as B}from"../../utils/dom.js";import{PointCloudContainer as N}from"./PointCloudLayout.js";import f,{useState as X,useRef as z,useEffect as v}from"react";import{PointCloudContext as W}from"./PointCloudContext.js";import{useSingleBox as A}from"./hooks/useSingleBox.js";import{EPerspectiveView as H}from"@labelbee/lb-utils";import{SizeInfoForView as T}from"./PointCloudInfos.js";import{connect as Y}from"react-redux";import{aMapStateToProps as D}from"../../store/annotation/map.js";import{synchronizeTopView as F,synchronizeSideView as R}from"./hooks/usePointCloudViews.js";var U=Object.defineProperty,V=Object.getOwnPropertySymbols,Z=Object.prototype.hasOwnProperty,q=Object.prototype.propertyIsEnumerable,O=(o,t,e)=>t in o?U(o,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[t]=e,G=(o,t)=>{for(var e in t||(t={}))Z.call(t,e)&&O(o,e,t[e]);if(V)for(var e of V(t))q.call(t,e)&&O(o,e,t[e]);return o};const J=(o,t,e=1)=>{const{width:l,height:n}=t,s={x:o.x+l*e/2,y:o.y+n*e/2},d={x:t.width/2,y:t.height/2};return{offsetX:(d.x-s.x)/e,offsetY:-(d.y-s.y)/e}},L=(o,t,e,l,n)=>{const{offsetX:s,offsetY:d}=J(o,e,t);if(n.camera.zoom=t,o){const r=Math.cos(l.rotation),a=Math.sin(l.rotation),i=s*r,c=s*a,{x:u,y:m,z:h}=n.initCameraPosition;n.camera.position.set(u+c,m-i,h+d)}n.camera.updateProjectionMatrix(),n.render()},K=({currentData:o})=>{const t=f.useContext(W),[e,l]=X(null),n=z(null),{updateSelectedBox:s,selectedBox:d}=A();return v(()=>{if(n.current){const r={width:n.current.clientWidth,height:n.current.clientHeight},a=new M({container:n.current,size:r,polygonOperationProps:{showDirectionLine:!1,forbidAddNew:!0}});t.setBackViewInstance(a),l(r)}},[]),v(()=>{if(!e||!t.backViewInstance)return;const{pointCloud2dOperation:r,pointCloudInstance:a}=t.backViewInstance;r.singleOn("renderZoom",(i,c)=>{!t.selectedPointCloudBox||L(c,i,e,t.selectedPointCloudBox,a)}),r.singleOn("dragMove",({currentPos:i,zoom:c})=>{!t.selectedPointCloudBox||L(i,c,e,t.selectedPointCloudBox,a)}),r.singleOn("updatePolygonByDrag",({newPolygon:i,originPolygon:c})=>{if(!t.selectedPointCloudBox||!t.mainViewInstance||!o.url)return;const[u,m,h]=i.pointList,[P,x,y]=c.pointList,C=p.getLineCenterPoint([u,h]),w=p.getLineCenterPoint([P,y]),I={x:{x:C.x-w.x,y:C.y-w.y}.x,y:0,z:C.y-w.y},_=p.getLineLength(u,m),b=p.getLineLength(P,x),E=_-b,S=p.getLineLength(m,h),j=p.getLineLength(x,y),k=S-j,{newBoxParams:g}=a.getNewBoxByBackUpdate(I,k,E,t.selectedPointCloudBox);F(g,i,t.topViewInstance,t.mainViewInstance),R(g,i,t.sideViewInstance,o.url),t.mainViewInstance.hightLightOriginPointCloud(g),s(g)})},[t,e]),f.createElement(N,{className:B("point-cloud-container","back-view"),title:"\u80CC\u89C6\u56FE",toolbar:f.createElement(T,{perspectiveView:H.Back})},f.createElement("div",{style:{width:"100%",height:300,position:"relative"},ref:n}),!d&&f.createElement("div",{style:G({},e),className:B("point-cloud-container","empty-page")},"\u6682\u65E0\u6570\u636E"))};var Q=Y(D)(K);export{Q as default};
1
+ import{PointCloudAnnotation as k,MathUtils as d}from"@labelbee/lb-annotation";import{getClassName as C}from"../../utils/dom.js";import{PointCloudContainer as N}from"./PointCloudLayout.js";import u,{useRef as z,useEffect as x}from"react";import{PointCloudContext as M}from"./PointCloudContext.js";import{useSingleBox as X}from"./hooks/useSingleBox.js";import{EPerspectiveView as W}from"@labelbee/lb-utils";import{SizeInfoForView as A}from"./PointCloudInfos.js";import{connect as H}from"react-redux";import{aMapStateToProps as T}from"../../store/annotation/map.js";import{synchronizeTopView as Y,synchronizeSideView as D}from"./hooks/usePointCloudViews.js";import F from"../../hooks/useSize.js";var R=Object.defineProperty,B=Object.getOwnPropertySymbols,U=Object.prototype.hasOwnProperty,Z=Object.prototype.propertyIsEnumerable,V=(o,e,t)=>e in o?R(o,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[e]=t,q=(o,e)=>{for(var t in e||(e={}))U.call(e,t)&&V(o,t,e[t]);if(B)for(var t of B(e))Z.call(e,t)&&V(o,t,e[t]);return o};const G=(o,e,t=1)=>{const{width:i,height:r}=e,a={x:o.x+i*t/2,y:o.y+r*t/2},n={x:e.width/2,y:e.height/2};return{offsetX:(n.x-a.x)/t,offsetY:-(n.y-a.y)/t}},O=(o,e,t,i,r)=>{const{offsetX:a,offsetY:n}=G(o,t,e);if(r.camera.zoom=e,o){const c=Math.cos(i.rotation),s=Math.sin(i.rotation),l=a*c,p=a*s,{x:f,y:m,z:h}=r.initCameraPosition;r.camera.position.set(f+p,m-l,h+n)}r.camera.updateProjectionMatrix(),r.render()},J=({currentData:o})=>{const e=u.useContext(M),t=z(null),i=F(t),{updateSelectedBox:r,selectedBox:a}=X();return x(()=>{if(t.current){const n={width:t.current.clientWidth,height:t.current.clientHeight},c=new k({container:t.current,size:n,polygonOperationProps:{showDirectionLine:!1,forbidAddNew:!0}});e.setBackViewInstance(c)}},[]),x(()=>{if(!i||!e.backViewInstance)return;const{pointCloud2dOperation:n,pointCloudInstance:c}=e.backViewInstance;n.singleOn("renderZoom",(s,l)=>{!e.selectedPointCloudBox||O(l,s,i,e.selectedPointCloudBox,c)}),n.singleOn("dragMove",({currentPos:s,zoom:l})=>{!e.selectedPointCloudBox||O(s,l,i,e.selectedPointCloudBox,c)}),n.singleOn("updatePolygonByDrag",({newPolygon:s,originPolygon:l})=>{if(!e.selectedPointCloudBox||!e.mainViewInstance||!o.url)return;const[p,f,m]=s.pointList,[h,y,v]=l.pointList,g=d.getLineCenterPoint([p,m]),P=d.getLineCenterPoint([h,v]),L={x:{x:g.x-P.x,y:g.y-P.y}.x,y:0,z:g.y-P.y},I=d.getLineLength(p,f),b=d.getLineLength(h,y),_=I-b,E=d.getLineLength(f,m),S=d.getLineLength(y,v),j=E-S,{newBoxParams:w}=c.getNewBoxByBackUpdate(L,j,_,e.selectedPointCloudBox);Y(w,s,e.topViewInstance,e.mainViewInstance),D(w,s,e.sideViewInstance,o.url),e.mainViewInstance.hightLightOriginPointCloud(w),r(w)})},[e,i]),x(()=>{var n;(n=e==null?void 0:e.backViewInstance)==null||n.initSize(i)},[i]),u.createElement(N,{className:C("point-cloud-container","back-view"),title:"\u80CC\u89C6\u56FE",toolbar:u.createElement(A,{perspectiveView:W.Back})},u.createElement("div",{className:C("point-cloud-container","bottom-view-content")},u.createElement("div",{className:C("point-cloud-container","core-instance"),ref:t}),!a&&u.createElement("div",{style:q({},i),className:C("point-cloud-container","empty-page")},"\u6682\u65E0\u6570\u636E")))};var K=H(T)(J);export{K as default};
@@ -1 +1 @@
1
- {"version":3,"file":"PointCloudBackView.js","sources":["../../../src/components/pointCloudView/PointCloudBackView.tsx"],"sourcesContent":["/*\n * @Author: Laoluo luozefeng@sensetime.com\n * @Date: 2022-06-22 11:08:31\n * @LastEditors: Laoluo luozefeng@sensetime.com\n * @LastEditTime: 2022-07-08 11:08:02\n */\nimport { PointCloud, MathUtils, PointCloudAnnotation } from '@labelbee/lb-annotation';\nimport { getClassName } from '@/utils/dom';\nimport { PointCloudContainer } from './PointCloudLayout';\nimport React, { useEffect, useRef, useState } from 'react';\nimport { PointCloudContext } from './PointCloudContext';\nimport { useSingleBox } from './hooks/useSingleBox';\nimport { EPerspectiveView, IPointCloudBox } from '@labelbee/lb-utils';\nimport { SizeInfoForView } from './PointCloudInfos';\nimport { connect } from 'react-redux';\nimport { aMapStateToProps, IAnnotationStateProps } from '@/store/annotation/map';\nimport { synchronizeSideView, synchronizeTopView } from './hooks/usePointCloudViews';\n\n/**\n * 统一一下,将其拓展为 二维转换为 三维坐标的转换\n * Get the offset from canvas2d-coordinate to world coordinate\n * @param currentPos\n * @param size\n * @param zoom\n * @returns\n */\nconst TransferCanvas2WorldOffset = (\n currentPos: { x: number; y: number },\n size: { width: number; height: number },\n zoom = 1,\n) => {\n const { width: w, height: h } = size;\n\n const canvasCenterPoint = {\n x: currentPos.x + (w * zoom) / 2,\n y: currentPos.y + (h * zoom) / 2,\n };\n\n const worldCenterPoint = {\n x: size.width / 2,\n y: size.height / 2,\n };\n\n return {\n offsetX: (worldCenterPoint.x - canvasCenterPoint.x) / zoom,\n offsetY: -(worldCenterPoint.y - canvasCenterPoint.y) / zoom,\n };\n};\nconst updateBackViewByCanvas2D = (\n currentPos: { x: number; y: number },\n zoom: number,\n size: { width: number; height: number },\n selectedPointCloudBox: IPointCloudBox,\n backPointCloud: PointCloud,\n) => {\n const { offsetX, offsetY } = TransferCanvas2WorldOffset(currentPos, size, zoom);\n backPointCloud.camera.zoom = zoom;\n if (currentPos) {\n const cos = Math.cos(selectedPointCloudBox.rotation);\n const sin = Math.sin(selectedPointCloudBox.rotation);\n const offsetXX = offsetX * cos;\n const offsetXY = offsetX * sin;\n const { x, y, z } = backPointCloud.initCameraPosition;\n backPointCloud.camera.position.set(x + offsetXY, y - offsetXX, z + offsetY);\n }\n backPointCloud.camera.updateProjectionMatrix();\n backPointCloud.render();\n};\n\nconst PointCloudSideView = ({ currentData }: IAnnotationStateProps) => {\n const ptCtx = React.useContext(PointCloudContext);\n const [size, setSize] = useState<{ width: number; height: number } | null>(null);\n const ref = useRef<HTMLDivElement>(null);\n const { updateSelectedBox, selectedBox } = useSingleBox();\n\n useEffect(() => {\n if (ref.current) {\n const size = {\n width: ref.current.clientWidth,\n height: ref.current.clientHeight,\n };\n\n const pointCloudAnnotation = new PointCloudAnnotation({\n container: ref.current,\n size,\n polygonOperationProps: { showDirectionLine: false, forbidAddNew: true },\n });\n ptCtx.setBackViewInstance(pointCloudAnnotation);\n setSize(size);\n }\n }, []);\n\n useEffect(() => {\n // By the way as an initialization judgment\n if (!size || !ptCtx.backViewInstance) {\n return;\n }\n\n const {\n pointCloud2dOperation: backPointCloudPolygonOperation,\n pointCloudInstance: backPointCloud,\n } = ptCtx.backViewInstance;\n\n /**\n * Synchronized 3d point cloud view displacement operations\n *\n * Change Orthographic Camera size\n */\n backPointCloudPolygonOperation.singleOn('renderZoom', (zoom: number, currentPos: any) => {\n if (!ptCtx.selectedPointCloudBox) {\n return;\n }\n updateBackViewByCanvas2D(currentPos, zoom, size, ptCtx.selectedPointCloudBox, backPointCloud);\n });\n\n // Synchronized 3d point cloud view displacement operations\n backPointCloudPolygonOperation.singleOn('dragMove', ({ currentPos, zoom }: any) => {\n if (!ptCtx.selectedPointCloudBox) {\n return;\n }\n updateBackViewByCanvas2D(currentPos, zoom, size, ptCtx.selectedPointCloudBox, backPointCloud);\n });\n\n backPointCloudPolygonOperation.singleOn(\n 'updatePolygonByDrag',\n ({ newPolygon, originPolygon }: any) => {\n if (!ptCtx.selectedPointCloudBox || !ptCtx.mainViewInstance || !currentData.url) {\n return;\n }\n\n // Notice. The sort of polygon is important.\n const [point1, point2, point3] = newPolygon.pointList;\n const [op1, op2, op3] = originPolygon.pointList;\n\n // 2D centerPoint => 3D x & z\n const newCenterPoint = MathUtils.getLineCenterPoint([point1, point3]);\n const oldCenterPoint = MathUtils.getLineCenterPoint([op1, op3]);\n\n const offset = {\n x: newCenterPoint.x - oldCenterPoint.x,\n y: newCenterPoint.y - oldCenterPoint.y,\n };\n\n const offsetCenterPoint = {\n x: offset.x,\n y: 0, // Not be used.\n z: newCenterPoint.y - oldCenterPoint.y,\n };\n\n // 2D height => 3D depth\n const height = MathUtils.getLineLength(point1, point2);\n const oldHeight = MathUtils.getLineLength(op1, op2);\n const offsetHeight = height - oldHeight; // 3D depth\n\n // 2D width => 3D width\n const width = MathUtils.getLineLength(point2, point3);\n const oldWidth = MathUtils.getLineLength(op2, op3);\n const offsetWidth = width - oldWidth; // 3D width\n\n const { newBoxParams } = backPointCloud.getNewBoxByBackUpdate(\n offsetCenterPoint,\n offsetWidth,\n offsetHeight,\n ptCtx.selectedPointCloudBox,\n );\n\n synchronizeTopView(newBoxParams, newPolygon, ptCtx.topViewInstance, ptCtx.mainViewInstance);\n synchronizeSideView(newBoxParams, newPolygon, ptCtx.sideViewInstance, currentData.url);\n ptCtx.mainViewInstance.hightLightOriginPointCloud(newBoxParams);\n updateSelectedBox(newBoxParams);\n },\n );\n }, [ptCtx, size]);\n\n return (\n <PointCloudContainer\n className={getClassName('point-cloud-container', 'back-view')}\n title='背视图'\n toolbar={<SizeInfoForView perspectiveView={EPerspectiveView.Back} />}\n >\n <div style={{ width: '100%', height: 300, position: 'relative' }} ref={ref} />\n\n {!selectedBox && (\n <div style={{ ...size }} className={getClassName('point-cloud-container', 'empty-page')}>\n 暂无数据\n </div>\n )}\n </PointCloudContainer>\n );\n};\n\nexport default connect(aMapStateToProps)(PointCloudSideView);\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BA,MAAM,0BAA6B,GAAA,CACjC,UACA,EAAA,IAAA,EACA,OAAO,CACJ,KAAA;AACH,EAAA,MAAM,CAAE,KAAA,EAAO,CAAG,EAAA,MAAA,EAAQ,CAAM,CAAA,GAAA,IAAA,CAAA;AAEhC,EAAA,MAAM,iBAAoB,GAAA;AAAA,IACxB,CAAG,EAAA,UAAA,CAAW,CAAK,GAAA,CAAA,GAAI,IAAQ,GAAA,CAAA;AAAA,IAC/B,CAAG,EAAA,UAAA,CAAW,CAAK,GAAA,CAAA,GAAI,IAAQ,GAAA,CAAA;AAAA,GAAA,CAAA;AAGjC,EAAA,MAAM,gBAAmB,GAAA;AAAA,IACvB,CAAA,EAAG,KAAK,KAAQ,GAAA,CAAA;AAAA,IAChB,CAAA,EAAG,KAAK,MAAS,GAAA,CAAA;AAAA,GAAA,CAAA;AAGnB,EAAO,OAAA;AAAA,IACL,OAAU,EAAA,CAAA,gBAAA,CAAiB,CAAI,GAAA,iBAAA,CAAkB,CAAK,IAAA,IAAA;AAAA,IACtD,OAAS,EAAA,EAAmB,gBAAA,CAAA,CAAA,GAAI,kBAAkB,CAAK,CAAA,GAAA,IAAA;AAAA,GAAA,CAAA;AAAA,CAAA,CAAA;AAG3D,MAAM,2BAA2B,CAC/B,UAAA,EACA,IACA,EAAA,IAAA,EACA,uBACA,cACG,KAAA;AACH,EAAA,MAAM,CAAE,OAAA,EAAS,OAAY,CAAA,GAAA,0BAAA,CAA2B,YAAY,IAAM,EAAA,IAAA,CAAA,CAAA;AAC1E,EAAA,cAAA,CAAe,OAAO,IAAO,GAAA,IAAA,CAAA;AAC7B,EAAA,IAAI,UAAY,EAAA;AACd,IAAM,MAAA,GAAA,GAAM,IAAK,CAAA,GAAA,CAAI,qBAAsB,CAAA,QAAA,CAAA,CAAA;AAC3C,IAAM,MAAA,GAAA,GAAM,IAAK,CAAA,GAAA,CAAI,qBAAsB,CAAA,QAAA,CAAA,CAAA;AAC3C,IAAA,MAAM,WAAW,OAAU,GAAA,GAAA,CAAA;AAC3B,IAAA,MAAM,WAAW,OAAU,GAAA,GAAA,CAAA;AAC3B,IAAA,MAAM,CAAE,CAAA,EAAG,CAAG,EAAA,CAAA,CAAA,GAAM,cAAe,CAAA,kBAAA,CAAA;AACnC,IAAA,cAAA,CAAe,OAAO,QAAS,CAAA,GAAA,CAAI,IAAI,QAAU,EAAA,CAAA,GAAI,UAAU,CAAI,GAAA,OAAA,CAAA,CAAA;AAAA,GAAA;AAErE,EAAA,cAAA,CAAe,MAAO,CAAA,sBAAA,EAAA,CAAA;AACtB,EAAe,cAAA,CAAA,MAAA,EAAA,CAAA;AAAA,CAAA,CAAA;AAGjB,MAAM,kBAAA,GAAqB,CAAC,CAAE,WAAyC,CAAA,KAAA;AACrE,EAAM,MAAA,KAAA,GAAQ,MAAM,UAAW,CAAA,iBAAA,CAAA,CAAA;AAC/B,EAAM,MAAA,CAAC,IAAM,EAAA,OAAA,CAAA,GAAW,QAAmD,CAAA,IAAA,CAAA,CAAA;AAC3E,EAAA,MAAM,MAAM,MAAuB,CAAA,IAAA,CAAA,CAAA;AACnC,EAAM,MAAA,CAAE,mBAAmB,WAAgB,CAAA,GAAA,YAAA,EAAA,CAAA;AAE3C,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,IAAI,OAAS,EAAA;AACf,MAAA,MAAM,KAAO,GAAA;AAAA,QACX,KAAA,EAAO,IAAI,OAAQ,CAAA,WAAA;AAAA,QACnB,MAAA,EAAQ,IAAI,OAAQ,CAAA,YAAA;AAAA,OAAA,CAAA;AAGtB,MAAM,MAAA,oBAAA,GAAuB,IAAI,oBAAqB,CAAA;AAAA,QACpD,WAAW,GAAI,CAAA,OAAA;AAAA,QACf,IAAA,EAAA,KAAA;AAAA,QACA,qBAAuB,EAAA,CAAE,iBAAmB,EAAA,KAAA,EAAO,YAAc,EAAA,IAAA,CAAA;AAAA,OAAA,CAAA,CAAA;AAEnE,MAAA,KAAA,CAAM,mBAAoB,CAAA,oBAAA,CAAA,CAAA;AAC1B,MAAQ,OAAA,CAAA,KAAA,CAAA,CAAA;AAAA,KAAA;AAAA,GAET,EAAA,EAAA,CAAA,CAAA;AAEH,EAAA,SAAA,CAAU,MAAM;AAEd,IAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,KAAA,CAAM,gBAAkB,EAAA;AACpC,MAAA,OAAA;AAAA,KAAA;AAGF,IAAM,MAAA;AAAA,MACJ,qBAAuB,EAAA,8BAAA;AAAA,MACvB,kBAAoB,EAAA,cAAA;AAAA,KAAA,GAClB,KAAM,CAAA,gBAAA,CAAA;AAOV,IAAA,8BAAA,CAA+B,QAAS,CAAA,YAAA,EAAc,CAAC,IAAA,EAAc,UAAoB,KAAA;AACvF,MAAI,IAAA,CAAC,MAAM,qBAAuB,EAAA;AAChC,QAAA,OAAA;AAAA,OAAA;AAEF,MAAA,wBAAA,CAAyB,UAAY,EAAA,IAAA,EAAM,IAAM,EAAA,KAAA,CAAM,qBAAuB,EAAA,cAAA,CAAA,CAAA;AAAA,KAAA,CAAA,CAAA;AAIhF,IAAA,8BAAA,CAA+B,QAAS,CAAA,UAAA,EAAY,CAAC,CAAE,YAAY,IAAgB,CAAA,KAAA;AACjF,MAAI,IAAA,CAAC,MAAM,qBAAuB,EAAA;AAChC,QAAA,OAAA;AAAA,OAAA;AAEF,MAAA,wBAAA,CAAyB,UAAY,EAAA,IAAA,EAAM,IAAM,EAAA,KAAA,CAAM,qBAAuB,EAAA,cAAA,CAAA,CAAA;AAAA,KAAA,CAAA,CAAA;AAGhF,IAAA,8BAAA,CAA+B,QAC7B,CAAA,qBAAA,EACA,CAAC,CAAE,YAAY,aAAyB,CAAA,KAAA;AACtC,MAAI,IAAA,CAAC,MAAM,qBAAyB,IAAA,CAAC,MAAM,gBAAoB,IAAA,CAAC,YAAY,GAAK,EAAA;AAC/E,QAAA,OAAA;AAAA,OAAA;AAIF,MAAA,MAAM,CAAC,MAAA,EAAQ,MAAQ,EAAA,MAAA,CAAA,GAAU,UAAW,CAAA,SAAA,CAAA;AAC5C,MAAA,MAAM,CAAC,GAAA,EAAK,GAAK,EAAA,GAAA,CAAA,GAAO,aAAc,CAAA,SAAA,CAAA;AAGtC,MAAA,MAAM,cAAiB,GAAA,SAAA,CAAU,kBAAmB,CAAA,CAAC,MAAQ,EAAA,MAAA,CAAA,CAAA,CAAA;AAC7D,MAAA,MAAM,cAAiB,GAAA,SAAA,CAAU,kBAAmB,CAAA,CAAC,GAAK,EAAA,GAAA,CAAA,CAAA,CAAA;AAE1D,MAAA,MAAM,MAAS,GAAA;AAAA,QACb,CAAA,EAAG,cAAe,CAAA,CAAA,GAAI,cAAe,CAAA,CAAA;AAAA,QACrC,CAAA,EAAG,cAAe,CAAA,CAAA,GAAI,cAAe,CAAA,CAAA;AAAA,OAAA,CAAA;AAGvC,MAAA,MAAM,iBAAoB,GAAA;AAAA,QACxB,GAAG,MAAO,CAAA,CAAA;AAAA,QACV,CAAG,EAAA,CAAA;AAAA,QACH,CAAA,EAAG,cAAe,CAAA,CAAA,GAAI,cAAe,CAAA,CAAA;AAAA,OAAA,CAAA;AAIvC,MAAM,MAAA,MAAA,GAAS,SAAU,CAAA,aAAA,CAAc,MAAQ,EAAA,MAAA,CAAA,CAAA;AAC/C,MAAM,MAAA,SAAA,GAAY,SAAU,CAAA,aAAA,CAAc,GAAK,EAAA,GAAA,CAAA,CAAA;AAC/C,MAAA,MAAM,eAAe,MAAS,GAAA,SAAA,CAAA;AAG9B,MAAM,MAAA,KAAA,GAAQ,SAAU,CAAA,aAAA,CAAc,MAAQ,EAAA,MAAA,CAAA,CAAA;AAC9C,MAAM,MAAA,QAAA,GAAW,SAAU,CAAA,aAAA,CAAc,GAAK,EAAA,GAAA,CAAA,CAAA;AAC9C,MAAA,MAAM,cAAc,KAAQ,GAAA,QAAA,CAAA;AAE5B,MAAA,MAAM,CAAE,YAAiB,CAAA,GAAA,cAAA,CAAe,sBACtC,iBACA,EAAA,WAAA,EACA,cACA,KAAM,CAAA,qBAAA,CAAA,CAAA;AAGR,MAAA,kBAAA,CAAmB,YAAc,EAAA,UAAA,EAAY,KAAM,CAAA,eAAA,EAAiB,KAAM,CAAA,gBAAA,CAAA,CAAA;AAC1E,MAAA,mBAAA,CAAoB,YAAc,EAAA,UAAA,EAAY,KAAM,CAAA,gBAAA,EAAkB,WAAY,CAAA,GAAA,CAAA,CAAA;AAClF,MAAA,KAAA,CAAM,iBAAiB,0BAA2B,CAAA,YAAA,CAAA,CAAA;AAClD,MAAkB,iBAAA,CAAA,YAAA,CAAA,CAAA;AAAA,KAAA,CAAA,CAAA;AAAA,GAAA,EAGrB,CAAC,KAAO,EAAA,IAAA,CAAA,CAAA,CAAA;AAEX,EAAA,2CACG,mBAAD,EAAA;AAAA,IACE,SAAA,EAAW,aAAa,uBAAyB,EAAA,WAAA,CAAA;AAAA,IACjD,KAAM,EAAA,oBAAA;AAAA,IACN,OAAA,sCAAU,eAAD,EAAA;AAAA,MAAiB,iBAAiB,gBAAiB,CAAA,IAAA;AAAA,KAAA,CAAA;AAAA,GAAA,sCAE3D,KAAD,EAAA;AAAA,IAAK,OAAO,CAAE,KAAA,EAAO,MAAQ,EAAA,MAAA,EAAQ,KAAK,QAAU,EAAA,UAAA,CAAA;AAAA,IAAc,GAAA;AAAA,GAEjE,CAAA,EAAA,CAAC,WACA,oBAAA,KAAA,CAAA,aAAA,CAAC,KAAD,EAAA;AAAA,IAAK,OAAO,cAAK,CAAA,EAAA,EAAA,IAAA,CAAA;AAAA,IAAQ,SAAA,EAAW,aAAa,uBAAyB,EAAA,YAAA,CAAA;AAAA,GAAe,EAAA,0BAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA;AAQjG,yBAAe,QAAQ,gBAAkB,CAAA,CAAA,kBAAA,CAAA;;;;"}
1
+ {"version":3,"file":"PointCloudBackView.js","sources":["../../../src/components/pointCloudView/PointCloudBackView.tsx"],"sourcesContent":["/*\n * @Author: Laoluo luozefeng@sensetime.com\n * @Date: 2022-06-22 11:08:31\n * @LastEditors: Laoluo luozefeng@sensetime.com\n * @LastEditTime: 2022-07-08 11:08:02\n */\nimport { PointCloud, MathUtils, PointCloudAnnotation } from '@labelbee/lb-annotation';\nimport { getClassName } from '@/utils/dom';\nimport { PointCloudContainer } from './PointCloudLayout';\nimport React, { useEffect, useRef } from 'react';\nimport { PointCloudContext } from './PointCloudContext';\nimport { useSingleBox } from './hooks/useSingleBox';\nimport { EPerspectiveView, IPointCloudBox } from '@labelbee/lb-utils';\nimport { SizeInfoForView } from './PointCloudInfos';\nimport { connect } from 'react-redux';\nimport { aMapStateToProps, IAnnotationStateProps } from '@/store/annotation/map';\nimport { synchronizeSideView, synchronizeTopView } from './hooks/usePointCloudViews';\nimport useSize from '@/hooks/useSize';\n\n/**\n * 统一一下,将其拓展为 二维转换为 三维坐标的转换\n * Get the offset from canvas2d-coordinate to world coordinate\n * @param currentPos\n * @param size\n * @param zoom\n * @returns\n */\nconst TransferCanvas2WorldOffset = (\n currentPos: { x: number; y: number },\n size: { width: number; height: number },\n zoom = 1,\n) => {\n const { width: w, height: h } = size;\n\n const canvasCenterPoint = {\n x: currentPos.x + (w * zoom) / 2,\n y: currentPos.y + (h * zoom) / 2,\n };\n\n const worldCenterPoint = {\n x: size.width / 2,\n y: size.height / 2,\n };\n\n return {\n offsetX: (worldCenterPoint.x - canvasCenterPoint.x) / zoom,\n offsetY: -(worldCenterPoint.y - canvasCenterPoint.y) / zoom,\n };\n};\nconst updateBackViewByCanvas2D = (\n currentPos: { x: number; y: number },\n zoom: number,\n size: { width: number; height: number },\n selectedPointCloudBox: IPointCloudBox,\n backPointCloud: PointCloud,\n) => {\n const { offsetX, offsetY } = TransferCanvas2WorldOffset(currentPos, size, zoom);\n backPointCloud.camera.zoom = zoom;\n if (currentPos) {\n const cos = Math.cos(selectedPointCloudBox.rotation);\n const sin = Math.sin(selectedPointCloudBox.rotation);\n const offsetXX = offsetX * cos;\n const offsetXY = offsetX * sin;\n const { x, y, z } = backPointCloud.initCameraPosition;\n backPointCloud.camera.position.set(x + offsetXY, y - offsetXX, z + offsetY);\n }\n backPointCloud.camera.updateProjectionMatrix();\n backPointCloud.render();\n};\n\nconst PointCloudSideView = ({ currentData }: IAnnotationStateProps) => {\n const ptCtx = React.useContext(PointCloudContext);\n const ref = useRef<HTMLDivElement>(null);\n const size = useSize(ref);\n const { updateSelectedBox, selectedBox } = useSingleBox();\n\n useEffect(() => {\n if (ref.current) {\n const size = {\n width: ref.current.clientWidth,\n height: ref.current.clientHeight,\n };\n\n const pointCloudAnnotation = new PointCloudAnnotation({\n container: ref.current,\n size,\n polygonOperationProps: { showDirectionLine: false, forbidAddNew: true },\n });\n ptCtx.setBackViewInstance(pointCloudAnnotation);\n }\n }, []);\n\n useEffect(() => {\n // By the way as an initialization judgment\n if (!size || !ptCtx.backViewInstance) {\n return;\n }\n\n const {\n pointCloud2dOperation: backPointCloudPolygonOperation,\n pointCloudInstance: backPointCloud,\n } = ptCtx.backViewInstance;\n\n /**\n * Synchronized 3d point cloud view displacement operations\n *\n * Change Orthographic Camera size\n */\n backPointCloudPolygonOperation.singleOn('renderZoom', (zoom: number, currentPos: any) => {\n if (!ptCtx.selectedPointCloudBox) {\n return;\n }\n updateBackViewByCanvas2D(currentPos, zoom, size, ptCtx.selectedPointCloudBox, backPointCloud);\n });\n\n // Synchronized 3d point cloud view displacement operations\n backPointCloudPolygonOperation.singleOn('dragMove', ({ currentPos, zoom }: any) => {\n if (!ptCtx.selectedPointCloudBox) {\n return;\n }\n updateBackViewByCanvas2D(currentPos, zoom, size, ptCtx.selectedPointCloudBox, backPointCloud);\n });\n\n backPointCloudPolygonOperation.singleOn(\n 'updatePolygonByDrag',\n ({ newPolygon, originPolygon }: any) => {\n if (!ptCtx.selectedPointCloudBox || !ptCtx.mainViewInstance || !currentData.url) {\n return;\n }\n\n // Notice. The sort of polygon is important.\n const [point1, point2, point3] = newPolygon.pointList;\n const [op1, op2, op3] = originPolygon.pointList;\n\n // 2D centerPoint => 3D x & z\n const newCenterPoint = MathUtils.getLineCenterPoint([point1, point3]);\n const oldCenterPoint = MathUtils.getLineCenterPoint([op1, op3]);\n\n const offset = {\n x: newCenterPoint.x - oldCenterPoint.x,\n y: newCenterPoint.y - oldCenterPoint.y,\n };\n\n const offsetCenterPoint = {\n x: offset.x,\n y: 0, // Not be used.\n z: newCenterPoint.y - oldCenterPoint.y,\n };\n\n // 2D height => 3D depth\n const height = MathUtils.getLineLength(point1, point2);\n const oldHeight = MathUtils.getLineLength(op1, op2);\n const offsetHeight = height - oldHeight; // 3D depth\n\n // 2D width => 3D width\n const width = MathUtils.getLineLength(point2, point3);\n const oldWidth = MathUtils.getLineLength(op2, op3);\n const offsetWidth = width - oldWidth; // 3D width\n\n const { newBoxParams } = backPointCloud.getNewBoxByBackUpdate(\n offsetCenterPoint,\n offsetWidth,\n offsetHeight,\n ptCtx.selectedPointCloudBox,\n );\n\n synchronizeTopView(newBoxParams, newPolygon, ptCtx.topViewInstance, ptCtx.mainViewInstance);\n synchronizeSideView(newBoxParams, newPolygon, ptCtx.sideViewInstance, currentData.url);\n ptCtx.mainViewInstance.hightLightOriginPointCloud(newBoxParams);\n updateSelectedBox(newBoxParams);\n },\n );\n }, [ptCtx, size]);\n\n useEffect(() => {\n // Update Size\n ptCtx?.backViewInstance?.initSize(size);\n }, [size]);\n\n return (\n <PointCloudContainer\n className={getClassName('point-cloud-container', 'back-view')}\n title='背视图'\n toolbar={<SizeInfoForView perspectiveView={EPerspectiveView.Back} />}\n >\n <div className={getClassName('point-cloud-container', 'bottom-view-content')}>\n <div className={getClassName('point-cloud-container', 'core-instance')} ref={ref} />\n {!selectedBox && (\n <div style={{ ...size }} className={getClassName('point-cloud-container', 'empty-page')}>\n 暂无数据\n </div>\n )}\n </div>\n </PointCloudContainer>\n );\n};\n\nexport default connect(aMapStateToProps)(PointCloudSideView);\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- import{PointCloudContext as j}from"./PointCloudContext.js";import{useRotate as R}from"./hooks/useRotate.js";import{useBoxes as h}from"./hooks/useBoxes.js";import{useSingleBox as V}from"./hooks/useSingleBox.js";import{useContext as I,useEffect as d}from"react";import{cTool as A}from"@labelbee/lb-annotation";import{message as E}from"antd";import{connect as N}from"react-redux";import{aMapStateToProps as T}from"../../store/annotation/map.js";import{PointCloudUtils as b}from"@labelbee/lb-utils";import{useCustomToolInstance as K}from"../../hooks/annotation.js";import{useStatus as z}from"./hooks/useStatus.js";import{jsonParser as D}from"../../utils/index.js";var F=Object.defineProperty,$=Object.defineProperties,q=Object.getOwnPropertyDescriptors,x=Object.getOwnPropertySymbols,G=Object.prototype.hasOwnProperty,M=Object.prototype.propertyIsEnumerable,w=(t,e,n)=>e in t?F(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,U=(t,e)=>{for(var n in e||(e={}))G.call(e,n)&&w(t,n,e[n]);if(x)for(var n of x(e))M.call(e,n)&&w(t,n,e[n]);return t},Y=(t,e)=>$(t,q(e));const{EPolygonPattern:c}=A,H=({currentData:t})=>{const e=I(j),{changeSelectedBoxValid:n,selectNextBox:C,selectPrevBox:y,updateSelectedBox:P}=V(),{clearAllResult:f}=z(),{copySelectedBoxes:g,pasteSelectedBoxes:_,copiedBoxes:B}=h(),{toolInstanceRef:i}=K(),{updateRotate:p}=R({currentData:t}),k=o=>{const{topViewInstance:s,mainViewInstance:a}=e;if(!s)return;const{pointCloud2dOperation:r}=s;switch(o){case"q":{p(2);break}case"e":p(-2);break;case"g":p(180);break;case"u":{const l=r.pattern===c.Normal?c.Rect:c.Normal;r.setPattern(l);const m={[c.Normal]:"Normal Pattern",[c.Rect]:"Rect Pattern"};E.success(`Change Pattern to ${m[l]} successfully`),r.clearActiveStatus(),r.clearDrawingStatus()}break;case"+":a==null||a.updatePointSize(!0);break;case"-":a==null||a.updatePointSize(!1);break;case"v":e.setPointCloudValid(!e.valid);break;case"z":C();break;case"c":y();break;case"f":n();break;default:return}},L=o=>{switch(o){case"c":g();break;case"v":_();break;case"a":e.selectedAllBoxes();break}},v=o=>{const s=o.key.toLocaleLowerCase();if(o.ctrlKey){L(s);return}k(s)};return d(()=>{const{topViewInstance:o}=e;if(!!o)return window.addEventListener("keydown",v),()=>{window.removeEventListener("keydown",v)}},[e,B]),d(()=>{var o,s,a,r;const l=e.mainViewInstance;if((t==null?void 0:t.url)&&l){if(l.loadPCDFile(t.url),e.pointCloudBoxList.forEach(u=>{l==null||l.removeObjectByName(u.id)}),t.result){const u=b.getBoxParamsFromResultList(t.result),O=b.getPolygonListFromResultList(t.result);u.forEach(S=>{l==null||l.generateBox(S)}),e.setPointCloudResult(u),e.setPolygonList(O)}else e.setPointCloudResult([]),e.setPolygonList([]);l.updateTopCamera();const m=(s=(o=D(t.result))==null?void 0:o.valid)!=null?s:!0;e.setPointCloudValid(m),(a=e.sideViewInstance)==null||a.clearAllData(),(r=e.backViewInstance)==null||r.clearAllData()}},[t,e.mainViewInstance]),d(()=>{i.current.exportData=()=>[e.pointCloudBoxList,{valid:e.valid}],i.current.exportCustomData=()=>{var o;return{renderPolygon:(o=e.polygonList)!=null?o:[]}},i.current.setDefaultAttribute=o=>{const s=e.selectedPointCloudBox;s&&(s.attribute=o,P(s))},i.current.setSubAttribute=(o,s)=>{var a;const r=e.selectedPointCloudBox;if(r){const l=(a=r==null?void 0:r.subAttribute)!=null?a:{};r.subAttribute=Y(U({},l),{[o]:s}),P(r)}},i.current.clearResult=()=>{f==null||f()}},[e.pointCloudBoxList,e.selectedID,e.valid,e.polygonList]),d(()=>{i.current.setValid=()=>{e.setPointCloudValid(!e.valid)}},[e.valid]),null};var J=N(T)(H);export{J as default};
1
+ import{PointCloudContext as h}from"./PointCloudContext.js";import{useRotate as I}from"./hooks/useRotate.js";import{useBoxes as V}from"./hooks/useBoxes.js";import{useSingleBox as A}from"./hooks/useSingleBox.js";import{useContext as E,useEffect as d}from"react";import{cTool as N}from"@labelbee/lb-annotation";import{message as T}from"antd";import{connect as K}from"react-redux";import{aMapStateToProps as z}from"../../store/annotation/map.js";import{PointCloudUtils as b}from"@labelbee/lb-utils";import{useCustomToolInstance as F}from"../../hooks/annotation.js";import{useStatus as D}from"./hooks/useStatus.js";import{jsonParser as x}from"../../utils/index.js";var $=Object.defineProperty,q=Object.defineProperties,G=Object.getOwnPropertyDescriptors,w=Object.getOwnPropertySymbols,M=Object.prototype.hasOwnProperty,U=Object.prototype.propertyIsEnumerable,C=(o,e,n)=>e in o?$(o,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):o[e]=n,Y=(o,e)=>{for(var n in e||(e={}))M.call(e,n)&&C(o,n,e[n]);if(w)for(var n of w(e))U.call(e,n)&&C(o,n,e[n]);return o},H=(o,e)=>q(o,G(e));const{EPolygonPattern:c}=N,J=({currentData:o})=>{const e=E(h),{changeSelectedBoxValid:n,selectNextBox:y,selectPrevBox:g,updateSelectedBox:P}=A(),{clearAllResult:f}=D(),_=x(o.result),{copySelectedBoxes:B,pasteSelectedBoxes:k,copiedBoxes:L}=V(),{toolInstanceRef:i}=F({basicInfo:_}),{updateRotate:p}=I({currentData:o}),O=t=>{const{topViewInstance:s,mainViewInstance:a}=e;if(!s)return;const{pointCloud2dOperation:r}=s;switch(t){case"q":{p(2);break}case"e":p(-2);break;case"g":p(180);break;case"u":{const l=r.pattern===c.Normal?c.Rect:c.Normal;r.setPattern(l);const m={[c.Normal]:"Normal Pattern",[c.Rect]:"Rect Pattern"};T.success(`Change Pattern to ${m[l]} successfully`),r.clearActiveStatus(),r.clearDrawingStatus()}break;case"+":a==null||a.updatePointSize(!0);break;case"-":a==null||a.updatePointSize(!1);break;case"v":e.setPointCloudValid(!e.valid);break;case"z":y();break;case"c":g();break;case"f":n();break;default:return}},S=t=>{switch(t){case"c":B();break;case"v":k();break;case"a":e.selectedAllBoxes();break}},v=t=>{const s=t.key.toLocaleLowerCase();if(t.ctrlKey){S(s);return}O(s)};return d(()=>{const{topViewInstance:t}=e;if(!!t)return window.addEventListener("keydown",v),()=>{window.removeEventListener("keydown",v)}},[e,L]),d(()=>{var t,s,a,r;const l=e.mainViewInstance;if((o==null?void 0:o.url)&&l){if(l.loadPCDFile(o.url),e.pointCloudBoxList.forEach(u=>{l==null||l.removeObjectByName(u.id)}),o.result){const u=b.getBoxParamsFromResultList(o.result),j=b.getPolygonListFromResultList(o.result);u.forEach(R=>{l==null||l.generateBox(R)}),e.setPointCloudResult(u),e.setPolygonList(j)}else e.setPointCloudResult([]),e.setPolygonList([]);l.updateTopCamera();const m=(s=(t=x(o.result))==null?void 0:t.valid)!=null?s:!0;e.setPointCloudValid(m),(a=e.sideViewInstance)==null||a.clearAllData(),(r=e.backViewInstance)==null||r.clearAllData()}},[o,e.mainViewInstance]),d(()=>{i.current.exportData=()=>[e.pointCloudBoxList,{valid:e.valid}],i.current.exportCustomData=()=>{var t;return{renderPolygon:(t=e.polygonList)!=null?t:[]}},i.current.setDefaultAttribute=t=>{const s=e.selectedPointCloudBox;s&&(s.attribute=t,P(s))},i.current.setSubAttribute=(t,s)=>{var a;const r=e.selectedPointCloudBox;if(r){const l=(a=r==null?void 0:r.subAttribute)!=null?a:{};r.subAttribute=H(Y({},l),{[t]:s}),P(r)}},i.current.clearResult=()=>{f==null||f()}},[e.pointCloudBoxList,e.selectedID,e.valid,e.polygonList]),d(()=>{i.current.setValid=t=>{i.current.valid=t,setTimeout(()=>{e.setPointCloudValid(t)})}},[]),null};var Q=K(z)(J);export{Q as default};
@@ -1 +1 @@
1
- {"version":3,"file":"PointCloudListener.js","sources":["../../../src/components/pointCloudView/PointCloudListener.tsx"],"sourcesContent":["import { PointCloudContext } from './PointCloudContext';\nimport { useRotate } from './hooks/useRotate';\nimport { useBoxes } from './hooks/useBoxes';\nimport { useSingleBox } from './hooks/useSingleBox';\nimport React, { useContext, useEffect } from 'react';\nimport { cTool } from '@labelbee/lb-annotation';\nimport { message } from 'antd';\nimport { connect } from 'react-redux';\nimport { aMapStateToProps, IAnnotationStateProps } from '@/store/annotation/map';\nimport { IPointCloudBox, PointCloudUtils } from '@labelbee/lb-utils';\nimport { useCustomToolInstance } from '@/hooks/annotation';\nimport { useStatus } from './hooks/useStatus';\nimport { jsonParser } from '@/utils';\n\nconst { EPolygonPattern } = cTool;\n\nconst PointCloudListener: React.FC<IAnnotationStateProps> = ({ currentData }) => {\n const ptCtx = useContext(PointCloudContext);\n const { changeSelectedBoxValid, selectNextBox, selectPrevBox, updateSelectedBox } =\n useSingleBox();\n const { clearAllResult } = useStatus();\n const { copySelectedBoxes, pasteSelectedBoxes, copiedBoxes } = useBoxes();\n const { toolInstanceRef } = useCustomToolInstance();\n const { updateRotate } = useRotate({ currentData });\n\n const keydownEvents = (lowerCaseKey: string) => {\n const { topViewInstance, mainViewInstance } = ptCtx;\n if (!topViewInstance) {\n return;\n }\n\n const { pointCloud2dOperation: TopPointCloudPolygonOperation } = topViewInstance;\n\n switch (lowerCaseKey) {\n case 'q': {\n // Q - anticlockwise\n updateRotate(2);\n break;\n }\n\n case 'e':\n // E - closewise\n updateRotate(-2);\n\n break;\n\n case 'g':\n // G , overturn 180\n updateRotate(180);\n\n break;\n\n case 'u':\n {\n // U , change TopOpereation Pattern\n const newPattern =\n TopPointCloudPolygonOperation.pattern === EPolygonPattern.Normal\n ? EPolygonPattern.Rect\n : EPolygonPattern.Normal;\n TopPointCloudPolygonOperation.setPattern(newPattern);\n const POLYGON_PATTERN = {\n [EPolygonPattern.Normal]: 'Normal Pattern',\n [EPolygonPattern.Rect]: 'Rect Pattern',\n };\n message.success(`Change Pattern to ${POLYGON_PATTERN[newPattern]} successfully`);\n\n // Clear Status\n TopPointCloudPolygonOperation.clearActiveStatus();\n TopPointCloudPolygonOperation.clearDrawingStatus();\n }\n\n break;\n\n // +: Increase points size\n case '+':\n mainViewInstance?.updatePointSize(true);\n break;\n\n // -: Reduce points size\n case '-':\n mainViewInstance?.updatePointSize(false);\n break;\n\n case 'v':\n ptCtx.setPointCloudValid(!ptCtx.valid);\n break;\n\n case 'z':\n selectNextBox();\n break;\n\n case 'c':\n selectPrevBox();\n break;\n\n case 'f':\n changeSelectedBoxValid();\n break;\n\n default: {\n return;\n }\n }\n };\n\n const ctrlKeydownEvents = (lowerCaseKey: string) => {\n switch (lowerCaseKey) {\n case 'c':\n copySelectedBoxes();\n break;\n case 'v':\n pasteSelectedBoxes();\n break;\n case 'a':\n ptCtx.selectedAllBoxes();\n break;\n default:\n break;\n }\n };\n\n const onKeyDown = (e: KeyboardEvent) => {\n const lowerCaseKey = e.key.toLocaleLowerCase();\n\n if (e.ctrlKey) {\n ctrlKeydownEvents(lowerCaseKey);\n return;\n }\n\n keydownEvents(lowerCaseKey);\n };\n\n useEffect(() => {\n const { topViewInstance } = ptCtx;\n if (!topViewInstance) {\n return;\n }\n\n window.addEventListener('keydown', onKeyDown);\n\n return () => {\n window.removeEventListener('keydown', onKeyDown);\n };\n }, [ptCtx, copiedBoxes]);\n\n // Page switch data initialization\n useEffect(() => {\n const pointCloud = ptCtx.mainViewInstance;\n if (currentData?.url && pointCloud) {\n pointCloud.loadPCDFile(currentData.url);\n\n // Clear All Data\n ptCtx.pointCloudBoxList.forEach((v) => {\n pointCloud?.removeObjectByName(v.id);\n });\n\n if (currentData.result) {\n const boxParamsList = PointCloudUtils.getBoxParamsFromResultList(currentData.result);\n const polygonList = PointCloudUtils.getPolygonListFromResultList(currentData.result);\n\n // Add Init Box\n boxParamsList.forEach((v: IPointCloudBox) => {\n pointCloud?.generateBox(v);\n });\n\n ptCtx.setPointCloudResult(boxParamsList);\n ptCtx.setPolygonList(polygonList);\n } else {\n ptCtx.setPointCloudResult([]);\n ptCtx.setPolygonList([]);\n }\n\n pointCloud.updateTopCamera();\n\n const valid = jsonParser(currentData.result)?.valid ?? true;\n ptCtx.setPointCloudValid(valid);\n\n // Clear other view data during initialization\n ptCtx.sideViewInstance?.clearAllData();\n ptCtx.backViewInstance?.clearAllData();\n }\n }, [currentData, ptCtx.mainViewInstance]);\n\n useEffect(() => {\n toolInstanceRef.current.exportData = () => {\n return [ptCtx.pointCloudBoxList, { valid: ptCtx.valid }];\n };\n\n toolInstanceRef.current.exportCustomData = () => {\n return {\n renderPolygon: ptCtx.polygonList ?? [],\n };\n };\n\n toolInstanceRef.current.setDefaultAttribute = (newAttribute: string) => {\n const selectBox = ptCtx.selectedPointCloudBox;\n if (selectBox) {\n selectBox.attribute = newAttribute;\n\n updateSelectedBox(selectBox);\n }\n };\n\n toolInstanceRef.current.setSubAttribute = (key: string, value: string) => {\n const selectBox = ptCtx.selectedPointCloudBox;\n if (selectBox) {\n const originSubAttribute = selectBox?.subAttribute ?? {};\n\n selectBox.subAttribute = {\n ...originSubAttribute,\n [key]: value,\n };\n\n updateSelectedBox(selectBox);\n }\n };\n toolInstanceRef.current.clearResult = () => {\n clearAllResult?.();\n };\n }, [ptCtx.pointCloudBoxList, ptCtx.selectedID, ptCtx.valid, ptCtx.polygonList]);\n\n useEffect(() => {\n toolInstanceRef.current.setValid = () => {\n ptCtx.setPointCloudValid(!ptCtx.valid);\n };\n }, [ptCtx.valid]);\n\n return null;\n};\n\nexport default connect(aMapStateToProps)(PointCloudListener);\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PointCloudListener.js","sources":["../../../src/components/pointCloudView/PointCloudListener.tsx"],"sourcesContent":["import { PointCloudContext } from './PointCloudContext';\nimport { useRotate } from './hooks/useRotate';\nimport { useBoxes } from './hooks/useBoxes';\nimport { useSingleBox } from './hooks/useSingleBox';\nimport React, { useContext, useEffect } from 'react';\nimport { cTool } from '@labelbee/lb-annotation';\nimport { message } from 'antd';\nimport { connect } from 'react-redux';\nimport { aMapStateToProps, IAnnotationStateProps } from '@/store/annotation/map';\nimport { IPointCloudBox, PointCloudUtils } from '@labelbee/lb-utils';\nimport { useCustomToolInstance } from '@/hooks/annotation';\nimport { useStatus } from './hooks/useStatus';\nimport { jsonParser } from '@/utils';\n\nconst { EPolygonPattern } = cTool;\n\nconst PointCloudListener: React.FC<IAnnotationStateProps> = ({ currentData }) => {\n const ptCtx = useContext(PointCloudContext);\n const { changeSelectedBoxValid, selectNextBox, selectPrevBox, updateSelectedBox } =\n useSingleBox();\n const { clearAllResult } = useStatus();\n const basicInfo = jsonParser(currentData.result);\n const { copySelectedBoxes, pasteSelectedBoxes, copiedBoxes } = useBoxes();\n const { toolInstanceRef } = useCustomToolInstance({ basicInfo });\n const { updateRotate } = useRotate({ currentData });\n\n const keydownEvents = (lowerCaseKey: string) => {\n const { topViewInstance, mainViewInstance } = ptCtx;\n if (!topViewInstance) {\n return;\n }\n\n const { pointCloud2dOperation: TopPointCloudPolygonOperation } = topViewInstance;\n\n switch (lowerCaseKey) {\n case 'q': {\n // Q - anticlockwise\n updateRotate(2);\n break;\n }\n\n case 'e':\n // E - closewise\n updateRotate(-2);\n\n break;\n\n case 'g':\n // G , overturn 180\n updateRotate(180);\n\n break;\n\n case 'u':\n {\n // U , change TopOpereation Pattern\n const newPattern =\n TopPointCloudPolygonOperation.pattern === EPolygonPattern.Normal\n ? EPolygonPattern.Rect\n : EPolygonPattern.Normal;\n TopPointCloudPolygonOperation.setPattern(newPattern);\n const POLYGON_PATTERN = {\n [EPolygonPattern.Normal]: 'Normal Pattern',\n [EPolygonPattern.Rect]: 'Rect Pattern',\n };\n message.success(`Change Pattern to ${POLYGON_PATTERN[newPattern]} successfully`);\n\n // Clear Status\n TopPointCloudPolygonOperation.clearActiveStatus();\n TopPointCloudPolygonOperation.clearDrawingStatus();\n }\n\n break;\n\n // +: Increase points size\n case '+':\n mainViewInstance?.updatePointSize(true);\n break;\n\n // -: Reduce points size\n case '-':\n mainViewInstance?.updatePointSize(false);\n break;\n\n case 'v':\n ptCtx.setPointCloudValid(!ptCtx.valid);\n break;\n\n case 'z':\n selectNextBox();\n break;\n\n case 'c':\n selectPrevBox();\n break;\n\n case 'f':\n changeSelectedBoxValid();\n break;\n\n default: {\n return;\n }\n }\n };\n\n const ctrlKeydownEvents = (lowerCaseKey: string) => {\n switch (lowerCaseKey) {\n case 'c':\n copySelectedBoxes();\n break;\n case 'v':\n pasteSelectedBoxes();\n break;\n case 'a':\n ptCtx.selectedAllBoxes();\n break;\n default:\n break;\n }\n };\n\n const onKeyDown = (e: KeyboardEvent) => {\n const lowerCaseKey = e.key.toLocaleLowerCase();\n\n if (e.ctrlKey) {\n ctrlKeydownEvents(lowerCaseKey);\n return;\n }\n\n keydownEvents(lowerCaseKey);\n };\n\n useEffect(() => {\n const { topViewInstance } = ptCtx;\n if (!topViewInstance) {\n return;\n }\n\n window.addEventListener('keydown', onKeyDown);\n\n return () => {\n window.removeEventListener('keydown', onKeyDown);\n };\n }, [ptCtx, copiedBoxes]);\n\n // Page switch data initialization\n useEffect(() => {\n const pointCloud = ptCtx.mainViewInstance;\n if (currentData?.url && pointCloud) {\n pointCloud.loadPCDFile(currentData.url);\n\n // Clear All Data\n ptCtx.pointCloudBoxList.forEach((v) => {\n pointCloud?.removeObjectByName(v.id);\n });\n\n if (currentData.result) {\n const boxParamsList = PointCloudUtils.getBoxParamsFromResultList(currentData.result);\n const polygonList = PointCloudUtils.getPolygonListFromResultList(currentData.result);\n\n // Add Init Box\n boxParamsList.forEach((v: IPointCloudBox) => {\n pointCloud?.generateBox(v);\n });\n\n ptCtx.setPointCloudResult(boxParamsList);\n ptCtx.setPolygonList(polygonList);\n } else {\n ptCtx.setPointCloudResult([]);\n ptCtx.setPolygonList([]);\n }\n\n pointCloud.updateTopCamera();\n\n const valid = jsonParser(currentData.result)?.valid ?? true;\n ptCtx.setPointCloudValid(valid);\n\n // Clear other view data during initialization\n ptCtx.sideViewInstance?.clearAllData();\n ptCtx.backViewInstance?.clearAllData();\n }\n }, [currentData, ptCtx.mainViewInstance]);\n\n useEffect(() => {\n toolInstanceRef.current.exportData = () => {\n return [ptCtx.pointCloudBoxList, { valid: ptCtx.valid }];\n };\n\n toolInstanceRef.current.exportCustomData = () => {\n return {\n renderPolygon: ptCtx.polygonList ?? [],\n };\n };\n\n toolInstanceRef.current.setDefaultAttribute = (newAttribute: string) => {\n const selectBox = ptCtx.selectedPointCloudBox;\n if (selectBox) {\n selectBox.attribute = newAttribute;\n\n updateSelectedBox(selectBox);\n }\n };\n\n toolInstanceRef.current.setSubAttribute = (key: string, value: string) => {\n const selectBox = ptCtx.selectedPointCloudBox;\n if (selectBox) {\n const originSubAttribute = selectBox?.subAttribute ?? {};\n\n selectBox.subAttribute = {\n ...originSubAttribute,\n [key]: value,\n };\n\n updateSelectedBox(selectBox);\n }\n };\n toolInstanceRef.current.clearResult = () => {\n clearAllResult?.();\n };\n }, [ptCtx.pointCloudBoxList, ptCtx.selectedID, ptCtx.valid, ptCtx.polygonList]);\n\n useEffect(() => {\n toolInstanceRef.current.setValid = (valid: boolean) => {\n toolInstanceRef.current.valid = valid;\n\n // Avoid triggering SetState operations in the reducer phase\n setTimeout(() => {\n ptCtx.setPointCloudValid(valid);\n });\n };\n }, []);\n\n return null;\n};\n\nexport default connect(aMapStateToProps)(PointCloudListener);\n"],"names":[],"mappings":"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"}