@labelbee/lb-annotation 1.14.0-alpha.3 → 1.14.0-alpha.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (188) hide show
  1. package/dist/_virtual/MathUtilsWorker.js +1 -8
  2. package/dist/_virtual/_rollup-plugin-web-worker-loader__helper__browser__createBase64WorkerFactory.js +2 -35
  3. package/dist/_virtual/filterBoxWorker.js +1 -8
  4. package/dist/_virtual/highlightWorker.js +1 -8
  5. package/dist/assets/attributeIcon/icon_canvasEdit0.svg.js +1 -5
  6. package/dist/assets/attributeIcon/icon_canvasEdit1.svg.js +1 -5
  7. package/dist/assets/attributeIcon/icon_canvasEdit2.svg.js +1 -5
  8. package/dist/assets/attributeIcon/icon_canvasEdit3.svg.js +1 -5
  9. package/dist/assets/attributeIcon/icon_canvasEdit4.svg.js +1 -5
  10. package/dist/assets/attributeIcon/icon_canvasEdit5.svg.js +1 -5
  11. package/dist/assets/attributeIcon/icon_canvasEdit6.svg.js +1 -5
  12. package/dist/assets/attributeIcon/icon_canvasEdit7.svg.js +1 -5
  13. package/dist/assets/attributeIcon/icon_canvasEdit8.svg.js +1 -5
  14. package/dist/assets/attributeIcon/icon_canvasEdit_miss.svg.js +1 -5
  15. package/dist/assets/attributeIcon/icon_cuboidFAB.svg.js +5 -5
  16. package/dist/assets/attributeIcon/icon_cuboidLeft.svg.js +7 -5
  17. package/dist/assets/attributeIcon/icon_cuboidMore.svg.js +5 -5
  18. package/dist/assets/attributeIcon/icon_cuboidRight.svg.js +5 -5
  19. package/dist/assets/attributeIcon/icon_cuboidTop.svg.js +12 -5
  20. package/dist/assets/attributeIcon/icon_editFEN.svg.js +1 -5
  21. package/dist/assets/attributeIcon/icon_editHUANG.svg.js +1 -5
  22. package/dist/assets/attributeIcon/icon_editLAN.svg.js +1 -5
  23. package/dist/assets/attributeIcon/icon_editLV.svg.js +1 -5
  24. package/dist/assets/attributeIcon/icon_editQING.svg.js +1 -5
  25. package/dist/constant/annotation.js +1 -127
  26. package/dist/constant/annotationTask.js +1 -30
  27. package/dist/constant/defaultConfig.js +1 -266
  28. package/dist/constant/keyCode.js +1 -38
  29. package/dist/constant/style.js +1 -98
  30. package/dist/constant/tool.js +1 -236
  31. package/dist/core/index.js +1 -150
  32. package/dist/core/pointCloud/OrbitControls.js +1 -665
  33. package/dist/core/pointCloud/PCDLoader.js +2 -260
  34. package/dist/core/pointCloud/annotation.js +1 -215
  35. package/dist/core/pointCloud/cache.js +1 -53
  36. package/dist/core/pointCloud/index.js +5 -991
  37. package/dist/core/pointCloud/matrix.js +1 -138
  38. package/dist/core/scheduler.js +1 -233
  39. package/dist/core/toolOperation/LineToolOperation.js +1 -1434
  40. package/dist/core/toolOperation/ScribbleTool.js +1 -292
  41. package/dist/core/toolOperation/TextToolOperation.js +1 -131
  42. package/dist/core/toolOperation/ViewOperation.js +1 -556
  43. package/dist/core/toolOperation/basicToolOperation.js +1 -881
  44. package/dist/core/toolOperation/checkOperation.js +1 -208
  45. package/dist/core/toolOperation/cuboidOperation.js +1 -754
  46. package/dist/core/toolOperation/cuboidToggleButtonClass.js +7 -152
  47. package/dist/core/toolOperation/eventListener.js +1 -37
  48. package/dist/core/toolOperation/measureOperation.js +1 -41
  49. package/dist/core/toolOperation/pointCloud2dOperation.js +1 -365
  50. package/dist/core/toolOperation/pointOperation.js +1 -696
  51. package/dist/core/toolOperation/polygonOperation.js +1 -1251
  52. package/dist/core/toolOperation/rectOperation.js +1 -1233
  53. package/dist/core/toolOperation/segmentByRect.js +1 -174
  54. package/dist/core/toolOperation/tagOperation.js +3 -201
  55. package/dist/core/toolOperation/textAttributeClass.js +16 -182
  56. package/dist/index.js +1 -185
  57. package/dist/locales/constants.js +1 -24
  58. package/dist/locales/en_US/message.js +1 -25
  59. package/dist/locales/index.js +1 -19
  60. package/dist/locales/zh_CN/message.js +1 -25
  61. package/dist/newCore/CanvasScheduler.js +1 -35
  62. package/dist/utils/ActionsHistory.js +1 -84
  63. package/dist/utils/ImgUtils.js +1 -23
  64. package/dist/utils/MathUtils.js +2 -385
  65. package/dist/utils/VectorUtils.js +1 -25
  66. package/dist/utils/tool/AttributeUtils.js +1 -218
  67. package/dist/utils/tool/AxisUtils.js +1 -340
  68. package/dist/utils/tool/CanvasUtils.js +1 -62
  69. package/dist/utils/tool/CommonToolUtils.js +1 -174
  70. package/dist/utils/tool/CuboidUtils.js +1 -704
  71. package/dist/utils/tool/DblClickEventListener.js +1 -102
  72. package/dist/utils/tool/DrawUtils.js +3 -492
  73. package/dist/utils/tool/EnhanceCommonToolUtils.js +1 -53
  74. package/dist/utils/tool/ImgPosUtils.js +1 -58
  75. package/dist/utils/tool/LineToolUtils.js +1 -261
  76. package/dist/utils/tool/MarkerUtils.js +1 -56
  77. package/dist/utils/tool/PolygonUtils.js +1 -460
  78. package/dist/utils/tool/RectUtils.js +1 -155
  79. package/dist/utils/tool/RenderDomClass.js +7 -57
  80. package/dist/utils/tool/RenderDomUtils.js +4 -21
  81. package/dist/utils/tool/StyleUtils.js +1 -31
  82. package/dist/utils/tool/TagUtils.js +1 -129
  83. package/dist/utils/tool/UnitUtils.js +1 -12
  84. package/dist/utils/tool/ZoomUtils.js +1 -72
  85. package/dist/utils/tool/polygonTool.js +1 -133
  86. package/dist/utils/uuid.js +1 -26
  87. package/es/_virtual/MathUtilsWorker.js +1 -6
  88. package/es/_virtual/_rollup-plugin-web-worker-loader__helper__browser__createBase64WorkerFactory.js +2 -31
  89. package/es/_virtual/filterBoxWorker.js +1 -6
  90. package/es/_virtual/highlightWorker.js +1 -6
  91. package/es/assets/attributeIcon/icon_canvasEdit0.svg.js +1 -3
  92. package/es/assets/attributeIcon/icon_canvasEdit1.svg.js +1 -3
  93. package/es/assets/attributeIcon/icon_canvasEdit2.svg.js +1 -3
  94. package/es/assets/attributeIcon/icon_canvasEdit3.svg.js +1 -3
  95. package/es/assets/attributeIcon/icon_canvasEdit4.svg.js +1 -3
  96. package/es/assets/attributeIcon/icon_canvasEdit5.svg.js +1 -3
  97. package/es/assets/attributeIcon/icon_canvasEdit6.svg.js +1 -3
  98. package/es/assets/attributeIcon/icon_canvasEdit7.svg.js +1 -3
  99. package/es/assets/attributeIcon/icon_canvasEdit8.svg.js +1 -3
  100. package/es/assets/attributeIcon/icon_canvasEdit_miss.svg.js +1 -3
  101. package/es/assets/attributeIcon/icon_cuboidFAB.svg.js +5 -3
  102. package/es/assets/attributeIcon/icon_cuboidLeft.svg.js +7 -3
  103. package/es/assets/attributeIcon/icon_cuboidMore.svg.js +5 -3
  104. package/es/assets/attributeIcon/icon_cuboidRight.svg.js +5 -3
  105. package/es/assets/attributeIcon/icon_cuboidTop.svg.js +12 -3
  106. package/es/assets/attributeIcon/icon_editFEN.svg.js +1 -3
  107. package/es/assets/attributeIcon/icon_editHUANG.svg.js +1 -3
  108. package/es/assets/attributeIcon/icon_editLAN.svg.js +1 -3
  109. package/es/assets/attributeIcon/icon_editLV.svg.js +1 -3
  110. package/es/assets/attributeIcon/icon_editQING.svg.js +1 -3
  111. package/es/constant/annotation.js +1 -113
  112. package/es/constant/annotationTask.js +1 -25
  113. package/es/constant/defaultConfig.js +1 -260
  114. package/es/constant/keyCode.js +1 -36
  115. package/es/constant/style.js +1 -74
  116. package/es/constant/tool.js +1 -220
  117. package/es/core/index.js +1 -148
  118. package/es/core/pointCloud/OrbitControls.js +1 -661
  119. package/es/core/pointCloud/PCDLoader.js +2 -256
  120. package/es/core/pointCloud/annotation.js +1 -211
  121. package/es/core/pointCloud/cache.js +1 -49
  122. package/es/core/pointCloud/index.js +5 -962
  123. package/es/core/pointCloud/matrix.js +1 -109
  124. package/es/core/scheduler.js +1 -228
  125. package/es/core/toolOperation/LineToolOperation.js +1 -1421
  126. package/es/core/toolOperation/ScribbleTool.js +1 -290
  127. package/es/core/toolOperation/TextToolOperation.js +1 -129
  128. package/es/core/toolOperation/ViewOperation.js +1 -549
  129. package/es/core/toolOperation/basicToolOperation.js +1 -877
  130. package/es/core/toolOperation/checkOperation.js +1 -206
  131. package/es/core/toolOperation/cuboidOperation.js +1 -752
  132. package/es/core/toolOperation/cuboidToggleButtonClass.js +7 -150
  133. package/es/core/toolOperation/eventListener.js +1 -35
  134. package/es/core/toolOperation/measureOperation.js +1 -39
  135. package/es/core/toolOperation/pointCloud2dOperation.js +1 -359
  136. package/es/core/toolOperation/pointOperation.js +1 -690
  137. package/es/core/toolOperation/polygonOperation.js +1 -1245
  138. package/es/core/toolOperation/rectOperation.js +1 -1228
  139. package/es/core/toolOperation/segmentByRect.js +1 -172
  140. package/es/core/toolOperation/tagOperation.js +3 -199
  141. package/es/core/toolOperation/textAttributeClass.js +16 -180
  142. package/es/index.js +1 -46
  143. package/es/locales/constants.js +1 -22
  144. package/es/locales/en_US/message.js +1 -23
  145. package/es/locales/index.js +1 -17
  146. package/es/locales/zh_CN/message.js +1 -23
  147. package/es/newCore/CanvasScheduler.js +1 -31
  148. package/es/utils/ActionsHistory.js +1 -78
  149. package/es/utils/ImgUtils.js +1 -21
  150. package/es/utils/MathUtils.js +2 -380
  151. package/es/utils/VectorUtils.js +1 -23
  152. package/es/utils/tool/AttributeUtils.js +1 -212
  153. package/es/utils/tool/AxisUtils.js +1 -335
  154. package/es/utils/tool/CanvasUtils.js +1 -60
  155. package/es/utils/tool/CommonToolUtils.js +1 -172
  156. package/es/utils/tool/CuboidUtils.js +1 -680
  157. package/es/utils/tool/DblClickEventListener.js +1 -100
  158. package/es/utils/tool/DrawUtils.js +3 -490
  159. package/es/utils/tool/EnhanceCommonToolUtils.js +1 -48
  160. package/es/utils/tool/ImgPosUtils.js +1 -56
  161. package/es/utils/tool/LineToolUtils.js +1 -255
  162. package/es/utils/tool/MarkerUtils.js +1 -54
  163. package/es/utils/tool/PolygonUtils.js +1 -458
  164. package/es/utils/tool/RectUtils.js +1 -153
  165. package/es/utils/tool/RenderDomClass.js +7 -55
  166. package/es/utils/tool/RenderDomUtils.js +4 -19
  167. package/es/utils/tool/StyleUtils.js +1 -29
  168. package/es/utils/tool/TagUtils.js +1 -127
  169. package/es/utils/tool/UnitUtils.js +1 -10
  170. package/es/utils/tool/ZoomUtils.js +1 -70
  171. package/es/utils/tool/polygonTool.js +1 -126
  172. package/es/utils/uuid.js +1 -24
  173. package/package.json +3 -4
  174. package/LICENSE +0 -203
  175. package/dist/core/pointCloud/segmentation.js +0 -144
  176. package/dist/core/pointCloud/selector/Sse3dLassoSelector.js +0 -26
  177. package/dist/core/pointCloud/selector/Sse3dSelector.js +0 -16
  178. package/dist/types/core/pointCloud/segmentation.d.ts +0 -0
  179. package/dist/types/core/pointCloud/selector/Sse3dLassoSelector.d.ts +0 -0
  180. package/dist/types/core/pointCloud/selector/Sse3dSelector.d.ts +0 -0
  181. package/es/_virtual/_rollup-plugin-web-worker-loader__helper__auto__createBase64WorkerFactory.js +0 -12
  182. package/es/_virtual/_rollup-plugin-web-worker-loader__helper__auto__isNodeJS.js +0 -7
  183. package/es/_virtual/_rollup-plugin-web-worker-loader__helper__node__WorkerClass.js +0 -11
  184. package/es/_virtual/_rollup-plugin-web-worker-loader__helper__node__createBase64WorkerFactory.js +0 -18
  185. package/es/core/pointCloud/segmentation.js +0 -120
  186. package/es/core/pointCloud/selector/Sse3dLassoSelector.js +0 -24
  187. package/es/core/pointCloud/selector/Sse3dSelector.js +0 -14
  188. package/es/core/toolOperation/scribbleTool2.js +0 -249
@@ -1,968 +1,11 @@
1
- import * as THREE from 'three';
2
- import { toolStyleConverter, PerspectiveShiftUtils, EPerspectiveView, PointCloudUtils, DEFAULT_SPHERE_PARAMS } from '@labelbee/lb-utils';
3
- import WorkerFactory from '../../_virtual/highlightWorker.js';
4
- import WorkerFactory$1 from '../../_virtual/filterBoxWorker.js';
5
- import { isInPolygon } from '../../utils/tool/polygonTool.js';
6
- import uuid from '../../utils/uuid.js';
7
- import MathUtils from '../../utils/MathUtils.js';
8
- import { PCDLoader } from './PCDLoader.js';
9
- import { OrbitControls } from './OrbitControls.js';
10
- import { PointCloudCache } from './cache.js';
11
- import { getCuboidFromPointCloudBox } from './matrix.js';
12
- export { createThreeMatrix4, getCuboidFromPointCloudBox, lidar2image, pointCloudLidar2image, rotatePoint, transferKitti2Matrix } from './matrix.js';
13
- import '../../constant/tool.js';
14
- import '../scheduler.js';
15
-
16
- var __defProp = Object.defineProperty;
17
- var __defProps = Object.defineProperties;
18
- var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
19
- var __getOwnPropSymbols = Object.getOwnPropertySymbols;
20
- var __hasOwnProp = Object.prototype.hasOwnProperty;
21
- var __propIsEnum = Object.prototype.propertyIsEnumerable;
22
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, {enumerable: true, configurable: true, writable: true, value}) : obj[key] = value;
23
- var __spreadValues = (a, b) => {
24
- for (var prop in b || (b = {}))
25
- if (__hasOwnProp.call(b, prop))
26
- __defNormalProp(a, prop, b[prop]);
27
- if (__getOwnPropSymbols)
28
- for (var prop of __getOwnPropSymbols(b)) {
29
- if (__propIsEnum.call(b, prop))
30
- __defNormalProp(a, prop, b[prop]);
31
- }
32
- return a;
33
- };
34
- var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
35
- var __async = (__this, __arguments, generator) => {
36
- return new Promise((resolve, reject) => {
37
- var fulfilled = (value) => {
38
- try {
39
- step(generator.next(value));
40
- } catch (e) {
41
- reject(e);
42
- }
43
- };
44
- var rejected = (value) => {
45
- try {
46
- step(generator.throw(value));
47
- } catch (e) {
48
- reject(e);
49
- }
50
- };
51
- var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
52
- step((generator = generator.apply(__this, __arguments)).next());
53
- });
54
- };
55
- const DEFAULT_DISTANCE = 30;
56
- const highlightWorker = new WorkerFactory({type: "module"});
57
- class PointCloud {
58
- constructor({
59
- container,
60
- noAppend,
61
- isOrthographicCamera,
62
- orthographicParams,
63
- backgroundColor = "#4C4C4C",
64
- config
65
- }) {
66
- this.zAxisLimit = 10;
67
- this.initCameraPosition = this.DEFAULT_INIT_CAMERA_POSITION;
68
- this.isOrthographicCamera = false;
69
- this.pointsUuid = "";
70
- this.pointCloudObjectName = "pointCloud";
71
- this.rangeObjectName = "range";
72
- this.showDirection = true;
73
- this.addSphereToSense = (sphereParams, color = "blue") => {
74
- var _a;
75
- const id = (_a = sphereParams.id) != null ? _a : uuid();
76
- this.removeObjectByName(id);
77
- const {radius, widthSegments, heightSegments} = DEFAULT_SPHERE_PARAMS;
78
- const {center} = sphereParams;
79
- const group = new THREE.Group();
80
- const spGeo = new THREE.SphereGeometry(radius, widthSegments, heightSegments);
81
- const spMaterial = new THREE.MeshBasicMaterial({color});
82
- const sphere = new THREE.Mesh(spGeo, spMaterial);
83
- sphere.position.set(center.x, center.y, center.z);
84
- group.add(sphere);
85
- group.name = id;
86
- this.scene.add(group);
87
- };
88
- this.generateSphere = (sphereParams) => {
89
- const {fill} = toolStyleConverter.getColorFromConfig({attribute: sphereParams.attribute}, __spreadProps(__spreadValues({}, this.config), {attributeConfigurable: true}), {});
90
- this.addSphereToSense(sphereParams, fill);
91
- this.render();
92
- };
93
- this.generateSpheres = (spheres) => {
94
- spheres.forEach((sphere) => {
95
- const {fill} = toolStyleConverter.getColorFromConfig({attribute: sphere.attribute}, __spreadProps(__spreadValues({}, this.config), {attributeConfigurable: true}), {});
96
- this.addSphereToSense(sphere, fill);
97
- });
98
- this.render();
99
- };
100
- this.AddBoxToSense = (boxParams, color = 16777215) => {
101
- var _a;
102
- const id = (_a = boxParams.id) != null ? _a : uuid();
103
- this.removeObjectByName(id);
104
- const {center, width, height, depth, rotation} = boxParams;
105
- const group = new THREE.Group();
106
- const geometry = new THREE.BoxGeometry(width, height, depth);
107
- const material = new THREE.MeshBasicMaterial({color: "blue"});
108
- const cube = new THREE.Mesh(geometry, material);
109
- const box = new THREE.BoxHelper(cube, color);
110
- const arrow = this.generateBoxArrow(boxParams);
111
- group.add(box);
112
- group.add(arrow);
113
- if (center) {
114
- group.position.set(center.x, center.y, center.z);
115
- }
116
- if (rotation) {
117
- group.rotation.set(0, 0, rotation);
118
- }
119
- group.name = id;
120
- this.scene.add(group);
121
- };
122
- this.applyCameraTarget = (camera) => {
123
- if (this.camera.type !== "OrthographicCamera") {
124
- return;
125
- }
126
- if (camera) {
127
- const cameraTarget = this.getOrthographicCameraTarget(camera);
128
- this.updateCameraZoom(camera.zoom);
129
- this.updateCamera(camera.position, cameraTarget);
130
- }
131
- };
132
- this.overridePointShader = (shader) => {
133
- shader.vertexShader = `
1
+ import*as c from"three";import{toolStyleConverter as B,PerspectiveShiftUtils as b,EPerspectiveView as w,PointCloudUtils as k,DEFAULT_SPHERE_PARAMS as z}from"@labelbee/lb-utils";import D from"../../_virtual/highlightWorker.js";import L from"../../_virtual/filterBoxWorker.js";import{isInPolygon as N}from"../../utils/tool/polygonTool.js";import T from"../../utils/uuid.js";import F from"../../utils/MathUtils.js";import{PCDLoader as E}from"./PCDLoader.js";import{OrbitControls as R}from"./OrbitControls.js";import{PointCloudCache as W}from"./cache.js";import{getCuboidFromPointCloudBox as A}from"./matrix.js";export{createThreeMatrix4,getCuboidFromPointCloudBox,lidar2image,pointCloudLidar2image,rotatePoint,transferKitti2Matrix}from"./matrix.js";import"../../constant/tool.js";import"../scheduler.js";var Z=Object.defineProperty,H=Object.defineProperties,U=Object.getOwnPropertyDescriptors,O=Object.getOwnPropertySymbols,G=Object.prototype.hasOwnProperty,$=Object.prototype.propertyIsEnumerable,_=(f,t,e)=>t in f?Z(f,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):f[t]=e,M=(f,t)=>{for(var e in t||(t={}))G.call(t,e)&&_(f,e,t[e]);if(O)for(var e of O(t))$.call(t,e)&&_(f,e,t[e]);return f},P=(f,t)=>H(f,U(t)),S=(f,t,e)=>new Promise((r,n)=>{var s=o=>{try{i(e.next(o))}catch(h){n(h)}},a=o=>{try{i(e.throw(o))}catch(h){n(h)}},i=o=>o.done?r(o.value):Promise.resolve(o.value).then(s,a);i((e=e.apply(f,t)).next())});const X=30,j=new D({type:"module"});class Y{constructor({container:t,noAppend:e,isOrthographicCamera:r,orthographicParams:n,backgroundColor:s="#4C4C4C",config:a}){this.zAxisLimit=10,this.initCameraPosition=this.DEFAULT_INIT_CAMERA_POSITION,this.isOrthographicCamera=!1,this.pointsUuid="",this.pointCloudObjectName="pointCloud",this.rangeObjectName="range",this.showDirection=!0,this.addSphereToSense=(i,o="blue")=>{var h;const l=(h=i.id)!=null?h:T();this.removeObjectByName(l);const{radius:d,widthSegments:p,heightSegments:g}=z,{center:x}=i,u=new c.Group,m=new c.SphereGeometry(d,p,g),C=new c.MeshBasicMaterial({color:o}),y=new c.Mesh(m,C);y.position.set(x.x,x.y,x.z),u.add(y),u.name=l,this.scene.add(u)},this.generateSphere=i=>{const{fill:o}=B.getColorFromConfig({attribute:i.attribute},P(M({},this.config),{attributeConfigurable:!0}),{});this.addSphereToSense(i,o),this.render()},this.generateSpheres=i=>{i.forEach(o=>{const{fill:h}=B.getColorFromConfig({attribute:o.attribute},P(M({},this.config),{attributeConfigurable:!0}),{});this.addSphereToSense(o,h)}),this.render()},this.AddBoxToSense=(i,o=16777215)=>{var h;const l=(h=i.id)!=null?h:T();this.removeObjectByName(l);const{center:d,width:p,height:g,depth:x,rotation:u}=i,m=new c.Group,C=new c.BoxGeometry(p,g,x),y=new c.MeshBasicMaterial({color:"blue"}),v=new c.Mesh(C,y),I=new c.BoxHelper(v,o),V=this.generateBoxArrow(i);m.add(I),m.add(V),d&&m.position.set(d.x,d.y,d.z),u&&m.rotation.set(0,0,u),m.name=l,this.scene.add(m)},this.applyCameraTarget=i=>{if(this.camera.type==="OrthographicCamera"&&i){const o=this.getOrthographicCameraTarget(i);this.updateCameraZoom(i.zoom),this.updateCamera(i.position,o)}},this.overridePointShader=i=>{i.vertexShader=`
134
2
  attribute float sizes;
135
3
  attribute float visibility;
136
4
  varying float vVisible;
137
- ${shader.vertexShader}`.replace(`gl_PointSize = size;`, `gl_PointSize = size;
5
+ ${i.vertexShader}`.replace("gl_PointSize = size;",`gl_PointSize = size;
138
6
  vVisible = visibility;
139
- `);
140
- shader.fragmentShader = `
7
+ `),i.fragmentShader=`
141
8
  varying float vVisible;
142
- ${shader.fragmentShader}`.replace(`#include <clipping_planes_fragment>`, `
9
+ ${i.fragmentShader}`.replace("#include <clipping_planes_fragment>",`
143
10
  if (vVisible < 0.5) discard;
144
- #include <clipping_planes_fragment>`);
145
- };
146
- this.loadPCDFile = (src, radius) => __async(this, null, function* () {
147
- this.clearPointCloud();
148
- this.currentPCDSrc = src;
149
- const {points, color} = yield this.cacheInstance.loadPCDFile(src);
150
- const geometry = new THREE.BufferGeometry();
151
- geometry.setAttribute("position", new THREE.BufferAttribute(points, 3));
152
- geometry.setAttribute("color", new THREE.BufferAttribute(color, 3));
153
- const newPoints = new THREE.Points(geometry);
154
- this.renderPointCloud(newPoints, radius);
155
- });
156
- this.loadPCDFileByBox = (src, boxParams, scope) => __async(this, null, function* () {
157
- const cb = (points2, color2) => __async(this, null, function* () {
158
- const {width = 0, height = 0, depth = 0} = scope != null ? scope : {};
159
- const filterData = yield this.filterPointsByBox(__spreadProps(__spreadValues({}, boxParams), {
160
- width: boxParams.width + width,
161
- height: boxParams.height + height,
162
- depth: boxParams.depth + depth
163
- }), points2, color2);
164
- if (!filterData) {
165
- console.error("filter Error");
166
- return;
167
- }
168
- this.clearPointCloud();
169
- this.currentPCDSrc = src;
170
- const newPoints = new THREE.Points(filterData.geometry);
171
- newPoints.name = this.pointCloudObjectName;
172
- this.scene.add(newPoints);
173
- this.render();
174
- });
175
- const {points, color} = yield this.cacheInstance.loadPCDFile(src);
176
- cb(points, color);
177
- });
178
- this.generateRange = (radius) => {
179
- const circle = this.createRange(radius);
180
- this.scene.add(circle);
181
- };
182
- this.generateBoxArrow = ({width}) => {
183
- const dir = new THREE.Vector3(1, 0, 0);
184
- const origin = new THREE.Vector3(width / 2, 0, 0);
185
- const arrowLen = 2;
186
- const hex = 16776960;
187
- const arrowHelper = new THREE.ArrowHelper(dir, origin, arrowLen, hex);
188
- arrowHelper.visible = this.showDirection;
189
- return arrowHelper;
190
- };
191
- this.generateBoxTrackID = (boxParams) => {
192
- if (!boxParams.trackID) {
193
- return;
194
- }
195
- const texture = new THREE.Texture(this.getTextCanvas(boxParams.trackID.toString()));
196
- texture.needsUpdate = true;
197
- const sprite = new THREE.SpriteMaterial({map: texture, depthWrite: false});
198
- const boxID = new THREE.Sprite(sprite);
199
- boxID.scale.set(5, 5, 5);
200
- boxID.position.set(-boxParams.width / 2, 0, boxParams.depth / 2 + 0.5);
201
- return boxID;
202
- };
203
- this.applyZAxisPoints = (zAxisLimit) => {
204
- this.zAxisLimit = zAxisLimit;
205
- this.filterZAxisPoints();
206
- this.render();
207
- };
208
- this.updatePointSize = (zoomIn) => {
209
- const points = this.scene.getObjectByName(this.pointCloudObjectName);
210
- if (!points) {
211
- return;
212
- }
213
- const preSize = points.material.size;
214
- if (zoomIn) {
215
- points.material.size = Math.min(preSize * 1.2, 10);
216
- } else {
217
- points.material.size = Math.max(preSize / 1.2, 1);
218
- }
219
- this.render();
220
- };
221
- this.container = container;
222
- this.renderer = new THREE.WebGLRenderer({antialias: true});
223
- this.backgroundColor = backgroundColor;
224
- this.config = config;
225
- if (isOrthographicCamera && orthographicParams) {
226
- this.isOrthographicCamera = true;
227
- this.camera = new THREE.OrthographicCamera(orthographicParams.left, orthographicParams.right, orthographicParams.top, orthographicParams.bottom, orthographicParams.near, orthographicParams.far);
228
- } else {
229
- this.camera = new THREE.PerspectiveCamera(30, this.containerWidth / this.containerHeight, 1, 1e3);
230
- }
231
- this.initCamera();
232
- this.scene = new THREE.Scene();
233
- this.controls = new OrbitControls(this.camera, this.renderer.domElement);
234
- this.pcdLoader = new PCDLoader();
235
- this.axesHelper = new THREE.AxesHelper(1e3);
236
- this.scene.add(this.camera);
237
- if (!noAppend) {
238
- container.appendChild(this.renderer.domElement);
239
- }
240
- this.init();
241
- this.cacheInstance = PointCloudCache.getInstance();
242
- }
243
- get DEFAULT_INIT_CAMERA_POSITION() {
244
- return new THREE.Vector3(-0.01, 0, 10);
245
- }
246
- get containerWidth() {
247
- return this.container.clientWidth;
248
- }
249
- get containerHeight() {
250
- return this.container.clientHeight;
251
- }
252
- setInitCameraPosition(vector) {
253
- this.initCameraPosition = vector;
254
- }
255
- setConfig(config) {
256
- this.config = config;
257
- }
258
- initOrthographicCamera(orthographicParams) {
259
- if (this.camera.type !== "OrthographicCamera") {
260
- return;
261
- }
262
- const {left, right, top, bottom, near, far} = orthographicParams;
263
- this.camera.left = left;
264
- this.camera.right = right;
265
- this.camera.top = top;
266
- this.camera.bottom = bottom;
267
- this.camera.near = near;
268
- this.camera.far = far;
269
- this.camera.updateProjectionMatrix();
270
- }
271
- initPerspectiveCamera() {
272
- if (this.camera.type !== "PerspectiveCamera") {
273
- return;
274
- }
275
- this.camera.fov = 30;
276
- this.camera.aspect = this.containerWidth / this.containerHeight;
277
- this.camera.near = 1;
278
- this.camera.far = 1e3;
279
- this.camera.updateProjectionMatrix();
280
- }
281
- initCamera() {
282
- const {camera} = this;
283
- if (this.isOrthographicCamera) {
284
- const {x, y, z} = this.initCameraPosition;
285
- camera.position.set(x, y, z);
286
- } else {
287
- camera.position.set(-1, 0, 500);
288
- }
289
- camera.up.set(0, 0, 1);
290
- }
291
- initControls() {
292
- const {controls} = this;
293
- controls.addEventListener("change", () => {
294
- this.render();
295
- });
296
- this.setDefaultControls();
297
- }
298
- setDefaultControls() {
299
- const {controls} = this;
300
- const centerPoint = [0, 0, 0];
301
- controls.target = new THREE.Vector3(...centerPoint);
302
- controls.addEventListener("change", () => {
303
- this.render();
304
- });
305
- controls.maxPolarAngle = Math.PI / 2;
306
- controls.update();
307
- }
308
- initRenderer() {
309
- const {renderer} = this;
310
- renderer.setPixelRatio(window.devicePixelRatio);
311
- renderer.setSize(this.containerWidth, this.containerHeight);
312
- }
313
- init() {
314
- const {scene} = this;
315
- scene.background = new THREE.Color(this.backgroundColor);
316
- this.initControls();
317
- this.initRenderer();
318
- }
319
- removeObjectByName(name) {
320
- const oldBox = this.scene.getObjectByName(name);
321
- if (oldBox) {
322
- oldBox.removeFromParent();
323
- }
324
- }
325
- generateBox(boxParams, color = 16777215) {
326
- const newColor = color;
327
- this.AddBoxToSense(boxParams, newColor);
328
- this.render();
329
- }
330
- getAllAttributeColor(boxes) {
331
- return boxes.reduce((acc, box) => {
332
- acc[box.attribute] = toolStyleConverter.getColorFromConfig({attribute: box.attribute}, __spreadProps(__spreadValues({}, this.config), {attributeConfigurable: true}), {});
333
- return acc;
334
- }, {});
335
- }
336
- generateBoxes(boxes) {
337
- boxes.forEach((box) => {
338
- this.generateBox(box);
339
- });
340
- this.render();
341
- }
342
- getOrthographicCamera(boxParams) {
343
- const {center, width, height} = boxParams;
344
- const offset = 10;
345
- const left = center.x - width / 2 - offset;
346
- const right = center.x - width / 2 + offset;
347
- const top = center.y + height / 2 + offset;
348
- const bottom = center.y - height / 2 - offset;
349
- const near = 100;
350
- const far = -100;
351
- const zoom = 500 / near;
352
- return {
353
- left,
354
- right,
355
- top,
356
- bottom,
357
- near,
358
- far,
359
- zoom
360
- };
361
- }
362
- updateCameraZoom(zoom) {
363
- this.camera.zoom = zoom;
364
- this.camera.updateProjectionMatrix();
365
- }
366
- updateCameraByBox(boxParams, perspectiveView, customCameraVector) {
367
- const {center, width, height, depth, rotation} = boxParams;
368
- const cameraPositionVector = this.getCameraVector(center, rotation, {width, height, depth}, perspectiveView);
369
- if (customCameraVector) {
370
- this.updateCamera(customCameraVector, center);
371
- return new THREE.Vector3(customCameraVector.x, customCameraVector.y, customCameraVector.z);
372
- }
373
- this.updateCamera(cameraPositionVector, center);
374
- return cameraPositionVector;
375
- }
376
- updateCameraBySphere(sphereParams, perspectiveView) {
377
- const {center} = sphereParams;
378
- const {radius} = DEFAULT_SPHERE_PARAMS;
379
- const cameraPositionVector = this.getCameraVector(center, 0, {width: radius * 2, height: radius * 2, depth: radius * 2}, perspectiveView);
380
- this.updateCamera(cameraPositionVector, center);
381
- return cameraPositionVector;
382
- }
383
- updateOrthoCamera(boxParams, perspectiveView) {
384
- const cameraPositionVector = this.updateCameraByBox(boxParams, perspectiveView);
385
- this.camera.zoom = 1;
386
- this.camera.updateProjectionMatrix();
387
- return {
388
- cameraPositionVector
389
- };
390
- }
391
- updateOrthoCameraBySphere(sphereParams, perspectiveView) {
392
- const cameraPositionVector = this.updateCameraBySphere(sphereParams, perspectiveView);
393
- this.camera.zoom = 1;
394
- this.camera.updateProjectionMatrix();
395
- return {
396
- cameraPositionVector
397
- };
398
- }
399
- updateTopCamera() {
400
- this.setInitCameraPosition(this.DEFAULT_INIT_CAMERA_POSITION);
401
- this.camera.zoom = 1;
402
- this.initCamera();
403
- this.setDefaultControls();
404
- this.camera.updateProjectionMatrix();
405
- this.render();
406
- }
407
- updateCamera(position, target) {
408
- this.camera.position.set(position.x, position.y, position.z);
409
- this.controls.target = new THREE.Vector3(target.x, target.y, target.z);
410
- this.controls.update();
411
- }
412
- resetCamera() {
413
- this.updateCamera(this.DEFAULT_INIT_CAMERA_POSITION, {x: 0, y: 0, z: 0});
414
- }
415
- getOrthographicCameraTarget(camera) {
416
- const direction = new THREE.Vector3(0, 0, -1).applyQuaternion(camera.quaternion);
417
- const target = camera.position.clone().add(direction);
418
- return target;
419
- }
420
- createThreeMatrix4(matrix4) {
421
- return new THREE.Matrix4().set(...matrix4);
422
- }
423
- filterPointsByBox(boxParams, points, color) {
424
- var _a, _b, _c;
425
- if (!points) {
426
- const originPoints = this.scene.getObjectByName(this.pointCloudObjectName);
427
- if (!originPoints) {
428
- console.error("There is no corresponding point cloud object");
429
- return Promise.resolve(void 0);
430
- }
431
- points = (_c = (_b = (_a = originPoints == null ? void 0 : originPoints.geometry) == null ? void 0 : _a.attributes) == null ? void 0 : _b.position) == null ? void 0 : _c.array;
432
- }
433
- if (window.Worker) {
434
- const {zMin, zMax, polygonPointList} = getCuboidFromPointCloudBox(boxParams);
435
- const position = points;
436
- color = color != null ? color : new Float32Array([]);
437
- const params = {
438
- boxParams,
439
- zMin,
440
- zMax,
441
- polygonPointList,
442
- color,
443
- position
444
- };
445
- return new Promise((resolve) => {
446
- const filterBoxWorker = new WorkerFactory$1();
447
- filterBoxWorker.postMessage(params);
448
- filterBoxWorker.onmessage = (e) => {
449
- const {color: newColor, position: newPosition, num} = e.data;
450
- const geometry = new THREE.BufferGeometry();
451
- geometry.setAttribute("position", new THREE.Float32BufferAttribute(newPosition, 3));
452
- geometry.setAttribute("color", new THREE.Float32BufferAttribute(newColor, 3));
453
- geometry.computeBoundingSphere();
454
- filterBoxWorker.terminate();
455
- resolve({geometry, num});
456
- };
457
- });
458
- }
459
- return Promise.resolve(void 0);
460
- }
461
- getCameraVector(centerPoint, rotationZ, volume, perspectiveView = EPerspectiveView.Front, defaultDistance = DEFAULT_DISTANCE) {
462
- let TcMatrix4 = PerspectiveShiftUtils.frontViewMatrix4(defaultDistance);
463
- switch (perspectiveView) {
464
- case EPerspectiveView.Front:
465
- break;
466
- case EPerspectiveView.Back:
467
- TcMatrix4 = PerspectiveShiftUtils.backViewMatrix4(defaultDistance);
468
- break;
469
- case EPerspectiveView.Left:
470
- TcMatrix4 = PerspectiveShiftUtils.leftViewMatrix4(defaultDistance);
471
- break;
472
- case EPerspectiveView.Right:
473
- TcMatrix4 = PerspectiveShiftUtils.rightViewMatrix4(defaultDistance);
474
- break;
475
- case EPerspectiveView.Top:
476
- TcMatrix4 = PerspectiveShiftUtils.topViewMatrix4(defaultDistance);
477
- break;
478
- case EPerspectiveView.LFT:
479
- TcMatrix4 = PerspectiveShiftUtils.leftFrontTopViewMatrix4(defaultDistance, volume);
480
- break;
481
- case EPerspectiveView.RBT:
482
- TcMatrix4 = PerspectiveShiftUtils.rightBackTopViewMatrix4(defaultDistance, volume);
483
- break;
484
- }
485
- const Tc = this.createThreeMatrix4(TcMatrix4);
486
- const TFrom = new THREE.Matrix4().makeTranslation(-centerPoint.x, -centerPoint.y, -centerPoint.z);
487
- const TBack = new THREE.Matrix4().makeTranslation(centerPoint.x, centerPoint.y, centerPoint.z);
488
- const Rz = new THREE.Matrix4().makeRotationZ(rotationZ);
489
- const centerVector = new THREE.Vector3(centerPoint.x, centerPoint.y, centerPoint.z);
490
- const cameraVector = centerVector.clone().applyMatrix4(Tc).applyMatrix4(TFrom).applyMatrix4(Rz).applyMatrix4(TBack);
491
- return cameraVector;
492
- }
493
- createRange(radius) {
494
- this.removeObjectByName(this.rangeObjectName);
495
- const curve = new THREE.EllipseCurve(0, 0, radius, radius, 0, 2 * Math.PI, false, 0);
496
- const points = curve.getPoints(50);
497
- const geometry = new THREE.BufferGeometry().setFromPoints(points);
498
- const material = new THREE.LineBasicMaterial({color: 16711680});
499
- const ellipse = new THREE.Line(geometry, material);
500
- ellipse.name = this.rangeObjectName;
501
- return ellipse;
502
- }
503
- renderPointCloud(points, radius) {
504
- points.name = this.pointCloudObjectName;
505
- const pointsMaterial = new THREE.PointsMaterial({
506
- vertexColors: true
507
- });
508
- pointsMaterial.onBeforeCompile = this.overridePointShader;
509
- pointsMaterial.size = 1.2;
510
- if (radius) {
511
- this.generateRange(radius);
512
- }
513
- this.pointsUuid = points.uuid;
514
- points.material = pointsMaterial;
515
- this.filterZAxisPoints(points);
516
- this.scene.add(points);
517
- this.render();
518
- }
519
- clearPointCloud() {
520
- this.removeObjectByName(this.pointCloudObjectName);
521
- }
522
- clearPointCloudAndRender() {
523
- this.clearPointCloud();
524
- this.render();
525
- }
526
- highlightOriginPointCloud(pointCloudBoxList) {
527
- const oldPointCloud = this.scene.getObjectByName(this.pointCloudObjectName);
528
- if (!oldPointCloud) {
529
- return;
530
- }
531
- this.highlightPCDSrc = this.currentPCDSrc;
532
- return new Promise((resolve) => {
533
- if (window.Worker) {
534
- const newPointCloudBoxList = pointCloudBoxList ? [...pointCloudBoxList] : [];
535
- const cuboidList = newPointCloudBoxList.map((v) => getCuboidFromPointCloudBox(v));
536
- const colorList = this.getAllAttributeColor(cuboidList);
537
- const params = {
538
- cuboidList,
539
- position: oldPointCloud.geometry.attributes.position.array,
540
- color: oldPointCloud.geometry.attributes.color.array,
541
- colorList
542
- };
543
- highlightWorker.postMessage(params);
544
- highlightWorker.onmessage = (e) => {
545
- const {color} = e.data;
546
- const colorAttribute = new THREE.BufferAttribute(color, 3);
547
- if (this.highlightPCDSrc) {
548
- this.cacheInstance.updateColor(this.highlightPCDSrc, color);
549
- this.highlightPCDSrc = void 0;
550
- }
551
- colorAttribute.needsUpdate = true;
552
- oldPointCloud.geometry.setAttribute("color", colorAttribute);
553
- resolve(color);
554
- this.render();
555
- };
556
- }
557
- });
558
- }
559
- updateColor(color) {
560
- const oldPointCloud = this.scene.getObjectByName(this.pointCloudObjectName);
561
- if (oldPointCloud) {
562
- const colorAttribute = new THREE.BufferAttribute(color, 3);
563
- colorAttribute.needsUpdate = true;
564
- oldPointCloud.geometry.setAttribute("color", colorAttribute);
565
- this.render();
566
- }
567
- }
568
- setShowDirection(showDirection) {
569
- this.showDirection = showDirection;
570
- this.scene.children.forEach((v) => {
571
- if (v.type === "Group") {
572
- v.children.forEach((object) => {
573
- if (object.type === "ArrowHelper") {
574
- object.visible = showDirection;
575
- }
576
- });
577
- }
578
- });
579
- this.render();
580
- }
581
- getTextCanvas(text) {
582
- const canvas = document.createElement("canvas");
583
- const ctx = canvas.getContext("2d");
584
- if (ctx) {
585
- ctx.font = `${50}px " bold`;
586
- ctx.fillStyle = "white";
587
- ctx.textAlign = "center";
588
- ctx.textBaseline = "middle";
589
- ctx.fillText(text, canvas.width / 2, canvas.height / 2);
590
- }
591
- return canvas;
592
- }
593
- filterNoise(innerPointList) {
594
- let newPointList = [...innerPointList];
595
- newPointList.sort((a, b) => a.z - b.z);
596
- const startIndexZ = Math.floor(newPointList.length * 0.05);
597
- const roadPoint = newPointList[startIndexZ];
598
- newPointList = newPointList.filter(({z}) => z > roadPoint.z + 0.1);
599
- const noisePercent = 5e-3;
600
- const endIndexZ = Math.floor(newPointList.length * (1 - noisePercent));
601
- newPointList = newPointList.slice(0, endIndexZ);
602
- newPointList.sort((a, b) => a.x - b.x);
603
- const startIndexX = Math.floor(newPointList.length * noisePercent);
604
- const endIndexX = Math.floor(newPointList.length * (1 - noisePercent));
605
- newPointList = newPointList.slice(startIndexX, endIndexX);
606
- newPointList.sort((a, b) => a.y - b.y);
607
- const startIndexY = Math.floor(newPointList.length * noisePercent);
608
- const endIndexY = Math.floor(newPointList.length * (1 - noisePercent));
609
- newPointList = newPointList.slice(startIndexY, endIndexY);
610
- return newPointList.length > 100 ? newPointList : innerPointList;
611
- }
612
- getFittedCoordinates(polygon, innerPointList) {
613
- const minDistanceList = [];
614
- let _polygon = [...polygon, polygon[0]];
615
- innerPointList.forEach(({x, y}) => {
616
- polygon.forEach((p1, index) => {
617
- const p2 = _polygon[index + 1];
618
- const distance = MathUtils.getFootOfPerpendicular({x, y}, p1, p2, false, true).length;
619
- if (!minDistanceList[index] || distance < minDistanceList[index].distance) {
620
- minDistanceList[index] = {distance, point: {x, y}};
621
- }
622
- });
623
- });
624
- _polygon = [polygon[polygon.length - 1], ...polygon, polygon[0]];
625
- const _minDistanceList = [minDistanceList[minDistanceList.length - 1], ...minDistanceList];
626
- const fittedCoordinates = polygon.map((_, index) => {
627
- const p1 = _polygon[index];
628
- const p2 = _polygon[index + 1];
629
- const p3 = _polygon[index + 2];
630
- return PointCloudUtils.getIntersectionBySlope({
631
- p1: _minDistanceList[index].point,
632
- k1: (p1.y - p2.y) / (p1.x - p2.x),
633
- p2: _minDistanceList[index + 1].point,
634
- k2: (p2.y - p3.y) / (p2.x - p3.x)
635
- });
636
- });
637
- return fittedCoordinates;
638
- }
639
- getSensesPointZAxisInPolygon(polygon, zScope, intelligentFit) {
640
- var _a, _b, _c;
641
- const points = this.scene.children.find((i) => i.uuid === this.pointsUuid);
642
- let minZ = 0;
643
- let maxZ = 0;
644
- let count = 0;
645
- let zCount = 0;
646
- let fittedCoordinates = [];
647
- let innerPointList = [];
648
- const pointPosArray = ((_c = (_b = (_a = points == null ? void 0 : points.geometry) == null ? void 0 : _a.attributes) == null ? void 0 : _b.position) == null ? void 0 : _c.array) || [];
649
- for (let idx = 0; idx < pointPosArray.length; idx += 3) {
650
- const x = pointPosArray[idx];
651
- const y = pointPosArray[idx + 1];
652
- const z = pointPosArray[idx + 2];
653
- const inPolygon = isInPolygon({x, y}, polygon);
654
- if (inPolygon && (z || z === 0)) {
655
- innerPointList.push({x, y, z});
656
- }
657
- }
658
- if (!innerPointList.length) {
659
- return {maxZ, minZ, count, zCount, fittedCoordinates};
660
- }
661
- if (intelligentFit) {
662
- innerPointList = this.filterNoise(innerPointList);
663
- fittedCoordinates = this.getFittedCoordinates(polygon, innerPointList);
664
- }
665
- innerPointList.sort((a, b) => a.z - b.z);
666
- minZ = innerPointList[0].z - 0.01;
667
- maxZ = innerPointList[innerPointList.length - 1].z + 0.01;
668
- zCount = innerPointList.length;
669
- if (zScope) {
670
- count = innerPointList.filter(({z}) => z >= zScope[0] && z <= zScope[1]).length;
671
- }
672
- return {maxZ, minZ, count, zCount, fittedCoordinates};
673
- }
674
- getBasicCoordinate2Canvas(vector) {
675
- const w = this.containerWidth / 2;
676
- const h = this.containerHeight / 2;
677
- return {
678
- x: vector.x * w + w,
679
- y: vector.y * h + h,
680
- z: vector.z
681
- };
682
- }
683
- get basicCoordinate2CanvasMatrix4() {
684
- const w = this.containerWidth / 2;
685
- const h = this.containerHeight / 2;
686
- return new THREE.Matrix4().set(w, 0, 0, w, 0, h, 0, h, 0, 0, 1, 0, 0, 0, 0, 1);
687
- }
688
- getCanvas2BasicCoordinate(vector) {
689
- const w = this.containerWidth / 2;
690
- const h = this.containerHeight / 2;
691
- return new THREE.Vector3(vector.x / w - w / 2, -(vector.y / h - h / 2), 1);
692
- }
693
- getPolygonSidePoints(boxParams) {
694
- const {
695
- center: {x, y, z},
696
- height,
697
- width,
698
- depth
699
- } = boxParams;
700
- const lfb = {
701
- x: x + width / 2,
702
- y: y + height / 2,
703
- z: z - depth / 2
704
- };
705
- const lft = {
706
- x: x + width / 2,
707
- y: y + height / 2,
708
- z: z + depth / 2
709
- };
710
- const lbt = {
711
- x: x - width / 2,
712
- y: y + height / 2,
713
- z: z + depth / 2
714
- };
715
- const lbb = {
716
- x: x - width / 2,
717
- y: y + height / 2,
718
- z: z - depth / 2
719
- };
720
- const vectorList = [lfb, lft, lbt, lbb];
721
- return vectorList;
722
- }
723
- getPolygonBackPoints(boxParams) {
724
- const {
725
- center: {x, y, z},
726
- height,
727
- width,
728
- depth
729
- } = boxParams;
730
- const lbt = {
731
- x: x - width / 2,
732
- y: y + height / 2,
733
- z: z + depth / 2
734
- };
735
- const lbb = {
736
- x: x - width / 2,
737
- y: y + height / 2,
738
- z: z - depth / 2
739
- };
740
- const rbb = {
741
- x: x - width / 2,
742
- y: y - height / 2,
743
- z: z - depth / 2
744
- };
745
- const rbt = {
746
- x: x - width / 2,
747
- y: y - height / 2,
748
- z: z + depth / 2
749
- };
750
- const vectorList = [lbt, lbb, rbb, rbt];
751
- return vectorList;
752
- }
753
- getPolygonTopPoints(boxParams) {
754
- const {
755
- center: {x, y, z},
756
- height,
757
- width,
758
- depth
759
- } = boxParams;
760
- const lft = {
761
- x: x + width / 2,
762
- y: y + height / 2,
763
- z: z + depth / 2
764
- };
765
- const rft = {
766
- x: x + width / 2,
767
- y: y - height / 2,
768
- z: z + depth / 2
769
- };
770
- const rbt = {
771
- x: x - width / 2,
772
- y: y - height / 2,
773
- z: z + depth / 2
774
- };
775
- const lbt = {
776
- x: x - width / 2,
777
- y: y + height / 2,
778
- z: z + depth / 2
779
- };
780
- const vectorList = [lft, rft, rbt, lbt];
781
- return vectorList;
782
- }
783
- getModelTransformationMatrix(boxParams) {
784
- const {
785
- center: {x, y, z},
786
- rotation
787
- } = boxParams;
788
- const TFrom = new THREE.Matrix4().makeTranslation(-x, -y, -z);
789
- const TBack = new THREE.Matrix4().makeTranslation(x, y, z);
790
- const Rz = new THREE.Matrix4().makeRotationZ(rotation);
791
- return new THREE.Matrix4().multiply(TBack).multiply(Rz).multiply(TFrom);
792
- }
793
- getBoxSidePolygon2DCoordinate(boxParams) {
794
- return this.getBoxPolygon2DCoordinate(boxParams, EPerspectiveView.Left);
795
- }
796
- getBoxBackPolygon2DCoordinate(boxParams) {
797
- return this.getBoxPolygon2DCoordinate(boxParams, EPerspectiveView.Back);
798
- }
799
- getSphereSidePoint2DCoordinate(sphereParams) {
800
- return this.getSpherePoint2DCoordinate(sphereParams);
801
- }
802
- getSphereBackPoint2DCoordinate(sphereParams) {
803
- return this.getSpherePoint2DCoordinate(sphereParams);
804
- }
805
- boxParams2ViewPolygon(boxParams, perspectiveView) {
806
- switch (perspectiveView) {
807
- case EPerspectiveView.Left:
808
- return this.getPolygonSidePoints(boxParams);
809
- case EPerspectiveView.Back:
810
- return this.getPolygonBackPoints(boxParams);
811
- default: {
812
- return this.getPolygonTopPoints(boxParams);
813
- }
814
- }
815
- }
816
- getBoxPolygon2DCoordinate(boxParams, perspectiveView) {
817
- const vectorList = this.boxParams2ViewPolygon(boxParams, perspectiveView);
818
- const {width, height} = boxParams;
819
- const projectMatrix = new THREE.Matrix4().premultiply(this.camera.matrixWorldInverse).premultiply(this.camera.projectionMatrix);
820
- const boxSideMatrix = new THREE.Matrix4().premultiply(this.getModelTransformationMatrix(boxParams)).premultiply(projectMatrix).premultiply(this.basicCoordinate2CanvasMatrix4);
821
- this.sideMatrix = boxSideMatrix;
822
- const polygon2d = vectorList.map((vector) => new THREE.Vector3(vector.x, vector.y, vector.z)).map((vector) => vector.applyMatrix4(this.sideMatrix));
823
- const wZoom = this.containerWidth / width;
824
- const hZoom = this.containerHeight / height;
825
- return {
826
- polygon2d,
827
- zoom: Math.min(wZoom, hZoom) / 2
828
- };
829
- }
830
- getSpherePoint2DCoordinate(sphereParams) {
831
- const {center, attribute, id, valid} = sphereParams;
832
- const {radius} = DEFAULT_SPHERE_PARAMS;
833
- const transParams = {
834
- center,
835
- attribute,
836
- id,
837
- valid,
838
- width: radius * 2,
839
- height: radius * 2,
840
- depth: radius * 2,
841
- rotation: 0
842
- };
843
- const projectMatrix = new THREE.Matrix4().premultiply(this.camera.matrixWorldInverse).premultiply(this.camera.projectionMatrix);
844
- const boxSideMatrix = new THREE.Matrix4().premultiply(this.getModelTransformationMatrix(transParams)).premultiply(projectMatrix).premultiply(this.basicCoordinate2CanvasMatrix4);
845
- this.sideMatrix = boxSideMatrix;
846
- const point2d = new THREE.Vector3(center.x, center.y, center.z).applyMatrix4(this.sideMatrix);
847
- const wZoom = this.containerWidth / (radius * 2);
848
- const hZoom = this.containerHeight / (radius * 2);
849
- return {
850
- point2d,
851
- zoom: Math.min(wZoom, hZoom) / 2
852
- };
853
- }
854
- getSphereTopPoint2DCoordinate(sphereParams) {
855
- const {center} = sphereParams;
856
- const {radius} = DEFAULT_SPHERE_PARAMS;
857
- const point2d = {
858
- x: -(center.y - this.containerWidth / 2),
859
- y: -(center.x - this.containerHeight / 2)
860
- };
861
- const wZoom = this.containerWidth / (radius * 2);
862
- const hZoom = this.containerHeight / (radius * 2);
863
- return {
864
- point2d,
865
- zoom: Math.min(wZoom, hZoom) / 2
866
- };
867
- }
868
- getBoxTopPolygon2DCoordinate(boxParams) {
869
- const {width, height} = boxParams;
870
- const vectorList = this.getPolygonTopPoints(boxParams);
871
- const polygon2d = vectorList.map((vector) => new THREE.Vector3(vector.x, vector.y, vector.z)).map((vector) => vector.applyMatrix4(this.getModelTransformationMatrix(boxParams))).map((vector) => {
872
- return {
873
- x: vector.y,
874
- y: vector.x
875
- };
876
- }).map((vector) => {
877
- return {
878
- x: -(vector.x - this.containerWidth / 2),
879
- y: -(vector.y - this.containerHeight / 2)
880
- };
881
- });
882
- const wZoom = this.containerWidth / width;
883
- const hZoom = this.containerHeight / height;
884
- return {
885
- polygon2d,
886
- zoom: Math.min(wZoom, hZoom) / 2
887
- };
888
- }
889
- getNewBoxBySideUpdate(offsetCenterPoint, offsetWidth, offsetDepth, selectedPointCloudBox) {
890
- const Rz = new THREE.Matrix4().makeRotationZ(selectedPointCloudBox.rotation);
891
- const offsetVector = new THREE.Vector3(-offsetCenterPoint.x, 0, 0).applyMatrix4(Rz);
892
- let newBoxParams = selectedPointCloudBox;
893
- newBoxParams.center = {
894
- x: newBoxParams.center.x + offsetVector.x,
895
- y: newBoxParams.center.y + offsetVector.y,
896
- z: newBoxParams.center.z - offsetCenterPoint.z
897
- };
898
- newBoxParams = __spreadProps(__spreadValues({}, newBoxParams), {
899
- width: newBoxParams.width + offsetWidth,
900
- height: newBoxParams.height,
901
- depth: newBoxParams.depth + offsetDepth
902
- });
903
- return {newBoxParams};
904
- }
905
- getNewBoxByBackUpdate(offsetCenterPoint, offsetWidth, offsetDepth, selectedPointCloudBox) {
906
- const Rz = new THREE.Matrix4().makeRotationZ(selectedPointCloudBox.rotation);
907
- const offsetVector = new THREE.Vector3(0, -offsetCenterPoint.x, 0).applyMatrix4(Rz);
908
- let newBoxParams = selectedPointCloudBox;
909
- newBoxParams.center = {
910
- x: newBoxParams.center.x + offsetVector.x,
911
- y: newBoxParams.center.y + offsetVector.y,
912
- z: newBoxParams.center.z - offsetCenterPoint.z
913
- };
914
- newBoxParams = __spreadProps(__spreadValues({}, newBoxParams), {
915
- width: newBoxParams.width,
916
- height: newBoxParams.height + offsetWidth,
917
- depth: newBoxParams.depth + offsetDepth
918
- });
919
- return {newBoxParams};
920
- }
921
- getNewBoxBySideUpdateByPoints(pointList, offsetHeight, offsetZ, selectedPointCloudBox) {
922
- var _a;
923
- const invertMatrix = (_a = this.sideMatrix) == null ? void 0 : _a.invert();
924
- if (!this.sideMatrix || !invertMatrix) {
925
- console.error("No sideMatrix");
926
- return;
927
- }
928
- this.camera.zoom = 1;
929
- this.camera.updateProjectionMatrix();
930
- const polygonWorld = pointList.map((vector) => new THREE.Vector3(vector.x, vector.y, vector.z)).map((vector) => vector.applyMatrix4(invertMatrix));
931
- const [p1v, p2v, p3v, p4v] = polygonWorld;
932
- const width = Math.max(Math.abs(p1v.x - p3v.x), Math.abs(p1v.x - p2v.x));
933
- const centerVector = p2v.add(p4v).applyMatrix3(new THREE.Matrix3().set(1 / 2, 0, 0, 0, 1 / 2, 0, 0, 0, 1 / 2));
934
- const offsetVector = centerVector.clone().applyMatrix3(new THREE.Matrix3().set(-1, 0, 0, 0, -1, 0, 0, 0, -1)).add(new THREE.Vector3(selectedPointCloudBox.center.x, selectedPointCloudBox.center.y, selectedPointCloudBox.center.z));
935
- const newBoxParams = __spreadProps(__spreadValues({}, selectedPointCloudBox), {
936
- center: {
937
- x: selectedPointCloudBox.center.x - offsetVector.x,
938
- y: selectedPointCloudBox.center.y - offsetVector.y,
939
- z: selectedPointCloudBox.center.z - offsetZ
940
- },
941
- width,
942
- height: selectedPointCloudBox.height,
943
- depth: selectedPointCloudBox.depth + offsetHeight,
944
- rotation: selectedPointCloudBox.rotation
945
- });
946
- return {newBoxParams};
947
- }
948
- filterZAxisPoints(pcdPoints) {
949
- const points = pcdPoints || this.scene.children.find((i) => i.uuid === this.pointsUuid);
950
- if (points) {
951
- const {attributes} = points.geometry;
952
- const {position} = attributes;
953
- const visibility = [];
954
- const {count} = position;
955
- for (let i = 0; i < count; i++) {
956
- const z = position.getZ(i);
957
- visibility.push(z > this.zAxisLimit ? 0 : 1);
958
- }
959
- points.geometry.setAttribute("visibility", new THREE.Float32BufferAttribute(visibility, 1));
960
- points.geometry.attributes.visibility.needsUpdate = true;
961
- }
962
- }
963
- render() {
964
- this.renderer.render(this.scene, this.camera);
965
- }
966
- }
967
-
968
- export { PointCloud };
11
+ #include <clipping_planes_fragment>`)},this.loadPCDFile=(i,o)=>S(this,null,function*(){this.clearPointCloud(),this.currentPCDSrc=i;const{points:h,color:l}=yield this.cacheInstance.loadPCDFile(i),d=new c.BufferGeometry;d.setAttribute("position",new c.BufferAttribute(h,3)),d.setAttribute("color",new c.BufferAttribute(l,3));const p=new c.Points(d);this.renderPointCloud(p,o)}),this.loadPCDFileByBox=(i,o,h)=>S(this,null,function*(){const l=(g,x)=>S(this,null,function*(){const{width:u=0,height:m=0,depth:C=0}=h!=null?h:{},y=yield this.filterPointsByBox(P(M({},o),{width:o.width+u,height:o.height+m,depth:o.depth+C}),g,x);if(!y){console.error("filter Error");return}this.clearPointCloud(),this.currentPCDSrc=i;const v=new c.Points(y.geometry);v.name=this.pointCloudObjectName,this.scene.add(v),this.render()}),{points:d,color:p}=yield this.cacheInstance.loadPCDFile(i);l(d,p)}),this.generateRange=i=>{const o=this.createRange(i);this.scene.add(o)},this.generateBoxArrow=({width:i})=>{const o=new c.Vector3(1,0,0),h=new c.Vector3(i/2,0,0),l=2,d=16776960,p=new c.ArrowHelper(o,h,l,d);return p.visible=this.showDirection,p},this.generateBoxTrackID=i=>{if(!i.trackID)return;const o=new c.Texture(this.getTextCanvas(i.trackID.toString()));o.needsUpdate=!0;const h=new c.SpriteMaterial({map:o,depthWrite:!1}),l=new c.Sprite(h);return l.scale.set(5,5,5),l.position.set(-i.width/2,0,i.depth/2+.5),l},this.applyZAxisPoints=i=>{this.zAxisLimit=i,this.filterZAxisPoints(),this.render()},this.updatePointSize=i=>{const o=this.scene.getObjectByName(this.pointCloudObjectName);if(!o)return;const h=o.material.size;i?o.material.size=Math.min(h*1.2,10):o.material.size=Math.max(h/1.2,1),this.render()},this.container=t,this.renderer=new c.WebGLRenderer({antialias:!0}),this.backgroundColor=s,this.config=a,r&&n?(this.isOrthographicCamera=!0,this.camera=new c.OrthographicCamera(n.left,n.right,n.top,n.bottom,n.near,n.far)):this.camera=new c.PerspectiveCamera(30,this.containerWidth/this.containerHeight,1,1e3),this.initCamera(),this.scene=new c.Scene,this.controls=new R(this.camera,this.renderer.domElement),this.pcdLoader=new E,this.axesHelper=new c.AxesHelper(1e3),this.scene.add(this.camera),e||t.appendChild(this.renderer.domElement),this.init(),this.cacheInstance=W.getInstance()}get DEFAULT_INIT_CAMERA_POSITION(){return new c.Vector3(-.01,0,10)}get containerWidth(){return this.container.clientWidth}get containerHeight(){return this.container.clientHeight}setInitCameraPosition(t){this.initCameraPosition=t}setConfig(t){this.config=t}initOrthographicCamera(t){if(this.camera.type!=="OrthographicCamera")return;const{left:e,right:r,top:n,bottom:s,near:a,far:i}=t;this.camera.left=e,this.camera.right=r,this.camera.top=n,this.camera.bottom=s,this.camera.near=a,this.camera.far=i,this.camera.updateProjectionMatrix()}initPerspectiveCamera(){this.camera.type==="PerspectiveCamera"&&(this.camera.fov=30,this.camera.aspect=this.containerWidth/this.containerHeight,this.camera.near=1,this.camera.far=1e3,this.camera.updateProjectionMatrix())}initCamera(){const{camera:t}=this;if(this.isOrthographicCamera){const{x:e,y:r,z:n}=this.initCameraPosition;t.position.set(e,r,n)}else t.position.set(-1,0,500);t.up.set(0,0,1)}initControls(){const{controls:t}=this;t.addEventListener("change",()=>{this.render()}),this.setDefaultControls()}setDefaultControls(){const{controls:t}=this,e=[0,0,0];t.target=new c.Vector3(...e),t.addEventListener("change",()=>{this.render()}),t.maxPolarAngle=Math.PI/2,t.update()}initRenderer(){const{renderer:t}=this;t.setPixelRatio(window.devicePixelRatio),t.setSize(this.containerWidth,this.containerHeight)}init(){const{scene:t}=this;t.background=new c.Color(this.backgroundColor),this.initControls(),this.initRenderer()}removeObjectByName(t){const e=this.scene.getObjectByName(t);e&&e.removeFromParent()}generateBox(t,e=16777215){const r=e;this.AddBoxToSense(t,r),this.render()}getAllAttributeColor(t){return t.reduce((e,r)=>(e[r.attribute]=B.getColorFromConfig({attribute:r.attribute},P(M({},this.config),{attributeConfigurable:!0}),{}),e),{})}generateBoxes(t){t.forEach(e=>{this.generateBox(e)}),this.render()}getOrthographicCamera(t){const{center:e,width:r,height:n}=t,s=10,a=e.x-r/2-s,i=e.x-r/2+s,o=e.y+n/2+s,h=e.y-n/2-s,l=100,d=-100,p=500/l;return{left:a,right:i,top:o,bottom:h,near:l,far:d,zoom:p}}updateCameraZoom(t){this.camera.zoom=t,this.camera.updateProjectionMatrix()}updateCameraByBox(t,e,r){const{center:n,width:s,height:a,depth:i,rotation:o}=t,h=this.getCameraVector(n,o,{width:s,height:a,depth:i},e);return r?(this.updateCamera(r,n),new c.Vector3(r.x,r.y,r.z)):(this.updateCamera(h,n),h)}updateCameraBySphere(t,e){const{center:r}=t,{radius:n}=z,s=this.getCameraVector(r,0,{width:n*2,height:n*2,depth:n*2},e);return this.updateCamera(s,r),s}updateOrthoCamera(t,e){const r=this.updateCameraByBox(t,e);return this.camera.zoom=1,this.camera.updateProjectionMatrix(),{cameraPositionVector:r}}updateOrthoCameraBySphere(t,e){const r=this.updateCameraBySphere(t,e);return this.camera.zoom=1,this.camera.updateProjectionMatrix(),{cameraPositionVector:r}}updateTopCamera(){this.setInitCameraPosition(this.DEFAULT_INIT_CAMERA_POSITION),this.camera.zoom=1,this.initCamera(),this.setDefaultControls(),this.camera.updateProjectionMatrix(),this.render()}updateCamera(t,e){this.camera.position.set(t.x,t.y,t.z),this.controls.target=new c.Vector3(e.x,e.y,e.z),this.controls.update()}resetCamera(){this.updateCamera(this.DEFAULT_INIT_CAMERA_POSITION,{x:0,y:0,z:0})}getOrthographicCameraTarget(t){const e=new c.Vector3(0,0,-1).applyQuaternion(t.quaternion);return t.position.clone().add(e)}createThreeMatrix4(t){return new c.Matrix4().set(...t)}filterPointsByBox(t,e,r){var n,s,a;if(!e){const i=this.scene.getObjectByName(this.pointCloudObjectName);if(!i)return console.error("There is no corresponding point cloud object"),Promise.resolve(void 0);e=(a=(s=(n=i==null?void 0:i.geometry)==null?void 0:n.attributes)==null?void 0:s.position)==null?void 0:a.array}if(window.Worker){const{zMin:i,zMax:o,polygonPointList:h}=A(t),l=e;r=r!=null?r:new Float32Array([]);const d={boxParams:t,zMin:i,zMax:o,polygonPointList:h,color:r,position:l};return new Promise(p=>{const g=new L;g.postMessage(d),g.onmessage=x=>{const{color:u,position:m,num:C}=x.data,y=new c.BufferGeometry;y.setAttribute("position",new c.Float32BufferAttribute(m,3)),y.setAttribute("color",new c.Float32BufferAttribute(u,3)),y.computeBoundingSphere(),g.terminate(),p({geometry:y,num:C})}})}return Promise.resolve(void 0)}getCameraVector(t,e,r,n=w.Front,s=X){let a=b.frontViewMatrix4(s);switch(n){case w.Front:break;case w.Back:a=b.backViewMatrix4(s);break;case w.Left:a=b.leftViewMatrix4(s);break;case w.Right:a=b.rightViewMatrix4(s);break;case w.Top:a=b.topViewMatrix4(s);break;case w.LFT:a=b.leftFrontTopViewMatrix4(s,r);break;case w.RBT:a=b.rightBackTopViewMatrix4(s,r);break}const i=this.createThreeMatrix4(a),o=new c.Matrix4().makeTranslation(-t.x,-t.y,-t.z),h=new c.Matrix4().makeTranslation(t.x,t.y,t.z),l=new c.Matrix4().makeRotationZ(e);return new c.Vector3(t.x,t.y,t.z).clone().applyMatrix4(i).applyMatrix4(o).applyMatrix4(l).applyMatrix4(h)}createRange(t){this.removeObjectByName(this.rangeObjectName);const r=new c.EllipseCurve(0,0,t,t,0,2*Math.PI,!1,0).getPoints(50),n=new c.BufferGeometry().setFromPoints(r),s=new c.LineBasicMaterial({color:16711680}),a=new c.Line(n,s);return a.name=this.rangeObjectName,a}renderPointCloud(t,e){t.name=this.pointCloudObjectName;const r=new c.PointsMaterial({vertexColors:!0});r.onBeforeCompile=this.overridePointShader,r.size=1.2,e&&this.generateRange(e),this.pointsUuid=t.uuid,t.material=r,this.filterZAxisPoints(t),this.scene.add(t),this.render()}clearPointCloud(){this.removeObjectByName(this.pointCloudObjectName)}clearPointCloudAndRender(){this.clearPointCloud(),this.render()}highlightOriginPointCloud(t){const e=this.scene.getObjectByName(this.pointCloudObjectName);if(!!e)return this.highlightPCDSrc=this.currentPCDSrc,new Promise(r=>{if(window.Worker){const s=(t?[...t]:[]).map(o=>A(o)),a=this.getAllAttributeColor(s),i={cuboidList:s,position:e.geometry.attributes.position.array,color:e.geometry.attributes.color.array,colorList:a};j.postMessage(i),j.onmessage=o=>{const{color:h}=o.data,l=new c.BufferAttribute(h,3);this.highlightPCDSrc&&(this.cacheInstance.updateColor(this.highlightPCDSrc,h),this.highlightPCDSrc=void 0),l.needsUpdate=!0,e.geometry.setAttribute("color",l),r(h),this.render()}}})}updateColor(t){const e=this.scene.getObjectByName(this.pointCloudObjectName);if(e){const r=new c.BufferAttribute(t,3);r.needsUpdate=!0,e.geometry.setAttribute("color",r),this.render()}}setShowDirection(t){this.showDirection=t,this.scene.children.forEach(e=>{e.type==="Group"&&e.children.forEach(r=>{r.type==="ArrowHelper"&&(r.visible=t)})}),this.render()}getTextCanvas(t){const e=document.createElement("canvas"),r=e.getContext("2d");return r&&(r.font=`${50}px " bold`,r.fillStyle="white",r.textAlign="center",r.textBaseline="middle",r.fillText(t,e.width/2,e.height/2)),e}filterNoise(t){let e=[...t];e.sort((d,p)=>d.z-p.z);const r=Math.floor(e.length*.05),n=e[r];e=e.filter(({z:d})=>d>n.z+.1);const s=.005,a=Math.floor(e.length*(1-s));e=e.slice(0,a),e.sort((d,p)=>d.x-p.x);const i=Math.floor(e.length*s),o=Math.floor(e.length*(1-s));e=e.slice(i,o),e.sort((d,p)=>d.y-p.y);const h=Math.floor(e.length*s),l=Math.floor(e.length*(1-s));return e=e.slice(h,l),e.length>100?e:t}getFittedCoordinates(t,e){const r=[];let n=[...t,t[0]];e.forEach(({x:i,y:o})=>{t.forEach((h,l)=>{const d=n[l+1],p=F.getFootOfPerpendicular({x:i,y:o},h,d,!1,!0).length;(!r[l]||p<r[l].distance)&&(r[l]={distance:p,point:{x:i,y:o}})})}),n=[t[t.length-1],...t,t[0]];const s=[r[r.length-1],...r];return t.map((i,o)=>{const h=n[o],l=n[o+1],d=n[o+2];return k.getIntersectionBySlope({p1:s[o].point,k1:(h.y-l.y)/(h.x-l.x),p2:s[o+1].point,k2:(l.y-d.y)/(l.x-d.x)})})}getSensesPointZAxisInPolygon(t,e,r){var n,s,a;const i=this.scene.children.find(u=>u.uuid===this.pointsUuid);let o=0,h=0,l=0,d=0,p=[],g=[];const x=((a=(s=(n=i==null?void 0:i.geometry)==null?void 0:n.attributes)==null?void 0:s.position)==null?void 0:a.array)||[];for(let u=0;u<x.length;u+=3){const m=x[u],C=x[u+1],y=x[u+2];N({x:m,y:C},t)&&(y||y===0)&&g.push({x:m,y:C,z:y})}return g.length?(r&&(g=this.filterNoise(g),p=this.getFittedCoordinates(t,g)),g.sort((u,m)=>u.z-m.z),o=g[0].z-.01,h=g[g.length-1].z+.01,d=g.length,e&&(l=g.filter(({z:u})=>u>=e[0]&&u<=e[1]).length),{maxZ:h,minZ:o,count:l,zCount:d,fittedCoordinates:p}):{maxZ:h,minZ:o,count:l,zCount:d,fittedCoordinates:p}}getBasicCoordinate2Canvas(t){const e=this.containerWidth/2,r=this.containerHeight/2;return{x:t.x*e+e,y:t.y*r+r,z:t.z}}get basicCoordinate2CanvasMatrix4(){const t=this.containerWidth/2,e=this.containerHeight/2;return new c.Matrix4().set(t,0,0,t,0,e,0,e,0,0,1,0,0,0,0,1)}getCanvas2BasicCoordinate(t){const e=this.containerWidth/2,r=this.containerHeight/2;return new c.Vector3(t.x/e-e/2,-(t.y/r-r/2),1)}getPolygonSidePoints(t){const{center:{x:e,y:r,z:n},height:s,width:a,depth:i}=t,o={x:e+a/2,y:r+s/2,z:n-i/2},h={x:e+a/2,y:r+s/2,z:n+i/2},l={x:e-a/2,y:r+s/2,z:n+i/2},d={x:e-a/2,y:r+s/2,z:n-i/2};return[o,h,l,d]}getPolygonBackPoints(t){const{center:{x:e,y:r,z:n},height:s,width:a,depth:i}=t,o={x:e-a/2,y:r+s/2,z:n+i/2},h={x:e-a/2,y:r+s/2,z:n-i/2},l={x:e-a/2,y:r-s/2,z:n-i/2},d={x:e-a/2,y:r-s/2,z:n+i/2};return[o,h,l,d]}getPolygonTopPoints(t){const{center:{x:e,y:r,z:n},height:s,width:a,depth:i}=t,o={x:e+a/2,y:r+s/2,z:n+i/2},h={x:e+a/2,y:r-s/2,z:n+i/2},l={x:e-a/2,y:r-s/2,z:n+i/2},d={x:e-a/2,y:r+s/2,z:n+i/2};return[o,h,l,d]}getModelTransformationMatrix(t){const{center:{x:e,y:r,z:n},rotation:s}=t,a=new c.Matrix4().makeTranslation(-e,-r,-n),i=new c.Matrix4().makeTranslation(e,r,n),o=new c.Matrix4().makeRotationZ(s);return new c.Matrix4().multiply(i).multiply(o).multiply(a)}getBoxSidePolygon2DCoordinate(t){return this.getBoxPolygon2DCoordinate(t,w.Left)}getBoxBackPolygon2DCoordinate(t){return this.getBoxPolygon2DCoordinate(t,w.Back)}getSphereSidePoint2DCoordinate(t){return this.getSpherePoint2DCoordinate(t)}getSphereBackPoint2DCoordinate(t){return this.getSpherePoint2DCoordinate(t)}boxParams2ViewPolygon(t,e){switch(e){case w.Left:return this.getPolygonSidePoints(t);case w.Back:return this.getPolygonBackPoints(t);default:return this.getPolygonTopPoints(t)}}getBoxPolygon2DCoordinate(t,e){const r=this.boxParams2ViewPolygon(t,e),{width:n,height:s}=t,a=new c.Matrix4().premultiply(this.camera.matrixWorldInverse).premultiply(this.camera.projectionMatrix),i=new c.Matrix4().premultiply(this.getModelTransformationMatrix(t)).premultiply(a).premultiply(this.basicCoordinate2CanvasMatrix4);this.sideMatrix=i;const o=r.map(d=>new c.Vector3(d.x,d.y,d.z)).map(d=>d.applyMatrix4(this.sideMatrix)),h=this.containerWidth/n,l=this.containerHeight/s;return{polygon2d:o,zoom:Math.min(h,l)/2}}getSpherePoint2DCoordinate(t){const{center:e,attribute:r,id:n,valid:s}=t,{radius:a}=z,i={center:e,attribute:r,id:n,valid:s,width:a*2,height:a*2,depth:a*2,rotation:0},o=new c.Matrix4().premultiply(this.camera.matrixWorldInverse).premultiply(this.camera.projectionMatrix),h=new c.Matrix4().premultiply(this.getModelTransformationMatrix(i)).premultiply(o).premultiply(this.basicCoordinate2CanvasMatrix4);this.sideMatrix=h;const l=new c.Vector3(e.x,e.y,e.z).applyMatrix4(this.sideMatrix),d=this.containerWidth/(a*2),p=this.containerHeight/(a*2);return{point2d:l,zoom:Math.min(d,p)/2}}getSphereTopPoint2DCoordinate(t){const{center:e}=t,{radius:r}=z,n={x:-(e.y-this.containerWidth/2),y:-(e.x-this.containerHeight/2)},s=this.containerWidth/(r*2),a=this.containerHeight/(r*2);return{point2d:n,zoom:Math.min(s,a)/2}}getBoxTopPolygon2DCoordinate(t){const{width:e,height:r}=t,s=this.getPolygonTopPoints(t).map(o=>new c.Vector3(o.x,o.y,o.z)).map(o=>o.applyMatrix4(this.getModelTransformationMatrix(t))).map(o=>({x:o.y,y:o.x})).map(o=>({x:-(o.x-this.containerWidth/2),y:-(o.y-this.containerHeight/2)})),a=this.containerWidth/e,i=this.containerHeight/r;return{polygon2d:s,zoom:Math.min(a,i)/2}}getNewBoxBySideUpdate(t,e,r,n){const s=new c.Matrix4().makeRotationZ(n.rotation),a=new c.Vector3(-t.x,0,0).applyMatrix4(s);let i=n;return i.center={x:i.center.x+a.x,y:i.center.y+a.y,z:i.center.z-t.z},i=P(M({},i),{width:i.width+e,height:i.height,depth:i.depth+r}),{newBoxParams:i}}getNewBoxByBackUpdate(t,e,r,n){const s=new c.Matrix4().makeRotationZ(n.rotation),a=new c.Vector3(0,-t.x,0).applyMatrix4(s);let i=n;return i.center={x:i.center.x+a.x,y:i.center.y+a.y,z:i.center.z-t.z},i=P(M({},i),{width:i.width,height:i.height+e,depth:i.depth+r}),{newBoxParams:i}}getNewBoxBySideUpdateByPoints(t,e,r,n){var s;const a=(s=this.sideMatrix)==null?void 0:s.invert();if(!this.sideMatrix||!a){console.error("No sideMatrix");return}this.camera.zoom=1,this.camera.updateProjectionMatrix();const i=t.map(m=>new c.Vector3(m.x,m.y,m.z)).map(m=>m.applyMatrix4(a)),[o,h,l,d]=i,p=Math.max(Math.abs(o.x-l.x),Math.abs(o.x-h.x)),x=h.add(d).applyMatrix3(new c.Matrix3().set(1/2,0,0,0,1/2,0,0,0,1/2)).clone().applyMatrix3(new c.Matrix3().set(-1,0,0,0,-1,0,0,0,-1)).add(new c.Vector3(n.center.x,n.center.y,n.center.z));return{newBoxParams:P(M({},n),{center:{x:n.center.x-x.x,y:n.center.y-x.y,z:n.center.z-r},width:p,height:n.height,depth:n.depth+e,rotation:n.rotation})}}filterZAxisPoints(t){const e=t||this.scene.children.find(r=>r.uuid===this.pointsUuid);if(e){const{attributes:r}=e.geometry,{position:n}=r,s=[],{count:a}=n;for(let i=0;i<a;i++){const o=n.getZ(i);s.push(o>this.zAxisLimit?0:1)}e.geometry.setAttribute("visibility",new c.Float32BufferAttribute(s,1)),e.geometry.attributes.visibility.needsUpdate=!0}}render(){this.renderer.render(this.scene,this.camera)}}export{Y as PointCloud};