@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
|
@@ -0,0 +1,234 @@
|
|
|
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 DECIMAL_PLACES = 2;
|
|
39
|
+
const PrefixTag = ({text}) => {
|
|
40
|
+
return /* @__PURE__ */ React.createElement("span", {
|
|
41
|
+
style: {
|
|
42
|
+
borderRadius: "4px 0px 0px 4px",
|
|
43
|
+
padding: "0px 12px",
|
|
44
|
+
background: "#FAFAFA",
|
|
45
|
+
border: "1px solid rgb(217 217 217)",
|
|
46
|
+
borderRight: "0",
|
|
47
|
+
display: "flex",
|
|
48
|
+
alignItems: "center",
|
|
49
|
+
height: 32
|
|
50
|
+
}
|
|
51
|
+
}, text);
|
|
52
|
+
};
|
|
53
|
+
const UnifyParamsModal = ({id, visible, onCancel, config, imgList, imgIndex}) => {
|
|
54
|
+
const dispatch = useDispatch();
|
|
55
|
+
const {selectedBox} = useSingleBox();
|
|
56
|
+
const [size, setSize] = useState();
|
|
57
|
+
const [form] = Form.useForm();
|
|
58
|
+
const {t} = useTranslation();
|
|
59
|
+
useEffect(() => {
|
|
60
|
+
if (visible === false) {
|
|
61
|
+
form.resetFields();
|
|
62
|
+
setSize(void 0);
|
|
63
|
+
} else {
|
|
64
|
+
recalculateSize();
|
|
65
|
+
}
|
|
66
|
+
}, [visible]);
|
|
67
|
+
const onFinish = (values) => {
|
|
68
|
+
var _a;
|
|
69
|
+
if (!id) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
if (!size) {
|
|
73
|
+
message.info("\u8BE5\u8303\u56F4\u4E0D\u5B58\u5728\u66F4\u6539\u6570\u636E, \u8BF7\u66F4\u6539\u7EDF\u4E00\u8303\u56F4");
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
dispatch(ToSubmitFileData(ESubmitType.SyncImgList));
|
|
77
|
+
const newData = {
|
|
78
|
+
attribute: values.attribute
|
|
79
|
+
};
|
|
80
|
+
if (config.secondaryAttributeConfigurable) {
|
|
81
|
+
const newSubAttribute = {};
|
|
82
|
+
(_a = config.inputList) == null ? void 0 : _a.forEach((data) => {
|
|
83
|
+
const subData = values[data.value];
|
|
84
|
+
if (subData !== void 0) {
|
|
85
|
+
Object.assign(newSubAttribute, {[data.value]: subData});
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
if (Object.keys(newSubAttribute).length > 0) {
|
|
89
|
+
Object.assign(newData, {subAttribute: newSubAttribute});
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
if (size) {
|
|
93
|
+
Object.assign(newData, size);
|
|
94
|
+
}
|
|
95
|
+
dispatch(BatchUpdateResultByTrackID(id, newData, [values.prevPage - 1, values.nextPage - 1]));
|
|
96
|
+
onCancel();
|
|
97
|
+
};
|
|
98
|
+
const recalculateSize = useCallback(() => {
|
|
99
|
+
var _a;
|
|
100
|
+
const {prevPage, nextPage} = form.getFieldsValue(["prevPage", "nextPage"]);
|
|
101
|
+
const newImgList = imgList.filter((_, i) => MathUtils.isInRange(i, [prevPage - 1, nextPage - 1]));
|
|
102
|
+
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) {
|
|
103
|
+
setSize(void 0);
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
const newMaxSize = PointCloudUtils.getMaxSizeFromBox({
|
|
107
|
+
trackID: selectedBox.info.trackID,
|
|
108
|
+
imgList: newImgList
|
|
109
|
+
});
|
|
110
|
+
setSize(newMaxSize);
|
|
111
|
+
}, [imgList, selectedBox, imgIndex]);
|
|
112
|
+
const onOk = () => form.submit();
|
|
113
|
+
const sizeShow = () => {
|
|
114
|
+
if (!size || !(selectedBox == null ? void 0 : selectedBox.info)) {
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
const style = {marginRight: 16};
|
|
118
|
+
const {length, width, height} = PointCloudUtils.transferBox2Kitti(__spreadValues(__spreadValues({}, selectedBox == null ? void 0 : selectedBox.info), size));
|
|
119
|
+
return /* @__PURE__ */ React.createElement("div", null, /* @__PURE__ */ React.createElement("span", {
|
|
120
|
+
style
|
|
121
|
+
}, t("Length"), ": ", length.toFixed(DECIMAL_PLACES)), /* @__PURE__ */ React.createElement("span", {
|
|
122
|
+
style
|
|
123
|
+
}, t("Width"), ": ", width.toFixed(DECIMAL_PLACES)), /* @__PURE__ */ React.createElement("span", {
|
|
124
|
+
style
|
|
125
|
+
}, t("Height"), ": ", height.toFixed(DECIMAL_PLACES)), /* @__PURE__ */ React.createElement(Popover, {
|
|
126
|
+
placement: "rightBottom",
|
|
127
|
+
content: "\u7EDF\u4E00\u5C3A\u5BF8\u4E3A\u8BE5ID\u7684\u6240\u6709\u6807\u6CE8\u6846\u4E2D\u6700\u5927\u7684\u5C3A\u5BF8"
|
|
128
|
+
}, /* @__PURE__ */ React.createElement(QuestionCircleOutlined, null)));
|
|
129
|
+
};
|
|
130
|
+
const selectStyle = {
|
|
131
|
+
width: "200px"
|
|
132
|
+
};
|
|
133
|
+
const attributeStyle = {
|
|
134
|
+
marginBottom: "24px",
|
|
135
|
+
display: "flex",
|
|
136
|
+
alignItems: "center"
|
|
137
|
+
};
|
|
138
|
+
return /* @__PURE__ */ React.createElement(Modal, {
|
|
139
|
+
title: t("UnifyParams"),
|
|
140
|
+
visible,
|
|
141
|
+
onCancel,
|
|
142
|
+
onOk,
|
|
143
|
+
wrapClassName: "labelbee-custom-modal"
|
|
144
|
+
}, /* @__PURE__ */ React.createElement(Form, __spreadProps(__spreadValues({}, layout), {
|
|
145
|
+
form,
|
|
146
|
+
onFinish
|
|
147
|
+
}), /* @__PURE__ */ React.createElement(Form.Item, {
|
|
148
|
+
name: "id",
|
|
149
|
+
label: t("UnifyTrackID")
|
|
150
|
+
}, id), /* @__PURE__ */ React.createElement(Form.Item, {
|
|
151
|
+
label: t("UnifyAttributeRange"),
|
|
152
|
+
required: true
|
|
153
|
+
}, /* @__PURE__ */ React.createElement(Form.Item, {
|
|
154
|
+
style: {display: "inline-block"},
|
|
155
|
+
rules: defaultNumberRules,
|
|
156
|
+
name: "prevPage",
|
|
157
|
+
noStyle: true,
|
|
158
|
+
initialValue: 1
|
|
159
|
+
}, /* @__PURE__ */ React.createElement(InputNumber, {
|
|
160
|
+
precision: 0,
|
|
161
|
+
min: 1,
|
|
162
|
+
style: {width: "80px"},
|
|
163
|
+
onChange: () => recalculateSize()
|
|
164
|
+
})), /* @__PURE__ */ React.createElement("span", {
|
|
165
|
+
style: {
|
|
166
|
+
display: "inline-block",
|
|
167
|
+
width: "24px",
|
|
168
|
+
textAlign: "center"
|
|
169
|
+
}
|
|
170
|
+
}, "-"), /* @__PURE__ */ React.createElement(Form.Item, {
|
|
171
|
+
style: {display: "inline-block"},
|
|
172
|
+
rules: defaultNumberRules,
|
|
173
|
+
name: "nextPage",
|
|
174
|
+
noStyle: true,
|
|
175
|
+
initialValue: imgList.length
|
|
176
|
+
}, /* @__PURE__ */ React.createElement(InputNumber, {
|
|
177
|
+
precision: 0,
|
|
178
|
+
min: 1,
|
|
179
|
+
style: {width: "80px"},
|
|
180
|
+
onChange: () => recalculateSize()
|
|
181
|
+
})), /* @__PURE__ */ React.createElement("span", {
|
|
182
|
+
style: {
|
|
183
|
+
display: "inline-block",
|
|
184
|
+
width: "40x",
|
|
185
|
+
marginLeft: "10px",
|
|
186
|
+
textAlign: "center"
|
|
187
|
+
}
|
|
188
|
+
}, t("Page"))), /* @__PURE__ */ React.createElement(Form.Item, {
|
|
189
|
+
name: "UnifySize",
|
|
190
|
+
label: t("UnifySize")
|
|
191
|
+
}, sizeShow()), /* @__PURE__ */ React.createElement(Form.Item, {
|
|
192
|
+
label: t("UnifyTag"),
|
|
193
|
+
required: true
|
|
194
|
+
}, /* @__PURE__ */ React.createElement("div", {
|
|
195
|
+
style: attributeStyle
|
|
196
|
+
}, /* @__PURE__ */ React.createElement(PrefixTag, {
|
|
197
|
+
text: t("Attribute")
|
|
198
|
+
}), /* @__PURE__ */ React.createElement(Form.Item, {
|
|
199
|
+
name: "attribute",
|
|
200
|
+
noStyle: true,
|
|
201
|
+
rules: defaultSelectedAttribute
|
|
202
|
+
}, /* @__PURE__ */ React.createElement(Select, {
|
|
203
|
+
style: selectStyle
|
|
204
|
+
}, config.attributeList.map((v) => /* @__PURE__ */ React.createElement(Select.Option, {
|
|
205
|
+
key: v.value,
|
|
206
|
+
value: v.value
|
|
207
|
+
}, v.key))))), config.secondaryAttributeConfigurable && config.inputList.map((v) => {
|
|
208
|
+
var _a;
|
|
209
|
+
return /* @__PURE__ */ React.createElement("div", {
|
|
210
|
+
key: v.value,
|
|
211
|
+
style: attributeStyle
|
|
212
|
+
}, /* @__PURE__ */ React.createElement(PrefixTag, {
|
|
213
|
+
text: v.key
|
|
214
|
+
}), /* @__PURE__ */ React.createElement(Form.Item, {
|
|
215
|
+
name: v.value,
|
|
216
|
+
noStyle: true,
|
|
217
|
+
required: false
|
|
218
|
+
}, /* @__PURE__ */ React.createElement(Select, {
|
|
219
|
+
style: selectStyle
|
|
220
|
+
}, (_a = v.subSelected) == null ? void 0 : _a.map((subData) => /* @__PURE__ */ React.createElement(Select.Option, {
|
|
221
|
+
key: subData.value,
|
|
222
|
+
value: subData.value
|
|
223
|
+
}, subData.key)))));
|
|
224
|
+
}))));
|
|
225
|
+
};
|
|
226
|
+
const mapStateToProps = (state) => {
|
|
227
|
+
return {
|
|
228
|
+
imgIndex: state.annotation.imgIndex
|
|
229
|
+
};
|
|
230
|
+
};
|
|
231
|
+
var UnifyParamsModal$1 = connect(mapStateToProps, null, null, {context: LabelBeeContext})(UnifyParamsModal);
|
|
232
|
+
|
|
233
|
+
export { UnifyParamsModal$1 as default };
|
|
234
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../src/components/pointCloudView/components/UnifyParamsModal/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 UnifyParamsModal = ({ 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 } else {\n // Init\n recalculateSize();\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(DECIMAL_PLACES)}\n </span>\n <span style={style}>\n {t('Width')}: {width.toFixed(DECIMAL_PLACES)}\n </span>\n <span style={style}>\n {t('Height')}: {height.toFixed(DECIMAL_PLACES)}\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('UnifyParams')}\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('UnifyTrackID')}>\n {id}\n </Form.Item>\n\n <Form.Item label={t('UnifyAttributeRange')} required={true}>\n <Form.Item\n style={{ display: 'inline-block' }}\n rules={defaultNumberRules}\n name='prevPage'\n noStyle={true}\n initialValue={1} // First Page \n >\n <InputNumber\n precision={0}\n min={1}\n style={{ width: '80px' }}\n onChange={() => recalculateSize()}\n />\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 initialValue={imgList.length} // Last Page \n >\n <InputNumber\n precision={0}\n min={1}\n style={{ width: '80px' }}\n onChange={() => recalculateSize()}\n />\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='UnifySize' label={t('UnifySize')}>\n {sizeShow()}\n </Form.Item>\n\n <Form.Item label={t('UnifyTag')} 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 imgIndex: state.annotation.imgIndex,\n };\n};\n\nexport default connect(mapStateToProps, null, null, { context: LabelBeeContext })(UnifyParamsModal);\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { useContext, useState, useEffect } from 'react';
|
|
2
|
+
import { PointCloudContext } from '../PointCloudContext.js';
|
|
3
|
+
|
|
4
|
+
const useAttribute = () => {
|
|
5
|
+
var _a, _b;
|
|
6
|
+
const {topViewInstance, sideViewInstance, backViewInstance, mainViewInstance} = useContext(PointCloudContext);
|
|
7
|
+
const [defaultAttribute, setDefaultAttribute] = useState((_b = (_a = topViewInstance == null ? void 0 : topViewInstance.pointCloud2dOperation) == null ? void 0 : _a.defaultAttribute) != null ? _b : "");
|
|
8
|
+
useEffect(() => {
|
|
9
|
+
if (!(topViewInstance == null ? void 0 : topViewInstance.pointCloud2dOperation)) {
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
const updateDefaultAttribute2 = () => {
|
|
13
|
+
setDefaultAttribute(topViewInstance == null ? void 0 : topViewInstance.pointCloud2dOperation.defaultAttribute);
|
|
14
|
+
};
|
|
15
|
+
topViewInstance == null ? void 0 : topViewInstance.pointCloud2dOperation.on("changeAttributeSidebar", updateDefaultAttribute2);
|
|
16
|
+
return () => {
|
|
17
|
+
topViewInstance == null ? void 0 : topViewInstance.pointCloud2dOperation.unbind("changeAttributeSidebar", updateDefaultAttribute2);
|
|
18
|
+
};
|
|
19
|
+
}, [topViewInstance == null ? void 0 : topViewInstance.pointCloud2dOperation]);
|
|
20
|
+
const syncThreeViewsAttribute = (attribute) => {
|
|
21
|
+
[
|
|
22
|
+
topViewInstance == null ? void 0 : topViewInstance.pointCloud2dOperation,
|
|
23
|
+
sideViewInstance == null ? void 0 : sideViewInstance.pointCloud2dOperation,
|
|
24
|
+
backViewInstance == null ? void 0 : backViewInstance.pointCloud2dOperation
|
|
25
|
+
].forEach((instance) => {
|
|
26
|
+
instance == null ? void 0 : instance.setDefaultAttribute(attribute);
|
|
27
|
+
});
|
|
28
|
+
};
|
|
29
|
+
const updateDefaultAttribute = (attribute) => {
|
|
30
|
+
topViewInstance == null ? void 0 : topViewInstance.pointCloud2dOperation.setDefaultAttribute(attribute);
|
|
31
|
+
};
|
|
32
|
+
const reRenderPointCloud3DBox = (newBox) => {
|
|
33
|
+
mainViewInstance == null ? void 0 : mainViewInstance.generateBox(newBox);
|
|
34
|
+
};
|
|
35
|
+
return {
|
|
36
|
+
syncThreeViewsAttribute,
|
|
37
|
+
updateDefaultAttribute,
|
|
38
|
+
reRenderPointCloud3DBox,
|
|
39
|
+
defaultAttribute
|
|
40
|
+
};
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
export { useAttribute };
|
|
44
|
+
//# sourceMappingURL=useAttribute.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useAttribute.js","sources":["../../../../src/components/pointCloudView/hooks/useAttribute.ts"],"sourcesContent":["import { IPointCloudBox } from '@labelbee/lb-utils';\nimport { useContext, useEffect, useState } from 'react';\nimport { PointCloudContext } from '../PointCloudContext';\n\nexport const useAttribute = () => {\n const { topViewInstance, sideViewInstance, backViewInstance, mainViewInstance } =\n useContext(PointCloudContext);\n const [defaultAttribute, setDefaultAttribute] = useState(\n topViewInstance?.pointCloud2dOperation?.defaultAttribute ?? '',\n );\n\n useEffect(() => {\n if (!topViewInstance?.pointCloud2dOperation) {\n return;\n }\n\n const updateDefaultAttribute = () => {\n setDefaultAttribute(topViewInstance?.pointCloud2dOperation.defaultAttribute);\n };\n\n topViewInstance?.pointCloud2dOperation.on('changeAttributeSidebar', updateDefaultAttribute);\n\n return () => {\n topViewInstance?.pointCloud2dOperation.unbind(\n 'changeAttributeSidebar',\n updateDefaultAttribute,\n );\n };\n }, [topViewInstance?.pointCloud2dOperation]);\n\n const syncThreeViewsAttribute = (attribute?: string) => {\n [\n topViewInstance?.pointCloud2dOperation,\n sideViewInstance?.pointCloud2dOperation,\n backViewInstance?.pointCloud2dOperation,\n ].forEach((instance) => {\n instance?.setDefaultAttribute(attribute);\n });\n };\n\n const updateDefaultAttribute = (attribute?: string) => {\n topViewInstance?.pointCloud2dOperation.setDefaultAttribute(attribute);\n };\n\n const reRenderPointCloud3DBox = (newBox: IPointCloudBox) => {\n mainViewInstance?.generateBox(newBox);\n };\n\n return {\n syncThreeViewsAttribute,\n updateDefaultAttribute,\n reRenderPointCloud3DBox,\n defaultAttribute,\n };\n};\n"],"names":[],"mappings":";;;AAIO,MAAM,eAAe,MAAM;AAJlC,EAAA,IAAA,EAAA,EAAA,EAAA,CAAA;AAKE,EAAA,MAAM,CAAE,eAAA,EAAiB,gBAAkB,EAAA,gBAAA,EAAkB,oBAC3D,UAAW,CAAA,iBAAA,CAAA,CAAA;AACb,EAAM,MAAA,CAAC,kBAAkB,mBAAuB,CAAA,GAAA,QAAA,CAC9C,+DAAiB,qBAAjB,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAwC,qBAAxC,IAA4D,GAAA,EAAA,GAAA,EAAA,CAAA,CAAA;AAG9D,EAAA,SAAA,CAAU,MAAM;AACd,IAAI,IAAA,qDAAkB,qBAAuB,CAAA,EAAA;AAC3C,MAAA,OAAA;AAAA,KAAA;AAGF,IAAA,MAAM,0BAAyB,MAAM;AACnC,MAAA,mBAAA,CAAoB,mDAAiB,qBAAsB,CAAA,gBAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAG7D,IAAiB,eAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,eAAA,CAAA,qBAAA,CAAsB,GAAG,wBAA0B,EAAA,uBAAA,CAAA,CAAA;AAEpE,IAAA,OAAO,MAAM;AACX,MAAiB,eAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,eAAA,CAAA,qBAAA,CAAsB,OACrC,wBACA,EAAA,uBAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAAA,GAAA,EAGH,CAAC,eAAiB,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,eAAA,CAAA,qBAAA,CAAA,CAAA,CAAA;AAErB,EAAM,MAAA,uBAAA,GAA0B,CAAC,SAAuB,KAAA;AACtD,IAAA;AAAA,MACE,eAAiB,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,eAAA,CAAA,qBAAA;AAAA,MACjB,gBAAkB,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,gBAAA,CAAA,qBAAA;AAAA,MAClB,gBAAkB,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,gBAAA,CAAA,qBAAA;AAAA,KAClB,CAAA,OAAA,CAAQ,CAAC,QAAa,KAAA;AACtB,MAAA,QAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,QAAA,CAAU,mBAAoB,CAAA,SAAA,CAAA,CAAA;AAAA,KAAA,CAAA,CAAA;AAAA,GAAA,CAAA;AAIlC,EAAM,MAAA,sBAAA,GAAyB,CAAC,SAAuB,KAAA;AACrD,IAAA,eAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,eAAA,CAAiB,sBAAsB,mBAAoB,CAAA,SAAA,CAAA,CAAA;AAAA,GAAA,CAAA;AAG7D,EAAM,MAAA,uBAAA,GAA0B,CAAC,MAA2B,KAAA;AAC1D,IAAA,gBAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,gBAAA,CAAkB,WAAY,CAAA,MAAA,CAAA,CAAA;AAAA,GAAA,CAAA;AAGhC,EAAO,OAAA;AAAA,IACL,uBAAA;AAAA,IACA,sBAAA;AAAA,IACA,uBAAA;AAAA,IACA,gBAAA;AAAA,GAAA,CAAA;AAAA;;;;"}
|
|
@@ -1,17 +1,22 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import StepUtils from '../../../utils/StepUtils.js';
|
|
1
|
+
import { PointCloudContext } from '../PointCloudContext.js';
|
|
2
|
+
import { useContext } from 'react';
|
|
4
3
|
|
|
5
4
|
const useConfig = () => {
|
|
6
|
-
const {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
}
|
|
5
|
+
const {topViewInstance, sideViewInstance, backViewInstance, mainViewInstance} = useContext(PointCloudContext);
|
|
6
|
+
const syncAllViewsConfig = (config) => {
|
|
7
|
+
[topViewInstance, sideViewInstance, backViewInstance].forEach((instance) => {
|
|
8
|
+
instance == null ? void 0 : instance.updateConfig(config);
|
|
9
|
+
});
|
|
10
|
+
mainViewInstance == null ? void 0 : mainViewInstance.setConfig(config);
|
|
11
|
+
};
|
|
12
|
+
const reRenderTopViewRange = (radius) => {
|
|
13
|
+
var _a, _b, _c;
|
|
14
|
+
(_b = (_a = topViewInstance == null ? void 0 : topViewInstance.pointCloudInstance) == null ? void 0 : _a.generateRange) == null ? void 0 : _b.call(_a, radius);
|
|
15
|
+
(_c = topViewInstance == null ? void 0 : topViewInstance.pointCloudInstance) == null ? void 0 : _c.render();
|
|
16
|
+
};
|
|
13
17
|
return {
|
|
14
|
-
|
|
18
|
+
syncAllViewsConfig,
|
|
19
|
+
reRenderTopViewRange
|
|
15
20
|
};
|
|
16
21
|
};
|
|
17
22
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useConfig.js","sources":["../../../../src/components/pointCloudView/hooks/useConfig.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"useConfig.js","sources":["../../../../src/components/pointCloudView/hooks/useConfig.ts"],"sourcesContent":["import { PointCloudContext } from '../PointCloudContext';\nimport { useContext } from 'react';\nimport { IPointCloudConfig } from '@labelbee/lb-utils';\n\nexport const useConfig = () => {\n const { topViewInstance, sideViewInstance, backViewInstance, mainViewInstance } =\n useContext(PointCloudContext);\n\n const syncAllViewsConfig = (config: IPointCloudConfig) => {\n [topViewInstance, sideViewInstance, backViewInstance].forEach((instance) => {\n instance?.updateConfig(config);\n });\n mainViewInstance?.setConfig(config);\n };\n \n const reRenderTopViewRange = (radius: number) => {\n topViewInstance?.pointCloudInstance?.generateRange?.(radius);\n topViewInstance?.pointCloudInstance?.render();\n }\n\n return {\n syncAllViewsConfig,\n reRenderTopViewRange,\n };\n};\n"],"names":[],"mappings":";;;AAIO,MAAM,YAAY,MAAM;AAC7B,EAAA,MAAM,CAAE,eAAA,EAAiB,gBAAkB,EAAA,gBAAA,EAAkB,oBAC3D,UAAW,CAAA,iBAAA,CAAA,CAAA;AAEb,EAAM,MAAA,kBAAA,GAAqB,CAAC,MAA8B,KAAA;AACxD,IAAA,CAAC,eAAiB,EAAA,gBAAA,EAAkB,gBAAkB,CAAA,CAAA,OAAA,CAAQ,CAAC,QAAa,KAAA;AAC1E,MAAA,QAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,QAAA,CAAU,YAAa,CAAA,MAAA,CAAA,CAAA;AAAA,KAAA,CAAA,CAAA;AAEzB,IAAA,gBAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,gBAAA,CAAkB,SAAU,CAAA,MAAA,CAAA,CAAA;AAAA,GAAA,CAAA;AAG9B,EAAM,MAAA,oBAAA,GAAuB,CAAC,MAAmB,KAAA;AAfnD,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,CAAA;AAgBI,IAAiB,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,eAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,eAAA,CAAA,kBAAA,KAAjB,IAAqC,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,aAAA,KAArC,IAAqD,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAA,MAAA,CAAA,CAAA;AACrD,IAAA,CAAA,EAAA,GAAA,eAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,eAAA,CAAiB,uBAAjB,IAAqC,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAA,EAAA,CAAA;AAAA,GAAA,CAAA;AAGvC,EAAO,OAAA;AAAA,IACL,kBAAA;AAAA,IACA,oBAAA;AAAA,GAAA,CAAA;AAAA;;;;"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { useContext } from 'react';
|
|
2
|
+
import { PointCloudContext } from '../PointCloudContext.js';
|
|
3
|
+
|
|
4
|
+
var __defProp = Object.defineProperty;
|
|
5
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
8
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, {enumerable: true, configurable: true, writable: true, value}) : obj[key] = value;
|
|
9
|
+
var __spreadValues = (a, b) => {
|
|
10
|
+
for (var prop in b || (b = {}))
|
|
11
|
+
if (__hasOwnProp.call(b, prop))
|
|
12
|
+
__defNormalProp(a, prop, b[prop]);
|
|
13
|
+
if (__getOwnPropSymbols)
|
|
14
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
15
|
+
if (__propIsEnum.call(b, prop))
|
|
16
|
+
__defNormalProp(a, prop, b[prop]);
|
|
17
|
+
}
|
|
18
|
+
return a;
|
|
19
|
+
};
|
|
20
|
+
const useHistory = () => {
|
|
21
|
+
const {
|
|
22
|
+
history,
|
|
23
|
+
setPointCloudResult,
|
|
24
|
+
setSelectedIDs,
|
|
25
|
+
pointCloudBoxList,
|
|
26
|
+
mainViewInstance,
|
|
27
|
+
topViewInstance,
|
|
28
|
+
polygonList,
|
|
29
|
+
setPolygonList
|
|
30
|
+
} = useContext(PointCloudContext);
|
|
31
|
+
const addHistory = ({
|
|
32
|
+
newBoxParams,
|
|
33
|
+
newPolygon
|
|
34
|
+
}) => {
|
|
35
|
+
const historyRecord = {
|
|
36
|
+
pointCloudBoxList,
|
|
37
|
+
polygonList
|
|
38
|
+
};
|
|
39
|
+
if (newBoxParams) {
|
|
40
|
+
historyRecord.pointCloudBoxList = pointCloudBoxList.concat(newBoxParams);
|
|
41
|
+
}
|
|
42
|
+
if (newPolygon) {
|
|
43
|
+
historyRecord.polygonList = polygonList.concat(newPolygon);
|
|
44
|
+
}
|
|
45
|
+
history.pushHistory(historyRecord);
|
|
46
|
+
};
|
|
47
|
+
const pushHistoryWithList = (params) => {
|
|
48
|
+
const historyRecord = {
|
|
49
|
+
pointCloudBoxList,
|
|
50
|
+
polygonList
|
|
51
|
+
};
|
|
52
|
+
if (params.pointCloudBoxList) {
|
|
53
|
+
historyRecord.pointCloudBoxList = params.pointCloudBoxList;
|
|
54
|
+
}
|
|
55
|
+
if (params.polygonList) {
|
|
56
|
+
historyRecord.polygonList = params.polygonList;
|
|
57
|
+
}
|
|
58
|
+
history.pushHistory(historyRecord);
|
|
59
|
+
};
|
|
60
|
+
const pushHistoryUnderUpdatePolygon = (polygon) => {
|
|
61
|
+
const selectedPolygon = polygonList.find((v) => v.id === polygon.id);
|
|
62
|
+
if (selectedPolygon) {
|
|
63
|
+
history.pushHistory({
|
|
64
|
+
pointCloudBoxList,
|
|
65
|
+
polygonList: polygonList.map((v) => {
|
|
66
|
+
if (v.id === polygon.id) {
|
|
67
|
+
return polygon;
|
|
68
|
+
}
|
|
69
|
+
return __spreadValues({}, v);
|
|
70
|
+
})
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
const initHistory = ({
|
|
75
|
+
pointCloudBoxList: pointCloudBoxList2,
|
|
76
|
+
polygonList: polygonList2
|
|
77
|
+
}) => {
|
|
78
|
+
history.initRecord([{pointCloudBoxList: pointCloudBoxList2, polygonList: polygonList2}], true);
|
|
79
|
+
};
|
|
80
|
+
const updatePointCloud = (params) => {
|
|
81
|
+
if (!params) {
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
const {pointCloudBoxList: newPointCloudBoxList, polygonList: newPolygonList} = params;
|
|
85
|
+
if (newPointCloudBoxList) {
|
|
86
|
+
if (pointCloudBoxList.length !== newPointCloudBoxList.length) {
|
|
87
|
+
setSelectedIDs();
|
|
88
|
+
}
|
|
89
|
+
const deletePointCloudList = pointCloudBoxList.filter((v) => newPointCloudBoxList.findIndex((d) => d.id === v.id) >= 0);
|
|
90
|
+
const addPointCloudList = newPointCloudBoxList.filter((v) => pointCloudBoxList.findIndex((d) => d.id !== v.id) >= 0);
|
|
91
|
+
deletePointCloudList.forEach((v) => {
|
|
92
|
+
mainViewInstance == null ? void 0 : mainViewInstance.removeObjectByName(v.id);
|
|
93
|
+
});
|
|
94
|
+
addPointCloudList.forEach((v) => {
|
|
95
|
+
mainViewInstance == null ? void 0 : mainViewInstance.generateBox(v);
|
|
96
|
+
});
|
|
97
|
+
setPointCloudResult(newPointCloudBoxList);
|
|
98
|
+
}
|
|
99
|
+
if (newPolygonList) {
|
|
100
|
+
setPolygonList(newPolygonList);
|
|
101
|
+
}
|
|
102
|
+
topViewInstance == null ? void 0 : topViewInstance.updatePolygonList(newPointCloudBoxList != null ? newPointCloudBoxList : [], newPolygonList != null ? newPolygonList : []);
|
|
103
|
+
};
|
|
104
|
+
const redo = () => {
|
|
105
|
+
updatePointCloud(history.redo());
|
|
106
|
+
};
|
|
107
|
+
const undo = () => {
|
|
108
|
+
updatePointCloud(history.undo());
|
|
109
|
+
};
|
|
110
|
+
return {
|
|
111
|
+
addHistory,
|
|
112
|
+
pushHistoryWithList,
|
|
113
|
+
initHistory,
|
|
114
|
+
pushHistoryUnderUpdatePolygon,
|
|
115
|
+
redo,
|
|
116
|
+
undo
|
|
117
|
+
};
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
export { useHistory };
|
|
121
|
+
//# sourceMappingURL=useHistory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useHistory.js","sources":["../../../../src/components/pointCloudView/hooks/useHistory.ts"],"sourcesContent":["import { IPointCloudBox, IPointCloudBoxList, IPolygonData } from '@labelbee/lb-utils';\nimport { useContext } from 'react';\nimport { PointCloudContext } from '../PointCloudContext';\n\nexport const useHistory = () => {\n const {\n history,\n setPointCloudResult,\n setSelectedIDs,\n pointCloudBoxList,\n mainViewInstance,\n topViewInstance,\n polygonList,\n setPolygonList,\n } = useContext(PointCloudContext);\n\n const addHistory = ({\n newBoxParams,\n newPolygon,\n }: {\n newBoxParams?: IPointCloudBox;\n newPolygon?: IPolygonData;\n }) => {\n const historyRecord = {\n pointCloudBoxList,\n polygonList,\n };\n\n if (newBoxParams) {\n historyRecord.pointCloudBoxList = pointCloudBoxList.concat(newBoxParams);\n }\n\n if (newPolygon) {\n historyRecord.polygonList = polygonList.concat(newPolygon);\n }\n\n history.pushHistory(historyRecord);\n };\n\n const pushHistoryWithList = (\n params: Partial<{\n pointCloudBoxList: IPointCloudBoxList;\n polygonList: IPolygonData[];\n }>,\n ) => {\n const historyRecord = {\n pointCloudBoxList,\n polygonList,\n };\n\n if (params.pointCloudBoxList) {\n historyRecord.pointCloudBoxList = params.pointCloudBoxList;\n }\n\n if (params.polygonList) {\n historyRecord.polygonList = params.polygonList;\n }\n\n history.pushHistory(historyRecord);\n };\n\n const pushHistoryUnderUpdatePolygon = (polygon: IPolygonData) => {\n const selectedPolygon = polygonList.find((v) => v.id === polygon.id);\n\n if (selectedPolygon) {\n history.pushHistory({\n pointCloudBoxList,\n polygonList: polygonList.map((v) => {\n if (v.id === polygon.id) {\n return polygon;\n }\n return {\n ...v,\n };\n }),\n });\n }\n };\n\n const initHistory = ({\n pointCloudBoxList,\n polygonList,\n }: {\n pointCloudBoxList: IPointCloudBoxList;\n polygonList: IPolygonData[];\n }) => {\n history.initRecord([{ pointCloudBoxList, polygonList }], true);\n };\n\n const updatePointCloud = (params?: {\n pointCloudBoxList: IPointCloudBoxList;\n polygonList: IPolygonData[];\n }) => {\n if (!params) {\n return;\n }\n\n const { pointCloudBoxList: newPointCloudBoxList, polygonList: newPolygonList } = params;\n\n if (newPointCloudBoxList) {\n if (pointCloudBoxList.length !== newPointCloudBoxList.length) {\n setSelectedIDs();\n }\n\n const deletePointCloudList = pointCloudBoxList.filter(\n (v) => newPointCloudBoxList.findIndex((d) => d.id === v.id) >= 0,\n );\n const addPointCloudList = newPointCloudBoxList.filter(\n (v) => pointCloudBoxList.findIndex((d) => d.id !== v.id) >= 0,\n );\n\n // Clear All Data\n deletePointCloudList.forEach((v) => {\n mainViewInstance?.removeObjectByName(v.id);\n });\n\n // Add Init Box\n addPointCloudList.forEach((v) => {\n mainViewInstance?.generateBox(v);\n });\n\n setPointCloudResult(newPointCloudBoxList);\n }\n\n if (newPolygonList) {\n setPolygonList(newPolygonList);\n }\n\n topViewInstance?.updatePolygonList(newPointCloudBoxList ?? [], newPolygonList ?? []);\n };\n\n const redo = () => {\n updatePointCloud(history.redo());\n };\n\n const undo = () => {\n updatePointCloud(history.undo());\n };\n\n return {\n addHistory,\n pushHistoryWithList,\n initHistory,\n pushHistoryUnderUpdatePolygon,\n redo,\n undo,\n };\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{store as L}from"../../../index.js";import{LabelBeeContext as N}from"../../../store/ctx.js";import{message as
|
|
1
|
+
import{store as L}from"../../../index.js";import{LabelBeeContext as N}from"../../../store/ctx.js";import{message as y}from"antd/es";import D from"lodash";import f,{useState as _,useRef as O,useEffect as a}from"react";import{connect as M}from"react-redux";import U from"../../../components/fileException/FileError.js";import Z from"../../../hooks/useSize.js";import{InitToolStyleConfig as k}from"../../../store/toolStyle/actionCreators.js";import{ImgUtils as B}from"@labelbee/lb-annotation";import{i18n as P}from"@labelbee/lb-utils";import F from"../../../utils/StepUtils.js";var T=Object.defineProperty,V=Object.defineProperties,Y=Object.getOwnPropertyDescriptors,E=Object.getOwnPropertySymbols,$=Object.prototype.hasOwnProperty,q=Object.prototype.propertyIsEnumerable,j=(n,o,r)=>o in n?T(n,o,{enumerable:!0,configurable:!0,writable:!0,value:r}):n[o]=r,A=(n,o)=>{for(var r in o||(o={}))$.call(o,r)&&j(n,r,o[r]);if(E)for(var r of E(o))q.call(o,r)&&j(n,r,o[r]);return n},G=(n,o)=>V(n,Y(o));const H=n=>{const[,o]=_(0),{imgAttribute:r,toolStyle:l,toolInstance:e,annotationEngine:t,imgList:d,imgIndex:h,dataInjectionAtCreation:p,renderEnhance:g,customRenderStyle:u,stepList:v,step:w,drawLayerSlot:S}=n,[x,b]=_({zoom:1,currentPos:{x:0,y:0}}),I=O(null),C=O(null),c=Z(I);a(()=>{L.dispatch(k())},[]),a(()=>{if(!!t){switch(P.language){case"cn":case"en":t.setLang(P.language);break}t==null||t.setDataInjectionAtCreation(p),t==null||t.setRenderEnhance(g),u&&(t==null||t.setCustomRenderStyle(u))}},[t,p,g,u]),a(()=>{const i=(s,z)=>{b({zoom:s,currentPos:z})},m=s=>{b(s)};return e&&(e.singleOn("messageError",s=>{y.error(s)}),e.singleOn("messageInfo",s=>{y.info(s)}),e.singleOn("changeAnnotationShow",()=>{o(s=>s+1)}),e.on("renderZoom",i),e.on("dragMove",m)),()=>{e&&(e.unbind("renderZoom",i),e.unbind("dragMove",m))}},[e]),a(()=>{var i;(t==null?void 0:t.setImgAttribute)?t.setImgAttribute(r):(i=e==null?void 0:e.setImgAttribute)==null||i.call(e,r)},[r,t]),a(()=>{e&&e.setStyle(l),t&&t.setStyle(l)},[l]),a(()=>{(e==null?void 0:e.setSize)&&e.setSize(c),t&&t.setSize(c)},[c]),a(()=>{const i=F.getCurrentStepInfo(w,v);e==null||e.setConfig(i.config)},[v]);const R=()=>{const i=d==null?void 0:d[h];!(i==null?void 0:i.url)||B.load(i.url).then(m=>{t.setImgNode(m)})};return f.createElement("div",{ref:I,className:"annotationOperation"},f.createElement("div",{className:"canvas",ref:C,style:c,id:"toolContainer"},S==null?void 0:S(x)),(e==null?void 0:e.isImgError)===!0&&f.createElement(U,G(A({},c),{reloadImage:R,backgroundColor:"#e2e2e2",ignoreOffsetY:!0})))},J=n=>{const o=D.pickBy(n.annotation,(r,l)=>["imgList","imgIndex","stepList","step","toolInstance","annotationEngine","loading"].includes(l));return A({imgAttribute:n.imgAttribute,toolStyle:n.toolStyle},o)};var K=M(J,null,null,{context:N})(H);export{K as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/views/MainView/annotationOperation/index.tsx"],"sourcesContent":["import { store } from '@/index';\nimport { LabelBeeContext } from '@/store/ctx';\nimport { message } from 'antd/es';\nimport _ from 'lodash';\nimport React, { useEffect, useRef, useState } from 'react';\nimport { connect } from 'react-redux';\nimport { AppState } from 'src/store';\nimport { ImgAttributeState } from 'src/store/imgAttribute/types';\n\nimport { AppProps } from '@/App';\nimport FileError from '@/components/fileException/FileError';\nimport useSize from '@/hooks/useSize';\nimport { InitToolStyleConfig } from '@/store/toolStyle/actionCreators';\nimport { AnnotationEngine, ImgUtils } from '@labelbee/lb-annotation';\nimport { i18n } from '@labelbee/lb-utils';\nimport { IStepInfo } from '@/types/step';\nimport StepUtils from '@/utils/StepUtils';\n\ninterface IProps extends AppState, AppProps {\n imgAttribute: ImgAttributeState;\n imgIndex: number;\n annotationEngine: AnnotationEngine;\n loading: boolean;\n stepList: IStepInfo[];\n step: number;\n}\n\nconst AnnotationOperation: React.FC<IProps> = (props: IProps) => {\n const [, forceRender] = useState<number>(0);\n\n const {\n imgAttribute,\n toolStyle,\n toolInstance,\n annotationEngine,\n imgList,\n imgIndex,\n dataInjectionAtCreation,\n renderEnhance,\n customRenderStyle,\n stepList,\n step,\n drawLayerSlot,\n } = props;\n const [annotationPos, setAnnotationPos] = useState({ zoom: 1, currentPos: { x: 0, y: 0 } });\n const annotationRef = useRef<HTMLDivElement>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n const size = useSize(annotationRef);\n\n useEffect(() => {\n store.dispatch(InitToolStyleConfig());\n }, []);\n\n useEffect(() => {\n if (!annotationEngine) {\n return;\n }\n\n // 更改 toolInstance 内部国际化语言\n switch (i18n.language) {\n case 'cn':\n case 'en':\n annotationEngine.setLang(i18n.language);\n break;\n default: {\n //\n break;\n }\n }\n annotationEngine?.setDataInjectionAtCreation(dataInjectionAtCreation);\n annotationEngine?.setRenderEnhance(renderEnhance);\n if (customRenderStyle) {\n annotationEngine?.setCustomRenderStyle(customRenderStyle);\n }\n }, [annotationEngine, dataInjectionAtCreation, renderEnhance, customRenderStyle]);\n\n useEffect(() => {\n const renderZoom = (zoom: number, currentPos: { x: number; y: number }) => {\n setAnnotationPos({ zoom, currentPos });\n };\n\n const dragMove = (props: { currentPos: { x: number; y: number }; zoom: number }) => {\n setAnnotationPos(props);\n };\n\n if (toolInstance) {\n toolInstance.singleOn('messageError', (error: string) => {\n message.error(error);\n });\n\n toolInstance.singleOn('messageInfo', (info: string) => {\n message.info(info);\n });\n\n toolInstance.singleOn('changeAnnotationShow', () => {\n forceRender((s) => s + 1);\n });\n\n toolInstance.on('renderZoom', renderZoom);\n toolInstance.on('dragMove', dragMove);\n }\n\n return () => {\n if (toolInstance) {\n toolInstance.unbind('renderZoom', renderZoom);\n toolInstance.unbind('dragMove', dragMove);\n }\n };\n }, [toolInstance]);\n\n useEffect(() => {\n if (toolInstance) {\n toolInstance.setImgAttribute(imgAttribute);\n }\n }, [imgAttribute]);\n\n /** 样式同步 */\n useEffect(() => {\n if (toolInstance) {\n toolInstance.setStyle(toolStyle);\n }\n if (annotationEngine) {\n annotationEngine.setStyle(toolStyle);\n }\n }, [toolStyle]);\n\n /** 窗口大小监听 */\n useEffect(() => {\n if (toolInstance?.setSize) {\n toolInstance.setSize(size);\n }\n\n if (annotationEngine) {\n annotationEngine.setSize(size);\n }\n }, [size]);\n\n useEffect(() => {\n // Update StepList When it update by outside\n const currentStepInfo = StepUtils.getCurrentStepInfo(step, stepList);\n toolInstance?.setConfig(currentStepInfo.config);\n }, [stepList]);\n\n /**\n * 重新加载图片,避免网络问题导致的图片无法加载\n * @returns\n */\n const reloadImg = () => {\n const imgInfo = imgList?.[imgIndex];\n if (!imgInfo?.url) {\n return;\n }\n\n ImgUtils.load(imgInfo.url).then((imgNode) => {\n annotationEngine.setImgNode(imgNode as HTMLImageElement);\n });\n };\n\n return (\n <div ref={annotationRef} className='annotationOperation'>\n <div className='canvas' ref={containerRef} style={size} id='toolContainer'>\n {drawLayerSlot?.(annotationPos)}\n </div>\n {toolInstance?.isImgError === true && (\n <FileError\n {...size}\n reloadImage={reloadImg}\n backgroundColor='#e2e2e2'\n ignoreOffsetY={true}\n />\n )}\n </div>\n );\n};\n\nconst mapStateToProps = (state: AppState) => {\n const annotationState = _.pickBy(state.annotation, (v, k) =>\n [\n 'imgList',\n 'imgIndex',\n 'stepList',\n 'step',\n 'toolInstance',\n 'annotationEngine',\n 'loading',\n ].includes(k),\n );\n return {\n imgAttribute: state.imgAttribute,\n toolStyle: state.toolStyle,\n ...annotationState,\n };\n};\n\nexport default connect(mapStateToProps, null, null, { context: LabelBeeContext })(\n AnnotationOperation,\n);\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/views/MainView/annotationOperation/index.tsx"],"sourcesContent":["import { store } from '@/index';\nimport { LabelBeeContext } from '@/store/ctx';\nimport { message } from 'antd/es';\nimport _ from 'lodash';\nimport React, { useEffect, useRef, useState } from 'react';\nimport { connect } from 'react-redux';\nimport { AppState } from 'src/store';\nimport { ImgAttributeState } from 'src/store/imgAttribute/types';\n\nimport { AppProps } from '@/App';\nimport FileError from '@/components/fileException/FileError';\nimport useSize from '@/hooks/useSize';\nimport { InitToolStyleConfig } from '@/store/toolStyle/actionCreators';\nimport { AnnotationEngine, ImgUtils } from '@labelbee/lb-annotation';\nimport { i18n } from '@labelbee/lb-utils';\nimport { IStepInfo } from '@/types/step';\nimport StepUtils from '@/utils/StepUtils';\n\ninterface IProps extends AppState, AppProps {\n imgAttribute: ImgAttributeState;\n imgIndex: number;\n annotationEngine: AnnotationEngine;\n loading: boolean;\n stepList: IStepInfo[];\n step: number;\n}\n\nconst AnnotationOperation: React.FC<IProps> = (props: IProps) => {\n const [, forceRender] = useState<number>(0);\n\n const {\n imgAttribute,\n toolStyle,\n toolInstance,\n annotationEngine,\n imgList,\n imgIndex,\n dataInjectionAtCreation,\n renderEnhance,\n customRenderStyle,\n stepList,\n step,\n drawLayerSlot,\n } = props;\n const [annotationPos, setAnnotationPos] = useState({ zoom: 1, currentPos: { x: 0, y: 0 } });\n const annotationRef = useRef<HTMLDivElement>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n const size = useSize(annotationRef);\n\n useEffect(() => {\n store.dispatch(InitToolStyleConfig());\n }, []);\n\n useEffect(() => {\n if (!annotationEngine) {\n return;\n }\n\n // 更改 toolInstance 内部国际化语言\n switch (i18n.language) {\n case 'cn':\n case 'en':\n annotationEngine.setLang(i18n.language);\n break;\n default: {\n //\n break;\n }\n }\n annotationEngine?.setDataInjectionAtCreation(dataInjectionAtCreation);\n annotationEngine?.setRenderEnhance(renderEnhance);\n if (customRenderStyle) {\n annotationEngine?.setCustomRenderStyle(customRenderStyle);\n }\n }, [annotationEngine, dataInjectionAtCreation, renderEnhance, customRenderStyle]);\n\n useEffect(() => {\n const renderZoom = (zoom: number, currentPos: { x: number; y: number }) => {\n setAnnotationPos({ zoom, currentPos });\n };\n\n const dragMove = (props: { currentPos: { x: number; y: number }; zoom: number }) => {\n setAnnotationPos(props);\n };\n\n if (toolInstance) {\n toolInstance.singleOn('messageError', (error: string) => {\n message.error(error);\n });\n\n toolInstance.singleOn('messageInfo', (info: string) => {\n message.info(info);\n });\n\n toolInstance.singleOn('changeAnnotationShow', () => {\n forceRender((s) => s + 1);\n });\n\n toolInstance.on('renderZoom', renderZoom);\n toolInstance.on('dragMove', dragMove);\n }\n\n return () => {\n if (toolInstance) {\n toolInstance.unbind('renderZoom', renderZoom);\n toolInstance.unbind('dragMove', dragMove);\n }\n };\n }, [toolInstance]);\n\n useEffect(() => {\n if (annotationEngine?.setImgAttribute) {\n annotationEngine.setImgAttribute(imgAttribute);\n } else {\n // Old version.\n toolInstance?.setImgAttribute?.(imgAttribute);\n }\n }, [imgAttribute, annotationEngine]);\n\n /** 样式同步 */\n useEffect(() => {\n if (toolInstance) {\n toolInstance.setStyle(toolStyle);\n }\n if (annotationEngine) {\n annotationEngine.setStyle(toolStyle);\n }\n }, [toolStyle]);\n\n /** 窗口大小监听 */\n useEffect(() => {\n if (toolInstance?.setSize) {\n toolInstance.setSize(size);\n }\n\n if (annotationEngine) {\n annotationEngine.setSize(size);\n }\n }, [size]);\n\n useEffect(() => {\n // Update StepList When it update by outside\n const currentStepInfo = StepUtils.getCurrentStepInfo(step, stepList);\n toolInstance?.setConfig(currentStepInfo.config);\n }, [stepList]);\n\n /**\n * 重新加载图片,避免网络问题导致的图片无法加载\n * @returns\n */\n const reloadImg = () => {\n const imgInfo = imgList?.[imgIndex];\n if (!imgInfo?.url) {\n return;\n }\n\n ImgUtils.load(imgInfo.url).then((imgNode) => {\n annotationEngine.setImgNode(imgNode as HTMLImageElement);\n });\n };\n\n return (\n <div ref={annotationRef} className='annotationOperation'>\n <div className='canvas' ref={containerRef} style={size} id='toolContainer'>\n {drawLayerSlot?.(annotationPos)}\n </div>\n {toolInstance?.isImgError === true && (\n <FileError\n {...size}\n reloadImage={reloadImg}\n backgroundColor='#e2e2e2'\n ignoreOffsetY={true}\n />\n )}\n </div>\n );\n};\n\nconst mapStateToProps = (state: AppState) => {\n const annotationState = _.pickBy(state.annotation, (v, k) =>\n [\n 'imgList',\n 'imgIndex',\n 'stepList',\n 'step',\n 'toolInstance',\n 'annotationEngine',\n 'loading',\n ].includes(k),\n );\n return {\n imgAttribute: state.imgAttribute,\n toolStyle: state.toolStyle,\n ...annotationState,\n };\n};\n\nexport default connect(mapStateToProps, null, null, { context: LabelBeeContext })(\n AnnotationOperation,\n);\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import y from"../../../../assets/annotation/common/icon_clear.svg.js";import _ from"../../../../assets/annotation/common/icon_clear_a.svg.js";import S from"../../../../assets/annotation/common/icon_invalid.svg.js";import h from"../../../../assets/annotation/common/icon_invalid_a.svg.js";import{StopOutlined as a}from"@ant-design/icons";import{useTranslation as j}from"react-i18next";import s,{
|
|
1
|
+
import y from"../../../../assets/annotation/common/icon_clear.svg.js";import _ from"../../../../assets/annotation/common/icon_clear_a.svg.js";import S from"../../../../assets/annotation/common/icon_invalid.svg.js";import h from"../../../../assets/annotation/common/icon_invalid_a.svg.js";import{StopOutlined as a}from"@ant-design/icons";import{useTranslation as j}from"react-i18next";import s,{useState as O,useMemo as P}from"react";import{CopyBackWordResult as x}from"../../../../store/annotation/actionCreators.js";import{store as C}from"../../../../index.js";import{useSelector as k}from"../../../../store/ctx.js";var w=Object.defineProperty,m=Object.getOwnPropertySymbols,V=Object.prototype.hasOwnProperty,E=Object.prototype.propertyIsEnumerable,c=(e,t,r)=>t in e?w(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,R=(e,t)=>{for(var r in t||(t={}))V.call(t,r)&&c(e,r,t[r]);if(m)for(var r of m(t))E.call(t,r)&&c(e,r,t[r]);return e};const b=e=>{const[t,r]=O(0),{t:o,i18n:l}=j(),{currentData:p}=k(i=>{const{imgList:g,imgIndex:d}=i.annotation;return{currentData:g[d]}}),n={height:"25px",lineHeight:"25px",display:"flex",justifyContent:"center",alignItems:"center"},u={name:o("ClearLabel"),key:"empty",imgSvg:y,hoverSvg:_,onClick:()=>{e==null||e.clearResult()}},v={name:o((e==null?void 0:e.valid)===!1?"SetAsValid":"SetAsInvalid"),key:"setValidity",imgSvg:s.createElement(a,{style:n}),hoverSvg:s.createElement(a,{style:R({color:"#666fff"},n)}),onClick:()=>{e.setValid(!e.valid),setTimeout(()=>{r(i=>i+1)})}},f={name:o("CopyThePrevious"),key:"copyPrevious",imgSvg:S,hoverSvg:h,onClick:()=>{C.dispatch(x())}};return P(()=>({empty:u,setValidity:v,copyPrevious:f}),[e,t,p,l.language])};export{b as default};
|