@labelbee/lb-annotation 1.14.0-alpha.3 → 1.14.0-alpha.6
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/_virtual/MathUtilsWorker.js +1 -8
- package/dist/_virtual/_rollup-plugin-web-worker-loader__helper__browser__createBase64WorkerFactory.js +2 -35
- package/dist/_virtual/filterBoxWorker.js +1 -8
- package/dist/_virtual/highlightWorker.js +1 -8
- package/dist/assets/attributeIcon/icon_canvasEdit0.svg.js +1 -5
- package/dist/assets/attributeIcon/icon_canvasEdit1.svg.js +1 -5
- package/dist/assets/attributeIcon/icon_canvasEdit2.svg.js +1 -5
- package/dist/assets/attributeIcon/icon_canvasEdit3.svg.js +1 -5
- package/dist/assets/attributeIcon/icon_canvasEdit4.svg.js +1 -5
- package/dist/assets/attributeIcon/icon_canvasEdit5.svg.js +1 -5
- package/dist/assets/attributeIcon/icon_canvasEdit6.svg.js +1 -5
- package/dist/assets/attributeIcon/icon_canvasEdit7.svg.js +1 -5
- package/dist/assets/attributeIcon/icon_canvasEdit8.svg.js +1 -5
- package/dist/assets/attributeIcon/icon_canvasEdit_miss.svg.js +1 -5
- package/dist/assets/attributeIcon/icon_cuboidFAB.svg.js +5 -5
- package/dist/assets/attributeIcon/icon_cuboidLeft.svg.js +7 -5
- package/dist/assets/attributeIcon/icon_cuboidMore.svg.js +5 -5
- package/dist/assets/attributeIcon/icon_cuboidRight.svg.js +5 -5
- package/dist/assets/attributeIcon/icon_cuboidTop.svg.js +12 -5
- package/dist/assets/attributeIcon/icon_editFEN.svg.js +1 -5
- package/dist/assets/attributeIcon/icon_editHUANG.svg.js +1 -5
- package/dist/assets/attributeIcon/icon_editLAN.svg.js +1 -5
- package/dist/assets/attributeIcon/icon_editLV.svg.js +1 -5
- package/dist/assets/attributeIcon/icon_editQING.svg.js +1 -5
- package/dist/constant/annotation.js +1 -127
- package/dist/constant/annotationTask.js +1 -30
- package/dist/constant/defaultConfig.js +1 -266
- package/dist/constant/keyCode.js +1 -38
- package/dist/constant/style.js +1 -98
- package/dist/constant/tool.js +1 -236
- package/dist/core/index.js +1 -150
- package/dist/core/pointCloud/OrbitControls.js +1 -665
- package/dist/core/pointCloud/PCDLoader.js +2 -260
- package/dist/core/pointCloud/annotation.js +1 -215
- package/dist/core/pointCloud/cache.js +1 -53
- package/dist/core/pointCloud/index.js +5 -991
- package/dist/core/pointCloud/matrix.js +1 -138
- package/dist/core/scheduler.js +1 -233
- package/dist/core/toolOperation/LineToolOperation.js +1 -1434
- package/dist/core/toolOperation/ScribbleTool.js +1 -292
- package/dist/core/toolOperation/TextToolOperation.js +1 -131
- package/dist/core/toolOperation/ViewOperation.js +1 -556
- package/dist/core/toolOperation/basicToolOperation.js +1 -881
- package/dist/core/toolOperation/checkOperation.js +1 -208
- package/dist/core/toolOperation/cuboidOperation.js +1 -754
- package/dist/core/toolOperation/cuboidToggleButtonClass.js +7 -152
- package/dist/core/toolOperation/eventListener.js +1 -37
- package/dist/core/toolOperation/measureOperation.js +1 -41
- package/dist/core/toolOperation/pointCloud2dOperation.js +1 -365
- package/dist/core/toolOperation/pointOperation.js +1 -696
- package/dist/core/toolOperation/polygonOperation.js +1 -1251
- package/dist/core/toolOperation/rectOperation.js +1 -1233
- package/dist/core/toolOperation/segmentByRect.js +1 -174
- package/dist/core/toolOperation/tagOperation.js +3 -201
- package/dist/core/toolOperation/textAttributeClass.js +16 -182
- package/dist/index.js +1 -185
- package/dist/locales/constants.js +1 -24
- package/dist/locales/en_US/message.js +1 -25
- package/dist/locales/index.js +1 -19
- package/dist/locales/zh_CN/message.js +1 -25
- package/dist/newCore/CanvasScheduler.js +1 -35
- package/dist/types/core/pointCloud/index.d.ts +2 -2
- package/dist/utils/ActionsHistory.js +1 -84
- package/dist/utils/ImgUtils.js +1 -23
- package/dist/utils/MathUtils.js +2 -385
- package/dist/utils/VectorUtils.js +1 -25
- package/dist/utils/tool/AttributeUtils.js +1 -218
- package/dist/utils/tool/AxisUtils.js +1 -340
- package/dist/utils/tool/CanvasUtils.js +1 -62
- package/dist/utils/tool/CommonToolUtils.js +1 -174
- package/dist/utils/tool/CuboidUtils.js +1 -704
- package/dist/utils/tool/DblClickEventListener.js +1 -102
- package/dist/utils/tool/DrawUtils.js +3 -492
- package/dist/utils/tool/EnhanceCommonToolUtils.js +1 -53
- package/dist/utils/tool/ImgPosUtils.js +1 -58
- package/dist/utils/tool/LineToolUtils.js +1 -261
- package/dist/utils/tool/MarkerUtils.js +1 -56
- package/dist/utils/tool/PolygonUtils.js +1 -460
- package/dist/utils/tool/RectUtils.js +1 -155
- package/dist/utils/tool/RenderDomClass.js +7 -57
- package/dist/utils/tool/RenderDomUtils.js +4 -21
- package/dist/utils/tool/StyleUtils.js +1 -31
- package/dist/utils/tool/TagUtils.js +1 -129
- package/dist/utils/tool/UnitUtils.js +1 -12
- package/dist/utils/tool/ZoomUtils.js +1 -72
- package/dist/utils/tool/polygonTool.js +1 -133
- package/dist/utils/uuid.js +1 -26
- package/es/_virtual/MathUtilsWorker.js +1 -6
- package/es/_virtual/_rollup-plugin-web-worker-loader__helper__browser__createBase64WorkerFactory.js +2 -31
- package/es/_virtual/filterBoxWorker.js +1 -6
- package/es/_virtual/highlightWorker.js +1 -6
- package/es/assets/attributeIcon/icon_canvasEdit0.svg.js +1 -3
- package/es/assets/attributeIcon/icon_canvasEdit1.svg.js +1 -3
- package/es/assets/attributeIcon/icon_canvasEdit2.svg.js +1 -3
- package/es/assets/attributeIcon/icon_canvasEdit3.svg.js +1 -3
- package/es/assets/attributeIcon/icon_canvasEdit4.svg.js +1 -3
- package/es/assets/attributeIcon/icon_canvasEdit5.svg.js +1 -3
- package/es/assets/attributeIcon/icon_canvasEdit6.svg.js +1 -3
- package/es/assets/attributeIcon/icon_canvasEdit7.svg.js +1 -3
- package/es/assets/attributeIcon/icon_canvasEdit8.svg.js +1 -3
- package/es/assets/attributeIcon/icon_canvasEdit_miss.svg.js +1 -3
- package/es/assets/attributeIcon/icon_cuboidFAB.svg.js +5 -3
- package/es/assets/attributeIcon/icon_cuboidLeft.svg.js +7 -3
- package/es/assets/attributeIcon/icon_cuboidMore.svg.js +5 -3
- package/es/assets/attributeIcon/icon_cuboidRight.svg.js +5 -3
- package/es/assets/attributeIcon/icon_cuboidTop.svg.js +12 -3
- package/es/assets/attributeIcon/icon_editFEN.svg.js +1 -3
- package/es/assets/attributeIcon/icon_editHUANG.svg.js +1 -3
- package/es/assets/attributeIcon/icon_editLAN.svg.js +1 -3
- package/es/assets/attributeIcon/icon_editLV.svg.js +1 -3
- package/es/assets/attributeIcon/icon_editQING.svg.js +1 -3
- package/es/constant/annotation.js +1 -113
- package/es/constant/annotationTask.js +1 -25
- package/es/constant/defaultConfig.js +1 -260
- package/es/constant/keyCode.js +1 -36
- package/es/constant/style.js +1 -74
- package/es/constant/tool.js +1 -220
- package/es/core/index.js +1 -148
- package/es/core/pointCloud/OrbitControls.js +1 -661
- package/es/core/pointCloud/PCDLoader.js +2 -256
- package/es/core/pointCloud/annotation.js +1 -211
- package/es/core/pointCloud/cache.js +1 -49
- package/es/core/pointCloud/index.js +5 -962
- package/es/core/pointCloud/matrix.js +1 -109
- package/es/core/scheduler.js +1 -228
- package/es/core/toolOperation/LineToolOperation.js +1 -1421
- package/es/core/toolOperation/ScribbleTool.js +1 -290
- package/es/core/toolOperation/TextToolOperation.js +1 -129
- package/es/core/toolOperation/ViewOperation.js +1 -549
- package/es/core/toolOperation/basicToolOperation.js +1 -877
- package/es/core/toolOperation/checkOperation.js +1 -206
- package/es/core/toolOperation/cuboidOperation.js +1 -752
- package/es/core/toolOperation/cuboidToggleButtonClass.js +7 -150
- package/es/core/toolOperation/eventListener.js +1 -35
- package/es/core/toolOperation/measureOperation.js +1 -39
- package/es/core/toolOperation/pointCloud2dOperation.js +1 -359
- package/es/core/toolOperation/pointOperation.js +1 -690
- package/es/core/toolOperation/polygonOperation.js +1 -1245
- package/es/core/toolOperation/rectOperation.js +1 -1228
- package/es/core/toolOperation/segmentByRect.js +1 -172
- package/es/core/toolOperation/tagOperation.js +3 -199
- package/es/core/toolOperation/textAttributeClass.js +16 -180
- package/es/index.js +1 -46
- package/es/locales/constants.js +1 -22
- package/es/locales/en_US/message.js +1 -23
- package/es/locales/index.js +1 -17
- package/es/locales/zh_CN/message.js +1 -23
- package/es/newCore/CanvasScheduler.js +1 -31
- package/es/utils/ActionsHistory.js +1 -78
- package/es/utils/ImgUtils.js +1 -21
- package/es/utils/MathUtils.js +2 -380
- package/es/utils/VectorUtils.js +1 -23
- package/es/utils/tool/AttributeUtils.js +1 -212
- package/es/utils/tool/AxisUtils.js +1 -335
- package/es/utils/tool/CanvasUtils.js +1 -60
- package/es/utils/tool/CommonToolUtils.js +1 -172
- package/es/utils/tool/CuboidUtils.js +1 -680
- package/es/utils/tool/DblClickEventListener.js +1 -100
- package/es/utils/tool/DrawUtils.js +3 -490
- package/es/utils/tool/EnhanceCommonToolUtils.js +1 -48
- package/es/utils/tool/ImgPosUtils.js +1 -56
- package/es/utils/tool/LineToolUtils.js +1 -255
- package/es/utils/tool/MarkerUtils.js +1 -54
- package/es/utils/tool/PolygonUtils.js +1 -458
- package/es/utils/tool/RectUtils.js +1 -153
- package/es/utils/tool/RenderDomClass.js +7 -55
- package/es/utils/tool/RenderDomUtils.js +4 -19
- package/es/utils/tool/StyleUtils.js +1 -29
- package/es/utils/tool/TagUtils.js +1 -127
- package/es/utils/tool/UnitUtils.js +1 -10
- package/es/utils/tool/ZoomUtils.js +1 -70
- package/es/utils/tool/polygonTool.js +1 -126
- package/es/utils/uuid.js +1 -24
- package/package.json +3 -4
- package/LICENSE +0 -203
- package/dist/core/pointCloud/segmentation.js +0 -144
- package/dist/core/pointCloud/selector/Sse3dLassoSelector.js +0 -26
- package/dist/core/pointCloud/selector/Sse3dSelector.js +0 -16
- package/dist/types/core/pointCloud/segmentation.d.ts +0 -0
- package/dist/types/core/pointCloud/selector/Sse3dLassoSelector.d.ts +0 -0
- package/dist/types/core/pointCloud/selector/Sse3dSelector.d.ts +0 -0
- package/es/_virtual/_rollup-plugin-web-worker-loader__helper__auto__createBase64WorkerFactory.js +0 -12
- package/es/_virtual/_rollup-plugin-web-worker-loader__helper__auto__isNodeJS.js +0 -7
- package/es/_virtual/_rollup-plugin-web-worker-loader__helper__node__WorkerClass.js +0 -11
- package/es/_virtual/_rollup-plugin-web-worker-loader__helper__node__createBase64WorkerFactory.js +0 -18
- package/es/core/pointCloud/segmentation.js +0 -120
- package/es/core/pointCloud/selector/Sse3dLassoSelector.js +0 -24
- package/es/core/pointCloud/selector/Sse3dSelector.js +0 -14
- package/es/core/toolOperation/scribbleTool2.js +0 -249
|
@@ -1,256 +1,2 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
class PCDLoader extends Loader {
|
|
5
|
-
constructor(manager) {
|
|
6
|
-
super(manager);
|
|
7
|
-
this.littleEndian = true;
|
|
8
|
-
}
|
|
9
|
-
load(url, onLoad, onProgress, onError) {
|
|
10
|
-
const scope = this;
|
|
11
|
-
const loader = new FileLoader(scope.manager);
|
|
12
|
-
loader.setPath(scope.path);
|
|
13
|
-
loader.setResponseType("arraybuffer");
|
|
14
|
-
loader.setRequestHeader(scope.requestHeader);
|
|
15
|
-
loader.setWithCredentials(scope.withCredentials);
|
|
16
|
-
loader.load(url, function(data) {
|
|
17
|
-
try {
|
|
18
|
-
onLoad(scope.parse(data));
|
|
19
|
-
} catch (e) {
|
|
20
|
-
if (onError) {
|
|
21
|
-
onError(e);
|
|
22
|
-
} else {
|
|
23
|
-
console.error(e);
|
|
24
|
-
}
|
|
25
|
-
scope.manager.itemError(url);
|
|
26
|
-
}
|
|
27
|
-
}, onProgress, onError);
|
|
28
|
-
}
|
|
29
|
-
parse(data) {
|
|
30
|
-
function decompressLZF(inData, outLength) {
|
|
31
|
-
const inLength = inData.length;
|
|
32
|
-
const outData = new Uint8Array(outLength);
|
|
33
|
-
let inPtr = 0;
|
|
34
|
-
let outPtr = 0;
|
|
35
|
-
let ctrl;
|
|
36
|
-
let len;
|
|
37
|
-
let ref;
|
|
38
|
-
do {
|
|
39
|
-
ctrl = inData[inPtr++];
|
|
40
|
-
if (ctrl < 1 << 5) {
|
|
41
|
-
ctrl++;
|
|
42
|
-
if (outPtr + ctrl > outLength)
|
|
43
|
-
throw new Error("Output buffer is not large enough");
|
|
44
|
-
if (inPtr + ctrl > inLength)
|
|
45
|
-
throw new Error("Invalid compressed data");
|
|
46
|
-
do {
|
|
47
|
-
outData[outPtr++] = inData[inPtr++];
|
|
48
|
-
} while (--ctrl);
|
|
49
|
-
} else {
|
|
50
|
-
len = ctrl >> 5;
|
|
51
|
-
ref = outPtr - ((ctrl & 31) << 8) - 1;
|
|
52
|
-
if (inPtr >= inLength)
|
|
53
|
-
throw new Error("Invalid compressed data");
|
|
54
|
-
if (len === 7) {
|
|
55
|
-
len += inData[inPtr++];
|
|
56
|
-
if (inPtr >= inLength)
|
|
57
|
-
throw new Error("Invalid compressed data");
|
|
58
|
-
}
|
|
59
|
-
ref -= inData[inPtr++];
|
|
60
|
-
if (outPtr + len + 2 > outLength)
|
|
61
|
-
throw new Error("Output buffer is not large enough");
|
|
62
|
-
if (ref < 0)
|
|
63
|
-
throw new Error("Invalid compressed data");
|
|
64
|
-
if (ref >= outPtr)
|
|
65
|
-
throw new Error("Invalid compressed data");
|
|
66
|
-
do {
|
|
67
|
-
outData[outPtr++] = outData[ref++];
|
|
68
|
-
} while (--len + 2);
|
|
69
|
-
}
|
|
70
|
-
} while (inPtr < inLength);
|
|
71
|
-
return outData;
|
|
72
|
-
}
|
|
73
|
-
function parseHeader(data2) {
|
|
74
|
-
const PCDheader2 = {};
|
|
75
|
-
const result1 = data2.search(/[\n\r]data\s(\S*)\s/i);
|
|
76
|
-
const result2 = /[\n\r]data\s(\S*)\s/i.exec(data2.slice(result1 - 1));
|
|
77
|
-
PCDheader2.data = result2[1];
|
|
78
|
-
PCDheader2.headerLen = result2[0].length + result1;
|
|
79
|
-
PCDheader2.str = data2.slice(0, PCDheader2.headerLen);
|
|
80
|
-
PCDheader2.str = PCDheader2.str.replace(/#.*/gi, "");
|
|
81
|
-
PCDheader2.version = /version (.*)/i.exec(PCDheader2.str);
|
|
82
|
-
PCDheader2.fields = /fields (.*)/i.exec(PCDheader2.str);
|
|
83
|
-
PCDheader2.size = /size (.*)/i.exec(PCDheader2.str);
|
|
84
|
-
PCDheader2.type = /type (.*)/i.exec(PCDheader2.str);
|
|
85
|
-
PCDheader2.count = /count (.*)/i.exec(PCDheader2.str);
|
|
86
|
-
PCDheader2.width = /width (.*)/i.exec(PCDheader2.str);
|
|
87
|
-
PCDheader2.height = /height (.*)/i.exec(PCDheader2.str);
|
|
88
|
-
PCDheader2.viewpoint = /viewpoint (.*)/i.exec(PCDheader2.str);
|
|
89
|
-
PCDheader2.points = /points (.*)/i.exec(PCDheader2.str);
|
|
90
|
-
if (PCDheader2.version !== null)
|
|
91
|
-
PCDheader2.version = parseFloat(PCDheader2.version[1]);
|
|
92
|
-
PCDheader2.fields = PCDheader2.fields !== null ? PCDheader2.fields[1].split(" ") : [];
|
|
93
|
-
if (PCDheader2.type !== null)
|
|
94
|
-
PCDheader2.type = PCDheader2.type[1].split(" ");
|
|
95
|
-
if (PCDheader2.width !== null)
|
|
96
|
-
PCDheader2.width = parseInt(PCDheader2.width[1]);
|
|
97
|
-
if (PCDheader2.height !== null)
|
|
98
|
-
PCDheader2.height = parseInt(PCDheader2.height[1]);
|
|
99
|
-
if (PCDheader2.viewpoint !== null)
|
|
100
|
-
PCDheader2.viewpoint = PCDheader2.viewpoint[1];
|
|
101
|
-
if (PCDheader2.points !== null)
|
|
102
|
-
PCDheader2.points = parseInt(PCDheader2.points[1], 10);
|
|
103
|
-
if (PCDheader2.points === null)
|
|
104
|
-
PCDheader2.points = PCDheader2.width * PCDheader2.height;
|
|
105
|
-
if (PCDheader2.size !== null) {
|
|
106
|
-
PCDheader2.size = PCDheader2.size[1].split(" ").map(function(x) {
|
|
107
|
-
return parseInt(x, 10);
|
|
108
|
-
});
|
|
109
|
-
}
|
|
110
|
-
if (PCDheader2.count !== null) {
|
|
111
|
-
PCDheader2.count = PCDheader2.count[1].split(" ").map(function(x) {
|
|
112
|
-
return parseInt(x, 10);
|
|
113
|
-
});
|
|
114
|
-
} else {
|
|
115
|
-
PCDheader2.count = [];
|
|
116
|
-
for (let i = 0, l = PCDheader2.fields.length; i < l; i++) {
|
|
117
|
-
PCDheader2.count.push(1);
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
PCDheader2.offset = {};
|
|
121
|
-
let sizeSum = 0;
|
|
122
|
-
for (let i = 0, l = PCDheader2.fields.length; i < l; i++) {
|
|
123
|
-
if (PCDheader2.data === "ascii") {
|
|
124
|
-
PCDheader2.offset[PCDheader2.fields[i]] = i;
|
|
125
|
-
} else {
|
|
126
|
-
PCDheader2.offset[PCDheader2.fields[i]] = sizeSum;
|
|
127
|
-
sizeSum += PCDheader2.size[i] * PCDheader2.count[i];
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
PCDheader2.rowSize = sizeSum;
|
|
131
|
-
return PCDheader2;
|
|
132
|
-
}
|
|
133
|
-
const textData = LoaderUtils.decodeText(new Uint8Array(data));
|
|
134
|
-
const PCDheader = parseHeader(textData);
|
|
135
|
-
const position = [];
|
|
136
|
-
const normal = [];
|
|
137
|
-
const color = [];
|
|
138
|
-
if (PCDheader.data === "ascii") {
|
|
139
|
-
const {offset} = PCDheader;
|
|
140
|
-
const pcdData = textData.slice(PCDheader.headerLen);
|
|
141
|
-
const lines = pcdData.split("\n");
|
|
142
|
-
for (let i = 0, l = lines.length; i < l; i++) {
|
|
143
|
-
if (lines[i] === "")
|
|
144
|
-
continue;
|
|
145
|
-
const line = lines[i].split(" ");
|
|
146
|
-
if (offset.x !== void 0) {
|
|
147
|
-
position.push(parseFloat(line[offset.x]));
|
|
148
|
-
position.push(parseFloat(line[offset.y]));
|
|
149
|
-
position.push(parseFloat(line[offset.z]));
|
|
150
|
-
}
|
|
151
|
-
if (this.genColorByZ) {
|
|
152
|
-
const pdColor = this.genColorByZ(parseFloat(line[offset.x]), parseFloat(line[offset.y]), parseFloat(line[offset.z]));
|
|
153
|
-
const pdColorUnit8 = pdColor.map((hex) => hex / 255);
|
|
154
|
-
color.push(...pdColorUnit8);
|
|
155
|
-
}
|
|
156
|
-
if (offset.normal_x !== void 0) {
|
|
157
|
-
normal.push(parseFloat(line[offset.normal_x]));
|
|
158
|
-
normal.push(parseFloat(line[offset.normal_y]));
|
|
159
|
-
normal.push(parseFloat(line[offset.normal_z]));
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
if (PCDheader.data === "binary_compressed") {
|
|
164
|
-
const sizes = new Uint32Array(data.slice(PCDheader.headerLen, PCDheader.headerLen + 8));
|
|
165
|
-
const compressedSize = sizes[0];
|
|
166
|
-
const decompressedSize = sizes[1];
|
|
167
|
-
const decompressed = decompressLZF(new Uint8Array(data, PCDheader.headerLen + 8, compressedSize), decompressedSize);
|
|
168
|
-
const dataview = new DataView(decompressed.buffer);
|
|
169
|
-
const {offset} = PCDheader;
|
|
170
|
-
for (let i = 0; i < PCDheader.points; i++) {
|
|
171
|
-
if (offset.x !== void 0) {
|
|
172
|
-
position.push(dataview.getFloat32(PCDheader.points * offset.x + PCDheader.size[0] * i, this.littleEndian));
|
|
173
|
-
position.push(dataview.getFloat32(PCDheader.points * offset.y + PCDheader.size[1] * i, this.littleEndian));
|
|
174
|
-
position.push(dataview.getFloat32(PCDheader.points * offset.z + PCDheader.size[2] * i, this.littleEndian));
|
|
175
|
-
}
|
|
176
|
-
if (offset.normal_x !== void 0) {
|
|
177
|
-
normal.push(dataview.getFloat32(PCDheader.points * offset.normal_x + PCDheader.size[4] * i, this.littleEndian));
|
|
178
|
-
normal.push(dataview.getFloat32(PCDheader.points * offset.normal_y + PCDheader.size[5] * i, this.littleEndian));
|
|
179
|
-
normal.push(dataview.getFloat32(PCDheader.points * offset.normal_z + PCDheader.size[6] * i, this.littleEndian));
|
|
180
|
-
}
|
|
181
|
-
if (this.genColorByZ) {
|
|
182
|
-
const pdColor = this.genColorByZ(dataview.getFloat32(PCDheader.points * offset.x + PCDheader.size[0] * i, this.littleEndian), dataview.getFloat32(PCDheader.points * offset.y + PCDheader.size[0] * i, this.littleEndian), dataview.getFloat32(PCDheader.points * offset.z + PCDheader.size[0] * i, this.littleEndian));
|
|
183
|
-
const pdColorUnit8 = pdColor.map((hex) => hex / 255);
|
|
184
|
-
color.push(...pdColorUnit8);
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
if (PCDheader.data === "binary") {
|
|
189
|
-
const dataview = new DataView(data, PCDheader.headerLen);
|
|
190
|
-
const {offset} = PCDheader;
|
|
191
|
-
for (let i = 0, row = 0; i < PCDheader.points; i++, row += PCDheader.rowSize) {
|
|
192
|
-
if (offset.x !== void 0) {
|
|
193
|
-
position.push(dataview.getFloat32(row + offset.x, this.littleEndian));
|
|
194
|
-
position.push(dataview.getFloat32(row + offset.y, this.littleEndian));
|
|
195
|
-
position.push(dataview.getFloat32(row + offset.z, this.littleEndian));
|
|
196
|
-
}
|
|
197
|
-
if (offset.normal_x !== void 0) {
|
|
198
|
-
normal.push(dataview.getFloat32(row + offset.normal_x, this.littleEndian));
|
|
199
|
-
normal.push(dataview.getFloat32(row + offset.normal_y, this.littleEndian));
|
|
200
|
-
normal.push(dataview.getFloat32(row + offset.normal_z, this.littleEndian));
|
|
201
|
-
}
|
|
202
|
-
if (this.genColorByZ) {
|
|
203
|
-
const pdColor = this.genColorByZ(dataview.getFloat32(row + offset.x, this.littleEndian), dataview.getFloat32(row + offset.y, this.littleEndian), dataview.getFloat32(row + offset.z, this.littleEndian));
|
|
204
|
-
const pdColorUnit8 = pdColor.map((hex) => hex / 255);
|
|
205
|
-
color.push(...pdColorUnit8);
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
const geometry = new BufferGeometry();
|
|
210
|
-
if (position.length > 0)
|
|
211
|
-
geometry.setAttribute("position", new Float32BufferAttribute(position, 3));
|
|
212
|
-
if (normal.length > 0)
|
|
213
|
-
geometry.setAttribute("normal", new Float32BufferAttribute(normal, 3));
|
|
214
|
-
if (color.length > 0)
|
|
215
|
-
geometry.setAttribute("color", new Float32BufferAttribute(color, 3));
|
|
216
|
-
geometry.computeBoundingSphere();
|
|
217
|
-
const material = new PointsMaterial({size: 0.01});
|
|
218
|
-
if (color.length > 0) {
|
|
219
|
-
material.vertexColors = true;
|
|
220
|
-
} else {
|
|
221
|
-
material.color.setHex(16777215);
|
|
222
|
-
}
|
|
223
|
-
return new Points(geometry, material);
|
|
224
|
-
}
|
|
225
|
-
genColorByCoord(x, y, z) {
|
|
226
|
-
if (z <= 0) {
|
|
227
|
-
return [128, 128, 128];
|
|
228
|
-
}
|
|
229
|
-
if (z < 5) {
|
|
230
|
-
return [255, 0, 0];
|
|
231
|
-
}
|
|
232
|
-
if (z < 10) {
|
|
233
|
-
return [0, 255, 0];
|
|
234
|
-
}
|
|
235
|
-
return [0, 0, 255];
|
|
236
|
-
}
|
|
237
|
-
genColorByZ(x, y, z) {
|
|
238
|
-
const index = getIndex(z);
|
|
239
|
-
const color = COLOR_MAP_JET[index];
|
|
240
|
-
return [color[0], color[1], color[2]];
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
function getIndex(z) {
|
|
244
|
-
const minZ = -7;
|
|
245
|
-
const maxZ = 3;
|
|
246
|
-
const len = maxZ - minZ;
|
|
247
|
-
if (z < minZ) {
|
|
248
|
-
z = minZ;
|
|
249
|
-
}
|
|
250
|
-
if (z > maxZ) {
|
|
251
|
-
z = maxZ;
|
|
252
|
-
}
|
|
253
|
-
return Math.floor((z - minZ) / len * 255);
|
|
254
|
-
}
|
|
255
|
-
|
|
256
|
-
export { PCDLoader };
|
|
1
|
+
import{Loader as z,FileLoader as C,LoaderUtils as v,BufferGeometry as _,Float32BufferAttribute as F,PointsMaterial as b,Points as L}from"three";import{COLOR_MAP_JET as B}from"@labelbee/lb-utils";class I extends z{constructor(a){super(a);this.littleEndian=!0}load(a,c,h,g){const i=this,l=new C(i.manager);l.setPath(i.path),l.setResponseType("arraybuffer"),l.setRequestHeader(i.requestHeader),l.setWithCredentials(i.withCredentials),l.load(a,function(d){try{c(i.parse(d))}catch(f){g?g(f):console.error(f),i.manager.itemError(a)}},h,g)}parse(a){function c(o,t){const p=o.length,n=new Uint8Array(t);let r=0,e=0,s,w,u;do if(s=o[r++],s<1<<5){if(s++,e+s>t)throw new Error("Output buffer is not large enough");if(r+s>p)throw new Error("Invalid compressed data");do n[e++]=o[r++];while(--s)}else{if(w=s>>5,u=e-((s&31)<<8)-1,r>=p)throw new Error("Invalid compressed data");if(w===7&&(w+=o[r++],r>=p))throw new Error("Invalid compressed data");if(u-=o[r++],e+w+2>t)throw new Error("Output buffer is not large enough");if(u<0)throw new Error("Invalid compressed data");if(u>=e)throw new Error("Invalid compressed data");do n[e++]=n[u++];while(--w+2)}while(r<p);return n}function h(o){const t={},p=o.search(/[\n\r]data\s(\S*)\s/i),n=/[\n\r]data\s(\S*)\s/i.exec(o.slice(p-1));if(t.data=n[1],t.headerLen=n[0].length+p,t.str=o.slice(0,t.headerLen),t.str=t.str.replace(/#.*/gi,""),t.version=/version (.*)/i.exec(t.str),t.fields=/fields (.*)/i.exec(t.str),t.size=/size (.*)/i.exec(t.str),t.type=/type (.*)/i.exec(t.str),t.count=/count (.*)/i.exec(t.str),t.width=/width (.*)/i.exec(t.str),t.height=/height (.*)/i.exec(t.str),t.viewpoint=/viewpoint (.*)/i.exec(t.str),t.points=/points (.*)/i.exec(t.str),t.version!==null&&(t.version=parseFloat(t.version[1])),t.fields=t.fields!==null?t.fields[1].split(" "):[],t.type!==null&&(t.type=t.type[1].split(" ")),t.width!==null&&(t.width=parseInt(t.width[1])),t.height!==null&&(t.height=parseInt(t.height[1])),t.viewpoint!==null&&(t.viewpoint=t.viewpoint[1]),t.points!==null&&(t.points=parseInt(t.points[1],10)),t.points===null&&(t.points=t.width*t.height),t.size!==null&&(t.size=t.size[1].split(" ").map(function(e){return parseInt(e,10)})),t.count!==null)t.count=t.count[1].split(" ").map(function(e){return parseInt(e,10)});else{t.count=[];for(let e=0,s=t.fields.length;e<s;e++)t.count.push(1)}t.offset={};let r=0;for(let e=0,s=t.fields.length;e<s;e++)t.data==="ascii"?t.offset[t.fields[e]]=e:(t.offset[t.fields[e]]=r,r+=t.size[e]*t.count[e]);return t.rowSize=r,t}const g=v.decodeText(new Uint8Array(a)),i=h(g),l=[],d=[],f=[];if(i.data==="ascii"){const{offset:o}=i,p=g.slice(i.headerLen).split(`
|
|
2
|
+
`);for(let n=0,r=p.length;n<r;n++){if(p[n]==="")continue;const e=p[n].split(" ");if(o.x!==void 0&&(l.push(parseFloat(e[o.x])),l.push(parseFloat(e[o.y])),l.push(parseFloat(e[o.z]))),this.genColorByZ){const w=this.genColorByZ(parseFloat(e[o.x]),parseFloat(e[o.y]),parseFloat(e[o.z])).map(u=>u/255);f.push(...w)}o.normal_x!==void 0&&(d.push(parseFloat(e[o.normal_x])),d.push(parseFloat(e[o.normal_y])),d.push(parseFloat(e[o.normal_z])))}}if(i.data==="binary_compressed"){const o=new Uint32Array(a.slice(i.headerLen,i.headerLen+8)),t=o[0],p=o[1],n=c(new Uint8Array(a,i.headerLen+8,t),p),r=new DataView(n.buffer),{offset:e}=i;for(let s=0;s<i.points;s++)if(e.x!==void 0&&(l.push(r.getFloat32(i.points*e.x+i.size[0]*s,this.littleEndian)),l.push(r.getFloat32(i.points*e.y+i.size[1]*s,this.littleEndian)),l.push(r.getFloat32(i.points*e.z+i.size[2]*s,this.littleEndian))),e.normal_x!==void 0&&(d.push(r.getFloat32(i.points*e.normal_x+i.size[4]*s,this.littleEndian)),d.push(r.getFloat32(i.points*e.normal_y+i.size[5]*s,this.littleEndian)),d.push(r.getFloat32(i.points*e.normal_z+i.size[6]*s,this.littleEndian))),this.genColorByZ){const u=this.genColorByZ(r.getFloat32(i.points*e.x+i.size[0]*s,this.littleEndian),r.getFloat32(i.points*e.y+i.size[0]*s,this.littleEndian),r.getFloat32(i.points*e.z+i.size[0]*s,this.littleEndian)).map(E=>E/255);f.push(...u)}}if(i.data==="binary"){const o=new DataView(a,i.headerLen),{offset:t}=i;for(let p=0,n=0;p<i.points;p++,n+=i.rowSize)if(t.x!==void 0&&(l.push(o.getFloat32(n+t.x,this.littleEndian)),l.push(o.getFloat32(n+t.y,this.littleEndian)),l.push(o.getFloat32(n+t.z,this.littleEndian))),t.normal_x!==void 0&&(d.push(o.getFloat32(n+t.normal_x,this.littleEndian)),d.push(o.getFloat32(n+t.normal_y,this.littleEndian)),d.push(o.getFloat32(n+t.normal_z,this.littleEndian))),this.genColorByZ){const e=this.genColorByZ(o.getFloat32(n+t.x,this.littleEndian),o.getFloat32(n+t.y,this.littleEndian),o.getFloat32(n+t.z,this.littleEndian)).map(s=>s/255);f.push(...e)}}const x=new _;l.length>0&&x.setAttribute("position",new F(l,3)),d.length>0&&x.setAttribute("normal",new F(d,3)),f.length>0&&x.setAttribute("color",new F(f,3)),x.computeBoundingSphere();const y=new b({size:.01});return f.length>0?y.vertexColors=!0:y.color.setHex(16777215),new L(x,y)}genColorByCoord(a,c,h){return h<=0?[128,128,128]:h<5?[255,0,0]:h<10?[0,255,0]:[0,0,255]}genColorByZ(a,c,h){const g=Z(h),i=B[g];return[i[0],i[1],i[2]]}}function Z(m){const a=-7,c=3,h=c-a;return m<a&&(m=a),m>c&&(m=c),Math.floor((m-a)/h*255)}export{I as PCDLoader};
|
|
@@ -1,211 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { EToolName, EPolygonPattern } from '../../constant/tool.js';
|
|
3
|
-
import { CanvasScheduler } from '../../newCore/CanvasScheduler.js';
|
|
4
|
-
import { PointCloud } from './index.js';
|
|
5
|
-
import { ToolScheduler, HybridToolUtils } from '../scheduler.js';
|
|
6
|
-
|
|
7
|
-
var __defProp = Object.defineProperty;
|
|
8
|
-
var __defProps = Object.defineProperties;
|
|
9
|
-
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
10
|
-
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
11
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
12
|
-
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
13
|
-
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, {enumerable: true, configurable: true, writable: true, value}) : obj[key] = value;
|
|
14
|
-
var __spreadValues = (a, b) => {
|
|
15
|
-
for (var prop in b || (b = {}))
|
|
16
|
-
if (__hasOwnProp.call(b, prop))
|
|
17
|
-
__defNormalProp(a, prop, b[prop]);
|
|
18
|
-
if (__getOwnPropSymbols)
|
|
19
|
-
for (var prop of __getOwnPropSymbols(b)) {
|
|
20
|
-
if (__propIsEnum.call(b, prop))
|
|
21
|
-
__defNormalProp(a, prop, b[prop]);
|
|
22
|
-
}
|
|
23
|
-
return a;
|
|
24
|
-
};
|
|
25
|
-
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
26
|
-
const createEmptyImage = (size) => {
|
|
27
|
-
const canvas = document.createElement("canvas");
|
|
28
|
-
canvas.width = size.width;
|
|
29
|
-
canvas.height = size.height;
|
|
30
|
-
const ctx = canvas.getContext("2d");
|
|
31
|
-
if (ctx) {
|
|
32
|
-
ctx.fillStyle = "black";
|
|
33
|
-
ctx.fillRect(0, 0, size.width, size.height);
|
|
34
|
-
return canvas.toDataURL();
|
|
35
|
-
}
|
|
36
|
-
return "";
|
|
37
|
-
};
|
|
38
|
-
class PointCloudAnnotation {
|
|
39
|
-
constructor({size, container, pcdPath, extraProps, config, checkMode, toolName}) {
|
|
40
|
-
this.updateLineList = (lineList) => {
|
|
41
|
-
const list = lineList.map((v) => {
|
|
42
|
-
var _a;
|
|
43
|
-
return __spreadProps(__spreadValues({}, v), {
|
|
44
|
-
pointList: (_a = v == null ? void 0 : v.pointList) == null ? void 0 : _a.map((point) => PointCloudUtils.transferWorld2Canvas(point, this.toolInstance.size))
|
|
45
|
-
});
|
|
46
|
-
});
|
|
47
|
-
this.toolScheduler.updateDataByToolName(EToolName.Line, list);
|
|
48
|
-
};
|
|
49
|
-
this.updatePolygonList = (pointCloudDataList, extraList) => {
|
|
50
|
-
let polygonList = pointCloudDataList.map((v) => {
|
|
51
|
-
var _a;
|
|
52
|
-
const {polygon2d: pointList} = this.pointCloudInstance.getBoxTopPolygon2DCoordinate(v);
|
|
53
|
-
return {
|
|
54
|
-
id: v.id,
|
|
55
|
-
sourceID: "",
|
|
56
|
-
pointList,
|
|
57
|
-
isRect: true,
|
|
58
|
-
valid: (_a = v.valid) != null ? _a : true,
|
|
59
|
-
attribute: v.attribute
|
|
60
|
-
};
|
|
61
|
-
});
|
|
62
|
-
if (extraList) {
|
|
63
|
-
polygonList = polygonList.concat(extraList.map((v) => {
|
|
64
|
-
var _a;
|
|
65
|
-
return __spreadProps(__spreadValues({}, v), {
|
|
66
|
-
pointList: (_a = v == null ? void 0 : v.pointList) == null ? void 0 : _a.map((point) => PointCloudUtils.transferWorld2Canvas(point, this.toolInstance.size))
|
|
67
|
-
});
|
|
68
|
-
}));
|
|
69
|
-
}
|
|
70
|
-
this.toolScheduler.updateDataByToolName(EToolName.PointCloudPolygon, polygonList);
|
|
71
|
-
};
|
|
72
|
-
this.updatePointList = (sphereList) => {
|
|
73
|
-
const pointList = sphereList == null ? void 0 : sphereList.map((v) => {
|
|
74
|
-
var _a;
|
|
75
|
-
const {point2d} = this.pointCloudInstance.getSphereTopPoint2DCoordinate(v);
|
|
76
|
-
return __spreadProps(__spreadValues({}, point2d), {
|
|
77
|
-
id: v.id,
|
|
78
|
-
sourceID: "",
|
|
79
|
-
valid: (_a = v.valid) != null ? _a : true,
|
|
80
|
-
attribute: v.attribute,
|
|
81
|
-
textAttribute: ""
|
|
82
|
-
});
|
|
83
|
-
});
|
|
84
|
-
this.toolScheduler.updateDataByToolName(EToolName.Point, pointList);
|
|
85
|
-
};
|
|
86
|
-
const defaultOrthographic = this.getDefaultOrthographic(size);
|
|
87
|
-
const imgSrc = createEmptyImage(size);
|
|
88
|
-
const image = new Image();
|
|
89
|
-
image.src = imgSrc;
|
|
90
|
-
const toolScheduler = new ToolScheduler({container, size, toolName});
|
|
91
|
-
const canvasScheduler = new CanvasScheduler({container});
|
|
92
|
-
const pointCloud = new PointCloud({
|
|
93
|
-
container,
|
|
94
|
-
noAppend: true,
|
|
95
|
-
isOrthographicCamera: true,
|
|
96
|
-
orthographicParams: defaultOrthographic
|
|
97
|
-
});
|
|
98
|
-
if (pcdPath) {
|
|
99
|
-
pointCloud.loadPCDFile(pcdPath);
|
|
100
|
-
}
|
|
101
|
-
canvasScheduler.createCanvas(pointCloud.renderer.domElement);
|
|
102
|
-
const defaultProps = {
|
|
103
|
-
size,
|
|
104
|
-
config: JSON.stringify(__spreadProps(__spreadValues({}, config), {attributeConfigurable: true, hideAttribute: true})),
|
|
105
|
-
imgNode: image,
|
|
106
|
-
checkMode
|
|
107
|
-
};
|
|
108
|
-
if (extraProps) {
|
|
109
|
-
Object.assign(defaultProps, extraProps);
|
|
110
|
-
}
|
|
111
|
-
let toolList = [];
|
|
112
|
-
if (HybridToolUtils.isSingleTool(toolName)) {
|
|
113
|
-
toolList = [toolName];
|
|
114
|
-
} else {
|
|
115
|
-
toolList = toolName;
|
|
116
|
-
}
|
|
117
|
-
toolList.forEach((tool, i) => {
|
|
118
|
-
let toolInstance;
|
|
119
|
-
if (tool === EToolName.PointCloudPolygon) {
|
|
120
|
-
const pointCloudPolygonOperation = toolScheduler.createOperation(tool, image, defaultProps);
|
|
121
|
-
pointCloudPolygonOperation.eventBinding();
|
|
122
|
-
pointCloudPolygonOperation.setPattern(EPolygonPattern.Rect);
|
|
123
|
-
this.toolInstance = pointCloudPolygonOperation;
|
|
124
|
-
this.toolInstance.eventBinding();
|
|
125
|
-
this.pointCloud2dOperation = pointCloudPolygonOperation;
|
|
126
|
-
} else {
|
|
127
|
-
toolInstance = toolScheduler.createOperation(tool, image, defaultProps);
|
|
128
|
-
}
|
|
129
|
-
if (i === toolList.length - 1) {
|
|
130
|
-
if (!this.toolInstance) {
|
|
131
|
-
this.toolInstance = toolInstance;
|
|
132
|
-
this.toolInstance.eventBinding();
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
});
|
|
136
|
-
this.pointCloudInstance = pointCloud;
|
|
137
|
-
this.canvasScheduler = canvasScheduler;
|
|
138
|
-
this.toolScheduler = toolScheduler;
|
|
139
|
-
this.config = config;
|
|
140
|
-
}
|
|
141
|
-
updateConfig(config) {
|
|
142
|
-
this.config = config;
|
|
143
|
-
this.pointCloud2dOperation.setConfig(JSON.stringify(config));
|
|
144
|
-
}
|
|
145
|
-
getDefaultOrthographic(size) {
|
|
146
|
-
return {
|
|
147
|
-
left: -size.width / 2,
|
|
148
|
-
right: size.width / 2,
|
|
149
|
-
top: size.height / 2,
|
|
150
|
-
bottom: -size.height / 2,
|
|
151
|
-
near: 100,
|
|
152
|
-
far: -100
|
|
153
|
-
};
|
|
154
|
-
}
|
|
155
|
-
initSize(size) {
|
|
156
|
-
this.pointCloudInstance.updateTopCamera();
|
|
157
|
-
this.pointCloudInstance.setDefaultControls();
|
|
158
|
-
this.pointCloudInstance.initRenderer();
|
|
159
|
-
this.pointCloudInstance.initOrthographicCamera(this.getDefaultOrthographic(size));
|
|
160
|
-
this.pointCloudInstance.render();
|
|
161
|
-
const imgSrc = createEmptyImage(size);
|
|
162
|
-
const image = new Image();
|
|
163
|
-
image.src = imgSrc;
|
|
164
|
-
image.onload = () => {
|
|
165
|
-
this.toolInstance.setImgNode(image);
|
|
166
|
-
this.toolInstance.initImgPos();
|
|
167
|
-
};
|
|
168
|
-
this.pointCloud2dOperation.setCanvasSize(size);
|
|
169
|
-
}
|
|
170
|
-
addPolygonListOnTopView(result) {
|
|
171
|
-
const pointCloudDataList = PointCloudUtils.getBoxParamsFromResultList(result);
|
|
172
|
-
const polygonList = PointCloudUtils.getPolygonListFromResultList(result);
|
|
173
|
-
this.updatePolygonList(pointCloudDataList, polygonList);
|
|
174
|
-
}
|
|
175
|
-
addLineListOnTopView(result) {
|
|
176
|
-
const lineList = PointCloudUtils.getLineListFromResultList(result);
|
|
177
|
-
this.updateLineList(lineList);
|
|
178
|
-
}
|
|
179
|
-
addPointListOnTopView(result) {
|
|
180
|
-
const sphereList = PointCloudUtils.getSphereParamsFromResultList(result);
|
|
181
|
-
this.updatePointList(sphereList);
|
|
182
|
-
}
|
|
183
|
-
updateData(pcdPath, result, config) {
|
|
184
|
-
if (!this.toolInstance || !this.pointCloudInstance) {
|
|
185
|
-
return;
|
|
186
|
-
}
|
|
187
|
-
this.pointCloudInstance.loadPCDFile(pcdPath, config == null ? void 0 : config.radius);
|
|
188
|
-
this.addPolygonListOnTopView(result);
|
|
189
|
-
this.addLineListOnTopView(result);
|
|
190
|
-
this.addPointListOnTopView(result);
|
|
191
|
-
}
|
|
192
|
-
switchToCanvas(toolName) {
|
|
193
|
-
const newInstance = this.toolScheduler.switchToCanvas(toolName);
|
|
194
|
-
if (newInstance) {
|
|
195
|
-
newInstance.eventBinding();
|
|
196
|
-
this.toolInstance = newInstance;
|
|
197
|
-
return newInstance;
|
|
198
|
-
}
|
|
199
|
-
return this.toolInstance;
|
|
200
|
-
}
|
|
201
|
-
initAllPosition() {
|
|
202
|
-
this.pointCloudInstance.updateTopCamera();
|
|
203
|
-
this.pointCloud2dOperation.initPosition();
|
|
204
|
-
}
|
|
205
|
-
clearAllData() {
|
|
206
|
-
this.pointCloudInstance.clearPointCloudAndRender();
|
|
207
|
-
this.pointCloud2dOperation.clearResult();
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
export { PointCloudAnnotation };
|
|
1
|
+
import{PointCloudUtils as d}from"@labelbee/lb-utils";import{EToolName as h,EPolygonPattern as T}from"../../constant/tool.js";import{CanvasScheduler as R}from"../../newCore/CanvasScheduler.js";import{PointCloud as j}from"./index.js";import{ToolScheduler as B,HybridToolUtils as E}from"../scheduler.js";var A=Object.defineProperty,V=Object.defineProperties,F=Object.getOwnPropertyDescriptors,y=Object.getOwnPropertySymbols,N=Object.prototype.hasOwnProperty,x=Object.prototype.propertyIsEnumerable,w=(n,t,o)=>t in n?A(n,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):n[t]=o,g=(n,t)=>{for(var o in t||(t={}))N.call(t,o)&&w(n,o,t[o]);if(y)for(var o of y(t))x.call(t,o)&&w(n,o,t[o]);return n},m=(n,t)=>V(n,F(t));const S=n=>{const t=document.createElement("canvas");t.width=n.width,t.height=n.height;const o=t.getContext("2d");return o?(o.fillStyle="black",o.fillRect(0,0,n.width,n.height),t.toDataURL()):""};class U{constructor({size:t,container:o,pcdPath:a,extraProps:L,config:O,checkMode:_,toolName:c}){this.updateLineList=s=>{const l=s.map(i=>{var e;return m(g({},i),{pointList:(e=i==null?void 0:i.pointList)==null?void 0:e.map(r=>d.transferWorld2Canvas(r,this.toolInstance.size))})});this.toolScheduler.updateDataByToolName(h.Line,l)},this.updatePolygonList=(s,l)=>{let i=s.map(e=>{var r;const{polygon2d:I}=this.pointCloudInstance.getBoxTopPolygon2DCoordinate(e);return{id:e.id,sourceID:"",pointList:I,isRect:!0,valid:(r=e.valid)!=null?r:!0,attribute:e.attribute}});l&&(i=i.concat(l.map(e=>{var r;return m(g({},e),{pointList:(r=e==null?void 0:e.pointList)==null?void 0:r.map(I=>d.transferWorld2Canvas(I,this.toolInstance.size))})}))),this.toolScheduler.updateDataByToolName(h.PointCloudPolygon,i)},this.updatePointList=s=>{const l=s==null?void 0:s.map(i=>{var e;const{point2d:r}=this.pointCloudInstance.getSphereTopPoint2DCoordinate(i);return m(g({},r),{id:i.id,sourceID:"",valid:(e=i.valid)!=null?e:!0,attribute:i.attribute,textAttribute:""})});this.toolScheduler.updateDataByToolName(h.Point,l)};const b=this.getDefaultOrthographic(t),D=S(t),p=new Image;p.src=D;const C=new B({container:o,size:t,toolName:c}),v=new R({container:o}),f=new j({container:o,noAppend:!0,isOrthographicCamera:!0,orthographicParams:b});a&&f.loadPCDFile(a),v.createCanvas(f.renderer.domElement);const P={size:t,config:JSON.stringify(m(g({},O),{attributeConfigurable:!0,hideAttribute:!0})),imgNode:p,checkMode:_};L&&Object.assign(P,L);let u=[];E.isSingleTool(c)?u=[c]:u=c,u.forEach((s,l)=>{let i;if(s===h.PointCloudPolygon){const e=C.createOperation(s,p,P);e.eventBinding(),e.setPattern(T.Rect),this.toolInstance=e,this.toolInstance.eventBinding(),this.pointCloud2dOperation=e}else i=C.createOperation(s,p,P);l===u.length-1&&(this.toolInstance||(this.toolInstance=i,this.toolInstance.eventBinding()))}),this.pointCloudInstance=f,this.canvasScheduler=v,this.toolScheduler=C,this.config=O}updateConfig(t){this.config=t,this.pointCloud2dOperation.setConfig(JSON.stringify(t))}getDefaultOrthographic(t){return{left:-t.width/2,right:t.width/2,top:t.height/2,bottom:-t.height/2,near:100,far:-100}}initSize(t){this.pointCloudInstance.updateTopCamera(),this.pointCloudInstance.setDefaultControls(),this.pointCloudInstance.initRenderer(),this.pointCloudInstance.initOrthographicCamera(this.getDefaultOrthographic(t)),this.pointCloudInstance.render();const o=S(t),a=new Image;a.src=o,a.onload=()=>{this.toolInstance.setImgNode(a),this.toolInstance.initImgPos()},this.pointCloud2dOperation.setCanvasSize(t)}addPolygonListOnTopView(t){const o=d.getBoxParamsFromResultList(t),a=d.getPolygonListFromResultList(t);this.updatePolygonList(o,a)}addLineListOnTopView(t){const o=d.getLineListFromResultList(t);this.updateLineList(o)}addPointListOnTopView(t){const o=d.getSphereParamsFromResultList(t);this.updatePointList(o)}updateData(t,o,a){!this.toolInstance||!this.pointCloudInstance||(this.pointCloudInstance.loadPCDFile(t,a==null?void 0:a.radius),this.addPolygonListOnTopView(o),this.addLineListOnTopView(o),this.addPointListOnTopView(o))}switchToCanvas(t){const o=this.toolScheduler.switchToCanvas(t);return o?(o.eventBinding(),this.toolInstance=o,o):this.toolInstance}initAllPosition(){this.pointCloudInstance.updateTopCamera(),this.pointCloud2dOperation.initPosition()}clearAllData(){this.pointCloudInstance.clearPointCloudAndRender(),this.pointCloud2dOperation.clearResult()}}export{U as PointCloudAnnotation};
|
|
@@ -1,49 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
class PointCloudCache {
|
|
4
|
-
constructor() {
|
|
5
|
-
this.MAX_SIZE = 50;
|
|
6
|
-
this.cacheList = [];
|
|
7
|
-
this.loadPCDFile = (src) => {
|
|
8
|
-
return new Promise((resolve, reject) => {
|
|
9
|
-
const clonePoints = this.pointsMap.get(src);
|
|
10
|
-
const cloneColor = this.colorMap.get(src);
|
|
11
|
-
if (clonePoints && cloneColor) {
|
|
12
|
-
resolve({points: clonePoints, color: cloneColor});
|
|
13
|
-
return;
|
|
14
|
-
}
|
|
15
|
-
if (this.cacheList.length > this.MAX_SIZE) {
|
|
16
|
-
const firstCacheInfo = this.cacheList.shift();
|
|
17
|
-
if (firstCacheInfo) {
|
|
18
|
-
this.pointsMap.delete(firstCacheInfo.src);
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
this.cacheList.push({src});
|
|
22
|
-
this.pcdLoader.load(src, (points) => {
|
|
23
|
-
const pointsArray = points.geometry.attributes.position.array;
|
|
24
|
-
const colorArray = points.geometry.attributes.color.array;
|
|
25
|
-
this.pointsMap.set(src, pointsArray);
|
|
26
|
-
this.colorMap.set(src, colorArray);
|
|
27
|
-
resolve({points: pointsArray, color: colorArray});
|
|
28
|
-
}, () => {
|
|
29
|
-
}, (err) => {
|
|
30
|
-
reject(err);
|
|
31
|
-
});
|
|
32
|
-
});
|
|
33
|
-
};
|
|
34
|
-
this.pcdLoader = new PCDLoader();
|
|
35
|
-
this.pointsMap = new Map();
|
|
36
|
-
this.colorMap = new Map();
|
|
37
|
-
}
|
|
38
|
-
static getInstance() {
|
|
39
|
-
if (this.instance == null) {
|
|
40
|
-
this.instance = new PointCloudCache();
|
|
41
|
-
}
|
|
42
|
-
return this.instance;
|
|
43
|
-
}
|
|
44
|
-
updateColor(src, color) {
|
|
45
|
-
this.colorMap.set(src, color);
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
export { PointCloudCache };
|
|
1
|
+
import{PCDLoader as h}from"./PCDLoader.js";class i{constructor(){this.MAX_SIZE=50,this.cacheList=[],this.loadPCDFile=t=>new Promise((s,c)=>{const e=this.pointsMap.get(t),a=this.colorMap.get(t);if(e&&a){s({points:e,color:a});return}if(this.cacheList.length>this.MAX_SIZE){const o=this.cacheList.shift();o&&this.pointsMap.delete(o.src)}this.cacheList.push({src:t}),this.pcdLoader.load(t,o=>{const n=o.geometry.attributes.position.array,r=o.geometry.attributes.color.array;this.pointsMap.set(t,n),this.colorMap.set(t,r),s({points:n,color:r})},()=>{},o=>{c(o)})}),this.pcdLoader=new h,this.pointsMap=new Map,this.colorMap=new Map}static getInstance(){return this.instance==null&&(this.instance=new i),this.instance}updateColor(t,s){this.colorMap.set(t,s)}}export{i as PointCloudCache};
|