angular-three-soba 1.4.0 → 1.5.0
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/abstractions/index.d.ts +4 -0
- package/abstractions/lib/catmull-rom-line/catmull-rom-line.d.ts +15 -0
- package/abstractions/lib/cubic-bezier-line/cubic-bezier-line.d.ts +15 -0
- package/abstractions/lib/line/line-input.d.ts +19 -0
- package/abstractions/lib/line/line.d.ts +21 -0
- package/abstractions/lib/quadratic-bezier-line/quadratic-bezier-line.d.ts +19 -0
- package/esm2020/abstractions/index.mjs +5 -1
- package/esm2020/abstractions/lib/catmull-rom-line/catmull-rom-line.mjs +119 -0
- package/esm2020/abstractions/lib/cubic-bezier-line/cubic-bezier-line.mjs +98 -0
- package/esm2020/abstractions/lib/line/line-input.mjs +75 -0
- package/esm2020/abstractions/lib/line/line.mjs +147 -0
- package/esm2020/abstractions/lib/quadratic-bezier-line/quadratic-bezier-line.mjs +127 -0
- package/fesm2015/angular-three-soba-abstractions.mjs +541 -7
- package/fesm2015/angular-three-soba-abstractions.mjs.map +1 -1
- package/fesm2020/angular-three-soba-abstractions.mjs +541 -7
- package/fesm2020/angular-three-soba-abstractions.mjs.map +1 -1
- package/package.json +1 -1
- package/plugin/package.json +1 -1
package/abstractions/index.d.ts
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
export * from './lib/billboard/billboard';
|
|
2
|
+
export * from './lib/catmull-rom-line/catmull-rom-line';
|
|
3
|
+
export * from './lib/cubic-bezier-line/cubic-bezier-line';
|
|
2
4
|
export * from './lib/gizmo-helper/gizmo-helper';
|
|
3
5
|
export * from './lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube';
|
|
4
6
|
export * from './lib/gizmo-helper/gizmo-viewport/gizmo-viewport';
|
|
7
|
+
export * from './lib/line/line';
|
|
8
|
+
export * from './lib/quadratic-bezier-line/quadratic-bezier-line';
|
|
5
9
|
export * from './lib/text-3d/text-3d';
|
|
6
10
|
export * from './lib/text/text';
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import * as THREE from 'three';
|
|
2
|
+
import { Line2 } from 'three-stdlib';
|
|
3
|
+
import { NgtsLineInput } from '../line/line-input';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export declare class NgtsCatmullRomLine extends NgtsLineInput {
|
|
6
|
+
lineRef: import("angular-three").NgtInjectedRef<Line2>;
|
|
7
|
+
set points(points: Array<THREE.Vector3 | THREE.Vector2 | [number, number, number] | [number, number] | number>);
|
|
8
|
+
set closed(closed: boolean);
|
|
9
|
+
set curveType(curveType: 'centripetal' | 'chordal' | 'catmullrom');
|
|
10
|
+
set tension(tension: number);
|
|
11
|
+
set segments(segments: number);
|
|
12
|
+
initialize(): void;
|
|
13
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<NgtsCatmullRomLine, never>;
|
|
14
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<NgtsCatmullRomLine, "ngts-catmull-rom-line[points]", never, { "lineRef": "lineRef"; "points": "points"; "closed": "closed"; "curveType": "curveType"; "tension": "tension"; "segments": "segments"; }, {}, never, never, true, never>;
|
|
15
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import * as THREE from 'three';
|
|
2
|
+
import { Line2 } from 'three-stdlib';
|
|
3
|
+
import { NgtsLineInput } from '../line/line-input';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export declare class NgtsCubicBezierLine extends NgtsLineInput {
|
|
6
|
+
lineRef: import("angular-three").NgtInjectedRef<Line2>;
|
|
7
|
+
set start(start: THREE.Vector3 | [number, number, number]);
|
|
8
|
+
set end(end: THREE.Vector3 | [number, number, number]);
|
|
9
|
+
set midA(midA: THREE.Vector3 | [number, number, number]);
|
|
10
|
+
set midB(midB: THREE.Vector3 | [number, number, number]);
|
|
11
|
+
set segments(segments: number);
|
|
12
|
+
initialize(): void;
|
|
13
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<NgtsCubicBezierLine, never>;
|
|
14
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<NgtsCubicBezierLine, "ngts-cubic-bezier-line[start][end][midA][midB]", never, { "lineRef": "lineRef"; "start": "start"; "end": "end"; "midA": "midA"; "midB": "midB"; "segments": "segments"; }, {}, never, never, true, never>;
|
|
15
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { NgtRxStore } from 'angular-three';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export declare abstract class NgtsLineInput extends NgtRxStore {
|
|
4
|
+
set vertexColors(vertexColors: Array<THREE.Color | [number, number, number]>);
|
|
5
|
+
set lineWidth(lineWidth: number);
|
|
6
|
+
set alphaToCoverage(alphaToCoverage: boolean);
|
|
7
|
+
set color(color: THREE.ColorRepresentation);
|
|
8
|
+
set dashed(dashed: boolean);
|
|
9
|
+
set dashScale(dashScale: number);
|
|
10
|
+
set dashSize(dashSize: number);
|
|
11
|
+
set dashOffset(dashOffset: number);
|
|
12
|
+
set gapSize(gapSize: number);
|
|
13
|
+
set resolution(resolution: THREE.Vector2);
|
|
14
|
+
set wireframe(wireframe: boolean);
|
|
15
|
+
set worldUnits(worldUnits: boolean);
|
|
16
|
+
initialize(): void;
|
|
17
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<NgtsLineInput, never>;
|
|
18
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<NgtsLineInput, never, never, { "vertexColors": "vertexColors"; "lineWidth": "lineWidth"; "alphaToCoverage": "alphaToCoverage"; "color": "color"; "dashed": "dashed"; "dashScale": "dashScale"; "dashSize": "dashSize"; "dashOffset": "dashOffset"; "gapSize": "gapSize"; "resolution": "resolution"; "wireframe": "wireframe"; "worldUnits": "worldUnits"; }, {}, never, never, false, never>;
|
|
19
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { OnInit } from '@angular/core';
|
|
2
|
+
import { NgtAfterAttach } from 'angular-three';
|
|
3
|
+
import * as THREE from 'three';
|
|
4
|
+
import { Line2, LineGeometry, LineMaterial, LineSegments2 } from 'three-stdlib';
|
|
5
|
+
import { NgtsLineInput } from './line-input';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
export declare class NgtsLine extends NgtsLineInput implements OnInit {
|
|
8
|
+
readonly Boolean: BooleanConstructor;
|
|
9
|
+
readonly lineMaterial: LineMaterial;
|
|
10
|
+
private readonly store;
|
|
11
|
+
lineRef: import("angular-three").NgtInjectedRef<LineSegments2 | Line2>;
|
|
12
|
+
set points(points: Array<THREE.Vector3 | THREE.Vector2 | [number, number, number] | [number, number] | number>);
|
|
13
|
+
set segments(segments: boolean);
|
|
14
|
+
onAfterGeometryAttached({ parent }: NgtAfterAttach<Line2 | LineSegments2, LineGeometry>): void;
|
|
15
|
+
initialize(): void;
|
|
16
|
+
ngOnInit(): void;
|
|
17
|
+
private computeLineDistances;
|
|
18
|
+
private disposeGeometry;
|
|
19
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<NgtsLine, never>;
|
|
20
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<NgtsLine, "ngts-line[points]", never, { "lineRef": "lineRef"; "points": "points"; "segments": "segments"; }, {}, never, never, true, never>;
|
|
21
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { OnInit } from '@angular/core';
|
|
2
|
+
import * as THREE from 'three';
|
|
3
|
+
import { Line2 } from 'three-stdlib';
|
|
4
|
+
import { NgtsLineInput } from '../line/line-input';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export declare class NgtsQuadraticBezierLine extends NgtsLineInput implements OnInit {
|
|
7
|
+
readonly curve: THREE.QuadraticBezierCurve3;
|
|
8
|
+
lineRef: import("angular-three").NgtInjectedRef<Line2>;
|
|
9
|
+
set start(start: THREE.Vector3 | [number, number, number]);
|
|
10
|
+
set end(end: THREE.Vector3 | [number, number, number]);
|
|
11
|
+
set mid(mid: THREE.Vector3 | [number, number, number]);
|
|
12
|
+
set segments(segments: number);
|
|
13
|
+
initialize(): void;
|
|
14
|
+
ngOnInit(): void;
|
|
15
|
+
private replaceSetPoints;
|
|
16
|
+
private getPoints;
|
|
17
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<NgtsQuadraticBezierLine, never>;
|
|
18
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<NgtsQuadraticBezierLine, "ngts-quadratic-bezier-line", never, { "lineRef": "lineRef"; "start": "start"; "end": "end"; "mid": "mid"; "segments": "segments"; }, {}, never, never, true, never>;
|
|
19
|
+
}
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
export * from './lib/billboard/billboard';
|
|
2
|
+
export * from './lib/catmull-rom-line/catmull-rom-line';
|
|
3
|
+
export * from './lib/cubic-bezier-line/cubic-bezier-line';
|
|
2
4
|
export * from './lib/gizmo-helper/gizmo-helper';
|
|
3
5
|
export * from './lib/gizmo-helper/gizmo-viewcube/gizmo-viewcube';
|
|
4
6
|
export * from './lib/gizmo-helper/gizmo-viewport/gizmo-viewport';
|
|
7
|
+
export * from './lib/line/line';
|
|
8
|
+
export * from './lib/quadratic-bezier-line/quadratic-bezier-line';
|
|
5
9
|
export * from './lib/text-3d/text-3d';
|
|
6
10
|
export * from './lib/text/text';
|
|
7
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUtc29iYS9hYnN0cmFjdGlvbnMvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyx5Q0FBeUMsQ0FBQztBQUN4RCxjQUFjLDJDQUEyQyxDQUFDO0FBQzFELGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyxrREFBa0QsQ0FBQztBQUNqRSxjQUFjLGtEQUFrRCxDQUFDO0FBQ2pFLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyxtREFBbUQsQ0FBQztBQUNsRSxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsaUJBQWlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2xpYi9iaWxsYm9hcmQvYmlsbGJvYXJkJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NhdG11bGwtcm9tLWxpbmUvY2F0bXVsbC1yb20tbGluZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jdWJpYy1iZXppZXItbGluZS9jdWJpYy1iZXppZXItbGluZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9naXptby1oZWxwZXIvZ2l6bW8taGVscGVyJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2dpem1vLWhlbHBlci9naXptby12aWV3Y3ViZS9naXptby12aWV3Y3ViZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9naXptby1oZWxwZXIvZ2l6bW8tdmlld3BvcnQvZ2l6bW8tdmlld3BvcnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbGluZS9saW5lJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3F1YWRyYXRpYy1iZXppZXItbGluZS9xdWFkcmF0aWMtYmV6aWVyLWxpbmUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdGV4dC0zZC90ZXh0LTNkJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RleHQvdGV4dCc7XG4iXX0=
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { Component, CUSTOM_ELEMENTS_SCHEMA, Input } from '@angular/core';
|
|
2
|
+
import { injectNgtRef, startWithUndefined } from 'angular-three';
|
|
3
|
+
import { combineLatest, map } from 'rxjs';
|
|
4
|
+
import * as THREE from 'three';
|
|
5
|
+
import { CatmullRomCurve3 } from 'three';
|
|
6
|
+
import { NgtsLine } from '../line/line';
|
|
7
|
+
import { NgtsLineInput } from '../line/line-input';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
export class NgtsCatmullRomLine extends NgtsLineInput {
|
|
10
|
+
constructor() {
|
|
11
|
+
super(...arguments);
|
|
12
|
+
this.lineRef = injectNgtRef();
|
|
13
|
+
}
|
|
14
|
+
set points(points) {
|
|
15
|
+
this.set({ points });
|
|
16
|
+
}
|
|
17
|
+
set closed(closed) {
|
|
18
|
+
this.set({ closed });
|
|
19
|
+
}
|
|
20
|
+
set curveType(curveType) {
|
|
21
|
+
this.set({ curveType });
|
|
22
|
+
}
|
|
23
|
+
set tension(tension) {
|
|
24
|
+
this.set({ tension });
|
|
25
|
+
}
|
|
26
|
+
set segments(segments) {
|
|
27
|
+
this.set({ segments });
|
|
28
|
+
}
|
|
29
|
+
initialize() {
|
|
30
|
+
super.initialize();
|
|
31
|
+
this.set({ closed: false, curveType: 'centripetal', tension: 0.5, segments: 64 });
|
|
32
|
+
this.connect('curve', combineLatest([
|
|
33
|
+
this.select('points'),
|
|
34
|
+
this.select('closed'),
|
|
35
|
+
this.select('curveType'),
|
|
36
|
+
this.select('tension'),
|
|
37
|
+
]).pipe(map(([points, closed, curveType, tension]) => {
|
|
38
|
+
const mappedPoints = points.map((p) => p instanceof THREE.Vector3 ? p : new THREE.Vector3(...p));
|
|
39
|
+
return new CatmullRomCurve3(mappedPoints, closed, curveType, tension);
|
|
40
|
+
})));
|
|
41
|
+
this.connect('segmentedPoints', combineLatest([this.select('curve'), this.select('segments')]).pipe(map(([curve, segments]) => curve.getPoints(segments))));
|
|
42
|
+
this.connect('interpolatedVertexColors', combineLatest([this.select('vertexColors').pipe(startWithUndefined()), this.select('segments')]).pipe(map(([vertexColors, segments]) => {
|
|
43
|
+
if (!vertexColors || vertexColors.length < 2)
|
|
44
|
+
return undefined;
|
|
45
|
+
if (vertexColors.length === segments + 1)
|
|
46
|
+
return vertexColors;
|
|
47
|
+
const mappedColors = vertexColors.map((color) => color instanceof THREE.Color ? color : new THREE.Color(...color));
|
|
48
|
+
if (this.get('closed'))
|
|
49
|
+
mappedColors.push(mappedColors[0].clone());
|
|
50
|
+
const iColors = [mappedColors[0]];
|
|
51
|
+
const divisions = segments / (mappedColors.length - 1);
|
|
52
|
+
for (let i = 0; i < segments; i++) {
|
|
53
|
+
const alpha = (i % divisions) / divisions;
|
|
54
|
+
const colorIndex = Math.floor(i / divisions);
|
|
55
|
+
iColors.push(mappedColors[colorIndex].clone().lerp(mappedColors[colorIndex + 1], alpha));
|
|
56
|
+
}
|
|
57
|
+
iColors.push(mappedColors[mappedColors.length - 1]);
|
|
58
|
+
})));
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
NgtsCatmullRomLine.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtsCatmullRomLine, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
62
|
+
NgtsCatmullRomLine.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.3", type: NgtsCatmullRomLine, isStandalone: true, selector: "ngts-catmull-rom-line[points]", inputs: { lineRef: "lineRef", points: "points", closed: "closed", curveType: "curveType", tension: "tension", segments: "segments" }, usesInheritance: true, ngImport: i0, template: `
|
|
63
|
+
<ngts-line
|
|
64
|
+
[lineRef]="lineRef"
|
|
65
|
+
[points]="get('segmentedPoints')"
|
|
66
|
+
[color]="get('color')"
|
|
67
|
+
[vertexColors]="get('interpolatedVertexColors')"
|
|
68
|
+
[resolution]="get('resolution')"
|
|
69
|
+
[lineWidth]="get('lineWidth')"
|
|
70
|
+
[alphaToCoverage]="get('alphaToCoverage')"
|
|
71
|
+
[dashed]="get('dashed')"
|
|
72
|
+
[dashScale]="get('dashScale')"
|
|
73
|
+
[dashOffset]="get('dashOffset')"
|
|
74
|
+
[dashSize]="get('dashSize')"
|
|
75
|
+
[gapSize]="get('gapSize')"
|
|
76
|
+
[wireframe]="get('wireframe')"
|
|
77
|
+
[worldUnits]="get('worldUnits')"
|
|
78
|
+
/>
|
|
79
|
+
`, isInline: true, dependencies: [{ kind: "component", type: NgtsLine, selector: "ngts-line[points]", inputs: ["lineRef", "points", "segments"] }] });
|
|
80
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtsCatmullRomLine, decorators: [{
|
|
81
|
+
type: Component,
|
|
82
|
+
args: [{
|
|
83
|
+
selector: 'ngts-catmull-rom-line[points]',
|
|
84
|
+
standalone: true,
|
|
85
|
+
template: `
|
|
86
|
+
<ngts-line
|
|
87
|
+
[lineRef]="lineRef"
|
|
88
|
+
[points]="get('segmentedPoints')"
|
|
89
|
+
[color]="get('color')"
|
|
90
|
+
[vertexColors]="get('interpolatedVertexColors')"
|
|
91
|
+
[resolution]="get('resolution')"
|
|
92
|
+
[lineWidth]="get('lineWidth')"
|
|
93
|
+
[alphaToCoverage]="get('alphaToCoverage')"
|
|
94
|
+
[dashed]="get('dashed')"
|
|
95
|
+
[dashScale]="get('dashScale')"
|
|
96
|
+
[dashOffset]="get('dashOffset')"
|
|
97
|
+
[dashSize]="get('dashSize')"
|
|
98
|
+
[gapSize]="get('gapSize')"
|
|
99
|
+
[wireframe]="get('wireframe')"
|
|
100
|
+
[worldUnits]="get('worldUnits')"
|
|
101
|
+
/>
|
|
102
|
+
`,
|
|
103
|
+
imports: [NgtsLine],
|
|
104
|
+
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
105
|
+
}]
|
|
106
|
+
}], propDecorators: { lineRef: [{
|
|
107
|
+
type: Input
|
|
108
|
+
}], points: [{
|
|
109
|
+
type: Input
|
|
110
|
+
}], closed: [{
|
|
111
|
+
type: Input
|
|
112
|
+
}], curveType: [{
|
|
113
|
+
type: Input
|
|
114
|
+
}], tension: [{
|
|
115
|
+
type: Input
|
|
116
|
+
}], segments: [{
|
|
117
|
+
type: Input
|
|
118
|
+
}] } });
|
|
119
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0bXVsbC1yb20tbGluZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci10aHJlZS1zb2JhL2Fic3RyYWN0aW9ucy9zcmMvbGliL2NhdG11bGwtcm9tLWxpbmUvY2F0bXVsbC1yb20tbGluZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLHNCQUFzQixFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RSxPQUFPLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFDLE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQy9CLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUV6QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7QUEwQm5ELE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxhQUFhO0lBeEJyRDs7UUF5QmEsWUFBTyxHQUFHLFlBQVksRUFBUyxDQUFDO0tBMkU1QztJQXpFRyxJQUFhLE1BQU0sQ0FDZixNQUFtRztRQUVuRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBYSxNQUFNLENBQUMsTUFBZTtRQUMvQixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBYSxTQUFTLENBQUMsU0FBbUQ7UUFDdEUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVELElBQWEsT0FBTyxDQUFDLE9BQWU7UUFD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c0JBQXJCLEtBQUs7Z0JBSU8sT0FBTztzQkFBbkIsS0FBSztnQkFJTyxRQUFRO3NCQUFwQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaW5qZWN0Tmd0UmVmLCBzdGFydFdpdGhVbmRlZmluZWQgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIG1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgQ2F0bXVsbFJvbUN1cnZlMyB9IGZyb20gJ3RocmVlJztcbmltcG9ydCB7IExpbmUyIH0gZnJvbSAndGhyZWUtc3RkbGliJztcbmltcG9ydCB7IE5ndHNMaW5lIH0gZnJvbSAnLi4vbGluZS9saW5lJztcbmltcG9ydCB7IE5ndHNMaW5lSW5wdXQgfSBmcm9tICcuLi9saW5lL2xpbmUtaW5wdXQnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25ndHMtY2F0bXVsbC1yb20tbGluZVtwb2ludHNdJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxuZ3RzLWxpbmVcbiAgICAgICAgICAgIFtsaW5lUmVmXT1cImxpbmVSZWZcIlxuICAgICAgICAgICAgW3BvaW50c109XCJnZXQoJ3NlZ21lbnRlZFBvaW50cycpXCJcbiAgICAgICAgICAgIFtjb2xvcl09XCJnZXQoJ2NvbG9yJylcIlxuICAgICAgICAgICAgW3ZlcnRleENvbG9yc109XCJnZXQoJ2ludGVycG9sYXRlZFZlcnRleENvbG9ycycpXCJcbiAgICAgICAgICAgIFtyZXNvbHV0aW9uXT1cImdldCgncmVzb2x1dGlvbicpXCJcbiAgICAgICAgICAgIFtsaW5lV2lkdGhdPVwiZ2V0KCdsaW5lV2lkdGgnKVwiXG4gICAgICAgICAgICBbYWxwaGFUb0NvdmVyYWdlXT1cImdldCgnYWxwaGFUb0NvdmVyYWdlJylcIlxuICAgICAgICAgICAgW2Rhc2hlZF09XCJnZXQoJ2Rhc2hlZCcpXCJcbiAgICAgICAgICAgIFtkYXNoU2NhbGVdPVwiZ2V0KCdkYXNoU2NhbGUnKVwiXG4gICAgICAgICAgICBbZGFzaE9mZnNldF09XCJnZXQoJ2Rhc2hPZmZzZXQnKVwiXG4gICAgICAgICAgICBbZGFzaFNpemVdPVwiZ2V0KCdkYXNoU2l6ZScpXCJcbiAgICAgICAgICAgIFtnYXBTaXplXT1cImdldCgnZ2FwU2l6ZScpXCJcbiAgICAgICAgICAgIFt3aXJlZnJhbWVdPVwiZ2V0KCd3aXJlZnJhbWUnKVwiXG4gICAgICAgICAgICBbd29ybGRVbml0c109XCJnZXQoJ3dvcmxkVW5pdHMnKVwiXG4gICAgICAgIC8+XG4gICAgYCxcbiAgICBpbXBvcnRzOiBbTmd0c0xpbmVdLFxuICAgIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcbn0pXG5leHBvcnQgY2xhc3MgTmd0c0NhdG11bGxSb21MaW5lIGV4dGVuZHMgTmd0c0xpbmVJbnB1dCB7XG4gICAgQElucHV0KCkgbGluZVJlZiA9IGluamVjdE5ndFJlZjxMaW5lMj4oKTtcblxuICAgIEBJbnB1dCgpIHNldCBwb2ludHMoXG4gICAgICAgIHBvaW50czogQXJyYXk8VEhSRUUuVmVjdG9yMyB8IFRIUkVFLlZlY3RvcjIgfCBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0gfCBbbnVtYmVyLCBudW1iZXJdIHwgbnVtYmVyPlxuICAgICkge1xuICAgICAgICB0aGlzLnNldCh7IHBvaW50cyB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgY2xvc2VkKGNsb3NlZDogYm9vbGVhbikge1xuICAgICAgICB0aGlzLnNldCh7IGNsb3NlZCB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgY3VydmVUeXBlKGN1cnZlVHlwZTogJ2NlbnRyaXBldGFsJyB8ICdjaG9yZGFsJyB8ICdjYXRtdWxscm9tJykge1xuICAgICAgICB0aGlzLnNldCh7IGN1cnZlVHlwZSB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgdGVuc2lvbih0ZW5zaW9uOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyB0ZW5zaW9uIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBzZWdtZW50cyhzZWdtZW50czogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgc2VnbWVudHMgfSk7XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgaW5pdGlhbGl6ZSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIuaW5pdGlhbGl6ZSgpO1xuICAgICAgICB0aGlzLnNldCh7IGNsb3NlZDogZmFsc2UsIGN1cnZlVHlwZTogJ2NlbnRyaXBldGFsJywgdGVuc2lvbjogMC41LCBzZWdtZW50czogNjQgfSk7XG4gICAgICAgIHRoaXMuY29ubmVjdChcbiAgICAgICAgICAgICdjdXJ2ZScsXG4gICAgICAgICAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdCgncG9pbnRzJyksXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3QoJ2Nsb3NlZCcpLFxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0KCdjdXJ2ZVR5cGUnKSxcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdCgndGVuc2lvbicpLFxuICAgICAgICAgICAgXSkucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKFtwb2ludHMsIGNsb3NlZCwgY3VydmVUeXBlLCB0ZW5zaW9uXSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXBwZWRQb2ludHMgPSAocG9pbnRzIGFzIE5ndHNDYXRtdWxsUm9tTGluZVsncG9pbnRzJ10pLm1hcCgocCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHAgaW5zdGFuY2VvZiBUSFJFRS5WZWN0b3IzID8gcCA6IG5ldyBUSFJFRS5WZWN0b3IzKC4uLihwIGFzIFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSkpXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ2F0bXVsbFJvbUN1cnZlMyhtYXBwZWRQb2ludHMsIGNsb3NlZCwgY3VydmVUeXBlLCB0ZW5zaW9uKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuY29ubmVjdChcbiAgICAgICAgICAgICdzZWdtZW50ZWRQb2ludHMnLFxuICAgICAgICAgICAgY29tYmluZUxhdGVzdChbdGhpcy5zZWxlY3QoJ2N1cnZlJyksIHRoaXMuc2VsZWN0KCdzZWdtZW50cycpXSkucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKFtjdXJ2ZSwgc2VnbWVudHNdKSA9PiBjdXJ2ZS5nZXRQb2ludHMoc2VnbWVudHMpKVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuY29ubmVjdChcbiAgICAgICAgICAgICdpbnRlcnBvbGF0ZWRWZXJ0ZXhDb2xvcnMnLFxuICAgICAgICAgICAgY29tYmluZUxhdGVzdChbdGhpcy5zZWxlY3QoJ3ZlcnRleENvbG9ycycpLnBpcGUoc3RhcnRXaXRoVW5kZWZpbmVkKCkpLCB0aGlzLnNlbGVjdCgnc2VnbWVudHMnKV0pLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKChbdmVydGV4Q29sb3JzLCBzZWdtZW50c10pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF2ZXJ0ZXhDb2xvcnMgfHwgdmVydGV4Q29sb3JzLmxlbmd0aCA8IDIpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2ZXJ0ZXhDb2xvcnMubGVuZ3RoID09PSBzZWdtZW50cyArIDEpIHJldHVybiB2ZXJ0ZXhDb2xvcnM7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFwcGVkQ29sb3JzID0gdmVydGV4Q29sb3JzLm1hcCgoY29sb3I6IFRIUkVFLkNvbG9yIHwgW251bWJlciwgbnVtYmVyLCBudW1iZXJdKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IgaW5zdGFuY2VvZiBUSFJFRS5Db2xvciA/IGNvbG9yIDogbmV3IFRIUkVFLkNvbG9yKC4uLmNvbG9yKVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5nZXQoJ2Nsb3NlZCcpKSBtYXBwZWRDb2xvcnMucHVzaChtYXBwZWRDb2xvcnNbMF0uY2xvbmUoKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaUNvbG9yczogVEhSRUUuQ29sb3JbXSA9IFttYXBwZWRDb2xvcnNbMF1dO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkaXZpc2lvbnMgPSBzZWdtZW50cyAvIChtYXBwZWRDb2xvcnMubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VnbWVudHM7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYWxwaGEgPSAoaSAlIGRpdmlzaW9ucykgLyBkaXZpc2lvbnM7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2xvckluZGV4ID0gTWF0aC5mbG9vcihpIC8gZGl2aXNpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlDb2xvcnMucHVzaChtYXBwZWRDb2xvcnNbY29sb3JJbmRleF0uY2xvbmUoKS5sZXJwKG1hcHBlZENvbG9yc1tjb2xvckluZGV4ICsgMV0sIGFscGhhKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaUNvbG9ycy5wdXNoKG1hcHBlZENvbG9yc1ttYXBwZWRDb2xvcnMubGVuZ3RoIC0gMV0pO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxufVxuIl19
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { NgIf } from '@angular/common';
|
|
2
|
+
import { Component, CUSTOM_ELEMENTS_SCHEMA, Input } from '@angular/core';
|
|
3
|
+
import { injectNgtRef } from 'angular-three';
|
|
4
|
+
import * as THREE from 'three';
|
|
5
|
+
import { NgtsLine } from '../line/line';
|
|
6
|
+
import { NgtsLineInput } from '../line/line-input';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
export class NgtsCubicBezierLine extends NgtsLineInput {
|
|
9
|
+
constructor() {
|
|
10
|
+
super(...arguments);
|
|
11
|
+
this.lineRef = injectNgtRef();
|
|
12
|
+
}
|
|
13
|
+
set start(start) {
|
|
14
|
+
this.set({ start });
|
|
15
|
+
}
|
|
16
|
+
set end(end) {
|
|
17
|
+
this.set({ end });
|
|
18
|
+
}
|
|
19
|
+
set midA(midA) {
|
|
20
|
+
this.set({ midA });
|
|
21
|
+
}
|
|
22
|
+
set midB(midB) {
|
|
23
|
+
this.set({ midB });
|
|
24
|
+
}
|
|
25
|
+
set segments(segments) {
|
|
26
|
+
this.set({ segments });
|
|
27
|
+
}
|
|
28
|
+
initialize() {
|
|
29
|
+
super.initialize();
|
|
30
|
+
this.set({ segments: 10 });
|
|
31
|
+
this.connect('points', this.select(['start', 'end', 'midA', 'midB', 'segments'], ({ start, end, midA, midB, segments }) => {
|
|
32
|
+
const startV = start instanceof THREE.Vector3 ? start : new THREE.Vector3(...start);
|
|
33
|
+
const endV = end instanceof THREE.Vector3 ? end : new THREE.Vector3(...end);
|
|
34
|
+
const midAV = midA instanceof THREE.Vector3 ? midA : new THREE.Vector3(...midA);
|
|
35
|
+
const midBV = midB instanceof THREE.Vector3 ? midB : new THREE.Vector3(...midB);
|
|
36
|
+
return new THREE.CubicBezierCurve3(startV, midAV, midBV, endV).getPoints(segments);
|
|
37
|
+
}));
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
NgtsCubicBezierLine.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtsCubicBezierLine, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
41
|
+
NgtsCubicBezierLine.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.3", type: NgtsCubicBezierLine, isStandalone: true, selector: "ngts-cubic-bezier-line[start][end][midA][midB]", inputs: { lineRef: "lineRef", start: "start", end: "end", midA: "midA", midB: "midB", segments: "segments" }, usesInheritance: true, ngImport: i0, template: `
|
|
42
|
+
<ngts-line
|
|
43
|
+
[lineRef]="lineRef"
|
|
44
|
+
[points]="get('points')"
|
|
45
|
+
[color]="get('color')"
|
|
46
|
+
[vertexColors]="get('vertexColors')"
|
|
47
|
+
[resolution]="get('resolution')"
|
|
48
|
+
[lineWidth]="get('lineWidth')"
|
|
49
|
+
[alphaToCoverage]="get('alphaToCoverage')"
|
|
50
|
+
[dashed]="get('dashed')"
|
|
51
|
+
[dashScale]="get('dashScale')"
|
|
52
|
+
[dashSize]="get('dashSize')"
|
|
53
|
+
[dashOffset]="get('dashOffset')"
|
|
54
|
+
[gapSize]="get('gapSize')"
|
|
55
|
+
[wireframe]="get('wireframe')"
|
|
56
|
+
[worldUnits]="get('worldUnits')"
|
|
57
|
+
/>
|
|
58
|
+
`, isInline: true, dependencies: [{ kind: "component", type: NgtsLine, selector: "ngts-line[points]", inputs: ["lineRef", "points", "segments"] }] });
|
|
59
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtsCubicBezierLine, decorators: [{
|
|
60
|
+
type: Component,
|
|
61
|
+
args: [{
|
|
62
|
+
selector: 'ngts-cubic-bezier-line[start][end][midA][midB]',
|
|
63
|
+
standalone: true,
|
|
64
|
+
template: `
|
|
65
|
+
<ngts-line
|
|
66
|
+
[lineRef]="lineRef"
|
|
67
|
+
[points]="get('points')"
|
|
68
|
+
[color]="get('color')"
|
|
69
|
+
[vertexColors]="get('vertexColors')"
|
|
70
|
+
[resolution]="get('resolution')"
|
|
71
|
+
[lineWidth]="get('lineWidth')"
|
|
72
|
+
[alphaToCoverage]="get('alphaToCoverage')"
|
|
73
|
+
[dashed]="get('dashed')"
|
|
74
|
+
[dashScale]="get('dashScale')"
|
|
75
|
+
[dashSize]="get('dashSize')"
|
|
76
|
+
[dashOffset]="get('dashOffset')"
|
|
77
|
+
[gapSize]="get('gapSize')"
|
|
78
|
+
[wireframe]="get('wireframe')"
|
|
79
|
+
[worldUnits]="get('worldUnits')"
|
|
80
|
+
/>
|
|
81
|
+
`,
|
|
82
|
+
imports: [NgtsLine, NgIf],
|
|
83
|
+
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
84
|
+
}]
|
|
85
|
+
}], propDecorators: { lineRef: [{
|
|
86
|
+
type: Input
|
|
87
|
+
}], start: [{
|
|
88
|
+
type: Input
|
|
89
|
+
}], end: [{
|
|
90
|
+
type: Input
|
|
91
|
+
}], midA: [{
|
|
92
|
+
type: Input
|
|
93
|
+
}], midB: [{
|
|
94
|
+
type: Input
|
|
95
|
+
}], segments: [{
|
|
96
|
+
type: Input
|
|
97
|
+
}] } });
|
|
98
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3ViaWMtYmV6aWVyLWxpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUtc29iYS9hYnN0cmFjdGlvbnMvc3JjL2xpYi9jdWJpYy1iZXppZXItbGluZS9jdWJpYy1iZXppZXItbGluZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkMsT0FBTyxFQUFFLFNBQVMsRUFBRSxzQkFBc0IsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3QyxPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUUvQixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7QUEwQm5ELE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxhQUFhO0lBeEJ0RDs7UUF5QmEsWUFBTyxHQUFHLFlBQVksRUFBUyxDQUFDO0tBb0M1QztJQWxDRyxJQUFhLEtBQUssQ0FBQyxLQUErQztRQUM5RCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBRUQsSUFBYSxHQUFHLENBQUMsR0FBNkM7UUFDMUQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDdEIsQ0FBQztJQUVELElBQWEsSUFBSSxDQUFDLElBQThDO1FBQzVELElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxJQUFhLElBQUksQ0FBQyxJQUE4QztRQUM1RCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBRUQsSUFBYSxRQUFRLENBQUMsUUFBZ0I7UUFDbEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVRLFVBQVU7UUFDZixLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxPQUFPLENBQ1IsUUFBUSxFQUNSLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFO1lBQy9GLE1BQU0sTUFBTSxHQUFHLEtBQUssWUFBWSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDO1lBQ3BGLE1BQU0sSUFBSSxHQUFHLEdBQUcsWUFBWSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1lBQzVFLE1BQU0sS0FBSyxHQUFHLElBQUksWUFBWSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO1lBQ2hGLE1BQU0sS0FBSyxHQUFHLElBQUksWUFBWSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO1lBQ2hGLE9BQU8sSUFBSSxLQUFLLENBQUMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3ZGLENBQUMsQ0FBQyxDQUNMLENBQUM7SUFDTixDQUFDOztnSEFwQ1EsbUJBQW1CO29HQUFuQixtQkFBbUIsK09BckJsQjs7Ozs7Ozs7Ozs7Ozs7Ozs7S0FpQlQsNERBQ1MsUUFBUTsyRkFHVCxtQkFBbUI7a0JBeEIvQixTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxnREFBZ0Q7b0JBQzFELFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7O0tBaUJUO29CQUNELE9BQU8sRUFBRSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUM7b0JBQ3pCLE9BQU8sRUFBRSxDQUFDLHNCQUFzQixDQUFDO2lCQUNwQzs4QkFFWSxPQUFPO3NCQUFmLEtBQUs7Z0JBRU8sS0FBSztzQkFBakIsS0FBSztnQkFJTyxHQUFHO3NCQUFmLEtBQUs7Z0JBSU8sSUFBSTtzQkFBaEIsS0FBSztnQkFJTyxJQUFJO3NCQUFoQixLQUFLO2dCQUlPLFFBQVE7c0JBQXBCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGluamVjdE5ndFJlZiB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgTGluZTIgfSBmcm9tICd0aHJlZS1zdGRsaWInO1xuaW1wb3J0IHsgTmd0c0xpbmUgfSBmcm9tICcuLi9saW5lL2xpbmUnO1xuaW1wb3J0IHsgTmd0c0xpbmVJbnB1dCB9IGZyb20gJy4uL2xpbmUvbGluZS1pbnB1dCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmd0cy1jdWJpYy1iZXppZXItbGluZVtzdGFydF1bZW5kXVttaWRBXVttaWRCXScsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8bmd0cy1saW5lXG4gICAgICAgICAgICBbbGluZVJlZl09XCJsaW5lUmVmXCJcbiAgICAgICAgICAgIFtwb2ludHNdPVwiZ2V0KCdwb2ludHMnKVwiXG4gICAgICAgICAgICBbY29sb3JdPVwiZ2V0KCdjb2xvcicpXCJcbiAgICAgICAgICAgIFt2ZXJ0ZXhDb2xvcnNdPVwiZ2V0KCd2ZXJ0ZXhDb2xvcnMnKVwiXG4gICAgICAgICAgICBbcmVzb2x1dGlvbl09XCJnZXQoJ3Jlc29sdXRpb24nKVwiXG4gICAgICAgICAgICBbbGluZVdpZHRoXT1cImdldCgnbGluZVdpZHRoJylcIlxuICAgICAgICAgICAgW2FscGhhVG9Db3ZlcmFnZV09XCJnZXQoJ2FscGhhVG9Db3ZlcmFnZScpXCJcbiAgICAgICAgICAgIFtkYXNoZWRdPVwiZ2V0KCdkYXNoZWQnKVwiXG4gICAgICAgICAgICBbZGFzaFNjYWxlXT1cImdldCgnZGFzaFNjYWxlJylcIlxuICAgICAgICAgICAgW2Rhc2hTaXplXT1cImdldCgnZGFzaFNpemUnKVwiXG4gICAgICAgICAgICBbZGFzaE9mZnNldF09XCJnZXQoJ2Rhc2hPZmZzZXQnKVwiXG4gICAgICAgICAgICBbZ2FwU2l6ZV09XCJnZXQoJ2dhcFNpemUnKVwiXG4gICAgICAgICAgICBbd2lyZWZyYW1lXT1cImdldCgnd2lyZWZyYW1lJylcIlxuICAgICAgICAgICAgW3dvcmxkVW5pdHNdPVwiZ2V0KCd3b3JsZFVuaXRzJylcIlxuICAgICAgICAvPlxuICAgIGAsXG4gICAgaW1wb3J0czogW05ndHNMaW5lLCBOZ0lmXSxcbiAgICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXG59KVxuZXhwb3J0IGNsYXNzIE5ndHNDdWJpY0JlemllckxpbmUgZXh0ZW5kcyBOZ3RzTGluZUlucHV0IHtcbiAgICBASW5wdXQoKSBsaW5lUmVmID0gaW5qZWN0Tmd0UmVmPExpbmUyPigpO1xuXG4gICAgQElucHV0KCkgc2V0IHN0YXJ0KHN0YXJ0OiBUSFJFRS5WZWN0b3IzIHwgW251bWJlciwgbnVtYmVyLCBudW1iZXJdKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgc3RhcnQgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IGVuZChlbmQ6IFRIUkVFLlZlY3RvcjMgfCBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0pIHtcbiAgICAgICAgdGhpcy5zZXQoeyBlbmQgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IG1pZEEobWlkQTogVEhSRUUuVmVjdG9yMyB8IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSkge1xuICAgICAgICB0aGlzLnNldCh7IG1pZEEgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IG1pZEIobWlkQjogVEhSRUUuVmVjdG9yMyB8IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSkge1xuICAgICAgICB0aGlzLnNldCh7IG1pZEIgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IHNlZ21lbnRzKHNlZ21lbnRzOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBzZWdtZW50cyB9KTtcbiAgICB9XG5cbiAgICBvdmVycmlkZSBpbml0aWFsaXplKCk6IHZvaWQge1xuICAgICAgICBzdXBlci5pbml0aWFsaXplKCk7XG4gICAgICAgIHRoaXMuc2V0KHsgc2VnbWVudHM6IDEwIH0pO1xuICAgICAgICB0aGlzLmNvbm5lY3QoXG4gICAgICAgICAgICAncG9pbnRzJyxcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0KFsnc3RhcnQnLCAnZW5kJywgJ21pZEEnLCAnbWlkQicsICdzZWdtZW50cyddLCAoeyBzdGFydCwgZW5kLCBtaWRBLCBtaWRCLCBzZWdtZW50cyB9KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhcnRWID0gc3RhcnQgaW5zdGFuY2VvZiBUSFJFRS5WZWN0b3IzID8gc3RhcnQgOiBuZXcgVEhSRUUuVmVjdG9yMyguLi5zdGFydCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZW5kViA9IGVuZCBpbnN0YW5jZW9mIFRIUkVFLlZlY3RvcjMgPyBlbmQgOiBuZXcgVEhSRUUuVmVjdG9yMyguLi5lbmQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1pZEFWID0gbWlkQSBpbnN0YW5jZW9mIFRIUkVFLlZlY3RvcjMgPyBtaWRBIDogbmV3IFRIUkVFLlZlY3RvcjMoLi4ubWlkQSk7XG4gICAgICAgICAgICAgICAgY29uc3QgbWlkQlYgPSBtaWRCIGluc3RhbmNlb2YgVEhSRUUuVmVjdG9yMyA/IG1pZEIgOiBuZXcgVEhSRUUuVmVjdG9yMyguLi5taWRCKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRIUkVFLkN1YmljQmV6aWVyQ3VydmUzKHN0YXJ0ViwgbWlkQVYsIG1pZEJWLCBlbmRWKS5nZXRQb2ludHMoc2VnbWVudHMpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { Directive, Input } from '@angular/core';
|
|
2
|
+
import { NgtRxStore } from 'angular-three';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class NgtsLineInput extends NgtRxStore {
|
|
5
|
+
set vertexColors(vertexColors) {
|
|
6
|
+
this.set({ vertexColors });
|
|
7
|
+
}
|
|
8
|
+
set lineWidth(lineWidth) {
|
|
9
|
+
this.set({ lineWidth });
|
|
10
|
+
}
|
|
11
|
+
set alphaToCoverage(alphaToCoverage) {
|
|
12
|
+
this.set({ alphaToCoverage });
|
|
13
|
+
}
|
|
14
|
+
set color(color) {
|
|
15
|
+
this.set({ color });
|
|
16
|
+
}
|
|
17
|
+
set dashed(dashed) {
|
|
18
|
+
this.set({ dashed });
|
|
19
|
+
}
|
|
20
|
+
set dashScale(dashScale) {
|
|
21
|
+
this.set({ dashScale });
|
|
22
|
+
}
|
|
23
|
+
set dashSize(dashSize) {
|
|
24
|
+
this.set({ dashSize });
|
|
25
|
+
}
|
|
26
|
+
set dashOffset(dashOffset) {
|
|
27
|
+
this.set({ dashOffset });
|
|
28
|
+
}
|
|
29
|
+
set gapSize(gapSize) {
|
|
30
|
+
this.set({ gapSize });
|
|
31
|
+
}
|
|
32
|
+
set resolution(resolution) {
|
|
33
|
+
this.set({ resolution });
|
|
34
|
+
}
|
|
35
|
+
set wireframe(wireframe) {
|
|
36
|
+
this.set({ wireframe });
|
|
37
|
+
}
|
|
38
|
+
set worldUnits(worldUnits) {
|
|
39
|
+
this.set({ worldUnits });
|
|
40
|
+
}
|
|
41
|
+
initialize() {
|
|
42
|
+
super.initialize();
|
|
43
|
+
this.set({ color: 'black' });
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
NgtsLineInput.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtsLineInput, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
47
|
+
NgtsLineInput.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.1.3", type: NgtsLineInput, inputs: { vertexColors: "vertexColors", lineWidth: "lineWidth", alphaToCoverage: "alphaToCoverage", color: "color", dashed: "dashed", dashScale: "dashScale", dashSize: "dashSize", dashOffset: "dashOffset", gapSize: "gapSize", resolution: "resolution", wireframe: "wireframe", worldUnits: "worldUnits" }, usesInheritance: true, ngImport: i0 });
|
|
48
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtsLineInput, decorators: [{
|
|
49
|
+
type: Directive
|
|
50
|
+
}], propDecorators: { vertexColors: [{
|
|
51
|
+
type: Input
|
|
52
|
+
}], lineWidth: [{
|
|
53
|
+
type: Input
|
|
54
|
+
}], alphaToCoverage: [{
|
|
55
|
+
type: Input
|
|
56
|
+
}], color: [{
|
|
57
|
+
type: Input
|
|
58
|
+
}], dashed: [{
|
|
59
|
+
type: Input
|
|
60
|
+
}], dashScale: [{
|
|
61
|
+
type: Input
|
|
62
|
+
}], dashSize: [{
|
|
63
|
+
type: Input
|
|
64
|
+
}], dashOffset: [{
|
|
65
|
+
type: Input
|
|
66
|
+
}], gapSize: [{
|
|
67
|
+
type: Input
|
|
68
|
+
}], resolution: [{
|
|
69
|
+
type: Input
|
|
70
|
+
}], wireframe: [{
|
|
71
|
+
type: Input
|
|
72
|
+
}], worldUnits: [{
|
|
73
|
+
type: Input
|
|
74
|
+
}] } });
|
|
75
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluZS1pbnB1dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci10aHJlZS1zb2JhL2Fic3RyYWN0aW9ucy9zcmMvbGliL2xpbmUvbGluZS1pbnB1dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUczQyxNQUFNLE9BQWdCLGFBQWMsU0FBUSxVQUFVO0lBQ2xELElBQWEsWUFBWSxDQUFDLFlBQTJEO1FBQ2pGLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRCxJQUFhLFNBQVMsQ0FBQyxTQUFpQjtRQUNwQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFBYSxlQUFlLENBQUMsZUFBd0I7UUFDakQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELElBQWEsS0FBSyxDQUFDLEtBQWdDO1FBQy9DLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQUFhLE1BQU0sQ0FBQyxNQUFlO1FBQy9CLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxJQUFhLFNBQVMsQ0FBQyxTQUFpQjtRQUNwQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFBYSxRQUFRLENBQUMsUUFBZ0I7UUFDbEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVELElBQWEsVUFBVSxDQUFDLFVBQWtCO1FBQ3RDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxJQUFhLE9BQU8sQ0FBQyxPQUFlO1FBQ2hDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFhLFVBQVUsQ0FBQyxVQUF5QjtRQUM3QyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFBYSxTQUFTLENBQUMsU0FBa0I7UUFDckMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVELElBQWEsVUFBVSxDQUFDLFVBQW1CO1FBQ3ZDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFUSxVQUFVO1FBQ2YsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNqQyxDQUFDOzswR0FwRGlCLGFBQWE7OEZBQWIsYUFBYTsyRkFBYixhQUFhO2tCQURsQyxTQUFTOzhCQUVPLFlBQVk7c0JBQXhCLEtBQUs7Z0JBSU8sU0FBUztzQkFBckIsS0FBSztnQkFJTyxlQUFlO3NCQUEzQixLQUFLO2dCQUlPLEtBQUs7c0JBQWpCLEtBQUs7Z0JBSU8sTUFBTTtzQkFBbEIsS0FBSztnQkFJTyxTQUFTO3NCQUFyQixLQUFLO2dCQUlPLFFBQVE7c0JBQXBCLEtBQUs7Z0JBSU8sVUFBVTtzQkFBdEIsS0FBSztnQkFJTyxPQUFPO3NCQUFuQixLQUFLO2dCQUlPLFVBQVU7c0JBQXRCLEtBQUs7Z0JBSU8sU0FBUztzQkFBckIsS0FBSztnQkFJTyxVQUFVO3NCQUF0QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmd0UnhTdG9yZSB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBOZ3RzTGluZUlucHV0IGV4dGVuZHMgTmd0UnhTdG9yZSB7XG4gICAgQElucHV0KCkgc2V0IHZlcnRleENvbG9ycyh2ZXJ0ZXhDb2xvcnM6IEFycmF5PFRIUkVFLkNvbG9yIHwgW251bWJlciwgbnVtYmVyLCBudW1iZXJdPikge1xuICAgICAgICB0aGlzLnNldCh7IHZlcnRleENvbG9ycyB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgbGluZVdpZHRoKGxpbmVXaWR0aDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgbGluZVdpZHRoIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBhbHBoYVRvQ292ZXJhZ2UoYWxwaGFUb0NvdmVyYWdlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgYWxwaGFUb0NvdmVyYWdlIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBjb2xvcihjb2xvcjogVEhSRUUuQ29sb3JSZXByZXNlbnRhdGlvbikge1xuICAgICAgICB0aGlzLnNldCh7IGNvbG9yIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBkYXNoZWQoZGFzaGVkOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgZGFzaGVkIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBkYXNoU2NhbGUoZGFzaFNjYWxlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBkYXNoU2NhbGUgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IGRhc2hTaXplKGRhc2hTaXplOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBkYXNoU2l6ZSB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgZGFzaE9mZnNldChkYXNoT2Zmc2V0OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBkYXNoT2Zmc2V0IH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBnYXBTaXplKGdhcFNpemU6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IGdhcFNpemUgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IHJlc29sdXRpb24ocmVzb2x1dGlvbjogVEhSRUUuVmVjdG9yMikge1xuICAgICAgICB0aGlzLnNldCh7IHJlc29sdXRpb24gfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IHdpcmVmcmFtZSh3aXJlZnJhbWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5zZXQoeyB3aXJlZnJhbWUgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IHdvcmxkVW5pdHMod29ybGRVbml0czogYm9vbGVhbikge1xuICAgICAgICB0aGlzLnNldCh7IHdvcmxkVW5pdHMgfSk7XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgaW5pdGlhbGl6ZSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIuaW5pdGlhbGl6ZSgpO1xuICAgICAgICB0aGlzLnNldCh7IGNvbG9yOiAnYmxhY2snIH0pO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import { Component, CUSTOM_ELEMENTS_SCHEMA, inject, Input } from '@angular/core';
|
|
2
|
+
import { injectNgtRef, NgtArgs, NgtStore, startWithUndefined } from 'angular-three';
|
|
3
|
+
import { combineLatest, map } from 'rxjs';
|
|
4
|
+
import * as THREE from 'three';
|
|
5
|
+
import { Line2, LineGeometry, LineMaterial, LineSegments2, LineSegmentsGeometry } from 'three-stdlib';
|
|
6
|
+
import { NgtsLineInput } from './line-input';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
export class NgtsLine extends NgtsLineInput {
|
|
9
|
+
constructor() {
|
|
10
|
+
super(...arguments);
|
|
11
|
+
this.Boolean = Boolean;
|
|
12
|
+
this.lineMaterial = new LineMaterial();
|
|
13
|
+
this.store = inject(NgtStore);
|
|
14
|
+
this.lineRef = injectNgtRef();
|
|
15
|
+
}
|
|
16
|
+
set points(points) {
|
|
17
|
+
this.set({ points });
|
|
18
|
+
}
|
|
19
|
+
set segments(segments) {
|
|
20
|
+
this.set({ segments });
|
|
21
|
+
}
|
|
22
|
+
// TODO: Figure out if this is the case for everything else.
|
|
23
|
+
// We'd want to run computeLineDistances on the Line2 on "points" changed
|
|
24
|
+
// Consequently,when "points" changes, LineGeometry also changes and that causes
|
|
25
|
+
// the Renderer to replace the LineGeometry on the Line2, which is what's happening.
|
|
26
|
+
// But the effect that runs line.computeLineDistances() runs a little BEFORE the new lineGeometry
|
|
27
|
+
// has been attached. So it doesn't work with the props changed from the Material
|
|
28
|
+
//
|
|
29
|
+
// Alternatively, we can also run the effect on line#children changes.
|
|
30
|
+
onAfterGeometryAttached({ parent }) {
|
|
31
|
+
// parent.computeLineDistances();
|
|
32
|
+
}
|
|
33
|
+
initialize() {
|
|
34
|
+
super.initialize();
|
|
35
|
+
this.set({ segments: false });
|
|
36
|
+
this.connect('lineGeometry', combineLatest([
|
|
37
|
+
this.select('points'),
|
|
38
|
+
this.select('segments'),
|
|
39
|
+
this.select('vertexColors').pipe(startWithUndefined()),
|
|
40
|
+
]).pipe(map(([points, segments, vertexColors]) => {
|
|
41
|
+
const geometry = segments ? new LineSegmentsGeometry() : new LineGeometry();
|
|
42
|
+
const pValues = points.map((p) => {
|
|
43
|
+
const isArray = Array.isArray(p);
|
|
44
|
+
return p instanceof THREE.Vector3
|
|
45
|
+
? [p.x, p.y, p.z]
|
|
46
|
+
: p instanceof THREE.Vector2
|
|
47
|
+
? [p.x, p.y, 0]
|
|
48
|
+
: isArray && p.length === 3
|
|
49
|
+
? [p[0], p[1], p[2]]
|
|
50
|
+
: isArray && p.length === 2
|
|
51
|
+
? [p[0], p[1], 0]
|
|
52
|
+
: p;
|
|
53
|
+
});
|
|
54
|
+
geometry.setPositions(pValues.flat());
|
|
55
|
+
if (vertexColors) {
|
|
56
|
+
const cValues = vertexColors.map((c) => c instanceof THREE.Color ? c.toArray() : c);
|
|
57
|
+
geometry.setColors(cValues.flat());
|
|
58
|
+
}
|
|
59
|
+
return geometry;
|
|
60
|
+
})));
|
|
61
|
+
}
|
|
62
|
+
ngOnInit() {
|
|
63
|
+
this.connect('materialResolution', combineLatest([this.store.select('size'), this.select('resolution').pipe(startWithUndefined())]).pipe(map(([size, resolution]) => resolution ?? [size.width, size.height])));
|
|
64
|
+
if (!this.lineRef.nativeElement) {
|
|
65
|
+
this.lineRef.nativeElement = this.get('segments') ? new LineSegments2() : new Line2();
|
|
66
|
+
}
|
|
67
|
+
this.computeLineDistances();
|
|
68
|
+
this.disposeGeometry();
|
|
69
|
+
}
|
|
70
|
+
computeLineDistances() {
|
|
71
|
+
this.hold(combineLatest([this.lineRef.$, this.lineRef.children$('nonObjects'), this.select('points')]), ([line]) => {
|
|
72
|
+
line.computeLineDistances();
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
disposeGeometry() {
|
|
76
|
+
this.effect(this.select('lineGeometry'), (lineGeometry) => {
|
|
77
|
+
return () => lineGeometry.dispose();
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
NgtsLine.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtsLine, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
82
|
+
NgtsLine.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.3", type: NgtsLine, isStandalone: true, selector: "ngts-line[points]", inputs: { lineRef: "lineRef", points: "points", segments: "segments" }, usesInheritance: true, ngImport: i0, template: `
|
|
83
|
+
<ngt-primitive *args="[lineRef.nativeElement]" [ref]="lineRef" ngtCompound>
|
|
84
|
+
<ngt-primitive
|
|
85
|
+
*args="[get('lineGeometry')]"
|
|
86
|
+
attach="geometry"
|
|
87
|
+
(afterAttach)="onAfterGeometryAttached($any($event))"
|
|
88
|
+
/>
|
|
89
|
+
<ngt-primitive
|
|
90
|
+
*args="[lineMaterial]"
|
|
91
|
+
attach="material"
|
|
92
|
+
[color]="get('color')"
|
|
93
|
+
[vertexColors]="Boolean(get('vertexColors'))"
|
|
94
|
+
[resolution]="get('materialResolution')"
|
|
95
|
+
[linewidth]="get('lineWidth')"
|
|
96
|
+
[alphaToCoverage]="get('alphaToCoverage')"
|
|
97
|
+
[dashed]="get('dashed')"
|
|
98
|
+
[dashScale]="get('dashScale') ?? lineMaterial.dashScale"
|
|
99
|
+
[dashSize]="get('dashSize') ?? lineMaterial.dashSize"
|
|
100
|
+
[dashOffset]="get('dashOffset') ?? lineMaterial.dashOffset"
|
|
101
|
+
[gapSize]="get('gapSize') ?? lineMaterial.gapSize"
|
|
102
|
+
[wireframe]="get('wireframe') ?? lineMaterial.wireframe"
|
|
103
|
+
[worldUnits]="get('worldUnits')"
|
|
104
|
+
/>
|
|
105
|
+
</ngt-primitive>
|
|
106
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "[args]", inputs: ["args"] }] });
|
|
107
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: NgtsLine, decorators: [{
|
|
108
|
+
type: Component,
|
|
109
|
+
args: [{
|
|
110
|
+
selector: 'ngts-line[points]',
|
|
111
|
+
standalone: true,
|
|
112
|
+
template: `
|
|
113
|
+
<ngt-primitive *args="[lineRef.nativeElement]" [ref]="lineRef" ngtCompound>
|
|
114
|
+
<ngt-primitive
|
|
115
|
+
*args="[get('lineGeometry')]"
|
|
116
|
+
attach="geometry"
|
|
117
|
+
(afterAttach)="onAfterGeometryAttached($any($event))"
|
|
118
|
+
/>
|
|
119
|
+
<ngt-primitive
|
|
120
|
+
*args="[lineMaterial]"
|
|
121
|
+
attach="material"
|
|
122
|
+
[color]="get('color')"
|
|
123
|
+
[vertexColors]="Boolean(get('vertexColors'))"
|
|
124
|
+
[resolution]="get('materialResolution')"
|
|
125
|
+
[linewidth]="get('lineWidth')"
|
|
126
|
+
[alphaToCoverage]="get('alphaToCoverage')"
|
|
127
|
+
[dashed]="get('dashed')"
|
|
128
|
+
[dashScale]="get('dashScale') ?? lineMaterial.dashScale"
|
|
129
|
+
[dashSize]="get('dashSize') ?? lineMaterial.dashSize"
|
|
130
|
+
[dashOffset]="get('dashOffset') ?? lineMaterial.dashOffset"
|
|
131
|
+
[gapSize]="get('gapSize') ?? lineMaterial.gapSize"
|
|
132
|
+
[wireframe]="get('wireframe') ?? lineMaterial.wireframe"
|
|
133
|
+
[worldUnits]="get('worldUnits')"
|
|
134
|
+
/>
|
|
135
|
+
</ngt-primitive>
|
|
136
|
+
`,
|
|
137
|
+
imports: [NgtArgs],
|
|
138
|
+
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
139
|
+
}]
|
|
140
|
+
}], propDecorators: { lineRef: [{
|
|
141
|
+
type: Input
|
|
142
|
+
}], points: [{
|
|
143
|
+
type: Input
|
|
144
|
+
}], segments: [{
|
|
145
|
+
type: Input
|
|
146
|
+
}] } });
|
|
147
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci10aHJlZS1zb2JhL2Fic3RyYWN0aW9ucy9zcmMvbGliL2xpbmUvbGluZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDekYsT0FBTyxFQUFFLFlBQVksRUFBa0IsT0FBTyxFQUFFLFFBQVEsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwRyxPQUFPLEVBQUUsYUFBYSxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMvQixPQUFPLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3RHLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7O0FBaUM3QyxNQUFNLE9BQU8sUUFBUyxTQUFRLGFBQWE7SUEvQjNDOztRQWdDYSxZQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ2xCLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUUxQixVQUFLLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRWpDLFlBQU8sR0FBRyxZQUFZLEVBQXlCLENBQUM7S0E4RjVEO0lBNUZHLElBQWEsTUFBTSxDQUNmLE1BQW1HO1FBRW5HLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxJQUFhLFFBQVEsQ0FBQyxRQUFpQjtRQUNuQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQsNERBQTREO0lBQzVELHlF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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztLQXdCVCw0REFDUyxPQUFPOzJGQUdSLFFBQVE7a0JBL0JwQixTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxtQkFBbUI7b0JBQzdCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztLQXdCVDtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUM7b0JBQ2xCLE9BQU8sRUFBRSxDQUFDLHNCQUFzQixDQUFDO2lCQUNwQzs4QkFPWSxPQUFPO3NCQUFmLEtBQUs7Z0JBRU8sTUFBTTtzQkFBbEIsS0FBSztnQkFNTyxRQUFRO3NCQUFwQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBpbmplY3QsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGluamVjdE5ndFJlZiwgTmd0QWZ0ZXJBdHRhY2gsIE5ndEFyZ3MsIE5ndFN0b3JlLCBzdGFydFdpdGhVbmRlZmluZWQgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIG1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgTGluZTIsIExpbmVHZW9tZXRyeSwgTGluZU1hdGVyaWFsLCBMaW5lU2VnbWVudHMyLCBMaW5lU2VnbWVudHNHZW9tZXRyeSB9IGZyb20gJ3RocmVlLXN0ZGxpYic7XG5pbXBvcnQgeyBOZ3RzTGluZUlucHV0IH0gZnJvbSAnLi9saW5lLWlucHV0JztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduZ3RzLWxpbmVbcG9pbnRzXScsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8bmd0LXByaW1pdGl2ZSAqYXJncz1cIltsaW5lUmVmLm5hdGl2ZUVsZW1lbnRdXCIgW3JlZl09XCJsaW5lUmVmXCIgbmd0Q29tcG91bmQ+XG4gICAgICAgICAgICA8bmd0LXByaW1pdGl2ZVxuICAgICAgICAgICAgICAgICphcmdzPVwiW2dldCgnbGluZUdlb21ldHJ5JyldXCJcbiAgICAgICAgICAgICAgICBhdHRhY2g9XCJnZW9tZXRyeVwiXG4gICAgICAgICAgICAgICAgKGFmdGVyQXR0YWNoKT1cIm9uQWZ0ZXJHZW9tZXRyeUF0dGFjaGVkKCRhbnkoJGV2ZW50KSlcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxuZ3QtcHJpbWl0aXZlXG4gICAgICAgICAgICAgICAgKmFyZ3M9XCJbbGluZU1hdGVyaWFsXVwiXG4gICAgICAgICAgICAgICAgYXR0YWNoPVwibWF0ZXJpYWxcIlxuICAgICAgICAgICAgICAgIFtjb2xvcl09XCJnZXQoJ2NvbG9yJylcIlxuICAgICAgICAgICAgICAgIFt2ZXJ0ZXhDb2xvcnNdPVwiQm9vbGVhbihnZXQoJ3ZlcnRleENvbG9ycycpKVwiXG4gICAgICAgICAgICAgICAgW3Jlc29sdXRpb25dPVwiZ2V0KCdtYXRlcmlhbFJlc29sdXRpb24nKVwiXG4gICAgICAgICAgICAgICAgW2xpbmV3aWR0aF09XCJnZXQoJ2xpbmVXaWR0aCcpXCJcbiAgICAgICAgICAgICAgICBbYWxwaGFUb0NvdmVyYWdlXT1cImdldCgnYWxwaGFUb0NvdmVyYWdlJylcIlxuICAgICAgICAgICAgICAgIFtkYXNoZWRdPVwiZ2V0KCdkYXNoZWQnKVwiXG4gICAgICAgICAgICAgICAgW2Rhc2hTY2FsZV09XCJnZXQoJ2Rhc2hTY2FsZScpID8/IGxpbmVNYXRlcmlhbC5kYXNoU2NhbGVcIlxuICAgICAgICAgICAgICAgIFtkYXNoU2l6ZV09XCJnZXQoJ2Rhc2hTaXplJykgPz8gbGluZU1hdGVyaWFsLmRhc2hTaXplXCJcbiAgICAgICAgICAgICAgICBbZGFzaE9mZnNldF09XCJnZXQoJ2Rhc2hPZmZzZXQnKSA/PyBsaW5lTWF0ZXJpYWwuZGFzaE9mZnNldFwiXG4gICAgICAgICAgICAgICAgW2dhcFNpemVdPVwiZ2V0KCdnYXBTaXplJykgPz8gbGluZU1hdGVyaWFsLmdhcFNpemVcIlxuICAgICAgICAgICAgICAgIFt3aXJlZnJhbWVdPVwiZ2V0KCd3aXJlZnJhbWUnKSA/PyBsaW5lTWF0ZXJpYWwud2lyZWZyYW1lXCJcbiAgICAgICAgICAgICAgICBbd29ybGRVbml0c109XCJnZXQoJ3dvcmxkVW5pdHMnKVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICA8L25ndC1wcmltaXRpdmU+XG4gICAgYCxcbiAgICBpbXBvcnRzOiBbTmd0QXJnc10sXG4gICAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzTGluZSBleHRlbmRzIE5ndHNMaW5lSW5wdXQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIHJlYWRvbmx5IEJvb2xlYW4gPSBCb29sZWFuO1xuICAgIHJlYWRvbmx5IGxpbmVNYXRlcmlhbCA9IG5ldyBMaW5lTWF0ZXJpYWwoKTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3RvcmUgPSBpbmplY3QoTmd0U3RvcmUpO1xuXG4gICAgQElucHV0KCkgbGluZVJlZiA9IGluamVjdE5ndFJlZjxMaW5lU2VnbWVudHMyIHwgTGluZTI+KCk7XG5cbiAgICBASW5wdXQoKSBzZXQgcG9pbnRzKFxuICAgICAgICBwb2ludHM6IEFycmF5PFRIUkVFLlZlY3RvcjMgfCBUSFJFRS5WZWN0b3IyIHwgW251bWJlciwgbnVtYmVyLCBudW1iZXJdIHwgW251bWJlciwgbnVtYmVyXSB8IG51bWJlcj5cbiAgICApIHtcbiAgICAgICAgdGhpcy5zZXQoeyBwb2ludHMgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IHNlZ21lbnRzKHNlZ21lbnRzOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgc2VnbWVudHMgfSk7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogRmlndXJlIG91dCBpZiB0aGlzIGlzIHRoZSBjYXNlIGZvciBldmVyeXRoaW5nIGVsc2UuXG4gICAgLy8gV2UnZCB3YW50IHRvIHJ1biBjb21wdXRlTGluZURpc3RhbmNlcyBvbiB0aGUgTGluZTIgb24gXCJwb2ludHNcIiBjaGFuZ2VkXG4gICAgLy8gQ29uc2VxdWVudGx5LHdoZW4gXCJwb2ludHNcIiBjaGFuZ2VzLCBMaW5lR2VvbWV0cnkgYWxzbyBjaGFuZ2VzIGFuZCB0aGF0IGNhdXNlc1xuICAgIC8vIHRoZSBSZW5kZXJlciB0byByZXBsYWNlIHRoZSBMaW5lR2VvbWV0cnkgb24gdGhlIExpbmUyLCB3aGljaCBpcyB3aGF0J3MgaGFwcGVuaW5nLlxuICAgIC8vIEJ1dCB0aGUgZWZmZWN0IHRoYXQgcnVucyBsaW5lLmNvbXB1dGVMaW5lRGlzdGFuY2VzKCkgcnVucyBhIGxpdHRsZSBCRUZPUkUgdGhlIG5ldyBsaW5lR2VvbWV0cnlcbiAgICAvLyBoYXMgYmVlbiBhdHRhY2hlZC4gU28gaXQgZG9lc24ndCB3b3JrIHdpdGggdGhlIHByb3BzIGNoYW5nZWQgZnJvbSB0aGUgTWF0ZXJpYWxcbiAgICAvL1xuICAgIC8vIEFsdGVybmF0aXZlbHksIHdlIGNhbiBhbHNvIHJ1biB0aGUgZWZmZWN0IG9uIGxpbmUjY2hpbGRyZW4gY2hhbmdlcy5cbiAgICBvbkFmdGVyR2VvbWV0cnlBdHRhY2hlZCh7IHBhcmVudCB9OiBOZ3RBZnRlckF0dGFjaDxMaW5lMiB8IExpbmVTZWdtZW50czIsIExpbmVHZW9tZXRyeT4pIHtcbiAgICAgICAgLy8gcGFyZW50LmNvbXB1dGVMaW5lRGlzdGFuY2VzKCk7XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgaW5pdGlhbGl6ZSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIuaW5pdGlhbGl6ZSgpO1xuICAgICAgICB0aGlzLnNldCh7IHNlZ21lbnRzOiBmYWxzZSB9KTtcbiAgICAgICAgdGhpcy5jb25uZWN0KFxuICAgICAgICAgICAgJ2xpbmVHZW9tZXRyeScsXG4gICAgICAgICAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdCgncG9pbnRzJyksXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3QoJ3NlZ21lbnRzJyksXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3QoJ3ZlcnRleENvbG9ycycpLnBpcGUoc3RhcnRXaXRoVW5kZWZpbmVkKCkpLFxuICAgICAgICAgICAgXSkucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKFtwb2ludHMsIHNlZ21lbnRzLCB2ZXJ0ZXhDb2xvcnNdKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGdlb21ldHJ5ID0gc2VnbWVudHMgPyBuZXcgTGluZVNlZ21lbnRzR2VvbWV0cnkoKSA6IG5ldyBMaW5lR2VvbWV0cnkoKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcFZhbHVlcyA9IChwb2ludHMgYXMgTmd0c0xpbmVbJ3BvaW50cyddKS5tYXAoKHApID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzQXJyYXkgPSBBcnJheS5pc0FycmF5KHApO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHAgaW5zdGFuY2VvZiBUSFJFRS5WZWN0b3IzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBbcC54LCBwLnksIHAuel1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHAgaW5zdGFuY2VvZiBUSFJFRS5WZWN0b3IyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBbcC54LCBwLnksIDBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBpc0FycmF5ICYmIHAubGVuZ3RoID09PSAzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBbcFswXSwgcFsxXSwgcFsyXV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGlzQXJyYXkgJiYgcC5sZW5ndGggPT09IDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFtwWzBdLCBwWzFdLCAwXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogcDtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnkuc2V0UG9zaXRpb25zKHBWYWx1ZXMuZmxhdCgpKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodmVydGV4Q29sb3JzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjVmFsdWVzID0gKHZlcnRleENvbG9ycyBhcyBOZ3RzTGluZUlucHV0Wyd2ZXJ0ZXhDb2xvcnMnXSkubWFwKChjKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgaW5zdGFuY2VvZiBUSFJFRS5Db2xvciA/IGMudG9BcnJheSgpIDogY1xuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5LnNldENvbG9ycyhjVmFsdWVzLmZsYXQoKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2VvbWV0cnk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5jb25uZWN0KFxuICAgICAgICAgICAgJ21hdGVyaWFsUmVzb2x1dGlvbicsXG4gICAgICAgICAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLnN0b3JlLnNlbGVjdCgnc2l6ZScpLCB0aGlzLnNlbGVjdCgncmVzb2x1dGlvbicpLnBpcGUoc3RhcnRXaXRoVW5kZWZpbmVkKCkpXSkucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKFtzaXplLCByZXNvbHV0aW9uXSkgPT4gcmVzb2x1dGlvbiA/PyBbc2l6ZS53aWR0aCwgc2l6ZS5oZWlnaHRdKVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuXG4gICAgICAgIGlmICghdGhpcy5saW5lUmVmLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMubGluZVJlZi5uYXRpdmVFbGVtZW50ID0gdGhpcy5nZXQoJ3NlZ21lbnRzJykgPyBuZXcgTGluZVNlZ21lbnRzMigpIDogbmV3IExpbmUyKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbXB1dGVMaW5lRGlzdGFuY2VzKCk7XG4gICAgICAgIHRoaXMuZGlzcG9zZUdlb21ldHJ5KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb21wdXRlTGluZURpc3RhbmNlcygpIHtcbiAgICAgICAgdGhpcy5ob2xkKFxuICAgICAgICAgICAgY29tYmluZUxhdGVzdChbdGhpcy5saW5lUmVmLiQsIHRoaXMubGluZVJlZi5jaGlsZHJlbiQoJ25vbk9iamVjdHMnKSwgdGhpcy5zZWxlY3QoJ3BvaW50cycpXSksXG4gICAgICAgICAgICAoW2xpbmVdKSA9PiB7XG4gICAgICAgICAgICAgICAgbGluZS5jb21wdXRlTGluZURpc3RhbmNlcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgZGlzcG9zZUdlb21ldHJ5KCkge1xuICAgICAgICB0aGlzLmVmZmVjdCh0aGlzLnNlbGVjdCgnbGluZUdlb21ldHJ5JyksIChsaW5lR2VvbWV0cnk6IExpbmVHZW9tZXRyeSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuICgpID0+IGxpbmVHZW9tZXRyeS5kaXNwb3NlKCk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
|