@buerli.io/core 0.0.36-beta.1 → 0.2.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/geometry/ThreeGeometryCreator.d.ts +34 -0
- package/build/geometry/ThreeGeometryCreator.js +48 -15
- package/build/store/states/cad.d.ts +15 -1
- package/build/store/states/cad.js +17 -0
- package/build/store/states/drawing.d.ts +0 -2
- package/build/store/states/drawing.js +0 -4
- package/build/store/states/geometry.d.ts +6 -1
- package/build/store/states/geometry.js +25 -0
- package/build/store/states/graphic.d.ts +0 -5
- package/build/store/states/graphic.js +0 -4
- package/build/store/states/selection.d.ts +11 -4
- package/build/store/states/selection.js +65 -32
- package/build/store/states/structure.js +43 -11
- package/build/types/IGraphicPackage.d.ts +20 -2
- package/build/types/IGraphicPackage.js +26 -1
- package/build/utils/Measure.js +18 -0
- package/package.json +3 -2
- package/tsconfig.tsbuildinfo +0 -1
|
@@ -12,7 +12,10 @@ export declare class ThreeGeometryCreator {
|
|
|
12
12
|
container: {
|
|
13
13
|
id: number;
|
|
14
14
|
ownerId: number;
|
|
15
|
+
type: GraphicType.NONE | GraphicType.BREP | GraphicType.POLYBREP | GraphicType.CURVEARRAY;
|
|
15
16
|
};
|
|
17
|
+
operationId: any;
|
|
18
|
+
rawGraphic: IGraphicElement | null;
|
|
16
19
|
};
|
|
17
20
|
createGeometry(container: IGraphicContainer, color?: number[]): ContainerGeometryT;
|
|
18
21
|
createSurface(mesh: IGraphicMesh, container: IGraphicContainer, color?: number[]): {
|
|
@@ -22,7 +25,10 @@ export declare class ThreeGeometryCreator {
|
|
|
22
25
|
container: {
|
|
23
26
|
id: number;
|
|
24
27
|
ownerId: number;
|
|
28
|
+
type: GraphicType.NONE | GraphicType.BREP | GraphicType.POLYBREP | GraphicType.CURVEARRAY;
|
|
25
29
|
};
|
|
30
|
+
operationId: any;
|
|
31
|
+
rawGraphic: IGraphicElement | null;
|
|
26
32
|
isValid: boolean;
|
|
27
33
|
geometry: THREE.BufferGeometry;
|
|
28
34
|
graphicId: number;
|
|
@@ -36,7 +42,10 @@ export declare class ThreeGeometryCreator {
|
|
|
36
42
|
container: {
|
|
37
43
|
id: number;
|
|
38
44
|
ownerId: number;
|
|
45
|
+
type: GraphicType.NONE | GraphicType.BREP | GraphicType.POLYBREP | GraphicType.CURVEARRAY;
|
|
39
46
|
};
|
|
47
|
+
operationId: any;
|
|
48
|
+
rawGraphic: IGraphicElement | null;
|
|
40
49
|
isValid: boolean;
|
|
41
50
|
geometry: THREE.BufferGeometry;
|
|
42
51
|
graphicId: number;
|
|
@@ -53,7 +62,10 @@ export declare class ThreeGeometryCreator {
|
|
|
53
62
|
container: {
|
|
54
63
|
id: number;
|
|
55
64
|
ownerId: number;
|
|
65
|
+
type: GraphicType.NONE | GraphicType.BREP | GraphicType.POLYBREP | GraphicType.CURVEARRAY;
|
|
56
66
|
};
|
|
67
|
+
operationId: any;
|
|
68
|
+
rawGraphic: IGraphicElement | null;
|
|
57
69
|
isValid: boolean;
|
|
58
70
|
geometry: THREE.BufferGeometry;
|
|
59
71
|
graphicId: number;
|
|
@@ -71,7 +83,10 @@ export declare class ThreeGeometryCreator {
|
|
|
71
83
|
container: {
|
|
72
84
|
id: number;
|
|
73
85
|
ownerId: number;
|
|
86
|
+
type: GraphicType.NONE | GraphicType.BREP | GraphicType.POLYBREP | GraphicType.CURVEARRAY;
|
|
74
87
|
};
|
|
88
|
+
operationId: any;
|
|
89
|
+
rawGraphic: IGraphicElement | null;
|
|
75
90
|
isValid: boolean;
|
|
76
91
|
geometry: THREE.BufferGeometry;
|
|
77
92
|
graphicId: number;
|
|
@@ -90,7 +105,10 @@ export declare class ThreeGeometryCreator {
|
|
|
90
105
|
container: {
|
|
91
106
|
id: number;
|
|
92
107
|
ownerId: number;
|
|
108
|
+
type: GraphicType.NONE | GraphicType.BREP | GraphicType.POLYBREP | GraphicType.CURVEARRAY;
|
|
93
109
|
};
|
|
110
|
+
operationId: any;
|
|
111
|
+
rawGraphic: IGraphicElement | null;
|
|
94
112
|
isValid: boolean;
|
|
95
113
|
geometry: THREE.BufferGeometry;
|
|
96
114
|
graphicId: number;
|
|
@@ -105,7 +123,10 @@ export declare class ThreeGeometryCreator {
|
|
|
105
123
|
container: {
|
|
106
124
|
id: number;
|
|
107
125
|
ownerId: number;
|
|
126
|
+
type: GraphicType.NONE | GraphicType.BREP | GraphicType.POLYBREP | GraphicType.CURVEARRAY;
|
|
108
127
|
};
|
|
128
|
+
operationId: any;
|
|
129
|
+
rawGraphic: IGraphicElement | null;
|
|
109
130
|
isValid: boolean;
|
|
110
131
|
geometry: THREE.BufferGeometry;
|
|
111
132
|
graphicId: number;
|
|
@@ -120,7 +141,10 @@ export declare class ThreeGeometryCreator {
|
|
|
120
141
|
container: {
|
|
121
142
|
id: number;
|
|
122
143
|
ownerId: number;
|
|
144
|
+
type: GraphicType.NONE | GraphicType.BREP | GraphicType.POLYBREP | GraphicType.CURVEARRAY;
|
|
123
145
|
};
|
|
146
|
+
operationId: any;
|
|
147
|
+
rawGraphic: IGraphicElement | null;
|
|
124
148
|
geometry: THREE.BufferGeometry;
|
|
125
149
|
graphicId: number;
|
|
126
150
|
type: GraphicType;
|
|
@@ -134,7 +158,10 @@ export declare class ThreeGeometryCreator {
|
|
|
134
158
|
container: {
|
|
135
159
|
id: number;
|
|
136
160
|
ownerId: number;
|
|
161
|
+
type: GraphicType.NONE | GraphicType.BREP | GraphicType.POLYBREP | GraphicType.CURVEARRAY;
|
|
137
162
|
};
|
|
163
|
+
operationId: any;
|
|
164
|
+
rawGraphic: IGraphicElement | null;
|
|
138
165
|
geometry: THREE.BufferGeometry;
|
|
139
166
|
graphicId: number;
|
|
140
167
|
type: GraphicType;
|
|
@@ -150,7 +177,10 @@ export declare class ThreeGeometryCreator {
|
|
|
150
177
|
container: {
|
|
151
178
|
id: number;
|
|
152
179
|
ownerId: number;
|
|
180
|
+
type: GraphicType.NONE | GraphicType.BREP | GraphicType.POLYBREP | GraphicType.CURVEARRAY;
|
|
153
181
|
};
|
|
182
|
+
operationId: any;
|
|
183
|
+
rawGraphic: IGraphicElement | null;
|
|
154
184
|
geometry: THREE.BufferGeometry;
|
|
155
185
|
graphicId: number;
|
|
156
186
|
type: GraphicType;
|
|
@@ -168,7 +198,10 @@ export declare class ThreeGeometryCreator {
|
|
|
168
198
|
container: {
|
|
169
199
|
id: number;
|
|
170
200
|
ownerId: number;
|
|
201
|
+
type: GraphicType.NONE | GraphicType.BREP | GraphicType.POLYBREP | GraphicType.CURVEARRAY;
|
|
171
202
|
};
|
|
203
|
+
operationId: any;
|
|
204
|
+
rawGraphic: IGraphicElement | null;
|
|
172
205
|
key: string;
|
|
173
206
|
graphicId: number;
|
|
174
207
|
type: GraphicType;
|
|
@@ -196,6 +229,7 @@ declare type PointKey = string;
|
|
|
196
229
|
declare type PointType = 'start' | 'end' | 'center';
|
|
197
230
|
export declare type ContainerGeometryT = {
|
|
198
231
|
graphicId: GraphicID;
|
|
232
|
+
type: GraphicType;
|
|
199
233
|
map: Record<GraphicID, GeometryElement>;
|
|
200
234
|
meshes: MeshGeometry[];
|
|
201
235
|
lines: LineGeometry[];
|
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
import * as THREE from 'three';
|
|
2
|
-
import { GraphicType, } from './../types';
|
|
2
|
+
import { ContainerType, GraphicType, } from './../types';
|
|
3
|
+
const convertType = (contType) => {
|
|
4
|
+
let type = GraphicType.NONE;
|
|
5
|
+
switch (contType) {
|
|
6
|
+
case ContainerType.BREP:
|
|
7
|
+
type = GraphicType.BREP;
|
|
8
|
+
break;
|
|
9
|
+
case ContainerType.CURVEARRAY:
|
|
10
|
+
type = GraphicType.CURVEARRAY;
|
|
11
|
+
break;
|
|
12
|
+
case ContainerType.POLYBREP:
|
|
13
|
+
type = GraphicType.POLYBREP;
|
|
14
|
+
break;
|
|
15
|
+
}
|
|
16
|
+
return type;
|
|
17
|
+
};
|
|
3
18
|
/**
|
|
4
19
|
* Creates THREE geometry based on the data within a @see IGraphicContainer.
|
|
5
20
|
*/
|
|
@@ -8,6 +23,7 @@ export class ThreeGeometryCreator {
|
|
|
8
23
|
this.coordHeightTolerance = 0.01;
|
|
9
24
|
}
|
|
10
25
|
getMetadata(geometry, container, color = [0, 0, 0], opacity = 0) {
|
|
26
|
+
var _a;
|
|
11
27
|
const contProps = container.properties; // container has always properties
|
|
12
28
|
const geomProps = geometry ? geometry.properties : {};
|
|
13
29
|
let col = container.properties.material.color || color;
|
|
@@ -18,11 +34,18 @@ export class ThreeGeometryCreator {
|
|
|
18
34
|
}
|
|
19
35
|
const rgbColor = new THREE.Color(col[0] / 255, col[1] / 255, col[2] / 255);
|
|
20
36
|
const layer = geomProps && geomProps.layer ? geomProps.layer : contProps.layer;
|
|
21
|
-
return {
|
|
37
|
+
return {
|
|
38
|
+
color: rgbColor,
|
|
39
|
+
opacity: opa,
|
|
40
|
+
layer,
|
|
41
|
+
container: { id: container.id, ownerId: container.owner, type: convertType(container.type) },
|
|
42
|
+
operationId: (_a = geometry === null || geometry === void 0 ? void 0 : geometry.properties) === null || _a === void 0 ? void 0 : _a.operationId,
|
|
43
|
+
rawGraphic: geometry,
|
|
44
|
+
};
|
|
22
45
|
}
|
|
23
46
|
createGeometry(container, color = [0, 0, 0]) {
|
|
24
|
-
const graphicId = container
|
|
25
|
-
const
|
|
47
|
+
const { id: graphicId, properties, type: contType } = container;
|
|
48
|
+
const type = convertType(contType);
|
|
26
49
|
const box = { min: new THREE.Vector3(...properties.min), max: new THREE.Vector3(...properties.max) };
|
|
27
50
|
const meshes = [];
|
|
28
51
|
const lines = [];
|
|
@@ -66,6 +89,7 @@ export class ThreeGeometryCreator {
|
|
|
66
89
|
}
|
|
67
90
|
const points = Object.values(pointMap);
|
|
68
91
|
return Object.assign({ graphicId,
|
|
92
|
+
type,
|
|
69
93
|
map,
|
|
70
94
|
meshes,
|
|
71
95
|
lines,
|
|
@@ -135,7 +159,10 @@ export class ThreeGeometryCreator {
|
|
|
135
159
|
}
|
|
136
160
|
createLine(line, container, points, color = [0, 0, 0]) {
|
|
137
161
|
const graphicId = line.id;
|
|
138
|
-
|
|
162
|
+
let type = GraphicType.LINE;
|
|
163
|
+
if (container.type === ContainerType.CURVEARRAY) {
|
|
164
|
+
type = GraphicType.CURVELINE;
|
|
165
|
+
}
|
|
139
166
|
const pts = line.points;
|
|
140
167
|
const [startId, endId] = line.pointIds;
|
|
141
168
|
const start = new THREE.Vector3(pts[0], pts[1], pts[2]);
|
|
@@ -144,13 +171,15 @@ export class ThreeGeometryCreator {
|
|
|
144
171
|
this.insertPoint(container, `${endId}|point`, endId, end.clone(), line.id, 'end', points);
|
|
145
172
|
const geometry = new THREE.BufferGeometry().setFromPoints([start.clone(), end.clone()]);
|
|
146
173
|
return Object.assign(Object.assign({ geometry,
|
|
147
|
-
graphicId,
|
|
148
|
-
type }, this.getMetadata(line, container, color)), { start: start.clone(), end: end.clone() });
|
|
174
|
+
graphicId, type: type }, this.getMetadata(line, container, color)), { start: start.clone(), end: end.clone() });
|
|
149
175
|
}
|
|
150
176
|
createEdge(edge, container, points, color = [0, 0, 0]) {
|
|
151
177
|
const threePts = [];
|
|
152
178
|
const graphicId = edge.id;
|
|
153
|
-
|
|
179
|
+
let type = GraphicType.EDGE;
|
|
180
|
+
if (container.type === ContainerType.CURVEARRAY) {
|
|
181
|
+
type = GraphicType.CURVESPLINE;
|
|
182
|
+
}
|
|
154
183
|
const pts = edge.points;
|
|
155
184
|
for (let i = 0, length = pts.length / 3; i < length; i++) {
|
|
156
185
|
threePts.push(new THREE.Vector3(pts[i * 3], pts[i * 3 + 1], pts[i * 3 + 2]));
|
|
@@ -172,12 +201,14 @@ export class ThreeGeometryCreator {
|
|
|
172
201
|
this.insertPoint(container, `${endId}|point`, endId, end, edge.id, 'end', points);
|
|
173
202
|
const geometry = new THREE.BufferGeometry().setFromPoints(threePts);
|
|
174
203
|
return Object.assign(Object.assign({ geometry,
|
|
175
|
-
graphicId,
|
|
176
|
-
type }, this.getMetadata(edge, container, color)), { start: start.clone(), end: end.clone() });
|
|
204
|
+
graphicId, type: type }, this.getMetadata(edge, container, color)), { start: start.clone(), end: end.clone() });
|
|
177
205
|
}
|
|
178
206
|
createArc(arc, container, points, color = [0, 0, 0]) {
|
|
179
207
|
const graphicId = arc.id;
|
|
180
|
-
|
|
208
|
+
let type = arc.isCircle ? GraphicType.CIRCLE : GraphicType.ARC;
|
|
209
|
+
if (container.type === ContainerType.CURVEARRAY) {
|
|
210
|
+
type = arc.isCircle ? GraphicType.CURVECIRCLE : GraphicType.CURVEARC;
|
|
211
|
+
}
|
|
181
212
|
// take half of coordHeightTolerance used for faces, as classcad does it in the tessellation process
|
|
182
213
|
const coordHeight = this.coordHeightTolerance / 2;
|
|
183
214
|
const radius = arc.radius;
|
|
@@ -218,12 +249,11 @@ export class ThreeGeometryCreator {
|
|
|
218
249
|
this.insertPoint(container, `${endId}|point`, endId, end, arc.id, 'end', points);
|
|
219
250
|
const geometry = new THREE.BufferGeometry().setFromPoints(threePts);
|
|
220
251
|
return Object.assign(Object.assign({ geometry,
|
|
221
|
-
graphicId,
|
|
222
|
-
type }, this.getMetadata(arc, container, color)), { normal: normal.clone(), center: center.clone(), radius: arc.radius, angle: arc.angle });
|
|
252
|
+
graphicId, type: type }, this.getMetadata(arc, container, color)), { normal: normal.clone(), center: center.clone(), radius: arc.radius, angle: arc.angle });
|
|
223
253
|
}
|
|
224
254
|
createPoint(container, key, graphicId, position, ownerId, type) {
|
|
225
255
|
return Object.assign(Object.assign({ key,
|
|
226
|
-
graphicId, type: GraphicType.POINT }, this.getMetadata(null, container)), { position: position.clone(), geometry: position.clone(), owners: [{ ownerId, type }] });
|
|
256
|
+
graphicId, type: (container.type === ContainerType.CURVEARRAY ? GraphicType.CURVEPOINT : GraphicType.POINT) }, this.getMetadata(null, container)), { position: position.clone(), geometry: position.clone(), owners: [{ ownerId, type }] });
|
|
227
257
|
}
|
|
228
258
|
insertPoint(container, key, graphicId, position, ownerId, type, points) {
|
|
229
259
|
const existingPoint = points[key];
|
|
@@ -241,6 +271,7 @@ export class ThreeGeometryCreator {
|
|
|
241
271
|
export const EMPTY_CONTAINER_GEOMETRY = () => {
|
|
242
272
|
return {
|
|
243
273
|
graphicId: Number.NaN,
|
|
274
|
+
type: GraphicType.NONE,
|
|
244
275
|
map: {},
|
|
245
276
|
meshes: [],
|
|
246
277
|
lines: [],
|
|
@@ -248,10 +279,12 @@ export const EMPTY_CONTAINER_GEOMETRY = () => {
|
|
|
248
279
|
arcs: [],
|
|
249
280
|
points: [],
|
|
250
281
|
box: { min: new THREE.Vector3(), max: new THREE.Vector3() },
|
|
251
|
-
container: { id: NaN, ownerId: NaN },
|
|
282
|
+
container: { id: Number.NaN, ownerId: Number.NaN, type: GraphicType.NONE },
|
|
252
283
|
color: new THREE.Color(),
|
|
253
284
|
opacity: 1.0,
|
|
254
285
|
layer: null,
|
|
286
|
+
operationId: Number.NaN,
|
|
287
|
+
rawGraphic: null,
|
|
255
288
|
};
|
|
256
289
|
};
|
|
257
290
|
export const isEqualGeometry = (a, b) => {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { GetState, SetState } from 'zustand';
|
|
2
2
|
import { BuerliStoreApi } from '../../store/store';
|
|
3
3
|
import { DrawingState } from './drawing';
|
|
4
|
-
|
|
4
|
+
declare type States = {
|
|
5
5
|
current: number;
|
|
6
6
|
stack: string[];
|
|
7
7
|
captionMap: Record<string, {
|
|
@@ -9,8 +9,16 @@ export declare type States = {
|
|
|
9
9
|
caption: string;
|
|
10
10
|
}>;
|
|
11
11
|
};
|
|
12
|
+
declare type Pending = {
|
|
13
|
+
id: string;
|
|
14
|
+
name: string;
|
|
15
|
+
stamp: number;
|
|
16
|
+
args?: any;
|
|
17
|
+
};
|
|
12
18
|
export declare type CadData = {
|
|
19
|
+
connected: boolean;
|
|
13
20
|
states: States;
|
|
21
|
+
pending: Pending[];
|
|
14
22
|
};
|
|
15
23
|
export declare type CadApi = ReturnType<typeof cadApi>;
|
|
16
24
|
export declare const cadData: () => CadData;
|
|
@@ -23,4 +31,10 @@ export declare const cadApi: (set: SetState<DrawingState>, get: GetState<Drawing
|
|
|
23
31
|
stateName: string;
|
|
24
32
|
caption: string;
|
|
25
33
|
}>) => void;
|
|
34
|
+
addPending: (name: string, options?: {
|
|
35
|
+
args?: any;
|
|
36
|
+
} | undefined) => string;
|
|
37
|
+
removePending: (id: string) => void;
|
|
38
|
+
setConnected: (connected: boolean) => void;
|
|
26
39
|
};
|
|
40
|
+
export {};
|
|
@@ -1,8 +1,11 @@
|
|
|
1
|
+
import { v4 } from 'uuid';
|
|
1
2
|
////////////////////////////////////////////////////
|
|
2
3
|
// DATA
|
|
3
4
|
////////////////////////////////////////////////////
|
|
4
5
|
export const cadData = () => ({
|
|
6
|
+
connected: false,
|
|
5
7
|
states: { current: 0, stack: [], captionMap: {} },
|
|
8
|
+
pending: [],
|
|
6
9
|
});
|
|
7
10
|
////////////////////////////////////////////////////
|
|
8
11
|
// API
|
|
@@ -10,4 +13,18 @@ export const cadData = () => ({
|
|
|
10
13
|
export const cadApi = (set, get, buerliApi) => ({
|
|
11
14
|
setStates: (current, stack, captionMap) => set(state => ({ cad: Object.assign(Object.assign({}, state.cad), { states: Object.assign(Object.assign({}, state.cad.states), { current, stack, captionMap }) }) })),
|
|
12
15
|
setCaptionMap: (captionMap) => set(state => ({ cad: Object.assign(Object.assign({}, state.cad), { states: Object.assign(Object.assign({}, state.cad.states), { captionMap }) }) })),
|
|
16
|
+
addPending: (name, options) => {
|
|
17
|
+
const id = v4();
|
|
18
|
+
set(state => ({
|
|
19
|
+
cad: Object.assign(Object.assign({}, state.cad), { pending: [...state.cad.pending, Object.assign(Object.assign({}, options), { id, name, stamp: Date.now() })] }),
|
|
20
|
+
}));
|
|
21
|
+
return id;
|
|
22
|
+
},
|
|
23
|
+
removePending: (id) => {
|
|
24
|
+
const newPending = get().cad.pending.filter(p => p.id !== id);
|
|
25
|
+
set(state => ({ cad: Object.assign(Object.assign({}, state.cad), { pending: newPending }) }));
|
|
26
|
+
},
|
|
27
|
+
setConnected: (connected) => {
|
|
28
|
+
return set(state => ({ cad: Object.assign(Object.assign({}, state.cad), { connected }) }));
|
|
29
|
+
},
|
|
13
30
|
});
|
|
@@ -25,7 +25,6 @@ export declare type DrawingAPI = {
|
|
|
25
25
|
graphic: GraphicApi;
|
|
26
26
|
canvas: CanvasApi;
|
|
27
27
|
cad: CadApi;
|
|
28
|
-
setCustom: (key: string, value: Record<string, any>) => void;
|
|
29
28
|
};
|
|
30
29
|
declare type StateData = {
|
|
31
30
|
id: DrawingID;
|
|
@@ -37,7 +36,6 @@ declare type StateData = {
|
|
|
37
36
|
selection: SelectionData;
|
|
38
37
|
plugin: PluginData;
|
|
39
38
|
cad: CadData;
|
|
40
|
-
custom: any;
|
|
41
39
|
};
|
|
42
40
|
export declare type DrawingState = Readonly<StateData> & Readonly<{
|
|
43
41
|
api: DrawingAPI;
|
|
@@ -28,7 +28,6 @@ export const createDrawingState = (set, get, buerliApi, drawingNumber, name) =>
|
|
|
28
28
|
graphic: graphicData(),
|
|
29
29
|
canvas: canvasData(),
|
|
30
30
|
cad: cadData(),
|
|
31
|
-
custom: {},
|
|
32
31
|
api: {
|
|
33
32
|
structure: structureApi(set, get, buerliApi),
|
|
34
33
|
selection: selectionApi(set, get, buerliApi),
|
|
@@ -37,9 +36,6 @@ export const createDrawingState = (set, get, buerliApi, drawingNumber, name) =>
|
|
|
37
36
|
graphic: graphicApi(set, get, buerliApi),
|
|
38
37
|
canvas: canvasApi(set, get, buerliApi),
|
|
39
38
|
cad: cadApi(set, get, buerliApi),
|
|
40
|
-
setCustom: (key, value) => {
|
|
41
|
-
set(state => (Object.assign(Object.assign({}, state), { custom: Object.assign(Object.assign({}, state.custom), { [key]: Object.assign(Object.assign({}, state.custom[key]), value) }) })));
|
|
42
|
-
},
|
|
43
39
|
},
|
|
44
40
|
id: drawingId,
|
|
45
41
|
name: name || `Drawing #${drawingNumber}`,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as THREE from 'three';
|
|
2
2
|
import { GetState, SetState } from 'zustand';
|
|
3
|
-
import { ContainerGeometryT } from '../../geometry/ThreeGeometryCreator';
|
|
3
|
+
import { ContainerGeometryT, GeometryElement } from '../../geometry/ThreeGeometryCreator';
|
|
4
4
|
import { BuerliStoreApi } from '../../store/store';
|
|
5
5
|
import { GraphicID } from '../../types/IGraphicPackage';
|
|
6
6
|
import { ObjectID } from '../../types/IStructureTree';
|
|
@@ -45,5 +45,10 @@ export declare const geometryApi: (set: SetState<DrawingState>, get: GetState<Dr
|
|
|
45
45
|
setColor: (containerId: GraphicID, r: number, g: number, b: number) => void;
|
|
46
46
|
setOpacity: (containerId: GraphicID, opacity: number) => void;
|
|
47
47
|
setConfig: (objId: ObjectID | GraphicID, config: Partial<GeometryConfig> | null) => void;
|
|
48
|
+
findDecorated: () => GeometryElement[];
|
|
49
|
+
filter: (cb: (elem: GeometryElement) => boolean, options?: {
|
|
50
|
+
onlyOne?: boolean | undefined;
|
|
51
|
+
containerId?: number | undefined;
|
|
52
|
+
} | undefined) => GeometryElement[];
|
|
48
53
|
};
|
|
49
54
|
export {};
|
|
@@ -83,4 +83,29 @@ export const geometryApi = (set, get, buerliApi) => ({
|
|
|
83
83
|
return { geometry: Object.assign(Object.assign({}, state.geometry), { config: Object.assign(Object.assign({}, state.geometry.config), { product: productConfigs }) }) };
|
|
84
84
|
});
|
|
85
85
|
},
|
|
86
|
+
findDecorated: () => {
|
|
87
|
+
const { geometry: api } = get().api;
|
|
88
|
+
return api.filter(elem => { var _a, _b, _c, _d, _e; return Boolean((_b = (_a = elem.rawGraphic) === null || _a === void 0 ? void 0 : _a.properties) === null || _b === void 0 ? void 0 : _b.label) || Boolean((_e = (_d = (_c = elem.rawGraphic) === null || _c === void 0 ? void 0 : _c.properties) === null || _d === void 0 ? void 0 : _d.material) === null || _e === void 0 ? void 0 : _e.color); });
|
|
89
|
+
},
|
|
90
|
+
filter: (cb, options) => {
|
|
91
|
+
const result = [];
|
|
92
|
+
const { cache } = get().geometry;
|
|
93
|
+
const contIds = Object.getOwnPropertyNames(cache).map(n => Number(n));
|
|
94
|
+
for (const contId of contIds) {
|
|
95
|
+
if ((options === null || options === void 0 ? void 0 : options.containerId) && contId !== options.containerId) {
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
const ids = Object.getOwnPropertyNames(cache[contId].map).map(id => Number(id));
|
|
99
|
+
for (const id of ids) {
|
|
100
|
+
const elem = cache[contId].map[id];
|
|
101
|
+
if (cb(elem)) {
|
|
102
|
+
result.push(elem);
|
|
103
|
+
if (options === null || options === void 0 ? void 0 : options.onlyOne) {
|
|
104
|
+
return result;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return result;
|
|
110
|
+
},
|
|
86
111
|
});
|
|
@@ -11,11 +11,6 @@ export declare const graphicData: () => GraphicData;
|
|
|
11
11
|
export declare const graphicApi: (set: SetState<DrawingState>, get: GetState<DrawingState>, buerliApi: BuerliStoreApi) => {
|
|
12
12
|
addPackages: (packages: IGraphicPackage[]) => void;
|
|
13
13
|
cleanupGraphicRecords: () => void;
|
|
14
|
-
findDecorated: () => {
|
|
15
|
-
elem: IGraphicElement;
|
|
16
|
-
containerId: ObjectID;
|
|
17
|
-
solidId: ObjectID;
|
|
18
|
-
}[];
|
|
19
14
|
filter: (cb: (elem: IGraphicElement) => boolean, options?: {
|
|
20
15
|
onlyOne?: boolean | undefined;
|
|
21
16
|
containerId?: number | undefined;
|
|
@@ -79,10 +79,6 @@ export const graphicApi = (set, get, buerliApi) => ({
|
|
|
79
79
|
set({ geometry: Object.assign(Object.assign({}, geometry), { cache: usedGeometry, stamp: Date.now() }) });
|
|
80
80
|
}
|
|
81
81
|
},
|
|
82
|
-
findDecorated: () => {
|
|
83
|
-
const { graphic: api } = get().api;
|
|
84
|
-
return api.filter(elem => { var _a, _b, _c; return Boolean((_a = elem.properties) === null || _a === void 0 ? void 0 : _a.label) || Boolean((_c = (_b = elem.properties) === null || _b === void 0 ? void 0 : _b.material) === null || _c === void 0 ? void 0 : _c.color); });
|
|
85
|
-
},
|
|
86
82
|
filter: (cb, options) => {
|
|
87
83
|
const result = [];
|
|
88
84
|
const { containers } = get().graphic;
|
|
@@ -41,15 +41,22 @@ export declare type SelectionData = {
|
|
|
41
41
|
export declare type SelectionApi = ReturnType<typeof selectionApi>;
|
|
42
42
|
export declare const selectionData: () => SelectionData;
|
|
43
43
|
export declare const selectionApi: (set: SetState<DrawingState>, get: GetState<DrawingState>, buerliApi: BuerliStoreApi) => {
|
|
44
|
-
unselectAll(): void;
|
|
45
|
-
unselect(
|
|
46
|
-
select(
|
|
44
|
+
unselectAll(selectorId?: SelectorID | undefined): void;
|
|
45
|
+
unselect(items: SelectedItem | SelectedItem[], selectorId?: SelectorID | undefined): void;
|
|
46
|
+
select(items: SelectedItem | SelectedItem[], selectorId?: SelectorID | undefined): void;
|
|
47
47
|
setHovered(item: SelectedItem | null, selectorId?: SelectorID | undefined): void;
|
|
48
48
|
activateSelector(selectorId: SelectorID | null): void;
|
|
49
49
|
createSelector(selectorId: SelectorID, filter: SelectionFilter, activate?: boolean, initialItems?: SelectedItem[], maxLen?: number, customSelect?: CustomSelect | undefined, customUnSelect?: CustomSelect | undefined): () => void;
|
|
50
50
|
areItemsSelected: (items: SelectedItem[], selectorId?: SelectorID | undefined) => boolean;
|
|
51
51
|
isItemSelected: (item: SelectedItem, selectorId?: SelectorID | undefined) => boolean;
|
|
52
52
|
setItems(id: SelectorID, items: SelectedItem[]): void;
|
|
53
|
-
|
|
53
|
+
selectGraphic: (selectorId: SelectorID, items: {
|
|
54
|
+
productId: ObjectID;
|
|
55
|
+
containerId: GraphicID;
|
|
56
|
+
graphicId?: GraphicID;
|
|
57
|
+
}[], options?: {
|
|
58
|
+
unselectExisting?: boolean | undefined;
|
|
59
|
+
} | undefined) => void;
|
|
60
|
+
getGraphicItem: (productId: ObjectID, containerId: GraphicID, graphicId?: number | undefined) => SelectedItem<ProductElement> | null;
|
|
54
61
|
};
|
|
55
62
|
export declare const createGraphicItem: (productId: ObjectID, el: GeometryElement) => SelectedItem<ProductElement>;
|
|
@@ -8,56 +8,58 @@ export const selectionData = () => ({
|
|
|
8
8
|
active: null,
|
|
9
9
|
});
|
|
10
10
|
export const selectionApi = (set, get, buerliApi) => ({
|
|
11
|
-
unselectAll() {
|
|
12
|
-
const drawingId = get()
|
|
13
|
-
const
|
|
14
|
-
if (
|
|
15
|
-
const unselItems =
|
|
16
|
-
unsubscribeItems(buerliApi, drawingId,
|
|
11
|
+
unselectAll(selectorId) {
|
|
12
|
+
const { selection, id: drawingId } = get();
|
|
13
|
+
const selId = (selectorId || selection.active);
|
|
14
|
+
if (selId) {
|
|
15
|
+
const unselItems = selection.refs[selId].items;
|
|
16
|
+
unsubscribeItems(buerliApi, drawingId, selId, unselItems);
|
|
17
17
|
set(state => {
|
|
18
|
-
const selector = state.selection.refs[
|
|
18
|
+
const selector = state.selection.refs[selId];
|
|
19
19
|
return {
|
|
20
|
-
selection: Object.assign(Object.assign({}, state.selection), { refs: Object.assign(Object.assign({}, state.selection.refs), { [
|
|
20
|
+
selection: Object.assign(Object.assign({}, state.selection), { refs: Object.assign(Object.assign({}, state.selection.refs), { [selId]: Object.assign(Object.assign({}, selector), { items: [] }) }) }),
|
|
21
21
|
};
|
|
22
22
|
});
|
|
23
23
|
}
|
|
24
24
|
},
|
|
25
|
-
unselect(
|
|
25
|
+
unselect(items, selectorId) {
|
|
26
26
|
const { selection, id: drawingId } = get();
|
|
27
|
-
const
|
|
28
|
-
if (
|
|
27
|
+
const selId = (selectorId || selection.active);
|
|
28
|
+
if (selId) {
|
|
29
|
+
const unselItems = Array.isArray(items) ? items : [items];
|
|
29
30
|
// Remove unselItems from selector's items
|
|
30
|
-
const selector = selection.refs[
|
|
31
|
+
const selector = selection.refs[selId];
|
|
31
32
|
const newItems = selector.items.filter(item => unselItems.find(uItem => uItem.id === item.id) === undefined);
|
|
32
|
-
unsubscribeItems(buerliApi, drawingId,
|
|
33
|
+
unsubscribeItems(buerliApi, drawingId, selId, unselItems);
|
|
33
34
|
if (selector.customUnSelect) {
|
|
34
35
|
// Find recently unselected items
|
|
35
36
|
const diff = selector.items.filter(item1 => {
|
|
36
37
|
return newItems.find(item2 => item2.id === item1.id) === undefined;
|
|
37
38
|
});
|
|
38
|
-
selector.customUnSelect(
|
|
39
|
+
selector.customUnSelect(selId, newItems, diff);
|
|
39
40
|
}
|
|
40
41
|
else {
|
|
41
42
|
set(state => {
|
|
42
43
|
return {
|
|
43
|
-
selection: Object.assign(Object.assign({}, state.selection), { refs: Object.assign(Object.assign({}, state.selection.refs), { [
|
|
44
|
+
selection: Object.assign(Object.assign({}, state.selection), { refs: Object.assign(Object.assign({}, state.selection.refs), { [selId]: Object.assign(Object.assign({}, state.selection.refs[selId]), { items: newItems }) }) }),
|
|
44
45
|
};
|
|
45
46
|
});
|
|
46
47
|
}
|
|
47
|
-
this.setHovered(null,
|
|
48
|
+
this.setHovered(null, selId);
|
|
48
49
|
}
|
|
49
50
|
},
|
|
50
|
-
select(
|
|
51
|
+
select(items, selectorId) {
|
|
51
52
|
const { selection, api, id: drawingId } = get();
|
|
52
|
-
const
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
const
|
|
53
|
+
const selId = (selectorId || selection.active);
|
|
54
|
+
if (selId) {
|
|
55
|
+
const { isItemSelected } = api.selection;
|
|
56
|
+
const newItems = Array.isArray(items) ? items : [items];
|
|
57
|
+
const selector = selection.refs[selId];
|
|
56
58
|
const curItems = selector.items;
|
|
57
59
|
// Remove duplicates
|
|
58
60
|
let filteredItems = newItems.filter((item1, idx) => newItems.findIndex(item2 => item2.id === item1.id) === idx);
|
|
59
61
|
// Remove already selected items and duplicates
|
|
60
|
-
filteredItems = filteredItems.filter(item => !isItemSelected(item,
|
|
62
|
+
filteredItems = filteredItems.filter(item => !isItemSelected(item, selId));
|
|
61
63
|
let unsubItems = [];
|
|
62
64
|
let result = [...curItems, ...filteredItems];
|
|
63
65
|
if (selector.maxLen > 0) {
|
|
@@ -84,27 +86,27 @@ export const selectionApi = (set, get, buerliApi) => ({
|
|
|
84
86
|
const diff = result.filter(item1 => {
|
|
85
87
|
return selector.items.find(item2 => item2.id === item1.id) === undefined;
|
|
86
88
|
});
|
|
87
|
-
selector.customSelect(
|
|
89
|
+
selector.customSelect(selId, result, diff);
|
|
88
90
|
}
|
|
89
91
|
else {
|
|
90
92
|
// subscribe items which will be selected
|
|
91
|
-
subscribeItems(buerliApi, drawingId,
|
|
93
|
+
subscribeItems(buerliApi, drawingId, selId, result);
|
|
92
94
|
// unsubscribe items which will be unselected
|
|
93
|
-
unsubscribeItems(buerliApi, drawingId,
|
|
95
|
+
unsubscribeItems(buerliApi, drawingId, selId, unsubItems);
|
|
94
96
|
set(state => {
|
|
95
97
|
return {
|
|
96
|
-
selection: Object.assign(Object.assign({}, state.selection), { refs: Object.assign(Object.assign({}, state.selection.refs), { [
|
|
98
|
+
selection: Object.assign(Object.assign({}, state.selection), { refs: Object.assign(Object.assign({}, state.selection.refs), { [selId]: Object.assign(Object.assign({}, selector), { items: result }) }) }),
|
|
97
99
|
};
|
|
98
100
|
});
|
|
99
101
|
}
|
|
100
|
-
this.setHovered(null,
|
|
102
|
+
this.setHovered(null, selId);
|
|
101
103
|
}
|
|
102
104
|
},
|
|
103
105
|
setHovered(item, selectorId) {
|
|
104
106
|
const { selection } = get();
|
|
105
107
|
if (selection.active === null && selectorId === undefined)
|
|
106
108
|
return;
|
|
107
|
-
const selId = selection.active
|
|
109
|
+
const selId = (selectorId || selection.active);
|
|
108
110
|
set(state => ({
|
|
109
111
|
selection: Object.assign(Object.assign({}, state.selection), { refs: Object.assign(Object.assign({}, state.selection.refs), { [selId]: Object.assign(Object.assign({}, state.selection.refs[selId]), { hoveredItem: item }) }) }),
|
|
110
112
|
}));
|
|
@@ -153,7 +155,7 @@ export const selectionApi = (set, get, buerliApi) => ({
|
|
|
153
155
|
const { selection } = get();
|
|
154
156
|
if (selection.active === null && selectorId === undefined)
|
|
155
157
|
return false;
|
|
156
|
-
const selId = selection.active
|
|
158
|
+
const selId = (selectorId || selection.active);
|
|
157
159
|
const selector = selection.refs[selId];
|
|
158
160
|
let res = true;
|
|
159
161
|
items.forEach(item => {
|
|
@@ -168,7 +170,7 @@ export const selectionApi = (set, get, buerliApi) => ({
|
|
|
168
170
|
const { selection } = get();
|
|
169
171
|
if (selection.active === null && selectorId === undefined)
|
|
170
172
|
return false;
|
|
171
|
-
const selId = selection.active
|
|
173
|
+
const selId = (selectorId || selection.active);
|
|
172
174
|
const selector = selection.refs[selId];
|
|
173
175
|
return Boolean(selector.items.find(i => areItemsEqual(i, item)));
|
|
174
176
|
},
|
|
@@ -185,17 +187,36 @@ export const selectionApi = (set, get, buerliApi) => ({
|
|
|
185
187
|
};
|
|
186
188
|
});
|
|
187
189
|
},
|
|
190
|
+
selectGraphic: (selectorId, items, options) => {
|
|
191
|
+
const { api } = get();
|
|
192
|
+
const selItems = items
|
|
193
|
+
.map(i => api.selection.getGraphicItem(i.productId, i.containerId, i.graphicId))
|
|
194
|
+
.filter(i => Boolean(i));
|
|
195
|
+
if (options === null || options === void 0 ? void 0 : options.unselectExisting) {
|
|
196
|
+
api.selection.setItems(selectorId, selItems);
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
api.selection.select(selItems, selectorId);
|
|
200
|
+
}
|
|
201
|
+
},
|
|
188
202
|
getGraphicItem: (productId, containerId, graphicId) => {
|
|
189
203
|
const { cache } = get().geometry;
|
|
190
204
|
const container = cache[containerId];
|
|
205
|
+
let useContainer = false;
|
|
191
206
|
if (container) {
|
|
192
207
|
if (graphicId === undefined) {
|
|
193
208
|
const ids = Object.getOwnPropertyNames(container.map);
|
|
194
209
|
graphicId = ids.length > 0 ? Number(ids[0]) : undefined;
|
|
210
|
+
useContainer = true;
|
|
195
211
|
}
|
|
196
212
|
if (graphicId !== undefined) {
|
|
197
|
-
|
|
213
|
+
let geomElem = container.map[graphicId];
|
|
214
|
+
if (!geomElem) {
|
|
215
|
+
geomElem = container.points.find(p => p.graphicId === graphicId);
|
|
216
|
+
}
|
|
198
217
|
if (geomElem) {
|
|
218
|
+
geomElem.graphicId = useContainer ? containerId : geomElem.graphicId;
|
|
219
|
+
geomElem.type = useContainer ? container.type : geomElem.type;
|
|
199
220
|
return createGraphicItem(productId, geomElem);
|
|
200
221
|
}
|
|
201
222
|
}
|
|
@@ -206,11 +227,23 @@ export const selectionApi = (set, get, buerliApi) => ({
|
|
|
206
227
|
////////////////////////////////////////////////////
|
|
207
228
|
//#region GLOBAL FUNCTIONS
|
|
208
229
|
const areItemsEqual = (a, b) => a.id === b.id && a.scope === b.scope;
|
|
230
|
+
const getLabel = (type) => {
|
|
231
|
+
const uppLetters = type.replace(/[a-z]/g, '');
|
|
232
|
+
if (uppLetters.length >= 2) {
|
|
233
|
+
return uppLetters[0] + uppLetters[1];
|
|
234
|
+
}
|
|
235
|
+
else if (uppLetters.length === 1) {
|
|
236
|
+
return (type[0] + uppLetters[0]).toUpperCase();
|
|
237
|
+
}
|
|
238
|
+
else {
|
|
239
|
+
return (type[0] + type[1]).toUpperCase();
|
|
240
|
+
}
|
|
241
|
+
};
|
|
209
242
|
const createGraphicIdent = (productId, graphicId, type) => {
|
|
210
243
|
return {
|
|
211
244
|
id: `${productId}|${graphicId}|${type}`,
|
|
212
245
|
scope: BuerliScope,
|
|
213
|
-
label: (type
|
|
246
|
+
label: getLabel(type),
|
|
214
247
|
};
|
|
215
248
|
};
|
|
216
249
|
export const createGraphicItem = (productId, el) => {
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import fastpatch from 'fast-json-patch';
|
|
1
2
|
import jsonpatch from 'jsonpatch';
|
|
2
3
|
import * as THREE from 'three';
|
|
3
4
|
import { DEFAULT_STRUCTURE_TREE, } from '../../types';
|
|
@@ -29,19 +30,50 @@ export const structureApi = (set, get, buerliApi) => ({
|
|
|
29
30
|
},
|
|
30
31
|
applyPatches: (patches) => {
|
|
31
32
|
const before = get().structure.products.concat(get().structure.visibleContainers);
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
structure =
|
|
33
|
+
const applyBlock = (block) => {
|
|
34
|
+
if (block.length === 0)
|
|
35
|
+
return;
|
|
36
|
+
set(state => {
|
|
37
|
+
let structure = state.structure;
|
|
38
|
+
try {
|
|
39
|
+
// TODO: keep an eye on the patch behaviour in general.
|
|
40
|
+
// For large changes 'fast-json-patch' is much more performant than 'jsonpatch'.
|
|
41
|
+
// However, for smaller changes 'jsonpatch' is more performant than 'fast-json-patch'.
|
|
42
|
+
if (block.length > 100) {
|
|
43
|
+
structure = fastpatch.applyPatch(state.structure, block, false, false).newDocument;
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
structure = jsonpatch.apply_patch(state.structure, block);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
catch (e) {
|
|
50
|
+
console.error(e);
|
|
51
|
+
}
|
|
52
|
+
// console.info('currentProduct in new patched structure: ', structure.currentProduct)
|
|
53
|
+
return { structure: Object.assign(Object.assign({}, state.structure), structure) };
|
|
54
|
+
});
|
|
55
|
+
};
|
|
56
|
+
const treePatches = [];
|
|
57
|
+
const otherPatches = [];
|
|
58
|
+
for (const patch of patches) {
|
|
59
|
+
if (patch.path.startsWith('/tree/')) {
|
|
60
|
+
treePatches.push(patch);
|
|
37
61
|
}
|
|
38
|
-
|
|
39
|
-
|
|
62
|
+
else {
|
|
63
|
+
otherPatches.push(patch);
|
|
40
64
|
}
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
65
|
+
}
|
|
66
|
+
// console.info(JSON.stringify(otherPatches))
|
|
67
|
+
//////////////////////////////////////////////////////////////////////////////
|
|
68
|
+
// The following split of the state update helps very much in some cases to
|
|
69
|
+
// prevent not existing object access in many React hooks.
|
|
70
|
+
// 1. Perform meta information update as the first step (root, currentProduct, ...)
|
|
71
|
+
applyBlock(otherPatches);
|
|
72
|
+
// 2. Perform tree update as a second, separate step
|
|
73
|
+
applyBlock(treePatches);
|
|
74
|
+
// TODO: The update behaviour for structure updates in buerli/zustand/react-hooks
|
|
75
|
+
// has to be analyzed in more detail based on a very simple example.
|
|
76
|
+
//////////////////////////////////////////////////////////////////////////////
|
|
45
77
|
const { api } = get();
|
|
46
78
|
api.structure.postProcessStructureUpdate();
|
|
47
79
|
// Update the bounds, but only if products or visible containers changed.
|
|
@@ -10,6 +10,7 @@ export interface IGraphicPackageProperties {
|
|
|
10
10
|
export interface IGraphicContainer {
|
|
11
11
|
id: GraphicID;
|
|
12
12
|
owner: ObjectID;
|
|
13
|
+
type: ContainerType;
|
|
13
14
|
properties: IGraphicContainerProps;
|
|
14
15
|
meshes: IGraphicMesh[];
|
|
15
16
|
lines: IGraphicLine[];
|
|
@@ -120,14 +121,31 @@ export declare enum GraphicType {
|
|
|
120
121
|
SPHERE = "sphere",
|
|
121
122
|
NURBS = "nurbs",
|
|
122
123
|
NURBSSURFACE = "nurbsSurface",
|
|
123
|
-
|
|
124
|
-
|
|
124
|
+
NONE = "none",
|
|
125
|
+
BREP = "brep",
|
|
126
|
+
POLYBREP = "polyBrep",
|
|
127
|
+
CURVEARRAY = "curveArray",
|
|
128
|
+
CURVELINE = "curveLine",
|
|
129
|
+
CURVESPLINE = "curveSpline",
|
|
130
|
+
CURVEARC = "curveArc",
|
|
131
|
+
CURVECIRCLE = "curveCircle",
|
|
132
|
+
CURVEPOINT = "curvePoint",
|
|
133
|
+
LOOP = "loop"
|
|
134
|
+
}
|
|
135
|
+
export declare enum ContainerType {
|
|
136
|
+
NONE = 0,
|
|
137
|
+
BREP = 1,
|
|
138
|
+
CURVEARRAY = 2,
|
|
139
|
+
POLYBREP = 3
|
|
125
140
|
}
|
|
126
141
|
declare type RoA = ReadonlyArray<GraphicType>;
|
|
127
142
|
export declare const AllTypes: RoA;
|
|
128
143
|
export declare const Surfaces: RoA;
|
|
129
144
|
export declare const LineSegments: RoA;
|
|
130
145
|
export declare const Primitives: RoA;
|
|
146
|
+
export declare const CurveSegments: RoA;
|
|
147
|
+
export declare const EntityTypes: RoA;
|
|
148
|
+
export declare const PointTypes: RoA;
|
|
131
149
|
export interface IGraphicMaterial {
|
|
132
150
|
color: number[];
|
|
133
151
|
opacity: number;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export var GraphicType;
|
|
2
2
|
(function (GraphicType) {
|
|
3
|
+
// Primitives
|
|
3
4
|
GraphicType["POINT"] = "point";
|
|
4
5
|
GraphicType["LINE"] = "line";
|
|
5
6
|
GraphicType["EDGE"] = "edge";
|
|
@@ -11,11 +12,35 @@ export var GraphicType;
|
|
|
11
12
|
GraphicType["SPHERE"] = "sphere";
|
|
12
13
|
GraphicType["NURBS"] = "nurbs";
|
|
13
14
|
GraphicType["NURBSSURFACE"] = "nurbsSurface";
|
|
15
|
+
// Entities
|
|
16
|
+
GraphicType["NONE"] = "none";
|
|
17
|
+
GraphicType["BREP"] = "brep";
|
|
18
|
+
GraphicType["POLYBREP"] = "polyBrep";
|
|
19
|
+
GraphicType["CURVEARRAY"] = "curveArray";
|
|
20
|
+
// Curve array elements
|
|
21
|
+
GraphicType["CURVELINE"] = "curveLine";
|
|
22
|
+
GraphicType["CURVESPLINE"] = "curveSpline";
|
|
23
|
+
GraphicType["CURVEARC"] = "curveArc";
|
|
24
|
+
GraphicType["CURVECIRCLE"] = "curveCircle";
|
|
25
|
+
GraphicType["CURVEPOINT"] = "curvePoint";
|
|
26
|
+
// Custom type(s) (not defined by server protocol)
|
|
14
27
|
GraphicType["LOOP"] = "loop";
|
|
15
|
-
GraphicType["SOLID"] = "solid";
|
|
16
28
|
})(GraphicType || (GraphicType = {}));
|
|
29
|
+
export var ContainerType;
|
|
30
|
+
(function (ContainerType) {
|
|
31
|
+
ContainerType[ContainerType["NONE"] = 0] = "NONE";
|
|
32
|
+
ContainerType[ContainerType["BREP"] = 1] = "BREP";
|
|
33
|
+
ContainerType[ContainerType["CURVEARRAY"] = 2] = "CURVEARRAY";
|
|
34
|
+
ContainerType[ContainerType["POLYBREP"] = 3] = "POLYBREP";
|
|
35
|
+
// POINTARRAY = 4, // Not used at the moment
|
|
36
|
+
// GRAPHIC = 5, // Not used at the moment
|
|
37
|
+
// LIGHTWEIGHTBREP = 6, // Not used at the moment
|
|
38
|
+
})(ContainerType || (ContainerType = {}));
|
|
17
39
|
const G = GraphicType;
|
|
18
40
|
export const AllTypes = Object.keys(G).map(key => G[key]);
|
|
19
41
|
export const Surfaces = [G.PLANE, G.CYLINDER, G.CONE, G.SPHERE, G.NURBS, G.NURBSSURFACE];
|
|
20
42
|
export const LineSegments = [G.LINE, G.EDGE, G.ARC, G.CIRCLE];
|
|
21
43
|
export const Primitives = Surfaces.concat(LineSegments).concat([G.POINT]);
|
|
44
|
+
export const CurveSegments = [G.CURVELINE, G.CURVESPLINE, G.CURVEARC, G.CURVECIRCLE];
|
|
45
|
+
export const EntityTypes = [G.BREP, G.POLYBREP, G.CURVEARRAY];
|
|
46
|
+
export const PointTypes = [G.POINT, G.CURVEPOINT];
|
package/build/utils/Measure.js
CHANGED
|
@@ -21,10 +21,12 @@ export const Measure = {
|
|
|
21
21
|
const newItem = Object.assign({}, item);
|
|
22
22
|
switch (newItem.type) {
|
|
23
23
|
case GraphicType.POINT:
|
|
24
|
+
case GraphicType.CURVEPOINT:
|
|
24
25
|
const point = newItem;
|
|
25
26
|
point.position = point.position.clone().applyMatrix4(matrix);
|
|
26
27
|
break;
|
|
27
28
|
case GraphicType.LINE:
|
|
29
|
+
case GraphicType.CURVELINE:
|
|
28
30
|
const line = newItem;
|
|
29
31
|
line.start = line.start.clone().applyMatrix4(matrix);
|
|
30
32
|
line.end = line.end.clone().applyMatrix4(matrix);
|
|
@@ -48,12 +50,14 @@ export const Measure = {
|
|
|
48
50
|
cone.origin = cone.origin.clone().applyMatrix4(matrix);
|
|
49
51
|
break;
|
|
50
52
|
case GraphicType.ARC:
|
|
53
|
+
case GraphicType.CURVEARC:
|
|
51
54
|
const arc = newItem;
|
|
52
55
|
arc.normal = arc.normal.clone().applyMatrix3(matrix3);
|
|
53
56
|
arc.normal.normalize();
|
|
54
57
|
arc.center = arc.center.clone().applyMatrix4(matrix);
|
|
55
58
|
break;
|
|
56
59
|
case GraphicType.CIRCLE:
|
|
60
|
+
case GraphicType.CURVECIRCLE:
|
|
57
61
|
const circle = newItem;
|
|
58
62
|
circle.normal = circle.normal.clone().applyMatrix3(matrix3);
|
|
59
63
|
circle.normal.normalize();
|
|
@@ -83,6 +87,7 @@ export const Measure = {
|
|
|
83
87
|
for (const element of transformed) {
|
|
84
88
|
switch (element.type) {
|
|
85
89
|
case GraphicType.POINT:
|
|
90
|
+
case GraphicType.CURVEPOINT:
|
|
86
91
|
const point = element;
|
|
87
92
|
results.push({
|
|
88
93
|
value: vecToStr(point.position),
|
|
@@ -91,6 +96,7 @@ export const Measure = {
|
|
|
91
96
|
});
|
|
92
97
|
break;
|
|
93
98
|
case GraphicType.LINE:
|
|
99
|
+
case GraphicType.CURVELINE:
|
|
94
100
|
const line = element;
|
|
95
101
|
let absoluteDistance = line.start.distanceTo(line.end);
|
|
96
102
|
absoluteDistance = Measure.round(absoluteDistance, 3);
|
|
@@ -102,6 +108,7 @@ export const Measure = {
|
|
|
102
108
|
});
|
|
103
109
|
break;
|
|
104
110
|
case GraphicType.EDGE:
|
|
111
|
+
case GraphicType.CURVESPLINE:
|
|
105
112
|
const edge = element;
|
|
106
113
|
results.push({
|
|
107
114
|
value: vecToStr(edge.start),
|
|
@@ -111,6 +118,7 @@ export const Measure = {
|
|
|
111
118
|
results.push({ value: vecToStr(edge.end), description: 'Edge end', type: MeasureResultType.POSITION });
|
|
112
119
|
break;
|
|
113
120
|
case GraphicType.ARC:
|
|
121
|
+
case GraphicType.CURVEARC:
|
|
114
122
|
const arc = element;
|
|
115
123
|
const arcNEnd = arc.center.clone().addScaledVector(arc.normal.clone().normalize(), 40);
|
|
116
124
|
const pointOnArc = getPointOnCircumference(arc.center, arc.normal, arc.radius);
|
|
@@ -134,6 +142,7 @@ export const Measure = {
|
|
|
134
142
|
});
|
|
135
143
|
break;
|
|
136
144
|
case GraphicType.CIRCLE:
|
|
145
|
+
case GraphicType.CURVECIRCLE:
|
|
137
146
|
const circle = element;
|
|
138
147
|
const circleNEnd = circle.center.clone().addScaledVector(circle.normal.clone().normalize(), 40);
|
|
139
148
|
const pointOnCircle = getPointOnCircumference(circle.center, circle.normal, circle.radius);
|
|
@@ -273,11 +282,14 @@ export const Measure = {
|
|
|
273
282
|
let results = [];
|
|
274
283
|
switch (first.type) {
|
|
275
284
|
case GraphicType.POINT:
|
|
285
|
+
case GraphicType.CURVEPOINT:
|
|
276
286
|
switch (second.type) {
|
|
277
287
|
case GraphicType.POINT:
|
|
288
|
+
case GraphicType.CURVEPOINT:
|
|
278
289
|
results = Measure.calculatePointPoint(first, second);
|
|
279
290
|
break;
|
|
280
291
|
case GraphicType.LINE:
|
|
292
|
+
case GraphicType.CURVELINE:
|
|
281
293
|
results = Measure.calculatePointLine(first, second);
|
|
282
294
|
break;
|
|
283
295
|
case GraphicType.PLANE:
|
|
@@ -289,11 +301,14 @@ export const Measure = {
|
|
|
289
301
|
}
|
|
290
302
|
break;
|
|
291
303
|
case GraphicType.LINE:
|
|
304
|
+
case GraphicType.CURVELINE:
|
|
292
305
|
switch (second.type) {
|
|
293
306
|
case GraphicType.POINT:
|
|
307
|
+
case GraphicType.CURVEPOINT:
|
|
294
308
|
results = Measure.calculatePointLine(second, first);
|
|
295
309
|
break;
|
|
296
310
|
case GraphicType.LINE:
|
|
311
|
+
case GraphicType.CURVELINE:
|
|
297
312
|
results = Measure.calculateLineLine(first, second);
|
|
298
313
|
break;
|
|
299
314
|
case GraphicType.PLANE:
|
|
@@ -307,12 +322,15 @@ export const Measure = {
|
|
|
307
322
|
case GraphicType.PLANE:
|
|
308
323
|
switch (second.type) {
|
|
309
324
|
case GraphicType.POINT:
|
|
325
|
+
case GraphicType.CURVEPOINT:
|
|
310
326
|
results = Measure.calculatePointPlane(second, first);
|
|
311
327
|
break;
|
|
312
328
|
case GraphicType.LINE:
|
|
329
|
+
case GraphicType.CURVELINE:
|
|
313
330
|
results = Measure.calculateLinePlane(second, first);
|
|
314
331
|
break;
|
|
315
332
|
case GraphicType.ARC:
|
|
333
|
+
case GraphicType.CURVEARC:
|
|
316
334
|
results = Measure.calculateArcPlane(second, first);
|
|
317
335
|
break;
|
|
318
336
|
case GraphicType.PLANE:
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@buerli.io/core",
|
|
3
|
-
"version": "0.0
|
|
3
|
+
"version": "0.2.0-beta.1",
|
|
4
4
|
"description": "buerli state management",
|
|
5
5
|
"author": "AWV Informatik AG <info@awv-informatik.ch>",
|
|
6
6
|
"license": "ISC",
|
|
@@ -32,7 +32,8 @@
|
|
|
32
32
|
"three": "^0.138"
|
|
33
33
|
},
|
|
34
34
|
"dependencies": {
|
|
35
|
-
"
|
|
35
|
+
"fast-json-patch": "^3.1.1",
|
|
36
|
+
"jsonpatch": "^3.1.0",
|
|
36
37
|
"uuid": "^3.3.2",
|
|
37
38
|
"zustand": "^3.5.7"
|
|
38
39
|
},
|
package/tsconfig.tsbuildinfo
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"program":{"fileNames":["../../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es5.d.ts","../../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2015.d.ts","../../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2016.d.ts","../../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2017.d.ts","../../../../../../../usr/local/lib/node_modules/typescript/lib/lib.dom.d.ts","../../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2015.core.d.ts","../../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2017.object.d.ts","../../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2017.string.d.ts","../../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../../../../../usr/local/lib/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../node_modules/zustand/vanilla.d.ts","../../node_modules/zustand/index.d.ts","./src/store/store.ts","../../node_modules/@types/uuid/interfaces.d.ts","../../node_modules/@types/uuid/index.d.ts","./src/store/states/cad.ts","./src/store/states/canvas.ts","../../node_modules/@types/three/src/constants.d.ts","../../node_modules/@types/three/src/Three.Legacy.d.ts","../../node_modules/@types/three/src/math/Quaternion.d.ts","../../node_modules/@types/three/src/math/Euler.d.ts","../../node_modules/@types/three/src/core/Layers.d.ts","../../node_modules/@types/three/src/scenes/Fog.d.ts","../../node_modules/@types/three/src/math/Vector2.d.ts","../../node_modules/@types/three/src/core/InterleavedBuffer.d.ts","../../node_modules/@types/three/src/core/InterleavedBufferAttribute.d.ts","../../node_modules/@types/three/src/math/Triangle.d.ts","../../node_modules/@types/three/src/math/Box3.d.ts","../../node_modules/@types/three/src/math/Sphere.d.ts","../../node_modules/@types/three/src/math/Line3.d.ts","../../node_modules/@types/three/src/math/Plane.d.ts","../../node_modules/@types/three/src/core/EventDispatcher.d.ts","../../node_modules/@types/three/src/renderers/shaders/UniformsLib.d.ts","../../node_modules/@types/three/src/renderers/shaders/ShaderLib.d.ts","../../node_modules/@types/three/src/textures/Texture.d.ts","../../node_modules/@types/three/src/materials/Material.d.ts","../../node_modules/@types/three/src/scenes/Scene.d.ts","../../node_modules/@types/three/src/renderers/webgl/WebGLCapabilities.d.ts","../../node_modules/@types/three/src/renderers/webgl/WebGLExtensions.d.ts","../../node_modules/@types/three/src/renderers/webgl/WebGLShader.d.ts","../../node_modules/@types/three/src/math/Vector4.d.ts","../../node_modules/@types/three/src/renderers/webgl/WebGLState.d.ts","../../node_modules/@types/three/src/renderers/webgl/WebGLProperties.d.ts","../../node_modules/@types/three/src/renderers/webgl/WebGLUtils.d.ts","../../node_modules/@types/three/src/renderers/webgl/WebGLTextures.d.ts","../../node_modules/@types/three/src/renderers/webgl/WebGLUniforms.d.ts","../../node_modules/@types/three/src/renderers/webgl/WebGLProgram.d.ts","../../node_modules/@types/three/src/renderers/webgl/WebGLInfo.d.ts","../../node_modules/@types/three/src/renderers/webgl/WebGLObjects.d.ts","../../node_modules/@types/three/src/textures/DepthTexture.d.ts","../../node_modules/@types/three/src/renderers/WebGLRenderTarget.d.ts","../../node_modules/@types/three/src/lights/LightShadow.d.ts","../../node_modules/@types/three/src/lights/Light.d.ts","../../node_modules/@types/three/src/renderers/webgl/WebGLShadowMap.d.ts","../../node_modules/@types/three/src/objects/Group.d.ts","../../node_modules/@types/three/src/core/BufferGeometry.d.ts","../../node_modules/@types/three/src/renderers/webgl/WebGLRenderLists.d.ts","../../node_modules/@types/three/src/renderers/WebGLMultipleRenderTargets.d.ts","../../node_modules/@types/three/src/renderers/webxr/WebXR.d.ts","../../node_modules/@types/three/src/renderers/webxr/WebXRManager.d.ts","../../node_modules/@types/three/src/textures/DataTexture3D.d.ts","../../node_modules/@types/three/src/textures/DataTexture2DArray.d.ts","../../node_modules/@types/three/src/renderers/WebGLRenderer.d.ts","../../node_modules/@types/three/src/math/Ray.d.ts","../../node_modules/@types/three/src/core/Raycaster.d.ts","../../node_modules/@types/three/src/math/Interpolant.d.ts","../../node_modules/@types/three/src/math/interpolants/DiscreteInterpolant.d.ts","../../node_modules/@types/three/src/math/interpolants/LinearInterpolant.d.ts","../../node_modules/@types/three/src/math/interpolants/CubicInterpolant.d.ts","../../node_modules/@types/three/src/animation/KeyframeTrack.d.ts","../../node_modules/@types/three/src/objects/Bone.d.ts","../../node_modules/@types/three/src/animation/AnimationClip.d.ts","../../node_modules/@types/three/src/core/Object3D.d.ts","../../node_modules/@types/three/src/cameras/Camera.d.ts","../../node_modules/@types/three/src/math/Spherical.d.ts","../../node_modules/@types/three/src/math/Cylindrical.d.ts","../../node_modules/@types/three/src/math/Vector3.d.ts","../../node_modules/@types/three/src/math/Matrix4.d.ts","../../node_modules/@types/three/src/math/Matrix3.d.ts","../../node_modules/@types/three/src/core/BufferAttribute.d.ts","../../node_modules/@types/three/src/math/Color.d.ts","../../node_modules/@types/three/src/utils.d.ts","../../node_modules/@types/three/src/animation/tracks/VectorKeyframeTrack.d.ts","../../node_modules/@types/three/src/animation/tracks/StringKeyframeTrack.d.ts","../../node_modules/@types/three/src/animation/tracks/QuaternionKeyframeTrack.d.ts","../../node_modules/@types/three/src/animation/tracks/NumberKeyframeTrack.d.ts","../../node_modules/@types/three/src/animation/tracks/ColorKeyframeTrack.d.ts","../../node_modules/@types/three/src/animation/tracks/BooleanKeyframeTrack.d.ts","../../node_modules/@types/three/src/animation/PropertyMixer.d.ts","../../node_modules/@types/three/src/animation/PropertyBinding.d.ts","../../node_modules/@types/three/src/animation/AnimationUtils.d.ts","../../node_modules/@types/three/src/animation/AnimationObjectGroup.d.ts","../../node_modules/@types/three/src/animation/AnimationAction.d.ts","../../node_modules/@types/three/src/animation/AnimationMixer.d.ts","../../node_modules/@types/three/src/audio/AudioContext.d.ts","../../node_modules/@types/three/src/audio/AudioListener.d.ts","../../node_modules/@types/three/src/audio/Audio.d.ts","../../node_modules/@types/three/src/audio/PositionalAudio.d.ts","../../node_modules/@types/three/src/audio/AudioAnalyser.d.ts","../../node_modules/@types/three/src/cameras/PerspectiveCamera.d.ts","../../node_modules/@types/three/src/cameras/StereoCamera.d.ts","../../node_modules/@types/three/src/cameras/OrthographicCamera.d.ts","../../node_modules/@types/three/src/textures/CubeTexture.d.ts","../../node_modules/@types/three/src/renderers/WebGLCubeRenderTarget.d.ts","../../node_modules/@types/three/src/cameras/CubeCamera.d.ts","../../node_modules/@types/three/src/cameras/ArrayCamera.d.ts","../../node_modules/@types/three/src/core/Uniform.d.ts","../../node_modules/@types/three/src/core/InstancedBufferGeometry.d.ts","../../node_modules/@types/three/src/core/InstancedInterleavedBuffer.d.ts","../../node_modules/@types/three/src/core/InstancedBufferAttribute.d.ts","../../node_modules/@types/three/src/core/GLBufferAttribute.d.ts","../../node_modules/@types/three/src/core/Clock.d.ts","../../node_modules/@types/three/src/extras/core/Curve.d.ts","../../node_modules/@types/three/src/extras/curves/EllipseCurve.d.ts","../../node_modules/@types/three/src/extras/curves/ArcCurve.d.ts","../../node_modules/@types/three/src/extras/curves/CatmullRomCurve3.d.ts","../../node_modules/@types/three/src/extras/curves/CubicBezierCurve.d.ts","../../node_modules/@types/three/src/extras/curves/CubicBezierCurve3.d.ts","../../node_modules/@types/three/src/extras/curves/LineCurve.d.ts","../../node_modules/@types/three/src/extras/curves/LineCurve3.d.ts","../../node_modules/@types/three/src/extras/curves/QuadraticBezierCurve.d.ts","../../node_modules/@types/three/src/extras/curves/QuadraticBezierCurve3.d.ts","../../node_modules/@types/three/src/extras/curves/SplineCurve.d.ts","../../node_modules/@types/three/src/extras/curves/Curves.d.ts","../../node_modules/@types/three/src/extras/core/CurvePath.d.ts","../../node_modules/@types/three/src/extras/core/Path.d.ts","../../node_modules/@types/three/src/extras/core/Shape.d.ts","../../node_modules/@types/three/src/extras/core/ShapePath.d.ts","../../node_modules/@types/three/src/extras/DataUtils.d.ts","../../node_modules/@types/three/src/extras/ImageUtils.d.ts","../../node_modules/@types/three/src/extras/ShapeUtils.d.ts","../../node_modules/@types/three/src/extras/PMREMGenerator.d.ts","../../node_modules/@types/three/src/geometries/BoxGeometry.d.ts","../../node_modules/@types/three/src/geometries/CircleGeometry.d.ts","../../node_modules/@types/three/src/geometries/CylinderGeometry.d.ts","../../node_modules/@types/three/src/geometries/ConeGeometry.d.ts","../../node_modules/@types/three/src/geometries/PolyhedronGeometry.d.ts","../../node_modules/@types/three/src/geometries/DodecahedronGeometry.d.ts","../../node_modules/@types/three/src/geometries/EdgesGeometry.d.ts","../../node_modules/@types/three/src/geometries/ExtrudeGeometry.d.ts","../../node_modules/@types/three/src/geometries/IcosahedronGeometry.d.ts","../../node_modules/@types/three/src/geometries/LatheGeometry.d.ts","../../node_modules/@types/three/src/geometries/OctahedronGeometry.d.ts","../../node_modules/@types/three/src/geometries/PlaneGeometry.d.ts","../../node_modules/@types/three/src/geometries/RingGeometry.d.ts","../../node_modules/@types/three/src/geometries/ShapeGeometry.d.ts","../../node_modules/@types/three/src/geometries/SphereGeometry.d.ts","../../node_modules/@types/three/src/geometries/TetrahedronGeometry.d.ts","../../node_modules/@types/three/src/geometries/TorusGeometry.d.ts","../../node_modules/@types/three/src/geometries/TorusKnotGeometry.d.ts","../../node_modules/@types/three/src/geometries/TubeGeometry.d.ts","../../node_modules/@types/three/src/geometries/WireframeGeometry.d.ts","../../node_modules/@types/three/src/geometries/Geometries.d.ts","../../node_modules/@types/three/src/objects/Line.d.ts","../../node_modules/@types/three/src/objects/LineSegments.d.ts","../../node_modules/@types/three/src/helpers/SpotLightHelper.d.ts","../../node_modules/@types/three/src/helpers/SkeletonHelper.d.ts","../../node_modules/@types/three/src/lights/PointLightShadow.d.ts","../../node_modules/@types/three/src/lights/PointLight.d.ts","../../node_modules/@types/three/src/helpers/PointLightHelper.d.ts","../../node_modules/@types/three/src/lights/HemisphereLight.d.ts","../../node_modules/@types/three/src/materials/MeshBasicMaterial.d.ts","../../node_modules/@types/three/src/helpers/HemisphereLightHelper.d.ts","../../node_modules/@types/three/src/helpers/GridHelper.d.ts","../../node_modules/@types/three/src/helpers/PolarGridHelper.d.ts","../../node_modules/@types/three/src/lights/DirectionalLightShadow.d.ts","../../node_modules/@types/three/src/lights/DirectionalLight.d.ts","../../node_modules/@types/three/src/helpers/DirectionalLightHelper.d.ts","../../node_modules/@types/three/src/helpers/CameraHelper.d.ts","../../node_modules/@types/three/src/helpers/BoxHelper.d.ts","../../node_modules/@types/three/src/helpers/Box3Helper.d.ts","../../node_modules/@types/three/src/helpers/PlaneHelper.d.ts","../../node_modules/@types/three/src/objects/Mesh.d.ts","../../node_modules/@types/three/src/helpers/ArrowHelper.d.ts","../../node_modules/@types/three/src/helpers/AxesHelper.d.ts","../../node_modules/@types/three/src/lights/SpotLightShadow.d.ts","../../node_modules/@types/three/src/lights/SpotLight.d.ts","../../node_modules/@types/three/src/lights/RectAreaLight.d.ts","../../node_modules/@types/three/src/lights/AmbientLight.d.ts","../../node_modules/@types/three/src/math/SphericalHarmonics3.d.ts","../../node_modules/@types/three/src/lights/LightProbe.d.ts","../../node_modules/@types/three/src/lights/AmbientLightProbe.d.ts","../../node_modules/@types/three/src/lights/HemisphereLightProbe.d.ts","../../node_modules/@types/three/src/loaders/Loader.d.ts","../../node_modules/@types/three/src/loaders/LoadingManager.d.ts","../../node_modules/@types/three/src/loaders/AnimationLoader.d.ts","../../node_modules/@types/three/src/textures/CompressedTexture.d.ts","../../node_modules/@types/three/src/loaders/CompressedTextureLoader.d.ts","../../node_modules/@types/three/src/textures/DataTexture.d.ts","../../node_modules/@types/three/src/loaders/DataTextureLoader.d.ts","../../node_modules/@types/three/src/loaders/CubeTextureLoader.d.ts","../../node_modules/@types/three/src/loaders/TextureLoader.d.ts","../../node_modules/@types/three/src/loaders/ObjectLoader.d.ts","../../node_modules/@types/three/src/loaders/MaterialLoader.d.ts","../../node_modules/@types/three/src/loaders/BufferGeometryLoader.d.ts","../../node_modules/@types/three/src/loaders/ImageLoader.d.ts","../../node_modules/@types/three/src/loaders/ImageBitmapLoader.d.ts","../../node_modules/@types/three/src/loaders/FileLoader.d.ts","../../node_modules/@types/three/src/loaders/LoaderUtils.d.ts","../../node_modules/@types/three/src/loaders/Cache.d.ts","../../node_modules/@types/three/src/loaders/AudioLoader.d.ts","../../node_modules/@types/three/src/materials/ShadowMaterial.d.ts","../../node_modules/@types/three/src/materials/SpriteMaterial.d.ts","../../node_modules/@types/three/src/materials/ShaderMaterial.d.ts","../../node_modules/@types/three/src/materials/RawShaderMaterial.d.ts","../../node_modules/@types/three/src/materials/PointsMaterial.d.ts","../../node_modules/@types/three/src/materials/MeshStandardMaterial.d.ts","../../node_modules/@types/three/src/materials/MeshPhysicalMaterial.d.ts","../../node_modules/@types/three/src/materials/MeshPhongMaterial.d.ts","../../node_modules/@types/three/src/materials/MeshToonMaterial.d.ts","../../node_modules/@types/three/src/materials/MeshNormalMaterial.d.ts","../../node_modules/@types/three/src/materials/MeshLambertMaterial.d.ts","../../node_modules/@types/three/src/materials/MeshDepthMaterial.d.ts","../../node_modules/@types/three/src/materials/MeshDistanceMaterial.d.ts","../../node_modules/@types/three/src/materials/MeshMatcapMaterial.d.ts","../../node_modules/@types/three/src/materials/LineBasicMaterial.d.ts","../../node_modules/@types/three/src/materials/LineDashedMaterial.d.ts","../../node_modules/@types/three/src/materials/Materials.d.ts","../../node_modules/@types/three/src/math/interpolants/QuaternionLinearInterpolant.d.ts","../../node_modules/@types/three/src/objects/Sprite.d.ts","../../node_modules/@types/three/src/math/Frustum.d.ts","../../node_modules/@types/three/src/math/Box2.d.ts","../../node_modules/@types/three/src/math/MathUtils.d.ts","../../node_modules/@types/three/src/objects/LOD.d.ts","../../node_modules/@types/three/src/objects/InstancedMesh.d.ts","../../node_modules/@types/three/src/objects/Skeleton.d.ts","../../node_modules/@types/three/src/objects/SkinnedMesh.d.ts","../../node_modules/@types/three/src/objects/LineLoop.d.ts","../../node_modules/@types/three/src/objects/Points.d.ts","../../node_modules/@types/three/src/renderers/WebGLMultisampleRenderTarget.d.ts","../../node_modules/@types/three/src/renderers/WebGL1Renderer.d.ts","../../node_modules/@types/three/src/renderers/shaders/UniformsUtils.d.ts","../../node_modules/@types/three/src/renderers/shaders/ShaderChunk.d.ts","../../node_modules/@types/three/src/renderers/webgl/WebGLBufferRenderer.d.ts","../../node_modules/@types/three/src/renderers/webgl/WebGLClipping.d.ts","../../node_modules/@types/three/src/renderers/webgl/WebGLCubeUVMaps.d.ts","../../node_modules/@types/three/src/renderers/webgl/WebGLAttributes.d.ts","../../node_modules/@types/three/src/renderers/webgl/WebGLGeometries.d.ts","../../node_modules/@types/three/src/renderers/webgl/WebGLIndexedBufferRenderer.d.ts","../../node_modules/@types/three/src/renderers/webgl/WebGLLights.d.ts","../../node_modules/@types/three/src/renderers/webgl/WebGLCubeMaps.d.ts","../../node_modules/@types/three/src/renderers/webgl/WebGLBindingStates.d.ts","../../node_modules/@types/three/src/renderers/webgl/WebGLPrograms.d.ts","../../node_modules/@types/three/src/renderers/webxr/WebXRController.d.ts","../../node_modules/@types/three/src/scenes/FogExp2.d.ts","../../node_modules/@types/three/src/textures/VideoTexture.d.ts","../../node_modules/@types/three/src/textures/CanvasTexture.d.ts","../../node_modules/@types/three/src/textures/FramebufferTexture.d.ts","../../node_modules/@types/three/src/Three.d.ts","../../node_modules/@types/three/index.d.ts","./src/types/ErrorTypes.ts","./src/types/IStructureTree.ts","./src/types/IGraphicPackage.ts","./src/types/IStructurePatch.ts","./src/types/index.ts","./src/geometry/ThreeGeometryCreator.ts","./src/store/states/geometry.ts","./src/store/states/graphic.ts","./src/store/states/plugin.ts","./src/store/subscribtion/subscribeToDrawing.ts","./src/store/subscribtion/selection.ts","./src/store/states/selection.ts","../../node_modules/jsonpatch/lib/jsonpatch.d.ts","./src/utils/Math.ts","./src/store/states/structure.ts","./src/store/states/drawing.ts","./src/store/states/message.ts","./src/store/states/buerli.ts","./src/store/index.ts","./src/geometry/index.ts","./src/utils/Measure.ts","./src/utils/Timing.ts","./src/index.ts"],"fileInfos":[{"version":"89f78430e422a0f06d13019d60d5a45b37ec2d28e67eb647f73b1b0d19a46b72","affectsGlobalScope":true},"dc47c4fa66b9b9890cf076304de2a9c5201e94b740cffdf09f87296d877d71f6","7a387c58583dfca701b6c85e0adaf43fb17d590fb16d5b2dc0a2fbd89f35c467","8a12173c586e95f4433e0c6dc446bc88346be73ffe9ca6eec7aa63c8f3dca7f9",{"version":"abba1071bfd89e55e88a054b0c851ea3e8a494c340d0f3fab19eb18f6afb0c9e","affectsGlobalScope":true},{"version":"d8996609230d17e90484a2dd58f22668f9a05a3bfe00bfb1d6271171e54a31fb","affectsGlobalScope":true},{"version":"43fb1d932e4966a39a41b464a12a81899d9ae5f2c829063f5571b6b87e6d2f9c","affectsGlobalScope":true},{"version":"cdccba9a388c2ee3fd6ad4018c640a471a6c060e96f1232062223063b0a5ac6a","affectsGlobalScope":true},{"version":"4378fc8122ec9d1a685b01eb66c46f62aba6b239ca7228bb6483bcf8259ee493","affectsGlobalScope":true},{"version":"0d5f52b3174bee6edb81260ebcd792692c32c81fd55499d69531496f3f2b25e7","affectsGlobalScope":true},{"version":"810627a82ac06fb5166da5ada4159c4ec11978dfbb0805fe804c86406dab8357","affectsGlobalScope":true},{"version":"62d80405c46c3f4c527ee657ae9d43fda65a0bf582292429aea1e69144a522a6","affectsGlobalScope":true},{"version":"3013574108c36fd3aaca79764002b3717da09725a36a6fc02eac386593110f93","affectsGlobalScope":true},{"version":"75ec0bdd727d887f1b79ed6619412ea72ba3c81d92d0787ccb64bab18d261f14","affectsGlobalScope":true},{"version":"3be5a1453daa63e031d266bf342f3943603873d890ab8b9ada95e22389389006","affectsGlobalScope":true},{"version":"17bb1fc99591b00515502d264fa55dc8370c45c5298f4a5c2083557dccba5a2a","affectsGlobalScope":true},{"version":"7ce9f0bde3307ca1f944119f6365f2d776d281a393b576a18a2f2893a2d75c98","affectsGlobalScope":true},{"version":"6a6b173e739a6a99629a8594bfb294cc7329bfb7b227f12e1f7c11bc163b8577","affectsGlobalScope":true},{"version":"12a310447c5d23c7d0d5ca2af606e3bd08afda69100166730ab92c62999ebb9d","affectsGlobalScope":true},{"version":"b0124885ef82641903d232172577f2ceb5d3e60aed4da1153bab4221e1f6dd4e","affectsGlobalScope":true},"5a7e08d1f741929f219121fd5adb83b12bdf6b4ed3c2e4179daf5e1e0be6fd4d","2f97c19039ae92c31b5e5044832b26c06d9d256d4ee62f2018e264062c3ffddb","a3f3ce2f51b31b59895c848f5bebb37d59e3cb95e6afefcc796c9ead490b1cb8","4116dff2582ecc8645c3a90d26707ec6fd9ede6631f63fb65f11d42806bb47f1","8486ee0cb2ef80c6555941e2e0d081b27e9a07eca9df720c99f001f5220f14b5","4ea2ad6b50fde1c004133f1f6b88afafdd85a1253cb2ed1c78b45296176d6715","519cff5e255570348d70d1f11d4cddf0370b03e9f737779afc2a49a2165463dc","6fe666ebe9a164bf1007676a625236b1f0f2b9e0f8232634ce93e35f88e7266c","8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","a0503bd98814760190666ca0ceabeda1436066d93784da923375b51181fc6d24","d12f5fb934377314a0e5dbf6cb65c1be5ab6178ca5fbfc8546c50d3eee458647","121256405f75ca1ce16af4f3306947b967d571a3b5e78ab2ce3f87ff247194d4","5273a936870e6f0a324df8e1d9b80190265fd3c9e7a6c1c889817ae9c60fa909","c660f4adf75a5c4725a46f7f73ba9a19c24d5b67101d7e282398ed483f3590c1","c688c76a19a30efa6f73cc6c133caf2cf8f9568120ff6f1b314e1fad98528681","8314c95ca15641f2a2c25704752dc2d9fc10f533986b312dcbf1f8fe544f939d","1384aadb7b4b5479a690236ac96e93098a45401c1ced6e3fdf0f2d27639e4573","9fe0c8e9580b8d4c539883d078abafe9652f5498e37b94e5ac861fd63d00fa66","8e9c191443e616c30bd47669cc59e4946b5fc23ff03c42c4578a48396688d526","0d040d689a5b08f47143fae77e8447caead3fc54c18b0213d99679e7f304e660","d5dd35a3ab9b497d3932fb0b6f40d5c1c063ba1579ff53b9a6ed4199a3bcb0b9","89005628a158578cfb8bc873c4bb6dbfc08e3b2c0fdab46ee7e5d9703cb8528e","8868268b7cb5bfb508e3844fc129cbdde23e24fae35024fca6798653a3eed289","166c027b2bfc241c7540aaf3832fdee69018185a3f8a5c8e52baba6fdbcfbd20","c5ea5901bbd92a63fe12ced6766cef417369795fe2ec478ab92d5f3049f20883","2248ac937f3fb81c5dbb6b9fe5840c05be485580434f02c61759e8ec705545da","6930fdbc3cfdab7d0afc49022405717674ea095c77d045219d213bbd82c3b570","60c34643c5d1be4050f79a4e589bfa7e46792440efad2a3c49cfda8a72135308","fc3596b10eb99c07fccec7b04b9404d36bea341b9f486173aff1e234aceaccff","b71e7f69e72d51d44ad171e6e93aedc2c33c339dab5fa2656e7b1ee5ba19b2ad","030b5aba86fdbc5d46ffb2c024d7764791848520332a03b662dd26962e1125ad","3755d34ddf0835f31833c825aaf3c996d22d96dfc6db6d04b55e8c29213bac0a","281eb8e4ddd65b6733cf1f175dd1af1bb2595bbcea7c12324f028079ba78fdf9","111ff0b3c8493fcfcb9f5b5dd1af1c7e0350126bce81050f9a3cb23be976aa3e","e0fdf687219271c3031ae25cd8d3e9fe7c16ce46453ce775292887f486c2aa16","f17592fc258a847bb7d38ab25799eabce4865f24fcb441cc69a6a6277a48e6a7","512d2b3f264aac071278060d3e4f019508b8a504283708a0fc503198f244c363","5f477e9897e29f47b860b52218d645178362d3ebd17c990df9f36b0c52d0e6ff","0df7497ada3a4f6459420803ecf7e555f1ad1e7bd43c1e17bdafbc34e19d7162","367bba45eb437cea29f41c3a382c292c6fe6cdb7b26a389ee5d3a5eea5d75040","16ae8a0bdbb8d72fc63437587e08d0eee84ec1c165a7ea12e7d7e6f6457b7a63","1e23aa4e949aef6f654fb097b41ce07dedef1090a6bca21e9aefd985bda68653","1e4d12496a28dfeafbe1e5debbfe5e146df5a39e581a0ee2344a435c941458dd","10757352393ef1239b2efb42b41aa940ff67d9a40409958e9b9d3a9c7a524a64","2923047a1c951231f48fe77a6c2fffba8198c20dd05d4ec1b90f9e45f129adea","74952846d3e9b6c9ddaa3003f962a5b83f55f58f3b55525a962087fafab7f6c7","d0cb43e1b996459c97f19bd66cebb8cc603ce427d736ff7fcb7e729067834f50","d78cadcff2b7eee1aecf1fda437d844617e64507e640f47ea729c80aef632fe8","9e22a3941d4e9ff901b1e3efa2f18efb5cced7f1248c2af03a511d59dd1f37e2","aaadf2c3594c820eb41fbe03ea6c611773f179b07fd0db3a37304626d03dd988","432fe3b8769c1e1090be43baff32bccfb436c1fce8d470a45fef5a8016dbaab1","ed0e3159c03180a7ae7fe891f12b386eb311a9440a3a97e546c4d57039e43162","8e0e0776f11f58f3f2c48c5e081e696cfae42ad41e3be17451f05f12a8804150","b4ec3dcc11e8a52b81878d7aa998218182c36e3222e6c55177172880434823e3","03787420058dce08331a58fa416ab921adea1a655dc5c1c594acf82bcdfdaf87","4ba733d1a5ff0a0779b714468b13c9089f0d877e6fbd0147fac7c3af54c89fe0","a39e9304639454356f4a1fe20741899de0c3163e1f040d0e0acfdc8532f779e3","3bf8a15acc2dbde99020f0ebe9d16ceba9e6220e41e034003fc8f835b47642af","eae4d78e9a2660a6af2a638ac809a81d2bba1b90ec36620b2035a65cf296646b","1e21eb1938604e43aea31c89888967c7c39774d26074057ac87582208b349adc","f677a74b2b038509ea5aef4030fadc0e090cc9fd4dca4c71147934e6697c23b0","78b1daa0a8aa1f54530c110600cdcadf70c1238c0d71fd7208c1bd5b31b77db1","aec723ef0f16cc42c8fcd893569f3867285a780f33e57137a60d6f16d8718093","3470118b64b6e9ea140a7be15b04f8e39d9b17869182a177fd12be31b524c383","f4cadee14617809fe2c126a40aae853ca83700eaac4711bcde7e8b87fa349d76","63162eaa0e0e77c318006455f7053f006a974ee71206a51efd669fd762b4349c","4bba3ad827ca0b92f7573673ec06ba1af0b741391ee1478268c0287006b25b03","418728880845307b1f5ce97a2f2f20e3d9f116886dfbed928b047377c661fe55","18076eca74d509e15742ef6733a1c96689485664c1a3e771d0d705fbe560007b","aa090f388d526153627ee51507c40e659a6fb9d7c669b57db95314bf429076b0","1039b6c9b55a7a7948f5c73ab12e83b9dca160cca0e6c61a4b5de4aecbf4e8af","f8fd4518f157df6d897a336595dac0833595b4e97bdd4cc380cddfc856d51642","b688ddf5ad2d24f3fa58efd84f9ac9e3e1455031d8881dd917d72432a951e9e8","8cc83bf53997f80f7ddf98c0b70d4c625c3cd5b93ae2efe2fc0084a26d997a7a","71eb65c9011c56ea56932a87d9d171cf225f29c3aa601cffdd5818ebd0e16bd7","164f1c5c8ad203e80b827350fe3ca1c59c8106c8613e20a3ec4ea9e63dd2e730","a228ab0a7976c724d6135bbc153016418e3b8560a44101999192c5204fd31dfd","7a921991afa2ab5da7c9d94d6ee81de34724f82520fb3fabbe6eeaa29a7b5661","4c136da3b1dce49c12eac152699c6b4bc64fa93d6c7224a43c816f7e51b00930","bfac6d6a4817bf56d574b1f32b174f655e05ce45c5ddf6d17c9b592660f10935","bc7d1326a9187df243a5af0eddbc3095dc3442ffcc153c23e3974553e11b7972","0e6b3c7f300f6e2587c62783ebf78c74e61e7e85d37591e1e1ecf82cc15adc01","139ab16e09553addf17cfb7122108eb39cd406b8009692c4d1d9e3dea96ef83d","69f3d18ee459096c5e1426df332673a939b56b8bafeeec0b31b3cab1a9e4dadd","192ad3de0ae2044e97d375c601ef54149382bcf59a9eec35066465a73c434c0a","a99712388b38c17ca788b4b93cee993cc487ba69e18d98dba66000031e90c378","c8ac2f17b13f98787daf66f81b0f215e296c7f2acf5b0b43463d685700059653","e1b5820a2298308c97ac20096c391a4a064c02819ea897a20ea3f08f15051035","9d948541e42e0af1cf6e33967c13bdb3193d6507c4ff2bfde6849fe4ee15366c","a37385e604ee8726100c207afa819823079a766c30f5c38a242a9368d8c28e45","ab8c6e4a2b49a17c71848a8c7d14aa7fae2a2620c734922d8d004d59baf59ffb","9d35f4f469698cf0eeef3e8f65397dda0d14c6b1269aa88c355fedfd1fe39776","49c5821b3d2c09dfd5de60e487030779c7250b9419ac1ee895f9337488581260","80639ea4472a40009209e18013d543954e3e2379c712b571101ac2e8c5da0fcb","1fc98030aad398bba258e0fd2d5d6e39ab085c5d22257fbcd8181e0c2621489f","c60124cf00efc8b113c643d222cc146d15d5ea184c04df3cce9ce8652e42a6fc","7bf91a5d5e38618029b7d1703db7c0219f9eda3024fd816360d2ae791e89d1b3","0f4e57b76239328d40d68e9c6271b4f17a19970bdbff18d90e08031b04efc19d","bd683b2b79122ede787c445f2a35505d9dc60cdd3c2ed08cc05d1140c6807241","361ec213e909dea3b00f0aa91e1f1ccafe04eaae327a45bf33fe3c3a9a28d13d","6a60665f3bf35c7be844746ab2f796bb4076118559a7c660cf95fe01163bc79f","6e322a837838dbaad00bd298c6f33f5dfc9a5fed6792b0ae1d00b2da68afc2ac","bd307a41d5962bb877f46e5447db73aead39ca6e87ec7fb9c29368a78731cd32","0f638672b9749835cda995e8eea6ffd2c17c505eb5b51cd263686b1abb5af9ea","105d7842497ad972a7f358d57aa0f95f722d67ce8fb0efc7d93247be6e7b025d","beb69bf7a052aa881fc18d7f7ccd47918719c1ba9ea2c92304bca4266a95df6e","1f0a034bc92b2b6bf1579253aa20a4983b2170cebdad9ff1e13718c5b58aadbc","07d41369f44f66a60cdd99267d7fd3b4c195d8fb9576a7a326b439bf3cc7b11a","8eb1f35d3bd99cfb4a61c87f756ae9389709e3cfdc0c4a54589b2e37c814b5a5","8027a5c97cc51405a3382c6b59d9690fd4ad8166dbb43e7976e62efc4a49fdce","d6fc38421f16d0a68a6d782a94f567464c1c441fc14949441a140b87a29d7ddd","9e9e3b18823c2179e426b11a6945f6586450d9db21e9eea0eb60491d018fa62b","d7a12dd03519d05cf43d70990cff5caf033f9b283aac0706e11519ddebf4e945","4998cbff67e76f385d9955674a9f2ac385926e807ed371ed357ccb6f03a4d72e","882c2025c42189f3f88ad3e72060ce9022c6d44f22fc066f1944c166dc04be01","1c548e5976ee7f2a3c46b88c09db5d1e7d95d464eff7536cb26515eb62b68694","a1e35cae2fcc3e93644f0c69984e138e84b3732961a3b9e91225d612946b4d4d","848c83b9294d41fc9fd8eb360b5a28563cc24f3e8f045f169b5cf1a7201a551a","08f77f39ef225aadaa1351d0ae1c4ca7a1d1886b1425c7cb63ef910885582c69","6d38214cbc52a640629734b6dcdfca5b9561cb1c9d103583098462b5ae3f2f43","9fe3723a3f5f2daa1317099c833ddf6e9859c3298fdc0edb4e06b463f9805761","79812393fa9498071b40f1000ea8e1f4b4a43bc178cef9a10141c0a4a1e483f1","371ddc98c5d6b8e553cf188d0b4037e773f4e1c5838dc0d68d23a3a8e376f312","a4ef836229dea41c44c1263d9abcf8b5d671969db90b3c6bb791094dc39a9a53","78f98988f34eef18c7b8e6853a3f5a4cf6247ae21832467932fbcc09a1287cab","1bdf5b5d4a633c4f5f246f81935cbce1cf5e5d8d9803b51fce46e1bd77cd892e","978f06f93739191b46c5b2d4e04be2c11bc22dfe6eb030deb12b0b0c39815729","62141f6672ab5a102d856e071fe459b2d83c973e150b842e9c1921965546d00b","fd4052ed9390d80ff9010fef9801e2635a65130e21ecd5fed1955df3d1b7f2b4","9d9dc517c138ae88e9a5d51b87f5bc5a16131746ec95ed3a5b0f84009e64da4c","1ea27fff2ec857fa8a4dace7d210563a6c1f6b137fef3ec9455b4075124f35f9","4e8d8b63d319990a4ad7d5517e63a6cbcd773306e2fc7df46622d9bc9fd83b69","49d91fb60620bc8b3be5c1907cfc9a4811af9059b9e431941ca3b9a27309a185","f359dfb36d9ff7a94275b957a1c44709260497699a91bdfe1a5d2fd027a57b29","477f83ae5ac7bbc5e9bbf9981eaf7e720bb5a4f81d71427a9599f77a98889b64","06a6cf05c5d3724580e0800cae14f63f7c47865ad46e0160195eadd8d6d66eb9","c78a500c32fa34be839024265a785c8172a655e270bd726f596716400ccb6191","b7fc8c07ca728c94149ce0e5ee64c21100aca7be97cc53917eb5b8b18976bd59","88b73800dc18e1470090faaf16765668ae154f87788da73214713a05980f68e6","5afeb741b747e4ca22dbcfd57b569c68eb7012c628841ef194eda42ba5b408ab","a14ea1f18d4eaa96304da4f985ae6b7df60268057601c95609ede9ff9fafb905","841a5f4d214aacf90c4e24733ae833d73bda64e2f59a855719e127829e985f6e","09aae1dcce8147ec93604c2b0c08efa3d4604f49401cb7c3da22d461b341a734","5265463dd08020db16b1763ce461004ba99f7d90288ce9444b765cd5060a51bf","3d55311307c15709ca243752aa8a7975fabd92dcc05e6121b2d48ad3213d39f1","b5c5844591132b944b7e5ab87bd288637ecacb23d945637de4ddc9344f25a20d","5e739c6cdb908e7546e5da530ba079166632e69cddd942736660e570acb92479","8f7482100023e5397eb7c1d8fd2595c929727ff423ea1f0b904cebdd37051bc7","7610fe0373d65bcc33f21d57eeba77551e8ce06a8a6abf7576298c69425f81a6","0313fbd97cac12034f11dea9fe85423e240c36ad36d646b00c5d4bbe57f33d7b","ff3765ee3b28da17a4537c891a04883e9f48bb5634f131f5860a85c8ec6dfd75","05c84e8c5123994a210f56d11a4cb9e623f6ad1897c1728c22e4f42f7dd1bf33","dfdc40f6fb796f1bf2f6e2336d711542fd7f3babe1da9d0acb5567e529fb4ab6","ba60980f49610f5e93009be094d68bc20f63568b1aa0c1d08151466390c0c203","9118804631fdd772a2164f6d7f94f290950b317aa4b81a543a9bcb1c9a01aa0a","37bfbfbec5d900c379b7dc65bf3ad2a9a0312fad4c91778ae3c73590d2d37b6b","00ada18d868f7ef9a1081f0e6645bcf753869e1d999b51ce0322238a4c67998d","747199468ebdc82eb604ad75091390d5a1312bfc6e4a2411aa2e69a01b9b6062","0ba73f979f6f0846573338b7391911f80115004c5bed0e2e01b5d83064fbc06f","9b8829ef6f4c70d21e9a9f4653b1b69bc122b482aeccb6e1f7344bbe226837b2","afd5b50a4d20db25e060396161acdf718fffa3b73a85fb3ec75f2607cfed03c6","752e7f35c0b26df44e99a773ca1f37195dacce8847394a28fb29fc2984d98bda","d3eb2f8d171b641149c42a27d8d9d046ddfcd7d80ecc13aabf745eb77aec83ea","cd5588e6cb3863212109cb8f531b5715b23818491a1f7cce7633fc25db67d855","8c14b1e1ad4ddf5e8145459bc11ffdc84a35bad032d0671d67f4e62f9fcb6848","9fa45eaaf2626085d031569a52f54714405cec7b6bacb041f28fe7adfd247a05","56e3c947d17551543a81da36538d51efe75cc56a8576f89bbbdba62934b0b3b1","a790d356ff04c04e692adeb8c560bc16461afff7fff70864df967e57629a23e6","5d729de8b0b70bb4a4f0de2c263f42a3fc9612234665cb5d4f147e82e4ff7419","8350938747a211bf7666131edf2bcf38b464c048aff5a3b64e119fb9b900280c","25987a832e6a9303585accbe47950a9880445f1da53144094f6fc1090335392f","cceaa2d33e02d167889ed2484bd540d08792a8dc695e2352f1ea32b061d9d8b9","55a3a1e1a6b1d91c3a233e3e1eaee28db13e3fc917941f3f5022f28469480cad","a70bf51744ec939a5c87a636c383e0118d3b9332b9863b2c1df158194e1680a6","e52ad7566b687e35a98b4a202e3ee380ecfd5babfec74f79519a52d70211260e","24551b8482b56cba01f5a76871010c9898f87ef22c066b654bc79d6851fb65d8","e1b7d8ebc348369c2636d0548fcb95772a41f13669a92484998636d5c6f6f84c","0c39a6721f4481d28125672874d12f869db7beeb63efa5ea207a894a06b01990","fbd6c3eca05525d6dd186a7b1c6e52d8dd5ffba961478a5bf3a2d17c1209fb2f","fbf180777acc17ed6f59f0fd1639745c64dedecb2ca7886214999c0535ff02da","473a574ee3ffd1ab73bf001acb92d443c50c7ce58854c08c78ae89522f3b2af1","28cf4b88597d75f21d50d3e89cc60914ef1100ca7647c0bca0d44d0e04a83fdc","b93c28cb909567706ed85fcead09cd9ec116a9951727e9560a908b8e92c31ebe","3e0528d53eb3f2386d770412b4dcdd508ea8db6d7a32fac07b27e857b200c6bc","7efce11f987fd2d555babdcbbf505520c31671ad4ac08b298bc237f62ddd6941","5d96064fd7419a9faf2ec2118c273a6245d4933ff18774b39237e3a130ba0ea0","94755c3ecfcf813ef35c06e17b0494cea726eff490be46ec7f10b343cd6d6c66","59bf56dbda4409f8e87676340c5bfb65cf674442e611a680f9f461c8898c46dd","fe605c9e09b87c3032c78e3728f1b06f3402c3377dadde55aa2a31b325c5a977","57f2d9377264cf90b169ba4bbbcee8135d1350d8523d60a41d5523cf8456f226","8d2a53c59c82a8fac953afd36ca75783f60dcc5dec4740f1a00e8986f1119634","9fbae82aa0cef1eb7c06998fafcaaf8b7b049c1fb95db6e9bed4ae0138617a17","a708f4132704cfb8b845d32c02cd098651a52a1d63881e31dd62c6cbb030f1ba","814e5e8981fd7045432c56c64277119870f6e38086b25ca288b4cb7e91281c47","1b905f84eb4131fdbbaa1df421065c1eabca4eb7c0836a52e3975b9f1a57ca3c","2946da37f4281a3ae5953029d73da48da996766b7bd4fffa79e075c3d417e42c","6fc46a5d53ec8adf91eab29757341dafa54f9501c82289215f36a5bd43c6931c","90a06a0b0c7769bfc5675c4c20b337326387b609ef9dd578fabd44f277edb0b3","13152f53e825223b643376711dc4ddbf3fc02d0f2f1ded4e78ff3abe860f563f","81404cf1eb59c372d341a4e4e9ccadaf97cd3fe7e8ff0d46e428d4dc4470bd5e","7ff73f6c8e866cf4d94c06eda365b1e24185a070f66d8d14191ae8a53943d1d9","fa7641ba6b65ee5cc712bb8e79d55aefabc3d9f77595370fde1b344b56798293","fbae464f654de7497f07a70e88429222c0b6a5fcc785f54809b6774ecba8f88b","fe0e99fc2ff678d100b516eef3c5989c5cc49ecac82569630944f6b561e7599e","0312f4bdc9c7ac185ae0fefc98a77d86121aaecb95ad620adec260ebb813af73","d90f57351d3732b66e3245e3e38c3327396a25a9d638c81313307110d99b5cdc","d7065c2df449f17ae78a3a7382deac2e388ada6bc0428c5747a4a80d0718e283","355d745d283e4f89bd785542bdba50ae1ab31ca5fa9618f2e221fbe12b9933cc","384fddf003645c4e2212b1a9cf7709ac125dc572e0fec9c9378a2bf9ba6369d3","bbcd46158e4cc0eccc0043c93b22cdc522148ab501cb09c90e96820f8d87d9ee","6d72d622f589ff41ab26a4cb2adcd01fcb3d271c26b2985ec29c17bcafc82649","6c703676e52e268bd57f00eb52f4ea47a8490b103ede7db6259a83e73cfbbc1b","c6b0ce58e6fd87a883d690422cbd04b16346cf268acbffc434df6c3f88716c65","ef64d9a231218149fd0ca3a1ef5c27332ec1048288f7703e12d1ae69efb2d941","72bca262d6021aecd6ce0e5f1c8f7cefd78deb83bbc9c7363ccdbe1cd2af5b11","a8044bef7f524d3a03f0666eb260818025177c1cbc6ed6c17c0c1639b7892a04","c9034cec3d059fd9345ab9b5f9c35ce88e1293b6cd0e7449422d91faf5a2bd2a","46f7c04e8a6fc8476293af851ad39f5dd275aad4a8ada115dc7831fd2a86644b","aaff0d72aa207f1558cbfb1a4748c5a5a9a7e0257abadc338cab6a019eb3c0c8","a1325c800e29589d0931806b33b36eb23d44b735138734d0e7280d524e814a10","6f887e3afb0de4b6a4e79fb8512910736c1cb43909dabded07521a98fb3ab493","1e23c65f00a3bbb5a94f4a344e7d16762fcc7a9abaf7be7600a8cd38f22531d8","b428ef19e21c3a1895fef811262cc7ae0bde0274e77fe0426663c27ce86a1946","6996398eb3a1f3ee5bc2540f38f716ab941c9ad70fbdfc5a7d7eea87ba6c3cab","85a60dc56301151a1290f2935618f1c10642db39c9385d85bb56580f0481bdb3","a57dd6772ffab02f233287ba6a8f769e35906316605e82ed4f023f409319f2c8","a26ac33854e8d27ef4253f517861b287eb5e7f7c3eb53b3f8a06e28b0e3cfa23","c0052b367c598946d934581c9156f5bf06846a543bd8f1a419fbbedf0c49db5d","2360668f67c85a1ea07864282b797189555b9b9928be94685773ed8381302588","59fc39062aec81b871c29e9f246333d14d0c60ce3d5e3a01b3eb6336f69b6473","ccc6589b9029f32ed53b59cbe7bc71ce795ce0006a93b7cb2427f573856c74e9","821d22def6acf0fb49cdb3e0912881f47c5039f8dd730db1113bef321b9bb4ff","6c5c5605ae801d8af7781b57643e379106763ba7c30d7535e42f65e5ed957b58","31ac52f37d77ba63441903136b65f863071d22fa41ce8ca3bd12fdaa8fbae4b2","408d7457ea4c677bac1a16b0266eba485959ebd5bb49cbc2653d3dbeb0ac38a4","9cb830d035ec1e98e33a16947478bf6058e0b6e6936be9358cfb8c19accbc8a0","9736f4d069b690ae03aab866b7d899230edb963c3291db0290373bf6891ed2f8","a87e1d37190392a43b8eeefd9c825cea6efb97fc63b339709440bd67ca9fc9d7","75e2b79e1670b1701b26d230e0ca944303102bfe6ba58b4cf68483fcf3a445e0","f0ed4c29b9ccc903f0267d76edd8c4b12177adfa3dd7df8813b4abb912da3709","e7592f263bcfe79137e40681d196c9ba4b5ae3440a70d05e967021e4a208ddb8","ae111eed810d9dcd488aade22c70ed0c28b90c47a414c22eaf1116ef12bafcb6","84c4c9a50553ed6cda273bd2c122c1610d933cb710cede845231174e2fbb4915","f9f765079d002752f12db8d2412d84b0990e4a2dbb2f1ecc0087383d491185ad","805f4bfb4321945f5a54ad802bca22b94a7c353db970744bb6dd0b37f9f5d25a","b4f8ce60aababdc04057c8d24527b409b557c8d1b4746a4993ed5259e3125d62","2f60ac5501306d480aee5226b8ee4dea96f7be64fab017f5d509a61fb43ba4f7","e1d2b6f9939228630fa86989ec28d3964573c10668e060ca9525c1a6cd55f834","a2f82946a9f888951f6038dda7d636b838a58b920f7b6531937df167ca5b8b9a","4b9db056a0dedf6ef20fe17882297e0c4090660c09bfdfbeb551436e428aa034","1beb5988f9ccea3306eef8b0ce217fb8ffe2745ee22d525075518514739a4809","95df4adaae1664f9f61b15f29b4fe2e4e59aed36620452933e761e019425eaf8","1d5270ec3eda07d806f425d39c5c4d6332dd626b0d034b37a1d0494719ed90d1","c92a6feaf6e6c85ece9aae17796dae9463e9b8c461eeb1fab4e7c0bbc5813c5f","ec6f5aec2ca8cfa53489a4a6e6f2f8ea3bd070490c139e7bc51dd409bf4e29f6","6ceed2d5632e96c557247d1000c74d6f4356c054c0e9b60f382a44c36dcd250b","544daf9c7bdfe378fe665b40c7ec1df7b926d4f7159276e00794a38aff8ff5c6","579352e3a21c87c337d964959acf80bf31aa70cbb0e0cb16cdd34f20be0ab9d0","1e5e2a0afcf3126cde36ce636fcffc97c28cb7af4c22821044add5c330fe1b10","54273ce127e813c197e2ffe8a3b6529134f4f9cc0c1c5356e165d77494430615","84e389e7667a0dad36afaaa7bced7be37346329faf7e8a320183086b30008321","e270e1d67187528a51c7d653f2d2f3525ccd1d92e9d2c1c2beaa7b47fec7ea9f","d5604aec8dfbd24d80849a7f52d9f9b3689b3fa5cc2081a19b4306f4b6d51f2e"],"options":{"allowSyntheticDefaultImports":true,"composite":true,"declaration":true,"declarationMap":false,"esModuleInterop":true,"module":6,"noFallthroughCasesInSwitch":true,"noImplicitAny":true,"noImplicitReturns":false,"noImplicitThis":true,"outDir":"./build","preserveConstEnums":true,"rootDir":"./src","skipLibCheck":true,"sourceMap":false,"strict":true,"target":4},"fileIdsList":[[259],[28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,47,48,49,50,51,52,53,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,134,135,136,137,138,139,140,141,142,163,164,165,166,167,168,169,170,171,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,248,249,250,253,254,255,256,257,258],[28,82,83,104],[28,80,81,87],[28,42,82,83,102,103],[82],[28,77,78,79],[80],[28,80],[83,105,106],[107],[83,105],[106,107],[110],[83,87,88],[47,73,83,114],[84],[84,110],[28,88,89],[28,30,34,36,38,39,42,87,88,90],[66,90],[66],[35],[28,36],[35,88,89,90],[30,31,32,42,46,47,65,66,73,75,82,84,87,88,89],[32,34,74,83,84,87],[28,45],[45,47,61,73,113],[34,87],[34,123],[34,135],[34,136],[34,91,137],[124],[87,123],[124,125,126,127,128,129,130,131,132,133],[145],[147],[34,66,87,123,137],[143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162],[34,66],[66,137],[66,87,123],[83,87,92,164,183],[91,165],[38,91,165],[83,92,165],[84,165],[83,88,92,164,177],[92,165],[83,88,91,92,171,172],[41,165],[83,88,92,169],[81,83,88,165],[63,83,88,92,165],[63,92],[92,191],[63,83,87,92,176],[62,112],[63,87,91,92],[62,83,91],[63,190],[34,51,61,63,84,88],[63,92,168],[62,110],[63,83,87,91,92,186],[82,194,195],[194,195],[66,118,194,195],[194,195,197],[113,194,195],[194,195,199],[195],[194],[45,46,194,195],[45,46,66,82,83,118,194,195],[45,194,195],[46,91,92],[226],[28,41,42,44,45,73,91,92],[46,172,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227],[28,45,46,91,92],[28,45,46],[45,46,87],[28,34,45,46,91,92],[28,34,45,46],[34,45,91,217],[45,46,91,92],[214],[28,43,46],[34],[37,39,41,83,87,88,90],[90,92],[87],[30,87,88],[38,39,41,83,87,88,230],[87,88],[30],[30,31,87,89],[38,39,40,87,88,89],[31,87,88],[38,39,41,87,88],[38,41,87,88],[34,36,38,41,87,90],[89,90],[30,31,34,36,84,85,86,88,89,90],[30,34,88,90],[76],[83],[46,66,88,90,91,120,183],[75,83,84],[46,66,75,83],[46,66,164],[81,88,199],[46,66,87,88,183,236],[34,66,75,83,228],[73],[45,61,73,113],[42,45],[61],[28,42,45,51,60],[28,34,38,45,46,47,48,49,51,52,53,57,58,61,64,66,67,68,69,70,71,72,83,84,87,91,92],[43],[36,48,90],[46,48,49,57,66,83,90,247],[48,49,58],[46,53,84],[48],[58,66,83,90,247],[57],[48,49],[50,56,73],[46,47,48,49,57,73,245,251,252],[46,47,53,57,65,66,83,84],[28,47,48,59,63,73,84],[28,46,48,49,51],[48,49,52,53,54,58],[55,57],[28],[65,69],[42,65,69,84],[91,92],[33,91],[33,45,46,73,83,84,91],[28,34,42,89],[91],[24],[21],[260,265],[266],[265,267,269,270,272,274,276,277,278,279,280,281,282],[23,269,272,276,277,278],[22,23,267,269,276,277],[22,23,276],[22,23,25,26,27,267,268,269,272,275],[22,23,260,262,263,266,276],[22,23,262,263,266,276],[22,25,276,278],[22,23,25,265,276],[22,23,262,263,266,271,276],[22,23,260,265,273,274,276],[21,22,278],[23,270,272,276],[23,276],[262],[261,262,263,264],[260],[260,265,276,279,280],[25]],"referencedMap":[[260,1],[259,2],[103,3],[82,4],[104,5],[101,6],[80,7],[98,8],[97,9],[96,9],[95,9],[94,9],[93,9],[107,10],[109,11],[106,12],[108,13],[116,14],[84,15],[115,16],[112,17],[110,17],[111,18],[90,19],[66,20],[120,21],[118,22],[119,23],[35,24],[36,25],[83,26],[75,27],[140,28],[142,29],[123,30],[135,31],[136,32],[137,33],[138,34],[125,35],[126,36],[127,31],[128,36],[134,37],[124,31],[129,31],[130,36],[131,31],[132,36],[133,31],[143,22],[144,22],[146,38],[145,22],[148,39],[149,22],[150,40],[163,41],[151,39],[152,42],[153,39],[154,22],[147,22],[155,22],[156,43],[157,22],[158,39],[159,22],[160,22],[161,44],[162,22],[184,45],[185,46],[181,47],[180,48],[179,49],[178,50],[174,51],[173,52],[182,53],[170,54],[175,51],[167,55],[166,56],[189,57],[192,58],[177,59],[176,60],[171,61],[193,58],[63,62],[191,63],[62,64],[169,65],[168,66],[188,57],[187,67],[186,66],[196,68],[211,69],[205,70],[198,71],[201,72],[200,73],[208,69],[207,69],[206,69],[194,74],[195,75],[204,76],[203,77],[202,78],[226,79],[227,80],[46,81],[228,82],[172,83],[223,84],[224,85],[222,83],[225,86],[221,87],[219,86],[218,88],[217,86],[220,86],[216,89],[215,90],[214,91],[212,79],[213,89],[232,92],[38,93],[91,94],[86,95],[31,96],[231,97],[40,98],[233,99],[89,98],[88,100],[41,101],[30,102],[74,103],[39,104],[85,95],[190,95],[37,105],[34,106],[87,107],[51,108],[79,109],[77,109],[78,109],[229,109],[81,110],[65,110],[235,111],[234,112],[164,113],[238,114],[165,114],[183,113],[239,113],[236,115],[237,116],[230,117],[241,118],[114,119],[68,120],[240,121],[61,122],[73,123],[44,124],[247,125],[252,126],[244,127],[245,128],[251,118],[246,1],[49,129],[248,130],[58,131],[250,132],[57,133],[253,134],[67,135],[64,136],[52,137],[55,138],[56,139],[54,140],[254,141],[70,142],[33,143],[255,144],[47,145],[257,28],[197,28],[113,28],[199,28],[72,28],[71,28],[60,28],[258,28],[45,146],[256,28],[92,147],[25,148],[22,149],[266,150],[280,151],[283,152],[279,153],[278,154],[26,155],[27,155],[276,156],[267,157],[268,158],[277,159],[269,160],[272,161],[275,162],[23,163],[271,164],[270,165],[263,166],[264,166],[265,167],[274,168],[281,169],[282,170]],"exportedModulesMap":[[260,1],[259,2],[103,3],[82,4],[104,5],[101,6],[80,7],[98,8],[97,9],[96,9],[95,9],[94,9],[93,9],[107,10],[109,11],[106,12],[108,13],[116,14],[84,15],[115,16],[112,17],[110,17],[111,18],[90,19],[66,20],[120,21],[118,22],[119,23],[35,24],[36,25],[83,26],[75,27],[140,28],[142,29],[123,30],[135,31],[136,32],[137,33],[138,34],[125,35],[126,36],[127,31],[128,36],[134,37],[124,31],[129,31],[130,36],[131,31],[132,36],[133,31],[143,22],[144,22],[146,38],[145,22],[148,39],[149,22],[150,40],[163,41],[151,39],[152,42],[153,39],[154,22],[147,22],[155,22],[156,43],[157,22],[158,39],[159,22],[160,22],[161,44],[162,22],[184,45],[185,46],[181,47],[180,48],[179,49],[178,50],[174,51],[173,52],[182,53],[170,54],[175,51],[167,55],[166,56],[189,57],[192,58],[177,59],[176,60],[171,61],[193,58],[63,62],[191,63],[62,64],[169,65],[168,66],[188,57],[187,67],[186,66],[196,68],[211,69],[205,70],[198,71],[201,72],[200,73],[208,69],[207,69],[206,69],[194,74],[195,75],[204,76],[203,77],[202,78],[226,79],[227,80],[46,81],[228,82],[172,83],[223,84],[224,85],[222,83],[225,86],[221,87],[219,86],[218,88],[217,86],[220,86],[216,89],[215,90],[214,91],[212,79],[213,89],[232,92],[38,93],[91,94],[86,95],[31,96],[231,97],[40,98],[233,99],[89,98],[88,100],[41,101],[30,102],[74,103],[39,104],[85,95],[190,95],[37,105],[34,106],[87,107],[51,108],[79,109],[77,109],[78,109],[229,109],[81,110],[65,110],[235,111],[234,112],[164,113],[238,114],[165,114],[183,113],[239,113],[236,115],[237,116],[230,117],[241,118],[114,119],[68,120],[240,121],[61,122],[73,123],[44,124],[247,125],[252,126],[244,127],[245,128],[251,118],[246,1],[49,129],[248,130],[58,131],[250,132],[57,133],[253,134],[67,135],[64,136],[52,137],[55,138],[56,139],[54,140],[254,141],[70,142],[33,143],[255,144],[47,145],[257,28],[197,28],[113,28],[199,28],[72,28],[71,28],[60,28],[258,28],[45,146],[256,28],[92,147],[25,148],[22,149],[266,150],[280,151],[283,152],[279,153],[278,154],[26,155],[27,155],[276,156],[267,157],[268,158],[277,159],[269,160],[272,161],[275,162],[23,163],[271,164],[270,165],[263,166],[264,166],[265,167],[274,168],[281,169],[282,170]],"semanticDiagnosticsPerFile":[260,29,259,103,82,104,102,101,80,100,99,98,97,96,95,94,93,107,109,105,106,108,116,84,115,112,110,111,28,90,66,122,42,121,120,118,119,35,36,32,83,75,117,139,140,142,141,123,135,136,137,138,125,126,127,128,134,124,129,130,131,132,133,143,144,146,145,148,149,150,163,151,152,153,154,147,155,156,157,158,159,160,161,162,184,185,181,180,179,178,174,173,182,170,175,167,166,189,192,177,176,171,193,63,191,62,169,168,188,187,186,196,211,205,210,198,201,200,208,207,206,194,209,195,204,203,202,226,227,46,228,172,223,224,222,225,221,219,218,217,220,216,215,214,212,213,232,38,91,86,31,231,76,40,233,89,88,41,30,74,39,85,190,37,34,87,51,79,77,78,229,81,65,235,234,164,238,165,183,239,236,237,230,241,114,68,240,61,73,243,44,43,242,247,252,244,48,245,251,246,49,248,249,58,250,59,57,253,53,67,50,64,52,55,56,54,69,254,70,33,255,47,257,197,113,199,72,71,60,258,45,256,92,25,24,273,22,21,266,280,283,279,278,26,27,276,267,268,277,269,272,275,23,271,270,261,263,264,262,265,274,281,282,5,7,6,2,8,9,10,11,12,13,14,15,3,4,19,16,17,18,20,1]},"version":"4.5.5"}
|