in src/component/tag/handlers/CreateVertexHandler.ts [37:110]
protected _enableCreate(): void {
this._container.mouseService.deferPixels(this._name, 4);
const transformChanged$: Observable<void> = this._navigator.stateService.currentTransform$.pipe(
map((): void => { /*noop*/ }),
publishReplay(1),
refCount());
this._deleteSubscription = transformChanged$.pipe(
skip(1))
.subscribe(this._tagCreator.delete$);
const basicClick$: Observable<number[]> = this._mouseEventToBasic$(this._container.mouseService.proximateClick$).pipe(share());
this._createSubscription = transformChanged$.pipe(
switchMap(
(): Observable<number[]> => {
return basicClick$.pipe(
filter(this._validateBasic),
take(1));
}))
.subscribe(this._create$);
this._setVertexSubscription = this._tagCreator.tag$.pipe(
switchMap(
(tag: CreateTag<Geometry>): Observable<[CreateTag<Geometry>, MouseEvent, RenderCamera, Transform]> => {
return !!tag ?
observableCombineLatest(
observableOf(tag),
observableMerge(
this._container.mouseService.mouseMove$,
this._container.mouseService.domMouseMove$),
this._container.renderService.renderCamera$,
this._navigator.stateService.currentTransform$) :
observableEmpty();
}))
.subscribe(
([tag, event, camera, transform]: [CreateTag<Geometry>, MouseEvent, RenderCamera, Transform]): void => {
const basicPoint: number[] = this._mouseEventToBasic(
event,
this._container.container,
camera,
transform);
this._setVertex2d(tag, basicPoint, transform);
});
this._addPointSubscription = this._tagCreator.tag$.pipe(
switchMap(
(tag: CreateTag<Geometry>): Observable<[CreateTag<Geometry>, number[]]> => {
return !!tag ?
observableCombineLatest(
observableOf(tag),
basicClick$) :
observableEmpty();
}))
.subscribe(
([tag, basicPoint]: [CreateTag<Geometry>, number[]]): void => {
this._addPoint(tag, basicPoint);
});
this._geometryCreateSubscription = this._tagCreator.tag$.pipe(
switchMap(
(tag: CreateTag<Geometry>): Observable<Geometry> => {
return !!tag ?
tag.created$.pipe(
map(
(t: CreateTag<Geometry>): Geometry => {
return t.geometry;
})) :
observableEmpty();
}))
.subscribe(this._geometryCreated$);
}