@labelbee/lb-components 1.9.0-alpha.8 → 1.10.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/dist/App.js +1 -1
  2. package/dist/assets/predictTracking/icon.svg.js +1 -0
  3. package/dist/components/pointCloudView/PointCloudBackView.js +1 -1
  4. package/dist/components/pointCloudView/PointCloudSideView.js +1 -1
  5. package/dist/components/pointCloudView/PointCloudTopView.js +1 -1
  6. package/dist/components/pointCloudView/hooks/usePointCloudViews.js +1 -1
  7. package/dist/components/pointCloudView/hooks/useStatus.js +1 -1
  8. package/dist/components/pointCloudView/index.js +1 -1
  9. package/dist/components/predictTracking/index.js +1 -0
  10. package/dist/components/predictTracking/predictTrackingIcon/index.js +1 -0
  11. package/dist/components/predictTracking/previewResult/index.js +1 -0
  12. package/dist/components/predictTracking/previewResult/util.js +1 -0
  13. package/dist/constant/index.js +1 -1
  14. package/dist/data/Style.js +1 -1
  15. package/dist/data/enums/ToolType.js +1 -1
  16. package/dist/index.css +83 -1
  17. package/dist/index.js +1 -1
  18. package/dist/store/Actions.js +1 -1
  19. package/dist/store/annotation/actionCreators.js +1 -1
  20. package/dist/store/annotation/reducer.js +1 -1
  21. package/dist/types/App.d.ts +1 -0
  22. package/dist/types/components/pointCloudView/PointCloudContext.d.ts +2 -2
  23. package/dist/types/components/pointCloudView/PointCloudTopView.d.ts +1 -0
  24. package/dist/types/components/pointCloudView/hooks/usePointCloudViews.d.ts +7 -3
  25. package/dist/types/components/pointCloudView/hooks/useStatus.d.ts +1 -1
  26. package/dist/types/components/pointCloudView/index.d.ts +1 -0
  27. package/dist/types/components/predictTracking/index.d.ts +2 -0
  28. package/dist/types/components/predictTracking/predictTrackingIcon/index.d.ts +6 -0
  29. package/dist/types/components/predictTracking/previewResult/index.d.ts +9 -0
  30. package/dist/types/components/predictTracking/previewResult/util.d.ts +43 -0
  31. package/dist/types/constant/index.d.ts +1 -0
  32. package/dist/types/data/enums/ToolType.d.ts +4 -1
  33. package/dist/types/index.d.ts +2 -1
  34. package/dist/types/store/Actions.d.ts +3 -0
  35. package/dist/types/store/annotation/actionCreators.d.ts +4 -0
  36. package/dist/types/store/annotation/reducer.d.ts +2 -0
  37. package/dist/types/store/annotation/types.d.ts +5 -0
  38. package/dist/types/utils/ToolUtils.d.ts +2 -0
  39. package/dist/utils/ToolUtils.js +1 -1
  40. package/dist/views/MainView/index.js +1 -1
  41. package/dist/views/MainView/sidebar/TextAreaFormat/index.js +1 -1
  42. package/dist/views/MainView/sidebar/ToolIcons.js +1 -1
  43. package/dist/views/MainView/sidebar/index.js +1 -1
  44. package/dist/views/MainView/toolHeader/index.js +1 -1
  45. package/es/App.js +1 -1
  46. package/es/App.js.map +1 -1
  47. package/es/assets/predictTracking/icon.svg.js +1 -0
  48. package/es/assets/predictTracking/icon.svg.js.map +1 -0
  49. package/es/components/pointCloudView/PointCloudBackView.js +1 -1
  50. package/es/components/pointCloudView/PointCloudBackView.js.map +1 -1
  51. package/es/components/pointCloudView/PointCloudContext.js.map +1 -1
  52. package/es/components/pointCloudView/PointCloudSideView.js +1 -1
  53. package/es/components/pointCloudView/PointCloudSideView.js.map +1 -1
  54. package/es/components/pointCloudView/PointCloudTopView.js +1 -1
  55. package/es/components/pointCloudView/PointCloudTopView.js.map +1 -1
  56. package/es/components/pointCloudView/hooks/usePointCloudViews.js +1 -1
  57. package/es/components/pointCloudView/hooks/usePointCloudViews.js.map +1 -1
  58. package/es/components/pointCloudView/hooks/useStatus.js +1 -1
  59. package/es/components/pointCloudView/hooks/useStatus.js.map +1 -1
  60. package/es/components/pointCloudView/index.js +1 -1
  61. package/es/components/pointCloudView/index.js.map +1 -1
  62. package/es/components/predictTracking/index.js +1 -0
  63. package/es/components/predictTracking/index.js.map +1 -0
  64. package/es/components/predictTracking/predictTrackingIcon/index.js +1 -0
  65. package/es/components/predictTracking/predictTrackingIcon/index.js.map +1 -0
  66. package/es/components/predictTracking/previewResult/index.js +1 -0
  67. package/es/components/predictTracking/previewResult/index.js.map +1 -0
  68. package/es/components/predictTracking/previewResult/util.js +1 -0
  69. package/es/components/predictTracking/previewResult/util.js.map +1 -0
  70. package/es/constant/index.js +1 -1
  71. package/es/constant/index.js.map +1 -1
  72. package/es/data/Style.js +1 -1
  73. package/es/data/Style.js.map +1 -1
  74. package/es/data/enums/ToolType.js +1 -1
  75. package/es/data/enums/ToolType.js.map +1 -1
  76. package/es/index.css +83 -1
  77. package/es/index.js +1 -1
  78. package/es/index.js.map +1 -1
  79. package/es/store/Actions.js +1 -1
  80. package/es/store/Actions.js.map +1 -1
  81. package/es/store/annotation/actionCreators.js +1 -1
  82. package/es/store/annotation/actionCreators.js.map +1 -1
  83. package/es/store/annotation/reducer.js +1 -1
  84. package/es/store/annotation/reducer.js.map +1 -1
  85. package/es/utils/ToolUtils.js +1 -1
  86. package/es/utils/ToolUtils.js.map +1 -1
  87. package/es/views/MainView/index.js +1 -1
  88. package/es/views/MainView/index.js.map +1 -1
  89. package/es/views/MainView/sidebar/TextAreaFormat/index.js +1 -1
  90. package/es/views/MainView/sidebar/TextAreaFormat/index.js.map +1 -1
  91. package/es/views/MainView/sidebar/ToolIcons.js +1 -1
  92. package/es/views/MainView/sidebar/ToolIcons.js.map +1 -1
  93. package/es/views/MainView/sidebar/index.js +1 -1
  94. package/es/views/MainView/sidebar/index.js.map +1 -1
  95. package/es/views/MainView/toolHeader/index.js +1 -1
  96. package/es/views/MainView/toolHeader/index.js.map +1 -1
  97. package/package.json +4 -4
@@ -9,7 +9,10 @@ import { ISize } from '@/types/main';
9
9
  import { IFileItem } from '@/types/data';
10
10
  export declare const topViewPolygon2PointCloud: (newPolygon: any, size: ISize, pointCloud?: PointCloud, selectedPointCloudBox?: IPointCloudBox, defaultValue?: {
11
11
  [v: string]: any;
12
- } | undefined) => Omit<IPointCloudBox, "trackID">;
12
+ } | undefined, intelligentFit?: boolean) => {
13
+ boxParams: Omit<IPointCloudBox, "trackID">;
14
+ newPointList: any;
15
+ };
13
16
  /**
14
17
  * NewBox synchronize sideView
15
18
  * @param boxParams
@@ -38,12 +41,13 @@ export declare const usePointCloudViews: () => {
38
41
  initPointCloud3d?: undefined;
39
42
  updatePointCloudData?: undefined;
40
43
  } | {
41
- topViewAddBox: ({ newPolygon, size, imgList, trackConfigurable, zoom, }: {
42
- newPolygon: any;
44
+ topViewAddBox: ({ polygon, size, imgList, trackConfigurable, zoom, intelligentFit, }: {
45
+ polygon: any;
43
46
  size: ISize;
44
47
  imgList: IFileItem[];
45
48
  trackConfigurable?: boolean | undefined;
46
49
  zoom: number;
50
+ intelligentFit?: boolean | undefined;
47
51
  }) => void;
48
52
  topViewSelectedChanged: (newSelectedBox?: IPointCloudBox, newPointCloudList?: IPointCloudBox[]) => void;
49
53
  topViewUpdateBox: (updateList: UpdatePolygonByDragList, size: ISize) => void;
@@ -7,5 +7,5 @@ import { cTool } from '@labelbee/lb-annotation';
7
7
  export declare const useStatus: () => {
8
8
  clearAllResult: () => void;
9
9
  updatePointCloudPattern: (toolName: any) => void;
10
- pointCloudPattern: cTool.EToolName.Rect | cTool.EToolName.Polygon;
10
+ pointCloudPattern: cTool.EToolName.Rect | cTool.EToolName.Point | cTool.EToolName.Polygon | cTool.EToolName.Line;
11
11
  };
@@ -11,6 +11,7 @@ interface IProps {
11
11
  imgList: IFileItem[];
12
12
  drawLayerSlot?: TDrawLayerSlot;
13
13
  checkMode?: boolean;
14
+ intelligentFit?: boolean;
14
15
  }
15
16
  declare const _default: import("react-redux").ConnectedComponent<React.FC<IProps>, import("react-redux").Omit<IProps & {
16
17
  children?: React.ReactNode;
@@ -0,0 +1,2 @@
1
+ import PredictTrackingIcon from './predictTrackingIcon';
2
+ export default PredictTrackingIcon;
@@ -0,0 +1,6 @@
1
+ declare const _default: import("react-redux").ConnectedComponent<(props: {
2
+ loading: boolean;
3
+ }) => JSX.Element, import("react-redux").Omit<{
4
+ loading: boolean;
5
+ }, "loading">>;
6
+ export default _default;
@@ -0,0 +1,9 @@
1
+ import { IPointCloudBoxWithIndex } from '@/store/annotation/types';
2
+ import { IFileItem } from '@/types/data';
3
+ interface IProps {
4
+ imgList: IFileItem[];
5
+ predictionResultVisible: boolean;
6
+ predictionResult: IPointCloudBoxWithIndex[];
7
+ }
8
+ declare const _default: import("react-redux").ConnectedComponent<(props: IProps) => JSX.Element | null, import("react-redux").Omit<IProps, "imgList" | "predictionResult" | "predictionResultVisible">>;
9
+ export default _default;
@@ -0,0 +1,43 @@
1
+ import { IPointCloudBoxWithIndex } from '@/store/annotation/types';
2
+ import { IFileItem } from '@/types/data';
3
+ import { PointCloud } from '@labelbee/lb-annotation';
4
+ import { EPerspectiveView, IPointCloudBox } from '@labelbee/lb-utils';
5
+ /**
6
+ * Returns a Promise that resolves after the specified duration.
7
+ * @param ms - The duration to sleep, in milliseconds.
8
+ * @returns A Promise that resolves after `ms` milliseconds.
9
+ */
10
+ export declare const sleep: (time?: number) => Promise<unknown>;
11
+ export declare const views: readonly [EPerspectiveView.Top, EPerspectiveView.Left, EPerspectiveView.Back];
12
+ interface viewDataUrl {
13
+ [EPerspectiveView.Top]?: string;
14
+ [EPerspectiveView.Left]?: string;
15
+ [EPerspectiveView.Back]?: string;
16
+ }
17
+ export type IBox = IPointCloudBoxWithIndex & viewDataUrl;
18
+ /**
19
+ * Generates data URLs for each view of a given point cloud object using the provided box and zoom level.
20
+ *
21
+ * @param {PointCloud} pointCloud - The point cloud object to generate data URLs for.
22
+ * @param {IBox} box - An object representing the bounding box to use for calculating camera position.
23
+ * @param {number} zoom - The zoom level to use when generating data URLs.
24
+ * @returns {Promise<void>} - A promise that resolves once all data URLs have been generated.
25
+ */
26
+ export declare const getViewsDataUrl: (pointCloud: PointCloud, box: IBox, zoom: number) => Promise<void>;
27
+ /**
28
+ * Retrieve boxes with a specific trackID from an array of file items.
29
+ *
30
+ * @param {Array} imageList - An array of file items to search through.
31
+ * @param {Number} targetStep - The step number within the result object to retrieve boxes from.
32
+ * @param {Number} selectedBoxTrackID - The trackID to match when searching for boxes.
33
+ * @return {Array} An array of point cloud boxes that match the provided trackID, along with their index in the original array.
34
+ */
35
+ export declare const getBoxesByTrackID: (imageList: IFileItem[], targetStep: number, selectedBoxTrackID: number) => IPointCloudBoxWithIndex[];
36
+ /**
37
+ * Calculate predicted values for each field in between the start and end points.
38
+ * @param {IPointCloudBoxWithIndex} start - The starting point, should have the same properties as IPointCloudBoxWithIndex.
39
+ * @param {IPointCloudBoxWithIndex} end - The ending point, should have the same properties as IPointCloudBoxWithIndex.
40
+ * @returns {IPointCloudBox[]} An array of objects with the same properties as IPointCloudBox, containing interpolated values between the start and end points for each field.
41
+ */
42
+ export declare const predict: (start: IPointCloudBoxWithIndex, end: IPointCloudBoxWithIndex) => IPointCloudBox[];
43
+ export {};
@@ -14,6 +14,7 @@ export declare enum ESubmitType {
14
14
  StepChanged = 6,
15
15
  Save = 7,
16
16
  BatchUpdateTrackID = 8,
17
+ BatchUpdateImgList = 9,
17
18
  SyncImgList = 10001,
18
19
  SyncCurrentPageData = 10002
19
20
  }
@@ -38,7 +38,10 @@ export declare enum EToolName {
38
38
  /** OCR关联关系工具 */
39
39
  OCRRelation = "OCRRelationTool",
40
40
  /** 算法分割辅助工具 */
41
- SegmentByRect = "segmentByRectTool"
41
+ SegmentByRect = "segmentByRectTool",
42
+ Cuboid = "cuboidTool",
43
+ /** 点云多边形工具 */
44
+ PointCloudPolygon = "pointCloudPolygon"
42
45
  }
43
46
  export declare enum ETextType {
44
47
  AnyString = 0,
@@ -5,10 +5,11 @@ import { i18n } from '@labelbee/lb-utils';
5
5
  import React from 'react';
6
6
  import { VideoTagTool } from '@/components/videoPlayer/TagToolInstanceAdaptorI18nProvider';
7
7
  import './index.scss';
8
+ import PredictTracking from '@/components/predictTracking';
8
9
  export declare const store: import("redux").Store<{}, import("redux").Action<any>> & {
9
10
  dispatch: unknown;
10
11
  };
11
12
  declare const _default: React.ForwardRefExoticComponent<AppProps & React.RefAttributes<unknown>>;
12
13
  export default _default;
13
- export { AnnotationView, PointCloudAnnotationView, i18n, VideoTagTool };
14
+ export { AnnotationView, PointCloudAnnotationView, i18n, VideoTagTool, PredictTracking };
14
15
  export * from './constant';
@@ -34,6 +34,9 @@ export declare const ANNOTATION_ACTIONS: {
34
34
  UPDATE_ANNOTATION_VALID: string;
35
35
  BATCH_UPDATE_TRACK_ID: string;
36
36
  BATCH_UPDATE_RESULT_BY_TRACK_ID: string;
37
+ BATCH_UPDATE_IMG_LIST_RESULT_BY_PREDICT_RESULT: string;
38
+ SET_PREDICT_RESULT_VISIBLE: string;
39
+ SET_PREDICT_RESULT: string;
37
40
  };
38
41
  export declare const IMAGE_ATTRIBUTE_ACTIONS: {
39
42
  UPDATE_IMG_ATTRIBUTE: string;
@@ -34,6 +34,7 @@ export declare function BatchUpdateTrackID({ id, newID, rangeIndex, imgList, }:
34
34
  }): AnnotationActionTypes;
35
35
  export declare function BatchUpdateResultByTrackID(id: number, // originData
36
36
  newData: Partial<IPointCloudBox>, rangeIndex: [number, number]): AnnotationActionTypes;
37
+ export declare function BatchUpdateImgListResultByPredictResult(): AnnotationActionTypes;
37
38
  export declare const UpdateCheckMode: (checkMode: boolean) => AnnotationActionTypes;
38
39
  /**
39
40
  * 初始化任务数据
@@ -89,3 +90,6 @@ export declare const ChangeSave: (dispatch: Function) => void;
89
90
  export declare const SetAnnotationLoading: (dispatch: Function, loading: boolean) => void;
90
91
  export declare const SetPointCloudLoading: (dispatch: Function, loading: boolean) => void;
91
92
  export declare const InitAnnotationState: (dispatch: Function) => void;
93
+ export declare const SetPredictResult: (dispatch: Function, result: any) => void;
94
+ export declare const SetPredictResultVisible: (dispatch: Function, visible: boolean) => void;
95
+ export declare const GetBoxesByID: (selectedBoxTrackID: number) => (dispatch: any, getState: any) => IPointCloudBox[];
@@ -48,4 +48,6 @@ export declare const annotationReducer: (state: {
48
48
  beforeRotate?: (() => boolean) | undefined;
49
49
  pointCloudLoading: boolean;
50
50
  checkMode: boolean;
51
+ predictionResult: import("./types").IPointCloudBoxWithIndex[];
52
+ predictionResultVisible: boolean;
51
53
  } | undefined, action: AnnotationActionTypes) => AnnotationState;
@@ -10,6 +10,9 @@ interface CommonActions {
10
10
  type: string;
11
11
  payload?: any;
12
12
  }
13
+ export type IPointCloudBoxWithIndex = IPointCloudBox & {
14
+ index: number;
15
+ };
13
16
  export interface AnnotationState {
14
17
  toolInstance: ToolInstance | null;
15
18
  annotationEngine: AnnotationEngine | null;
@@ -38,6 +41,8 @@ export interface AnnotationState {
38
41
  beforeRotate?: () => boolean;
39
42
  pointCloudLoading: boolean;
40
43
  checkMode: boolean;
44
+ predictionResult: IPointCloudBoxWithIndex[];
45
+ predictionResultVisible: boolean;
41
46
  }
42
47
  interface UpdateToolInstance {
43
48
  type: typeof ANNOTATION_ACTIONS.UPDATE_TOOL_INSTANCE;
@@ -3,8 +3,10 @@
3
3
  * @file Tool utils
4
4
  * @date 2022-06-20
5
5
  */
6
+ import { cTool } from '@labelbee/lb-annotation';
6
7
  declare class ToolUtils {
7
8
  static isVideoTool(tool?: string): boolean;
8
9
  static isPointCloudTool(tool?: string): boolean;
10
+ static getPointCloudToolList(): cTool.EToolName[];
9
11
  }
10
12
  export default ToolUtils;
@@ -1 +1 @@
1
- "use strict";var lbAnnotation=require("@labelbee/lb-annotation");const{EVideoToolName,EPointCloudName}=lbAnnotation.cTool;class ToolUtils{static isVideoTool(e){return e?Object.values(EVideoToolName).includes(e):!1}static isPointCloudTool(e){return e?Object.values(EPointCloudName).includes(e):!1}}module.exports=ToolUtils;
1
+ "use strict";var lbAnnotation=require("@labelbee/lb-annotation");const{EVideoToolName,EPointCloudName,EToolName}=lbAnnotation.cTool;class ToolUtils{static isVideoTool(o){return o?Object.values(EVideoToolName).includes(o):!1}static isPointCloudTool(o){return o?Object.values(EPointCloudName).includes(o):!1}static getPointCloudToolList(){return[EToolName.Point,EToolName.Line,EToolName.PointCloudPolygon]}}module.exports=ToolUtils;
@@ -1 +1 @@
1
- "use strict";var index=require("../../components/customResizeHook/index.js"),index$4=require("../../constant/index.js"),antd=require("antd"),es=require("antd/es"),React=require("react"),index$7=require("./annotationOperation/index.js"),index$6=require("./annotationTips/index.js"),index$3=require("./sidebar/index.js"),index$8=require("./toolFooter/index.js"),index$2=require("./toolHeader/index.js"),reducer=require("../../store/annotation/reducer.js"),index$5=require("../../components/videoAnnotate/index.js"),reactRedux=require("react-redux"),ToolUtils=require("../../utils/ToolUtils.js"),index$9=require("../../components/pointCloudView/index.js"),dom=require("../../utils/dom.js"),index$1=require("../../utils/index.js"),ctx=require("../../store/ctx.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,t,a)=>t in e?__defProp(e,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[t]=a,__spreadValues=(e,t)=>{for(var a in t||(t={}))__hasOwnProp.call(t,a)&&__defNormalProp(e,a,t[a]);if(__getOwnPropSymbols)for(var a of __getOwnPropSymbols(t))__propIsEnum.call(t,a)&&__defNormalProp(e,a,t[a]);return e};const{Sider,Content}=es.Layout,layoutCls=`${index$4.prefix}-layout`,ImageAnnotate=e=>{var t;return React__default.default.createElement(React__default.default.Fragment,null,e.showTips===!0&&React__default.default.createElement(index$6,{path:e.path,tips:e.tips}),React__default.default.createElement(index$7,__spreadValues({},e)),React__default.default.createElement(index$8.default,{style:(t=e.style)==null?void 0:t.footer,mode:e.mode,footer:e==null?void 0:e.footer}))},PointCloudAnnotate=e=>{var t;return React__default.default.createElement(React__default.default.Fragment,null,React__default.default.createElement(index$9,{drawLayerSlot:e.drawLayerSlot,checkMode:e.checkMode}),React__default.default.createElement(index$8.default,{style:(t=e.style)==null?void 0:t.footer,mode:e.mode,footer:e==null?void 0:e.footer}))},AnnotatedArea=e=>{var t;const{stepList:a,step:r}=e,n=(t=reducer.getStepConfig(a,r))==null?void 0:t.tool,o=ToolUtils.isVideoTool(n),l=ToolUtils.isPointCloudTool(n);return o?React__default.default.createElement(index$5,__spreadValues({},e)):l?React__default.default.createElement(PointCloudAnnotate,__spreadValues({},e)):React__default.default.createElement(ImageAnnotate,__spreadValues({},e))},MainView=e=>{var t,a,r,n,o;const l=(a=(t=e.style)==null?void 0:t.sider)==null?void 0:a.width;return React__default.default.createElement(index.ViewportProvider,null,React__default.default.createElement(antd.Spin,{spinning:e.loading},React__default.default.createElement(es.Layout,{className:index$1.classnames([layoutCls,e.className]),style:(r=e.style)==null?void 0:r.layout},React__default.default.createElement("header",{className:`${layoutCls}__header`,style:(n=e.style)==null?void 0:n.header},React__default.default.createElement(index$2,{header:e==null?void 0:e.header,headerName:e.headerName,goBack:e.goBack,exportData:e.exportData})),React__default.default.createElement(es.Layout,{className:dom.getClassName("layout","container")},e==null?void 0:e.leftSider,React__default.default.createElement(Content,{className:`${layoutCls}__content`},React__default.default.createElement(AnnotatedArea,__spreadValues({},e))),React__default.default.createElement(Sider,{className:`${layoutCls}__side`,width:l!=null?l:240,style:(o=e.style)==null?void 0:o.sider},React__default.default.createElement(index$3.default,{sider:e==null?void 0:e.sider}))))))},mapStateToProps=({annotation:e})=>{var t,a,r;const{imgList:n,loading:o}=e,l=(t=n[e.imgIndex])!=null?t:{};return{path:(r=(a=l==null?void 0:l.path)!=null?a:l==null?void 0:l.url)!=null?r:"",loading:o}};var MainView$1=reactRedux.connect(mapStateToProps,null,null,{context:ctx.LabelBeeContext})(MainView);module.exports=MainView$1;
1
+ "use strict";var index=require("../../components/customResizeHook/index.js"),index$5=require("../../constant/index.js"),antd=require("antd"),es=require("antd/es"),React=require("react"),index$8=require("./annotationOperation/index.js"),index$7=require("./annotationTips/index.js"),index$3=require("./sidebar/index.js"),index$9=require("./toolFooter/index.js"),index$2=require("./toolHeader/index.js"),reducer=require("../../store/annotation/reducer.js"),index$6=require("../../components/videoAnnotate/index.js"),reactRedux=require("react-redux"),ToolUtils=require("../../utils/ToolUtils.js"),index$a=require("../../components/pointCloudView/index.js"),dom=require("../../utils/dom.js"),index$1=require("../../utils/index.js"),ctx=require("../../store/ctx.js"),index$4=require("../../components/predictTracking/previewResult/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,t,a)=>t in e?__defProp(e,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[t]=a,__spreadValues=(e,t)=>{for(var a in t||(t={}))__hasOwnProp.call(t,a)&&__defNormalProp(e,a,t[a]);if(__getOwnPropSymbols)for(var a of __getOwnPropSymbols(t))__propIsEnum.call(t,a)&&__defNormalProp(e,a,t[a]);return e};const{Sider,Content}=es.Layout,layoutCls=`${index$5.prefix}-layout`,ImageAnnotate=e=>{var t;return React__default.default.createElement(React__default.default.Fragment,null,e.showTips===!0&&React__default.default.createElement(index$7,{path:e.path,tips:e.tips}),React__default.default.createElement(index$8,__spreadValues({},e)),React__default.default.createElement(index$9.default,{style:(t=e.style)==null?void 0:t.footer,mode:e.mode,footer:e==null?void 0:e.footer}))},PointCloudAnnotate=e=>{var t;return React__default.default.createElement(React__default.default.Fragment,null,React__default.default.createElement(index$a,{drawLayerSlot:e.drawLayerSlot,checkMode:e.checkMode,intelligentFit:e.intelligentFit}),React__default.default.createElement(index$9.default,{style:(t=e.style)==null?void 0:t.footer,mode:e.mode,footer:e==null?void 0:e.footer}))},AnnotatedArea=e=>{var t;const{stepList:a,step:n}=e,r=(t=reducer.getStepConfig(a,n))==null?void 0:t.tool,i=ToolUtils.isVideoTool(r),l=ToolUtils.isPointCloudTool(r);return i?React__default.default.createElement(index$6,__spreadValues({},e)):l?React__default.default.createElement(PointCloudAnnotate,__spreadValues({},e)):React__default.default.createElement(ImageAnnotate,__spreadValues({},e))},MainView=e=>{var t,a,n,r,i;const l=(a=(t=e.style)==null?void 0:t.sider)==null?void 0:a.width;return React__default.default.createElement(index.ViewportProvider,null,React__default.default.createElement(antd.Spin,{spinning:e.loading},React__default.default.createElement(es.Layout,{className:index$1.classnames([layoutCls,e.className]),style:(n=e.style)==null?void 0:n.layout},React__default.default.createElement("header",{className:`${layoutCls}__header`,style:(r=e.style)==null?void 0:r.header},React__default.default.createElement(index$2,{header:e==null?void 0:e.header,headerName:e.headerName,goBack:e.goBack,exportData:e.exportData})),React__default.default.createElement(es.Layout,{className:dom.getClassName("layout","container")},e==null?void 0:e.leftSider,React__default.default.createElement(Content,{className:`${layoutCls}__content`},React__default.default.createElement(AnnotatedArea,__spreadValues({},e))),React__default.default.createElement(Sider,{className:`${layoutCls}__side`,width:l!=null?l:240,style:(i=e.style)==null?void 0:i.sider},React__default.default.createElement(index$3.default,{sider:e==null?void 0:e.sider})),React__default.default.createElement(index$4,null)))))},mapStateToProps=({annotation:e})=>{var t,a,n;const{imgList:r,loading:i}=e,l=(t=r[e.imgIndex])!=null?t:{};return{path:(n=(a=l==null?void 0:l.path)!=null?a:l==null?void 0:l.url)!=null?n:"",loading:i}};var MainView$1=reactRedux.connect(mapStateToProps,null,null,{context:ctx.LabelBeeContext})(MainView);module.exports=MainView$1;
@@ -1 +1 @@
1
- "use strict";var ToolType=require("../../../../data/enums/ToolType.js"),TextUtils=require("../../../../utils/TextUtils.js"),es=require("antd/es"),React=require("react"),icon_clearSmall_a=require("../../../../assets/annotation/common/icon_clearSmall_a.svg.js"),icon_clearSmall=require("../../../../assets/annotation/common/icon_clearSmall.svg.js"),index=require("../../../../utils/index.js"),reactI18next=require("react-i18next");function _interopDefaultLegacy(a){return a&&typeof a=="object"&&"default"in a?a:{default:a}}var React__default=_interopDefaultLegacy(React);const TextAreaFormat=a=>{const{t:n}=reactI18next.useTranslation(),{onChange:r,textValue:t,checkString:T,textCheckType:f}=a,[c,s]=React.useState(0),[l,o]=React.useState(!1),[u,i]=React.useState(!1),[d,m]=React.useState(!1),g=React__default.default.createElement("a",null,React__default.default.createElement(es.Tooltip,{placement:"bottom",title:n("EmptyTextInput")},React__default.default.createElement("img",{onMouseEnter:()=>m(!0),onMouseLeave:()=>m(!1),style:{marginLeft:6},src:d?icon_clearSmall_a:icon_clearSmall,onClick:e=>{e.stopPropagation(),r("")}}))),p=e=>{e.stopPropagation()};React.useEffect(()=>{t&&s(t.length)},[]),React.useEffect(()=>{var e;if(t===void 0||t==="")o(!1);else try{t&&o(!new RegExp(T).test(t))}catch(x){o(!0),es.message.destroy(),es.message.error(n("RegularExpIncorrectly"))}s((e=t==null?void 0:t.length)!=null?e:0)},[t]);const E=e=>{if(l)return r(""),es.message.error(TextUtils.TextUtils.getErrorNotice(f)),!0;r(e.target.value,!0)};return React__default.default.createElement("div",{className:"textInputContainer"},React__default.default.createElement("div",{className:"label"},n("TextInput"),g),React__default.default.createElement("div",{className:index.classnames({textareaContainer:!0,focus:u})},React__default.default.createElement("div",{className:index.classnames({toolTextAreaBox:!0,toolTextAreaBoxFocus:u})},React__default.default.createElement(es.Input.TextArea,{style:{resize:"none",height:120,wordBreak:"break-all"},maxLength:ToolType.TEXT_ATTRIBUTE_MAX_LENGTH,onKeyDownCapture:e=>{e.stopPropagation()},onKeyUpCapture:e=>{e.stopPropagation()},onChange:e=>{r(e.target.value),s(e.target.value.length)},onFocus:e=>i(!0),onBlur:e=>{E(e),i(!1)},value:t,onKeyDown:p,className:l?"warning":""}),React__default.default.createElement("div",{className:"textAreaFooter"},React__default.default.createElement("span",{className:"wordCount"},React__default.default.createElement("span",{className:c>ToolType.TEXT_ATTRIBUTE_MAX_LENGTH||l?"warning":""},c),"/",React__default.default.createElement("span",null,ToolType.TEXT_ATTRIBUTE_MAX_LENGTH))))))};module.exports=TextAreaFormat;
1
+ "use strict";var ToolType=require("../../../../data/enums/ToolType.js"),TextUtils=require("../../../../utils/TextUtils.js"),es=require("antd/es"),React=require("react"),icon_clearSmall_a=require("../../../../assets/annotation/common/icon_clearSmall_a.svg.js"),icon_clearSmall=require("../../../../assets/annotation/common/icon_clearSmall.svg.js"),index=require("../../../../utils/index.js"),reactI18next=require("react-i18next");function _interopDefaultLegacy(a){return a&&typeof a=="object"&&"default"in a?a:{default:a}}var React__default=_interopDefaultLegacy(React);const TextAreaFormat=a=>{const{t:n}=reactI18next.useTranslation(),{onChange:r,textValue:t,checkString:c,textCheckType:f}=a,[u,s]=React.useState(0),[l,o]=React.useState(!1),[i,m]=React.useState(!1),[g,T]=React.useState(!1),d=React__default.default.createElement("a",null,React__default.default.createElement(es.Tooltip,{placement:"bottom",title:n("EmptyTextInput")},React__default.default.createElement("img",{onMouseEnter:()=>T(!0),onMouseLeave:()=>T(!1),style:{marginLeft:6},src:g?icon_clearSmall_a:icon_clearSmall,onClick:e=>{e.stopPropagation(),r("")}}))),p=e=>{e.stopPropagation()};React.useEffect(()=>{t&&s(t.length)},[]),React.useEffect(()=>{var e;if(t===void 0||t==="")o(!1);else try{t&&o(!new RegExp(c).test(t))}catch(x){o(!0),es.message.destroy(),es.message.error(n("RegularExpIncorrectly"))}s((e=t==null?void 0:t.length)!=null?e:0)},[t]);const E=e=>{if(l||!new RegExp(c).test(e.target.value))return r(""),es.message.error(TextUtils.TextUtils.getErrorNotice(f)),!0;r(e.target.value,!0)};return React__default.default.createElement("div",{className:"textInputContainer"},React__default.default.createElement("div",{className:"label"},n("TextInput"),d),React__default.default.createElement("div",{className:index.classnames({textareaContainer:!0,focus:i})},React__default.default.createElement("div",{className:index.classnames({toolTextAreaBox:!0,toolTextAreaBoxFocus:i})},React__default.default.createElement(es.Input.TextArea,{style:{resize:"none",height:120,wordBreak:"break-all"},maxLength:ToolType.TEXT_ATTRIBUTE_MAX_LENGTH,onKeyDownCapture:e=>{e.stopPropagation()},onKeyUpCapture:e=>{e.stopPropagation()},onChange:e=>{r(e.target.value),s(e.target.value.length)},onFocus:e=>m(!0),onBlur:e=>{E(e),m(!1)},value:t,onKeyDown:p,className:l?"warning":""}),React__default.default.createElement("div",{className:"textAreaFooter"},React__default.default.createElement("span",{className:"wordCount"},React__default.default.createElement("span",{className:u>ToolType.TEXT_ATTRIBUTE_MAX_LENGTH||l?"warning":""},u),"/",React__default.default.createElement("span",null,ToolType.TEXT_ATTRIBUTE_MAX_LENGTH))))))};module.exports=TextAreaFormat;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var ToolType=require("../../../data/enums/ToolType.js"),React=require("react"),index=require("./index.js"),icon_line=require("../../../assets/annotation/lineTool/icon_line.svg.js"),icon_line_a=require("../../../assets/annotation/lineTool/icon_line_a.svg.js"),icon_point=require("../../../assets/annotation/pointTool/icon_point.svg.js"),icon_point_a=require("../../../assets/annotation/pointTool/icon_point_a.svg.js"),icon_polygon_a=require("../../../assets/annotation/polygonTool/icon_polygon_a.svg.js"),icon_polygon=require("../../../assets/annotation/polygonTool/icon_polygon.svg.js"),icon_rect=require("../../../assets/annotation/rectTool/icon_rect.svg.js"),icon_rect_a=require("../../../assets/annotation/rectTool/icon_rect_a.svg.js"),lbAnnotation=require("@labelbee/lb-annotation"),classNames=require("classnames"),reactI18next=require("react-i18next");function _interopDefaultLegacy(o){return o&&typeof o=="object"&&"default"in o?o:{default:o}}var React__default=_interopDefaultLegacy(React),classNames__default=_interopDefaultLegacy(classNames);const{EPointCloudName,TOOL_NAME,TOOL_NAME_EN}=lbAnnotation.cTool,toolList=[{toolName:ToolType.EToolName.Rect,commonSvg:icon_rect,selectedSvg:icon_rect_a},{toolName:ToolType.EToolName.Polygon,commonSvg:icon_polygon,selectedSvg:icon_polygon_a},{toolName:ToolType.EToolName.Line,commonSvg:icon_line,selectedSvg:icon_line_a},{toolName:ToolType.EToolName.Point,commonSvg:icon_point,selectedSvg:icon_point_a}],getToolNameVersion=o=>o==="en"?TOOL_NAME_EN:TOOL_NAME,ToolIcons=({toolName:o,selectedToolName:l,onChange:n})=>{const{i18n:s}=reactI18next.useTranslation(),a=toolList==null?void 0:toolList.filter(e=>o===EPointCloudName.PointCloud?[ToolType.EToolName.Polygon,ToolType.EToolName.Rect].includes(e==null?void 0:e.toolName):(e==null?void 0:e.toolName)===o),r=a.length>1;return React__default.default.createElement("div",{className:`${index.sidebarCls}__level`},a.map(e=>{const t=r&&l===e.toolName;return React__default.default.createElement("span",{className:`${index.sidebarCls}__toolOption`,key:e.toolName,onClick:()=>n==null?void 0:n(e.toolName)},React__default.default.createElement("img",{className:`${index.sidebarCls}__singleTool`,src:t?e==null?void 0:e.selectedSvg:e==null?void 0:e.commonSvg}),React__default.default.createElement("span",{className:classNames__default.default({[`${index.sidebarCls}__toolOption__selected`]:t})},getToolNameVersion(s.language)[e.toolName]))}))};exports.ToolIcons=ToolIcons;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var ToolType=require("../../../data/enums/ToolType.js"),React=require("react"),index=require("./index.js"),icon_line=require("../../../assets/annotation/lineTool/icon_line.svg.js"),icon_line_a=require("../../../assets/annotation/lineTool/icon_line_a.svg.js"),icon_point=require("../../../assets/annotation/pointTool/icon_point.svg.js"),icon_point_a=require("../../../assets/annotation/pointTool/icon_point_a.svg.js"),icon_polygon_a=require("../../../assets/annotation/polygonTool/icon_polygon_a.svg.js"),icon_polygon=require("../../../assets/annotation/polygonTool/icon_polygon.svg.js"),icon_rect=require("../../../assets/annotation/rectTool/icon_rect.svg.js"),icon_rect_a=require("../../../assets/annotation/rectTool/icon_rect_a.svg.js"),lbAnnotation=require("@labelbee/lb-annotation"),classNames=require("classnames"),reactI18next=require("react-i18next");function _interopDefaultLegacy(o){return o&&typeof o=="object"&&"default"in o?o:{default:o}}var React__default=_interopDefaultLegacy(React),classNames__default=_interopDefaultLegacy(classNames);const{EPointCloudName,TOOL_NAME,TOOL_NAME_EN}=lbAnnotation.cTool,toolList=[{toolName:ToolType.EToolName.Rect,commonSvg:icon_rect,selectedSvg:icon_rect_a},{toolName:ToolType.EToolName.Polygon,commonSvg:icon_polygon,selectedSvg:icon_polygon_a},{toolName:ToolType.EToolName.Line,commonSvg:icon_line,selectedSvg:icon_line_a},{toolName:ToolType.EToolName.Point,commonSvg:icon_point,selectedSvg:icon_point_a}],getToolNameVersion=o=>o==="en"?TOOL_NAME_EN:TOOL_NAME,ToolIcons=({toolName:o,selectedToolName:l,onChange:n})=>{const{i18n:s}=reactI18next.useTranslation(),a=toolList==null?void 0:toolList.filter(e=>o===EPointCloudName.PointCloud?[ToolType.EToolName.Polygon,ToolType.EToolName.Rect,ToolType.EToolName.Point,ToolType.EToolName.Line].includes(e==null?void 0:e.toolName):(e==null?void 0:e.toolName)===o),i=a.length>1;return React__default.default.createElement("div",{className:`${index.sidebarCls}__level`},a.map(e=>{const t=i&&l===e.toolName;return React__default.default.createElement("span",{className:`${index.sidebarCls}__toolOption`,key:e.toolName,onClick:()=>n==null?void 0:n(e.toolName)},React__default.default.createElement("img",{className:`${index.sidebarCls}__singleTool`,src:t?e==null?void 0:e.selectedSvg:e==null?void 0:e.commonSvg}),React__default.default.createElement("span",{className:classNames__default.default({[`${index.sidebarCls}__toolOption__selected`]:t})},getToolNameVersion(s.language)[e.toolName]))}))};exports.ToolIcons=ToolIcons;
@@ -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"),index$8=require("./AnnotationText/index.js"),index$2=require("./ClearIcon/index.js"),index$6=require("./GeneralOperation/index.js"),index$3=require("./ImgAttributeInfo/index.js"),index$7=require("./SwitchAttributeList/index.js"),index$1=require("./TagSidebar/index.js"),index$4=require("./TextToolSidebar/index.js"),index$5=require("./PointCloudToolSidebar/index.js"),index$a=require("./ToolStyle/index.js"),lbAnnotation=require("@labelbee/lb-annotation"),index$9=require("./ScribbleSidebar/index.js"),ToolIcons=require("./ToolIcons.js"),ctx=require("../../../store/ctx.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=ctx.useSelector(a=>StepUtils.getCurrentStepInfo(a.annotation.step,a.annotation.stepList)),t=o==null?void 0:o.tool,{t:i}=reactI18next.useTranslation();if(!t)return null;const E=a=>{const m=React__default.default.createElement(index$a,null);return React__default.default.createElement(Panel,{header:i("Style"),className:"panel",key:a},m)},u=React__default.default.createElement(ToolIcons.ToolIcons,{toolName:t,onChange:()=>{}}),n=React__default.default.createElement(index$7,null),d=React__default.default.createElement(index$8,null),c=React__default.default.createElement(es.Collapse,{defaultActiveKey:["1","imgAttribute"],bordered:!1,expandIconPosition:"right",className:`${sidebarCls}__content`,expandIcon:index$1.expandIconFuc},E("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,i("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),x=React__default.default.createElement(index$1.default,null),v=React__default.default.createElement(index$4.default,null),f=React__default.default.createElement(index$9,{onChange:(a,m)=>{}}),r=React__default.default.createElement("div",{className:`${sidebarCls}__horizontal`}),p=React__default.default.createElement(index$5,null),T=React__default.default.createElement(index$6.PointCloudOperation,null);return e?typeof e=="function"?React__default.default.createElement("div",{className:`${sidebarCls}`},e({toolIcon:u,attributeList:n,annotationText:d,toolStyle:c,imageAttributeInfo:s,operation:l,tagToolSideBar:x,textToolSideBar:v,horizontal:r,pointCloudToolSidebar:p,pointCloudOperation:T,scribbleSidebar:f})):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}`},u,r,n,d,r,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)):t===ToolType.EToolName.ScribbleTool?React__default.default.createElement("div",{className:`${sidebarCls}`},React__default.default.createElement("div",{className:`${sidebarCls}__content`},f,n),l):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"),index$8=require("./AnnotationText/index.js"),index$2=require("./ClearIcon/index.js"),index$6=require("./GeneralOperation/index.js"),index$3=require("./ImgAttributeInfo/index.js"),index$7=require("./SwitchAttributeList/index.js"),index$1=require("./TagSidebar/index.js"),index$4=require("./TextToolSidebar/index.js"),index$5=require("./PointCloudToolSidebar/index.js"),index$a=require("./ToolStyle/index.js"),lbAnnotation=require("@labelbee/lb-annotation"),index$9=require("./ScribbleSidebar/index.js"),ToolIcons=require("./ToolIcons.js"),ctx=require("../../../store/ctx.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=ctx.useSelector(a=>StepUtils.getCurrentStepInfo(a.annotation.step,a.annotation.stepList)),t=r==null?void 0:r.tool,{t:i}=reactI18next.useTranslation();if(!t)return null;const E=a=>{const f=React__default.default.createElement(index$a,null);return React__default.default.createElement(Panel,{header:i("Style"),className:"panel",key:a},f)},u=React__default.default.createElement(ToolIcons.ToolIcons,{toolName:t,onChange:()=>{}}),n=React__default.default.createElement(index$7,null),d=React__default.default.createElement(index$8,null),c=React__default.default.createElement(es.Collapse,{defaultActiveKey:["1","imgAttribute"],bordered:!1,expandIconPosition:"right",className:`${sidebarCls}__content`,expandIcon:index$1.expandIconFuc},E("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,i("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),x=React__default.default.createElement(index$1.default,null),v=React__default.default.createElement(index$4.default,null),m=React__default.default.createElement(index$9,{onChange:(a,f)=>{}}),o=React__default.default.createElement("div",{className:`${sidebarCls}__horizontal`}),p=React__default.default.createElement(index$5,null),T=React__default.default.createElement(index$6.PointCloudOperation,null);return e?typeof e=="function"?React__default.default.createElement("div",{className:`${sidebarCls}`},e({toolIcon:u,attributeList:n,annotationText:d,toolStyle:c,imageAttributeInfo:s,operation:l,tagToolSideBar:x,textToolSideBar:v,horizontal:o,pointCloudToolSidebar:p,pointCloudOperation:T,scribbleSidebar:m})):e:[ToolType.EToolName.Rect,ToolType.EToolName.Point,ToolType.EToolName.Line,ToolType.EToolName.Rect,ToolType.EToolName.Polygon,ToolType.EToolName.Cuboid].includes(t)?React__default.default.createElement("div",{className:`${sidebarCls}`},u,o,n,d,o,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)):t===ToolType.EToolName.ScribbleTool?React__default.default.createElement("div",{className:`${sidebarCls}`},React__default.default.createElement("div",{className:`${sidebarCls}__content`},m,n),l):null};exports.default=Sidebar,exports.sidebarCls=sidebarCls;
@@ -1 +1 @@
1
- "use strict";var index$1=require("../../../constant/index.js"),useSize=require("../../../hooks/useSize.js"),actionCreators=require("../../../store/annotation/actionCreators.js"),icons=require("@ant-design/icons"),lbUtils=require("@labelbee/lb-utils"),es=require("antd/es"),classNames=require("classnames"),_=require("lodash"),React=require("react"),reactI18next=require("react-i18next"),reactRedux=require("react-redux"),ctx=require("../../../store/ctx.js"),index$4=require("../../../index.js"),index$2=require("./ExportData/index.js"),index$3=require("./headerOption/index.js"),index=require("./StepSwitch/index.js");function _interopDefaultLegacy(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var classNames__default=_interopDefaultLegacy(classNames),React__default=_interopDefaultLegacy(React);const NextButton=({disabled:e,imgList:n})=>{const{t}=reactI18next.useTranslation(),r=()=>{const{dispatch:a,getState:i}=index$4.store;n[0]?a(actionCreators.ToNextStep(0)):actionCreators.loadImgList(a,i,0).then(o=>{o&&a(actionCreators.ToNextStep(0))})};return React__default.default.createElement(es.Button,{type:"primary",style:{marginLeft:10},onClick:r,disabled:e},t("NextStep"))},NextStep=({step:e,stepProgress:n,stepList:t,imgList:r})=>{var a;const{t:i}=reactI18next.useTranslation(),o=(a=_.last(t))==null?void 0:a.step;if(t.length<2||e===o)return null;const l=n<1;return l?React__default.default.createElement(es.Tooltip,{title:i("StepNotFinishedNotify")},React__default.default.createElement("span",null,React__default.default.createElement(NextButton,{disabled:l,imgList:r}))):React__default.default.createElement(NextButton,{disabled:l,imgList:r})},ToolHeader=({goBack:e,exportData:n,header:t,headerName:r,imgList:a,stepProgress:i,stepInfo:o,stepList:l,step:g,annotationEngine:u})=>{var d;const $=ctx.useDispatch(),[,q]=React.useReducer(s=>s+1,0),c=React.useRef(null),f=useSize(c),S=React__default.default.createElement(index$2,{exportData:n}),L=()=>{$(actionCreators.ToSubmitFileData(index$1.ESubmitType.Quit)),e&&e(a)},p=s=>{lbUtils.i18n.changeLanguage(s),u==null||u.setLang(s),q()},m=lbUtils.i18n.language,b=(d=f==null?void 0:f.width)!=null?d:window.innerWidth,x=React__default.default.createElement(icons.LeftOutlined,{className:`${index$1.prefix}-header__icon`,onClick:L}),v=r?React__default.default.createElement("span",{className:`${index$1.prefix}-header__name`},r):"",N=l.length>1&&React__default.default.createElement(React__default.default.Fragment,null,React__default.default.createElement(index,{stepProgress:i}),React__default.default.createElement(NextStep,{step:g,stepProgress:i,stepList:l,imgList:a})),E=React__default.default.createElement(index$3,{stepInfo:o}),h=React__default.default.createElement("div",{className:`${index$1.prefix}-header__lang`},React__default.default.createElement("span",{className:`${index$1.prefix}-langCN ${m==="cn"?"active":""}`,onClick:()=>p("cn")},"\u4E2D\u6587")," / ",React__default.default.createElement("span",{className:`${index$1.prefix}-langEN ${m==="en"?"active":""}`,onClick:()=>p("en")},"En"));return t?typeof t=="function"?React__default.default.createElement("div",{className:classNames__default.default(`${index$1.prefix}-header`),ref:c},React__default.default.createElement("div",{className:`${index$1.prefix}-header__title`},t({backNode:x,headerNameNode:v,stepListNode:N,headerOptionNode:E,langNode:h}))):t:React__default.default.createElement("div",{className:classNames__default.default(`${index$1.prefix}-header`),ref:c},React__default.default.createElement("div",{className:`${index$1.prefix}-header__title`},x,v,N,S,React__default.default.createElement("div",{id:"operationNode",className:`${index$1.prefix}-header__operationNode`,style:{left:b/2-174/2}},E),React__default.default.createElement("div",{className:`${index$1.prefix}-header__titlePlacement`}),h))},mapStateToProps=e=>{var n;return{imgList:e.annotation.imgList,annotationEngine:e.annotation.annotationEngine,stepProgress:e.annotation.stepProgress,toolName:(n=e.annotation.stepList[e.annotation.step-1])==null?void 0:n.tool,stepList:e.annotation.stepList,stepInfo:e.annotation.stepList[e.annotation.step-1],step:e.annotation.step}};var ToolHeader$1=reactRedux.connect(mapStateToProps,null,null,{context:ctx.LabelBeeContext})(ToolHeader);module.exports=ToolHeader$1;
1
+ "use strict";var index$2=require("../../../constant/index.js"),useSize=require("../../../hooks/useSize.js"),actionCreators=require("../../../store/annotation/actionCreators.js"),icons=require("@ant-design/icons"),lbUtils=require("@labelbee/lb-utils"),es=require("antd/es"),classNames=require("classnames"),_=require("lodash"),React=require("react"),reactI18next=require("react-i18next"),reactRedux=require("react-redux"),ctx=require("../../../store/ctx.js"),index$5=require("../../../index.js"),index$3=require("./ExportData/index.js"),index$4=require("./headerOption/index.js"),index=require("./StepSwitch/index.js"),index$1=require("../../../components/predictTracking/predictTrackingIcon/index.js");function _interopDefaultLegacy(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var classNames__default=_interopDefaultLegacy(classNames),React__default=_interopDefaultLegacy(React);const NextButton=({disabled:e,imgList:n})=>{const{t}=reactI18next.useTranslation(),r=()=>{const{dispatch:a,getState:i}=index$5.store;n[0]?a(actionCreators.ToNextStep(0)):actionCreators.loadImgList(a,i,0).then(o=>{o&&a(actionCreators.ToNextStep(0))})};return React__default.default.createElement(es.Button,{type:"primary",style:{marginLeft:10},onClick:r,disabled:e},t("NextStep"))},NextStep=({step:e,stepProgress:n,stepList:t,imgList:r})=>{var a;const{t:i}=reactI18next.useTranslation(),o=(a=_.last(t))==null?void 0:a.step;if(t.length<2||e===o)return null;const l=n<1;return l?React__default.default.createElement(es.Tooltip,{title:i("StepNotFinishedNotify")},React__default.default.createElement("span",null,React__default.default.createElement(NextButton,{disabled:l,imgList:r}))):React__default.default.createElement(NextButton,{disabled:l,imgList:r})},ToolHeader=({goBack:e,exportData:n,header:t,headerName:r,imgList:a,stepProgress:i,stepInfo:o,stepList:l,step:h,annotationEngine:u})=>{var d;const $=ctx.useDispatch(),[,q]=React.useReducer(s=>s+1,0),c=React.useRef(null),f=useSize(c),S=React__default.default.createElement(index$3,{exportData:n}),L=()=>{$(actionCreators.ToSubmitFileData(index$2.ESubmitType.Quit)),e&&e(a)},p=s=>{lbUtils.i18n.changeLanguage(s),u==null||u.setLang(s),q()},m=lbUtils.i18n.language,T=(d=f==null?void 0:f.width)!=null?d:window.innerWidth,x=React__default.default.createElement(icons.LeftOutlined,{className:`${index$2.prefix}-header__icon`,onClick:L}),v=r?React__default.default.createElement("span",{className:`${index$2.prefix}-header__name`},r):"",N=l.length>1&&React__default.default.createElement(React__default.default.Fragment,null,React__default.default.createElement(index,{stepProgress:i}),React__default.default.createElement(NextStep,{step:h,stepProgress:i,stepList:l,imgList:a})),E=React__default.default.createElement(index$4,{stepInfo:o}),b=React__default.default.createElement("div",{className:`${index$2.prefix}-header__lang`},React__default.default.createElement("span",{className:`${index$2.prefix}-langCN ${m==="cn"?"active":""}`,onClick:()=>p("cn")},"\u4E2D\u6587")," / ",React__default.default.createElement("span",{className:`${index$2.prefix}-langEN ${m==="en"?"active":""}`,onClick:()=>p("en")},"En")),g=React__default.default.createElement(React__default.default.Fragment,null,React__default.default.createElement(index$1,null),b);return t?typeof t=="function"?React__default.default.createElement("div",{className:classNames__default.default(`${index$2.prefix}-header`),ref:c},React__default.default.createElement("div",{className:`${index$2.prefix}-header__title`},t({backNode:x,headerNameNode:v,stepListNode:N,headerOptionNode:E,langNode:g}))):t:React__default.default.createElement("div",{className:classNames__default.default(`${index$2.prefix}-header`),ref:c},React__default.default.createElement("div",{className:`${index$2.prefix}-header__title`},x,v,N,S,React__default.default.createElement("div",{id:"operationNode",className:`${index$2.prefix}-header__operationNode`,style:{left:T/2-174/2}},E),React__default.default.createElement("div",{className:`${index$2.prefix}-header__titlePlacement`}),g))},mapStateToProps=e=>{var n;return{imgList:e.annotation.imgList,annotationEngine:e.annotation.annotationEngine,stepProgress:e.annotation.stepProgress,toolName:(n=e.annotation.stepList[e.annotation.step-1])==null?void 0:n.tool,stepList:e.annotation.stepList,stepInfo:e.annotation.stepList[e.annotation.step-1],step:e.annotation.step}};var ToolHeader$1=reactRedux.connect(mapStateToProps,null,null,{context:ctx.LabelBeeContext})(ToolHeader);module.exports=ToolHeader$1;
package/es/App.js CHANGED
@@ -1 +1 @@
1
- import x from"./views/MainView/index.js";import{i18n as o}from"@labelbee/lb-utils";import I,{useState as y,useEffect as S}from"react";import{connect as E}from"react-redux";import{store as n}from"./index.js";import{LabelBeeContext as N}from"./store/ctx.js";import{ANNOTATION_ACTIONS as F}from"./store/Actions.js";import{InitTaskData as D,InitAnnotationState as M,UpdateInjectFunc as U,loadImgList as z}from"./store/annotation/actionCreators.js";import{LoadFileAndFileData as P}from"./store/annotation/reducer.js";import{ConfigProvider as R}from"antd/es";import V from"antd/es/locale/zh_CN";import B from"antd/es/locale/en_US";var k=Object.defineProperty,C=Object.getOwnPropertySymbols,G=Object.prototype.hasOwnProperty,$=Object.prototype.propertyIsEnumerable,O=(e,t,a)=>t in e?k(e,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[t]=a,q=(e,t)=>{for(var a in t||(t={}))G.call(t,a)&&O(e,a,t[a]);if(C)for(var a of C(t))$.call(t,a)&&O(e,a,t[a]);return e};const H=e=>{const[t,a]=y(0),{imgList:s,step:j=1,stepList:l,onSubmit:c,onSave:p,onPageChange:m,onStepChange:f,initialIndex:d=0,toolInstance:v,setToolInstance:L,getFileData:g,pageSize:u=10,loadFileList:r,defaultLang:h="cn",skipBeforePageTurning:A,beforeRotate:_,checkMode:T=!1}=e;S(()=>{n.dispatch(D({onSubmit:c,stepList:l,step:j,getFileData:g,pageSize:u,loadFileList:r,onSave:p,onPageChange:m,onStepChange:f,skipBeforePageTurning:A,beforeRotate:_,checkMode:T})),b(),o.changeLanguage(h);const i=()=>{a(w=>w+1)};return o.on("languageChanged",i),()=>{o.off("languageChanged",i),M(n.dispatch)}},[]),S(()=>{n.dispatch(U({onSubmit:c,stepList:l,getFileData:g,pageSize:u,loadFileList:r,onSave:p,onPageChange:m,onStepChange:f,beforeRotate:_})),o.changeLanguage(h)},[c,l,g,u,r,p,m,f,h,_]),S(()=>{L==null||L(v)},[v]);const b=()=>{r?z(n.dispatch,n.getState,d,!0).then(i=>{i&&n.dispatch(P(d))}):s&&s.length>0&&(n.dispatch({type:F.UPDATE_IMG_LIST,payload:{imgList:s}}),n.dispatch(P(d)))};return I.createElement("div",null,I.createElement(R,{locale:o.language==="en"?B:V},I.createElement(x,q({},e))))},J=e=>({toolInstance:e.annotation.toolInstance});var K=E(J,null,null,{context:N})(H);export{K as default};
1
+ import x from"./views/MainView/index.js";import{i18n as o}from"@labelbee/lb-utils";import P,{useState as E,useEffect as v}from"react";import{connect as F}from"react-redux";import{store as n}from"./index.js";import{LabelBeeContext as N}from"./store/ctx.js";import{ANNOTATION_ACTIONS as D}from"./store/Actions.js";import{InitTaskData as M,InitAnnotationState as U,UpdateInjectFunc as z,loadImgList as R}from"./store/annotation/actionCreators.js";import{LoadFileAndFileData as S}from"./store/annotation/reducer.js";import{ConfigProvider as V}from"antd/es";import B from"antd/es/locale/zh_CN";import k from"antd/es/locale/en_US";var G=Object.defineProperty,$=Object.defineProperties,q=Object.getOwnPropertyDescriptors,L=Object.getOwnPropertySymbols,H=Object.prototype.hasOwnProperty,J=Object.prototype.propertyIsEnumerable,j=(e,t,a)=>t in e?G(e,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[t]=a,K=(e,t)=>{for(var a in t||(t={}))H.call(t,a)&&j(e,a,t[a]);if(L)for(var a of L(t))J.call(t,a)&&j(e,a,t[a]);return e},Q=(e,t)=>$(e,q(t));const W=e=>{const[t,a]=E(0),{imgList:s,step:C=1,stepList:l,onSubmit:c,onSave:p,onPageChange:d,onStepChange:f,initialIndex:m=0,toolInstance:I,setToolInstance:O,getFileData:g,pageSize:u=10,loadFileList:r,defaultLang:_="cn",skipBeforePageTurning:b,beforeRotate:h,checkMode:w=!1,intelligentFit:y=!0}=e;v(()=>{n.dispatch(M({onSubmit:c,stepList:l,step:C,getFileData:g,pageSize:u,loadFileList:r,onSave:p,onPageChange:d,onStepChange:f,skipBeforePageTurning:b,beforeRotate:h,checkMode:w})),A(),o.changeLanguage(_);const i=()=>{a(T=>T+1)};return o.on("languageChanged",i),()=>{o.off("languageChanged",i),U(n.dispatch)}},[]),v(()=>{n.dispatch(z({onSubmit:c,stepList:l,getFileData:g,pageSize:u,loadFileList:r,onSave:p,onPageChange:d,onStepChange:f,beforeRotate:h})),o.changeLanguage(_)},[c,l,g,u,r,p,d,f,_,h]),v(()=>{O==null||O(I)},[I]);const A=()=>{r?R(n.dispatch,n.getState,m,!0).then(i=>{i&&n.dispatch(S(m))}):s&&s.length>0&&(n.dispatch({type:D.UPDATE_IMG_LIST,payload:{imgList:s}}),n.dispatch(S(m)))};return P.createElement("div",null,P.createElement(V,{locale:o.language==="en"?k:B},P.createElement(x,Q(K({},e),{intelligentFit:y}))))},X=e=>({toolInstance:e.annotation.toolInstance});var Y=F(X,null,null,{context:N})(W);export{Y 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, useState } from 'react';\nimport { connect } from 'react-redux';\nimport { store } from '.';\nimport { LabelBeeContext } from '@/store/ctx';\nimport { AppState } from './store';\nimport { ANNOTATION_ACTIONS } from './store/Actions';\nimport {\n InitAnnotationState,\n InitTaskData,\n loadImgList,\n UpdateInjectFunc,\n} 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';\nimport { ConfigProvider } from 'antd/es';\nimport zhCN from 'antd/es/locale/zh_CN';\nimport enUS from 'antd/es/locale/en_US';\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 tips?: string; // Tips 具体内容\n defaultLang: 'en' | 'cn'; // 国际化设置\n leftSider?: () => React.ReactNode | React.ReactNode;\n\n // data Correction\n skipBeforePageTurning?: (pageTurning: Function) => void;\n beforeRotate?: () => boolean;\n\n drawLayerSlot?: (props: {\n zoom: number;\n currentPos: { x: number; y: number };\n }) => 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 checkMode?: boolean;\n}\n\nconst App: React.FC<AppProps> = (props) => {\n const [_, forceRender] = useState(0);\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 beforeRotate,\n checkMode = false\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 beforeRotate,\n checkMode\n }),\n );\n\n initImgList();\n // 初始化国际化语言\n i18n.changeLanguage(defaultLang);\n\n const i18nLanguageChangedFunc = () => {\n forceRender((v) => v + 1);\n };\n\n i18n.on('languageChanged', i18nLanguageChangedFunc);\n return () => {\n i18n.off('languageChanged', i18nLanguageChangedFunc);\n\n // Init all annotation state after unmounting\n InitAnnotationState(store.dispatch);\n };\n }, []);\n\n useEffect(() => {\n store.dispatch(\n UpdateInjectFunc({\n onSubmit,\n stepList,\n getFileData,\n pageSize,\n loadFileList,\n onSave,\n onPageChange,\n onStepChange,\n beforeRotate,\n }),\n );\n\n i18n.changeLanguage(defaultLang);\n }, [\n onSubmit,\n stepList,\n getFileData,\n pageSize,\n loadFileList,\n onSave,\n onPageChange,\n onStepChange,\n defaultLang,\n beforeRotate,\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 <ConfigProvider locale={i18n.language === 'en' ? enUS : zhCN}>\n <MainView {...props} />\n </ConfigProvider>\n </div>\n );\n};\n\nconst mapStateToProps = (state: AppState) => ({\n toolInstance: state.annotation.toolInstance,\n});\n\nexport default connect(mapStateToProps, null, null, { context: LabelBeeContext })(App);\n"],"names":[],"mappings":"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"}
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, useState } from 'react';\nimport { connect } from 'react-redux';\nimport { store } from '.';\nimport { LabelBeeContext } from '@/store/ctx';\nimport { AppState } from './store';\nimport { ANNOTATION_ACTIONS } from './store/Actions';\nimport {\n InitAnnotationState,\n InitTaskData,\n loadImgList,\n UpdateInjectFunc,\n} 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';\nimport { ConfigProvider } from 'antd/es';\nimport zhCN from 'antd/es/locale/zh_CN';\nimport enUS from 'antd/es/locale/en_US';\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 tips?: string; // Tips 具体内容\n defaultLang: 'en' | 'cn'; // 国际化设置\n leftSider?: () => React.ReactNode | React.ReactNode;\n\n // data Correction\n skipBeforePageTurning?: (pageTurning: Function) => void;\n beforeRotate?: () => boolean;\n\n drawLayerSlot?: (props: {\n zoom: number;\n currentPos: { x: number; y: number };\n }) => 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 checkMode?: boolean;\n intelligentFit?: boolean;\n}\n\nconst App: React.FC<AppProps> = (props) => {\n const [_, forceRender] = useState(0);\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 beforeRotate,\n checkMode = false,\n intelligentFit = true,\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 beforeRotate,\n checkMode,\n }),\n );\n\n initImgList();\n // 初始化国际化语言\n i18n.changeLanguage(defaultLang);\n\n const i18nLanguageChangedFunc = () => {\n forceRender((v) => v + 1);\n };\n\n i18n.on('languageChanged', i18nLanguageChangedFunc);\n return () => {\n i18n.off('languageChanged', i18nLanguageChangedFunc);\n\n // Init all annotation state after unmounting\n InitAnnotationState(store.dispatch);\n };\n }, []);\n\n useEffect(() => {\n store.dispatch(\n UpdateInjectFunc({\n onSubmit,\n stepList,\n getFileData,\n pageSize,\n loadFileList,\n onSave,\n onPageChange,\n onStepChange,\n beforeRotate,\n }),\n );\n\n i18n.changeLanguage(defaultLang);\n }, [\n onSubmit,\n stepList,\n getFileData,\n pageSize,\n loadFileList,\n onSave,\n onPageChange,\n onStepChange,\n defaultLang,\n beforeRotate,\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 <ConfigProvider locale={i18n.language === 'en' ? enUS : zhCN}>\n <MainView {...props} intelligentFit={intelligentFit} />\n </ConfigProvider>\n </div>\n );\n};\n\nconst mapStateToProps = (state: AppState) => ({\n toolInstance: state.annotation.toolInstance,\n});\n\nexport default connect(mapStateToProps, null, null, { context: LabelBeeContext })(App);\n"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ var c="data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='19' height='19' viewBox='0 0 19 19'%3e %3cdefs%3e %3cstyle%3e .cls-1 %7b fill: %23797979%3b stroke: rgba(0%2c0%2c0%2c0)%3b stroke-miterlimit: 10%3b %7d .cls-2 %7b fill: none%3b opacity: 0.3%3b %7d %3c/style%3e %3c/defs%3e %3cg id='icon_buquan' transform='translate(0.501 0.5)'%3e %3cpath id='Clip_2' data-name='Clip 2' class='cls-2' d='M0%2c0H18V18H0Z'/%3e %3cpath id='%e5%87%8f%e5%8e%bb_15' data-name='%e5%87%8f%e5%8e%bb 15' class='cls-1' d='M473.725%2c6954H462.273a1.561%2c1.561%2c0%2c0%2c1-1.159-.529%2c1.88%2c1.88%2c0%2c0%2c1-.48-1.272v-.9h-.815a.809.809%2c0%2c0%2c1-.585-.271.9.9%2c0%2c0%2c1-.236-.6V6947.7a.863.863%2c0%2c0%2c1%2c.819-.9h.817c0-3.474%2c2.569-6.3%2c5.726-6.3h.824v-1.143a1.83%2c1.83%2c0%2c0%2c1-.819-1.557%2c1.914%2c1.914%2c0%2c0%2c1%2c.48-1.274%2c1.532%2c1.532%2c0%2c0%2c1%2c2.312%2c0%2c1.9%2c1.9%2c0%2c0%2c1%2c.48%2c1.272%2c1.836%2c1.836%2c0%2c0%2c1-.817%2c1.559v1.141h.817a6.041%2c6.041%2c0%2c0%2c1%2c5.726%2c6.3h.819a.862.862%2c0%2c0%2c1%2c.817.9v2.733a.916.916%2c0%2c0%2c1-.234.6.809.809%2c0%2c0%2c1-.585.271h-.819v.9a1.879%2c1.879%2c0%2c0%2c1-.48%2c1.272A1.578%2c1.578%2c0%2c0%2c1%2c473.725%2c6954ZM471%2c6946a1%2c1%2c0%2c0%2c0-1%2c1v1a1%2c1%2c0%2c1%2c0%2c2%2c0v-1A1%2c1%2c0%2c0%2c0%2c471%2c6946Zm-6%2c0a1%2c1%2c0%2c0%2c0-1%2c1v1a1%2c1%2c0%2c1%2c0%2c2%2c0v-1A1%2c1%2c0%2c0%2c0%2c465%2c6946Z' transform='translate(-459 -6936)'/%3e %3c/g%3e%3c/svg%3e";export{c as default};
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icon.svg.js","sources":["../../../src/assets/predictTracking/icon.svg"],"sourcesContent":["var img = \"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='19' height='19' viewBox='0 0 19 19'%3e %3cdefs%3e %3cstyle%3e .cls-1 %7b fill: %23797979%3b stroke: rgba(0%2c0%2c0%2c0)%3b stroke-miterlimit: 10%3b %7d .cls-2 %7b fill: none%3b opacity: 0.3%3b %7d %3c/style%3e %3c/defs%3e %3cg id='icon_buquan' transform='translate(0.501 0.5)'%3e %3cpath id='Clip_2' data-name='Clip 2' class='cls-2' d='M0%2c0H18V18H0Z'/%3e %3cpath id='%e5%87%8f%e5%8e%bb_15' data-name='%e5%87%8f%e5%8e%bb 15' class='cls-1' d='M473.725%2c6954H462.273a1.561%2c1.561%2c0%2c0%2c1-1.159-.529%2c1.88%2c1.88%2c0%2c0%2c1-.48-1.272v-.9h-.815a.809.809%2c0%2c0%2c1-.585-.271.9.9%2c0%2c0%2c1-.236-.6V6947.7a.863.863%2c0%2c0%2c1%2c.819-.9h.817c0-3.474%2c2.569-6.3%2c5.726-6.3h.824v-1.143a1.83%2c1.83%2c0%2c0%2c1-.819-1.557%2c1.914%2c1.914%2c0%2c0%2c1%2c.48-1.274%2c1.532%2c1.532%2c0%2c0%2c1%2c2.312%2c0%2c1.9%2c1.9%2c0%2c0%2c1%2c.48%2c1.272%2c1.836%2c1.836%2c0%2c0%2c1-.817%2c1.559v1.141h.817a6.041%2c6.041%2c0%2c0%2c1%2c5.726%2c6.3h.819a.862.862%2c0%2c0%2c1%2c.817.9v2.733a.916.916%2c0%2c0%2c1-.234.6.809.809%2c0%2c0%2c1-.585.271h-.819v.9a1.879%2c1.879%2c0%2c0%2c1-.48%2c1.272A1.578%2c1.578%2c0%2c0%2c1%2c473.725%2c6954ZM471%2c6946a1%2c1%2c0%2c0%2c0-1%2c1v1a1%2c1%2c0%2c1%2c0%2c2%2c0v-1A1%2c1%2c0%2c0%2c0%2c471%2c6946Zm-6%2c0a1%2c1%2c0%2c0%2c0-1%2c1v1a1%2c1%2c0%2c1%2c0%2c2%2c0v-1A1%2c1%2c0%2c0%2c0%2c465%2c6946Z' transform='translate(-459 -6936)'/%3e %3c/g%3e%3c/svg%3e\";\n export default img;"],"names":[],"mappings":"AAAG,IAAC,GAAG,GAAG;;;;"}
@@ -1 +1 @@
1
- import{PointCloudAnnotation as g}from"@labelbee/lb-annotation";import{getClassName as C}from"../../utils/dom.js";import{PointCloudContainer as P}from"./PointCloudLayout.js";import d,{useRef as h,useEffect as w}from"react";import{PointCloudContext as y}from"./PointCloudContext.js";import{EPerspectiveView as B}from"@labelbee/lb-utils";import{useSingleBox as v}from"./hooks/useSingleBox.js";import{SizeInfoForView as V}from"./PointCloudInfos.js";import{connect as b}from"react-redux";import{a2MapStateToProps as j}from"../../store/annotation/map.js";import{usePointCloudViews as k}from"./hooks/usePointCloudViews.js";import E from"../../hooks/useSize.js";import I from"./components/EmptyPage/index.js";import{useTranslation as S}from"react-i18next";import{LabelBeeContext as O}from"../../store/ctx.js";const D=(c,i,r=1)=>{const{width:t,height:e}=i,o={x:c.x+t*r/2,y:c.y+e*r/2},l={x:i.width/2,y:i.height/2};return{offsetX:(l.x-o.x)/r,offsetY:-(l.y-o.y)/r}},x=(c,i,r,t,e)=>{const{offsetX:o,offsetY:l}=D(c,r,i);if(e.camera.zoom=i,c){const f=Math.cos(t.rotation),p=Math.sin(t.rotation),n=o*f,u=o*p,{x:s,y:a,z:m}=e.initCameraPosition;e.camera.position.set(s+u,a-n,m+l)}e.camera.updateProjectionMatrix(),e.render()},M=({currentData:c,config:i,checkMode:r})=>{const t=d.useContext(y),e=h(null),o=E(e),{selectedBox:l}=v(),{t:f}=S(),{backViewUpdateBox:p}=k();return w(()=>{if(e.current){const n={width:e.current.clientWidth,height:e.current.clientHeight},u=new g({container:e.current,size:n,polygonOperationProps:{showDirectionLine:!1,forbidAddNew:!0},config:i,checkMode:r});t.setBackViewInstance(u)}},[]),w(()=>{if(!o||!t.backViewInstance)return;const{pointCloud2dOperation:n,pointCloudInstance:u}=t.backViewInstance;n.singleOn("renderZoom",(s,a)=>{!t.selectedPointCloudBox||x(a,s,o,t.selectedPointCloudBox,u)}),n.singleOn("dragMove",({currentPos:s,zoom:a})=>{!t.selectedPointCloudBox||x(s,a,o,t.selectedPointCloudBox,u)}),n.singleOn("updatePolygonByDrag",s=>{if(t.selectedIDs.length===1&&s.length===1){const{newPolygon:a,originPolygon:m}=s[0];a&&m&&p(a,m)}})},[t,o]),w(()=>{var n;(n=t==null?void 0:t.backViewInstance)==null||n.initSize(o)},[o]),d.createElement(P,{className:C("point-cloud-container","back-view"),title:f("BackView"),toolbar:d.createElement(V,{perspectiveView:B.Back})},d.createElement("div",{className:C("point-cloud-container","bottom-view-content")},d.createElement("div",{className:C("point-cloud-container","core-instance"),ref:e}),!l&&d.createElement(I,null)))};var N=b(j,null,null,{context:O})(M);export{N as default};
1
+ import{PointCloudAnnotation as g}from"@labelbee/lb-annotation";import{getClassName as C}from"../../utils/dom.js";import{PointCloudContainer as P}from"./PointCloudLayout.js";import m,{useRef as h,useEffect as w}from"react";import{PointCloudContext as y}from"./PointCloudContext.js";import{EPerspectiveView as B}from"@labelbee/lb-utils";import{useSingleBox as v}from"./hooks/useSingleBox.js";import{SizeInfoForView as V}from"./PointCloudInfos.js";import{connect as b}from"react-redux";import{a2MapStateToProps as j}from"../../store/annotation/map.js";import{usePointCloudViews as k}from"./hooks/usePointCloudViews.js";import E from"../../hooks/useSize.js";import I from"./components/EmptyPage/index.js";import{useTranslation as S}from"react-i18next";import{LabelBeeContext as O}from"../../store/ctx.js";import N from"../../utils/ToolUtils.js";const T=(c,i,s=1)=>{const{width:t,height:o}=i,e={x:c.x+t*s/2,y:c.y+o*s/2},l={x:i.width/2,y:i.height/2};return{offsetX:(l.x-e.x)/s,offsetY:-(l.y-e.y)/s}},x=(c,i,s,t,o)=>{const{offsetX:e,offsetY:l}=T(c,s,i);if(o.camera.zoom=i,c){const f=Math.cos(t.rotation),p=Math.sin(t.rotation),n=e*f,u=e*p,{x:r,y:a,z:d}=o.initCameraPosition;o.camera.position.set(r+u,a-n,d+l)}o.camera.updateProjectionMatrix(),o.render()},D=({currentData:c,config:i,checkMode:s})=>{const t=m.useContext(y),o=h(null),e=E(o),{selectedBox:l}=v(),{t:f}=S(),{backViewUpdateBox:p}=k();return w(()=>{if(o.current){const n={width:o.current.clientWidth,height:o.current.clientHeight},u=new g({container:o.current,size:n,polygonOperationProps:{showDirectionLine:!1,forbidAddNew:!0},config:i,checkMode:s,toolName:N.getPointCloudToolList()});t.setBackViewInstance(u)}},[]),w(()=>{if(!e||!t.backViewInstance)return;const{pointCloud2dOperation:n,pointCloudInstance:u}=t.backViewInstance;n.singleOn("renderZoom",(r,a)=>{!t.selectedPointCloudBox||x(a,r,e,t.selectedPointCloudBox,u)}),n.singleOn("dragMove",({currentPos:r,zoom:a})=>{!t.selectedPointCloudBox||x(r,a,e,t.selectedPointCloudBox,u)}),n.singleOn("updatePolygonByDrag",r=>{if(t.selectedIDs.length===1&&r.length===1){const{newPolygon:a,originPolygon:d}=r[0];a&&d&&p(a,d)}})},[t,e]),w(()=>{var n;(n=t==null?void 0:t.backViewInstance)==null||n.initSize(e)},[e]),m.createElement(P,{className:C("point-cloud-container","back-view"),title:f("BackView"),toolbar:m.createElement(V,{perspectiveView:B.Back})},m.createElement("div",{className:C("point-cloud-container","bottom-view-content")},m.createElement("div",{className:C("point-cloud-container","core-instance"),ref:o}),!l&&m.createElement(I,null)))};var M=b(j,null,null,{context:O})(D);export{M 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, 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 { EPerspectiveView, IPointCloudBox, UpdatePolygonByDragList } from '@labelbee/lb-utils';\nimport { useSingleBox } from './hooks/useSingleBox';\nimport { SizeInfoForView } from './PointCloudInfos';\nimport { connect } from 'react-redux';\nimport { a2MapStateToProps, IA2MapStateProps } from '@/store/annotation/map';\nimport { usePointCloudViews } from './hooks/usePointCloudViews';\nimport useSize from '@/hooks/useSize';\nimport EmptyPage from './components/EmptyPage';\nimport { useTranslation } from 'react-i18next';\nimport { LabelBeeContext } from '@/store/ctx';\n\n/**\n * 统一一下,将其拓展为 二维转换为 三维坐标的转换\n * Get the offset from canvas2d-coordinate to world coordinate\n * @param currentPos\n * @param size\n * @param zoom\n * @returns\n */\nconst TransferCanvas2WorldOffset = (\n currentPos: { x: number; y: number },\n size: { width: number; height: number },\n zoom = 1,\n) => {\n const { width: w, height: h } = size;\n\n const canvasCenterPoint = {\n x: currentPos.x + (w * zoom) / 2,\n y: currentPos.y + (h * zoom) / 2,\n };\n\n const worldCenterPoint = {\n x: size.width / 2,\n y: size.height / 2,\n };\n\n return {\n offsetX: (worldCenterPoint.x - canvasCenterPoint.x) / zoom,\n offsetY: -(worldCenterPoint.y - canvasCenterPoint.y) / zoom,\n };\n};\nconst updateBackViewByCanvas2D = (\n currentPos: { x: number; y: number },\n zoom: number,\n size: { width: number; height: number },\n selectedPointCloudBox: IPointCloudBox,\n backPointCloud: PointCloud,\n) => {\n const { offsetX, offsetY } = TransferCanvas2WorldOffset(currentPos, size, zoom);\n backPointCloud.camera.zoom = zoom;\n if (currentPos) {\n const cos = Math.cos(selectedPointCloudBox.rotation);\n const sin = Math.sin(selectedPointCloudBox.rotation);\n const offsetXX = offsetX * cos;\n const offsetXY = offsetX * sin;\n const { x, y, z } = backPointCloud.initCameraPosition;\n backPointCloud.camera.position.set(x + offsetXY, y - offsetXX, z + offsetY);\n }\n backPointCloud.camera.updateProjectionMatrix();\n backPointCloud.render();\n};\n\ninterface IProps {\n checkMode?: boolean;\n}\n\nconst PointCloudSideView = ({ currentData, config, checkMode }: IA2MapStateProps & IProps) => {\n const ptCtx = React.useContext(PointCloudContext);\n const ref = useRef<HTMLDivElement>(null);\n const size = useSize(ref);\n const { selectedBox } = useSingleBox();\n const { t } = useTranslation();\n const { backViewUpdateBox } = usePointCloudViews();\n\n useEffect(() => {\n if (ref.current) {\n const size = {\n width: ref.current.clientWidth,\n height: ref.current.clientHeight,\n };\n\n const pointCloudAnnotation = new PointCloudAnnotation({\n container: ref.current,\n size,\n polygonOperationProps: { showDirectionLine: false, forbidAddNew: true },\n config,\n checkMode,\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 (updateList: UpdatePolygonByDragList) => {\n if (ptCtx.selectedIDs.length === 1 && updateList.length === 1) {\n const { newPolygon, originPolygon } = updateList[0];\n\n if (newPolygon && originPolygon) {\n backViewUpdateBox(newPolygon, originPolygon);\n }\n }\n },\n );\n }, [ptCtx, size]);\n\n useEffect(() => {\n // Update Size\n ptCtx?.backViewInstance?.initSize(size);\n }, [size]);\n\n return (\n <PointCloudContainer\n className={getClassName('point-cloud-container', 'back-view')}\n title={t('BackView')}\n toolbar={<SizeInfoForView perspectiveView={EPerspectiveView.Back} />}\n >\n <div className={getClassName('point-cloud-container', 'bottom-view-content')}>\n <div className={getClassName('point-cloud-container', 'core-instance')} ref={ref} />\n {!selectedBox && <EmptyPage />}\n </div>\n </PointCloudContainer>\n );\n};\n\nexport default connect(a2MapStateToProps, null, null, { context: LabelBeeContext })(\n PointCloudSideView,\n);\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PointCloudBackView.js","sources":["../../../src/components/pointCloudView/PointCloudBackView.tsx"],"sourcesContent":["/*\n * @Author: Laoluo luozefeng@sensetime.com\n * @Date: 2022-06-22 11:08:31\n * @LastEditors: Laoluo luozefeng@sensetime.com\n * @LastEditTime: 2022-07-08 11:08:02\n */\nimport {\n PointCloud,\n PointCloudAnnotation,\n THybridToolName,\n} from '@labelbee/lb-annotation';\nimport { getClassName } from '@/utils/dom';\nimport { PointCloudContainer } from './PointCloudLayout';\nimport React, { useEffect, useRef } from 'react';\nimport { PointCloudContext } from './PointCloudContext';\nimport { EPerspectiveView, IPointCloudBox, UpdatePolygonByDragList } from '@labelbee/lb-utils';\nimport { useSingleBox } from './hooks/useSingleBox';\nimport { SizeInfoForView } from './PointCloudInfos';\nimport { connect } from 'react-redux';\nimport { a2MapStateToProps, IA2MapStateProps } from '@/store/annotation/map';\nimport { usePointCloudViews } from './hooks/usePointCloudViews';\nimport useSize from '@/hooks/useSize';\nimport EmptyPage from './components/EmptyPage';\nimport { useTranslation } from 'react-i18next';\nimport { LabelBeeContext } from '@/store/ctx';\nimport ToolUtils from '@/utils/ToolUtils';\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\ninterface IProps {\n checkMode?: boolean;\n}\n\nconst PointCloudSideView = ({ currentData, config, checkMode }: IA2MapStateProps & IProps) => {\n const ptCtx = React.useContext(PointCloudContext);\n const ref = useRef<HTMLDivElement>(null);\n const size = useSize(ref);\n const { selectedBox } = useSingleBox();\n const { t } = useTranslation();\n const { backViewUpdateBox } = usePointCloudViews();\n\n useEffect(() => {\n if (ref.current) {\n const size = {\n width: ref.current.clientWidth,\n height: ref.current.clientHeight,\n };\n\n const pointCloudAnnotation = new PointCloudAnnotation({\n container: ref.current,\n size,\n polygonOperationProps: { showDirectionLine: false, forbidAddNew: true },\n config,\n checkMode,\n toolName: ToolUtils.getPointCloudToolList() as THybridToolName,\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 (updateList: UpdatePolygonByDragList) => {\n if (ptCtx.selectedIDs.length === 1 && updateList.length === 1) {\n const { newPolygon, originPolygon } = updateList[0];\n\n if (newPolygon && originPolygon) {\n backViewUpdateBox(newPolygon, originPolygon);\n }\n }\n },\n );\n }, [ptCtx, size]);\n\n useEffect(() => {\n // Update Size\n ptCtx?.backViewInstance?.initSize(size);\n }, [size]);\n\n return (\n <PointCloudContainer\n className={getClassName('point-cloud-container', 'back-view')}\n title={t('BackView')}\n toolbar={<SizeInfoForView perspectiveView={EPerspectiveView.Back} />}\n >\n <div className={getClassName('point-cloud-container', 'bottom-view-content')}>\n <div className={getClassName('point-cloud-container', 'core-instance')} ref={ref} />\n {!selectedBox && <EmptyPage />}\n </div>\n </PointCloudContainer>\n );\n};\n\nexport default connect(a2MapStateToProps, null, null, { context: LabelBeeContext })(\n PointCloudSideView,\n);\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAmCA,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;AAOjB,MAAM,kBAAqB,GAAA,CAAC,CAAE,WAAA,EAAa,QAAQ,SAA2C,CAAA,KAAA;AAC5F,EAAM,MAAA,KAAA,GAAQ,MAAM,UAAW,CAAA,iBAAA,CAAA,CAAA;AAC/B,EAAA,MAAM,MAAM,MAAuB,CAAA,IAAA,CAAA,CAAA;AACnC,EAAA,MAAM,OAAO,OAAQ,CAAA,GAAA,CAAA,CAAA;AACrB,EAAA,MAAM,CAAE,WAAgB,CAAA,GAAA,YAAA,EAAA,CAAA;AACxB,EAAA,MAAM,CAAE,CAAM,CAAA,GAAA,cAAA,EAAA,CAAA;AACd,EAAA,MAAM,CAAE,iBAAsB,CAAA,GAAA,kBAAA,EAAA,CAAA;AAE9B,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,QACjE,MAAA;AAAA,QACA,SAAA;AAAA,QACA,UAAU,SAAU,CAAA,qBAAA,EAAA;AAAA,OAAA,CAAA,CAAA;AAEtB,MAAA,KAAA,CAAM,mBAAoB,CAAA,oBAAA,CAAA,CAAA;AAAA,KAAA;AAAA,GAE3B,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,IAA+B,8BAAA,CAAA,QAAA,CAC7B,qBACA,EAAA,CAAC,UAAwC,KAAA;AACvC,MAAA,IAAI,MAAM,WAAY,CAAA,MAAA,KAAW,CAAK,IAAA,UAAA,CAAW,WAAW,CAAG,EAAA;AAC7D,QAAM,MAAA,CAAE,UAAY,EAAA,aAAA,CAAA,GAAkB,UAAW,CAAA,CAAA,CAAA,CAAA;AAEjD,QAAA,IAAI,cAAc,aAAe,EAAA;AAC/B,UAAA,iBAAA,CAAkB,UAAY,EAAA,aAAA,CAAA,CAAA;AAAA,SAAA;AAAA,OAAA;AAAA,KAAA,CAAA,CAAA;AAAA,GAAA,EAKrC,CAAC,KAAO,EAAA,IAAA,CAAA,CAAA,CAAA;AAEX,EAAA,SAAA,CAAU,MAAM;AA1JlB,IAAA,IAAA,EAAA,CAAA;AA4JI,IAAO,CAAA,EAAA,GAAA,KAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,KAAA,CAAA,gBAAA,KAAP,mBAAyB,QAAS,CAAA,IAAA,CAAA,CAAA;AAAA,GAAA,EACjC,CAAC,IAAA,CAAA,CAAA,CAAA;AAEJ,EAAA,2CACG,mBAAD,EAAA;AAAA,IACE,SAAA,EAAW,aAAa,uBAAyB,EAAA,WAAA,CAAA;AAAA,IACjD,OAAO,CAAE,CAAA,UAAA,CAAA;AAAA,IACT,OAAA,sCAAU,eAAD,EAAA;AAAA,MAAiB,iBAAiB,gBAAiB,CAAA,IAAA;AAAA,KAAA,CAAA;AAAA,GAAA,sCAE3D,KAAD,EAAA;AAAA,IAAK,SAAA,EAAW,aAAa,uBAAyB,EAAA,qBAAA,CAAA;AAAA,GAAA,sCACnD,KAAD,EAAA;AAAA,IAAK,SAAA,EAAW,aAAa,uBAAyB,EAAA,eAAA,CAAA;AAAA,IAAkB,GAAA;AAAA,GACvE,CAAA,EAAA,CAAC,WAAe,oBAAA,KAAA,CAAA,aAAA,CAAC,SAAD,EAAA,IAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA;AAMzB,yBAAe,QAAQ,iBAAmB,EAAA,IAAA,EAAM,IAAM,EAAA,CAAE,SAAS,eAC/D,CAAA,CAAA,CAAA,kBAAA,CAAA;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"PointCloudContext.js","sources":["../../../src/components/pointCloudView/PointCloudContext.tsx"],"sourcesContent":["import { IPointCloudBox, IPointCloudBoxList, IPolygonData } from '@labelbee/lb-utils';\nimport React, { useEffect, useMemo, useRef, useState } from 'react';\nimport {\n PointCloud,\n PointCloudAnnotation,\n ActionsHistory,\n EToolName,\n} from '@labelbee/lb-annotation';\n\ninterface IPointCloudContextInstances {\n topViewInstance?: PointCloudAnnotation;\n sideViewInstance?: PointCloudAnnotation;\n backViewInstance?: PointCloudAnnotation;\n mainViewInstance?: PointCloud;\n setTopViewInstance: (instance: PointCloudAnnotation) => void;\n setSideViewInstance: (instance: PointCloudAnnotation) => void;\n setBackViewInstance: (instance: PointCloudAnnotation) => void;\n setMainViewInstance: (instance: PointCloud) => void;\n}\n\ntype AttrPanelLayout = '' | 'left' | 'right';\n\nexport interface IPointCloudContext extends IPointCloudContextInstances {\n pointCloudBoxList: IPointCloudBoxList;\n displayPointCloudList: IPointCloudBoxList;\n selectedIDs: string[];\n setSelectedIDs: (ids?: string[] | string) => void;\n valid: boolean;\n setPointCloudResult: (resultList: IPointCloudBoxList) => void;\n selectedPointCloudBox?: IPointCloudBox;\n setPointCloudValid: (valid?: boolean) => void;\n addSelectedID: (selectedID: string) => void;\n selectedAllBoxes: () => void;\n selectedID: string;\n addPointCloudBox: (boxParams: IPointCloudBox) => IPointCloudBox[];\n\n polygonList: IPolygonData[];\n setPolygonList: (polygonList: IPolygonData[]) => void;\n\n zoom: number;\n setZoom: (zoom: number) => void;\n\n history: ActionsHistory; // Operation History\n hideAttributes: string[];\n setHideAttributes: (hideAttrs: string[]) => void;\n toggleAttributesVisible: (attribute: string) => void;\n reRender: (_displayPointCloudList: IPointCloudBoxList, _polygonList: IPolygonData[]) => void;\n attrPanelLayout: AttrPanelLayout;\n setAttrPanelLayout: (layout: AttrPanelLayout) => void;\n\n syncAllViewPointCloudColor: (newPointCloudList?: IPointCloudBox[]) => void;\n\n defaultAttribute: string;\n setDefaultAttribute: (defaultAttribute: string) => void;\n\n pointCloudPattern: EToolName.Rect | EToolName.Polygon;\n setPointCloudPattern: (toolName: EToolName.Rect | EToolName.Polygon) => void;\n selectSpecAttr: (attr: string) => void;\n}\n\nexport const PointCloudContext = React.createContext<IPointCloudContext>({\n pointCloudBoxList: [],\n displayPointCloudList: [],\n polygonList: [],\n selectedID: '',\n selectedIDs: [],\n valid: true,\n setSelectedIDs: () => {},\n setPointCloudResult: () => {},\n setPointCloudValid: () => {},\n setTopViewInstance: () => {},\n setSideViewInstance: () => {},\n setBackViewInstance: () => {},\n setMainViewInstance: () => {},\n addSelectedID: () => {},\n selectedAllBoxes: () => {},\n addPointCloudBox: () => {\n return [];\n },\n setPolygonList: () => {},\n\n zoom: 1,\n setZoom: () => {},\n history: new ActionsHistory(),\n hideAttributes: [],\n setHideAttributes: () => {},\n toggleAttributesVisible: () => {},\n reRender: () => {},\n setAttrPanelLayout: () => {},\n attrPanelLayout: '',\n syncAllViewPointCloudColor: () => {},\n\n defaultAttribute: '',\n setDefaultAttribute: () => {},\n\n pointCloudPattern: EToolName.Rect,\n setPointCloudPattern: () => {},\n selectSpecAttr: () => {},\n});\n\nexport const PointCloudProvider: React.FC<{}> = ({ children }) => {\n const [pointCloudBoxList, setPointCloudResult] = useState<IPointCloudBoxList>([]);\n const [polygonList, setPolygonList] = useState<IPolygonData[]>([]);\n const [selectedIDs, setSelectedIDsState] = useState<string[]>([]);\n const [valid, setValid] = useState<boolean>(true);\n const [zoom, setZoom] = useState<number>(1);\n const [topViewInstance, setTopViewInstance] = useState<PointCloudAnnotation>();\n const [sideViewInstance, setSideViewInstance] = useState<PointCloudAnnotation>();\n const [backViewInstance, setBackViewInstance] = useState<PointCloudAnnotation>();\n const [mainViewInstance, setMainViewInstance] = useState<PointCloud>();\n const [defaultAttribute, setDefaultAttribute] = useState('');\n const [pointCloudPattern, setPointCloudPattern] = useState<EToolName.Rect | EToolName.Polygon>(\n EToolName.Rect,\n );\n const history = useRef(new ActionsHistory()).current;\n const [hideAttributes, setHideAttributes] = useState<string[]>([]);\n const [attrPanelLayout, setAttrPanelLayout] = useState<AttrPanelLayout>('');\n\n const selectedID = useMemo(() => {\n return selectedIDs.length === 1 ? selectedIDs[0] : '';\n }, [selectedIDs]);\n\n const ptCtx = useMemo(() => {\n const selectedPointCloudBox = pointCloudBoxList.find((v) => v.id === selectedID);\n\n const addPointCloudBox = (box: IPointCloudBox) => {\n const newPointCloudList = pointCloudBoxList.concat(box);\n setPointCloudResult(newPointCloudList);\n return newPointCloudList;\n };\n\n const setPointCloudValid = (valid?: boolean) => {\n setValid(valid === false ? false : true);\n };\n\n const setSelectedIDs = (selectedIDs?: string[] | string) => {\n if (selectedIDs === undefined) {\n setSelectedIDsState([]);\n }\n\n if (typeof selectedIDs === 'string') {\n setSelectedIDsState([selectedIDs]);\n }\n\n if (Array.isArray(selectedIDs)) {\n setSelectedIDsState(Array.from(new Set(selectedIDs)));\n }\n };\n\n /**\n * If selectedID existed, remove selectedID from selectedIDs\n * If selectedID not existed, add selectedID to selectedIDs\n * @param selectedID\n */\n const addSelectedID = (selectedID: string) => {\n if (selectedIDs.includes(selectedID)) {\n setSelectedIDs(selectedIDs.filter((i) => i !== selectedID));\n } else {\n setSelectedIDs([...selectedIDs, selectedID]);\n }\n };\n\n const selectedAllBoxes = () => {\n setSelectedIDs(pointCloudBoxList.map((i) => i.id));\n };\n\n const selectSpecAttr = (attr: string) => {\n setSelectedIDs(pointCloudBoxList.filter((i) => i.attribute === attr).map((i) => i.id));\n };\n\n const displayPointCloudList = pointCloudBoxList.filter(\n (i) => !hideAttributes.includes(i.attribute),\n );\n\n const toggleAttributesVisible = (tAttribute: string) => {\n if (hideAttributes.includes(tAttribute)) {\n setHideAttributes(hideAttributes.filter((attribute) => attribute !== tAttribute));\n } else {\n const updatedHideAttributes = hideAttributes.concat(tAttribute);\n setHideAttributes(updatedHideAttributes);\n }\n };\n\n const reRender = (\n _displayPointCloudList: IPointCloudBoxList = displayPointCloudList,\n _polygonList: IPolygonData[] = polygonList,\n ) => {\n pointCloudBoxList.forEach((v) => {\n mainViewInstance?.removeObjectByName(v.id);\n });\n\n topViewInstance?.updatePolygonList(_displayPointCloudList, _polygonList);\n mainViewInstance?.generateBoxes(_displayPointCloudList);\n syncAllViewPointCloudColor(_displayPointCloudList);\n };\n\n /**\n * Synchronize the highlighted pointCloud for all views.\n * @param pointCloudList\n */\n\n const syncAllViewPointCloudColor = (pointCloudList?: IPointCloudBox[]) => {\n const colorPromise = mainViewInstance?.highlightOriginPointCloud(pointCloudList);\n return new Promise((resolve) => {\n colorPromise?.then((color) => {\n [topViewInstance].forEach((instance) => {\n if (color) {\n instance?.pointCloudInstance?.updateColor(color);\n resolve({ color });\n }\n });\n // TODO: Sync sideView & backView Color.\n });\n });\n };\n\n return {\n selectedID,\n pointCloudBoxList,\n displayPointCloudList,\n selectedIDs,\n setPointCloudResult,\n setSelectedIDs,\n addPointCloudBox,\n valid,\n selectedPointCloudBox,\n setPointCloudValid,\n addSelectedID,\n selectedAllBoxes,\n topViewInstance,\n setTopViewInstance,\n sideViewInstance,\n setSideViewInstance,\n backViewInstance,\n setBackViewInstance,\n mainViewInstance,\n setMainViewInstance,\n polygonList,\n setPolygonList,\n zoom,\n setZoom,\n history,\n toggleAttributesVisible,\n hideAttributes,\n setHideAttributes,\n reRender,\n attrPanelLayout,\n setAttrPanelLayout,\n syncAllViewPointCloudColor,\n defaultAttribute,\n setDefaultAttribute,\n pointCloudPattern,\n setPointCloudPattern,\n selectSpecAttr,\n };\n }, [\n valid,\n selectedIDs,\n pointCloudBoxList,\n polygonList,\n topViewInstance,\n sideViewInstance,\n backViewInstance,\n mainViewInstance,\n zoom,\n hideAttributes,\n attrPanelLayout,\n defaultAttribute,\n pointCloudPattern,\n ]);\n\n const updateSelectedIDsAndRenderAfterHide = () => {\n const pointCloudForFilteredList = pointCloudBoxList.filter((i) =>\n hideAttributes.includes(i.attribute),\n );\n\n const { setSelectedIDs, reRender } = ptCtx;\n\n const filteredIDs = pointCloudForFilteredList.map((i) => i.id);\n\n if (filteredIDs.length > 0) {\n setSelectedIDs(selectedIDs.filter((id) => !filteredIDs.includes(id)));\n }\n\n reRender();\n };\n\n useEffect(() => {\n updateSelectedIDsAndRenderAfterHide();\n topViewInstance?.pointCloud2dOperation?.setHiddenAttributes(hideAttributes);\n }, [hideAttributes]);\n\n return <PointCloudContext.Provider value={ptCtx}>{children}</PointCloudContext.Provider>;\n};\n"],"names":[],"mappings":";;;AA4Da,MAAA,iBAAA,GAAoB,MAAM,aAAkC,CAAA;AAAA,EACvE,iBAAmB,EAAA,EAAA;AAAA,EACnB,qBAAuB,EAAA,EAAA;AAAA,EACvB,WAAa,EAAA,EAAA;AAAA,EACb,UAAY,EAAA,EAAA;AAAA,EACZ,WAAa,EAAA,EAAA;AAAA,EACb,KAAO,EAAA,IAAA;AAAA,EACP,gBAAgB,MAAM;AAAA,GAAA;AAAA,EACtB,qBAAqB,MAAM;AAAA,GAAA;AAAA,EAC3B,oBAAoB,MAAM;AAAA,GAAA;AAAA,EAC1B,oBAAoB,MAAM;AAAA,GAAA;AAAA,EAC1B,qBAAqB,MAAM;AAAA,GAAA;AAAA,EAC3B,qBAAqB,MAAM;AAAA,GAAA;AAAA,EAC3B,qBAAqB,MAAM;AAAA,GAAA;AAAA,EAC3B,eAAe,MAAM;AAAA,GAAA;AAAA,EACrB,kBAAkB,MAAM;AAAA,GAAA;AAAA,EACxB,kBAAkB,MAAM;AACtB,IAAO,OAAA,EAAA,CAAA;AAAA,GAAA;AAAA,EAET,gBAAgB,MAAM;AAAA,GAAA;AAAA,EAEtB,IAAM,EAAA,CAAA;AAAA,EACN,SAAS,MAAM;AAAA,GAAA;AAAA,EACf,SAAS,IAAI,cAAA,EAAA;AAAA,EACb,cAAgB,EAAA,EAAA;AAAA,EAChB,mBAAmB,MAAM;AAAA,GAAA;AAAA,EACzB,yBAAyB,MAAM;AAAA,GAAA;AAAA,EAC/B,UAAU,MAAM;AAAA,GAAA;AAAA,EAChB,oBAAoB,MAAM;AAAA,GAAA;AAAA,EAC1B,eAAiB,EAAA,EAAA;AAAA,EACjB,4BAA4B,MAAM;AAAA,GAAA;AAAA,EAElC,gBAAkB,EAAA,EAAA;AAAA,EAClB,qBAAqB,MAAM;AAAA,GAAA;AAAA,EAE3B,mBAAmB,SAAU,CAAA,IAAA;AAAA,EAC7B,sBAAsB,MAAM;AAAA,GAAA;AAAA,EAC5B,gBAAgB,MAAM;AAAA,GAAA;AAAA,CAAA,EAAA;AAGX,MAAA,kBAAA,GAAmC,CAAC,CAAE,QAAe,CAAA,KAAA;AAChE,EAAM,MAAA,CAAC,iBAAmB,EAAA,mBAAA,CAAA,GAAuB,QAA6B,CAAA,EAAA,CAAA,CAAA;AAC9E,EAAM,MAAA,CAAC,WAAa,EAAA,cAAA,CAAA,GAAkB,QAAyB,CAAA,EAAA,CAAA,CAAA;AAC/D,EAAM,MAAA,CAAC,WAAa,EAAA,mBAAA,CAAA,GAAuB,QAAmB,CAAA,EAAA,CAAA,CAAA;AAC9D,EAAM,MAAA,CAAC,KAAO,EAAA,QAAA,CAAA,GAAY,QAAkB,CAAA,IAAA,CAAA,CAAA;AAC5C,EAAM,MAAA,CAAC,IAAM,EAAA,OAAA,CAAA,GAAW,QAAiB,CAAA,CAAA,CAAA,CAAA;AACzC,EAAM,MAAA,CAAC,iBAAiB,kBAAsB,CAAA,GAAA,QAAA,EAAA,CAAA;AAC9C,EAAM,MAAA,CAAC,kBAAkB,mBAAuB,CAAA,GAAA,QAAA,EAAA,CAAA;AAChD,EAAM,MAAA,CAAC,kBAAkB,mBAAuB,CAAA,GAAA,QAAA,EAAA,CAAA;AAChD,EAAM,MAAA,CAAC,kBAAkB,mBAAuB,CAAA,GAAA,QAAA,EAAA,CAAA;AAChD,EAAM,MAAA,CAAC,gBAAkB,EAAA,mBAAA,CAAA,GAAuB,QAAS,CAAA,EAAA,CAAA,CAAA;AACzD,EAAA,MAAM,CAAC,iBAAA,EAAmB,oBAAwB,CAAA,GAAA,QAAA,CAChD,SAAU,CAAA,IAAA,CAAA,CAAA;AAEZ,EAAM,MAAA,OAAA,GAAU,MAAO,CAAA,IAAI,cAAkB,EAAA,CAAA,CAAA,OAAA,CAAA;AAC7C,EAAM,MAAA,CAAC,cAAgB,EAAA,iBAAA,CAAA,GAAqB,QAAmB,CAAA,EAAA,CAAA,CAAA;AAC/D,EAAM,MAAA,CAAC,eAAiB,EAAA,kBAAA,CAAA,GAAsB,QAA0B,CAAA,EAAA,CAAA,CAAA;AAExE,EAAM,MAAA,UAAA,GAAa,QAAQ,MAAM;AAC/B,IAAA,OAAO,WAAY,CAAA,MAAA,KAAW,CAAI,GAAA,WAAA,CAAY,CAAK,CAAA,GAAA,EAAA,CAAA;AAAA,GAAA,EAClD,CAAC,WAAA,CAAA,CAAA,CAAA;AAEJ,EAAM,MAAA,KAAA,GAAQ,QAAQ,MAAM;AAC1B,IAAA,MAAM,wBAAwB,iBAAkB,CAAA,IAAA,CAAK,CAAC,CAAA,KAAM,EAAE,EAAO,KAAA,UAAA,CAAA,CAAA;AAErE,IAAM,MAAA,gBAAA,GAAmB,CAAC,GAAwB,KAAA;AAChD,MAAM,MAAA,iBAAA,GAAoB,kBAAkB,MAAO,CAAA,GAAA,CAAA,CAAA;AACnD,MAAoB,mBAAA,CAAA,iBAAA,CAAA,CAAA;AACpB,MAAO,OAAA,iBAAA,CAAA;AAAA,KAAA,CAAA;AAGT,IAAM,MAAA,kBAAA,GAAqB,CAAC,MAAoB,KAAA;AAC9C,MAAS,QAAA,CAAA,MAAA,KAAU,QAAQ,KAAQ,GAAA,IAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAGrC,IAAM,MAAA,cAAA,GAAiB,CAAC,YAAoC,KAAA;AAC1D,MAAA,IAAI,iBAAgB,KAAW,CAAA,EAAA;AAC7B,QAAoB,mBAAA,CAAA,EAAA,CAAA,CAAA;AAAA,OAAA;AAGtB,MAAI,IAAA,OAAO,iBAAgB,QAAU,EAAA;AACnC,QAAA,mBAAA,CAAoB,CAAC,YAAA,CAAA,CAAA,CAAA;AAAA,OAAA;AAGvB,MAAI,IAAA,KAAA,CAAM,QAAQ,YAAc,CAAA,EAAA;AAC9B,QAAoB,mBAAA,CAAA,KAAA,CAAM,IAAK,CAAA,IAAI,GAAI,CAAA,YAAA,CAAA,CAAA,CAAA,CAAA;AAAA,OAAA;AAAA,KAAA,CAAA;AAS3C,IAAM,MAAA,aAAA,GAAgB,CAAC,WAAuB,KAAA;AAC5C,MAAI,IAAA,WAAA,CAAY,SAAS,WAAa,CAAA,EAAA;AACpC,QAAA,cAAA,CAAe,WAAY,CAAA,MAAA,CAAO,CAAC,CAAA,KAAM,CAAM,KAAA,WAAA,CAAA,CAAA,CAAA;AAAA,OAC1C,MAAA;AACL,QAAe,cAAA,CAAA,CAAC,GAAG,WAAa,EAAA,WAAA,CAAA,CAAA,CAAA;AAAA,OAAA;AAAA,KAAA,CAAA;AAIpC,IAAA,MAAM,mBAAmB,MAAM;AAC7B,MAAA,cAAA,CAAe,iBAAkB,CAAA,GAAA,CAAI,CAAC,CAAA,KAAM,CAAE,CAAA,EAAA,CAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAGhD,IAAM,MAAA,cAAA,GAAiB,CAAC,IAAiB,KAAA;AACvC,MAAe,cAAA,CAAA,iBAAA,CAAkB,MAAO,CAAA,CAAC,CAAM,KAAA,CAAA,CAAE,cAAc,IAAM,CAAA,CAAA,GAAA,CAAI,CAAC,CAAA,KAAM,CAAE,CAAA,EAAA,CAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAGpF,IAAM,MAAA,qBAAA,GAAwB,kBAAkB,MAC9C,CAAA,CAAC,MAAM,CAAC,cAAA,CAAe,SAAS,CAAE,CAAA,SAAA,CAAA,CAAA,CAAA;AAGpC,IAAM,MAAA,uBAAA,GAA0B,CAAC,UAAuB,KAAA;AACtD,MAAI,IAAA,cAAA,CAAe,SAAS,UAAa,CAAA,EAAA;AACvC,QAAA,iBAAA,CAAkB,cAAe,CAAA,MAAA,CAAO,CAAC,SAAA,KAAc,SAAc,KAAA,UAAA,CAAA,CAAA,CAAA;AAAA,OAChE,MAAA;AACL,QAAM,MAAA,qBAAA,GAAwB,eAAe,MAAO,CAAA,UAAA,CAAA,CAAA;AACpD,QAAkB,iBAAA,CAAA,qBAAA,CAAA,CAAA;AAAA,OAAA;AAAA,KAAA,CAAA;AAItB,IAAA,MAAM,QAAW,GAAA,CACf,sBAA6C,GAAA,qBAAA,EAC7C,eAA+B,WAC5B,KAAA;AACH,MAAkB,iBAAA,CAAA,OAAA,CAAQ,CAAC,CAAM,KAAA;AAC/B,QAAA,gBAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,gBAAA,CAAkB,mBAAmB,CAAE,CAAA,EAAA,CAAA,CAAA;AAAA,OAAA,CAAA,CAAA;AAGzC,MAAA,eAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,eAAA,CAAiB,kBAAkB,sBAAwB,EAAA,YAAA,CAAA,CAAA;AAC3D,MAAA,gBAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,gBAAA,CAAkB,aAAc,CAAA,sBAAA,CAAA,CAAA;AAChC,MAA2B,0BAAA,CAAA,sBAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAQ7B,IAAM,MAAA,0BAAA,GAA6B,CAAC,cAAsC,KAAA;AACxE,MAAM,MAAA,YAAA,GAAe,qDAAkB,yBAA0B,CAAA,cAAA,CAAA,CAAA;AACjE,MAAO,OAAA,IAAI,OAAQ,CAAA,CAAC,OAAY,KAAA;AAC9B,QAAc,YAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,YAAA,CAAA,IAAA,CAAK,CAAC,KAAU,KAAA;AAC5B,UAAC,CAAA,eAAA,CAAA,CAAiB,OAAQ,CAAA,CAAC,QAAa,KAAA;AA7MlD,YAAA,IAAA,EAAA,CAAA;AA8MY,YAAA,IAAI,KAAO,EAAA;AACT,cAAU,CAAA,EAAA,GAAA,QAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,QAAA,CAAA,kBAAA,KAAV,mBAA8B,WAAY,CAAA,KAAA,CAAA,CAAA;AAC1C,cAAA,OAAA,CAAQ,CAAE,KAAA,CAAA,CAAA,CAAA;AAAA,aAAA;AAAA,WAAA,CAAA,CAAA;AAAA,SAAA,CAAA,CAAA;AAAA,OAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAQpB,IAAO,OAAA;AAAA,MACL,UAAA;AAAA,MACA,iBAAA;AAAA,MACA,qBAAA;AAAA,MACA,WAAA;AAAA,MACA,mBAAA;AAAA,MACA,cAAA;AAAA,MACA,gBAAA;AAAA,MACA,KAAA;AAAA,MACA,qBAAA;AAAA,MACA,kBAAA;AAAA,MACA,aAAA;AAAA,MACA,gBAAA;AAAA,MACA,eAAA;AAAA,MACA,kBAAA;AAAA,MACA,gBAAA;AAAA,MACA,mBAAA;AAAA,MACA,gBAAA;AAAA,MACA,mBAAA;AAAA,MACA,gBAAA;AAAA,MACA,mBAAA;AAAA,MACA,WAAA;AAAA,MACA,cAAA;AAAA,MACA,IAAA;AAAA,MACA,OAAA;AAAA,MACA,OAAA;AAAA,MACA,uBAAA;AAAA,MACA,cAAA;AAAA,MACA,iBAAA;AAAA,MACA,QAAA;AAAA,MACA,eAAA;AAAA,MACA,kBAAA;AAAA,MACA,0BAAA;AAAA,MACA,gBAAA;AAAA,MACA,mBAAA;AAAA,MACA,iBAAA;AAAA,MACA,oBAAA;AAAA,MACA,cAAA;AAAA,KAAA,CAAA;AAAA,GAED,EAAA;AAAA,IACD,KAAA;AAAA,IACA,WAAA;AAAA,IACA,iBAAA;AAAA,IACA,WAAA;AAAA,IACA,eAAA;AAAA,IACA,gBAAA;AAAA,IACA,gBAAA;AAAA,IACA,gBAAA;AAAA,IACA,IAAA;AAAA,IACA,cAAA;AAAA,IACA,eAAA;AAAA,IACA,gBAAA;AAAA,IACA,iBAAA;AAAA,GAAA,CAAA,CAAA;AAGF,EAAA,MAAM,sCAAsC,MAAM;AAChD,IAAA,MAAM,4BAA4B,iBAAkB,CAAA,MAAA,CAAO,CAAC,CAC1D,KAAA,cAAA,CAAe,SAAS,CAAE,CAAA,SAAA,CAAA,CAAA,CAAA;AAG5B,IAAM,MAAA,CAAE,gBAAgB,QAAa,CAAA,GAAA,KAAA,CAAA;AAErC,IAAA,MAAM,WAAc,GAAA,yBAAA,CAA0B,GAAI,CAAA,CAAC,MAAM,CAAE,CAAA,EAAA,CAAA,CAAA;AAE3D,IAAI,IAAA,WAAA,CAAY,SAAS,CAAG,EAAA;AAC1B,MAAA,cAAA,CAAe,YAAY,MAAO,CAAA,CAAC,EAAO,KAAA,CAAC,YAAY,QAAS,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA;AAAA,KAAA;AAGlE,IAAA,QAAA,EAAA,CAAA;AAAA,GAAA,CAAA;AAGF,EAAA,SAAA,CAAU,MAAM;AA/RlB,IAAA,IAAA,EAAA,CAAA;AAgSI,IAAA,mCAAA,EAAA,CAAA;AACA,IAAiB,CAAA,EAAA,GAAA,eAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,eAAA,CAAA,qBAAA,KAAjB,mBAAwC,mBAAoB,CAAA,cAAA,CAAA,CAAA;AAAA,GAAA,EAC3D,CAAC,cAAA,CAAA,CAAA,CAAA;AAEJ,EAAO,uBAAA,KAAA,CAAA,aAAA,CAAC,kBAAkB,QAAnB,EAAA;AAAA,IAA4B,KAAO,EAAA,KAAA;AAAA,GAAQ,EAAA,QAAA,CAAA,CAAA;AAAA;;;;"}
1
+ {"version":3,"file":"PointCloudContext.js","sources":["../../../src/components/pointCloudView/PointCloudContext.tsx"],"sourcesContent":["import { IPointCloudBox, IPointCloudBoxList, IPolygonData } from '@labelbee/lb-utils';\nimport React, { useEffect, useMemo, useRef, useState } from 'react';\nimport {\n PointCloud,\n PointCloudAnnotation,\n ActionsHistory,\n EToolName,\n} from '@labelbee/lb-annotation';\n\ninterface IPointCloudContextInstances {\n topViewInstance?: PointCloudAnnotation;\n sideViewInstance?: PointCloudAnnotation;\n backViewInstance?: PointCloudAnnotation;\n mainViewInstance?: PointCloud;\n setTopViewInstance: (instance: PointCloudAnnotation) => void;\n setSideViewInstance: (instance: PointCloudAnnotation) => void;\n setBackViewInstance: (instance: PointCloudAnnotation) => void;\n setMainViewInstance: (instance: PointCloud) => void;\n}\n\ntype AttrPanelLayout = '' | 'left' | 'right';\n\nexport interface IPointCloudContext extends IPointCloudContextInstances {\n pointCloudBoxList: IPointCloudBoxList;\n displayPointCloudList: IPointCloudBoxList;\n selectedIDs: string[];\n setSelectedIDs: (ids?: string[] | string) => void;\n valid: boolean;\n setPointCloudResult: (resultList: IPointCloudBoxList) => void;\n selectedPointCloudBox?: IPointCloudBox;\n setPointCloudValid: (valid?: boolean) => void;\n addSelectedID: (selectedID: string) => void;\n selectedAllBoxes: () => void;\n selectedID: string;\n addPointCloudBox: (boxParams: IPointCloudBox) => IPointCloudBox[];\n\n polygonList: IPolygonData[];\n setPolygonList: (polygonList: IPolygonData[]) => void;\n\n zoom: number;\n setZoom: (zoom: number) => void;\n\n history: ActionsHistory; // Operation History\n hideAttributes: string[];\n setHideAttributes: (hideAttrs: string[]) => void;\n toggleAttributesVisible: (attribute: string) => void;\n reRender: (_displayPointCloudList: IPointCloudBoxList, _polygonList: IPolygonData[]) => void;\n attrPanelLayout: AttrPanelLayout;\n setAttrPanelLayout: (layout: AttrPanelLayout) => void;\n\n syncAllViewPointCloudColor: (newPointCloudList?: IPointCloudBox[]) => void;\n\n defaultAttribute: string;\n setDefaultAttribute: (defaultAttribute: string) => void;\n\n pointCloudPattern: EToolName.Rect | EToolName.Polygon | EToolName.Point | EToolName.Line;\n setPointCloudPattern: (toolName: EToolName.Rect | EToolName.Polygon | EToolName.Point | EToolName.Line) => void;\n selectSpecAttr: (attr: string) => void;\n}\n\nexport const PointCloudContext = React.createContext<IPointCloudContext>({\n pointCloudBoxList: [],\n displayPointCloudList: [],\n polygonList: [],\n selectedID: '',\n selectedIDs: [],\n valid: true,\n setSelectedIDs: () => {},\n setPointCloudResult: () => {},\n setPointCloudValid: () => {},\n setTopViewInstance: () => {},\n setSideViewInstance: () => {},\n setBackViewInstance: () => {},\n setMainViewInstance: () => {},\n addSelectedID: () => {},\n selectedAllBoxes: () => {},\n addPointCloudBox: () => {\n return [];\n },\n setPolygonList: () => {},\n\n zoom: 1,\n setZoom: () => {},\n history: new ActionsHistory(),\n hideAttributes: [],\n setHideAttributes: () => {},\n toggleAttributesVisible: () => {},\n reRender: () => {},\n setAttrPanelLayout: () => {},\n attrPanelLayout: '',\n syncAllViewPointCloudColor: () => {},\n\n defaultAttribute: '',\n setDefaultAttribute: () => {},\n\n pointCloudPattern: EToolName.Rect,\n setPointCloudPattern: () => {},\n selectSpecAttr: () => {},\n});\n\nexport const PointCloudProvider: React.FC<{}> = ({ children }) => {\n const [pointCloudBoxList, setPointCloudResult] = useState<IPointCloudBoxList>([]);\n const [polygonList, setPolygonList] = useState<IPolygonData[]>([]);\n const [selectedIDs, setSelectedIDsState] = useState<string[]>([]);\n const [valid, setValid] = useState<boolean>(true);\n const [zoom, setZoom] = useState<number>(1);\n const [topViewInstance, setTopViewInstance] = useState<PointCloudAnnotation>();\n const [sideViewInstance, setSideViewInstance] = useState<PointCloudAnnotation>();\n const [backViewInstance, setBackViewInstance] = useState<PointCloudAnnotation>();\n const [mainViewInstance, setMainViewInstance] = useState<PointCloud>();\n const [defaultAttribute, setDefaultAttribute] = useState('');\n const [pointCloudPattern, setPointCloudPattern] = useState<EToolName.Rect | EToolName.Polygon | EToolName.Point | EToolName.Line>(\n EToolName.Rect,\n );\n const history = useRef(new ActionsHistory()).current;\n const [hideAttributes, setHideAttributes] = useState<string[]>([]);\n const [attrPanelLayout, setAttrPanelLayout] = useState<AttrPanelLayout>('');\n\n const selectedID = useMemo(() => {\n return selectedIDs.length === 1 ? selectedIDs[0] : '';\n }, [selectedIDs]);\n\n const ptCtx = useMemo(() => {\n const selectedPointCloudBox = pointCloudBoxList.find((v) => v.id === selectedID);\n\n const addPointCloudBox = (box: IPointCloudBox) => {\n const newPointCloudList = pointCloudBoxList.concat(box);\n setPointCloudResult(newPointCloudList);\n return newPointCloudList;\n };\n\n const setPointCloudValid = (valid?: boolean) => {\n setValid(valid === false ? false : true);\n };\n\n const setSelectedIDs = (selectedIDs?: string[] | string) => {\n if (selectedIDs === undefined) {\n setSelectedIDsState([]);\n }\n\n if (typeof selectedIDs === 'string') {\n setSelectedIDsState([selectedIDs]);\n }\n\n if (Array.isArray(selectedIDs)) {\n setSelectedIDsState(Array.from(new Set(selectedIDs)));\n }\n };\n\n /**\n * If selectedID existed, remove selectedID from selectedIDs\n * If selectedID not existed, add selectedID to selectedIDs\n * @param selectedID\n */\n const addSelectedID = (selectedID: string) => {\n if (selectedIDs.includes(selectedID)) {\n setSelectedIDs(selectedIDs.filter((i) => i !== selectedID));\n } else {\n setSelectedIDs([...selectedIDs, selectedID]);\n }\n };\n\n const selectedAllBoxes = () => {\n setSelectedIDs(pointCloudBoxList.map((i) => i.id));\n };\n\n const selectSpecAttr = (attr: string) => {\n setSelectedIDs(pointCloudBoxList.filter((i) => i.attribute === attr).map((i) => i.id));\n };\n\n const displayPointCloudList = pointCloudBoxList.filter(\n (i) => !hideAttributes.includes(i.attribute),\n );\n\n const toggleAttributesVisible = (tAttribute: string) => {\n if (hideAttributes.includes(tAttribute)) {\n setHideAttributes(hideAttributes.filter((attribute) => attribute !== tAttribute));\n } else {\n const updatedHideAttributes = hideAttributes.concat(tAttribute);\n setHideAttributes(updatedHideAttributes);\n }\n };\n\n const reRender = (\n _displayPointCloudList: IPointCloudBoxList = displayPointCloudList,\n _polygonList: IPolygonData[] = polygonList,\n ) => {\n pointCloudBoxList.forEach((v) => {\n mainViewInstance?.removeObjectByName(v.id);\n });\n\n topViewInstance?.updatePolygonList(_displayPointCloudList, _polygonList);\n mainViewInstance?.generateBoxes(_displayPointCloudList);\n syncAllViewPointCloudColor(_displayPointCloudList);\n };\n\n /**\n * Synchronize the highlighted pointCloud for all views.\n * @param pointCloudList\n */\n\n const syncAllViewPointCloudColor = (pointCloudList?: IPointCloudBox[]) => {\n const colorPromise = mainViewInstance?.highlightOriginPointCloud(pointCloudList);\n return new Promise((resolve) => {\n colorPromise?.then((color) => {\n [topViewInstance].forEach((instance) => {\n if (color) {\n instance?.pointCloudInstance?.updateColor(color);\n resolve({ color });\n }\n });\n // TODO: Sync sideView & backView Color.\n });\n });\n };\n\n return {\n selectedID,\n pointCloudBoxList,\n displayPointCloudList,\n selectedIDs,\n setPointCloudResult,\n setSelectedIDs,\n addPointCloudBox,\n valid,\n selectedPointCloudBox,\n setPointCloudValid,\n addSelectedID,\n selectedAllBoxes,\n topViewInstance,\n setTopViewInstance,\n sideViewInstance,\n setSideViewInstance,\n backViewInstance,\n setBackViewInstance,\n mainViewInstance,\n setMainViewInstance,\n polygonList,\n setPolygonList,\n zoom,\n setZoom,\n history,\n toggleAttributesVisible,\n hideAttributes,\n setHideAttributes,\n reRender,\n attrPanelLayout,\n setAttrPanelLayout,\n syncAllViewPointCloudColor,\n defaultAttribute,\n setDefaultAttribute,\n pointCloudPattern,\n setPointCloudPattern,\n selectSpecAttr,\n };\n }, [\n valid,\n selectedIDs,\n pointCloudBoxList,\n polygonList,\n topViewInstance,\n sideViewInstance,\n backViewInstance,\n mainViewInstance,\n zoom,\n hideAttributes,\n attrPanelLayout,\n defaultAttribute,\n pointCloudPattern,\n ]);\n\n const updateSelectedIDsAndRenderAfterHide = () => {\n const pointCloudForFilteredList = pointCloudBoxList.filter((i) =>\n hideAttributes.includes(i.attribute),\n );\n\n const { setSelectedIDs, reRender } = ptCtx;\n\n const filteredIDs = pointCloudForFilteredList.map((i) => i.id);\n\n if (filteredIDs.length > 0) {\n setSelectedIDs(selectedIDs.filter((id) => !filteredIDs.includes(id)));\n }\n\n reRender();\n };\n\n useEffect(() => {\n updateSelectedIDsAndRenderAfterHide();\n topViewInstance?.pointCloud2dOperation?.setHiddenAttributes(hideAttributes);\n }, [hideAttributes]);\n\n return <PointCloudContext.Provider value={ptCtx}>{children}</PointCloudContext.Provider>;\n};\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- import{PointCloudAnnotation as g}from"@labelbee/lb-annotation";import{getClassName as p}from"../../utils/dom.js";import{PointCloudContainer as h}from"./PointCloudLayout.js";import m,{useRef as P,useEffect as w}from"react";import{EPerspectiveView as y}from"@labelbee/lb-utils";import{PointCloudContext as v}from"./PointCloudContext.js";import{SizeInfoForView as V}from"./PointCloudInfos.js";import{connect as j}from"react-redux";import{a2MapStateToProps as b}from"../../store/annotation/map.js";import{usePointCloudViews as B}from"./hooks/usePointCloudViews.js";import{useSingleBox as E}from"./hooks/useSingleBox.js";import I from"./components/EmptyPage/index.js";import S from"../../hooks/useSize.js";import{useTranslation as O}from"react-i18next";import{LabelBeeContext as M}from"../../store/ctx.js";const N=(a,s,e=1)=>{const{width:l,height:i}=s,t={x:a.x+l*e/2,y:a.y+i*e/2},o={x:s.width/2,y:s.height/2};return{offsetX:(o.x-t.x)/e,offsetY:-(o.y-t.y)/e}},x=(a,s,e,l,i)=>{const{offsetX:t,offsetY:o}=N(a,e,s);if(i.camera.zoom=s,a){const f=Math.cos(l.rotation),n=Math.sin(l.rotation),d=t*f,r=t*n,{x:c,y:u,z:C}=i.initCameraPosition;i.camera.position.set(c-d,u-r,C+o)}i.camera.updateProjectionMatrix(),i.render()},X=({config:a,checkMode:s})=>{const e=m.useContext(v),{sideViewUpdateBox:l}=B(),{selectedBox:i}=E(),t=P(null),o=S(t),{t:f}=O();return w(()=>{if(t.current){const n={width:t.current.clientWidth,height:t.current.clientHeight},d=new g({container:t.current,size:n,polygonOperationProps:{showDirectionLine:!1,forbidAddNew:!0},config:a,checkMode:s});e.setSideViewInstance(d)}},[]),w(()=>{if(!o||!e.sideViewInstance)return;const{pointCloud2dOperation:n,pointCloudInstance:d}=e.sideViewInstance;n.singleOn("renderZoom",(r,c)=>{!e.selectedPointCloudBox||x(c,r,o,e.selectedPointCloudBox,d)}),n.singleOn("dragMove",({currentPos:r,zoom:c})=>{!e.selectedPointCloudBox||x(r,c,o,e.selectedPointCloudBox,d)}),n.singleOn("updatePolygonByDrag",r=>{if(e.selectedIDs.length===1&&r.length===1){const{newPolygon:c,originPolygon:u}=r[0];l(c,u)}})},[e,o]),w(()=>{var n;(n=e==null?void 0:e.sideViewInstance)==null||n.initSize(o)},[o]),m.createElement(h,{className:p("point-cloud-container","side-view"),title:f("SideView"),toolbar:m.createElement(V,{perspectiveView:y.Left})},m.createElement("div",{className:p("point-cloud-container","bottom-view-content")},m.createElement("div",{className:p("point-cloud-container","core-instance"),ref:t}),!i&&m.createElement(I,null)))};var D=j(b,null,null,{context:M})(X);export{D as default};
1
+ import{PointCloudAnnotation as g}from"@labelbee/lb-annotation";import{getClassName as p}from"../../utils/dom.js";import{PointCloudContainer as h}from"./PointCloudLayout.js";import m,{useRef as P,useEffect as w}from"react";import{EPerspectiveView as y}from"@labelbee/lb-utils";import{PointCloudContext as v}from"./PointCloudContext.js";import{SizeInfoForView as V}from"./PointCloudInfos.js";import{connect as j}from"react-redux";import{a2MapStateToProps as b}from"../../store/annotation/map.js";import{usePointCloudViews as B}from"./hooks/usePointCloudViews.js";import{useSingleBox as E}from"./hooks/useSingleBox.js";import I from"./components/EmptyPage/index.js";import S from"../../hooks/useSize.js";import{useTranslation as N}from"react-i18next";import{LabelBeeContext as O}from"../../store/ctx.js";import T from"../../utils/ToolUtils.js";const M=(a,s,e=1)=>{const{width:c,height:i}=s,t={x:a.x+c*e/2,y:a.y+i*e/2},o={x:s.width/2,y:s.height/2};return{offsetX:(o.x-t.x)/e,offsetY:-(o.y-t.y)/e}},x=(a,s,e,c,i)=>{const{offsetX:t,offsetY:o}=M(a,e,s);if(i.camera.zoom=s,a){const u=Math.cos(c.rotation),n=Math.sin(c.rotation),d=t*u,r=t*n,{x:l,y:f,z:C}=i.initCameraPosition;i.camera.position.set(l-d,f-r,C+o)}i.camera.updateProjectionMatrix(),i.render()},X=({config:a,checkMode:s})=>{const e=m.useContext(v),{sideViewUpdateBox:c}=B(),{selectedBox:i}=E(),t=P(null),o=S(t),{t:u}=N();return w(()=>{if(t.current){const n={width:t.current.clientWidth,height:t.current.clientHeight},d=new g({container:t.current,size:n,polygonOperationProps:{showDirectionLine:!1,forbidAddNew:!0},config:a,checkMode:s,toolName:T.getPointCloudToolList()});e.setSideViewInstance(d)}},[]),w(()=>{if(!o||!e.sideViewInstance)return;const{pointCloud2dOperation:n,pointCloudInstance:d}=e.sideViewInstance;n.singleOn("renderZoom",(r,l)=>{!e.selectedPointCloudBox||x(l,r,o,e.selectedPointCloudBox,d)}),n.singleOn("dragMove",({currentPos:r,zoom:l})=>{!e.selectedPointCloudBox||x(r,l,o,e.selectedPointCloudBox,d)}),n.singleOn("updatePolygonByDrag",r=>{if(e.selectedIDs.length===1&&r.length===1){const{newPolygon:l,originPolygon:f}=r[0];c(l,f)}})},[e,o]),w(()=>{var n;(n=e==null?void 0:e.sideViewInstance)==null||n.initSize(o)},[o]),m.createElement(h,{className:p("point-cloud-container","side-view"),title:u("SideView"),toolbar:m.createElement(V,{perspectiveView:y.Left})},m.createElement("div",{className:p("point-cloud-container","bottom-view-content")},m.createElement("div",{className:p("point-cloud-container","core-instance"),ref:t}),!i&&m.createElement(I,null)))};var D=j(b,null,null,{context:O})(X);export{D as default};