@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.
- package/dist/App.js +1 -1
- package/dist/assets/predictTracking/icon.svg.js +1 -0
- package/dist/components/pointCloudView/PointCloudBackView.js +1 -1
- package/dist/components/pointCloudView/PointCloudSideView.js +1 -1
- package/dist/components/pointCloudView/PointCloudTopView.js +1 -1
- package/dist/components/pointCloudView/hooks/usePointCloudViews.js +1 -1
- package/dist/components/pointCloudView/hooks/useStatus.js +1 -1
- package/dist/components/pointCloudView/index.js +1 -1
- package/dist/components/predictTracking/index.js +1 -0
- package/dist/components/predictTracking/predictTrackingIcon/index.js +1 -0
- package/dist/components/predictTracking/previewResult/index.js +1 -0
- package/dist/components/predictTracking/previewResult/util.js +1 -0
- package/dist/constant/index.js +1 -1
- package/dist/data/Style.js +1 -1
- package/dist/data/enums/ToolType.js +1 -1
- package/dist/index.css +83 -1
- package/dist/index.js +1 -1
- package/dist/store/Actions.js +1 -1
- package/dist/store/annotation/actionCreators.js +1 -1
- package/dist/store/annotation/reducer.js +1 -1
- package/dist/types/App.d.ts +1 -0
- package/dist/types/components/pointCloudView/PointCloudContext.d.ts +2 -2
- package/dist/types/components/pointCloudView/PointCloudTopView.d.ts +1 -0
- package/dist/types/components/pointCloudView/hooks/usePointCloudViews.d.ts +7 -3
- package/dist/types/components/pointCloudView/hooks/useStatus.d.ts +1 -1
- package/dist/types/components/pointCloudView/index.d.ts +1 -0
- package/dist/types/components/predictTracking/index.d.ts +2 -0
- package/dist/types/components/predictTracking/predictTrackingIcon/index.d.ts +6 -0
- package/dist/types/components/predictTracking/previewResult/index.d.ts +9 -0
- package/dist/types/components/predictTracking/previewResult/util.d.ts +43 -0
- package/dist/types/constant/index.d.ts +1 -0
- package/dist/types/data/enums/ToolType.d.ts +4 -1
- package/dist/types/index.d.ts +2 -1
- package/dist/types/store/Actions.d.ts +3 -0
- package/dist/types/store/annotation/actionCreators.d.ts +4 -0
- package/dist/types/store/annotation/reducer.d.ts +2 -0
- package/dist/types/store/annotation/types.d.ts +5 -0
- package/dist/types/utils/ToolUtils.d.ts +2 -0
- package/dist/utils/ToolUtils.js +1 -1
- package/dist/views/MainView/index.js +1 -1
- package/dist/views/MainView/sidebar/TextAreaFormat/index.js +1 -1
- package/dist/views/MainView/sidebar/ToolIcons.js +1 -1
- package/dist/views/MainView/sidebar/index.js +1 -1
- package/dist/views/MainView/toolHeader/index.js +1 -1
- package/es/App.js +1 -1
- package/es/App.js.map +1 -1
- package/es/assets/predictTracking/icon.svg.js +1 -0
- package/es/assets/predictTracking/icon.svg.js.map +1 -0
- package/es/components/pointCloudView/PointCloudBackView.js +1 -1
- package/es/components/pointCloudView/PointCloudBackView.js.map +1 -1
- package/es/components/pointCloudView/PointCloudContext.js.map +1 -1
- package/es/components/pointCloudView/PointCloudSideView.js +1 -1
- package/es/components/pointCloudView/PointCloudSideView.js.map +1 -1
- package/es/components/pointCloudView/PointCloudTopView.js +1 -1
- package/es/components/pointCloudView/PointCloudTopView.js.map +1 -1
- package/es/components/pointCloudView/hooks/usePointCloudViews.js +1 -1
- package/es/components/pointCloudView/hooks/usePointCloudViews.js.map +1 -1
- package/es/components/pointCloudView/hooks/useStatus.js +1 -1
- package/es/components/pointCloudView/hooks/useStatus.js.map +1 -1
- package/es/components/pointCloudView/index.js +1 -1
- package/es/components/pointCloudView/index.js.map +1 -1
- package/es/components/predictTracking/index.js +1 -0
- package/es/components/predictTracking/index.js.map +1 -0
- package/es/components/predictTracking/predictTrackingIcon/index.js +1 -0
- package/es/components/predictTracking/predictTrackingIcon/index.js.map +1 -0
- package/es/components/predictTracking/previewResult/index.js +1 -0
- package/es/components/predictTracking/previewResult/index.js.map +1 -0
- package/es/components/predictTracking/previewResult/util.js +1 -0
- package/es/components/predictTracking/previewResult/util.js.map +1 -0
- package/es/constant/index.js +1 -1
- package/es/constant/index.js.map +1 -1
- package/es/data/Style.js +1 -1
- package/es/data/Style.js.map +1 -1
- package/es/data/enums/ToolType.js +1 -1
- package/es/data/enums/ToolType.js.map +1 -1
- package/es/index.css +83 -1
- package/es/index.js +1 -1
- package/es/index.js.map +1 -1
- package/es/store/Actions.js +1 -1
- package/es/store/Actions.js.map +1 -1
- package/es/store/annotation/actionCreators.js +1 -1
- package/es/store/annotation/actionCreators.js.map +1 -1
- package/es/store/annotation/reducer.js +1 -1
- package/es/store/annotation/reducer.js.map +1 -1
- package/es/utils/ToolUtils.js +1 -1
- package/es/utils/ToolUtils.js.map +1 -1
- package/es/views/MainView/index.js +1 -1
- package/es/views/MainView/index.js.map +1 -1
- package/es/views/MainView/sidebar/TextAreaFormat/index.js +1 -1
- package/es/views/MainView/sidebar/TextAreaFormat/index.js.map +1 -1
- package/es/views/MainView/sidebar/ToolIcons.js +1 -1
- package/es/views/MainView/sidebar/ToolIcons.js.map +1 -1
- package/es/views/MainView/sidebar/index.js +1 -1
- package/es/views/MainView/sidebar/index.js.map +1 -1
- package/es/views/MainView/toolHeader/index.js +1 -1
- package/es/views/MainView/toolHeader/index.js.map +1 -1
- 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) =>
|
|
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: ({
|
|
42
|
-
|
|
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,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 {};
|
|
@@ -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,
|
package/dist/types/index.d.ts
CHANGED
|
@@ -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;
|
package/dist/utils/ToolUtils.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var lbAnnotation=require("@labelbee/lb-annotation");const{EVideoToolName,EPointCloudName}=lbAnnotation.cTool;class ToolUtils{static isVideoTool(
|
|
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$
|
|
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:
|
|
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),
|
|
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
|
|
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
|
+
"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
|
|
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
|
|
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
|
|
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":"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"}
|
|
@@ -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":"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"}
|
|
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":";;;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 +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
|
|
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};
|