@labelbee/lb-components 1.6.0 → 1.6.1
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/types/components/AnnotationView/index.d.ts +1 -1
- package/dist/types/components/pointCloudView/hooks/usePointCloudViews.d.ts +2 -2
- package/dist/types/components/videoPlayer/TagToolInstanceAdaptor.d.ts +1 -1
- package/dist/types/components/videoPlayer/index.d.ts +1 -1
- package/dist/types/components/videoPlayer/types.d.ts +1 -1
- package/dist/types/store/annotation/actionCreators.d.ts +4 -4
- package/dist/types/store/annotation/reducer.d.ts +1 -1
- package/dist/types/store/annotation/types.d.ts +3 -3
- package/dist/types/store/imgAttribute/types.d.ts +1 -1
- package/dist/types/store/index.d.ts +1 -1
- package/dist/types/store/toolStyle/types.d.ts +1 -1
- package/dist/types/utils/PageOperator.d.ts +1 -1
- package/dist/types/utils/dom.d.ts +3 -3
- package/dist/types/views/MainView/sidebar/ToolStyle/index.d.ts +1 -1
- package/dist/types/views/MainView/toolFooter/index.d.ts +1 -1
- package/dist/types/views/MainView/toolHeader/ExportData/index.d.ts +1 -1
- package/dist/views/MainView/annotationOperation/index.js +1 -1
- package/dist/views/MainView/sidebar/index.js +1 -1
- package/es/assets/annotation/pointCloudTool/unitAttribute.svg.js +4 -0
- package/es/assets/annotation/pointCloudTool/unitAttribute.svg.js.map +1 -0
- package/es/assets/annotation/pointCloudTool/unitAttributeForbid.svg.js +4 -0
- package/es/assets/annotation/pointCloudTool/unitAttributeForbid.svg.js.map +1 -0
- package/es/assets/annotation/pointCloudTool/unitAttributeHover.svg.js +4 -0
- package/es/assets/annotation/pointCloudTool/unitAttributeHover.svg.js.map +1 -0
- package/es/components/pointCloudView/components/UnifiedParamsModal/index.js +228 -0
- package/es/components/pointCloudView/components/UnifiedParamsModal/index.js.map +1 -0
- package/es/components/pointCloudView/components/UnifyParamsModal/index.js +234 -0
- package/es/components/pointCloudView/components/UnifyParamsModal/index.js.map +1 -0
- package/es/components/pointCloudView/hooks/useAttribute.js +44 -0
- package/es/components/pointCloudView/hooks/useAttribute.js.map +1 -0
- package/es/components/pointCloudView/hooks/useConfig.js +16 -11
- package/es/components/pointCloudView/hooks/useConfig.js.map +1 -1
- package/es/components/pointCloudView/hooks/useHistory.js +121 -0
- package/es/components/pointCloudView/hooks/useHistory.js.map +1 -0
- package/es/views/MainView/annotationOperation/index.js +1 -1
- package/es/views/MainView/annotationOperation/index.js.map +1 -1
- package/es/views/MainView/sidebar/GeneralOperation/useOperationList.js +1 -1
- package/es/views/MainView/sidebar/PointCloudToolSidebar/components/batchUpdateModal/index.js +122 -0
- package/es/views/MainView/sidebar/PointCloudToolSidebar/components/batchUpdateModal/index.js.map +1 -0
- package/package.json +3 -4
- package/LICENSE +0 -203
|
@@ -19,7 +19,7 @@ export declare const transferCanvas2World: (currentPos: {
|
|
|
19
19
|
x: number;
|
|
20
20
|
y: number;
|
|
21
21
|
};
|
|
22
|
-
export declare const topViewPolygon2PointCloud: (newPolygon: any, size: ISize, pointCloud?: PointCloud
|
|
22
|
+
export declare const topViewPolygon2PointCloud: (newPolygon: any, size: ISize, pointCloud?: PointCloud, selectedPointCloudBox?: IPointCloudBox, defaultValue?: {
|
|
23
23
|
[v: string]: any;
|
|
24
24
|
} | undefined) => Omit<IPointCloudBox, "trackID">;
|
|
25
25
|
/**
|
|
@@ -39,7 +39,7 @@ export declare const synchronizeBackView: (boxParams: IPointCloudBox, newPolygon
|
|
|
39
39
|
* @param boxParams
|
|
40
40
|
* @param newPolygon TODO! Need to add type
|
|
41
41
|
*/
|
|
42
|
-
export declare const synchronizeTopView: (newBoxParams: IPointCloudBox, newPolygon: any, topViewInstance?: PointCloudAnnotation
|
|
42
|
+
export declare const synchronizeTopView: (newBoxParams: IPointCloudBox, newPolygon: any, topViewInstance?: PointCloudAnnotation, mainViewInstance?: PointCloud) => void;
|
|
43
43
|
export declare const usePointCloudViews: () => {
|
|
44
44
|
topViewAddBox: () => void;
|
|
45
45
|
topViewSelectedChanged: () => void;
|
|
@@ -40,7 +40,7 @@ export declare class TagToolInstanceAdaptor extends React.Component<IVideoTagIns
|
|
|
40
40
|
};
|
|
41
41
|
get currentTagResult(): any;
|
|
42
42
|
get valid(): boolean;
|
|
43
|
-
clearResult: (sendMsg?: boolean, value?: string
|
|
43
|
+
clearResult: (sendMsg?: boolean, value?: string) => void;
|
|
44
44
|
exportData: () => (any[] | {
|
|
45
45
|
valid: boolean;
|
|
46
46
|
duration: number;
|
|
@@ -9,7 +9,7 @@ export declare const VideoPlayerCtx: React.Context<{
|
|
|
9
9
|
videoRef?: React.RefObject<HTMLVideoElement> | null | undefined;
|
|
10
10
|
isPlay: boolean;
|
|
11
11
|
playPause: () => void;
|
|
12
|
-
updateNextPlaybackRate: (isForward?: boolean
|
|
12
|
+
updateNextPlaybackRate: (isForward?: boolean) => void;
|
|
13
13
|
setCurrentTime: (time: number) => void;
|
|
14
14
|
playbackRate: number;
|
|
15
15
|
currentTime: number;
|
|
@@ -36,12 +36,12 @@ export declare function InitTaskData({ onSubmit, onSave, onPageChange, onStepCha
|
|
|
36
36
|
*/
|
|
37
37
|
export declare function UpdateInjectFunc({ onSubmit, onSave, onPageChange, onStepChange, getFileData, pageSize, loadFileList, stepList, beforeRotate }: any): any;
|
|
38
38
|
/** 切换到下一步 */
|
|
39
|
-
export declare const ToNextStep: (pageNumber?: number
|
|
39
|
+
export declare const ToNextStep: (pageNumber?: number) => (dispatch: any, getState: any) => any[];
|
|
40
40
|
/**
|
|
41
41
|
* 更新当前操作的步骤
|
|
42
42
|
* @param {number} toStep
|
|
43
43
|
*/
|
|
44
|
-
export declare const UpdateProcessingStep: (toStep: number, index?: number
|
|
44
|
+
export declare const UpdateProcessingStep: (toStep: number, index?: number) => (dispatch: any, getState: any) => any[];
|
|
45
45
|
/**
|
|
46
46
|
* 提交当前的文件数据
|
|
47
47
|
* @param submitType
|
|
@@ -63,7 +63,7 @@ export declare const PageJump: (toIndex: number, triggerEventAfterIndexChanged?:
|
|
|
63
63
|
* @param nextIndex 需要加载的图片index
|
|
64
64
|
* @param isInitial // 是否为初始化加载
|
|
65
65
|
*/
|
|
66
|
-
export declare const loadImgList: (dispatch: any, getState: any, nextIndex: number, isInitial?: boolean
|
|
66
|
+
export declare const loadImgList: (dispatch: any, getState: any, nextIndex: number, isInitial?: boolean) => Promise<true | undefined>;
|
|
67
67
|
/**
|
|
68
68
|
* 判断翻页还是切换依赖数据
|
|
69
69
|
* @param dispatch
|
|
@@ -71,7 +71,7 @@ export declare const loadImgList: (dispatch: any, getState: any, nextIndex: numb
|
|
|
71
71
|
* @param pageTurningOperation
|
|
72
72
|
* @param toIndex
|
|
73
73
|
*/
|
|
74
|
-
export declare const DispatcherTurning: (dispatch: any, getState: any, pageTurningOperation: EPageTurningOperation, triggerEventAfterIndexChanged?: boolean, toIndex?: number
|
|
74
|
+
export declare const DispatcherTurning: (dispatch: any, getState: any, pageTurningOperation: EPageTurningOperation, triggerEventAfterIndexChanged?: boolean, toIndex?: number) => Promise<any>;
|
|
75
75
|
/**
|
|
76
76
|
* 保存当前页数据
|
|
77
77
|
* */
|
|
@@ -10,5 +10,5 @@ export declare const getTotalPage: (state: AnnotationState) => number;
|
|
|
10
10
|
* @param nextIndex
|
|
11
11
|
* @param nextBasicIndex
|
|
12
12
|
*/
|
|
13
|
-
export declare const LoadFileAndFileData: (nextIndex: number, nextBasicIndex?: number
|
|
13
|
+
export declare const LoadFileAndFileData: (nextIndex: number, nextBasicIndex?: number) => any;
|
|
14
14
|
export declare const annotationReducer: (state: AnnotationState | undefined, action: AnnotationActionTypes) => AnnotationState;
|
|
@@ -3,8 +3,8 @@ import { ANNOTATION_ACTIONS } from '@/store/Actions';
|
|
|
3
3
|
import { IStepInfo } from '@/types/step';
|
|
4
4
|
import { OnSubmit, IFileItem, GetFileData, OnSave, OnPageChange, OnStepChange, LoadFileList } from '@/types/data';
|
|
5
5
|
import { ESubmitType } from '@/constant';
|
|
6
|
-
export
|
|
7
|
-
export
|
|
6
|
+
export type GraphToolInstance = RectOperation | PointOperation | PolygonOperation | LineToolOperation;
|
|
7
|
+
export type ToolInstance = GraphToolInstance | TagOperation | TextToolOperation;
|
|
8
8
|
interface CommonActions {
|
|
9
9
|
type: string;
|
|
10
10
|
payload?: any;
|
|
@@ -127,5 +127,5 @@ interface UpdateGetFileList {
|
|
|
127
127
|
interface CopyBackWordResult extends CommonActions {
|
|
128
128
|
type: typeof ANNOTATION_ACTIONS.COPY_BACKWARD_RESULT;
|
|
129
129
|
}
|
|
130
|
-
export
|
|
130
|
+
export type AnnotationActionTypes = UpdateToolInstance | UpdateImgList | UpdateAnnotationConfig | SubmitFileData | LoadFileData | SetTaskConfig | InitTool | UpdateOnSubmit | UpdateOnPageChange | UpdateOnStepChange | UpdateGetFileData | UpdatePageSize | UpdateGetFileList | CopyBackWordResult | UpdateOnSave;
|
|
131
131
|
export {};
|
|
@@ -19,5 +19,5 @@ interface InitImgAttribute {
|
|
|
19
19
|
type: typeof IMAGE_ATTRIBUTE_ACTIONS.INIT_IMG_ATTRIBUTE;
|
|
20
20
|
payload: {};
|
|
21
21
|
}
|
|
22
|
-
export
|
|
22
|
+
export type ImgAttributeActionTypes = UpdateImgAttribute | InitImgAttribute;
|
|
23
23
|
export {};
|
|
@@ -19,5 +19,5 @@ interface InitToolStyleConfig {
|
|
|
19
19
|
type: typeof TOOL_STYLE_ACTIONS.INIT_TOOL_STYLE_CONFIG;
|
|
20
20
|
payload: undefined;
|
|
21
21
|
}
|
|
22
|
-
export
|
|
22
|
+
export type ToolStyleActionTypes = InitToolStyleConfig | UpdateToolStyleConfig;
|
|
23
23
|
export {};
|
|
@@ -43,6 +43,6 @@ declare class PageOperator {
|
|
|
43
43
|
* @param pageTurningOperation
|
|
44
44
|
* @param fileIndex
|
|
45
45
|
*/
|
|
46
|
-
static getNextFileIndex: (pageTurningOperation: EPageTurningOperation, pageInfo: IPageInfo, fileIndex?: number
|
|
46
|
+
static getNextFileIndex: (pageTurningOperation: EPageTurningOperation, pageInfo: IPageInfo, fileIndex?: number) => number;
|
|
47
47
|
}
|
|
48
48
|
export default PageOperator;
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { MutableRefObject } from 'react';
|
|
2
|
-
export
|
|
3
|
-
|
|
2
|
+
export type BasicTarget<T = HTMLElement> = (() => T | null) | T | null | MutableRefObject<T | null | undefined>;
|
|
3
|
+
type TargetElement = HTMLElement | Element | Document | Window;
|
|
4
4
|
export declare function getTargetElement(target?: BasicTarget<TargetElement>, defaultElement?: TargetElement): TargetElement | undefined | null;
|
|
5
5
|
/**
|
|
6
6
|
* Get class like BEM
|
|
7
7
|
* @param elm
|
|
8
8
|
* @param modify
|
|
9
9
|
*/
|
|
10
|
-
export declare const getClassName: (block: string, elm?: string
|
|
10
|
+
export declare const getClassName: (block: string, elm?: string, modify?: string) => string;
|
|
11
11
|
export {};
|
|
@@ -3,5 +3,5 @@ interface IProps {
|
|
|
3
3
|
toolStyle: ToolStyleState;
|
|
4
4
|
config: string;
|
|
5
5
|
}
|
|
6
|
-
declare const _default: import("react-redux").ConnectedComponent<(props: IProps) => JSX.Element, import("react-redux").Omit<IProps, "
|
|
6
|
+
declare const _default: import("react-redux").ConnectedComponent<(props: IProps) => JSX.Element, import("react-redux").Omit<IProps, "config" | "toolStyle">>;
|
|
7
7
|
export default _default;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { RenderFooter } from '@/types/main';
|
|
2
2
|
import { IStepInfo } from '@/types/step';
|
|
3
3
|
import React from 'react';
|
|
4
|
-
export
|
|
4
|
+
export type FooterTheme = 'light' | 'dark';
|
|
5
5
|
interface IProps {
|
|
6
6
|
totalPage: number;
|
|
7
7
|
imgIndex: number;
|
|
@@ -11,5 +11,5 @@ interface IProps {
|
|
|
11
11
|
}
|
|
12
12
|
declare const _default: import("react-redux").ConnectedComponent<React.FC<IProps>, import("react-redux").Omit<IProps & {
|
|
13
13
|
children?: React.ReactNode;
|
|
14
|
-
}, "imgList" | "
|
|
14
|
+
}, "imgList" | "toolInstance" | "onSubmit" | "dispatch">>;
|
|
15
15
|
export default _default;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var index=require("../../../index.js"),ctx=require("../../../store/ctx.js"),es=require("antd/es"),_=require("lodash"),React=require("react"),reactRedux=require("react-redux"),FileError=require("../../../components/fileException/FileError.js"),useSize=require("../../../hooks/useSize.js"),actionCreators=require("../../../store/toolStyle/actionCreators.js"),lbAnnotation=require("@labelbee/lb-annotation"),lbUtils=require("@labelbee/lb-utils"),StepUtils=require("../../../utils/StepUtils.js");function _interopDefaultLegacy(
|
|
1
|
+
"use strict";var index=require("../../../index.js"),ctx=require("../../../store/ctx.js"),es=require("antd/es"),_=require("lodash"),React=require("react"),reactRedux=require("react-redux"),FileError=require("../../../components/fileException/FileError.js"),useSize=require("../../../hooks/useSize.js"),actionCreators=require("../../../store/toolStyle/actionCreators.js"),lbAnnotation=require("@labelbee/lb-annotation"),lbUtils=require("@labelbee/lb-utils"),StepUtils=require("../../../utils/StepUtils.js");function _interopDefaultLegacy(t){return t&&typeof t=="object"&&"default"in t?t:{default:t}}var ___default=_interopDefaultLegacy(_),React__default=_interopDefaultLegacy(React),__defProp=Object.defineProperty,__defProps=Object.defineProperties,__getOwnPropDescs=Object.getOwnPropertyDescriptors,__getOwnPropSymbols=Object.getOwnPropertySymbols,__hasOwnProp=Object.prototype.hasOwnProperty,__propIsEnum=Object.prototype.propertyIsEnumerable,__defNormalProp=(t,r,o)=>r in t?__defProp(t,r,{enumerable:!0,configurable:!0,writable:!0,value:o}):t[r]=o,__spreadValues=(t,r)=>{for(var o in r||(r={}))__hasOwnProp.call(r,o)&&__defNormalProp(t,o,r[o]);if(__getOwnPropSymbols)for(var o of __getOwnPropSymbols(r))__propIsEnum.call(r,o)&&__defNormalProp(t,o,r[o]);return t},__spreadProps=(t,r)=>__defProps(t,__getOwnPropDescs(r));const AnnotationOperation=t=>{const[,r]=React.useState(0),{imgAttribute:o,toolStyle:s,toolInstance:e,annotationEngine:n,imgList:f,imgIndex:b,dataInjectionAtCreation:d,renderEnhance:g,customRenderStyle:c,stepList:v,step:y,drawLayerSlot:p}=t,[E,m]=React.useState({zoom:1,currentPos:{x:0,y:0}}),S=React.useRef(null),I=React.useRef(null),l=useSize(S);React.useEffect(()=>{index.store.dispatch(actionCreators.InitToolStyleConfig())},[]),React.useEffect(()=>{if(!!n){switch(lbUtils.i18n.language){case"cn":case"en":n.setLang(lbUtils.i18n.language);break}n==null||n.setDataInjectionAtCreation(d),n==null||n.setRenderEnhance(g),c&&(n==null||n.setCustomRenderStyle(c))}},[n,d,g,c]),React.useEffect(()=>{const a=(i,P)=>{m({zoom:i,currentPos:P})},u=i=>{m(i)};return e&&(e.singleOn("messageError",i=>{es.message.error(i)}),e.singleOn("messageInfo",i=>{es.message.info(i)}),e.singleOn("changeAnnotationShow",()=>{r(i=>i+1)}),e.on("renderZoom",a),e.on("dragMove",u)),()=>{e&&(e.unbind("renderZoom",a),e.unbind("dragMove",u))}},[e]),React.useEffect(()=>{var a;(n==null?void 0:n.setImgAttribute)?n.setImgAttribute(o):(a=e==null?void 0:e.setImgAttribute)==null||a.call(e,o)},[o,n]),React.useEffect(()=>{e&&e.setStyle(s),n&&n.setStyle(s)},[s]),React.useEffect(()=>{(e==null?void 0:e.setSize)&&e.setSize(l),n&&n.setSize(l)},[l]),React.useEffect(()=>{const a=StepUtils.getCurrentStepInfo(y,v);e==null||e.setConfig(a.config)},[v]);const O=()=>{const a=f==null?void 0:f[b];!(a==null?void 0:a.url)||lbAnnotation.ImgUtils.load(a.url).then(u=>{n.setImgNode(u)})};return React__default.default.createElement("div",{ref:S,className:"annotationOperation"},React__default.default.createElement("div",{className:"canvas",ref:I,style:l,id:"toolContainer"},p==null?void 0:p(E)),(e==null?void 0:e.isImgError)===!0&&React__default.default.createElement(FileError,__spreadProps(__spreadValues({},l),{reloadImage:O,backgroundColor:"#e2e2e2",ignoreOffsetY:!0})))},mapStateToProps=t=>{const r=___default.default.pickBy(t.annotation,(o,s)=>["imgList","imgIndex","stepList","step","toolInstance","annotationEngine","loading"].includes(s));return __spreadValues({imgAttribute:t.imgAttribute,toolStyle:t.toolStyle},r)};var AnnotationOperation$1=reactRedux.connect(mapStateToProps,null,null,{context:ctx.LabelBeeContext})(AnnotationOperation);module.exports=AnnotationOperation$1;
|
|
@@ -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$
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var index=require("../../../constant/index.js"),ToolType=require("../../../data/enums/ToolType.js"),StepUtils=require("../../../utils/StepUtils.js"),es=require("antd/es"),React=require("react"),reactI18next=require("react-i18next"),index$8=require("./AnnotationText/index.js"),index$2=require("./ClearIcon/index.js"),index$6=require("./GeneralOperation/index.js"),index$3=require("./ImgAttributeInfo/index.js"),index$7=require("./SwitchAttributeList/index.js"),index$1=require("./TagSidebar/index.js"),index$4=require("./TextToolSidebar/index.js"),index$5=require("./PointCloudToolSidebar/index.js"),index$a=require("./ToolStyle/index.js"),lbAnnotation=require("@labelbee/lb-annotation"),index$9=require("./ScribbleSidebar/index.js"),ToolIcons=require("./ToolIcons.js"),ctx=require("../../../store/ctx.js");function _interopDefaultLegacy(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var React__default=_interopDefaultLegacy(React);const{EVideoToolName,EPointCloudName}=lbAnnotation.cTool,{Panel}=es.Collapse,sidebarCls=`${index.prefix}-sidebar`,Sidebar=({sider:e})=>{const o=ctx.useSelector(a=>StepUtils.getCurrentStepInfo(a.annotation.step,a.annotation.stepList)),t=o==null?void 0:o.tool,{t:i}=reactI18next.useTranslation();if(!t)return null;const E=a=>{const m=React__default.default.createElement(index$a,null);return React__default.default.createElement(Panel,{header:i("Style"),className:"panel",key:a},m)},u=React__default.default.createElement(ToolIcons.ToolIcons,{toolName:t,onChange:()=>{}}),n=React__default.default.createElement(index$7,null),d=React__default.default.createElement(index$8,null),c=React__default.default.createElement(es.Collapse,{defaultActiveKey:["1","imgAttribute"],bordered:!1,expandIconPosition:"right",className:`${sidebarCls}__content`,expandIcon:index$1.expandIconFuc},E("1")),s=React__default.default.createElement(es.Collapse,{defaultActiveKey:["1","imgAttribute"],bordered:!1,expandIconPosition:"right",className:`${sidebarCls}__content`,expandIcon:index$1.expandIconFuc},React__default.default.createElement(Panel,{header:React__default.default.createElement("div",null,i("Adjust"),React__default.default.createElement(index$2,null)),className:"panel",key:"imgAttribute"},React__default.default.createElement(index$3,null))),l=React__default.default.createElement(index$6.default,null),x=React__default.default.createElement(index$1.default,null),v=React__default.default.createElement(index$4.default,null),f=React__default.default.createElement(index$9,{onChange:(a,m)=>{}}),r=React__default.default.createElement("div",{className:`${sidebarCls}__horizontal`}),p=React__default.default.createElement(index$5,null),T=React__default.default.createElement(index$6.PointCloudOperation,null);return e?typeof e=="function"?React__default.default.createElement("div",{className:`${sidebarCls}`},e({toolIcon:u,attributeList:n,annotationText:d,toolStyle:c,imageAttributeInfo:s,operation:l,tagToolSideBar:x,textToolSideBar:v,horizontal:r,pointCloudToolSidebar:p,pointCloudOperation:T,scribbleSidebar:f})):e:[ToolType.EToolName.Rect,ToolType.EToolName.Point,ToolType.EToolName.Line,ToolType.EToolName.Rect,ToolType.EToolName.Polygon].includes(t)?React__default.default.createElement("div",{className:`${sidebarCls}`},u,r,n,d,r,React__default.default.createElement("div",{className:`${sidebarCls}__content`},c,s),l):t===ToolType.EToolName.Tag?React__default.default.createElement("div",{className:`${sidebarCls}`},React__default.default.createElement(index$1.default,null)):t===EVideoToolName.VideoTagTool?React__default.default.createElement("div",{className:`${sidebarCls}`},React__default.default.createElement("div",{className:`${sidebarCls}__content`},React__default.default.createElement(index$1.default,null)),l):t===ToolType.EToolName.Text?React__default.default.createElement("div",{className:`${sidebarCls}`},React__default.default.createElement(index$4.default,null)):t===EPointCloudName.PointCloud?React__default.default.createElement("div",{className:`${sidebarCls}`},React__default.default.createElement("div",{className:`${sidebarCls}__content`},React__default.default.createElement(index$5,null)),React__default.default.createElement(index$6.PointCloudOperation,null)):t===ToolType.EToolName.ScribbleTool?React__default.default.createElement("div",{className:`${sidebarCls}`},React__default.default.createElement("div",{className:`${sidebarCls}__content`},f,n),l):null};exports.default=Sidebar,exports.sidebarCls=sidebarCls;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
var img = "data:image/svg+xml,%3csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M12.0355 1.96447L8.5 5.5L12.0354 9.03545L15.571 5.49991L12.0355 1.96447Z' stroke='%23666666' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3e %3cpath d='M18.5355 8.46447L15 12L18.5354 15.5354L22.071 11.9999L18.5355 8.46447Z' stroke='%23666666' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3e %3cpath d='M5.53553 8.46447L2 12L5.53544 15.5354L9.07098 11.9999L5.53553 8.46447Z' stroke='%23666666' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3e %3cpath d='M12.0355 14.9645L8.5 18.5L12.0354 22.0354L15.571 18.4999L12.0355 14.9645Z' stroke='%23666666' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3e%3c/svg%3e";
|
|
2
|
+
|
|
3
|
+
export { img as default };
|
|
4
|
+
//# sourceMappingURL=unitAttribute.svg.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unitAttribute.svg.js","sources":["../../../../src/assets/annotation/pointCloudTool/unitAttribute.svg"],"sourcesContent":["var img = \"data:image/svg+xml,%3csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M12.0355 1.96447L8.5 5.5L12.0354 9.03545L15.571 5.49991L12.0355 1.96447Z' stroke='%23666666' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3e %3cpath d='M18.5355 8.46447L15 12L18.5354 15.5354L22.071 11.9999L18.5355 8.46447Z' stroke='%23666666' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3e %3cpath d='M5.53553 8.46447L2 12L5.53544 15.5354L9.07098 11.9999L5.53553 8.46447Z' stroke='%23666666' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3e %3cpath d='M12.0355 14.9645L8.5 18.5L12.0354 22.0354L15.571 18.4999L12.0355 14.9645Z' stroke='%23666666' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3e%3c/svg%3e\";\n export default img;"],"names":[],"mappings":"AAAG,IAAC,GAAG,GAAG;;;;"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
var img = "data:image/svg+xml,%3csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M12.0355 1.96447L8.5 5.5L12.0354 9.03545L15.571 5.49991L12.0355 1.96447Z' stroke='%23CCCCCC' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3e %3cpath d='M18.5355 8.46447L15 12L18.5354 15.5354L22.071 11.9999L18.5355 8.46447Z' stroke='%23CCCCCC' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3e %3cpath d='M5.53553 8.46447L2 12L5.53544 15.5354L9.07098 11.9999L5.53553 8.46447Z' stroke='%23CCCCCC' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3e %3cpath d='M12.0355 14.9645L8.5 18.5L12.0354 22.0354L15.571 18.4999L12.0355 14.9645Z' stroke='%23CCCCCC' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3e%3c/svg%3e";
|
|
2
|
+
|
|
3
|
+
export { img as default };
|
|
4
|
+
//# sourceMappingURL=unitAttributeForbid.svg.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unitAttributeForbid.svg.js","sources":["../../../../src/assets/annotation/pointCloudTool/unitAttributeForbid.svg"],"sourcesContent":["var img = \"data:image/svg+xml,%3csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M12.0355 1.96447L8.5 5.5L12.0354 9.03545L15.571 5.49991L12.0355 1.96447Z' stroke='%23CCCCCC' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3e %3cpath d='M18.5355 8.46447L15 12L18.5354 15.5354L22.071 11.9999L18.5355 8.46447Z' stroke='%23CCCCCC' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3e %3cpath d='M5.53553 8.46447L2 12L5.53544 15.5354L9.07098 11.9999L5.53553 8.46447Z' stroke='%23CCCCCC' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3e %3cpath d='M12.0355 14.9645L8.5 18.5L12.0354 22.0354L15.571 18.4999L12.0355 14.9645Z' stroke='%23CCCCCC' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3e%3c/svg%3e\";\n export default img;"],"names":[],"mappings":"AAAG,IAAC,GAAG,GAAG;;;;"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
var img = "data:image/svg+xml,%3csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M12.0355 1.96447L8.5 5.5L12.0354 9.03545L15.571 5.49991L12.0355 1.96447Z' stroke='%23666FFF' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3e %3cpath d='M18.5355 8.46447L15 12L18.5354 15.5354L22.071 11.9999L18.5355 8.46447Z' stroke='%23666FFF' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3e %3cpath d='M5.53553 8.46447L2 12L5.53544 15.5354L9.07098 11.9999L5.53553 8.46447Z' stroke='%23666FFF' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3e %3cpath d='M12.0355 14.9645L8.5 18.5L12.0354 22.0354L15.571 18.4999L12.0355 14.9645Z' stroke='%23666FFF' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3e%3c/svg%3e";
|
|
2
|
+
|
|
3
|
+
export { img as default };
|
|
4
|
+
//# sourceMappingURL=unitAttributeHover.svg.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unitAttributeHover.svg.js","sources":["../../../../src/assets/annotation/pointCloudTool/unitAttributeHover.svg"],"sourcesContent":["var img = \"data:image/svg+xml,%3csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M12.0355 1.96447L8.5 5.5L12.0354 9.03545L15.571 5.49991L12.0355 1.96447Z' stroke='%23666FFF' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3e %3cpath d='M18.5355 8.46447L15 12L18.5354 15.5354L22.071 11.9999L18.5355 8.46447Z' stroke='%23666FFF' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3e %3cpath d='M5.53553 8.46447L2 12L5.53544 15.5354L9.07098 11.9999L5.53553 8.46447Z' stroke='%23666FFF' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3e %3cpath d='M12.0355 14.9645L8.5 18.5L12.0354 22.0354L15.571 18.4999L12.0355 14.9645Z' stroke='%23666FFF' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3e%3c/svg%3e\";\n export default img;"],"names":[],"mappings":"AAAG,IAAC,GAAG,GAAG;;;;"}
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
import { ESubmitType } from '../../../../constant/index.js';
|
|
2
|
+
import { ToSubmitFileData, BatchUpdateResultByTrackID } from '../../../../store/annotation/actionCreators.js';
|
|
3
|
+
import { LabelBeeContext, useDispatch } from '../../../../store/ctx.js';
|
|
4
|
+
import { Form, Modal, InputNumber, Select, Popover, message } from 'antd';
|
|
5
|
+
import React, { useState, useEffect, useCallback } from 'react';
|
|
6
|
+
import { useTranslation } from 'react-i18next';
|
|
7
|
+
import { QuestionCircleOutlined } from '@ant-design/icons';
|
|
8
|
+
import { PointCloudUtils } from '@labelbee/lb-utils';
|
|
9
|
+
import { connect } from 'react-redux';
|
|
10
|
+
import { useSingleBox } from '../../hooks/useSingleBox.js';
|
|
11
|
+
import { MathUtils } from '@labelbee/lb-annotation';
|
|
12
|
+
|
|
13
|
+
var __defProp = Object.defineProperty;
|
|
14
|
+
var __defProps = Object.defineProperties;
|
|
15
|
+
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
16
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
17
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
18
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
19
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, {enumerable: true, configurable: true, writable: true, value}) : obj[key] = value;
|
|
20
|
+
var __spreadValues = (a, b) => {
|
|
21
|
+
for (var prop in b || (b = {}))
|
|
22
|
+
if (__hasOwnProp.call(b, prop))
|
|
23
|
+
__defNormalProp(a, prop, b[prop]);
|
|
24
|
+
if (__getOwnPropSymbols)
|
|
25
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
26
|
+
if (__propIsEnum.call(b, prop))
|
|
27
|
+
__defNormalProp(a, prop, b[prop]);
|
|
28
|
+
}
|
|
29
|
+
return a;
|
|
30
|
+
};
|
|
31
|
+
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
32
|
+
const layout = {
|
|
33
|
+
labelCol: {span: 8},
|
|
34
|
+
wrapperCol: {span: 16}
|
|
35
|
+
};
|
|
36
|
+
const defaultNumberRules = [{required: true, message: "\u8BF7\u586B\u5199\u4E00\u4E2A\u6570\u5B57"}];
|
|
37
|
+
const defaultSelectedAttribute = [{required: true, message: "\u8BF7\u9009\u62E9\u4E3B\u5C5E\u6027"}];
|
|
38
|
+
const PrefixTag = ({text}) => {
|
|
39
|
+
return /* @__PURE__ */ React.createElement("span", {
|
|
40
|
+
style: {
|
|
41
|
+
borderRadius: "4px 0px 0px 4px",
|
|
42
|
+
padding: "0px 12px",
|
|
43
|
+
background: "#FAFAFA",
|
|
44
|
+
border: "1px solid rgb(217 217 217)",
|
|
45
|
+
borderRight: "0",
|
|
46
|
+
display: "flex",
|
|
47
|
+
alignItems: "center",
|
|
48
|
+
height: 32
|
|
49
|
+
}
|
|
50
|
+
}, text);
|
|
51
|
+
};
|
|
52
|
+
const UnifiedParamsModal = ({id, visible, onCancel, config, imgList, imgIndex}) => {
|
|
53
|
+
const dispatch = useDispatch();
|
|
54
|
+
const {selectedBox} = useSingleBox();
|
|
55
|
+
const [size, setSize] = useState();
|
|
56
|
+
const [form] = Form.useForm();
|
|
57
|
+
const {t} = useTranslation();
|
|
58
|
+
useEffect(() => {
|
|
59
|
+
if (visible === false) {
|
|
60
|
+
form.resetFields();
|
|
61
|
+
setSize(void 0);
|
|
62
|
+
}
|
|
63
|
+
}, [visible]);
|
|
64
|
+
const onFinish = (values) => {
|
|
65
|
+
var _a;
|
|
66
|
+
if (!id) {
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
if (!size) {
|
|
70
|
+
message.info("\u8BE5\u8303\u56F4\u4E0D\u5B58\u5728\u66F4\u6539\u6570\u636E, \u8BF7\u66F4\u6539\u7EDF\u4E00\u8303\u56F4");
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
dispatch(ToSubmitFileData(ESubmitType.SyncImgList));
|
|
74
|
+
const newData = {
|
|
75
|
+
attribute: values.attribute
|
|
76
|
+
};
|
|
77
|
+
if (config.secondaryAttributeConfigurable) {
|
|
78
|
+
const newSubAttribute = {};
|
|
79
|
+
(_a = config.inputList) == null ? void 0 : _a.forEach((data) => {
|
|
80
|
+
const subData = values[data.value];
|
|
81
|
+
if (subData !== void 0) {
|
|
82
|
+
Object.assign(newSubAttribute, {[data.value]: subData});
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
if (Object.keys(newSubAttribute).length > 0) {
|
|
86
|
+
Object.assign(newData, {subAttribute: newSubAttribute});
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
if (size) {
|
|
90
|
+
Object.assign(newData, size);
|
|
91
|
+
}
|
|
92
|
+
dispatch(BatchUpdateResultByTrackID(id, newData, [values.prevPage - 1, values.nextPage - 1]));
|
|
93
|
+
onCancel();
|
|
94
|
+
};
|
|
95
|
+
const recalculateSize = useCallback(() => {
|
|
96
|
+
var _a;
|
|
97
|
+
const {prevPage, nextPage} = form.getFieldsValue(["prevPage", "nextPage"]);
|
|
98
|
+
const newImgList = imgList.filter((_, i) => MathUtils.isInRange(i, [prevPage - 1, nextPage - 1]));
|
|
99
|
+
if (!((newImgList == null ? void 0 : newImgList.length) > 0) || !(selectedBox == null ? void 0 : selectedBox.info) || ((_a = selectedBox == null ? void 0 : selectedBox.info) == null ? void 0 : _a.trackID) === void 0) {
|
|
100
|
+
setSize(void 0);
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
const newMaxSize = PointCloudUtils.getMaxSizeFromBox({
|
|
104
|
+
trackID: selectedBox.info.trackID,
|
|
105
|
+
imgList: newImgList
|
|
106
|
+
});
|
|
107
|
+
setSize(newMaxSize);
|
|
108
|
+
}, [imgList, selectedBox, imgIndex]);
|
|
109
|
+
const onOk = () => form.submit();
|
|
110
|
+
const sizeShow = () => {
|
|
111
|
+
if (!size || !(selectedBox == null ? void 0 : selectedBox.info)) {
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
const style = {marginRight: 16};
|
|
115
|
+
const {length, width, height} = PointCloudUtils.transferBox2Kitti(__spreadValues(__spreadValues({}, selectedBox == null ? void 0 : selectedBox.info), size));
|
|
116
|
+
return /* @__PURE__ */ React.createElement("div", null, /* @__PURE__ */ React.createElement("span", {
|
|
117
|
+
style
|
|
118
|
+
}, t("Length"), ": ", length.toFixed(2)), /* @__PURE__ */ React.createElement("span", {
|
|
119
|
+
style
|
|
120
|
+
}, t("Width"), ": ", width.toFixed(2)), /* @__PURE__ */ React.createElement("span", {
|
|
121
|
+
style
|
|
122
|
+
}, t("Height"), ": ", height.toFixed(2)), /* @__PURE__ */ React.createElement(Popover, {
|
|
123
|
+
placement: "rightBottom",
|
|
124
|
+
content: "\u7EDF\u4E00\u5C3A\u5BF8\u4E3A\u8BE5ID\u7684\u6240\u6709\u6807\u6CE8\u6846\u4E2D\u6700\u5927\u7684\u5C3A\u5BF8"
|
|
125
|
+
}, /* @__PURE__ */ React.createElement(QuestionCircleOutlined, null)));
|
|
126
|
+
};
|
|
127
|
+
const selectStyle = {
|
|
128
|
+
width: "200px"
|
|
129
|
+
};
|
|
130
|
+
const attributeStyle = {
|
|
131
|
+
marginBottom: "24px",
|
|
132
|
+
display: "flex",
|
|
133
|
+
alignItems: "center"
|
|
134
|
+
};
|
|
135
|
+
return /* @__PURE__ */ React.createElement(Modal, {
|
|
136
|
+
title: t("UnifiedParams"),
|
|
137
|
+
visible,
|
|
138
|
+
onCancel,
|
|
139
|
+
onOk,
|
|
140
|
+
wrapClassName: "labelbee-custom-modal"
|
|
141
|
+
}, /* @__PURE__ */ React.createElement(Form, __spreadProps(__spreadValues({}, layout), {
|
|
142
|
+
form,
|
|
143
|
+
onFinish
|
|
144
|
+
}), /* @__PURE__ */ React.createElement(Form.Item, {
|
|
145
|
+
name: "id",
|
|
146
|
+
label: t("CurrentBoxTrackIDs")
|
|
147
|
+
}, id), /* @__PURE__ */ React.createElement(Form.Item, {
|
|
148
|
+
label: t("UnifiedTrackIDRange"),
|
|
149
|
+
required: true
|
|
150
|
+
}, /* @__PURE__ */ React.createElement(Form.Item, {
|
|
151
|
+
style: {display: "inline-block"},
|
|
152
|
+
rules: defaultNumberRules,
|
|
153
|
+
name: "prevPage",
|
|
154
|
+
noStyle: true
|
|
155
|
+
}, /* @__PURE__ */ React.createElement(InputNumber, {
|
|
156
|
+
min: 1,
|
|
157
|
+
style: {width: "80px"},
|
|
158
|
+
onChange: () => recalculateSize()
|
|
159
|
+
})), /* @__PURE__ */ React.createElement("span", {
|
|
160
|
+
style: {
|
|
161
|
+
display: "inline-block",
|
|
162
|
+
width: "24px",
|
|
163
|
+
textAlign: "center"
|
|
164
|
+
}
|
|
165
|
+
}, "-"), /* @__PURE__ */ React.createElement(Form.Item, {
|
|
166
|
+
style: {display: "inline-block"},
|
|
167
|
+
rules: defaultNumberRules,
|
|
168
|
+
name: "nextPage",
|
|
169
|
+
noStyle: true
|
|
170
|
+
}, /* @__PURE__ */ React.createElement(InputNumber, {
|
|
171
|
+
min: 1,
|
|
172
|
+
style: {width: "80px"},
|
|
173
|
+
onChange: () => recalculateSize()
|
|
174
|
+
})), /* @__PURE__ */ React.createElement("span", {
|
|
175
|
+
style: {
|
|
176
|
+
display: "inline-block",
|
|
177
|
+
width: "40x",
|
|
178
|
+
marginLeft: "10px",
|
|
179
|
+
textAlign: "center"
|
|
180
|
+
}
|
|
181
|
+
}, t("Page"))), /* @__PURE__ */ React.createElement(Form.Item, {
|
|
182
|
+
name: "UnifiedSize",
|
|
183
|
+
label: t("UnifiedSize")
|
|
184
|
+
}, sizeShow()), /* @__PURE__ */ React.createElement(Form.Item, {
|
|
185
|
+
label: t("UnifiedTag"),
|
|
186
|
+
required: true
|
|
187
|
+
}, /* @__PURE__ */ React.createElement("div", {
|
|
188
|
+
style: attributeStyle
|
|
189
|
+
}, /* @__PURE__ */ React.createElement(PrefixTag, {
|
|
190
|
+
text: t("Attribute")
|
|
191
|
+
}), /* @__PURE__ */ React.createElement(Form.Item, {
|
|
192
|
+
name: "attribute",
|
|
193
|
+
noStyle: true,
|
|
194
|
+
rules: defaultSelectedAttribute
|
|
195
|
+
}, /* @__PURE__ */ React.createElement(Select, {
|
|
196
|
+
style: selectStyle
|
|
197
|
+
}, config.attributeList.map((v) => /* @__PURE__ */ React.createElement(Select.Option, {
|
|
198
|
+
key: v.value,
|
|
199
|
+
value: v.value
|
|
200
|
+
}, v.key))))), config.secondaryAttributeConfigurable && config.inputList.map((v) => {
|
|
201
|
+
var _a;
|
|
202
|
+
return /* @__PURE__ */ React.createElement("div", {
|
|
203
|
+
key: v.value,
|
|
204
|
+
style: attributeStyle
|
|
205
|
+
}, /* @__PURE__ */ React.createElement(PrefixTag, {
|
|
206
|
+
text: v.key
|
|
207
|
+
}), /* @__PURE__ */ React.createElement(Form.Item, {
|
|
208
|
+
name: v.value,
|
|
209
|
+
noStyle: true,
|
|
210
|
+
required: false
|
|
211
|
+
}, /* @__PURE__ */ React.createElement(Select, {
|
|
212
|
+
style: selectStyle
|
|
213
|
+
}, (_a = v.subSelected) == null ? void 0 : _a.map((subData) => /* @__PURE__ */ React.createElement(Select.Option, {
|
|
214
|
+
key: subData.value,
|
|
215
|
+
value: subData.value
|
|
216
|
+
}, subData.key)))));
|
|
217
|
+
}))));
|
|
218
|
+
};
|
|
219
|
+
const mapStateToProps = (state) => {
|
|
220
|
+
return {
|
|
221
|
+
imgList: state.annotation.imgList,
|
|
222
|
+
imgIndex: state.annotation.imgIndex
|
|
223
|
+
};
|
|
224
|
+
};
|
|
225
|
+
var UnifiedParamsModal$1 = connect(mapStateToProps, null, null, {context: LabelBeeContext})(UnifiedParamsModal);
|
|
226
|
+
|
|
227
|
+
export { UnifiedParamsModal$1 as default };
|
|
228
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../src/components/pointCloudView/components/UnifiedParamsModal/index.tsx"],"sourcesContent":["import { ESubmitType } from '@/constant';\nimport { BatchUpdateResultByTrackID, ToSubmitFileData } from '@/store/annotation/actionCreators';\nimport { LabelBeeContext, useDispatch } from '@/store/ctx';\nimport { Form, InputNumber, message, Modal, Popover, Select } from 'antd';\nimport React, { useCallback, useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { QuestionCircleOutlined } from '@ant-design/icons';\nimport { IPointCloudConfig, PointCloudUtils } from '@labelbee/lb-utils';\nimport { connect } from 'react-redux';\nimport { AppState } from '@/store';\nimport { AnnotationFileList } from '@/types/data';\nimport { useSingleBox } from '../../hooks/useSingleBox';\nimport { MathUtils } from '@labelbee/lb-annotation';\n\ninterface IProps {\n id?: number;\n visible: boolean;\n onCancel: () => void;\n config: IPointCloudConfig;\n imgList: AnnotationFileList;\n imgIndex: number;\n}\n\nconst layout = {\n labelCol: { span: 8 },\n wrapperCol: { span: 16 },\n};\n\nconst defaultNumberRules = [{ required: true, message: '请填写一个数字' }];\nconst defaultSelectedAttribute = [{ required: true, message: '请选择主属性' }];\nconst DECIMAL_PLACES = 2;\n\nconst PrefixTag: React.FC<{ text: string }> = ({ text }) => {\n return (\n <span\n style={{\n borderRadius: '4px 0px 0px 4px',\n padding: '0px 12px',\n background: '#FAFAFA',\n border: '1px solid rgb(217 217 217)',\n borderRight: '0',\n display: 'flex',\n alignItems: 'center',\n height: 32,\n }}\n >\n {text}\n </span>\n );\n};\n\nconst UnifiedParamsModal = ({ id, visible, onCancel, config, imgList, imgIndex }: IProps) => {\n const dispatch = useDispatch();\n const { selectedBox } = useSingleBox();\n const [size, setSize] = useState<{ width: number; height: number; depth: number }>();\n\n const [form] = Form.useForm();\n const { t } = useTranslation();\n\n useEffect(() => {\n if (visible === false) {\n // Clear All Data\n form.resetFields();\n setSize(undefined);\n }\n }, [visible]);\n\n const onFinish = (values: any) => {\n if (!id) {\n return;\n }\n\n if (!size) {\n message.info('该范围不存在更改数据, 请更改统一范围');\n return;\n }\n\n dispatch(ToSubmitFileData(ESubmitType.SyncImgList));\n const newData = {\n attribute: values.attribute,\n };\n\n if (config.secondaryAttributeConfigurable) {\n const newSubAttribute = {};\n config.inputList?.forEach((data) => {\n const subData = values[data.value];\n if (subData !== undefined) {\n Object.assign(newSubAttribute, { [data.value]: subData });\n }\n });\n\n if (Object.keys(newSubAttribute).length > 0) {\n Object.assign(newData, { subAttribute: newSubAttribute });\n }\n }\n\n if (size) {\n Object.assign(newData, size);\n }\n\n dispatch(BatchUpdateResultByTrackID(id, newData, [values.prevPage - 1, values.nextPage - 1]));\n onCancel();\n };\n\n const recalculateSize = useCallback(() => {\n const { prevPage, nextPage } = form.getFieldsValue(['prevPage', 'nextPage']);\n\n // 1. Filter the imgInfo in range.\n const newImgList = imgList.filter((_, i) =>\n MathUtils.isInRange(i, [prevPage - 1, nextPage - 1]),\n );\n\n if (\n !(newImgList?.length > 0) ||\n !selectedBox?.info ||\n selectedBox?.info?.trackID === undefined\n ) {\n setSize(undefined);\n return;\n }\n\n // 2. Get the Max Size of imgList\n const newMaxSize = PointCloudUtils.getMaxSizeFromBox({\n trackID: selectedBox.info.trackID,\n imgList: newImgList as Array<{ result: string }>,\n });\n\n setSize(newMaxSize);\n }, [imgList, selectedBox, imgIndex]);\n\n const onOk = () => form.submit();\n\n const sizeShow = () => {\n if (!size || !selectedBox?.info) {\n return;\n }\n const style = { marginRight: 16 };\n\n const { length, width, height } = PointCloudUtils.transferBox2Kitti({\n ...selectedBox?.info, // Just for the type check\n ...size,\n });\n\n return (\n <div>\n <span style={style}>\n {t('Length')}: {length.toFixed(2)}\n </span>\n <span style={style}>\n {t('Width')}: {width.toFixed(2)}\n </span>\n <span style={style}>\n {t('Height')}: {height.toFixed(2)}\n </span>\n <Popover placement='rightBottom' content='统一尺寸为该ID的所有标注框中最大的尺寸'>\n <QuestionCircleOutlined />\n </Popover>\n </div>\n );\n };\n const selectStyle = {\n width: '200px',\n };\n\n const attributeStyle = {\n marginBottom: '24px',\n display: 'flex',\n alignItems: 'center',\n };\n\n return (\n <Modal\n title={t('UnifiedParams')}\n visible={visible}\n onCancel={onCancel}\n onOk={onOk}\n wrapClassName='labelbee-custom-modal'\n >\n <Form {...layout} form={form} onFinish={onFinish}>\n <Form.Item name='id' label={t('CurrentBoxTrackIDs')}>\n {id}\n </Form.Item>\n\n <Form.Item label={t('UnifiedTrackIDRange')} required={true}>\n <Form.Item\n style={{ display: 'inline-block' }}\n rules={defaultNumberRules}\n name='prevPage'\n noStyle={true}\n >\n <InputNumber min={1} style={{ width: '80px' }} onChange={() => recalculateSize()} />\n </Form.Item>\n <span\n style={{\n display: 'inline-block',\n width: '24px',\n textAlign: 'center',\n }}\n >\n -\n </span>\n <Form.Item\n style={{ display: 'inline-block' }}\n rules={defaultNumberRules}\n name='nextPage'\n noStyle={true}\n >\n <InputNumber min={1} style={{ width: '80px' }} onChange={() => recalculateSize()} />\n </Form.Item>\n <span\n style={{\n display: 'inline-block',\n width: '40x',\n marginLeft: '10px',\n textAlign: 'center',\n }}\n >\n {t('Page')}\n </span>\n </Form.Item>\n\n <Form.Item name='UnifiedSize' label={t('UnifiedSize')}>\n {sizeShow()}\n </Form.Item>\n\n <Form.Item label={t('UnifiedTag')} required={true}>\n <div style={attributeStyle}>\n <PrefixTag text={t('Attribute')} />\n <Form.Item name='attribute' noStyle={true} rules={defaultSelectedAttribute}>\n <Select style={selectStyle}>\n {config.attributeList.map((v) => (\n <Select.Option key={v.value} value={v.value}>\n {v.key}\n </Select.Option>\n ))}\n </Select>\n </Form.Item>\n </div>\n {config.secondaryAttributeConfigurable &&\n config.inputList.map((v) => (\n <div key={v.value} style={attributeStyle}>\n <PrefixTag text={v.key} />\n <Form.Item name={v.value} noStyle={true} required={false}>\n <Select style={selectStyle}>\n {v.subSelected?.map((subData) => (\n <Select.Option key={subData.value} value={subData.value}>\n {subData.key}\n </Select.Option>\n ))}\n </Select>\n </Form.Item>\n </div>\n ))}\n </Form.Item>\n </Form>\n </Modal>\n );\n};\n\nconst mapStateToProps = (state: AppState) => {\n return {\n imgList: state.annotation.imgList,\n imgIndex: state.annotation.imgIndex,\n };\n};\n\nexport default connect(mapStateToProps, null, null, { context: LabelBeeContext })(\n UnifiedParamsModal,\n);\n"],"names":[],"mappings":"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"}
|