mirror of
https://github.com/mapillary/mapillary-js.git
synced 2026-01-25 14:07:28 +00:00
refactor: rename interfaces for clarity
This commit is contained in:
parent
dd2fc56539
commit
297d8ebffd
@ -4,8 +4,10 @@ export default {
|
||||
"<rootDir>/src/**/*",
|
||||
],
|
||||
coveragePathIgnorePatterns: [
|
||||
"<rootDir>/src/Mapillary.js",
|
||||
"<rootDir>/src/api/ents/",
|
||||
"<rootDir>/src/export/",
|
||||
"<rootDir>/src/component/shaders/",
|
||||
"<rootDir>/src/Mapillary.js",
|
||||
"interfaces"
|
||||
],
|
||||
coverageProvider: "v8",
|
||||
|
||||
@ -2,7 +2,7 @@ import { ComponentService } from "../src/component/ComponentService";
|
||||
import { MarkerSet } from "../src/component/marker/MarkerSet";
|
||||
import { Graph } from "../src/graph/Graph";
|
||||
import { TraversingState } from "../src/state/states/TraversingState";
|
||||
import { IInterpolator } from "../src/utils/interfaces/IInterpolator";
|
||||
import { Interpolator } from "../src/state/interfaces/IInterpolator";
|
||||
|
||||
type Item = {
|
||||
lat: number;
|
||||
@ -39,7 +39,7 @@ class SpatialIndexMock<T extends Item> {
|
||||
|
||||
class CoverMock { public activate(): void { /* noop */ } }
|
||||
|
||||
class InterpolatorMock implements IInterpolator {
|
||||
class InterpolatorMock implements Interpolator {
|
||||
public solve(x: number): number { return x; }
|
||||
}
|
||||
|
||||
|
||||
@ -2,9 +2,9 @@ import { empty as observableEmpty, Observable } from "rxjs";
|
||||
|
||||
import { catchError } from "rxjs/operators";
|
||||
import { APIWrapper } from "../../src/api/APIWrapper";
|
||||
import { ICoreNode } from "../../src/api/interfaces/ICoreNode";
|
||||
import { IFillNode } from "../../src/api/interfaces/IFillNode";
|
||||
import { ISequence } from "../../src/api/interfaces/ISequence";
|
||||
import { CoreImageEnt } from "../../src/api/ents/CoreImageEnt";
|
||||
import { SpatialImageEnt } from "../../src/api/ents/SpatialImageEnt";
|
||||
import { SequenceEnt } from "../../src/api/ents/SequenceEnt";
|
||||
import { DataProvider } from "../helper/ProviderHelper";
|
||||
|
||||
describe("APIWrapperctor", () => {
|
||||
@ -32,7 +32,7 @@ describe("APIWrapperimageByKeyFill$", () => {
|
||||
|
||||
api.imageByKeyFill$([key])
|
||||
.subscribe(
|
||||
(result: { [key: string]: IFillNode }): void => {
|
||||
(result: { [key: string]: SpatialImageEnt }): void => {
|
||||
expect(result).toBeDefined();
|
||||
|
||||
expect(providerSpy.calls.count()).toBe(1);
|
||||
@ -91,7 +91,7 @@ describe("APIWrapperimageByKeyFull$", () => {
|
||||
|
||||
api.imageByKeyFull$([key])
|
||||
.subscribe(
|
||||
(result: { [key: string]: IFillNode }): void => {
|
||||
(result: { [key: string]: SpatialImageEnt }): void => {
|
||||
expect(result).toBeDefined();
|
||||
|
||||
expect(providerSpy.calls.count()).toBe(1);
|
||||
@ -150,7 +150,7 @@ describe("APIWrapperimagesByH$", () => {
|
||||
|
||||
api.imagesByH$(h)
|
||||
.subscribe(
|
||||
(result: { [key: string]: { [index: string]: ICoreNode } }): void => {
|
||||
(result: { [key: string]: { [index: string]: CoreImageEnt } }): void => {
|
||||
expect(result).toBeDefined();
|
||||
|
||||
expect(providerSpy.calls.count()).toBe(1);
|
||||
@ -209,7 +209,7 @@ describe("APIWrappersequenceByKey$", () => {
|
||||
|
||||
api.sequenceByKey$([skey])
|
||||
.subscribe(
|
||||
(result: { [key: string]: ISequence }): void => {
|
||||
(result: { [key: string]: SequenceEnt }): void => {
|
||||
expect(result).toBeDefined();
|
||||
|
||||
expect(providerSpy.calls.count()).toBe(1);
|
||||
|
||||
@ -1,12 +1,12 @@
|
||||
import * as pako from "pako";
|
||||
import * as falcor from "falcor";
|
||||
import { FalcorDataProvider } from "../../src/api/FalcorDataProvider";
|
||||
import { IClusterReconstruction } from "../../src/api/interfaces/IClusterReconstruction";
|
||||
import { ICoreNode } from "../../src/api/interfaces/ICoreNode";
|
||||
import { IFillNode } from "../../src/api/interfaces/IFillNode";
|
||||
import { ISequence } from "../../src/api/interfaces/ISequence";
|
||||
import { ReconstructionEnt } from "../../src/api/ents/ReconstructionEnt";
|
||||
import { CoreImageEnt } from "../../src/api/ents/CoreImageEnt";
|
||||
import { SpatialImageEnt } from "../../src/api/ents/SpatialImageEnt";
|
||||
import { ModelCreator } from "../../src/api/ModelCreator";
|
||||
import { MapillaryError } from "../../src/error/MapillaryError";
|
||||
import { SequenceEnt } from "../../src/api/ents/SequenceEnt";
|
||||
|
||||
describe("FalcorDataProvider.ctor", () => {
|
||||
it("should create a data provider", () => {
|
||||
@ -41,7 +41,7 @@ describe("FalcorDataProvider.getFillImages", () => {
|
||||
|
||||
provider.getFillImages([key])
|
||||
.then(
|
||||
(result: { [key: string]: IFillNode }): void => {
|
||||
(result: { [key: string]: SpatialImageEnt }): void => {
|
||||
expect(result).toBeDefined();
|
||||
|
||||
expect(modelSpy.calls.count()).toBe(1);
|
||||
@ -196,7 +196,7 @@ describe("FalcorDataProvider.getFullImages", () => {
|
||||
|
||||
provider.getFullImages([key])
|
||||
.then(
|
||||
(result: { [key: string]: IFillNode }): void => {
|
||||
(result: { [key: string]: SpatialImageEnt }): void => {
|
||||
expect(result).toBeDefined();
|
||||
|
||||
expect(spy.calls.count()).toBe(1);
|
||||
@ -268,7 +268,7 @@ describe("FalcorDataProvider.getFullImages", () => {
|
||||
|
||||
provider.getFullImages([key])
|
||||
.then(
|
||||
(result: { [key: string]: IFillNode }): void => { return; },
|
||||
(result: { [key: string]: SpatialImageEnt }): void => { return; },
|
||||
(error: Error): void => {
|
||||
expect(invalidateSpy.calls.count()).toBe(1);
|
||||
expect(invalidateSpy.calls.first().args.length).toBe(1);
|
||||
@ -308,7 +308,7 @@ describe("FalcorDataProvider.getCoreImages", () => {
|
||||
|
||||
provider.getCoreImages(h)
|
||||
.then(
|
||||
(result: { [key: string]: { [index: string]: ICoreNode } }): void => {
|
||||
(result: { [key: string]: { [index: string]: CoreImageEnt } }): void => {
|
||||
expect(result).toBeDefined();
|
||||
|
||||
expect(spy.calls.count()).toBe(1);
|
||||
@ -348,7 +348,7 @@ describe("FalcorDataProvider.getCoreImages", () => {
|
||||
|
||||
provider.getCoreImages(h)
|
||||
.then(
|
||||
(result: { [key: string]: { [index: string]: ICoreNode } }): void => { return; },
|
||||
(result: { [key: string]: { [index: string]: CoreImageEnt } }): void => { return; },
|
||||
(error: Error): void => {
|
||||
expect(invalidateSpy.calls.count()).toBe(1);
|
||||
expect(invalidateSpy.calls.first().args.length).toBe(1);
|
||||
@ -386,7 +386,7 @@ describe("FalcorDataProvider.getCoreImages", () => {
|
||||
|
||||
provider.getCoreImages(h)
|
||||
.then(
|
||||
(result: { [key: string]: { [index: string]: ICoreNode } }): void => {
|
||||
(result: { [key: string]: { [index: string]: CoreImageEnt } }): void => {
|
||||
expect(result).toBeDefined();
|
||||
expect(result[h]).toBeDefined();
|
||||
|
||||
@ -423,7 +423,7 @@ describe("FalcorDataProvider.getSequences", () => {
|
||||
|
||||
provider.getSequences([skey])
|
||||
.then(
|
||||
(result: { [key: string]: ISequence }): void => {
|
||||
(result: { [key: string]: SequenceEnt }): void => {
|
||||
expect(result).toBeDefined();
|
||||
|
||||
expect(spy.calls.count()).toBe(1);
|
||||
@ -463,7 +463,7 @@ describe("FalcorDataProvider.getSequences", () => {
|
||||
|
||||
provider.getSequences([skey])
|
||||
.then(
|
||||
(result: { [key: string]: ISequence }): void => { return; },
|
||||
(result: { [key: string]: SequenceEnt }): void => { return; },
|
||||
(error: Error): void => {
|
||||
expect(invalidateSpy.calls.count()).toBe(1);
|
||||
expect(invalidateSpy.calls.first().args.length).toBe(1);
|
||||
@ -504,7 +504,7 @@ describe("FalcorDataProvider.getSequences", () => {
|
||||
|
||||
provider.getSequences([skey])
|
||||
.then(
|
||||
(result: { [key: string]: ISequence }): void => {
|
||||
(result: { [key: string]: SequenceEnt }): void => {
|
||||
expect(result).toBeDefined();
|
||||
expect(result[skey]).toBeDefined();
|
||||
expect(result[skey].key).toBe(skey);
|
||||
@ -542,7 +542,7 @@ describe("FalcorDataProvider.getSequences", () => {
|
||||
|
||||
provider.getSequences([skey])
|
||||
.then(
|
||||
(result: { [key: string]: ISequence }): void => {
|
||||
(result: { [key: string]: SequenceEnt }): void => {
|
||||
expect(result).toBeDefined();
|
||||
expect(result[skey]).toBeDefined();
|
||||
expect(result[skey].key).toBe(skey);
|
||||
@ -579,7 +579,7 @@ describe("FalcorDataProvider.getSequences", () => {
|
||||
|
||||
provider.getSequences([skey])
|
||||
.then(
|
||||
(result: { [key: string]: ISequence }): void => {
|
||||
(result: { [key: string]: SequenceEnt }): void => {
|
||||
expect(result).toBeDefined();
|
||||
expect(result[skey]).toBeDefined();
|
||||
expect(result[skey].key).toBe(skey);
|
||||
@ -763,11 +763,11 @@ describe("FalcorDataProvider.getClusterReconstruction", () => {
|
||||
|
||||
provider.getClusterReconstruction("url")
|
||||
.then(
|
||||
(r: IClusterReconstruction): void => {
|
||||
(r: ReconstructionEnt): void => {
|
||||
expect(r.points).toEqual({});
|
||||
expect(r.reference_lla.altitude).toBe(1);
|
||||
expect(r.reference_lla.latitude).toBe(2);
|
||||
expect(r.reference_lla.longitude).toBe(3);
|
||||
expect(r.reference.alt).toBe(1);
|
||||
expect(r.reference.lat).toBe(2);
|
||||
expect(r.reference.lon).toBe(3);
|
||||
|
||||
done();
|
||||
});
|
||||
|
||||
@ -1,12 +1,12 @@
|
||||
import { FalcorDataProviderUrls } from "../../src/api/FalcorDataProvider";
|
||||
import { IFalcorDataProviderOptions } from "../../src/api/interfaces/IFalcorDataProviderOptions";
|
||||
import { FalcorDataProviderOptions } from "../../src/api/interfaces/FalcorDataProviderOptions";
|
||||
|
||||
describe("DataProviderUrls.ctor", () => {
|
||||
it("should set all option properties", () => {
|
||||
const options: IFalcorDataProviderOptions = {
|
||||
const options: FalcorDataProviderOptions = {
|
||||
apiHost: "test-api",
|
||||
clientToken: "ct",
|
||||
clusterReconstructionHost: "test-cluster",
|
||||
reconstructionHost: "test-cluster",
|
||||
imageHost: "test-image",
|
||||
imageTileHost: "test-image-tile",
|
||||
meshHost: "test-mesh",
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
import { S2 } from "s2-geometry";
|
||||
import { ICellCorners } from "../../src/api/interfaces/ICellCorners";
|
||||
import { ILatLon } from "../../src/api/interfaces/ILatLon";
|
||||
import { CellCorners } from "../../src/api/interfaces/CellCorners";
|
||||
import { LatLonEnt } from "../../src/api/ents/LatLonEnt";
|
||||
import { S2GeometryProvider } from "../../src/api/S2GeometryProvider";
|
||||
import { MapillaryError } from "../../src/error/MapillaryError";
|
||||
import { GeoCoords } from "../../src/geo/GeoCoords";
|
||||
@ -217,7 +217,7 @@ describe("S2GeometryProvider.getCorners", () => {
|
||||
it("should be correctly placed relative to each other", () => {
|
||||
const geometry: S2GeometryProvider = new S2GeometryProvider();
|
||||
|
||||
const latLons: ILatLon[] = [
|
||||
const latLons: LatLonEnt[] = [
|
||||
{ lat: 0, lon: 0 },
|
||||
{ lat: 45, lon: 0 },
|
||||
{ lat: 0, lon: 45 },
|
||||
@ -232,7 +232,7 @@ describe("S2GeometryProvider.getCorners", () => {
|
||||
|
||||
for (let latLon of latLons) {
|
||||
const cellId: string = geometry.latLonToCellId(latLon);
|
||||
const corners: ICellCorners = geometry.getCorners(cellId);
|
||||
const corners: CellCorners = geometry.getCorners(cellId);
|
||||
|
||||
expect(corners.se.lat).toBeLessThan(corners.ne.lat);
|
||||
expect(corners.se.lat).toBeLessThan(corners.nw.lat);
|
||||
|
||||
@ -1,16 +1,16 @@
|
||||
import { skip } from "rxjs/operators";
|
||||
import { Component } from "../../src/component/Component";
|
||||
import { IComponentConfiguration } from "../../src/component/interfaces/IComponentConfiguration";
|
||||
import { ComponentConfiguration } from "../../src/component/interfaces/ComponentConfiguration";
|
||||
|
||||
interface ITestConfiguration extends IComponentConfiguration {
|
||||
interface TestConfiguration extends ComponentConfiguration {
|
||||
test?: string;
|
||||
}
|
||||
|
||||
class TestComponent extends Component<ITestConfiguration> {
|
||||
class TestComponent extends Component<TestConfiguration> {
|
||||
protected _activate(): void { /*noop*/ }
|
||||
protected _deactivate(): void { /*noop*/ }
|
||||
|
||||
protected _getDefaultConfiguration(): ITestConfiguration {
|
||||
protected _getDefaultConfiguration(): TestConfiguration {
|
||||
return {};
|
||||
}
|
||||
}
|
||||
@ -29,7 +29,7 @@ describe("Component.configuration$", () => {
|
||||
|
||||
component.configuration$
|
||||
.subscribe(
|
||||
(configuration: IComponentConfiguration): void => {
|
||||
(configuration: ComponentConfiguration): void => {
|
||||
expect(Object.keys(configuration).length).toBe(0);
|
||||
});
|
||||
});
|
||||
@ -40,7 +40,7 @@ describe("Component.configuration$", () => {
|
||||
component.configuration$.pipe(
|
||||
skip(1))
|
||||
.subscribe(
|
||||
(configuration: ITestConfiguration): void => {
|
||||
(configuration: TestConfiguration): void => {
|
||||
expect(Object.keys(configuration).length).toBe(1);
|
||||
expect(configuration.test).toBe("test");
|
||||
done();
|
||||
@ -55,7 +55,7 @@ describe("Component.configuration$", () => {
|
||||
component.configuration$.pipe(
|
||||
skip(2))
|
||||
.subscribe(
|
||||
(configuration: ITestConfiguration): void => {
|
||||
(configuration: TestConfiguration): void => {
|
||||
expect(Object.keys(configuration).length).toBe(1);
|
||||
expect(configuration.test).toBe("testchanged");
|
||||
done();
|
||||
|
||||
@ -6,15 +6,15 @@ import { NodeHelper } from "../../helper/NodeHelper";
|
||||
import { Navigator } from "../../../src/viewer/Navigator";
|
||||
import { Node } from "../../../src/graph/Node";
|
||||
import { DirectionDOMRenderer } from "../../../src/component/direction/DirectionDOMRenderer";
|
||||
import { IDirectionConfiguration } from "../../../src/component/interfaces/IDirectionConfiguration";
|
||||
import { DirectionConfiguration } from "../../../src/component/interfaces/DirectionConfiguration";
|
||||
import { RenderCamera } from "../../../src/render/RenderCamera";
|
||||
import { IFrame } from "../../../src/state/interfaces/IFrame";
|
||||
import { AnimationFrame } from "../../../src/state/interfaces/AnimationFrame";
|
||||
import { FrameHelper } from "../../helper/FrameHelper";
|
||||
import { RenderMode } from "../../../src/render/RenderMode";
|
||||
|
||||
describe("DirectionDOMRenderer.ctor", () => {
|
||||
it("should be defined", () => {
|
||||
let configuration: IDirectionConfiguration = {
|
||||
let configuration: DirectionConfiguration = {
|
||||
distinguishSequence: false,
|
||||
maxWidth: 200,
|
||||
minWidth: 100,
|
||||
@ -34,7 +34,7 @@ describe("DirectionDOMRenderer.needsRender", () => {
|
||||
});
|
||||
|
||||
it("should not need render when constructed", () => {
|
||||
let configuration: IDirectionConfiguration = {
|
||||
let configuration: DirectionConfiguration = {
|
||||
distinguishSequence: false,
|
||||
maxWidth: 200,
|
||||
minWidth: 100,
|
||||
@ -46,7 +46,7 @@ describe("DirectionDOMRenderer.needsRender", () => {
|
||||
});
|
||||
|
||||
it("should need render when node is set", () => {
|
||||
let configuration: IDirectionConfiguration = {
|
||||
let configuration: DirectionConfiguration = {
|
||||
distinguishSequence: false,
|
||||
maxWidth: 200,
|
||||
minWidth: 100,
|
||||
@ -63,7 +63,7 @@ describe("DirectionDOMRenderer.needsRender", () => {
|
||||
});
|
||||
|
||||
it("should not need render after rendering", () => {
|
||||
let configuration: IDirectionConfiguration = {
|
||||
let configuration: DirectionConfiguration = {
|
||||
distinguishSequence: false,
|
||||
maxWidth: 200,
|
||||
minWidth: 100,
|
||||
@ -88,7 +88,7 @@ describe("DirectionDOMRenderer.needsRender", () => {
|
||||
});
|
||||
|
||||
it("should not need render when setting render camera without node set", () => {
|
||||
let configuration: IDirectionConfiguration = {
|
||||
let configuration: DirectionConfiguration = {
|
||||
distinguishSequence: false,
|
||||
maxWidth: 200,
|
||||
minWidth: 100,
|
||||
@ -105,7 +105,7 @@ describe("DirectionDOMRenderer.needsRender", () => {
|
||||
});
|
||||
|
||||
it("should not need render when setting configuration without node set", () => {
|
||||
let configuration: IDirectionConfiguration = {
|
||||
let configuration: DirectionConfiguration = {
|
||||
distinguishSequence: false,
|
||||
maxWidth: 200,
|
||||
minWidth: 100,
|
||||
@ -120,7 +120,7 @@ describe("DirectionDOMRenderer.needsRender", () => {
|
||||
});
|
||||
|
||||
it("should not need render when resizing without node set", () => {
|
||||
let configuration: IDirectionConfiguration = {
|
||||
let configuration: DirectionConfiguration = {
|
||||
distinguishSequence: false,
|
||||
maxWidth: 200,
|
||||
minWidth: 100,
|
||||
@ -134,7 +134,7 @@ describe("DirectionDOMRenderer.needsRender", () => {
|
||||
});
|
||||
|
||||
it("should need render when setting changed render camera if node is set", () => {
|
||||
let configuration: IDirectionConfiguration = {
|
||||
let configuration: DirectionConfiguration = {
|
||||
distinguishSequence: false,
|
||||
maxWidth: 200,
|
||||
minWidth: 100,
|
||||
@ -158,7 +158,7 @@ describe("DirectionDOMRenderer.needsRender", () => {
|
||||
expect(renderer.needsRender).toBe(false);
|
||||
|
||||
let renderCamera: RenderCamera = new RenderCamera(1, 1, RenderMode.Fill);
|
||||
const frame: IFrame = new FrameHelper().createFrame();
|
||||
const frame: AnimationFrame = new FrameHelper().createFrame();
|
||||
frame.state.camera.up.fromArray([0, 0, 1]);
|
||||
frame.state.camera.lookat.fromArray([1, 1, 0]);
|
||||
renderCamera.setFrame(frame);
|
||||
@ -168,7 +168,7 @@ describe("DirectionDOMRenderer.needsRender", () => {
|
||||
});
|
||||
|
||||
it("should need render when setting changed configuration if node is set", () => {
|
||||
let configuration: IDirectionConfiguration = {
|
||||
let configuration: DirectionConfiguration = {
|
||||
distinguishSequence: false,
|
||||
maxWidth: 200,
|
||||
minWidth: 100,
|
||||
@ -198,7 +198,7 @@ describe("DirectionDOMRenderer.needsRender", () => {
|
||||
});
|
||||
|
||||
it("should need render when resizing if node is set", () => {
|
||||
let configuration: IDirectionConfiguration = {
|
||||
let configuration: DirectionConfiguration = {
|
||||
distinguishSequence: false,
|
||||
maxWidth: 200,
|
||||
minWidth: 100,
|
||||
|
||||
@ -9,24 +9,24 @@ import { NodeHelper } from "../../helper/NodeHelper";
|
||||
import { Navigator } from "../../../src/viewer/Navigator";
|
||||
import { Node } from "../../../src/graph/Node";
|
||||
import { Component } from "../../../src/component/Component";
|
||||
import { IComponentConfiguration } from "../../../src/component/interfaces/IComponentConfiguration";
|
||||
import { ComponentConfiguration } from "../../../src/component/interfaces/ComponentConfiguration";
|
||||
import { KeyPlayHandler } from "../../../src/component/keyboard/KeyPlayHandler";
|
||||
import { IEdgeStatus } from "../../../src/graph/interfaces/IEdgeStatus";
|
||||
import { NavigationEdgeStatus } from "../../../src/graph/interfaces/NavigationEdgeStatus";
|
||||
import { State } from "../../../src/state/State";
|
||||
import { Container } from "../../../src/viewer/Container";
|
||||
import { EdgeDirection } from "../../../src/graph/edge/EdgeDirection";
|
||||
import { NavigationDirection } from "../../../src/graph/edge/NavigationDirection";
|
||||
|
||||
interface ITestConfiguration extends IComponentConfiguration {
|
||||
interface TestConfiguration extends ComponentConfiguration {
|
||||
test: boolean;
|
||||
}
|
||||
|
||||
class TestComponent extends Component<ITestConfiguration> {
|
||||
class TestComponent extends Component<TestConfiguration> {
|
||||
constructor(name: string, container: Container, navigator: Navigator) {
|
||||
super(name, container, navigator);
|
||||
}
|
||||
protected _activate(): void { /* noop */ }
|
||||
protected _deactivate(): void { /* noop */ }
|
||||
protected _getDefaultConfiguration(): ITestConfiguration { return { test: false }; }
|
||||
protected _getDefaultConfiguration(): TestConfiguration { return { test: false }; }
|
||||
}
|
||||
|
||||
describe("KeyPlayHandler.ctor", () => {
|
||||
@ -92,12 +92,12 @@ describe("KeyPlayHandler.enable", () => {
|
||||
|
||||
it("should not prevent default if modifier key is pressed", () => {
|
||||
(<Subject<boolean>>navigatorMock.playService.playing$).next(true);
|
||||
(<Subject<EdgeDirection>>navigatorMock.playService.direction$).next(EdgeDirection.Next);
|
||||
(<Subject<NavigationDirection>>navigatorMock.playService.direction$).next(NavigationDirection.Next);
|
||||
(<Subject<number>>navigatorMock.playService.speed$).next(0.5);
|
||||
(<Subject<State>>navigatorMock.stateService.state$).next(State.Traversing);
|
||||
|
||||
const node: Node = nodeHelper.createNode();
|
||||
const sequenceEdgesSubject: Subject<IEdgeStatus> = new Subject<IEdgeStatus>();
|
||||
const sequenceEdgesSubject: Subject<NavigationEdgeStatus> = new Subject<NavigationEdgeStatus>();
|
||||
new MockCreator().mockProperty(node, "sequenceEdges$", sequenceEdgesSubject);
|
||||
(<Subject<Node>>navigatorMock.stateService.currentNode$).next(node);
|
||||
sequenceEdgesSubject.next({ cached: false, edges: [] });
|
||||
@ -130,12 +130,12 @@ describe("KeyPlayHandler.enable", () => {
|
||||
|
||||
it("should change speed if `>` or `<` is pressed", () => {
|
||||
(<Subject<boolean>>navigatorMock.playService.playing$).next(true);
|
||||
(<Subject<EdgeDirection>>navigatorMock.playService.direction$).next(EdgeDirection.Next);
|
||||
(<Subject<NavigationDirection>>navigatorMock.playService.direction$).next(NavigationDirection.Next);
|
||||
(<Subject<number>>navigatorMock.playService.speed$).next(0.5);
|
||||
(<Subject<State>>navigatorMock.stateService.state$).next(State.Traversing);
|
||||
|
||||
const node: Node = nodeHelper.createNode();
|
||||
const sequenceEdgesSubject: Subject<IEdgeStatus> = new Subject<IEdgeStatus>();
|
||||
const sequenceEdgesSubject: Subject<NavigationEdgeStatus> = new Subject<NavigationEdgeStatus>();
|
||||
new MockCreator().mockProperty(node, "sequenceEdges$", sequenceEdgesSubject);
|
||||
(<Subject<Node>>navigatorMock.stateService.currentNode$).next(node);
|
||||
sequenceEdgesSubject.next({ cached: false, edges: [] });
|
||||
@ -162,12 +162,12 @@ describe("KeyPlayHandler.enable", () => {
|
||||
|
||||
it("should change direction when not playing", () => {
|
||||
(<Subject<boolean>>navigatorMock.playService.playing$).next(true);
|
||||
(<Subject<EdgeDirection>>navigatorMock.playService.direction$).next(EdgeDirection.Next);
|
||||
(<Subject<NavigationDirection>>navigatorMock.playService.direction$).next(NavigationDirection.Next);
|
||||
(<Subject<number>>navigatorMock.playService.speed$).next(0.5);
|
||||
(<Subject<State>>navigatorMock.stateService.state$).next(State.Traversing);
|
||||
|
||||
const node: Node = nodeHelper.createNode();
|
||||
const sequenceEdgesSubject: Subject<IEdgeStatus> = new Subject<IEdgeStatus>();
|
||||
const sequenceEdgesSubject: Subject<NavigationEdgeStatus> = new Subject<NavigationEdgeStatus>();
|
||||
new MockCreator().mockProperty(node, "sequenceEdges$", sequenceEdgesSubject);
|
||||
(<Subject<Node>>navigatorMock.stateService.currentNode$).next(node);
|
||||
sequenceEdgesSubject.next({ cached: false, edges: [] });
|
||||
@ -181,18 +181,18 @@ describe("KeyPlayHandler.enable", () => {
|
||||
expect(setDirectionSpy.calls.count()).toBe(0);
|
||||
|
||||
(<Subject<boolean>>navigatorMock.playService.playing$).next(false);
|
||||
(<Subject<EdgeDirection>>navigatorMock.playService.direction$).next(EdgeDirection.Next);
|
||||
(<Subject<NavigationDirection>>navigatorMock.playService.direction$).next(NavigationDirection.Next);
|
||||
(<Subject<KeyboardEvent>>containerMock.keyboardService.keyDown$).next(shiftKeyboardEvent);
|
||||
expect(shiftPreventDefaultSpy.calls.count()).toBe(2);
|
||||
expect(setDirectionSpy.calls.count()).toBe(1);
|
||||
expect(setDirectionSpy.calls.argsFor(0)[0]).toBe(EdgeDirection.Prev);
|
||||
expect(setDirectionSpy.calls.argsFor(0)[0]).toBe(NavigationDirection.Prev);
|
||||
|
||||
(<Subject<boolean>>navigatorMock.playService.playing$).next(false);
|
||||
(<Subject<EdgeDirection>>navigatorMock.playService.direction$).next(EdgeDirection.Prev);
|
||||
(<Subject<NavigationDirection>>navigatorMock.playService.direction$).next(NavigationDirection.Prev);
|
||||
(<Subject<KeyboardEvent>>containerMock.keyboardService.keyDown$).next(shiftKeyboardEvent);
|
||||
expect(shiftPreventDefaultSpy.calls.count()).toBe(3);
|
||||
expect(setDirectionSpy.calls.count()).toBe(2);
|
||||
expect(setDirectionSpy.calls.argsFor(1)[0]).toBe(EdgeDirection.Next);
|
||||
expect(setDirectionSpy.calls.argsFor(1)[0]).toBe(NavigationDirection.Next);
|
||||
});
|
||||
|
||||
it("should play when stopped edge direction exist and stop when playing", () => {
|
||||
@ -201,13 +201,13 @@ describe("KeyPlayHandler.enable", () => {
|
||||
(<Subject<State>>navigatorMock.stateService.state$).next(State.Traversing);
|
||||
|
||||
const node: Node = nodeHelper.createNode();
|
||||
const sequenceEdgesSubject: Subject<IEdgeStatus> = new Subject<IEdgeStatus>();
|
||||
const sequenceEdgesSubject: Subject<NavigationEdgeStatus> = new Subject<NavigationEdgeStatus>();
|
||||
new MockCreator().mockProperty(node, "sequenceEdges$", sequenceEdgesSubject);
|
||||
(<Subject<Node>>navigatorMock.stateService.currentNode$).next(node);
|
||||
sequenceEdgesSubject.next({ cached: false, edges: [] });
|
||||
|
||||
(<Subject<boolean>>navigatorMock.playService.playing$).next(false);
|
||||
(<Subject<EdgeDirection>>navigatorMock.playService.direction$).next(EdgeDirection.Next);
|
||||
(<Subject<NavigationDirection>>navigatorMock.playService.direction$).next(NavigationDirection.Next);
|
||||
(<Subject<number>>navigatorMock.playService.speed$).next(0.5);
|
||||
|
||||
const spacebarKeyboardEvent: KeyboardEvent = EventHelper.createKeyboardEvent("keyDown", { key: " " });
|
||||
@ -217,13 +217,13 @@ describe("KeyPlayHandler.enable", () => {
|
||||
expect(playSpy.calls.count()).toBe(0);
|
||||
expect(stopSpy.calls.count()).toBe(0);
|
||||
|
||||
(<Subject<EdgeDirection>>navigatorMock.playService.direction$).next(EdgeDirection.Next);
|
||||
(<Subject<NavigationDirection>>navigatorMock.playService.direction$).next(NavigationDirection.Next);
|
||||
sequenceEdgesSubject.next({
|
||||
cached: true,
|
||||
edges: [{
|
||||
data: { direction: EdgeDirection.Next, worldMotionAzimuth: 0 },
|
||||
from: node.key,
|
||||
to: "toKey",
|
||||
data: { direction: NavigationDirection.Next, worldMotionAzimuth: 0 },
|
||||
source: node.key,
|
||||
target: "toKey",
|
||||
}],
|
||||
});
|
||||
(<Subject<KeyboardEvent>>containerMock.keyboardService.keyDown$).next(spacebarKeyboardEvent);
|
||||
@ -245,13 +245,13 @@ describe("KeyPlayHandler.enable", () => {
|
||||
(<Subject<State>>navigatorMock.stateService.state$).next(State.Earth);
|
||||
|
||||
const node: Node = nodeHelper.createNode();
|
||||
const sequenceEdgesSubject: Subject<IEdgeStatus> = new Subject<IEdgeStatus>();
|
||||
const sequenceEdgesSubject: Subject<NavigationEdgeStatus> = new Subject<NavigationEdgeStatus>();
|
||||
new MockCreator().mockProperty(node, "sequenceEdges$", sequenceEdgesSubject);
|
||||
(<Subject<Node>>navigatorMock.stateService.currentNode$).next(node);
|
||||
sequenceEdgesSubject.next({ cached: false, edges: [] });
|
||||
|
||||
(<Subject<boolean>>navigatorMock.playService.playing$).next(false);
|
||||
(<Subject<EdgeDirection>>navigatorMock.playService.direction$).next(EdgeDirection.Next);
|
||||
(<Subject<NavigationDirection>>navigatorMock.playService.direction$).next(NavigationDirection.Next);
|
||||
(<Subject<number>>navigatorMock.playService.speed$).next(0.5);
|
||||
|
||||
const spacebarKeyboardEvent: KeyboardEvent = EventHelper.createKeyboardEvent("keyDown", { key: " " });
|
||||
@ -261,13 +261,13 @@ describe("KeyPlayHandler.enable", () => {
|
||||
expect(playSpy.calls.count()).toBe(0);
|
||||
expect(stopSpy.calls.count()).toBe(0);
|
||||
|
||||
(<Subject<EdgeDirection>>navigatorMock.playService.direction$).next(EdgeDirection.Next);
|
||||
(<Subject<NavigationDirection>>navigatorMock.playService.direction$).next(NavigationDirection.Next);
|
||||
sequenceEdgesSubject.next({
|
||||
cached: true,
|
||||
edges: [{
|
||||
data: { direction: EdgeDirection.Next, worldMotionAzimuth: 0 },
|
||||
from: node.key,
|
||||
to: "toKey",
|
||||
data: { direction: NavigationDirection.Next, worldMotionAzimuth: 0 },
|
||||
source: node.key,
|
||||
target: "toKey",
|
||||
}],
|
||||
});
|
||||
(<Subject<KeyboardEvent>>containerMock.keyboardService.keyDown$).next(spacebarKeyboardEvent);
|
||||
|
||||
@ -11,24 +11,24 @@ import { TransformHelper } from "../../helper/TransformHelper";
|
||||
import { Navigator } from "../../../src/viewer/Navigator";
|
||||
import { Transform } from "../../../src/geo/Transform";
|
||||
import { Component } from "../../../src/component/Component";
|
||||
import { IComponentConfiguration } from "../../../src/component/interfaces/IComponentConfiguration";
|
||||
import { ComponentConfiguration } from "../../../src/component/interfaces/ComponentConfiguration";
|
||||
import { KeyZoomHandler } from "../../../src/component/keyboard/KeyZoomHandler";
|
||||
import { ViewportCoords } from "../../../src/geo/ViewportCoords";
|
||||
import { RenderCamera } from "../../../src/render/RenderCamera";
|
||||
import { Container } from "../../../src/viewer/Container";
|
||||
import { RenderMode } from "../../../src/render/RenderMode";
|
||||
|
||||
interface ITestConfiguration extends IComponentConfiguration {
|
||||
interface TestConfiguration extends ComponentConfiguration {
|
||||
test: boolean;
|
||||
}
|
||||
|
||||
class TestComponent extends Component<ITestConfiguration> {
|
||||
class TestComponent extends Component<TestConfiguration> {
|
||||
constructor(name: string, container: Container, navigator: Navigator) {
|
||||
super(name, container, navigator);
|
||||
}
|
||||
protected _activate(): void { /* noop */ }
|
||||
protected _deactivate(): void { /* noop */ }
|
||||
protected _getDefaultConfiguration(): ITestConfiguration { return { test: false }; }
|
||||
protected _getDefaultConfiguration(): TestConfiguration { return { test: false }; }
|
||||
}
|
||||
|
||||
describe("KeyZoomHandler.ctor", () => {
|
||||
|
||||
@ -1,9 +1,9 @@
|
||||
import * as THREE from "three";
|
||||
import { ILatLon } from "../../../src/api/interfaces/ILatLon";
|
||||
import { LatLonEnt } from "../../../src/api/ents/LatLonEnt";
|
||||
import { Marker } from "../../../src/component/marker/marker/Marker";
|
||||
|
||||
class TestMarker extends Marker {
|
||||
constructor(id: string, latLon: ILatLon) { super(id, latLon); }
|
||||
constructor(id: string, latLon: LatLonEnt) { super(id, latLon); }
|
||||
protected _createGeometry(position: number[]): void {
|
||||
this._geometry = new THREE.Object3D();
|
||||
this._geometry.position.fromArray(position);
|
||||
|
||||
@ -1,10 +1,10 @@
|
||||
import * as THREE from "three";
|
||||
import { ILatLon } from "../../../src/api/interfaces/ILatLon";
|
||||
import { LatLonEnt } from "../../../src/api/ents/LatLonEnt";
|
||||
import { Marker } from "../../../src/component/marker/marker/Marker";
|
||||
import { MarkerScene } from "../../../src/component/marker/MarkerScene";
|
||||
|
||||
class TestMarker extends Marker {
|
||||
constructor(id: string, latLon: ILatLon) { super(id, latLon); }
|
||||
constructor(id: string, latLon: LatLonEnt) { super(id, latLon); }
|
||||
protected _createGeometry(position: number[]): void { /* noop */ }
|
||||
protected _disposeGeometry(): void { /* noop */ }
|
||||
protected _getInteractiveObjects(): THREE.Object3D[] { return []; }
|
||||
|
||||
@ -3,12 +3,12 @@ bootstrap();
|
||||
|
||||
import { first } from "rxjs/operators";
|
||||
import { Subscription } from "rxjs";
|
||||
import { ILatLon } from "../../../src/api/interfaces/ILatLon";
|
||||
import { LatLonEnt } from "../../../src/api/ents/LatLonEnt";
|
||||
import { Marker } from "../../../src/component/marker/marker/Marker";
|
||||
import { MarkerSet } from "../../../src/component/marker/MarkerSet";
|
||||
|
||||
class TestMarker extends Marker {
|
||||
constructor(id: string, latLon: ILatLon) { super(id, latLon); }
|
||||
constructor(id: string, latLon: LatLonEnt) { super(id, latLon); }
|
||||
protected _createGeometry(position: number[]): void { /* noop */ }
|
||||
protected _disposeGeometry(): void { /* noop */ }
|
||||
protected _getInteractiveObjects(): THREE.Object3D[] { return []; }
|
||||
|
||||
@ -17,7 +17,7 @@ import { DragPanHandler } from "../../../src/component/mouse/DragPanHandler";
|
||||
import { Spatial } from "../../../src/geo/Spatial";
|
||||
import { ViewportCoords } from "../../../src/geo/ViewportCoords";
|
||||
import { RenderCamera } from "../../../src/render/RenderCamera";
|
||||
import { IFrame } from "../../../src/state/interfaces/IFrame";
|
||||
import { AnimationFrame } from "../../../src/state/interfaces/AnimationFrame";
|
||||
import { Container } from "../../../src/viewer/Container";
|
||||
import { RenderMode } from "../../../src/render/RenderMode";
|
||||
|
||||
@ -219,8 +219,8 @@ describe("DragPanHandler.enable", () => {
|
||||
testComponent.activate();
|
||||
handler.enable();
|
||||
|
||||
const frame: IFrame = new FrameHelper().createFrame();
|
||||
(<Subject<IFrame>>navigatorMock.stateService.currentState$).next(frame);
|
||||
const frame: AnimationFrame = new FrameHelper().createFrame();
|
||||
(<Subject<AnimationFrame>>navigatorMock.stateService.currentState$).next(frame);
|
||||
|
||||
(<Subject<[GraphNode, Transform, number][]>>navigatorMock.panService.panNodes$).next([]);
|
||||
|
||||
@ -257,8 +257,8 @@ describe("DragPanHandler.enable", () => {
|
||||
testComponent.activate();
|
||||
handler.enable();
|
||||
|
||||
const frame: IFrame = new FrameHelper().createFrame();
|
||||
(<Subject<IFrame>>navigatorMock.stateService.currentState$).next(frame);
|
||||
const frame: AnimationFrame = new FrameHelper().createFrame();
|
||||
(<Subject<AnimationFrame>>navigatorMock.stateService.currentState$).next(frame);
|
||||
|
||||
(<Subject<[GraphNode, Transform, number][]>>navigatorMock.panService.panNodes$).next([]);
|
||||
|
||||
@ -296,8 +296,8 @@ describe("DragPanHandler.enable", () => {
|
||||
testComponent.activate();
|
||||
handler.enable();
|
||||
|
||||
const frame: IFrame = new FrameHelper().createFrame();
|
||||
(<Subject<IFrame>>navigatorMock.stateService.currentState$).next(frame);
|
||||
const frame: AnimationFrame = new FrameHelper().createFrame();
|
||||
(<Subject<AnimationFrame>>navigatorMock.stateService.currentState$).next(frame);
|
||||
|
||||
(<Subject<[GraphNode, Transform, number][]>>navigatorMock.panService.panNodes$).next([]);
|
||||
|
||||
@ -336,8 +336,8 @@ describe("DragPanHandler.enable", () => {
|
||||
testComponent.activate();
|
||||
handler.enable();
|
||||
|
||||
const frame: IFrame = new FrameHelper().createFrame();
|
||||
(<Subject<IFrame>>navigatorMock.stateService.currentState$).next(frame);
|
||||
const frame: AnimationFrame = new FrameHelper().createFrame();
|
||||
(<Subject<AnimationFrame>>navigatorMock.stateService.currentState$).next(frame);
|
||||
|
||||
(<Subject<[GraphNode, Transform, number][]>>navigatorMock.panService.panNodes$).next([]);
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
import { take } from "rxjs/operators";
|
||||
import { IPopupOffset } from "../../../src/component/popup/interfaces/IPopupOffset";
|
||||
import { PopupOffset } from "../../../src/component/popup/interfaces/PopupOffset";
|
||||
import { Popup } from "../../../src/component/popup/popup/Popup";
|
||||
import { ViewportCoords } from "../../../src/geo/ViewportCoords";
|
||||
import { RenderCamera } from "../../../src/render/RenderCamera";
|
||||
@ -519,7 +519,7 @@ describe("Popup.offset", () => {
|
||||
const viewportCoords: ViewportCoords = new ViewportCoords();
|
||||
spyOn(viewportCoords, "basicToCanvasSafe").and.returnValue([40, 60]);
|
||||
|
||||
const offset: IPopupOffset = {
|
||||
const offset: PopupOffset = {
|
||||
bottom: [0, 1],
|
||||
bottomLeft: [2, 3],
|
||||
bottomRight: [4, 5],
|
||||
@ -548,7 +548,7 @@ describe("Popup.offset", () => {
|
||||
const viewportCoords: ViewportCoords = new ViewportCoords();
|
||||
spyOn(viewportCoords, "basicToCanvasSafe").and.returnValue([40, 60]);
|
||||
|
||||
const offset: IPopupOffset = {
|
||||
const offset: PopupOffset = {
|
||||
bottom: [-0, -1],
|
||||
bottomLeft: [-2, -3],
|
||||
bottomRight: [-4, -5],
|
||||
|
||||
@ -7,7 +7,7 @@ import { ContainerMockCreator } from "../../helper/ContainerMockCreator";
|
||||
import { NavigatorMockCreator } from "../../helper/NavigatorMockCreator";
|
||||
import { Popup } from "../../../src/component/popup/popup/Popup";
|
||||
import { PopupComponent } from "../../../src/component/popup/PopupComponent";
|
||||
import { ISize } from "../../../src/render/interfaces/ISize";
|
||||
import { ViewportSize } from "../../../src/render/interfaces/ViewportSize";
|
||||
import { RenderCamera } from "../../../src/render/RenderCamera";
|
||||
import { Container } from "../../../src/viewer/Container";
|
||||
|
||||
@ -287,7 +287,7 @@ describe("PopupComponent.updateAdded", () => {
|
||||
popupComponent.activate();
|
||||
|
||||
(<Subject<RenderCamera>>containerMock.renderService.renderCamera$).next(null);
|
||||
(<Subject<ISize>>containerMock.renderService.size$).next(null);
|
||||
(<Subject<ViewportSize>>containerMock.renderService.size$).next(null);
|
||||
(<Subject<Transform>>navigatorMock.stateService.currentTransform$).next(null);
|
||||
|
||||
popupComponent.add([popup]);
|
||||
@ -313,7 +313,7 @@ describe("PopupComponent.updateAdded", () => {
|
||||
popupComponent.activate();
|
||||
|
||||
(<Subject<RenderCamera>>containerMock.renderService.renderCamera$).next(null);
|
||||
(<Subject<ISize>>containerMock.renderService.size$).next(null);
|
||||
(<Subject<ViewportSize>>containerMock.renderService.size$).next(null);
|
||||
(<Subject<Transform>>navigatorMock.stateService.currentTransform$).next(null);
|
||||
|
||||
popupComponent.add([popup]);
|
||||
@ -345,7 +345,7 @@ describe("PopupComponent.updateAll", () => {
|
||||
popupComponent.activate();
|
||||
|
||||
(<Subject<RenderCamera>>containerMock.renderService.renderCamera$).next(null);
|
||||
(<Subject<ISize>>containerMock.renderService.size$).next(null);
|
||||
(<Subject<ViewportSize>>containerMock.renderService.size$).next(null);
|
||||
(<Subject<Transform>>navigatorMock.stateService.currentTransform$).next(null);
|
||||
|
||||
expect(updateSpy.calls.count()).toBe(1);
|
||||
@ -373,7 +373,7 @@ describe("PopupComponent.updateAll", () => {
|
||||
popupComponent.deactivate();
|
||||
|
||||
(<Subject<RenderCamera>>containerMock.renderService.renderCamera$).next(null);
|
||||
(<Subject<ISize>>containerMock.renderService.size$).next(null);
|
||||
(<Subject<ViewportSize>>containerMock.renderService.size$).next(null);
|
||||
(<Subject<Transform>>navigatorMock.stateService.currentTransform$).next(null);
|
||||
|
||||
expect(updateSpy.calls.count()).toBe(0);
|
||||
|
||||
@ -11,9 +11,9 @@ import { Node } from "../../../src/graph/Node";
|
||||
import { SequenceComponent } from "../../../src/component/sequence/SequenceComponent";
|
||||
import { SequenceDOMRenderer } from "../../../src/component/sequence/SequenceDOMRenderer";
|
||||
import { GraphMode } from "../../../src/graph/GraphMode";
|
||||
import { IEdgeStatus } from "../../../src/graph/interfaces/IEdgeStatus";
|
||||
import { NavigationEdgeStatus } from "../../../src/graph/interfaces/NavigationEdgeStatus";
|
||||
import { Sequence } from "../../../src/graph/Sequence";
|
||||
import { ISize } from "../../../src/render/interfaces/ISize";
|
||||
import { ViewportSize } from "../../../src/render/interfaces/ViewportSize";
|
||||
import { State } from "../../../src/state/State";
|
||||
import { Container } from "../../../src/viewer/Container";
|
||||
|
||||
@ -132,7 +132,7 @@ describe("SequenceComponent.activate", () => {
|
||||
|
||||
const node1: Node = nodeHelper.createNode();
|
||||
mockCreator.mockProperty(node1, "spatialEdges", { cached: false, edges: [] });
|
||||
mockCreator.mockProperty(node1, "sequenceEdges$", new Subject<IEdgeStatus>());
|
||||
mockCreator.mockProperty(node1, "sequenceEdges$", new Subject<NavigationEdgeStatus>());
|
||||
mockCreator.mockProperty(node1, "key", "nodeKey1");
|
||||
(<Subject<Node>>navigatorMock.stateService.currentNode$).next(node1);
|
||||
|
||||
@ -141,7 +141,7 @@ describe("SequenceComponent.activate", () => {
|
||||
|
||||
const node2: Node = nodeHelper.createNode();
|
||||
mockCreator.mockProperty(node2, "spatialEdges", { cached: false, edges: [] });
|
||||
mockCreator.mockProperty(node2, "sequenceEdges$", new Subject<IEdgeStatus>());
|
||||
mockCreator.mockProperty(node2, "sequenceEdges$", new Subject<NavigationEdgeStatus>());
|
||||
mockCreator.mockProperty(node2, "key", "nodeKey2");
|
||||
(<Subject<Node>>navigatorMock.stateService.currentNode$).next(node2);
|
||||
|
||||
@ -150,7 +150,7 @@ describe("SequenceComponent.activate", () => {
|
||||
|
||||
const node3: Node = nodeHelper.createNode();
|
||||
mockCreator.mockProperty(node3, "spatialEdges", { cached: false, edges: [] });
|
||||
mockCreator.mockProperty(node3, "sequenceEdges$", new Subject<IEdgeStatus>());
|
||||
mockCreator.mockProperty(node3, "sequenceEdges$", new Subject<NavigationEdgeStatus>());
|
||||
mockCreator.mockProperty(node3, "key", "nodeKey2");
|
||||
(<Subject<Node>>navigatorMock.stateService.currentNode$).next(node3);
|
||||
|
||||
@ -171,7 +171,7 @@ describe("SequenceComponent.activate", () => {
|
||||
|
||||
const node1: Node = nodeHelper.createNode();
|
||||
mockCreator.mockProperty(node1, "spatialEdges", { cached: false, edges: [] });
|
||||
mockCreator.mockProperty(node1, "sequenceEdges$", new Subject<IEdgeStatus>());
|
||||
mockCreator.mockProperty(node1, "sequenceEdges$", new Subject<NavigationEdgeStatus>());
|
||||
mockCreator.mockProperty(node1, "key", "nodeKey1");
|
||||
mockCreator.mockProperty(node1, "sequenceKey", "sequenceKey1");
|
||||
(<Subject<Node>>navigatorMock.stateService.currentNode$).next(node1);
|
||||
@ -181,7 +181,7 @@ describe("SequenceComponent.activate", () => {
|
||||
|
||||
const node2: Node = nodeHelper.createNode();
|
||||
mockCreator.mockProperty(node2, "spatialEdges", { cached: false, edges: [] });
|
||||
mockCreator.mockProperty(node2, "sequenceEdges$", new Subject<IEdgeStatus>());
|
||||
mockCreator.mockProperty(node2, "sequenceEdges$", new Subject<NavigationEdgeStatus>());
|
||||
mockCreator.mockProperty(node2, "key", "nodeKey2");
|
||||
mockCreator.mockProperty(node2, "sequenceKey", "sequenceKey1");
|
||||
(<Subject<Node>>navigatorMock.stateService.currentNode$).next(node2);
|
||||
@ -190,7 +190,7 @@ describe("SequenceComponent.activate", () => {
|
||||
|
||||
const node3: Node = nodeHelper.createNode();
|
||||
mockCreator.mockProperty(node3, "spatialEdges", { cached: false, edges: [] });
|
||||
mockCreator.mockProperty(node3, "sequenceEdges$", new Subject<IEdgeStatus>());
|
||||
mockCreator.mockProperty(node3, "sequenceEdges$", new Subject<NavigationEdgeStatus>());
|
||||
mockCreator.mockProperty(node3, "key", "nodeKey3");
|
||||
mockCreator.mockProperty(node3, "sequenceKey", "sequenceKey2");
|
||||
(<Subject<Node>>navigatorMock.stateService.currentNode$).next(node3);
|
||||
@ -215,7 +215,7 @@ describe("SequenceComponent.activate", () => {
|
||||
|
||||
const node1: Node = nodeHelper.createNode();
|
||||
mockCreator.mockProperty(node1, "spatialEdges", { cached: false, edges: [] });
|
||||
mockCreator.mockProperty(node1, "sequenceEdges$", new Subject<IEdgeStatus>());
|
||||
mockCreator.mockProperty(node1, "sequenceEdges$", new Subject<NavigationEdgeStatus>());
|
||||
mockCreator.mockProperty(node1, "key", "nodeKey1");
|
||||
mockCreator.mockProperty(node1, "sequenceKey", "sequenceKey1");
|
||||
(<Subject<Node>>navigatorMock.stateService.currentNode$).next(node1);
|
||||
@ -270,7 +270,7 @@ describe("SequenceComponent.activate", () => {
|
||||
|
||||
(<Subject<State>>navigatorMock.stateService.state$).next(State.Traversing);
|
||||
(<Subject<number>>navigatorMock.playService.speed$).next(1);
|
||||
(<Subject<ISize>>containerMock.renderService.size$).next({ height: 1, width: 1 });
|
||||
(<Subject<ViewportSize>>containerMock.renderService.size$).next({ height: 1, width: 1 });
|
||||
|
||||
const node1: Node = nodeHelper.createNode();
|
||||
mockCreator.mockProperty(node1, "spatialEdges", { cached: false, edges: [] });
|
||||
@ -303,7 +303,7 @@ describe("SequenceComponent.activate", () => {
|
||||
|
||||
(<Subject<State>>navigatorMock.stateService.state$).next(State.Traversing);
|
||||
(<Subject<number>>navigatorMock.playService.speed$).next(1);
|
||||
(<Subject<ISize>>containerMock.renderService.size$).next({ height: 1, width: 1 });
|
||||
(<Subject<ViewportSize>>containerMock.renderService.size$).next({ height: 1, width: 1 });
|
||||
|
||||
const sequenceKey1: string = "sequenceKey1";
|
||||
const nodeKey1: string = "nodeKey1";
|
||||
@ -343,7 +343,7 @@ describe("SequenceComponent.activate", () => {
|
||||
|
||||
(<Subject<State>>navigatorMock.stateService.state$).next(State.Traversing);
|
||||
(<Subject<number>>navigatorMock.playService.speed$).next(1);
|
||||
(<Subject<ISize>>containerMock.renderService.size$).next({ height: 1, width: 1 });
|
||||
(<Subject<ViewportSize>>containerMock.renderService.size$).next({ height: 1, width: 1 });
|
||||
|
||||
const sequenceKey1: string = "sequenceKey1";
|
||||
const nodeKey1: string = "nodeKey1";
|
||||
@ -397,7 +397,7 @@ describe("SequenceComponent.activate", () => {
|
||||
|
||||
(<Subject<State>>navigatorMock.stateService.state$).next(State.Traversing);
|
||||
(<Subject<number>>navigatorMock.playService.speed$).next(1);
|
||||
(<Subject<ISize>>containerMock.renderService.size$).next({ height: 1, width: 1 });
|
||||
(<Subject<ViewportSize>>containerMock.renderService.size$).next({ height: 1, width: 1 });
|
||||
|
||||
const sequenceKey1: string = "sequenceKey1";
|
||||
const sequenceKey2: string = "sequenceKey2";
|
||||
@ -463,7 +463,7 @@ describe("SequenceComponent.activate", () => {
|
||||
|
||||
(<Subject<State>>navigatorMock.stateService.state$).next(State.Traversing);
|
||||
(<Subject<number>>navigatorMock.playService.speed$).next(1);
|
||||
(<Subject<ISize>>containerMock.renderService.size$).next({ height: 1, width: 1 });
|
||||
(<Subject<ViewportSize>>containerMock.renderService.size$).next({ height: 1, width: 1 });
|
||||
|
||||
const sequenceKey1: string = "sequenceKey1";
|
||||
const nodeKey1: string = "nodeKey1";
|
||||
@ -513,7 +513,7 @@ describe("SequenceComponent.activate", () => {
|
||||
|
||||
(<Subject<State>>navigatorMock.stateService.state$).next(State.Traversing);
|
||||
(<Subject<number>>navigatorMock.playService.speed$).next(1);
|
||||
(<Subject<ISize>>containerMock.renderService.size$).next({ height: 1, width: 1 });
|
||||
(<Subject<ViewportSize>>containerMock.renderService.size$).next({ height: 1, width: 1 });
|
||||
|
||||
const sequenceKey1: string = "sequenceKey1";
|
||||
const nodeKey1: string = "nodeKey1";
|
||||
|
||||
@ -3,7 +3,7 @@ import { Subject } from "rxjs";
|
||||
import { Node } from "../../../src/graph/Node";
|
||||
import { FalcorDataProvider } from "../../../src/api/FalcorDataProvider";
|
||||
import { GeohashGeometryProvider } from "../../../src/api/GeohashGeometryProvider";
|
||||
import { IClusterReconstruction } from "../../../src/api/interfaces/IClusterReconstruction";
|
||||
import { ReconstructionEnt } from "../../../src/api/ents/ReconstructionEnt";
|
||||
import { SpatialDataCache } from "../../../src/component/spatialdata/SpatialDataCache";
|
||||
import { GraphService } from "../../../src/graph/GraphService";
|
||||
import { GraphServiceMockCreator } from "../../helper/GraphServiceMockCreator";
|
||||
@ -172,7 +172,7 @@ describe("SpatialDataCache.cacheReconstructions$", () => {
|
||||
let emitCount: number = 0;
|
||||
cache.cacheClusterReconstructions$(hash)
|
||||
.subscribe(
|
||||
(r: IClusterReconstruction): void => {
|
||||
(r: ReconstructionEnt): void => {
|
||||
expect(r.key).toBe(node.clusterKey);
|
||||
emitCount++;
|
||||
},
|
||||
@ -263,7 +263,7 @@ describe("SpatialDataCache.cacheReconstructions$", () => {
|
||||
|
||||
let resolver: Function;
|
||||
const promise: any = {
|
||||
then: (resolve: (value: IClusterReconstruction) => void): void => {
|
||||
then: (resolve: (value: ReconstructionEnt) => void): void => {
|
||||
resolver = resolve;
|
||||
},
|
||||
};
|
||||
@ -402,12 +402,12 @@ describe("SpatialDataCache.updateCell$", () => {
|
||||
});
|
||||
|
||||
describe("SpatialDataCache.updateReconstructions$", () => {
|
||||
const createCluster = (key: string): IClusterReconstruction => {
|
||||
const createCluster = (key: string): ReconstructionEnt => {
|
||||
return {
|
||||
cameras: {},
|
||||
key,
|
||||
points: {},
|
||||
reference_lla: { latitude: 0, longitude: 0, altitude: 0 },
|
||||
reference: { lat: 0, lon: 0, alt: 0 },
|
||||
shots: {},
|
||||
}
|
||||
}
|
||||
@ -418,7 +418,7 @@ describe("SpatialDataCache.updateReconstructions$", () => {
|
||||
{ clientToken: "cid" }, geometryProvider);
|
||||
spyOn(dataProvider, "getClusterReconstruction").and
|
||||
.returnValue(
|
||||
new Promise<IClusterReconstruction>(() => { /* noop */ }));
|
||||
new Promise<ReconstructionEnt>(() => { /* noop */ }));
|
||||
|
||||
const graphService = new GraphServiceMockCreator().create();
|
||||
const cache = new SpatialDataCache(graphService, dataProvider);
|
||||
@ -432,7 +432,7 @@ describe("SpatialDataCache.updateReconstructions$", () => {
|
||||
|
||||
let resolver: Function;
|
||||
const promise: any = {
|
||||
then: (resolve: (value: IClusterReconstruction) => void): void => {
|
||||
then: (resolve: (value: ReconstructionEnt) => void): void => {
|
||||
resolver = resolve;
|
||||
},
|
||||
};
|
||||
@ -472,7 +472,7 @@ describe("SpatialDataCache.updateReconstructions$", () => {
|
||||
|
||||
let resolver: Function;
|
||||
const promise: any = {
|
||||
then: (resolve: (value: IClusterReconstruction) => void): void => {
|
||||
then: (resolve: (value: ReconstructionEnt) => void): void => {
|
||||
resolver = resolve;
|
||||
},
|
||||
};
|
||||
|
||||
@ -3,7 +3,7 @@ import { Navigator } from "../../../src/viewer/Navigator";
|
||||
import { ContainerMockCreator } from "../../helper/ContainerMockCreator";
|
||||
import { NavigatorMockCreator } from "../../helper/NavigatorMockCreator";
|
||||
import { Component } from "../../../src/component/Component";
|
||||
import { ITagConfiguration } from "../../../src/component/interfaces/ITagConfiguration";
|
||||
import { TagConfiguration } from "../../../src/component/interfaces/TagConfiguration";
|
||||
import { CreateHandlerBase } from "../../../src/component/tag/handlers/CreateHandlerBase";
|
||||
import { TagCreator } from "../../../src/component/tag/TagCreator";
|
||||
import { ViewportCoords } from "../../../src/geo/ViewportCoords";
|
||||
@ -19,10 +19,10 @@ class CreateTestHandler extends CreateHandlerBase {
|
||||
protected _getNameExtension(): string { return "create-test"; }
|
||||
}
|
||||
|
||||
class TestComponent extends Component<ITagConfiguration> {
|
||||
class TestComponent extends Component<TagConfiguration> {
|
||||
protected _activate(): void { /*noop*/ }
|
||||
protected _deactivate(): void { /*noop*/ }
|
||||
protected _getDefaultConfiguration(): ITagConfiguration { return {}; }
|
||||
protected _getDefaultConfiguration(): TagConfiguration { return {}; }
|
||||
}
|
||||
|
||||
describe("CreateHandlerBase.ctor", () => {
|
||||
|
||||
@ -5,7 +5,7 @@ import { NavigatorMockCreator } from "../../helper/NavigatorMockCreator";
|
||||
|
||||
import { Navigator } from "../../../src/viewer/Navigator";
|
||||
import { Component } from "../../../src/component/Component";
|
||||
import { ITagConfiguration } from "../../../src/component/interfaces/ITagConfiguration";
|
||||
import { TagConfiguration } from "../../../src/component/interfaces/TagConfiguration";
|
||||
import { PointGeometry } from "../../../src/component/tag/geometry/PointGeometry";
|
||||
import { CreatePointHandler } from "../../../src/component/tag/handlers/CreatePointHandler";
|
||||
import { TagCreator } from "../../../src/component/tag/TagCreator";
|
||||
@ -13,10 +13,10 @@ import { ViewportCoords } from "../../../src/geo/ViewportCoords";
|
||||
import { Container } from "../../../src/viewer/Container";
|
||||
import { Geometry } from "../../../src/component/tag/geometry/Geometry";
|
||||
|
||||
class TestComponent extends Component<ITagConfiguration> {
|
||||
class TestComponent extends Component<TagConfiguration> {
|
||||
protected _activate(): void { /*noop*/ }
|
||||
protected _deactivate(): void { /*noop*/ }
|
||||
protected _getDefaultConfiguration(): ITagConfiguration { return {}; }
|
||||
protected _getDefaultConfiguration(): TagConfiguration { return {}; }
|
||||
}
|
||||
|
||||
describe("CreatePointHandler.ctor", () => {
|
||||
|
||||
@ -4,7 +4,7 @@ import { RectGeometry } from "../../../src/component/tag/geometry/RectGeometry";
|
||||
import { RenderTag } from "../../../src/component/tag/tag/RenderTag";
|
||||
import { Tag } from "../../../src/component/tag/tag/Tag";
|
||||
import { TagScene } from "../../../src/component/tag/TagScene";
|
||||
import { ISize } from "../../../src/render/interfaces/ISize";
|
||||
import { ViewportSize } from "../../../src/render/interfaces/ViewportSize";
|
||||
import { ISpriteAtlas } from "../../../src/viewer/interfaces/ISpriteAtlas";
|
||||
|
||||
describe("TagScene.ctor", () => {
|
||||
@ -36,7 +36,7 @@ class TestTag extends Tag {
|
||||
|
||||
class TestRenderTag extends RenderTag<Tag> {
|
||||
public dispose(): void { /*noop*/ }
|
||||
public getDOMObjects(atlas: ISpriteAtlas, camera: THREE.Camera, size: ISize): vd.VNode[] { return []; }
|
||||
public getDOMObjects(atlas: ISpriteAtlas, camera: THREE.Camera, size: ViewportSize): vd.VNode[] { return []; }
|
||||
public getGLObjects(): THREE.Object3D[] { return []; }
|
||||
public getRetrievableObjects(): THREE.Object3D[] { return []; }
|
||||
}
|
||||
|
||||
@ -4,27 +4,27 @@ import { NavigatorMockCreator } from "../../helper/NavigatorMockCreator";
|
||||
|
||||
import { Navigator } from "../../../src/viewer/Navigator";
|
||||
import { Component } from "../../../src/component/Component";
|
||||
import { IComponentConfiguration } from "../../../src/component/interfaces/IComponentConfiguration";
|
||||
import { ComponentConfiguration } from "../../../src/component/interfaces/ComponentConfiguration";
|
||||
import { HandlerBase } from "../../../src/component/utils/HandlerBase";
|
||||
import { Container } from "../../../src/viewer/Container";
|
||||
|
||||
interface ITestConfiguration extends IComponentConfiguration {
|
||||
interface TestConfiguration extends ComponentConfiguration {
|
||||
test: boolean;
|
||||
}
|
||||
|
||||
class TestComponent extends Component<ITestConfiguration> {
|
||||
class TestComponent extends Component<TestConfiguration> {
|
||||
constructor(name: string, container: Container, navigator: Navigator) {
|
||||
super(name, container, navigator);
|
||||
}
|
||||
protected _activate(): void { /* noop */ }
|
||||
protected _deactivate(): void { /* noop */ }
|
||||
protected _getDefaultConfiguration(): ITestConfiguration { return { test: false }; }
|
||||
protected _getDefaultConfiguration(): TestConfiguration { return { test: false }; }
|
||||
}
|
||||
|
||||
class TestHandler extends HandlerBase<ITestConfiguration> {
|
||||
class TestHandler extends HandlerBase<TestConfiguration> {
|
||||
protected _disable(): void { /* noop */ }
|
||||
protected _enable(): void { /* noop */ }
|
||||
protected _getConfiguration(enable: boolean): ITestConfiguration { return { test: enable }; }
|
||||
protected _getConfiguration(enable: boolean): TestConfiguration { return { test: enable }; }
|
||||
}
|
||||
|
||||
describe("HandlerBase.ctor", () => {
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
import { GeoCoords } from "../../src/geo/GeoCoords";
|
||||
import { ILatLonAlt } from "../../src/geo/interfaces/ILatLonAlt";
|
||||
import { LatLonAltEnt } from "../../src/api/ents/LatLonAltEnt";
|
||||
|
||||
let precision: number = 8;
|
||||
|
||||
@ -14,7 +14,7 @@ describe("GeoCoords.geodeticToEcef", () => {
|
||||
});
|
||||
|
||||
it("should convert Equator - Greenwich to X axis value", () => {
|
||||
let position: ILatLonAlt = { alt: 0, lat: 0, lon: 0 };
|
||||
let position: LatLonAltEnt = { alt: 0, lat: 0, lon: 0 };
|
||||
|
||||
let ecef: number[] = geoCoords.geodeticToEcef(position.lat, position.lon, position.alt);
|
||||
|
||||
@ -24,7 +24,7 @@ describe("GeoCoords.geodeticToEcef", () => {
|
||||
});
|
||||
|
||||
it("should convert positions on Equator to WGS84 a distance", () => {
|
||||
let position1: ILatLonAlt = { alt: 0, lat: 0, lon: 90 };
|
||||
let position1: LatLonAltEnt = { alt: 0, lat: 0, lon: 90 };
|
||||
|
||||
let ecef1: number[] = geoCoords.geodeticToEcef(position1.lat, position1.lon, position1.alt);
|
||||
|
||||
@ -32,7 +32,7 @@ describe("GeoCoords.geodeticToEcef", () => {
|
||||
expect(ecef1[1]).toBeCloseTo(wgs84a, precision);
|
||||
expect(ecef1[2]).toBeCloseTo(0, precision);
|
||||
|
||||
let position2: ILatLonAlt = { alt: 0, lat: 0, lon: 180 };
|
||||
let position2: LatLonAltEnt = { alt: 0, lat: 0, lon: 180 };
|
||||
|
||||
let ecef2: number[] = geoCoords.geodeticToEcef(position2.lat, position2.lon, position2.alt);
|
||||
|
||||
@ -40,7 +40,7 @@ describe("GeoCoords.geodeticToEcef", () => {
|
||||
expect(ecef2[1]).toBeCloseTo(0, precision);
|
||||
expect(ecef2[2]).toBeCloseTo(0, precision);
|
||||
|
||||
let position3: ILatLonAlt = { alt: 0, lat: 0, lon: -90 };
|
||||
let position3: LatLonAltEnt = { alt: 0, lat: 0, lon: -90 };
|
||||
|
||||
let ecef3: number[] = geoCoords.geodeticToEcef(position3.lat, position3.lon, position3.alt);
|
||||
|
||||
@ -50,7 +50,7 @@ describe("GeoCoords.geodeticToEcef", () => {
|
||||
});
|
||||
|
||||
it("should convert random Equator postion correctly", () => {
|
||||
let position: ILatLonAlt = { alt: 0, lat: 0, lon: 35.6589 };
|
||||
let position: LatLonAltEnt = { alt: 0, lat: 0, lon: 35.6589 };
|
||||
|
||||
let ecef: number[] = geoCoords.geodeticToEcef(position.lat, position.lon, position.alt);
|
||||
|
||||
@ -60,7 +60,7 @@ describe("GeoCoords.geodeticToEcef", () => {
|
||||
});
|
||||
|
||||
it("should convert value with altitude correctly", () => {
|
||||
let position: ILatLonAlt = { alt: 452.43537987, lat: 0, lon: 0 };
|
||||
let position: LatLonAltEnt = { alt: 452.43537987, lat: 0, lon: 0 };
|
||||
|
||||
let ecef: number[] = geoCoords.geodeticToEcef(position.lat, position.lon, position.alt);
|
||||
|
||||
@ -70,7 +70,7 @@ describe("GeoCoords.geodeticToEcef", () => {
|
||||
});
|
||||
|
||||
it("should convert North Pole value correctly", () => {
|
||||
let position: ILatLonAlt = { alt: 0, lat: 90, lon: 0 };
|
||||
let position: LatLonAltEnt = { alt: 0, lat: 90, lon: 0 };
|
||||
|
||||
let ecef: number[] = geoCoords.geodeticToEcef(position.lat, position.lon, position.alt);
|
||||
|
||||
@ -80,7 +80,7 @@ describe("GeoCoords.geodeticToEcef", () => {
|
||||
});
|
||||
|
||||
it("should convert back and forth between WGS84 and ECEF and correspond", () => {
|
||||
let position: ILatLonAlt = { alt: 25.34543543, lat: 12.469889789, lon: -33.34589734 };
|
||||
let position: LatLonAltEnt = { alt: 25.34543543, lat: 12.469889789, lon: -33.34589734 };
|
||||
|
||||
let ecef: number[] = geoCoords.geodeticToEcef(position.lat, position.lon, position.alt);
|
||||
let rePosition: number[] = geoCoords.ecefToGeodetic(ecef[0], ecef[1], ecef[2]);
|
||||
@ -166,7 +166,7 @@ describe("GeoCoords.ecefToEnu", () => {
|
||||
});
|
||||
|
||||
it("should convert to ECEF position corresponding to geodetic to ENU at origin", () => {
|
||||
let ref: ILatLonAlt = { alt: 0, lat: 0, lon: 0 };
|
||||
let ref: LatLonAltEnt = { alt: 0, lat: 0, lon: 0 };
|
||||
let ecef: number[] = [wgs84a, 0, 0];
|
||||
|
||||
let enu: number[] = geoCoords.ecefToEnu(ecef[0], ecef[1], ecef[2], ref.lat, ref.lon, ref.alt);
|
||||
@ -177,7 +177,7 @@ describe("GeoCoords.ecefToEnu", () => {
|
||||
});
|
||||
|
||||
it("should convert positions on Equator to ENU positions at origin", () => {
|
||||
let ref1: ILatLonAlt = { alt: 0, lat: 0, lon: 90 };
|
||||
let ref1: LatLonAltEnt = { alt: 0, lat: 0, lon: 90 };
|
||||
let ecef1: number[] = [0, wgs84a, 0];
|
||||
|
||||
let enu1: number[] = geoCoords.ecefToEnu(ecef1[0], ecef1[1], ecef1[2], ref1.lat, ref1.lon, ref1.alt);
|
||||
@ -186,7 +186,7 @@ describe("GeoCoords.ecefToEnu", () => {
|
||||
expect(enu1[1]).toBeCloseTo(0, precision);
|
||||
expect(enu1[2]).toBeCloseTo(0, precision);
|
||||
|
||||
let ref2: ILatLonAlt = { alt: 0, lat: 0, lon: 180 };
|
||||
let ref2: LatLonAltEnt = { alt: 0, lat: 0, lon: 180 };
|
||||
let ecef2: number[] = [-wgs84a, 0, 0];
|
||||
|
||||
let enu2: number[] = geoCoords.ecefToEnu(ecef2[0], ecef2[1], ecef2[2], ref2.lat, ref2.lon, ref2.alt);
|
||||
@ -195,7 +195,7 @@ describe("GeoCoords.ecefToEnu", () => {
|
||||
expect(enu2[1]).toBeCloseTo(0, precision);
|
||||
expect(enu2[2]).toBeCloseTo(0, precision);
|
||||
|
||||
let ref3: ILatLonAlt = { alt: 0, lat: 0, lon: -90 };
|
||||
let ref3: LatLonAltEnt = { alt: 0, lat: 0, lon: -90 };
|
||||
let ecef3: number[] = [0, -wgs84a, 0];
|
||||
|
||||
let enu3: number[] = geoCoords.ecefToEnu(ecef3[0], ecef3[1], ecef3[2], ref3.lat, ref3.lon, ref3.alt);
|
||||
@ -206,7 +206,7 @@ describe("GeoCoords.ecefToEnu", () => {
|
||||
});
|
||||
|
||||
it("should convert ECEF position with altitude to ENU with correct z-value", () => {
|
||||
let ref: ILatLonAlt = { alt: 0, lat: 0, lon: 0 };
|
||||
let ref: LatLonAltEnt = { alt: 0, lat: 0, lon: 0 };
|
||||
|
||||
let altitude: number = 5.38973284;
|
||||
let ecef: number[] = [wgs84a + altitude, 0, 0];
|
||||
@ -219,7 +219,7 @@ describe("GeoCoords.ecefToEnu", () => {
|
||||
});
|
||||
|
||||
it("should convert ECEF position with translation to correct ENU position", () => {
|
||||
let ref: ILatLonAlt = { alt: 0, lat: 0, lon: 0 };
|
||||
let ref: LatLonAltEnt = { alt: 0, lat: 0, lon: 0 };
|
||||
|
||||
let translation: number = 1.38973284;
|
||||
let ecef: number[] = [wgs84a, translation, translation];
|
||||
@ -240,7 +240,7 @@ describe("GeoCoords.enuToEcef", () => {
|
||||
});
|
||||
|
||||
it("should convert to ENU position at origin to ECEF X-value", () => {
|
||||
let ref: ILatLonAlt = { alt: 0, lat: 0, lon: 0 };
|
||||
let ref: LatLonAltEnt = { alt: 0, lat: 0, lon: 0 };
|
||||
let enu: number[] = [0, 0, 0];
|
||||
|
||||
let ecef: number[] = geoCoords.enuToEcef(enu[0], enu[1], enu[2], ref.lat, ref.lon, ref.alt);
|
||||
@ -251,7 +251,7 @@ describe("GeoCoords.enuToEcef", () => {
|
||||
});
|
||||
|
||||
it("should convert to ENU position with up value to ECEF X-value", () => {
|
||||
let ref: ILatLonAlt = { alt: 0, lat: 0, lon: 0 };
|
||||
let ref: LatLonAltEnt = { alt: 0, lat: 0, lon: 0 };
|
||||
let enu: number[] = [0, 0, 7.3823847239847];
|
||||
|
||||
let ecef: number[] = geoCoords.enuToEcef(enu[0], enu[1], enu[2], ref.lat, ref.lon, ref.alt);
|
||||
@ -262,7 +262,7 @@ describe("GeoCoords.enuToEcef", () => {
|
||||
});
|
||||
|
||||
it("should convert ECEF position with translation to correct ENU position", () => {
|
||||
let ref: ILatLonAlt = { alt: 0, lat: 0, lon: 0 };
|
||||
let ref: LatLonAltEnt = { alt: 0, lat: 0, lon: 0 };
|
||||
|
||||
let translation: number = -2.34875843758493;
|
||||
let enu: number[] = [translation, translation, 0];
|
||||
@ -283,8 +283,8 @@ describe("GeoCoords.geodeticToEnu", () => {
|
||||
});
|
||||
|
||||
it("should convert to ENU position at origin when lla is at reference", () => {
|
||||
let ref: ILatLonAlt = { alt: 12.523892390, lat: 12.9450823, lon: 133.34589734 };
|
||||
let lla: ILatLonAlt = { alt: ref.alt, lat: ref.lat, lon: ref.lon };
|
||||
let ref: LatLonAltEnt = { alt: 12.523892390, lat: 12.9450823, lon: 133.34589734 };
|
||||
let lla: LatLonAltEnt = { alt: ref.alt, lat: ref.lat, lon: ref.lon };
|
||||
|
||||
let enu: number[] = geoCoords.geodeticToEnu(lla.lat, lla.lon, lla.alt, ref.lat, ref.lon, ref.alt);
|
||||
|
||||
@ -294,10 +294,10 @@ describe("GeoCoords.geodeticToEnu", () => {
|
||||
});
|
||||
|
||||
it("should convert to ENU z value corresponding to diff with reference lla", () => {
|
||||
let ref: ILatLonAlt = { alt: 12.523892390, lat: 12.9450823, lon: 133.34589734 };
|
||||
let ref: LatLonAltEnt = { alt: 12.523892390, lat: 12.9450823, lon: 133.34589734 };
|
||||
|
||||
let altTranslation: number = 4.4556433242;
|
||||
let lla: ILatLonAlt = { alt: ref.alt + altTranslation, lat: ref.lat, lon: ref.lon };
|
||||
let lla: LatLonAltEnt = { alt: ref.alt + altTranslation, lat: ref.lat, lon: ref.lon };
|
||||
|
||||
let enu: number[] = geoCoords.geodeticToEnu(lla.lat, lla.lon, lla.alt, ref.lat, ref.lon, ref.alt);
|
||||
|
||||
@ -307,8 +307,8 @@ describe("GeoCoords.geodeticToEnu", () => {
|
||||
});
|
||||
|
||||
it("should convert back and forth between WGS84 and ENU and correspond", () => {
|
||||
let ref: ILatLonAlt = { alt: -3.645563324, lat: 13.469889789, lon: 92.376689734 };
|
||||
let lla: ILatLonAlt = { alt: ref.alt + 20, lat: ref.lat - 0.01, lon: ref.lon + 0.01 };
|
||||
let ref: LatLonAltEnt = { alt: -3.645563324, lat: 13.469889789, lon: 92.376689734 };
|
||||
let lla: LatLonAltEnt = { alt: ref.alt + 20, lat: ref.lat - 0.01, lon: ref.lon + 0.01 };
|
||||
|
||||
let enu: number[] = geoCoords.geodeticToEnu(lla.lat, lla.lon, lla.alt, ref.lat, ref.lon, ref.alt);
|
||||
let reLla: number[] = geoCoords.enuToGeodetic(enu[0], enu[1], enu[2], ref.lat, ref.lon, ref.alt);
|
||||
@ -327,7 +327,7 @@ describe("GeoCoords.enuToGeodetic", () => {
|
||||
});
|
||||
|
||||
it("should convert to reference WGS84 when ENU position is origin", () => {
|
||||
let ref: ILatLonAlt = { alt: 12.523892390, lat: 12.9450823, lon: 133.34589734 };
|
||||
let ref: LatLonAltEnt = { alt: 12.523892390, lat: 12.9450823, lon: 133.34589734 };
|
||||
let enu: number[] = [0, 0, 0];
|
||||
|
||||
let lla: number[] = geoCoords.enuToGeodetic(enu[0], enu[1], enu[2], ref.lat, ref.lon, ref.alt);
|
||||
@ -338,7 +338,7 @@ describe("GeoCoords.enuToGeodetic", () => {
|
||||
});
|
||||
|
||||
it("should convert to reference WGS84 at correct altitude when ENU position has non zero z value", () => {
|
||||
let ref: ILatLonAlt = { alt: 12.523892390, lat: 12.9450823, lon: 133.34589734 };
|
||||
let ref: LatLonAltEnt = { alt: 12.523892390, lat: 12.9450823, lon: 133.34589734 };
|
||||
let enu: number[] = [0, 0, 5.234872384927];
|
||||
|
||||
let lla: number[] = geoCoords.enuToGeodetic(enu[0], enu[1], enu[2], ref.lat, ref.lon, ref.alt);
|
||||
@ -349,7 +349,7 @@ describe("GeoCoords.enuToGeodetic", () => {
|
||||
});
|
||||
|
||||
it("should convert back and forth between ENU and WGS84 and correspond", () => {
|
||||
let ref: ILatLonAlt = { alt: 7.34543543, lat: -52.469889789, lon: -113.34589734 };
|
||||
let ref: LatLonAltEnt = { alt: 7.34543543, lat: -52.469889789, lon: -113.34589734 };
|
||||
let enu: number[] = [12.435534543, -55.34242121, 5.98023489];
|
||||
|
||||
let lla: number[] = geoCoords.enuToGeodetic(enu[0], enu[1], enu[2], ref.lat, ref.lon, ref.alt);
|
||||
|
||||
@ -5,7 +5,7 @@ import { GeoHelper } from "../helper/GeoHelper";
|
||||
|
||||
import { Node } from "../../src/graph/Node";
|
||||
import { Transform } from "../../src/geo/Transform";
|
||||
import { IFillNode } from "../../src/api/interfaces/IFillNode";
|
||||
import { SpatialImageEnt } from "../../src/api/ents/SpatialImageEnt";
|
||||
|
||||
|
||||
describe("Transform.rt", () => {
|
||||
@ -22,7 +22,7 @@ describe("Transform.rt", () => {
|
||||
let t: number[] = [0, 0, 0];
|
||||
|
||||
let node: Node = new Node(helper.createCoreNode());
|
||||
let fillNode: IFillNode = helper.createFillNode();
|
||||
let fillNode: SpatialImageEnt = helper.createFillNode();
|
||||
fillNode.c_rotation = r;
|
||||
node.makeFull(fillNode);
|
||||
|
||||
@ -64,7 +64,7 @@ describe("Transform.rt", () => {
|
||||
let t: number[] = [0, 0, 0];
|
||||
|
||||
let node: Node = new Node(helper.createCoreNode());
|
||||
let fillNode: IFillNode = helper.createFillNode();
|
||||
let fillNode: SpatialImageEnt = helper.createFillNode();
|
||||
fillNode.c_rotation = r;
|
||||
node.makeFull(fillNode);
|
||||
|
||||
@ -106,7 +106,7 @@ describe("Transform.rt", () => {
|
||||
let t: number[] = [0, 0, 0];
|
||||
|
||||
let node: Node = new Node(helper.createCoreNode());
|
||||
let fillNode: IFillNode = helper.createFillNode();
|
||||
let fillNode: SpatialImageEnt = helper.createFillNode();
|
||||
fillNode.c_rotation = r;
|
||||
node.makeFull(fillNode);
|
||||
|
||||
@ -148,7 +148,7 @@ describe("Transform.rt", () => {
|
||||
let t: number[] = [10, 20, 30];
|
||||
|
||||
let node: Node = new Node(helper.createCoreNode());
|
||||
let fillNode: IFillNode = helper.createFillNode();
|
||||
let fillNode: SpatialImageEnt = helper.createFillNode();
|
||||
fillNode.c_rotation = r;
|
||||
node.makeFull(fillNode);
|
||||
|
||||
@ -200,7 +200,7 @@ describe("Transform.srt", () => {
|
||||
let t: number[] = [0, 0, 0];
|
||||
|
||||
let node: Node = new Node(helper.createCoreNode());
|
||||
let fillNode: IFillNode = helper.createFillNode();
|
||||
let fillNode: SpatialImageEnt = helper.createFillNode();
|
||||
fillNode.atomic_scale = 1;
|
||||
fillNode.c_rotation = r;
|
||||
node.makeFull(fillNode);
|
||||
@ -243,7 +243,7 @@ describe("Transform.srt", () => {
|
||||
let t: number[] = [0, 0, 0];
|
||||
|
||||
let node: Node = new Node(helper.createCoreNode());
|
||||
let fillNode: IFillNode = helper.createFillNode();
|
||||
let fillNode: SpatialImageEnt = helper.createFillNode();
|
||||
fillNode.atomic_scale = 3;
|
||||
fillNode.c_rotation = r;
|
||||
node.makeFull(fillNode);
|
||||
@ -286,7 +286,7 @@ describe("Transform.srt", () => {
|
||||
let t: number[] = [-10, 20, -30];
|
||||
|
||||
let node: Node = new Node(helper.createCoreNode());
|
||||
let fillNode: IFillNode = helper.createFillNode();
|
||||
let fillNode: SpatialImageEnt = helper.createFillNode();
|
||||
fillNode.atomic_scale = 0.5;
|
||||
fillNode.c_rotation = r;
|
||||
node.makeFull(fillNode);
|
||||
@ -338,7 +338,7 @@ describe("Transform.basicWidth", () => {
|
||||
let t: number[] = [0, 0, 0];
|
||||
|
||||
let node: Node = new Node(helper.createCoreNode());
|
||||
let fillNode: IFillNode = helper.createFillNode();
|
||||
let fillNode: SpatialImageEnt = helper.createFillNode();
|
||||
fillNode.width = width;
|
||||
fillNode.orientation = 1;
|
||||
node.makeFull(fillNode);
|
||||
@ -362,7 +362,7 @@ describe("Transform.basicWidth", () => {
|
||||
let t: number[] = [0, 0, 0];
|
||||
|
||||
let node: Node = new Node(helper.createCoreNode());
|
||||
let fillNode: IFillNode = helper.createFillNode();
|
||||
let fillNode: SpatialImageEnt = helper.createFillNode();
|
||||
fillNode.height = height;
|
||||
fillNode.orientation = 5;
|
||||
node.makeFull(fillNode);
|
||||
@ -394,7 +394,7 @@ describe("Transform.basicHeight", () => {
|
||||
let t: number[] = [0, 0, 0];
|
||||
|
||||
let node: Node = new Node(helper.createCoreNode());
|
||||
let fillNode: IFillNode = helper.createFillNode();
|
||||
let fillNode: SpatialImageEnt = helper.createFillNode();
|
||||
fillNode.height = height;
|
||||
fillNode.orientation = 1;
|
||||
node.makeFull(fillNode);
|
||||
@ -418,7 +418,7 @@ describe("Transform.basicHeight", () => {
|
||||
let t: number[] = [0, 0, 0];
|
||||
|
||||
let node: Node = new Node(helper.createCoreNode());
|
||||
let fillNode: IFillNode = helper.createFillNode();
|
||||
let fillNode: SpatialImageEnt = helper.createFillNode();
|
||||
fillNode.width = width;
|
||||
fillNode.orientation = 5;
|
||||
node.makeFull(fillNode);
|
||||
@ -449,7 +449,7 @@ describe("Transform.width", () => {
|
||||
|
||||
let node: Node = new Node(helper.createCoreNode());
|
||||
|
||||
const fillNode: IFillNode = helper.createFillNode();
|
||||
const fillNode: SpatialImageEnt = helper.createFillNode();
|
||||
fillNode.width = 0;
|
||||
node.makeFull(fillNode);
|
||||
|
||||
@ -472,7 +472,7 @@ describe("Transform.width", () => {
|
||||
let t: number[] = [0, 0, 0];
|
||||
|
||||
let node: Node = new Node(helper.createCoreNode());
|
||||
let fillNode: IFillNode = helper.createFillNode();
|
||||
let fillNode: SpatialImageEnt = helper.createFillNode();
|
||||
fillNode.width = width;
|
||||
node.makeFull(fillNode);
|
||||
|
||||
@ -501,7 +501,7 @@ describe("Transform.height", () => {
|
||||
let t: number[] = [0, 0, 0];
|
||||
|
||||
let node: Node = new Node(helper.createCoreNode());
|
||||
let fillNode: IFillNode = helper.createFillNode();
|
||||
let fillNode: SpatialImageEnt = helper.createFillNode();
|
||||
fillNode.height = -1;
|
||||
fillNode.orientation = 1;
|
||||
node.makeFull(fillNode);
|
||||
@ -525,7 +525,7 @@ describe("Transform.height", () => {
|
||||
let t: number[] = [0, 0, 0];
|
||||
|
||||
let node: Node = new Node(helper.createCoreNode());
|
||||
let fillNode: IFillNode = helper.createFillNode();
|
||||
let fillNode: SpatialImageEnt = helper.createFillNode();
|
||||
fillNode.height = height;
|
||||
fillNode.orientation = 1;
|
||||
node.makeFull(fillNode);
|
||||
@ -555,7 +555,7 @@ describe("Transform.focal", () => {
|
||||
let t: number[] = [0, 0, 0];
|
||||
|
||||
let node: Node = new Node(helper.createCoreNode());
|
||||
let fillNode: IFillNode = helper.createFillNode();
|
||||
let fillNode: SpatialImageEnt = helper.createFillNode();
|
||||
node.makeFull(fillNode);
|
||||
|
||||
let transform: Transform = new Transform(
|
||||
@ -577,7 +577,7 @@ describe("Transform.focal", () => {
|
||||
let t: number[] = [0, 0, 0];
|
||||
|
||||
let node: Node = new Node(helper.createCoreNode());
|
||||
let fillNode: IFillNode = helper.createFillNode();
|
||||
let fillNode: SpatialImageEnt = helper.createFillNode();
|
||||
fillNode.cfocal = focal;
|
||||
node.makeFull(fillNode);
|
||||
|
||||
@ -606,7 +606,7 @@ describe("Transform.orientation", () => {
|
||||
let t: number[] = [0, 0, 0];
|
||||
|
||||
let node: Node = new Node(helper.createCoreNode());
|
||||
let fillNode: IFillNode = helper.createFillNode();
|
||||
let fillNode: SpatialImageEnt = helper.createFillNode();
|
||||
node.makeFull(fillNode);
|
||||
|
||||
let transform: Transform = new Transform(
|
||||
@ -628,7 +628,7 @@ describe("Transform.orientation", () => {
|
||||
let t: number[] = [0, 0, 0];
|
||||
|
||||
let node: Node = new Node(helper.createCoreNode());
|
||||
let fillNode: IFillNode = helper.createFillNode();
|
||||
let fillNode: SpatialImageEnt = helper.createFillNode();
|
||||
fillNode.orientation = 3;
|
||||
node.makeFull(fillNode);
|
||||
|
||||
@ -678,7 +678,7 @@ describe("Transform.scale", () => {
|
||||
let t: number[] = [0, 0, 0];
|
||||
|
||||
let node: Node = new Node(helper.createCoreNode());
|
||||
let fillNode: IFillNode = helper.createFillNode();
|
||||
let fillNode: SpatialImageEnt = helper.createFillNode();
|
||||
fillNode.atomic_scale = 0.4;
|
||||
node.makeFull(fillNode);
|
||||
|
||||
@ -759,7 +759,7 @@ describe("Transform.unprojectSfM", () => {
|
||||
let t: number[] = geoHelper.getTranslation(r, C);
|
||||
|
||||
let node: Node = new Node(helper.createCoreNode());
|
||||
let fillNode: IFillNode = helper.createFillNode();
|
||||
let fillNode: SpatialImageEnt = helper.createFillNode();
|
||||
fillNode.c_rotation = r;
|
||||
node.makeFull(fillNode);
|
||||
|
||||
@ -809,7 +809,7 @@ describe("Transform.unprojectSfM", () => {
|
||||
let t: number[] = [0, 0, 0];
|
||||
|
||||
let node: Node = new Node(helper.createCoreNode());
|
||||
let fillNode: IFillNode = helper.createFillNode();
|
||||
let fillNode: SpatialImageEnt = helper.createFillNode();
|
||||
fillNode.c_rotation = r;
|
||||
node.makeFull(fillNode);
|
||||
|
||||
@ -899,7 +899,7 @@ describe("Transform.unprojectBasic", () => {
|
||||
let t: number[] = [10, 20, 30];
|
||||
|
||||
let node: Node = new Node(helper.createCoreNode());
|
||||
let fillNode: IFillNode = helper.createFillNode();
|
||||
let fillNode: SpatialImageEnt = helper.createFillNode();
|
||||
fillNode.c_rotation = [0.1, 0.2, 0.3];
|
||||
fillNode.orientation = 1;
|
||||
node.makeFull(fillNode);
|
||||
@ -928,7 +928,7 @@ describe("Transform.unprojectBasic", () => {
|
||||
let t: number[] = [10, 20, 30];
|
||||
|
||||
let node: Node = new Node(helper.createCoreNode());
|
||||
let fillNode: IFillNode = helper.createFillNode();
|
||||
let fillNode: SpatialImageEnt = helper.createFillNode();
|
||||
fillNode.c_rotation = [0.1, 0.2, 0.3];
|
||||
fillNode.orientation = 3;
|
||||
node.makeFull(fillNode);
|
||||
@ -957,7 +957,7 @@ describe("Transform.unprojectBasic", () => {
|
||||
let t: number[] = [10, 20, 30];
|
||||
|
||||
let node: Node = new Node(helper.createCoreNode());
|
||||
let fillNode: IFillNode = helper.createFillNode();
|
||||
let fillNode: SpatialImageEnt = helper.createFillNode();
|
||||
fillNode.c_rotation = [0.1, 0.2, 0.3];
|
||||
fillNode.orientation = 6;
|
||||
node.makeFull(fillNode);
|
||||
@ -986,7 +986,7 @@ describe("Transform.unprojectBasic", () => {
|
||||
let t: number[] = [10, 20, 30];
|
||||
|
||||
let node: Node = new Node(helper.createCoreNode());
|
||||
let fillNode: IFillNode = helper.createFillNode();
|
||||
let fillNode: SpatialImageEnt = helper.createFillNode();
|
||||
fillNode.c_rotation = [0.1, 0.2, 0.3];
|
||||
fillNode.orientation = 8;
|
||||
node.makeFull(fillNode);
|
||||
@ -1015,7 +1015,7 @@ describe("Transform.unprojectBasic", () => {
|
||||
let t: number[] = [5, 15, 2];
|
||||
|
||||
let node: Node = new Node(helper.createCoreNode());
|
||||
let fillNode: IFillNode = helper.createFillNode();
|
||||
let fillNode: SpatialImageEnt = helper.createFillNode();
|
||||
fillNode.c_rotation = [0.5, -0.2, 0.3];
|
||||
fillNode.camera_projection_type = "equirectangular";
|
||||
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
import { NodeHelper } from "../helper/NodeHelper";
|
||||
import { Node } from "../../src/graph/Node";
|
||||
import { ICoreNode } from "../../src/api/interfaces/ICoreNode";
|
||||
import { IFillNode } from "../../src/api/interfaces/IFillNode";
|
||||
import { CoreImageEnt } from "../../src/api/ents/CoreImageEnt";
|
||||
import { SpatialImageEnt } from "../../src/api/ents/SpatialImageEnt";
|
||||
import { FilterCreator, FilterFunction } from "../../src/graph/FilterCreator";
|
||||
|
||||
/**
|
||||
@ -28,10 +28,10 @@ describe("FilterCreator.createFilter", () => {
|
||||
let sequenceKey: string = "skey";
|
||||
let filter: FilterFunction = creator.createFilter(["==", "sequenceKey", sequenceKey]);
|
||||
|
||||
let coreNode1: ICoreNode = helper.createCoreNode();
|
||||
let coreNode2: ICoreNode = helper.createCoreNode();
|
||||
let coreNode3: ICoreNode = helper.createCoreNode();
|
||||
let coreNode4: ICoreNode = helper.createCoreNode();
|
||||
let coreNode1: CoreImageEnt = helper.createCoreNode();
|
||||
let coreNode2: CoreImageEnt = helper.createCoreNode();
|
||||
let coreNode3: CoreImageEnt = helper.createCoreNode();
|
||||
let coreNode4: CoreImageEnt = helper.createCoreNode();
|
||||
|
||||
coreNode1.sequence_key = sequenceKey;
|
||||
coreNode2.sequence_key = sequenceKey + "w";
|
||||
@ -60,10 +60,10 @@ describe("FilterCreator.createFilter", () => {
|
||||
let node3: Node = new Node(helper.createCoreNode());
|
||||
let node4: Node = new Node(helper.createCoreNode());
|
||||
|
||||
let fillNode1: IFillNode = helper.createFillNode();
|
||||
let fillNode2: IFillNode = helper.createFillNode();
|
||||
let fillNode3: IFillNode = helper.createFillNode();
|
||||
let fillNode4: IFillNode = helper.createFillNode();
|
||||
let fillNode1: SpatialImageEnt = helper.createFillNode();
|
||||
let fillNode2: SpatialImageEnt = helper.createFillNode();
|
||||
let fillNode3: SpatialImageEnt = helper.createFillNode();
|
||||
let fillNode4: SpatialImageEnt = helper.createFillNode();
|
||||
|
||||
fillNode1.captured_at = capturedAt;
|
||||
fillNode2.captured_at = capturedAt + 1;
|
||||
@ -91,10 +91,10 @@ describe("FilterCreator.createFilter", () => {
|
||||
let node3: Node = new Node(helper.createCoreNode());
|
||||
let node4: Node = new Node(helper.createCoreNode());
|
||||
|
||||
let fillNode1: IFillNode = helper.createFillNode();
|
||||
let fillNode2: IFillNode = helper.createFillNode();
|
||||
let fillNode3: IFillNode = helper.createFillNode();
|
||||
let fillNode4: IFillNode = helper.createFillNode();
|
||||
let fillNode1: SpatialImageEnt = helper.createFillNode();
|
||||
let fillNode2: SpatialImageEnt = helper.createFillNode();
|
||||
let fillNode3: SpatialImageEnt = helper.createFillNode();
|
||||
let fillNode4: SpatialImageEnt = helper.createFillNode();
|
||||
|
||||
fillNode1.user.key = null;
|
||||
fillNode2.user.key = "ukey";
|
||||
@ -126,10 +126,10 @@ describe("FilterCreator.createFilter", () => {
|
||||
let sequenceKey: string = "skey";
|
||||
let filter: FilterFunction = creator.createFilter(["!=", "sequenceKey", sequenceKey]);
|
||||
|
||||
let coreNode1: ICoreNode = helper.createCoreNode();
|
||||
let coreNode2: ICoreNode = helper.createCoreNode();
|
||||
let coreNode3: ICoreNode = helper.createCoreNode();
|
||||
let coreNode4: ICoreNode = helper.createCoreNode();
|
||||
let coreNode1: CoreImageEnt = helper.createCoreNode();
|
||||
let coreNode2: CoreImageEnt = helper.createCoreNode();
|
||||
let coreNode3: CoreImageEnt = helper.createCoreNode();
|
||||
let coreNode4: CoreImageEnt = helper.createCoreNode();
|
||||
|
||||
coreNode1.sequence_key = sequenceKey;
|
||||
coreNode2.sequence_key = sequenceKey + "w";
|
||||
@ -158,10 +158,10 @@ describe("FilterCreator.createFilter", () => {
|
||||
let node3: Node = new Node(helper.createCoreNode());
|
||||
let node4: Node = new Node(helper.createCoreNode());
|
||||
|
||||
let fillNode1: IFillNode = helper.createFillNode();
|
||||
let fillNode2: IFillNode = helper.createFillNode();
|
||||
let fillNode3: IFillNode = helper.createFillNode();
|
||||
let fillNode4: IFillNode = helper.createFillNode();
|
||||
let fillNode1: SpatialImageEnt = helper.createFillNode();
|
||||
let fillNode2: SpatialImageEnt = helper.createFillNode();
|
||||
let fillNode3: SpatialImageEnt = helper.createFillNode();
|
||||
let fillNode4: SpatialImageEnt = helper.createFillNode();
|
||||
|
||||
fillNode1.captured_at = capturedAt;
|
||||
fillNode2.captured_at = capturedAt + 1;
|
||||
@ -189,10 +189,10 @@ describe("FilterCreator.createFilter", () => {
|
||||
let node3: Node = new Node(helper.createCoreNode());
|
||||
let node4: Node = new Node(helper.createCoreNode());
|
||||
|
||||
let fillNode1: IFillNode = helper.createFillNode();
|
||||
let fillNode2: IFillNode = helper.createFillNode();
|
||||
let fillNode3: IFillNode = helper.createFillNode();
|
||||
let fillNode4: IFillNode = helper.createFillNode();
|
||||
let fillNode1: SpatialImageEnt = helper.createFillNode();
|
||||
let fillNode2: SpatialImageEnt = helper.createFillNode();
|
||||
let fillNode3: SpatialImageEnt = helper.createFillNode();
|
||||
let fillNode4: SpatialImageEnt = helper.createFillNode();
|
||||
|
||||
fillNode1.user.key = null;
|
||||
fillNode2.user.key = "ukey";
|
||||
@ -230,11 +230,11 @@ describe("FilterCreator.createFilter", () => {
|
||||
let node4: Node = new Node(helper.createCoreNode());
|
||||
let node5: Node = new Node(helper.createCoreNode());
|
||||
|
||||
let fillNode1: IFillNode = helper.createFillNode();
|
||||
let fillNode2: IFillNode = helper.createFillNode();
|
||||
let fillNode3: IFillNode = helper.createFillNode();
|
||||
let fillNode4: IFillNode = helper.createFillNode();
|
||||
let fillNode5: IFillNode = helper.createFillNode();
|
||||
let fillNode1: SpatialImageEnt = helper.createFillNode();
|
||||
let fillNode2: SpatialImageEnt = helper.createFillNode();
|
||||
let fillNode3: SpatialImageEnt = helper.createFillNode();
|
||||
let fillNode4: SpatialImageEnt = helper.createFillNode();
|
||||
let fillNode5: SpatialImageEnt = helper.createFillNode();
|
||||
|
||||
fillNode1.captured_at = capturedAt - 1;
|
||||
fillNode2.captured_at = capturedAt;
|
||||
@ -261,11 +261,11 @@ describe("FilterCreator.createFilter", () => {
|
||||
let sequenceKey: string = "0";
|
||||
let filter: FilterFunction = creator.createFilter([">", "sequenceKey", sequenceKey]);
|
||||
|
||||
let coreNode1: ICoreNode = helper.createCoreNode();
|
||||
let coreNode2: ICoreNode = helper.createCoreNode();
|
||||
let coreNode3: ICoreNode = helper.createCoreNode();
|
||||
let coreNode4: ICoreNode = helper.createCoreNode();
|
||||
let coreNode5: ICoreNode = helper.createCoreNode();
|
||||
let coreNode1: CoreImageEnt = helper.createCoreNode();
|
||||
let coreNode2: CoreImageEnt = helper.createCoreNode();
|
||||
let coreNode3: CoreImageEnt = helper.createCoreNode();
|
||||
let coreNode4: CoreImageEnt = helper.createCoreNode();
|
||||
let coreNode5: CoreImageEnt = helper.createCoreNode();
|
||||
|
||||
coreNode1.sequence_key = "-1";
|
||||
coreNode2.sequence_key = sequenceKey;
|
||||
@ -306,11 +306,11 @@ describe("FilterCreator.createFilter", () => {
|
||||
let node4: Node = new Node(helper.createCoreNode());
|
||||
let node5: Node = new Node(helper.createCoreNode());
|
||||
|
||||
let fillNode1: IFillNode = helper.createFillNode();
|
||||
let fillNode2: IFillNode = helper.createFillNode();
|
||||
let fillNode3: IFillNode = helper.createFillNode();
|
||||
let fillNode4: IFillNode = helper.createFillNode();
|
||||
let fillNode5: IFillNode = helper.createFillNode();
|
||||
let fillNode1: SpatialImageEnt = helper.createFillNode();
|
||||
let fillNode2: SpatialImageEnt = helper.createFillNode();
|
||||
let fillNode3: SpatialImageEnt = helper.createFillNode();
|
||||
let fillNode4: SpatialImageEnt = helper.createFillNode();
|
||||
let fillNode5: SpatialImageEnt = helper.createFillNode();
|
||||
|
||||
fillNode1.captured_at = capturedAt - 1;
|
||||
fillNode2.captured_at = capturedAt;
|
||||
@ -337,11 +337,11 @@ describe("FilterCreator.createFilter", () => {
|
||||
let sequenceKey: string = "0";
|
||||
let filter: FilterFunction = creator.createFilter([">=", "sequenceKey", sequenceKey]);
|
||||
|
||||
let coreNode1: ICoreNode = helper.createCoreNode();
|
||||
let coreNode2: ICoreNode = helper.createCoreNode();
|
||||
let coreNode3: ICoreNode = helper.createCoreNode();
|
||||
let coreNode4: ICoreNode = helper.createCoreNode();
|
||||
let coreNode5: ICoreNode = helper.createCoreNode();
|
||||
let coreNode1: CoreImageEnt = helper.createCoreNode();
|
||||
let coreNode2: CoreImageEnt = helper.createCoreNode();
|
||||
let coreNode3: CoreImageEnt = helper.createCoreNode();
|
||||
let coreNode4: CoreImageEnt = helper.createCoreNode();
|
||||
let coreNode5: CoreImageEnt = helper.createCoreNode();
|
||||
|
||||
coreNode1.sequence_key = "-1";
|
||||
coreNode2.sequence_key = sequenceKey;
|
||||
@ -382,11 +382,11 @@ describe("FilterCreator.createFilter", () => {
|
||||
let node4: Node = new Node(helper.createCoreNode());
|
||||
let node5: Node = new Node(helper.createCoreNode());
|
||||
|
||||
let fillNode1: IFillNode = helper.createFillNode();
|
||||
let fillNode2: IFillNode = helper.createFillNode();
|
||||
let fillNode3: IFillNode = helper.createFillNode();
|
||||
let fillNode4: IFillNode = helper.createFillNode();
|
||||
let fillNode5: IFillNode = helper.createFillNode();
|
||||
let fillNode1: SpatialImageEnt = helper.createFillNode();
|
||||
let fillNode2: SpatialImageEnt = helper.createFillNode();
|
||||
let fillNode3: SpatialImageEnt = helper.createFillNode();
|
||||
let fillNode4: SpatialImageEnt = helper.createFillNode();
|
||||
let fillNode5: SpatialImageEnt = helper.createFillNode();
|
||||
|
||||
fillNode1.captured_at = capturedAt - 1;
|
||||
fillNode2.captured_at = capturedAt;
|
||||
@ -413,11 +413,11 @@ describe("FilterCreator.createFilter", () => {
|
||||
let sequenceKey: string = "0";
|
||||
let filter: FilterFunction = creator.createFilter(["<", "sequenceKey", sequenceKey]);
|
||||
|
||||
let coreNode1: ICoreNode = helper.createCoreNode();
|
||||
let coreNode2: ICoreNode = helper.createCoreNode();
|
||||
let coreNode3: ICoreNode = helper.createCoreNode();
|
||||
let coreNode4: ICoreNode = helper.createCoreNode();
|
||||
let coreNode5: ICoreNode = helper.createCoreNode();
|
||||
let coreNode1: CoreImageEnt = helper.createCoreNode();
|
||||
let coreNode2: CoreImageEnt = helper.createCoreNode();
|
||||
let coreNode3: CoreImageEnt = helper.createCoreNode();
|
||||
let coreNode4: CoreImageEnt = helper.createCoreNode();
|
||||
let coreNode5: CoreImageEnt = helper.createCoreNode();
|
||||
|
||||
coreNode1.sequence_key = "-1";
|
||||
coreNode2.sequence_key = sequenceKey;
|
||||
@ -458,11 +458,11 @@ describe("FilterCreator.createFilter", () => {
|
||||
let node4: Node = new Node(helper.createCoreNode());
|
||||
let node5: Node = new Node(helper.createCoreNode());
|
||||
|
||||
let fillNode1: IFillNode = helper.createFillNode();
|
||||
let fillNode2: IFillNode = helper.createFillNode();
|
||||
let fillNode3: IFillNode = helper.createFillNode();
|
||||
let fillNode4: IFillNode = helper.createFillNode();
|
||||
let fillNode5: IFillNode = helper.createFillNode();
|
||||
let fillNode1: SpatialImageEnt = helper.createFillNode();
|
||||
let fillNode2: SpatialImageEnt = helper.createFillNode();
|
||||
let fillNode3: SpatialImageEnt = helper.createFillNode();
|
||||
let fillNode4: SpatialImageEnt = helper.createFillNode();
|
||||
let fillNode5: SpatialImageEnt = helper.createFillNode();
|
||||
|
||||
fillNode1.captured_at = capturedAt - 1;
|
||||
fillNode2.captured_at = capturedAt;
|
||||
@ -489,11 +489,11 @@ describe("FilterCreator.createFilter", () => {
|
||||
let sequenceKey: string = "0";
|
||||
let filter: FilterFunction = creator.createFilter(["<=", "sequenceKey", sequenceKey]);
|
||||
|
||||
let coreNode1: ICoreNode = helper.createCoreNode();
|
||||
let coreNode2: ICoreNode = helper.createCoreNode();
|
||||
let coreNode3: ICoreNode = helper.createCoreNode();
|
||||
let coreNode4: ICoreNode = helper.createCoreNode();
|
||||
let coreNode5: ICoreNode = helper.createCoreNode();
|
||||
let coreNode1: CoreImageEnt = helper.createCoreNode();
|
||||
let coreNode2: CoreImageEnt = helper.createCoreNode();
|
||||
let coreNode3: CoreImageEnt = helper.createCoreNode();
|
||||
let coreNode4: CoreImageEnt = helper.createCoreNode();
|
||||
let coreNode5: CoreImageEnt = helper.createCoreNode();
|
||||
|
||||
coreNode1.sequence_key = "-1";
|
||||
coreNode2.sequence_key = sequenceKey;
|
||||
@ -534,11 +534,11 @@ describe("FilterCreator.createFilter", () => {
|
||||
let node4: Node = new Node(helper.createCoreNode());
|
||||
let node5: Node = new Node(helper.createCoreNode());
|
||||
|
||||
let fillNode1: IFillNode = helper.createFillNode();
|
||||
let fillNode2: IFillNode = helper.createFillNode();
|
||||
let fillNode3: IFillNode = helper.createFillNode();
|
||||
let fillNode4: IFillNode = helper.createFillNode();
|
||||
let fillNode5: IFillNode = helper.createFillNode();
|
||||
let fillNode1: SpatialImageEnt = helper.createFillNode();
|
||||
let fillNode2: SpatialImageEnt = helper.createFillNode();
|
||||
let fillNode3: SpatialImageEnt = helper.createFillNode();
|
||||
let fillNode4: SpatialImageEnt = helper.createFillNode();
|
||||
let fillNode5: SpatialImageEnt = helper.createFillNode();
|
||||
|
||||
fillNode1.captured_at = capturedAt - 1;
|
||||
fillNode2.captured_at = capturedAt;
|
||||
@ -565,11 +565,11 @@ describe("FilterCreator.createFilter", () => {
|
||||
let sequenceKey: string = "0";
|
||||
let filter: FilterFunction = creator.createFilter(["in", "sequenceKey", sequenceKey]);
|
||||
|
||||
let coreNode1: ICoreNode = helper.createCoreNode();
|
||||
let coreNode2: ICoreNode = helper.createCoreNode();
|
||||
let coreNode3: ICoreNode = helper.createCoreNode();
|
||||
let coreNode4: ICoreNode = helper.createCoreNode();
|
||||
let coreNode5: ICoreNode = helper.createCoreNode();
|
||||
let coreNode1: CoreImageEnt = helper.createCoreNode();
|
||||
let coreNode2: CoreImageEnt = helper.createCoreNode();
|
||||
let coreNode3: CoreImageEnt = helper.createCoreNode();
|
||||
let coreNode4: CoreImageEnt = helper.createCoreNode();
|
||||
let coreNode5: CoreImageEnt = helper.createCoreNode();
|
||||
|
||||
coreNode1.sequence_key = "-1";
|
||||
coreNode2.sequence_key = sequenceKey;
|
||||
@ -595,9 +595,9 @@ describe("FilterCreator.createFilter", () => {
|
||||
|
||||
let filter: FilterFunction = creator.createFilter(["in", "sequenceKey", null]);
|
||||
|
||||
let coreNode1: ICoreNode = helper.createCoreNode();
|
||||
let coreNode2: ICoreNode = helper.createCoreNode();
|
||||
let coreNode3: ICoreNode = helper.createCoreNode();
|
||||
let coreNode1: CoreImageEnt = helper.createCoreNode();
|
||||
let coreNode2: CoreImageEnt = helper.createCoreNode();
|
||||
let coreNode3: CoreImageEnt = helper.createCoreNode();
|
||||
|
||||
coreNode1.sequence_key = "1";
|
||||
coreNode2.sequence_key = null;
|
||||
@ -621,9 +621,9 @@ describe("FilterCreator.createFilter", () => {
|
||||
let node2: Node = new Node(helper.createCoreNode());
|
||||
let node3: Node = new Node(helper.createCoreNode());
|
||||
|
||||
let fillNode1: IFillNode = helper.createFillNode();
|
||||
let fillNode2: IFillNode = helper.createFillNode();
|
||||
let fillNode3: IFillNode = helper.createFillNode();
|
||||
let fillNode1: SpatialImageEnt = helper.createFillNode();
|
||||
let fillNode2: SpatialImageEnt = helper.createFillNode();
|
||||
let fillNode3: SpatialImageEnt = helper.createFillNode();
|
||||
|
||||
fillNode1.captured_at = 0;
|
||||
fillNode2.captured_at = 1;
|
||||
@ -651,10 +651,10 @@ describe("FilterCreator.createFilter", () => {
|
||||
let node3: Node = new Node(helper.createCoreNode());
|
||||
let node4: Node = new Node(helper.createCoreNode());
|
||||
|
||||
let fillNode1: IFillNode = helper.createFillNode();
|
||||
let fillNode2: IFillNode = helper.createFillNode();
|
||||
let fillNode3: IFillNode = helper.createFillNode();
|
||||
let fillNode4: IFillNode = helper.createFillNode();
|
||||
let fillNode1: SpatialImageEnt = helper.createFillNode();
|
||||
let fillNode2: SpatialImageEnt = helper.createFillNode();
|
||||
let fillNode3: SpatialImageEnt = helper.createFillNode();
|
||||
let fillNode4: SpatialImageEnt = helper.createFillNode();
|
||||
|
||||
fillNode1.captured_at = 0;
|
||||
fillNode2.captured_at = 1;
|
||||
@ -692,11 +692,11 @@ describe("FilterCreator.createFilter", () => {
|
||||
let node4: Node = new Node(helper.createCoreNode());
|
||||
let node5: Node = new Node(helper.createCoreNode());
|
||||
|
||||
let fillNode1: IFillNode = helper.createFillNode();
|
||||
let fillNode2: IFillNode = helper.createFillNode();
|
||||
let fillNode3: IFillNode = helper.createFillNode();
|
||||
let fillNode4: IFillNode = helper.createFillNode();
|
||||
let fillNode5: IFillNode = helper.createFillNode();
|
||||
let fillNode1: SpatialImageEnt = helper.createFillNode();
|
||||
let fillNode2: SpatialImageEnt = helper.createFillNode();
|
||||
let fillNode3: SpatialImageEnt = helper.createFillNode();
|
||||
let fillNode4: SpatialImageEnt = helper.createFillNode();
|
||||
let fillNode5: SpatialImageEnt = helper.createFillNode();
|
||||
|
||||
fillNode1.captured_at = capturedAt - 1;
|
||||
fillNode2.captured_at = capturedAt;
|
||||
@ -723,11 +723,11 @@ describe("FilterCreator.createFilter", () => {
|
||||
let sequenceKey: string = "0";
|
||||
let filter: FilterFunction = creator.createFilter(["!in", "sequenceKey", sequenceKey]);
|
||||
|
||||
let coreNode1: ICoreNode = helper.createCoreNode();
|
||||
let coreNode2: ICoreNode = helper.createCoreNode();
|
||||
let coreNode3: ICoreNode = helper.createCoreNode();
|
||||
let coreNode4: ICoreNode = helper.createCoreNode();
|
||||
let coreNode5: ICoreNode = helper.createCoreNode();
|
||||
let coreNode1: CoreImageEnt = helper.createCoreNode();
|
||||
let coreNode2: CoreImageEnt = helper.createCoreNode();
|
||||
let coreNode3: CoreImageEnt = helper.createCoreNode();
|
||||
let coreNode4: CoreImageEnt = helper.createCoreNode();
|
||||
let coreNode5: CoreImageEnt = helper.createCoreNode();
|
||||
|
||||
coreNode1.sequence_key = "-1";
|
||||
coreNode2.sequence_key = sequenceKey;
|
||||
@ -753,9 +753,9 @@ describe("FilterCreator.createFilter", () => {
|
||||
|
||||
let filter: FilterFunction = creator.createFilter(["!in", "sequenceKey", null]);
|
||||
|
||||
let coreNode1: ICoreNode = helper.createCoreNode();
|
||||
let coreNode2: ICoreNode = helper.createCoreNode();
|
||||
let coreNode3: ICoreNode = helper.createCoreNode();
|
||||
let coreNode1: CoreImageEnt = helper.createCoreNode();
|
||||
let coreNode2: CoreImageEnt = helper.createCoreNode();
|
||||
let coreNode3: CoreImageEnt = helper.createCoreNode();
|
||||
|
||||
coreNode1.sequence_key = "1";
|
||||
coreNode2.sequence_key = null;
|
||||
@ -779,9 +779,9 @@ describe("FilterCreator.createFilter", () => {
|
||||
let node2: Node = new Node(helper.createCoreNode());
|
||||
let node3: Node = new Node(helper.createCoreNode());
|
||||
|
||||
let fillNode1: IFillNode = helper.createFillNode();
|
||||
let fillNode2: IFillNode = helper.createFillNode();
|
||||
let fillNode3: IFillNode = helper.createFillNode();
|
||||
let fillNode1: SpatialImageEnt = helper.createFillNode();
|
||||
let fillNode2: SpatialImageEnt = helper.createFillNode();
|
||||
let fillNode3: SpatialImageEnt = helper.createFillNode();
|
||||
|
||||
fillNode1.captured_at = 0;
|
||||
fillNode2.captured_at = 1;
|
||||
@ -809,10 +809,10 @@ describe("FilterCreator.createFilter", () => {
|
||||
let node3: Node = new Node(helper.createCoreNode());
|
||||
let node4: Node = new Node(helper.createCoreNode());
|
||||
|
||||
let fillNode1: IFillNode = helper.createFillNode();
|
||||
let fillNode2: IFillNode = helper.createFillNode();
|
||||
let fillNode3: IFillNode = helper.createFillNode();
|
||||
let fillNode4: IFillNode = helper.createFillNode();
|
||||
let fillNode1: SpatialImageEnt = helper.createFillNode();
|
||||
let fillNode2: SpatialImageEnt = helper.createFillNode();
|
||||
let fillNode3: SpatialImageEnt = helper.createFillNode();
|
||||
let fillNode4: SpatialImageEnt = helper.createFillNode();
|
||||
|
||||
fillNode1.captured_at = 0;
|
||||
fillNode2.captured_at = 1;
|
||||
@ -842,7 +842,7 @@ describe("FilterCreator.createFilter", () => {
|
||||
let creator: FilterCreator = new FilterCreator();
|
||||
|
||||
let node: Node = new Node(helper.createCoreNode());
|
||||
let fillNode: IFillNode = helper.createFillNode();
|
||||
let fillNode: SpatialImageEnt = helper.createFillNode();
|
||||
fillNode.captured_at = 1;
|
||||
node.makeFull(fillNode);
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -1,4 +1,4 @@
|
||||
import { ILatLon } from "../../src/api/interfaces/ILatLon";
|
||||
import { LatLonEnt } from "../../src/api/ents/LatLonEnt";
|
||||
import { GeoCoords } from "../../src/geo/GeoCoords";
|
||||
import { GraphCalculator } from "../../src/graph/GraphCalculator";
|
||||
|
||||
@ -22,7 +22,7 @@ describe("GraphCalculator.boundingBoxCorners", () => {
|
||||
let calculator: GraphCalculator = new GraphCalculator(geoCoords);
|
||||
|
||||
let threshold: number = 1;
|
||||
let bbox: [ILatLon, ILatLon] = calculator.boundingBoxCorners({ lat: 0, lon: 0 }, threshold);
|
||||
let bbox: [LatLonEnt, LatLonEnt] = calculator.boundingBoxCorners({ lat: 0, lon: 0 }, threshold);
|
||||
|
||||
expect(bbox.length).toBe(2);
|
||||
expect(bbox[0].lat).toBe(-1);
|
||||
|
||||
@ -17,11 +17,11 @@ import { NodeHelper } from "../helper/NodeHelper";
|
||||
|
||||
import { Node } from "../../src/graph/Node";
|
||||
import { APIWrapper } from "../../src/api/APIWrapper";
|
||||
import { ICoreNode } from "../../src/api/interfaces/ICoreNode";
|
||||
import { CoreImageEnt } from "../../src/api/ents/CoreImageEnt";
|
||||
import { Graph } from "../../src/graph/Graph";
|
||||
import { GraphMode } from "../../src/graph/GraphMode";
|
||||
import { GraphService } from "../../src/graph/GraphService";
|
||||
import { IEdgeStatus } from "../../src/graph/interfaces/IEdgeStatus";
|
||||
import { NavigationEdgeStatus } from "../../src/graph/interfaces/NavigationEdgeStatus";
|
||||
import { Sequence } from "../../src/graph/Sequence";
|
||||
import { DataProvider } from "../helper/ProviderHelper";
|
||||
|
||||
@ -455,10 +455,10 @@ describe("GraphService.graphMode$", () => {
|
||||
|
||||
class TestNode extends Node {
|
||||
private _assetsCached: boolean;
|
||||
private _sequenceEdges: IEdgeStatus;
|
||||
private _spatialEdges: IEdgeStatus;
|
||||
private _sequenceEdges: NavigationEdgeStatus;
|
||||
private _spatialEdges: NavigationEdgeStatus;
|
||||
|
||||
constructor(core: ICoreNode) {
|
||||
constructor(core: CoreImageEnt) {
|
||||
super(core);
|
||||
|
||||
this._assetsCached = false;
|
||||
@ -474,11 +474,11 @@ class TestNode extends Node {
|
||||
this._assetsCached = value;
|
||||
}
|
||||
|
||||
public get sequenceEdges(): IEdgeStatus {
|
||||
public get sequenceEdges(): NavigationEdgeStatus {
|
||||
return this._sequenceEdges;
|
||||
}
|
||||
|
||||
public get spatialEdges(): IEdgeStatus {
|
||||
public get spatialEdges(): NavigationEdgeStatus {
|
||||
return this._spatialEdges;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
import { NodeHelper } from "../helper/NodeHelper";
|
||||
import { Node } from "../../src/graph/Node";
|
||||
import { ICoreNode } from "../../src/api/interfaces/ICoreNode";
|
||||
import { IFillNode } from "../../src/api/interfaces/IFillNode";
|
||||
import { IMesh } from "../../src/api/interfaces/IMesh";
|
||||
import { CoreImageEnt } from "../../src/api/ents/CoreImageEnt";
|
||||
import { SpatialImageEnt } from "../../src/api/ents/SpatialImageEnt";
|
||||
import { MeshEnt } from "../../src/api/ents/MeshEnt";
|
||||
import { NodeCache } from "../../src/graph/NodeCache";
|
||||
|
||||
describe("Node", () => {
|
||||
@ -13,7 +13,7 @@ describe("Node", () => {
|
||||
});
|
||||
|
||||
it("should create a node", () => {
|
||||
let coreNode: ICoreNode = helper.createCoreNode();
|
||||
let coreNode: CoreImageEnt = helper.createCoreNode();
|
||||
let node: Node = new Node(coreNode);
|
||||
|
||||
expect(node).toBeDefined();
|
||||
@ -28,12 +28,12 @@ describe("Node.full", () => {
|
||||
});
|
||||
|
||||
it("should make node full", () => {
|
||||
let coreNode: ICoreNode = helper.createCoreNode();
|
||||
let coreNode: CoreImageEnt = helper.createCoreNode();
|
||||
let node: Node = new Node(coreNode);
|
||||
|
||||
expect(node.full).toBe(false);
|
||||
|
||||
let fillNode: IFillNode = helper.createFillNode();
|
||||
let fillNode: SpatialImageEnt = helper.createFillNode();
|
||||
|
||||
node.makeFull(fillNode);
|
||||
|
||||
@ -41,7 +41,7 @@ describe("Node.full", () => {
|
||||
});
|
||||
|
||||
it("should throw when fill is null", () => {
|
||||
let coreNode: ICoreNode = helper.createCoreNode();
|
||||
let coreNode: CoreImageEnt = helper.createCoreNode();
|
||||
let node: Node = new Node(coreNode);
|
||||
|
||||
expect(() => { node.makeFull(null); }).toThrowError(Error);
|
||||
@ -56,9 +56,9 @@ describe("Node.dispose", () => {
|
||||
});
|
||||
|
||||
it("should clear core and fill properties", () => {
|
||||
let coreNode: ICoreNode = helper.createCoreNode();
|
||||
let coreNode: CoreImageEnt = helper.createCoreNode();
|
||||
let node: Node = new Node(coreNode);
|
||||
let fillNode: IFillNode = helper.createFillNode();
|
||||
let fillNode: SpatialImageEnt = helper.createFillNode();
|
||||
node.makeFull(fillNode);
|
||||
|
||||
node.dispose();
|
||||
@ -69,7 +69,7 @@ describe("Node.dispose", () => {
|
||||
});
|
||||
|
||||
it("should dipose cache", () => {
|
||||
let coreNode: ICoreNode = helper.createCoreNode();
|
||||
let coreNode: CoreImageEnt = helper.createCoreNode();
|
||||
let node: Node = new Node(coreNode);
|
||||
let nodeCache: NodeCache = new NodeCache(undefined);
|
||||
|
||||
@ -92,14 +92,14 @@ describe("Node.uncache", () => {
|
||||
});
|
||||
|
||||
it("should handle when cache is not initilized", () => {
|
||||
let coreNode: ICoreNode = helper.createCoreNode();
|
||||
let coreNode: CoreImageEnt = helper.createCoreNode();
|
||||
let node: Node = new Node(coreNode);
|
||||
|
||||
node.uncache();
|
||||
});
|
||||
|
||||
it("should dispose node cache", () => {
|
||||
let coreNode: ICoreNode = helper.createCoreNode();
|
||||
let coreNode: CoreImageEnt = helper.createCoreNode();
|
||||
let node: Node = new Node(coreNode);
|
||||
let nodeCache: NodeCache = new NodeCache(undefined);
|
||||
|
||||
@ -114,7 +114,7 @@ describe("Node.uncache", () => {
|
||||
});
|
||||
|
||||
it("should be able to initialize cache again after uncache", () => {
|
||||
let coreNode: ICoreNode = helper.createCoreNode();
|
||||
let coreNode: CoreImageEnt = helper.createCoreNode();
|
||||
let node: Node = new Node(coreNode);
|
||||
let nodeCache: NodeCache = new NodeCache(undefined);
|
||||
|
||||
@ -137,16 +137,16 @@ describe("Node.merged", () => {
|
||||
});
|
||||
|
||||
it("should not be merged when not full", () => {
|
||||
let coreNode: ICoreNode = helper.createCoreNode();
|
||||
let coreNode: CoreImageEnt = helper.createCoreNode();
|
||||
let node: Node = new Node(coreNode);
|
||||
|
||||
expect(node.merged).toBe(false);
|
||||
});
|
||||
|
||||
it("should not be merged because merge version is zero", () => {
|
||||
let coreNode: ICoreNode = helper.createCoreNode();
|
||||
let coreNode: CoreImageEnt = helper.createCoreNode();
|
||||
let node: Node = new Node(coreNode);
|
||||
let fillNode: IFillNode = helper.createFillNode();
|
||||
let fillNode: SpatialImageEnt = helper.createFillNode();
|
||||
|
||||
fillNode.merge_version = 0;
|
||||
|
||||
@ -156,9 +156,9 @@ describe("Node.merged", () => {
|
||||
});
|
||||
|
||||
it("should be merged because merge version present and larger than zero", () => {
|
||||
let coreNode: ICoreNode = helper.createCoreNode();
|
||||
let coreNode: CoreImageEnt = helper.createCoreNode();
|
||||
let node: Node = new Node(coreNode);
|
||||
let fillNode: IFillNode = helper.createFillNode();
|
||||
let fillNode: SpatialImageEnt = helper.createFillNode();
|
||||
|
||||
fillNode.merge_version = 7;
|
||||
|
||||
@ -176,7 +176,7 @@ describe("Node.assetsCached", () => {
|
||||
});
|
||||
|
||||
it("should not be cached when core", () => {
|
||||
let coreNode: ICoreNode = helper.createCoreNode();
|
||||
let coreNode: CoreImageEnt = helper.createCoreNode();
|
||||
let node: Node = new Node(coreNode);
|
||||
|
||||
expect(node.assetsCached).toBe(false);
|
||||
@ -184,7 +184,7 @@ describe("Node.assetsCached", () => {
|
||||
|
||||
class NodeCacheMock extends NodeCache {
|
||||
protected _overridingImage: HTMLImageElement;
|
||||
protected _overridingMesh: IMesh;
|
||||
protected _overridingMesh: MeshEnt;
|
||||
|
||||
constructor() { super(undefined); }
|
||||
|
||||
@ -196,19 +196,19 @@ describe("Node.assetsCached", () => {
|
||||
this._overridingImage = value;
|
||||
}
|
||||
|
||||
public get mesh(): IMesh {
|
||||
public get mesh(): MeshEnt {
|
||||
return this._overridingMesh;
|
||||
}
|
||||
|
||||
public set mesh(value: IMesh) {
|
||||
public set mesh(value: MeshEnt) {
|
||||
this._overridingMesh = value;
|
||||
}
|
||||
}
|
||||
|
||||
it("should be cached when assets set", () => {
|
||||
let coreNode: ICoreNode = helper.createCoreNode();
|
||||
let coreNode: CoreImageEnt = helper.createCoreNode();
|
||||
let node: Node = new Node(coreNode);
|
||||
let fillNode: IFillNode = helper.createFillNode();
|
||||
let fillNode: SpatialImageEnt = helper.createFillNode();
|
||||
node.makeFull(fillNode);
|
||||
|
||||
let nodeCache: NodeCacheMock = new NodeCacheMock();
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
import { first, skip } from "rxjs/operators";
|
||||
import { FalcorDataProvider } from "../../src/api/FalcorDataProvider";
|
||||
import { EdgeDirection } from "../../src/graph/edge/EdgeDirection";
|
||||
import { IEdge } from "../../src/graph/edge/interfaces/IEdge";
|
||||
import { IEdgeStatus } from "../../src/graph/interfaces/IEdgeStatus";
|
||||
import { NavigationDirection } from "../../src/graph/edge/NavigationDirection";
|
||||
import { NavigationEdge } from "../../src/graph/edge/interfaces/NavigationEdge";
|
||||
import { NavigationEdgeStatus } from "../../src/graph/interfaces/NavigationEdgeStatus";
|
||||
import { NodeCache } from "../../src/graph/NodeCache";
|
||||
import { ImageSize } from "../../src/viewer/ImageSize";
|
||||
import { MockCreator } from "../helper/MockCreator";
|
||||
@ -37,7 +37,7 @@ describe("NodeCache.sequenceEdges$", () => {
|
||||
nodeCache.sequenceEdges$.pipe(
|
||||
first())
|
||||
.subscribe(
|
||||
(edgeStatus: IEdgeStatus): void => {
|
||||
(edgeStatus: NavigationEdgeStatus): void => {
|
||||
expect(edgeStatus.cached).toBe(false);
|
||||
expect(edgeStatus.edges.length).toBe(0);
|
||||
|
||||
@ -48,24 +48,24 @@ describe("NodeCache.sequenceEdges$", () => {
|
||||
it("should emit cached non empty edge status when sequence edges cached", (done: Function) => {
|
||||
let nodeCache: NodeCache = new NodeCache(undefined);
|
||||
|
||||
let sequenceEdge: IEdge = {
|
||||
let sequenceEdge: NavigationEdge = {
|
||||
data: {
|
||||
direction: EdgeDirection.Next,
|
||||
direction: NavigationDirection.Next,
|
||||
worldMotionAzimuth: 0,
|
||||
},
|
||||
from: "key1",
|
||||
to: "key2",
|
||||
source: "key1",
|
||||
target: "key2",
|
||||
};
|
||||
|
||||
nodeCache.sequenceEdges$.pipe(
|
||||
skip(1),
|
||||
first())
|
||||
.subscribe(
|
||||
(edgeStatus: IEdgeStatus): void => {
|
||||
(edgeStatus: NavigationEdgeStatus): void => {
|
||||
expect(edgeStatus.cached).toBe(true);
|
||||
expect(edgeStatus.edges.length).toBe(1);
|
||||
expect(edgeStatus.edges[0].from).toBe(sequenceEdge.from);
|
||||
expect(edgeStatus.edges[0].to).toBe(sequenceEdge.to);
|
||||
expect(edgeStatus.edges[0].source).toBe(sequenceEdge.source);
|
||||
expect(edgeStatus.edges[0].target).toBe(sequenceEdge.target);
|
||||
expect(edgeStatus.edges[0].data.direction).toBe(sequenceEdge.data.direction);
|
||||
expect(edgeStatus.edges[0].data.worldMotionAzimuth).toBe(sequenceEdge.data.worldMotionAzimuth);
|
||||
|
||||
@ -80,20 +80,20 @@ describe("NodeCache.resetSequenceEdges", () => {
|
||||
it("should reset the sequence edges", () => {
|
||||
let nodeCache: NodeCache = new NodeCache(undefined);
|
||||
|
||||
let sequenceEdge: IEdge = {
|
||||
let sequenceEdge: NavigationEdge = {
|
||||
data: {
|
||||
direction: EdgeDirection.Next,
|
||||
direction: NavigationDirection.Next,
|
||||
worldMotionAzimuth: null,
|
||||
},
|
||||
from: "key1",
|
||||
to: "key2",
|
||||
source: "key1",
|
||||
target: "key2",
|
||||
};
|
||||
|
||||
nodeCache.cacheSequenceEdges([sequenceEdge]);
|
||||
|
||||
expect(nodeCache.sequenceEdges.cached).toBe(true);
|
||||
expect(nodeCache.sequenceEdges.edges.length).toBe(1);
|
||||
expect(nodeCache.sequenceEdges.edges[0].from).toBe(sequenceEdge.from);
|
||||
expect(nodeCache.sequenceEdges.edges[0].source).toBe(sequenceEdge.source);
|
||||
|
||||
nodeCache.resetSequenceEdges();
|
||||
|
||||
@ -109,7 +109,7 @@ describe("NodeCache.spatialEdges$", () => {
|
||||
nodeCache.spatialEdges$.pipe(
|
||||
first())
|
||||
.subscribe(
|
||||
(edgeStatus: IEdgeStatus): void => {
|
||||
(edgeStatus: NavigationEdgeStatus): void => {
|
||||
expect(edgeStatus.cached).toBe(false);
|
||||
expect(edgeStatus.edges.length).toBe(0);
|
||||
|
||||
@ -120,24 +120,24 @@ describe("NodeCache.spatialEdges$", () => {
|
||||
it("should emit cached non empty edge status when spatial edges cached", (done: Function) => {
|
||||
let nodeCache: NodeCache = new NodeCache(undefined);
|
||||
|
||||
let spatialEdge: IEdge = {
|
||||
let spatialEdge: NavigationEdge = {
|
||||
data: {
|
||||
direction: EdgeDirection.StepForward,
|
||||
direction: NavigationDirection.StepForward,
|
||||
worldMotionAzimuth: 0,
|
||||
},
|
||||
from: "key1",
|
||||
to: "key2",
|
||||
source: "key1",
|
||||
target: "key2",
|
||||
};
|
||||
|
||||
nodeCache.spatialEdges$.pipe(
|
||||
skip(1),
|
||||
first())
|
||||
.subscribe(
|
||||
(edgeStatus: IEdgeStatus): void => {
|
||||
(edgeStatus: NavigationEdgeStatus): void => {
|
||||
expect(edgeStatus.cached).toBe(true);
|
||||
expect(edgeStatus.edges.length).toBe(1);
|
||||
expect(edgeStatus.edges[0].from).toBe(spatialEdge.from);
|
||||
expect(edgeStatus.edges[0].to).toBe(spatialEdge.to);
|
||||
expect(edgeStatus.edges[0].source).toBe(spatialEdge.source);
|
||||
expect(edgeStatus.edges[0].target).toBe(spatialEdge.target);
|
||||
expect(edgeStatus.edges[0].data.direction).toBe(spatialEdge.data.direction);
|
||||
expect(edgeStatus.edges[0].data.worldMotionAzimuth).toBe(spatialEdge.data.worldMotionAzimuth);
|
||||
|
||||
@ -152,20 +152,20 @@ describe("NodeCache.resetSpatialEdges", () => {
|
||||
it("should reset the spatial edges", () => {
|
||||
let nodeCache: NodeCache = new NodeCache(undefined);
|
||||
|
||||
let spatialEdge: IEdge = {
|
||||
let spatialEdge: NavigationEdge = {
|
||||
data: {
|
||||
direction: EdgeDirection.StepForward,
|
||||
direction: NavigationDirection.StepForward,
|
||||
worldMotionAzimuth: 0,
|
||||
},
|
||||
from: "key1",
|
||||
to: "key2",
|
||||
source: "key1",
|
||||
target: "key2",
|
||||
};
|
||||
|
||||
nodeCache.cacheSpatialEdges([spatialEdge]);
|
||||
|
||||
expect(nodeCache.spatialEdges.cached).toBe(true);
|
||||
expect(nodeCache.spatialEdges.edges.length).toBe(1);
|
||||
expect(nodeCache.spatialEdges.edges[0].from).toBe(spatialEdge.from);
|
||||
expect(nodeCache.spatialEdges.edges[0].source).toBe(spatialEdge.source);
|
||||
|
||||
nodeCache.resetSpatialEdges();
|
||||
|
||||
@ -178,22 +178,22 @@ describe("NodeCache.dispose", () => {
|
||||
it("should clear all properties", () => {
|
||||
let nodeCache: NodeCache = new NodeCache(undefined);
|
||||
|
||||
let sequencEdge: IEdge = {
|
||||
let sequencEdge: NavigationEdge = {
|
||||
data: {
|
||||
direction: EdgeDirection.StepForward,
|
||||
direction: NavigationDirection.StepForward,
|
||||
worldMotionAzimuth: 0,
|
||||
},
|
||||
from: "key1",
|
||||
to: "key2",
|
||||
source: "key1",
|
||||
target: "key2",
|
||||
};
|
||||
|
||||
let spatialEdge: IEdge = {
|
||||
let spatialEdge: NavigationEdge = {
|
||||
data: {
|
||||
direction: EdgeDirection.StepForward,
|
||||
direction: NavigationDirection.StepForward,
|
||||
worldMotionAzimuth: 0,
|
||||
},
|
||||
from: "key1",
|
||||
to: "key2",
|
||||
source: "key1",
|
||||
target: "key2",
|
||||
};
|
||||
|
||||
nodeCache.cacheSequenceEdges([sequencEdge]);
|
||||
|
||||
@ -1,11 +1,11 @@
|
||||
import { ISequence } from "../../src/api/interfaces/ISequence";
|
||||
import { SequenceEnt } from "../../src/api/ents/SequenceEnt";
|
||||
import { Sequence } from "../../src/graph/Sequence";
|
||||
|
||||
describe("Sequence", () => {
|
||||
let sequence: Sequence;
|
||||
|
||||
beforeEach(() => {
|
||||
let response: ISequence = {
|
||||
let response: SequenceEnt = {
|
||||
key: "A",
|
||||
keys: ["B", "C", "D", "E"],
|
||||
};
|
||||
|
||||
@ -2,9 +2,9 @@ import { Node } from "../../../src/graph/Node";
|
||||
import { EdgeCalculator } from "../../../src/graph/edge/EdgeCalculator";
|
||||
import { EdgeCalculatorDirections } from "../../../src/graph/edge/EdgeCalculatorDirections";
|
||||
import { EdgeCalculatorSettings } from "../../../src/graph/edge/EdgeCalculatorSettings";
|
||||
import { IPotentialEdge } from "../../../src/graph/edge/interfaces/IPotentialEdge";
|
||||
import { PotentialEdge } from "../../../src/graph/edge/interfaces/PotentialEdge";
|
||||
import { EdgeCalculatorHelper } from "../../helper/EdgeCalculatorHelper";
|
||||
import { EdgeDirection } from "../../../src/graph/edge/EdgeDirection";
|
||||
import { NavigationDirection } from "../../../src/graph/edge/NavigationDirection";
|
||||
|
||||
describe("EdgeCalculator.computeSphericalEdges", () => {
|
||||
let edgeCalculator: EdgeCalculator;
|
||||
@ -14,7 +14,7 @@ describe("EdgeCalculator.computeSphericalEdges", () => {
|
||||
let helper: EdgeCalculatorHelper;
|
||||
|
||||
let node: Node;
|
||||
let potentialEdge1: IPotentialEdge;
|
||||
let potentialEdge1: PotentialEdge;
|
||||
|
||||
beforeEach(() => {
|
||||
settings = new EdgeCalculatorSettings();
|
||||
@ -52,8 +52,8 @@ describe("EdgeCalculator.computeSphericalEdges", () => {
|
||||
|
||||
let sphericalEdge = sphericalEdges[0];
|
||||
|
||||
expect(sphericalEdge.to).toBe(potentialEdge1.key);
|
||||
expect(sphericalEdge.data.direction).toBe(EdgeDirection.Spherical);
|
||||
expect(sphericalEdge.target).toBe(potentialEdge1.key);
|
||||
expect(sphericalEdge.data.direction).toBe(NavigationDirection.Spherical);
|
||||
});
|
||||
|
||||
it("should have a spherical edge irrespective of rotation", () => {
|
||||
@ -65,8 +65,8 @@ describe("EdgeCalculator.computeSphericalEdges", () => {
|
||||
|
||||
let sphericalEdge = sphericalEdges[0];
|
||||
|
||||
expect(sphericalEdge.to).toBe(potentialEdge1.key);
|
||||
expect(sphericalEdge.data.direction).toBe(EdgeDirection.Spherical);
|
||||
expect(sphericalEdge.target).toBe(potentialEdge1.key);
|
||||
expect(sphericalEdge.data.direction).toBe(NavigationDirection.Spherical);
|
||||
});
|
||||
|
||||
it("should not have a spherical edge with to long distance", () => {
|
||||
@ -91,7 +91,7 @@ describe("EdgeCalculator.computeSphericalEdges", () => {
|
||||
let sphericalEdges = edgeCalculator.computeSphericalEdges(node, [potentialEdge1]);
|
||||
|
||||
for (let sphericalEdge of sphericalEdges) {
|
||||
expect(sphericalEdge.data.direction === EdgeDirection.Spherical).toBe(false);
|
||||
expect(sphericalEdge.data.direction === NavigationDirection.Spherical).toBe(false);
|
||||
}
|
||||
});
|
||||
|
||||
@ -112,8 +112,8 @@ describe("EdgeCalculator.computeSphericalEdges", () => {
|
||||
let helper: EdgeCalculatorHelper;
|
||||
|
||||
let node: Node;
|
||||
let potentialEdge1: IPotentialEdge;
|
||||
let potentialEdge2: IPotentialEdge;
|
||||
let potentialEdge1: PotentialEdge;
|
||||
let potentialEdge2: PotentialEdge;
|
||||
|
||||
beforeEach(() => {
|
||||
settings = new EdgeCalculatorSettings();
|
||||
@ -152,8 +152,8 @@ describe("EdgeCalculator.computeSphericalEdges", () => {
|
||||
|
||||
let sphericalEdge = sphericalEdges[0];
|
||||
|
||||
expect(sphericalEdge.to).toBe(potentialEdge2.key);
|
||||
expect(sphericalEdge.data.direction).toBe(EdgeDirection.Spherical);
|
||||
expect(sphericalEdge.target).toBe(potentialEdge2.key);
|
||||
expect(sphericalEdge.data.direction).toBe(NavigationDirection.Spherical);
|
||||
});
|
||||
|
||||
it("should have a spherical edge closest to preferred distance", () => {
|
||||
@ -166,8 +166,8 @@ describe("EdgeCalculator.computeSphericalEdges", () => {
|
||||
|
||||
let sphericalEdge = sphericalEdges[0];
|
||||
|
||||
expect(sphericalEdge.to).toBe(potentialEdge2.key);
|
||||
expect(sphericalEdge.data.direction).toBe(EdgeDirection.Spherical);
|
||||
expect(sphericalEdge.target).toBe(potentialEdge2.key);
|
||||
expect(sphericalEdge.data.direction).toBe(NavigationDirection.Spherical);
|
||||
});
|
||||
|
||||
it("should have a spherical edge with same sequence", () => {
|
||||
@ -180,8 +180,8 @@ describe("EdgeCalculator.computeSphericalEdges", () => {
|
||||
|
||||
let sphericalEdge = sphericalEdges[0];
|
||||
|
||||
expect(sphericalEdge.to).toBe(potentialEdge2.key);
|
||||
expect(sphericalEdge.data.direction).toBe(EdgeDirection.Spherical);
|
||||
expect(sphericalEdge.target).toBe(potentialEdge2.key);
|
||||
expect(sphericalEdge.data.direction).toBe(NavigationDirection.Spherical);
|
||||
});
|
||||
|
||||
it("should have a spherical edge with same sequence", () => {
|
||||
@ -194,8 +194,8 @@ describe("EdgeCalculator.computeSphericalEdges", () => {
|
||||
|
||||
let sphericalEdge = sphericalEdges[0];
|
||||
|
||||
expect(sphericalEdge.to).toBe(potentialEdge2.key);
|
||||
expect(sphericalEdge.data.direction).toBe(EdgeDirection.Spherical);
|
||||
expect(sphericalEdge.target).toBe(potentialEdge2.key);
|
||||
expect(sphericalEdge.data.direction).toBe(NavigationDirection.Spherical);
|
||||
});
|
||||
|
||||
it("should have a spherical edge with smallest motion change", () => {
|
||||
@ -208,8 +208,8 @@ describe("EdgeCalculator.computeSphericalEdges", () => {
|
||||
|
||||
let sphericalEdge = sphericalEdges[0];
|
||||
|
||||
expect(sphericalEdge.to).toBe(potentialEdge2.key);
|
||||
expect(sphericalEdge.data.direction).toBe(EdgeDirection.Spherical);
|
||||
expect(sphericalEdge.target).toBe(potentialEdge2.key);
|
||||
expect(sphericalEdge.data.direction).toBe(NavigationDirection.Spherical);
|
||||
});
|
||||
});
|
||||
|
||||
@ -222,10 +222,10 @@ describe("EdgeCalculator.computeSphericalEdges", () => {
|
||||
|
||||
let node: Node;
|
||||
|
||||
let potentialEdge1: IPotentialEdge;
|
||||
let potentialEdge2: IPotentialEdge;
|
||||
let potentialEdge3: IPotentialEdge;
|
||||
let potentialEdge4: IPotentialEdge;
|
||||
let potentialEdge1: PotentialEdge;
|
||||
let potentialEdge2: PotentialEdge;
|
||||
let potentialEdge3: PotentialEdge;
|
||||
let potentialEdge4: PotentialEdge;
|
||||
|
||||
beforeEach(() => {
|
||||
settings = new EdgeCalculatorSettings();
|
||||
@ -276,8 +276,8 @@ describe("EdgeCalculator.computeSphericalEdges", () => {
|
||||
|
||||
let sphericalEdge = sphericalEdges[0];
|
||||
|
||||
expect(sphericalEdge.to).toBe(potentialEdge4.key);
|
||||
expect(sphericalEdge.data.direction).toBe(EdgeDirection.Spherical);
|
||||
expect(sphericalEdge.target).toBe(potentialEdge4.key);
|
||||
expect(sphericalEdge.data.direction).toBe(NavigationDirection.Spherical);
|
||||
});
|
||||
|
||||
it("should have a spherical edge in four directions", () => {
|
||||
@ -302,12 +302,12 @@ describe("EdgeCalculator.computeSphericalEdges", () => {
|
||||
for (let key of keys) {
|
||||
let edge = null;
|
||||
for (let sphericalEdge of sphericalEdges) {
|
||||
if (sphericalEdge.to === key) {
|
||||
if (sphericalEdge.target === key) {
|
||||
edge = sphericalEdge;
|
||||
}
|
||||
}
|
||||
|
||||
expect(edge.data.direction).toBe(EdgeDirection.Spherical);
|
||||
expect(edge.data.direction).toBe(NavigationDirection.Spherical);
|
||||
}
|
||||
});
|
||||
|
||||
@ -331,12 +331,12 @@ describe("EdgeCalculator.computeSphericalEdges", () => {
|
||||
for (let key of keys) {
|
||||
let edge = null;
|
||||
for (let sphericalEdge of sphericalEdges) {
|
||||
if (sphericalEdge.to === key) {
|
||||
if (sphericalEdge.target === key) {
|
||||
edge = sphericalEdge;
|
||||
}
|
||||
}
|
||||
|
||||
expect(edge.data.direction).toBe(EdgeDirection.Spherical);
|
||||
expect(edge.data.direction).toBe(NavigationDirection.Spherical);
|
||||
}
|
||||
});
|
||||
|
||||
@ -352,8 +352,8 @@ describe("EdgeCalculator.computeSphericalEdges", () => {
|
||||
|
||||
let sphericalEdge = sphericalEdges[0];
|
||||
|
||||
expect(sphericalEdge.to).toBe(potentialEdge1.key);
|
||||
expect(sphericalEdge.data.direction).toBe(EdgeDirection.Spherical);
|
||||
expect(sphericalEdge.target).toBe(potentialEdge1.key);
|
||||
expect(sphericalEdge.data.direction).toBe(NavigationDirection.Spherical);
|
||||
});
|
||||
});
|
||||
|
||||
@ -365,7 +365,7 @@ describe("EdgeCalculator.computeSphericalEdges", () => {
|
||||
let helper: EdgeCalculatorHelper;
|
||||
|
||||
let node: Node;
|
||||
let potentialEdge1: IPotentialEdge;
|
||||
let potentialEdge1: PotentialEdge;
|
||||
|
||||
beforeEach(() => {
|
||||
settings = new EdgeCalculatorSettings();
|
||||
@ -402,8 +402,8 @@ describe("EdgeCalculator.computeSphericalEdges", () => {
|
||||
|
||||
let sphericalEdge = sphericalEdges[0];
|
||||
|
||||
expect(sphericalEdge.to).toBe(potentialEdge1.key);
|
||||
expect(sphericalEdge.data.direction).toBe(EdgeDirection.StepForward);
|
||||
expect(sphericalEdge.target).toBe(potentialEdge1.key);
|
||||
expect(sphericalEdge.data.direction).toBe(NavigationDirection.StepForward);
|
||||
});
|
||||
|
||||
it("should have a step left edge", () => {
|
||||
@ -416,8 +416,8 @@ describe("EdgeCalculator.computeSphericalEdges", () => {
|
||||
|
||||
let sphericalEdge = sphericalEdges[0];
|
||||
|
||||
expect(sphericalEdge.to).toBe(potentialEdge1.key);
|
||||
expect(sphericalEdge.data.direction).toBe(EdgeDirection.StepLeft);
|
||||
expect(sphericalEdge.target).toBe(potentialEdge1.key);
|
||||
expect(sphericalEdge.data.direction).toBe(NavigationDirection.StepLeft);
|
||||
});
|
||||
|
||||
it("should have a step left edge for direction change", () => {
|
||||
@ -430,8 +430,8 @@ describe("EdgeCalculator.computeSphericalEdges", () => {
|
||||
|
||||
let sphericalEdge = sphericalEdges[0];
|
||||
|
||||
expect(sphericalEdge.to).toBe(potentialEdge1.key);
|
||||
expect(sphericalEdge.data.direction).toBe(EdgeDirection.StepLeft);
|
||||
expect(sphericalEdge.target).toBe(potentialEdge1.key);
|
||||
expect(sphericalEdge.data.direction).toBe(NavigationDirection.StepLeft);
|
||||
});
|
||||
|
||||
it("should have a step right edge", () => {
|
||||
@ -444,8 +444,8 @@ describe("EdgeCalculator.computeSphericalEdges", () => {
|
||||
|
||||
let sphericalEdge = sphericalEdges[0];
|
||||
|
||||
expect(sphericalEdge.to).toBe(potentialEdge1.key);
|
||||
expect(sphericalEdge.data.direction).toBe(EdgeDirection.StepRight);
|
||||
expect(sphericalEdge.target).toBe(potentialEdge1.key);
|
||||
expect(sphericalEdge.data.direction).toBe(NavigationDirection.StepRight);
|
||||
});
|
||||
|
||||
it("should have a step right edge for direction change", () => {
|
||||
@ -458,8 +458,8 @@ describe("EdgeCalculator.computeSphericalEdges", () => {
|
||||
|
||||
let sphericalEdge = sphericalEdges[0];
|
||||
|
||||
expect(sphericalEdge.to).toBe(potentialEdge1.key);
|
||||
expect(sphericalEdge.data.direction).toBe(EdgeDirection.StepRight);
|
||||
expect(sphericalEdge.target).toBe(potentialEdge1.key);
|
||||
expect(sphericalEdge.data.direction).toBe(NavigationDirection.StepRight);
|
||||
});
|
||||
|
||||
it("should have a step backward edge", () => {
|
||||
@ -472,8 +472,8 @@ describe("EdgeCalculator.computeSphericalEdges", () => {
|
||||
|
||||
let sphericalEdge = sphericalEdges[0];
|
||||
|
||||
expect(sphericalEdge.to).toBe(potentialEdge1.key);
|
||||
expect(sphericalEdge.data.direction).toBe(EdgeDirection.StepBackward);
|
||||
expect(sphericalEdge.target).toBe(potentialEdge1.key);
|
||||
expect(sphericalEdge.data.direction).toBe(NavigationDirection.StepBackward);
|
||||
});
|
||||
|
||||
it("should have a step backward edge for direction change", () => {
|
||||
@ -486,8 +486,8 @@ describe("EdgeCalculator.computeSphericalEdges", () => {
|
||||
|
||||
let sphericalEdge = sphericalEdges[0];
|
||||
|
||||
expect(sphericalEdge.to).toBe(potentialEdge1.key);
|
||||
expect(sphericalEdge.data.direction).toBe(EdgeDirection.StepBackward);
|
||||
expect(sphericalEdge.target).toBe(potentialEdge1.key);
|
||||
expect(sphericalEdge.data.direction).toBe(NavigationDirection.StepBackward);
|
||||
});
|
||||
|
||||
it("should have a step forward edge in opposite motion direction", () => {
|
||||
@ -500,8 +500,8 @@ describe("EdgeCalculator.computeSphericalEdges", () => {
|
||||
|
||||
let sphericalEdge = sphericalEdges[0];
|
||||
|
||||
expect(sphericalEdge.to).toBe(potentialEdge1.key);
|
||||
expect(sphericalEdge.data.direction).toBe(EdgeDirection.StepForward);
|
||||
expect(sphericalEdge.target).toBe(potentialEdge1.key);
|
||||
expect(sphericalEdge.data.direction).toBe(NavigationDirection.StepForward);
|
||||
});
|
||||
|
||||
it("should have a step forward edge in perpendicular motion direction", () => {
|
||||
@ -514,8 +514,8 @@ describe("EdgeCalculator.computeSphericalEdges", () => {
|
||||
|
||||
let sphericalEdge = sphericalEdges[0];
|
||||
|
||||
expect(sphericalEdge.to).toBe(potentialEdge1.key);
|
||||
expect(sphericalEdge.data.direction).toBe(EdgeDirection.StepForward);
|
||||
expect(sphericalEdge.target).toBe(potentialEdge1.key);
|
||||
expect(sphericalEdge.data.direction).toBe(NavigationDirection.StepForward);
|
||||
});
|
||||
|
||||
it("should have a step forward edge in perpendicular motion direction", () => {
|
||||
@ -528,8 +528,8 @@ describe("EdgeCalculator.computeSphericalEdges", () => {
|
||||
|
||||
let sphericalEdge = sphericalEdges[0];
|
||||
|
||||
expect(sphericalEdge.to).toBe(potentialEdge1.key);
|
||||
expect(sphericalEdge.data.direction).toBe(EdgeDirection.StepForward);
|
||||
expect(sphericalEdge.target).toBe(potentialEdge1.key);
|
||||
expect(sphericalEdge.data.direction).toBe(NavigationDirection.StepForward);
|
||||
});
|
||||
|
||||
it("should not have a step forward edge when turn is to large", () => {
|
||||
@ -577,8 +577,8 @@ describe("EdgeCalculator.computeSphericalEdges", () => {
|
||||
let helper: EdgeCalculatorHelper;
|
||||
|
||||
let node: Node;
|
||||
let potentialEdge1: IPotentialEdge;
|
||||
let potentialEdge2: IPotentialEdge;
|
||||
let potentialEdge1: PotentialEdge;
|
||||
let potentialEdge2: PotentialEdge;
|
||||
|
||||
beforeEach(() => {
|
||||
settings = new EdgeCalculatorSettings();
|
||||
@ -619,8 +619,8 @@ describe("EdgeCalculator.computeSphericalEdges", () => {
|
||||
|
||||
let sphericalEdge = sphericalEdges[0];
|
||||
|
||||
expect(sphericalEdge.to).toBe(potentialEdge2.key);
|
||||
expect(sphericalEdge.data.direction).toBe(EdgeDirection.StepForward);
|
||||
expect(sphericalEdge.target).toBe(potentialEdge2.key);
|
||||
expect(sphericalEdge.data.direction).toBe(NavigationDirection.StepForward);
|
||||
});
|
||||
|
||||
it("should prefer a step forward edge with preferred distance", () => {
|
||||
@ -633,8 +633,8 @@ describe("EdgeCalculator.computeSphericalEdges", () => {
|
||||
|
||||
let sphericalEdge = sphericalEdges[0];
|
||||
|
||||
expect(sphericalEdge.to).toBe(potentialEdge2.key);
|
||||
expect(sphericalEdge.data.direction).toBe(EdgeDirection.StepForward);
|
||||
expect(sphericalEdge.target).toBe(potentialEdge2.key);
|
||||
expect(sphericalEdge.data.direction).toBe(NavigationDirection.StepForward);
|
||||
});
|
||||
|
||||
it("should prefer a step forward edge with smaller motion change", () => {
|
||||
@ -647,8 +647,8 @@ describe("EdgeCalculator.computeSphericalEdges", () => {
|
||||
|
||||
let sphericalEdge = sphericalEdges[0];
|
||||
|
||||
expect(sphericalEdge.to).toBe(potentialEdge2.key);
|
||||
expect(sphericalEdge.data.direction).toBe(EdgeDirection.StepForward);
|
||||
expect(sphericalEdge.target).toBe(potentialEdge2.key);
|
||||
expect(sphericalEdge.data.direction).toBe(NavigationDirection.StepForward);
|
||||
});
|
||||
|
||||
it("should prefer a step forward edge with smaller motion change", () => {
|
||||
@ -661,8 +661,8 @@ describe("EdgeCalculator.computeSphericalEdges", () => {
|
||||
|
||||
let sphericalEdge = sphericalEdges[0];
|
||||
|
||||
expect(sphericalEdge.to).toBe(potentialEdge2.key);
|
||||
expect(sphericalEdge.data.direction).toBe(EdgeDirection.StepForward);
|
||||
expect(sphericalEdge.target).toBe(potentialEdge2.key);
|
||||
expect(sphericalEdge.data.direction).toBe(NavigationDirection.StepForward);
|
||||
});
|
||||
|
||||
it("should prefer a step forward edge with same merge connected component", () => {
|
||||
@ -675,8 +675,8 @@ describe("EdgeCalculator.computeSphericalEdges", () => {
|
||||
|
||||
let sphericalEdge = sphericalEdges[0];
|
||||
|
||||
expect(sphericalEdge.to).toBe(potentialEdge2.key);
|
||||
expect(sphericalEdge.data.direction).toBe(EdgeDirection.StepForward);
|
||||
expect(sphericalEdge.target).toBe(potentialEdge2.key);
|
||||
expect(sphericalEdge.data.direction).toBe(NavigationDirection.StepForward);
|
||||
});
|
||||
});
|
||||
|
||||
@ -689,10 +689,10 @@ describe("EdgeCalculator.computeSphericalEdges", () => {
|
||||
|
||||
let node: Node;
|
||||
|
||||
let potentialEdge1: IPotentialEdge;
|
||||
let potentialEdge2: IPotentialEdge;
|
||||
let potentialEdge3: IPotentialEdge;
|
||||
let potentialEdge4: IPotentialEdge;
|
||||
let potentialEdge1: PotentialEdge;
|
||||
let potentialEdge2: PotentialEdge;
|
||||
let potentialEdge3: PotentialEdge;
|
||||
let potentialEdge4: PotentialEdge;
|
||||
|
||||
beforeEach(() => {
|
||||
settings = new EdgeCalculatorSettings();
|
||||
@ -742,14 +742,14 @@ describe("EdgeCalculator.computeSphericalEdges", () => {
|
||||
expect(sphericalEdges.length).toBe(4);
|
||||
|
||||
for (let sphericalEdge of sphericalEdges) {
|
||||
if (sphericalEdge.to === potentialEdge1.key) {
|
||||
expect(sphericalEdge.data.direction).toBe(EdgeDirection.StepForward);
|
||||
} else if (sphericalEdge.to === potentialEdge2.key) {
|
||||
expect(sphericalEdge.data.direction).toBe(EdgeDirection.StepLeft);
|
||||
} else if (sphericalEdge.to === potentialEdge3.key) {
|
||||
expect(sphericalEdge.data.direction).toBe(EdgeDirection.StepBackward);
|
||||
} else if (sphericalEdge.to === potentialEdge4.key) {
|
||||
expect(sphericalEdge.data.direction).toBe(EdgeDirection.StepRight);
|
||||
if (sphericalEdge.target === potentialEdge1.key) {
|
||||
expect(sphericalEdge.data.direction).toBe(NavigationDirection.StepForward);
|
||||
} else if (sphericalEdge.target === potentialEdge2.key) {
|
||||
expect(sphericalEdge.data.direction).toBe(NavigationDirection.StepLeft);
|
||||
} else if (sphericalEdge.target === potentialEdge3.key) {
|
||||
expect(sphericalEdge.data.direction).toBe(NavigationDirection.StepBackward);
|
||||
} else if (sphericalEdge.target === potentialEdge4.key) {
|
||||
expect(sphericalEdge.data.direction).toBe(NavigationDirection.StepRight);
|
||||
}
|
||||
}
|
||||
});
|
||||
@ -769,8 +769,8 @@ describe("EdgeCalculator.computeSphericalEdges", () => {
|
||||
|
||||
let sphericalEdge = sphericalEdges[0];
|
||||
|
||||
expect(sphericalEdge.to).toBe(potentialEdge1.key);
|
||||
expect(sphericalEdge.data.direction).toBe(EdgeDirection.Spherical);
|
||||
expect(sphericalEdge.target).toBe(potentialEdge1.key);
|
||||
expect(sphericalEdge.data.direction).toBe(NavigationDirection.Spherical);
|
||||
});
|
||||
|
||||
it("should not have a step left or right edge based on step forward edges", () => {
|
||||
@ -791,8 +791,8 @@ describe("EdgeCalculator.computeSphericalEdges", () => {
|
||||
|
||||
let sphericalEdge = sphericalEdges[0];
|
||||
|
||||
expect(sphericalEdge.to).toBe(potentialEdge1.key);
|
||||
expect(sphericalEdge.data.direction).toBe(EdgeDirection.StepForward);
|
||||
expect(sphericalEdge.target).toBe(potentialEdge1.key);
|
||||
expect(sphericalEdge.data.direction).toBe(NavigationDirection.StepForward);
|
||||
});
|
||||
});
|
||||
|
||||
@ -804,8 +804,8 @@ describe("EdgeCalculator.computePerspectiveToSphericalEdges", () => {
|
||||
let helper: EdgeCalculatorHelper;
|
||||
|
||||
let node: Node;
|
||||
let potentialEdge1: IPotentialEdge;
|
||||
let potentialEdge2: IPotentialEdge;
|
||||
let potentialEdge1: PotentialEdge;
|
||||
let potentialEdge2: PotentialEdge;
|
||||
|
||||
beforeEach(() => {
|
||||
settings = new EdgeCalculatorSettings();
|
||||
@ -841,8 +841,8 @@ describe("EdgeCalculator.computePerspectiveToSphericalEdges", () => {
|
||||
|
||||
let sphericalEdge = sphericalEdges[0];
|
||||
|
||||
expect(sphericalEdge.to).toBe(potentialEdge1.key);
|
||||
expect(sphericalEdge.data.direction).toBe(EdgeDirection.Spherical);
|
||||
expect(sphericalEdge.target).toBe(potentialEdge1.key);
|
||||
expect(sphericalEdge.data.direction).toBe(NavigationDirection.Spherical);
|
||||
});
|
||||
|
||||
it("should not return a spherical edge when node is spherical", () => {
|
||||
@ -869,8 +869,8 @@ describe("EdgeCalculator.computePerspectiveToSphericalEdges", () => {
|
||||
|
||||
let sphericalEdge = sphericalEdges[0];
|
||||
|
||||
expect(sphericalEdge.to).toBe(potentialEdge2.key);
|
||||
expect(sphericalEdge.data.direction).toBe(EdgeDirection.Spherical);
|
||||
expect(sphericalEdge.target).toBe(potentialEdge2.key);
|
||||
expect(sphericalEdge.data.direction).toBe(NavigationDirection.Spherical);
|
||||
});
|
||||
|
||||
it("should return the spherical edge preferring forward motion", () => {
|
||||
@ -883,8 +883,8 @@ describe("EdgeCalculator.computePerspectiveToSphericalEdges", () => {
|
||||
|
||||
let sphericalEdge = sphericalEdges[0];
|
||||
|
||||
expect(sphericalEdge.to).toBe(potentialEdge2.key);
|
||||
expect(sphericalEdge.data.direction).toBe(EdgeDirection.Spherical);
|
||||
expect(sphericalEdge.target).toBe(potentialEdge2.key);
|
||||
expect(sphericalEdge.data.direction).toBe(NavigationDirection.Spherical);
|
||||
});
|
||||
|
||||
it("should return the spherical edge preferring same connected component", () => {
|
||||
@ -897,7 +897,7 @@ describe("EdgeCalculator.computePerspectiveToSphericalEdges", () => {
|
||||
|
||||
let sphericalEdge = sphericalEdges[0];
|
||||
|
||||
expect(sphericalEdge.to).toBe(potentialEdge2.key);
|
||||
expect(sphericalEdge.data.direction).toBe(EdgeDirection.Spherical);
|
||||
expect(sphericalEdge.target).toBe(potentialEdge2.key);
|
||||
expect(sphericalEdge.data.direction).toBe(NavigationDirection.Spherical);
|
||||
});
|
||||
});
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
import { EdgeCalculator } from "../../../src/graph/edge/EdgeCalculator";
|
||||
import { EdgeCalculatorDirections } from "../../../src/graph/edge/EdgeCalculatorDirections";
|
||||
import { EdgeCalculatorSettings } from "../../../src/graph/edge/EdgeCalculatorSettings";
|
||||
import { EdgeDirection } from "../../../src/graph/edge/EdgeDirection";
|
||||
import { IEdge } from "../../../src/graph/edge/interfaces/IEdge";
|
||||
import { NavigationDirection } from "../../../src/graph/edge/NavigationDirection";
|
||||
import { NavigationEdge } from "../../../src/graph/edge/interfaces/NavigationEdge";
|
||||
import { Node } from "../../../src/graph/Node";
|
||||
import { Sequence } from "../../../src/graph/Sequence";
|
||||
import { EdgeCalculatorHelper } from "../../helper/EdgeCalculatorHelper";
|
||||
@ -52,14 +52,14 @@ describe("EdgeCalculator.computeSequenceEdges", () => {
|
||||
let node: Node = helper.createFullNode(key, { alt: 0, lat: 0, lon: 0 }, sequenceKey, [0, 0, 0]);
|
||||
let sequence: Sequence = new Sequence({ key: sequenceKey, keys: [key, nextKey] });
|
||||
|
||||
let sequenceEdges: IEdge[] = edgeCalculator.computeSequenceEdges(node, sequence);
|
||||
let sequenceEdges: NavigationEdge[] = edgeCalculator.computeSequenceEdges(node, sequence);
|
||||
|
||||
expect(sequenceEdges.length).toBe(1);
|
||||
|
||||
let sequenceEdge: IEdge = sequenceEdges[0];
|
||||
let sequenceEdge: NavigationEdge = sequenceEdges[0];
|
||||
|
||||
expect(sequenceEdge.to).toBe(nextKey);
|
||||
expect(sequenceEdge.data.direction).toBe(EdgeDirection.Next);
|
||||
expect(sequenceEdge.target).toBe(nextKey);
|
||||
expect(sequenceEdge.data.direction).toBe(NavigationDirection.Next);
|
||||
});
|
||||
|
||||
it("should return a prev edge", () => {
|
||||
@ -70,14 +70,14 @@ describe("EdgeCalculator.computeSequenceEdges", () => {
|
||||
let node: Node = helper.createFullNode(key, { alt: 0, lat: 0, lon: 0 }, sequenceKey, [0, 0, 0]);
|
||||
let sequence: Sequence = new Sequence({ key: sequenceKey, keys: [prevKey, key] });
|
||||
|
||||
let sequenceEdges: IEdge[] = edgeCalculator.computeSequenceEdges(node, sequence);
|
||||
let sequenceEdges: NavigationEdge[] = edgeCalculator.computeSequenceEdges(node, sequence);
|
||||
|
||||
expect(sequenceEdges.length).toBe(1);
|
||||
|
||||
let sequenceEdge: IEdge = sequenceEdges[0];
|
||||
let sequenceEdge: NavigationEdge = sequenceEdges[0];
|
||||
|
||||
expect(sequenceEdge.to).toBe(prevKey);
|
||||
expect(sequenceEdge.data.direction).toBe(EdgeDirection.Prev);
|
||||
expect(sequenceEdge.target).toBe(prevKey);
|
||||
expect(sequenceEdge.data.direction).toBe(NavigationDirection.Prev);
|
||||
});
|
||||
|
||||
it("should return a prev and a next edge", () => {
|
||||
@ -90,15 +90,15 @@ describe("EdgeCalculator.computeSequenceEdges", () => {
|
||||
let node: Node = helper.createFullNode(key, { alt: 0, lat: 0, lon: 0 }, sequenceKey, [0, 0, 0]);
|
||||
let sequence: Sequence = new Sequence({ key: sequenceKey, keys: [prevKey, key, nextKey] });
|
||||
|
||||
let sequenceEdges: IEdge[] = edgeCalculator.computeSequenceEdges(node, sequence);
|
||||
let sequenceEdges: NavigationEdge[] = edgeCalculator.computeSequenceEdges(node, sequence);
|
||||
|
||||
expect(sequenceEdges.length).toBe(2);
|
||||
|
||||
for (let sequenceEdge of sequenceEdges) {
|
||||
if (sequenceEdge.to === prevKey) {
|
||||
expect(sequenceEdge.data.direction).toBe(EdgeDirection.Prev);
|
||||
} else if (sequenceEdge.to === nextKey) {
|
||||
expect(sequenceEdge.data.direction).toBe(EdgeDirection.Next);
|
||||
if (sequenceEdge.target === prevKey) {
|
||||
expect(sequenceEdge.data.direction).toBe(NavigationDirection.Prev);
|
||||
} else if (sequenceEdge.target === nextKey) {
|
||||
expect(sequenceEdge.data.direction).toBe(NavigationDirection.Next);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
@ -1,9 +1,9 @@
|
||||
import { EdgeCalculator } from "../../../src/graph/edge/EdgeCalculator";
|
||||
import { EdgeCalculatorDirections } from "../../../src/graph/edge/EdgeCalculatorDirections";
|
||||
import { EdgeCalculatorSettings } from "../../../src/graph/edge/EdgeCalculatorSettings";
|
||||
import { EdgeDirection } from "../../../src/graph/edge/EdgeDirection";
|
||||
import { IEdge } from "../../../src/graph/edge/interfaces/IEdge";
|
||||
import { IPotentialEdge } from "../../../src/graph/edge/interfaces/IPotentialEdge";
|
||||
import { NavigationDirection } from "../../../src/graph/edge/NavigationDirection";
|
||||
import { NavigationEdge } from "../../../src/graph/edge/interfaces/NavigationEdge";
|
||||
import { PotentialEdge } from "../../../src/graph/edge/interfaces/PotentialEdge";
|
||||
import { Node } from "../../../src/graph/Node";
|
||||
|
||||
import { EdgeCalculatorHelper } from "../../helper/EdgeCalculatorHelper";
|
||||
@ -16,7 +16,7 @@ describe("EdgeCalculator.computeSimilarEdges", () => {
|
||||
let helper: EdgeCalculatorHelper;
|
||||
|
||||
let node: Node;
|
||||
let potentialEdge: IPotentialEdge;
|
||||
let potentialEdge: PotentialEdge;
|
||||
|
||||
beforeEach(() => {
|
||||
settings = new EdgeCalculatorSettings();
|
||||
@ -51,14 +51,14 @@ describe("EdgeCalculator.computeSimilarEdges", () => {
|
||||
potentialEdge.sameMergeCC = true;
|
||||
potentialEdge.sequenceKey = "other";
|
||||
|
||||
let similarEdges: IEdge[] = edgeCalculator.computeSimilarEdges(node, [potentialEdge]);
|
||||
let similarEdges: NavigationEdge[] = edgeCalculator.computeSimilarEdges(node, [potentialEdge]);
|
||||
|
||||
expect(similarEdges.length).toBe(1);
|
||||
|
||||
let similarEdge: IEdge = similarEdges[0];
|
||||
let similarEdge: NavigationEdge = similarEdges[0];
|
||||
|
||||
expect(similarEdge.to).toBe(potentialEdge.key);
|
||||
expect(similarEdge.data.direction).toBe(EdgeDirection.Similar);
|
||||
expect(similarEdge.target).toBe(potentialEdge.key);
|
||||
expect(similarEdge.data.direction).toBe(NavigationDirection.Similar);
|
||||
});
|
||||
|
||||
it("should not have a similar edge if sequence is missing on potential edge", () => {
|
||||
@ -66,7 +66,7 @@ describe("EdgeCalculator.computeSimilarEdges", () => {
|
||||
potentialEdge.sameMergeCC = true;
|
||||
potentialEdge.sequenceKey = null;
|
||||
|
||||
let similarEdges: IEdge[] = edgeCalculator.computeSimilarEdges(node, [potentialEdge]);
|
||||
let similarEdges: NavigationEdge[] = edgeCalculator.computeSimilarEdges(node, [potentialEdge]);
|
||||
|
||||
expect(similarEdges.length).toBe(0);
|
||||
});
|
||||
@ -76,7 +76,7 @@ describe("EdgeCalculator.computeSimilarEdges", () => {
|
||||
potentialEdge.sameSequence = true;
|
||||
potentialEdge.sequenceKey = "other";
|
||||
|
||||
let similarEdges: IEdge[] = edgeCalculator.computeSimilarEdges(node, [potentialEdge]);
|
||||
let similarEdges: NavigationEdge[] = edgeCalculator.computeSimilarEdges(node, [potentialEdge]);
|
||||
|
||||
expect(similarEdges.length).toBe(0);
|
||||
});
|
||||
@ -86,7 +86,7 @@ describe("EdgeCalculator.computeSimilarEdges", () => {
|
||||
potentialEdge.sameSequence = true;
|
||||
potentialEdge.sequenceKey = "other";
|
||||
|
||||
let similarEdges: IEdge[] = edgeCalculator.computeSimilarEdges(node, [potentialEdge]);
|
||||
let similarEdges: NavigationEdge[] = edgeCalculator.computeSimilarEdges(node, [potentialEdge]);
|
||||
|
||||
expect(similarEdges.length).toBe(0);
|
||||
});
|
||||
@ -95,7 +95,7 @@ describe("EdgeCalculator.computeSimilarEdges", () => {
|
||||
potentialEdge.sameMergeCC = false;
|
||||
potentialEdge.sequenceKey = "other";
|
||||
|
||||
let similarEdges: IEdge[] = edgeCalculator.computeSimilarEdges(node, [potentialEdge]);
|
||||
let similarEdges: NavigationEdge[] = edgeCalculator.computeSimilarEdges(node, [potentialEdge]);
|
||||
|
||||
expect(similarEdges.length).toBe(1);
|
||||
});
|
||||
@ -104,7 +104,7 @@ describe("EdgeCalculator.computeSimilarEdges", () => {
|
||||
potentialEdge.sameMergeCC = true;
|
||||
potentialEdge.sequenceKey = "other";
|
||||
|
||||
let similarEdges: IEdge[] = edgeCalculator.computeSimilarEdges(node, [potentialEdge]);
|
||||
let similarEdges: NavigationEdge[] = edgeCalculator.computeSimilarEdges(node, [potentialEdge]);
|
||||
|
||||
expect(similarEdges.length).toBe(1);
|
||||
});
|
||||
@ -116,7 +116,7 @@ describe("EdgeCalculator.computeSimilarEdges", () => {
|
||||
potentialEdge.sameMergeCC = true;
|
||||
potentialEdge.sequenceKey = "other";
|
||||
|
||||
let similarEdges: IEdge[] = edgeCalculator.computeSimilarEdges(node, [potentialEdge]);
|
||||
let similarEdges: NavigationEdge[] = edgeCalculator.computeSimilarEdges(node, [potentialEdge]);
|
||||
|
||||
expect(similarEdges.length).toBe(0);
|
||||
});
|
||||
@ -128,7 +128,7 @@ describe("EdgeCalculator.computeSimilarEdges", () => {
|
||||
potentialEdge.sameMergeCC = true;
|
||||
potentialEdge.sequenceKey = "other";
|
||||
|
||||
let similarEdges: IEdge[] = edgeCalculator.computeSimilarEdges(node, [potentialEdge]);
|
||||
let similarEdges: NavigationEdge[] = edgeCalculator.computeSimilarEdges(node, [potentialEdge]);
|
||||
|
||||
expect(similarEdges.length).toBe(0);
|
||||
});
|
||||
@ -141,14 +141,14 @@ describe("EdgeCalculator.computeSimilarEdges", () => {
|
||||
potentialEdge.sameMergeCC = true;
|
||||
potentialEdge.sequenceKey = "other";
|
||||
|
||||
let similarEdges: IEdge[] = edgeCalculator.computeSimilarEdges(node, [potentialEdge]);
|
||||
let similarEdges: NavigationEdge[] = edgeCalculator.computeSimilarEdges(node, [potentialEdge]);
|
||||
|
||||
expect(similarEdges.length).toBe(1);
|
||||
|
||||
let similarEdge: IEdge = similarEdges[0];
|
||||
let similarEdge: NavigationEdge = similarEdges[0];
|
||||
|
||||
expect(similarEdge.to).toBe(potentialEdge.key);
|
||||
expect(similarEdge.data.direction).toBe(EdgeDirection.Similar);
|
||||
expect(similarEdge.target).toBe(potentialEdge.key);
|
||||
expect(similarEdge.data.direction).toBe(NavigationDirection.Similar);
|
||||
});
|
||||
|
||||
it("should not have a similar edge for the same user within min time diff", () => {
|
||||
@ -161,7 +161,7 @@ describe("EdgeCalculator.computeSimilarEdges", () => {
|
||||
potentialEdge.sameUser = true;
|
||||
potentialEdge.capturedAt = 1050;
|
||||
|
||||
let similarEdges: IEdge[] = edgeCalculator.computeSimilarEdges(node, [potentialEdge]);
|
||||
let similarEdges: NavigationEdge[] = edgeCalculator.computeSimilarEdges(node, [potentialEdge]);
|
||||
|
||||
expect(similarEdges.length).toBe(0);
|
||||
});
|
||||
@ -176,19 +176,19 @@ describe("EdgeCalculator.computeSimilarEdges", () => {
|
||||
potentialEdge.sameUser = true;
|
||||
potentialEdge.capturedAt = 1200;
|
||||
|
||||
let similarEdges: IEdge[] = edgeCalculator.computeSimilarEdges(node, [potentialEdge]);
|
||||
let similarEdges: NavigationEdge[] = edgeCalculator.computeSimilarEdges(node, [potentialEdge]);
|
||||
|
||||
expect(similarEdges.length).toBe(1);
|
||||
|
||||
let similarEdge: IEdge = similarEdges[0];
|
||||
let similarEdge: NavigationEdge = similarEdges[0];
|
||||
|
||||
expect(similarEdge.to).toBe(potentialEdge.key);
|
||||
expect(similarEdge.data.direction).toBe(EdgeDirection.Similar);
|
||||
expect(similarEdge.target).toBe(potentialEdge.key);
|
||||
expect(similarEdge.data.direction).toBe(NavigationDirection.Similar);
|
||||
});
|
||||
|
||||
it("should have a multiple similar edges from different sequences", () => {
|
||||
let potentialEdge1: IPotentialEdge = helper.createPotentialEdge();
|
||||
let potentialEdge2: IPotentialEdge = helper.createPotentialEdge();
|
||||
let potentialEdge1: PotentialEdge = helper.createPotentialEdge();
|
||||
let potentialEdge2: PotentialEdge = helper.createPotentialEdge();
|
||||
|
||||
potentialEdge1.key = "k1";
|
||||
potentialEdge1.sameMergeCC = true;
|
||||
@ -198,20 +198,20 @@ describe("EdgeCalculator.computeSimilarEdges", () => {
|
||||
potentialEdge2.sameMergeCC = true;
|
||||
potentialEdge2.sequenceKey = "s2";
|
||||
|
||||
let similarEdges: IEdge[] =
|
||||
let similarEdges: NavigationEdge[] =
|
||||
edgeCalculator.computeSimilarEdges(node, [potentialEdge1, potentialEdge2]);
|
||||
|
||||
expect(similarEdges.length).toBe(2);
|
||||
|
||||
for (let similarEdge of similarEdges) {
|
||||
expect(similarEdge.data.direction).toBe(EdgeDirection.Similar);
|
||||
expect(similarEdge.data.direction).toBe(NavigationDirection.Similar);
|
||||
}
|
||||
|
||||
for (let key of [potentialEdge1.key, potentialEdge2.key]) {
|
||||
let count: number = 0;
|
||||
|
||||
for (let similarEdge of similarEdges) {
|
||||
if (similarEdge.to === key) {
|
||||
if (similarEdge.target === key) {
|
||||
count++;
|
||||
}
|
||||
}
|
||||
@ -221,8 +221,8 @@ describe("EdgeCalculator.computeSimilarEdges", () => {
|
||||
});
|
||||
|
||||
it("should have only one similar edge for a sequence based on distance", () => {
|
||||
let potentialEdge1: IPotentialEdge = helper.createPotentialEdge();
|
||||
let potentialEdge2: IPotentialEdge = helper.createPotentialEdge();
|
||||
let potentialEdge1: PotentialEdge = helper.createPotentialEdge();
|
||||
let potentialEdge2: PotentialEdge = helper.createPotentialEdge();
|
||||
|
||||
potentialEdge1.key = "k1";
|
||||
potentialEdge1.distance = 2;
|
||||
@ -234,20 +234,20 @@ describe("EdgeCalculator.computeSimilarEdges", () => {
|
||||
potentialEdge2.sameMergeCC = true;
|
||||
potentialEdge2.sequenceKey = "s1";
|
||||
|
||||
let similarEdges: IEdge[] =
|
||||
let similarEdges: NavigationEdge[] =
|
||||
edgeCalculator.computeSimilarEdges(node, [potentialEdge1, potentialEdge2]);
|
||||
|
||||
expect(similarEdges.length).toBe(1);
|
||||
|
||||
let similarEdge: IEdge = similarEdges[0];
|
||||
let similarEdge: NavigationEdge = similarEdges[0];
|
||||
|
||||
expect(similarEdge.to).toBe(potentialEdge2.key);
|
||||
expect(similarEdge.data.direction).toBe(EdgeDirection.Similar);
|
||||
expect(similarEdge.target).toBe(potentialEdge2.key);
|
||||
expect(similarEdge.data.direction).toBe(NavigationDirection.Similar);
|
||||
});
|
||||
|
||||
it("should have only one similar edge for a sequence based on rotation", () => {
|
||||
let potentialEdge1: IPotentialEdge = helper.createPotentialEdge();
|
||||
let potentialEdge2: IPotentialEdge = helper.createPotentialEdge();
|
||||
let potentialEdge1: PotentialEdge = helper.createPotentialEdge();
|
||||
let potentialEdge2: PotentialEdge = helper.createPotentialEdge();
|
||||
|
||||
potentialEdge1.key = "k1";
|
||||
potentialEdge1.rotation = 2;
|
||||
@ -259,14 +259,14 @@ describe("EdgeCalculator.computeSimilarEdges", () => {
|
||||
potentialEdge2.sameMergeCC = true;
|
||||
potentialEdge2.sequenceKey = "s1";
|
||||
|
||||
let similarEdges: IEdge[] =
|
||||
let similarEdges: NavigationEdge[] =
|
||||
edgeCalculator.computeSimilarEdges(node, [potentialEdge1, potentialEdge2]);
|
||||
|
||||
expect(similarEdges.length).toBe(1);
|
||||
|
||||
let similarEdge: IEdge = similarEdges[0];
|
||||
let similarEdge: NavigationEdge = similarEdges[0];
|
||||
|
||||
expect(similarEdge.to).toBe(potentialEdge2.key);
|
||||
expect(similarEdge.data.direction).toBe(EdgeDirection.Similar);
|
||||
expect(similarEdge.target).toBe(potentialEdge2.key);
|
||||
expect(similarEdge.data.direction).toBe(NavigationDirection.Similar);
|
||||
});
|
||||
});
|
||||
|
||||
@ -1,9 +1,9 @@
|
||||
import { EdgeCalculator } from "../../../src/graph/edge/EdgeCalculator";
|
||||
import { EdgeCalculatorDirections } from "../../../src/graph/edge/EdgeCalculatorDirections";
|
||||
import { EdgeCalculatorSettings } from "../../../src/graph/edge/EdgeCalculatorSettings";
|
||||
import { EdgeDirection } from "../../../src/graph/edge/EdgeDirection";
|
||||
import { IEdge } from "../../../src/graph/edge/interfaces/IEdge";
|
||||
import { IPotentialEdge } from "../../../src/graph/edge/interfaces/IPotentialEdge";
|
||||
import { NavigationDirection } from "../../../src/graph/edge/NavigationDirection";
|
||||
import { NavigationEdge } from "../../../src/graph/edge/interfaces/NavigationEdge";
|
||||
import { PotentialEdge } from "../../../src/graph/edge/interfaces/PotentialEdge";
|
||||
import { Node } from "../../../src/graph/Node";
|
||||
import { EdgeCalculatorHelper } from "../../helper/EdgeCalculatorHelper";
|
||||
|
||||
@ -15,14 +15,14 @@ describe("EdgeCalculator.computeStepEdges", () => {
|
||||
let helper: EdgeCalculatorHelper;
|
||||
|
||||
let node: Node;
|
||||
let potentialEdge: IPotentialEdge;
|
||||
let potentialEdge: PotentialEdge;
|
||||
|
||||
beforeEach(() => {
|
||||
settings = new EdgeCalculatorSettings();
|
||||
|
||||
directions = new EdgeCalculatorDirections();
|
||||
directions.steps[EdgeDirection.StepForward].useFallback = true;
|
||||
directions.steps[EdgeDirection.StepBackward].useFallback = false;
|
||||
directions.steps[NavigationDirection.StepForward].useFallback = true;
|
||||
directions.steps[NavigationDirection.StepBackward].useFallback = false;
|
||||
|
||||
edgeCalculator = new EdgeCalculator(settings, directions);
|
||||
|
||||
@ -45,59 +45,59 @@ describe("EdgeCalculator.computeStepEdges", () => {
|
||||
it("should have a step forward edge", () => {
|
||||
potentialEdge.motionChange = 0;
|
||||
|
||||
let stepEdges: IEdge[] = edgeCalculator.computeStepEdges(node, [potentialEdge], null, null);
|
||||
let stepEdges: NavigationEdge[] = edgeCalculator.computeStepEdges(node, [potentialEdge], null, null);
|
||||
|
||||
expect(stepEdges.length).toBe(1);
|
||||
|
||||
let stepEdge: IEdge = stepEdges[0];
|
||||
let stepEdge: NavigationEdge = stepEdges[0];
|
||||
|
||||
expect(stepEdge.to).toBe(potentialEdge.key);
|
||||
expect(stepEdge.data.direction).toBe(EdgeDirection.StepForward);
|
||||
expect(stepEdge.target).toBe(potentialEdge.key);
|
||||
expect(stepEdge.data.direction).toBe(NavigationDirection.StepForward);
|
||||
});
|
||||
|
||||
it("should have a step left edge", () => {
|
||||
potentialEdge.motionChange = Math.PI / 2;
|
||||
|
||||
let stepEdges: IEdge[] = edgeCalculator.computeStepEdges(node, [potentialEdge], null, null);
|
||||
let stepEdges: NavigationEdge[] = edgeCalculator.computeStepEdges(node, [potentialEdge], null, null);
|
||||
|
||||
expect(stepEdges.length).toBe(1);
|
||||
|
||||
let stepEdge: IEdge = stepEdges[0];
|
||||
let stepEdge: NavigationEdge = stepEdges[0];
|
||||
|
||||
expect(stepEdge.to).toBe(potentialEdge.key);
|
||||
expect(stepEdge.data.direction).toBe(EdgeDirection.StepLeft);
|
||||
expect(stepEdge.target).toBe(potentialEdge.key);
|
||||
expect(stepEdge.data.direction).toBe(NavigationDirection.StepLeft);
|
||||
});
|
||||
|
||||
it("should have a step right edge", () => {
|
||||
potentialEdge.motionChange = -Math.PI / 2;
|
||||
|
||||
let stepEdges: IEdge[] = edgeCalculator.computeStepEdges(node, [potentialEdge], null, null);
|
||||
let stepEdges: NavigationEdge[] = edgeCalculator.computeStepEdges(node, [potentialEdge], null, null);
|
||||
|
||||
expect(stepEdges.length).toBe(1);
|
||||
|
||||
let stepEdge: IEdge = stepEdges[0];
|
||||
let stepEdge: NavigationEdge = stepEdges[0];
|
||||
|
||||
expect(stepEdge.to).toBe(potentialEdge.key);
|
||||
expect(stepEdge.data.direction).toBe(EdgeDirection.StepRight);
|
||||
expect(stepEdge.target).toBe(potentialEdge.key);
|
||||
expect(stepEdge.data.direction).toBe(NavigationDirection.StepRight);
|
||||
});
|
||||
|
||||
it("should have a step back edge", () => {
|
||||
potentialEdge.motionChange = Math.PI;
|
||||
|
||||
let stepEdges: IEdge[] = edgeCalculator.computeStepEdges(node, [potentialEdge], null, null);
|
||||
let stepEdges: NavigationEdge[] = edgeCalculator.computeStepEdges(node, [potentialEdge], null, null);
|
||||
|
||||
expect(stepEdges.length).toBe(1);
|
||||
|
||||
let stepEdge: IEdge = stepEdges[0];
|
||||
let stepEdge: NavigationEdge = stepEdges[0];
|
||||
|
||||
expect(stepEdge.to).toBe(potentialEdge.key);
|
||||
expect(stepEdge.data.direction).toBe(EdgeDirection.StepBackward);
|
||||
expect(stepEdge.target).toBe(potentialEdge.key);
|
||||
expect(stepEdge.data.direction).toBe(NavigationDirection.StepBackward);
|
||||
});
|
||||
|
||||
it("should not have any edges because potential is spherical", () => {
|
||||
potentialEdge.spherical = true;
|
||||
|
||||
let stepEdges: IEdge[] = edgeCalculator.computeStepEdges(node, [potentialEdge], null, null);
|
||||
let stepEdges: NavigationEdge[] = edgeCalculator.computeStepEdges(node, [potentialEdge], null, null);
|
||||
|
||||
expect(stepEdges.length).toBe(0);
|
||||
});
|
||||
@ -105,7 +105,7 @@ describe("EdgeCalculator.computeStepEdges", () => {
|
||||
it("should not have any edges because of max distance", () => {
|
||||
potentialEdge.distance = settings.stepMaxDistance + 1;
|
||||
|
||||
let stepEdges: IEdge[] = edgeCalculator.computeStepEdges(node, [potentialEdge], null, null);
|
||||
let stepEdges: NavigationEdge[] = edgeCalculator.computeStepEdges(node, [potentialEdge], null, null);
|
||||
|
||||
expect(stepEdges.length).toBe(0);
|
||||
});
|
||||
@ -113,7 +113,7 @@ describe("EdgeCalculator.computeStepEdges", () => {
|
||||
it("should not have any edges because of direction change", () => {
|
||||
potentialEdge.directionChange = settings.stepMaxDirectionChange + Math.PI / 18;
|
||||
|
||||
let stepEdges: IEdge[] = edgeCalculator.computeStepEdges(node, [potentialEdge], null, null);
|
||||
let stepEdges: NavigationEdge[] = edgeCalculator.computeStepEdges(node, [potentialEdge], null, null);
|
||||
|
||||
expect(stepEdges.length).toBe(0);
|
||||
});
|
||||
@ -121,7 +121,7 @@ describe("EdgeCalculator.computeStepEdges", () => {
|
||||
it("should not have any edges because of negative direction change", () => {
|
||||
potentialEdge.directionChange = -settings.stepMaxDirectionChange - Math.PI / 18;
|
||||
|
||||
let stepEdges: IEdge[] = edgeCalculator.computeStepEdges(node, [potentialEdge], null, null);
|
||||
let stepEdges: NavigationEdge[] = edgeCalculator.computeStepEdges(node, [potentialEdge], null, null);
|
||||
|
||||
expect(stepEdges.length).toBe(0);
|
||||
});
|
||||
@ -129,7 +129,7 @@ describe("EdgeCalculator.computeStepEdges", () => {
|
||||
it("should not have any edges because of drift", () => {
|
||||
potentialEdge.motionChange = settings.stepMaxDrift + Math.PI / 18;
|
||||
|
||||
let stepEdges: IEdge[] = edgeCalculator.computeStepEdges(node, [potentialEdge], null, null);
|
||||
let stepEdges: NavigationEdge[] = edgeCalculator.computeStepEdges(node, [potentialEdge], null, null);
|
||||
|
||||
expect(stepEdges.length).toBe(0);
|
||||
});
|
||||
@ -137,7 +137,7 @@ describe("EdgeCalculator.computeStepEdges", () => {
|
||||
it("should not have any edges because of negative drift", () => {
|
||||
potentialEdge.motionChange = -settings.stepMaxDrift - Math.PI / 18;
|
||||
|
||||
let stepEdges: IEdge[] = edgeCalculator.computeStepEdges(node, [potentialEdge], null, null);
|
||||
let stepEdges: NavigationEdge[] = edgeCalculator.computeStepEdges(node, [potentialEdge], null, null);
|
||||
|
||||
expect(stepEdges.length).toBe(0);
|
||||
});
|
||||
@ -146,7 +146,7 @@ describe("EdgeCalculator.computeStepEdges", () => {
|
||||
potentialEdge.distance = settings.stepMaxDistance + 1;
|
||||
potentialEdge.motionChange = 0;
|
||||
|
||||
let stepEdges: IEdge[] = edgeCalculator.computeStepEdges(
|
||||
let stepEdges: NavigationEdge[] = edgeCalculator.computeStepEdges(
|
||||
node,
|
||||
[potentialEdge],
|
||||
potentialEdge.key,
|
||||
@ -154,17 +154,17 @@ describe("EdgeCalculator.computeStepEdges", () => {
|
||||
|
||||
expect(stepEdges.length).toBe(1);
|
||||
|
||||
let stepEdge: IEdge = stepEdges[0];
|
||||
let stepEdge: NavigationEdge = stepEdges[0];
|
||||
|
||||
expect(stepEdge.to).toBe(potentialEdge.key);
|
||||
expect(stepEdge.data.direction).toBe(EdgeDirection.StepForward);
|
||||
expect(stepEdge.target).toBe(potentialEdge.key);
|
||||
expect(stepEdge.data.direction).toBe(NavigationDirection.StepForward);
|
||||
});
|
||||
|
||||
it("should not fallback to previous node with disabled fallback setting", () => {
|
||||
potentialEdge.distance = settings.stepMaxDistance + 1;
|
||||
potentialEdge.motionChange = Math.PI;
|
||||
|
||||
let stepEdges: IEdge[] = edgeCalculator.computeStepEdges(
|
||||
let stepEdges: NavigationEdge[] = edgeCalculator.computeStepEdges(
|
||||
node,
|
||||
[potentialEdge],
|
||||
null,
|
||||
@ -176,7 +176,7 @@ describe("EdgeCalculator.computeStepEdges", () => {
|
||||
it("should not have any edges if node is spherical", () => {
|
||||
node = helper.createDefaultNode(true);
|
||||
|
||||
let stepEdges: IEdge[] = edgeCalculator.computeStepEdges(node, [potentialEdge], null, null);
|
||||
let stepEdges: NavigationEdge[] = edgeCalculator.computeStepEdges(node, [potentialEdge], null, null);
|
||||
|
||||
expect(stepEdges.length).toBe(0);
|
||||
});
|
||||
@ -190,8 +190,8 @@ describe("EdgeCalculator.computeStepEdges", () => {
|
||||
let helper: EdgeCalculatorHelper;
|
||||
|
||||
let node: Node;
|
||||
let potentialEdge1: IPotentialEdge;
|
||||
let potentialEdge2: IPotentialEdge;
|
||||
let potentialEdge1: PotentialEdge;
|
||||
let potentialEdge2: PotentialEdge;
|
||||
|
||||
beforeEach(() => {
|
||||
settings = new EdgeCalculatorSettings();
|
||||
@ -212,84 +212,84 @@ describe("EdgeCalculator.computeStepEdges", () => {
|
||||
potentialEdge1.distance = settings.stepPreferredDistance + 1;
|
||||
potentialEdge2.distance = settings.stepPreferredDistance;
|
||||
|
||||
let stepEdges: IEdge[] = edgeCalculator.computeStepEdges(node, [potentialEdge1, potentialEdge2], null, null);
|
||||
let stepEdges: NavigationEdge[] = edgeCalculator.computeStepEdges(node, [potentialEdge1, potentialEdge2], null, null);
|
||||
|
||||
expect(stepEdges.length).toBe(1);
|
||||
|
||||
let stepEdge: IEdge = stepEdges[0];
|
||||
let stepEdge: NavigationEdge = stepEdges[0];
|
||||
|
||||
expect(stepEdge.to).toBe(potentialEdge2.key);
|
||||
expect(stepEdge.data.direction).toBe(EdgeDirection.StepForward);
|
||||
expect(stepEdge.target).toBe(potentialEdge2.key);
|
||||
expect(stepEdge.data.direction).toBe(NavigationDirection.StepForward);
|
||||
});
|
||||
|
||||
it("should have a step forward edge based on preferred distance", () => {
|
||||
potentialEdge1.distance = settings.stepPreferredDistance - 1;
|
||||
potentialEdge2.distance = settings.stepPreferredDistance;
|
||||
|
||||
let stepEdges: IEdge[] = edgeCalculator.computeStepEdges(node, [potentialEdge1, potentialEdge2], null, null);
|
||||
let stepEdges: NavigationEdge[] = edgeCalculator.computeStepEdges(node, [potentialEdge1, potentialEdge2], null, null);
|
||||
|
||||
expect(stepEdges.length).toBe(1);
|
||||
|
||||
let stepEdge: IEdge = stepEdges[0];
|
||||
let stepEdge: NavigationEdge = stepEdges[0];
|
||||
|
||||
expect(stepEdge.to).toBe(potentialEdge2.key);
|
||||
expect(stepEdge.data.direction).toBe(EdgeDirection.StepForward);
|
||||
expect(stepEdge.target).toBe(potentialEdge2.key);
|
||||
expect(stepEdge.data.direction).toBe(NavigationDirection.StepForward);
|
||||
});
|
||||
|
||||
it("should have a step forward edge for smallest motion change", () => {
|
||||
potentialEdge1.motionChange = settings.stepMaxDrift / 2;
|
||||
potentialEdge2.motionChange = settings.stepMaxDrift / 4;
|
||||
|
||||
let stepEdges: IEdge[] = edgeCalculator.computeStepEdges(node, [potentialEdge1, potentialEdge2], null, null);
|
||||
let stepEdges: NavigationEdge[] = edgeCalculator.computeStepEdges(node, [potentialEdge1, potentialEdge2], null, null);
|
||||
|
||||
expect(stepEdges.length).toBe(1);
|
||||
|
||||
let stepEdge: IEdge = stepEdges[0];
|
||||
let stepEdge: NavigationEdge = stepEdges[0];
|
||||
|
||||
expect(stepEdge.to).toBe(potentialEdge2.key);
|
||||
expect(stepEdge.data.direction).toBe(EdgeDirection.StepForward);
|
||||
expect(stepEdge.target).toBe(potentialEdge2.key);
|
||||
expect(stepEdge.data.direction).toBe(NavigationDirection.StepForward);
|
||||
});
|
||||
|
||||
it("should have a step forward edge for smallest motion change", () => {
|
||||
potentialEdge1.motionChange = -settings.stepMaxDrift / 2;
|
||||
potentialEdge2.motionChange = -settings.stepMaxDrift / 4;
|
||||
|
||||
let stepEdges: IEdge[] = edgeCalculator.computeStepEdges(node, [potentialEdge1, potentialEdge2], null, null);
|
||||
let stepEdges: NavigationEdge[] = edgeCalculator.computeStepEdges(node, [potentialEdge1, potentialEdge2], null, null);
|
||||
|
||||
expect(stepEdges.length).toBe(1);
|
||||
|
||||
let stepEdge: IEdge = stepEdges[0];
|
||||
let stepEdge: NavigationEdge = stepEdges[0];
|
||||
|
||||
expect(stepEdge.to).toBe(potentialEdge2.key);
|
||||
expect(stepEdge.data.direction).toBe(EdgeDirection.StepForward);
|
||||
expect(stepEdge.target).toBe(potentialEdge2.key);
|
||||
expect(stepEdge.data.direction).toBe(NavigationDirection.StepForward);
|
||||
});
|
||||
|
||||
it("should have a step forward edge for smallest vertical motion change", () => {
|
||||
potentialEdge1.verticalMotion = settings.stepMaxDrift / 2;
|
||||
potentialEdge2.verticalMotion = settings.stepMaxDrift / 4;
|
||||
|
||||
let stepEdges: IEdge[] = edgeCalculator.computeStepEdges(node, [potentialEdge1, potentialEdge2], null, null);
|
||||
let stepEdges: NavigationEdge[] = edgeCalculator.computeStepEdges(node, [potentialEdge1, potentialEdge2], null, null);
|
||||
|
||||
expect(stepEdges.length).toBe(1);
|
||||
|
||||
let stepEdge: IEdge = stepEdges[0];
|
||||
let stepEdge: NavigationEdge = stepEdges[0];
|
||||
|
||||
expect(stepEdge.to).toBe(potentialEdge2.key);
|
||||
expect(stepEdge.data.direction).toBe(EdgeDirection.StepForward);
|
||||
expect(stepEdge.target).toBe(potentialEdge2.key);
|
||||
expect(stepEdge.data.direction).toBe(NavigationDirection.StepForward);
|
||||
});
|
||||
|
||||
it("should have a step forward edge for smallest vertical motion change", () => {
|
||||
potentialEdge1.verticalMotion = -settings.stepMaxDrift / 2;
|
||||
potentialEdge2.verticalMotion = -settings.stepMaxDrift / 4;
|
||||
|
||||
let stepEdges: IEdge[] = edgeCalculator.computeStepEdges(node, [potentialEdge1, potentialEdge2], null, null);
|
||||
let stepEdges: NavigationEdge[] = edgeCalculator.computeStepEdges(node, [potentialEdge1, potentialEdge2], null, null);
|
||||
|
||||
expect(stepEdges.length).toBe(1);
|
||||
|
||||
let stepEdge: IEdge = stepEdges[0];
|
||||
let stepEdge: NavigationEdge = stepEdges[0];
|
||||
|
||||
expect(stepEdge.to).toBe(potentialEdge2.key);
|
||||
expect(stepEdge.data.direction).toBe(EdgeDirection.StepForward);
|
||||
expect(stepEdge.target).toBe(potentialEdge2.key);
|
||||
expect(stepEdge.data.direction).toBe(NavigationDirection.StepForward);
|
||||
});
|
||||
|
||||
it("should have a step forward edge for smallest combined motion change", () => {
|
||||
@ -299,55 +299,55 @@ describe("EdgeCalculator.computeStepEdges", () => {
|
||||
potentialEdge2.motionChange = -settings.stepMaxDrift / 3;
|
||||
potentialEdge2.verticalMotion = -settings.stepMaxDrift / 3;
|
||||
|
||||
let stepEdges: IEdge[] = edgeCalculator.computeStepEdges(node, [potentialEdge1, potentialEdge2], null, null);
|
||||
let stepEdges: NavigationEdge[] = edgeCalculator.computeStepEdges(node, [potentialEdge1, potentialEdge2], null, null);
|
||||
|
||||
expect(stepEdges.length).toBe(1);
|
||||
|
||||
let stepEdge: IEdge = stepEdges[0];
|
||||
let stepEdge: NavigationEdge = stepEdges[0];
|
||||
|
||||
expect(stepEdge.to).toBe(potentialEdge2.key);
|
||||
expect(stepEdge.data.direction).toBe(EdgeDirection.StepForward);
|
||||
expect(stepEdge.target).toBe(potentialEdge2.key);
|
||||
expect(stepEdge.data.direction).toBe(NavigationDirection.StepForward);
|
||||
});
|
||||
|
||||
it("should have a step forward edge with the same sequence", () => {
|
||||
potentialEdge1.sameSequence = false;
|
||||
potentialEdge2.sameSequence = true;
|
||||
|
||||
let stepEdges: IEdge[] = edgeCalculator.computeStepEdges(node, [potentialEdge1, potentialEdge2], null, null);
|
||||
let stepEdges: NavigationEdge[] = edgeCalculator.computeStepEdges(node, [potentialEdge1, potentialEdge2], null, null);
|
||||
|
||||
expect(stepEdges.length).toBe(1);
|
||||
|
||||
let stepEdge: IEdge = stepEdges[0];
|
||||
let stepEdge: NavigationEdge = stepEdges[0];
|
||||
|
||||
expect(stepEdge.to).toBe(potentialEdge2.key);
|
||||
expect(stepEdge.data.direction).toBe(EdgeDirection.StepForward);
|
||||
expect(stepEdge.target).toBe(potentialEdge2.key);
|
||||
expect(stepEdge.data.direction).toBe(NavigationDirection.StepForward);
|
||||
});
|
||||
|
||||
it("should have a step forward edge with the same merge cc", () => {
|
||||
potentialEdge1.sameMergeCC = false;
|
||||
potentialEdge2.sameMergeCC = true;
|
||||
|
||||
let stepEdges: IEdge[] = edgeCalculator.computeStepEdges(node, [potentialEdge1, potentialEdge2], null, null);
|
||||
let stepEdges: NavigationEdge[] = edgeCalculator.computeStepEdges(node, [potentialEdge1, potentialEdge2], null, null);
|
||||
|
||||
expect(stepEdges.length).toBe(1);
|
||||
|
||||
let stepEdge: IEdge = stepEdges[0];
|
||||
let stepEdge: NavigationEdge = stepEdges[0];
|
||||
|
||||
expect(stepEdge.to).toBe(potentialEdge2.key);
|
||||
expect(stepEdge.data.direction).toBe(EdgeDirection.StepForward);
|
||||
expect(stepEdge.target).toBe(potentialEdge2.key);
|
||||
expect(stepEdge.data.direction).toBe(NavigationDirection.StepForward);
|
||||
});
|
||||
|
||||
it("should have a step forward edge with smallest rotation", () => {
|
||||
potentialEdge1.rotation = 0.2;
|
||||
potentialEdge2.rotation = 0.1;
|
||||
|
||||
let stepEdges: IEdge[] = edgeCalculator.computeStepEdges(node, [potentialEdge1, potentialEdge2], null, null);
|
||||
let stepEdges: NavigationEdge[] = edgeCalculator.computeStepEdges(node, [potentialEdge1, potentialEdge2], null, null);
|
||||
|
||||
expect(stepEdges.length).toBe(1);
|
||||
|
||||
let stepEdge: IEdge = stepEdges[0];
|
||||
let stepEdge: NavigationEdge = stepEdges[0];
|
||||
|
||||
expect(stepEdge.to).toBe(potentialEdge2.key);
|
||||
expect(stepEdge.data.direction).toBe(EdgeDirection.StepForward);
|
||||
expect(stepEdge.target).toBe(potentialEdge2.key);
|
||||
expect(stepEdge.data.direction).toBe(NavigationDirection.StepForward);
|
||||
});
|
||||
});
|
||||
|
||||
@ -1,9 +1,9 @@
|
||||
import { EdgeCalculator } from "../../../src/graph/edge/EdgeCalculator";
|
||||
import { EdgeCalculatorDirections } from "../../../src/graph/edge/EdgeCalculatorDirections";
|
||||
import { EdgeCalculatorSettings } from "../../../src/graph/edge/EdgeCalculatorSettings";
|
||||
import { EdgeDirection } from "../../../src/graph/edge/EdgeDirection";
|
||||
import { IEdge } from "../../../src/graph/edge/interfaces/IEdge";
|
||||
import { IPotentialEdge } from "../../../src/graph/edge/interfaces/IPotentialEdge";
|
||||
import { NavigationDirection } from "../../../src/graph/edge/NavigationDirection";
|
||||
import { NavigationEdge } from "../../../src/graph/edge/interfaces/NavigationEdge";
|
||||
import { PotentialEdge } from "../../../src/graph/edge/interfaces/PotentialEdge";
|
||||
import { Node } from "../../../src/graph/Node";
|
||||
import { EdgeCalculatorHelper } from "../../helper/EdgeCalculatorHelper";
|
||||
|
||||
@ -15,7 +15,7 @@ describe("EdgeCalculator.computeTurnEdges", () => {
|
||||
let helper: EdgeCalculatorHelper;
|
||||
|
||||
let node: Node;
|
||||
let potentialEdge: IPotentialEdge;
|
||||
let potentialEdge: PotentialEdge;
|
||||
|
||||
beforeEach(() => {
|
||||
settings = new EdgeCalculatorSettings();
|
||||
@ -42,7 +42,7 @@ describe("EdgeCalculator.computeTurnEdges", () => {
|
||||
potentialEdge.directionChange = Math.PI / 2;
|
||||
potentialEdge.spherical = true;
|
||||
|
||||
let stepEdges: IEdge[] = edgeCalculator.computeTurnEdges(node, [potentialEdge]);
|
||||
let stepEdges: NavigationEdge[] = edgeCalculator.computeTurnEdges(node, [potentialEdge]);
|
||||
|
||||
expect(stepEdges.length).toBe(0);
|
||||
});
|
||||
@ -50,40 +50,40 @@ describe("EdgeCalculator.computeTurnEdges", () => {
|
||||
it("should have a turn left edge", () => {
|
||||
potentialEdge.directionChange = Math.PI / 2;
|
||||
|
||||
let turnEdges: IEdge[] = edgeCalculator.computeTurnEdges(node, [potentialEdge]);
|
||||
let turnEdges: NavigationEdge[] = edgeCalculator.computeTurnEdges(node, [potentialEdge]);
|
||||
|
||||
expect(turnEdges.length).toBe(1);
|
||||
|
||||
let turnEdge: IEdge = turnEdges[0];
|
||||
let turnEdge: NavigationEdge = turnEdges[0];
|
||||
|
||||
expect(turnEdge.to).toBe(potentialEdge.key);
|
||||
expect(turnEdge.data.direction).toBe(EdgeDirection.TurnLeft);
|
||||
expect(turnEdge.target).toBe(potentialEdge.key);
|
||||
expect(turnEdge.data.direction).toBe(NavigationDirection.TurnLeft);
|
||||
});
|
||||
|
||||
it("should have a turn right edge", () => {
|
||||
potentialEdge.directionChange = -Math.PI / 2;
|
||||
|
||||
let turnEdges: IEdge[] = edgeCalculator.computeTurnEdges(node, [potentialEdge]);
|
||||
let turnEdges: NavigationEdge[] = edgeCalculator.computeTurnEdges(node, [potentialEdge]);
|
||||
|
||||
expect(turnEdges.length).toBe(1);
|
||||
|
||||
let turnEdge: IEdge = turnEdges[0];
|
||||
let turnEdge: NavigationEdge = turnEdges[0];
|
||||
|
||||
expect(turnEdge.to).toBe(potentialEdge.key);
|
||||
expect(turnEdge.data.direction).toBe(EdgeDirection.TurnRight);
|
||||
expect(turnEdge.target).toBe(potentialEdge.key);
|
||||
expect(turnEdge.data.direction).toBe(NavigationDirection.TurnRight);
|
||||
});
|
||||
|
||||
it("should have a u-turn edge", () => {
|
||||
potentialEdge.directionChange = Math.PI;
|
||||
|
||||
let turnEdges: IEdge[] = edgeCalculator.computeTurnEdges(node, [potentialEdge]);
|
||||
let turnEdges: NavigationEdge[] = edgeCalculator.computeTurnEdges(node, [potentialEdge]);
|
||||
|
||||
expect(turnEdges.length).toBe(1);
|
||||
|
||||
let turnEdge: IEdge = turnEdges[0];
|
||||
let turnEdge: NavigationEdge = turnEdges[0];
|
||||
|
||||
expect(turnEdge.to).toBe(potentialEdge.key);
|
||||
expect(turnEdge.data.direction).toBe(EdgeDirection.TurnU);
|
||||
expect(turnEdge.target).toBe(potentialEdge.key);
|
||||
expect(turnEdge.data.direction).toBe(NavigationDirection.TurnU);
|
||||
});
|
||||
|
||||
it("should not have a u-turn edge when node is spherical", () => {
|
||||
@ -91,7 +91,7 @@ describe("EdgeCalculator.computeTurnEdges", () => {
|
||||
|
||||
potentialEdge.directionChange = Math.PI;
|
||||
|
||||
let turnEdges: IEdge[] = edgeCalculator.computeTurnEdges(node, [potentialEdge]);
|
||||
let turnEdges: NavigationEdge[] = edgeCalculator.computeTurnEdges(node, [potentialEdge]);
|
||||
|
||||
expect(turnEdges.length).toBe(0);
|
||||
});
|
||||
@ -105,8 +105,8 @@ describe("EdgeCalculator.computeTurnEdges", () => {
|
||||
let helper: EdgeCalculatorHelper;
|
||||
|
||||
let node: Node;
|
||||
let potentialEdge1: IPotentialEdge;
|
||||
let potentialEdge2: IPotentialEdge;
|
||||
let potentialEdge1: PotentialEdge;
|
||||
let potentialEdge2: PotentialEdge;
|
||||
|
||||
beforeEach(() => {
|
||||
settings = new EdgeCalculatorSettings();
|
||||
@ -133,14 +133,14 @@ describe("EdgeCalculator.computeTurnEdges", () => {
|
||||
potentialEdge2.directionChange = Math.PI / 2;
|
||||
potentialEdge2.sameSequence = true;
|
||||
|
||||
let turnEdges: IEdge[] = edgeCalculator.computeTurnEdges(node, [potentialEdge1, potentialEdge2]);
|
||||
let turnEdges: NavigationEdge[] = edgeCalculator.computeTurnEdges(node, [potentialEdge1, potentialEdge2]);
|
||||
|
||||
expect(turnEdges.length).toBe(1);
|
||||
|
||||
let turnEdge: IEdge = turnEdges[0];
|
||||
let turnEdge: NavigationEdge = turnEdges[0];
|
||||
|
||||
expect(turnEdge.to).toBe(potentialEdge2.key);
|
||||
expect(turnEdge.data.direction).toBe(EdgeDirection.TurnLeft);
|
||||
expect(turnEdge.target).toBe(potentialEdge2.key);
|
||||
expect(turnEdge.data.direction).toBe(NavigationDirection.TurnLeft);
|
||||
});
|
||||
|
||||
it("should have a turn left with the same merge cc", () => {
|
||||
@ -150,14 +150,14 @@ describe("EdgeCalculator.computeTurnEdges", () => {
|
||||
potentialEdge2.directionChange = Math.PI / 2;
|
||||
potentialEdge2.sameMergeCC = true;
|
||||
|
||||
let turnEdges: IEdge[] = edgeCalculator.computeTurnEdges(node, [potentialEdge1, potentialEdge2]);
|
||||
let turnEdges: NavigationEdge[] = edgeCalculator.computeTurnEdges(node, [potentialEdge1, potentialEdge2]);
|
||||
|
||||
expect(turnEdges.length).toBe(1);
|
||||
|
||||
let turnEdge: IEdge = turnEdges[0];
|
||||
let turnEdge: NavigationEdge = turnEdges[0];
|
||||
|
||||
expect(turnEdge.to).toBe(potentialEdge2.key);
|
||||
expect(turnEdge.data.direction).toBe(EdgeDirection.TurnLeft);
|
||||
expect(turnEdge.target).toBe(potentialEdge2.key);
|
||||
expect(turnEdge.data.direction).toBe(NavigationDirection.TurnLeft);
|
||||
});
|
||||
|
||||
it("should have a turn left edge with the smallest distance", () => {
|
||||
@ -167,19 +167,19 @@ describe("EdgeCalculator.computeTurnEdges", () => {
|
||||
potentialEdge2.directionChange = Math.PI / 2;
|
||||
potentialEdge2.distance = 3;
|
||||
|
||||
let turnEdges: IEdge[] = edgeCalculator.computeTurnEdges(node, [potentialEdge1, potentialEdge2]);
|
||||
let turnEdges: NavigationEdge[] = edgeCalculator.computeTurnEdges(node, [potentialEdge1, potentialEdge2]);
|
||||
|
||||
expect(turnEdges.length).toBe(1);
|
||||
|
||||
let turnEdge: IEdge = turnEdges[0];
|
||||
let turnEdge: NavigationEdge = turnEdges[0];
|
||||
|
||||
expect(turnEdge.to).toBe(potentialEdge2.key);
|
||||
expect(turnEdge.data.direction).toBe(EdgeDirection.TurnLeft);
|
||||
expect(turnEdge.target).toBe(potentialEdge2.key);
|
||||
expect(turnEdge.data.direction).toBe(NavigationDirection.TurnLeft);
|
||||
});
|
||||
|
||||
it("should have a turn left edge with the smallest motion difference", () => {
|
||||
let motionChange: number =
|
||||
directions.turns[EdgeDirection.TurnLeft].motionChange;
|
||||
directions.turns[NavigationDirection.TurnLeft].motionChange;
|
||||
|
||||
potentialEdge1.directionChange = Math.PI / 2;
|
||||
potentialEdge1.motionChange = 0.9 * motionChange;
|
||||
@ -187,14 +187,14 @@ describe("EdgeCalculator.computeTurnEdges", () => {
|
||||
potentialEdge2.directionChange = Math.PI / 2;
|
||||
potentialEdge2.motionChange = motionChange;
|
||||
|
||||
let turnEdges: IEdge[] = edgeCalculator.computeTurnEdges(node, [potentialEdge1, potentialEdge2]);
|
||||
let turnEdges: NavigationEdge[] = edgeCalculator.computeTurnEdges(node, [potentialEdge1, potentialEdge2]);
|
||||
|
||||
expect(turnEdges.length).toBe(1);
|
||||
|
||||
let turnEdge: IEdge = turnEdges[0];
|
||||
let turnEdge: NavigationEdge = turnEdges[0];
|
||||
|
||||
expect(turnEdge.to).toBe(potentialEdge2.key);
|
||||
expect(turnEdge.data.direction).toBe(EdgeDirection.TurnLeft);
|
||||
expect(turnEdge.target).toBe(potentialEdge2.key);
|
||||
expect(turnEdge.data.direction).toBe(NavigationDirection.TurnLeft);
|
||||
});
|
||||
|
||||
it("should have a turn left edge for rig setup with smallest direction change", () => {
|
||||
@ -204,14 +204,14 @@ describe("EdgeCalculator.computeTurnEdges", () => {
|
||||
potentialEdge2.distance = 0.5 * settings.turnMaxRigDistance;
|
||||
potentialEdge2.directionChange = 1.1 * settings.turnMinRigDirectionChange;
|
||||
|
||||
let turnEdges: IEdge[] = edgeCalculator.computeTurnEdges(node, [potentialEdge1, potentialEdge2]);
|
||||
let turnEdges: NavigationEdge[] = edgeCalculator.computeTurnEdges(node, [potentialEdge1, potentialEdge2]);
|
||||
|
||||
expect(turnEdges.length).toBe(1);
|
||||
|
||||
let turnEdge: IEdge = turnEdges[0];
|
||||
let turnEdge: NavigationEdge = turnEdges[0];
|
||||
|
||||
expect(turnEdge.to).toBe(potentialEdge2.key);
|
||||
expect(turnEdge.data.direction).toBe(EdgeDirection.TurnLeft);
|
||||
expect(turnEdge.target).toBe(potentialEdge2.key);
|
||||
expect(turnEdge.data.direction).toBe(NavigationDirection.TurnLeft);
|
||||
});
|
||||
|
||||
it("should have a turn right edge for rig setup with smallest direction change", () => {
|
||||
@ -221,14 +221,14 @@ describe("EdgeCalculator.computeTurnEdges", () => {
|
||||
potentialEdge2.distance = 0.5 * settings.turnMaxRigDistance;
|
||||
potentialEdge2.directionChange = -1.1 * settings.turnMinRigDirectionChange;
|
||||
|
||||
let turnEdges: IEdge[] = edgeCalculator.computeTurnEdges(node, [potentialEdge1, potentialEdge2]);
|
||||
let turnEdges: NavigationEdge[] = edgeCalculator.computeTurnEdges(node, [potentialEdge1, potentialEdge2]);
|
||||
|
||||
expect(turnEdges.length).toBe(1);
|
||||
|
||||
let turnEdge: IEdge = turnEdges[0];
|
||||
let turnEdge: NavigationEdge = turnEdges[0];
|
||||
|
||||
expect(turnEdge.to).toBe(potentialEdge2.key);
|
||||
expect(turnEdge.data.direction).toBe(EdgeDirection.TurnRight);
|
||||
expect(turnEdge.target).toBe(potentialEdge2.key);
|
||||
expect(turnEdge.data.direction).toBe(NavigationDirection.TurnRight);
|
||||
});
|
||||
|
||||
it("should not have a turn left edge for rig with too small angle", () => {
|
||||
@ -238,7 +238,7 @@ describe("EdgeCalculator.computeTurnEdges", () => {
|
||||
potentialEdge1.distance = 0.5 * settings.turnMaxRigDistance;
|
||||
potentialEdge1.directionChange = -0.9 * settings.turnMinRigDirectionChange;
|
||||
|
||||
let turnEdges: IEdge[] = edgeCalculator.computeTurnEdges(node, [potentialEdge1, potentialEdge2]);
|
||||
let turnEdges: NavigationEdge[] = edgeCalculator.computeTurnEdges(node, [potentialEdge1, potentialEdge2]);
|
||||
|
||||
expect(turnEdges.length).toBe(0);
|
||||
});
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
import { GeoCoords } from "../../../src/geo/GeoCoords";
|
||||
import { ILatLonAlt } from "../../../src/geo/interfaces/ILatLonAlt";
|
||||
import { LatLonAltEnt } from "../../../src/api/ents/LatLonAltEnt";
|
||||
import { Spatial } from "../../../src/geo/Spatial";
|
||||
import { EdgeCalculator } from "../../../src/graph/edge/EdgeCalculator";
|
||||
import { IPotentialEdge } from "../../../src/graph/edge/interfaces/IPotentialEdge";
|
||||
import { PotentialEdge } from "../../../src/graph/edge/interfaces/PotentialEdge";
|
||||
import { Node } from "../../../src/graph/Node";
|
||||
import { EdgeCalculatorHelper } from "../../helper/EdgeCalculatorHelper";
|
||||
|
||||
@ -44,15 +44,15 @@ describe("EdgeCalculator.getPotentialEdges", () => {
|
||||
let edgeKey: string = "edgeKey";
|
||||
let sequenceKey: string = "skey";
|
||||
|
||||
let lla: ILatLonAlt = { alt: 0, lat: 0, lon: 0 };
|
||||
let lla: LatLonAltEnt = { alt: 0, lat: 0, lon: 0 };
|
||||
let node: Node = helper.createFullNode(key, lla, sequenceKey, [0, -Math.PI / 2, 0], 2, "perspective", 0, 0);
|
||||
|
||||
let enu: number[] = [10, 0, 0];
|
||||
let geodetic: number[] = geoCoords.enuToGeodetic(enu[0], enu[1], enu[2], lla.lat, lla.lon, lla.alt);
|
||||
let edgeLla: ILatLonAlt = { alt: geodetic[2], lat: geodetic[0], lon: geodetic[1] };
|
||||
let edgeLla: LatLonAltEnt = { alt: geodetic[2], lat: geodetic[0], lon: geodetic[1] };
|
||||
let edgeNode: Node = helper.createFullNode(edgeKey, edgeLla, sequenceKey, [0, -Math.PI / 2, 0]);
|
||||
|
||||
let potentialEdges: IPotentialEdge[] =
|
||||
let potentialEdges: PotentialEdge[] =
|
||||
edgeCalculator.getPotentialEdges(node, [edgeNode], []);
|
||||
|
||||
expect(potentialEdges.length).toBe(0);
|
||||
@ -63,20 +63,20 @@ describe("EdgeCalculator.getPotentialEdges", () => {
|
||||
let edgeKey: string = "edgeKey";
|
||||
let sequenceKey: string = "skey";
|
||||
|
||||
let lla: ILatLonAlt = { alt: 0, lat: 0, lon: 0 };
|
||||
let lla: LatLonAltEnt = { alt: 0, lat: 0, lon: 0 };
|
||||
let node: Node = helper.createFullNode(key, lla, sequenceKey, [0, -Math.PI / 2, 0]);
|
||||
|
||||
let enu: number[] = [10, 0, 0];
|
||||
let geodetic: number[] = geoCoords.enuToGeodetic(enu[0], enu[1], enu[2], lla.lat, lla.lon, lla.alt);
|
||||
let edgeLla: ILatLonAlt = { alt: geodetic[2], lat: geodetic[0], lon: geodetic[1] };
|
||||
let edgeLla: LatLonAltEnt = { alt: geodetic[2], lat: geodetic[0], lon: geodetic[1] };
|
||||
let edgeNode: Node = helper.createFullNode(edgeKey, edgeLla, sequenceKey, [0, -Math.PI / 2, 0]);
|
||||
|
||||
let potentialEdges: IPotentialEdge[] =
|
||||
let potentialEdges: PotentialEdge[] =
|
||||
edgeCalculator.getPotentialEdges(node, [edgeNode], []);
|
||||
|
||||
expect(potentialEdges.length).toBe(1);
|
||||
|
||||
let potentialEdge: IPotentialEdge = potentialEdges[0];
|
||||
let potentialEdge: PotentialEdge = potentialEdges[0];
|
||||
|
||||
expect(potentialEdge.key).toBe(edgeKey);
|
||||
expect(potentialEdge.distance).toBeCloseTo(10, precision);
|
||||
@ -95,15 +95,15 @@ describe("EdgeCalculator.getPotentialEdges", () => {
|
||||
let sequenceKey: string = "skey";
|
||||
let edgeKey: string = "edgeKey";
|
||||
|
||||
let lla: ILatLonAlt = { alt: 0, lat: 0, lon: 0 };
|
||||
let lla: LatLonAltEnt = { alt: 0, lat: 0, lon: 0 };
|
||||
let node: Node = helper.createFullNode(key, lla, sequenceKey, [0, -Math.PI / 2, 0]);
|
||||
|
||||
let enu: number[] = [10, 0, 0];
|
||||
let geodetic: number[] = geoCoords.enuToGeodetic(enu[0], enu[1], enu[2], lla.lat, lla.lon, lla.alt);
|
||||
let edgeLla: ILatLonAlt = { alt: geodetic[2], lat: geodetic[0], lon: geodetic[1] };
|
||||
let edgeLla: LatLonAltEnt = { alt: geodetic[2], lat: geodetic[0], lon: geodetic[1] };
|
||||
let edgeNode: Node = helper.createFullNode(edgeKey, edgeLla, null, [0, -Math.PI / 2, 0]);
|
||||
|
||||
let potentialEdges: IPotentialEdge[] =
|
||||
let potentialEdges: PotentialEdge[] =
|
||||
edgeCalculator.getPotentialEdges(node, [edgeNode], []);
|
||||
|
||||
expect(potentialEdges.length).toBe(1);
|
||||
@ -114,20 +114,20 @@ describe("EdgeCalculator.getPotentialEdges", () => {
|
||||
let edgeKey: string = "edgeKey";
|
||||
let sequenceKey: string = "skey";
|
||||
|
||||
let lla: ILatLonAlt = { alt: 0, lat: 0, lon: 0 };
|
||||
let lla: LatLonAltEnt = { alt: 0, lat: 0, lon: 0 };
|
||||
let node: Node = helper.createFullNode(key, lla, sequenceKey, [0, -Math.PI / 2, 0]);
|
||||
|
||||
let enu: number[] = [3, -4, 0];
|
||||
let geodetic: number[] = geoCoords.enuToGeodetic(enu[0], enu[1], enu[2], lla.lat, lla.lon, lla.alt);
|
||||
let edgeLla: ILatLonAlt = { alt: geodetic[2], lat: geodetic[0], lon: geodetic[1] };
|
||||
let edgeLla: LatLonAltEnt = { alt: geodetic[2], lat: geodetic[0], lon: geodetic[1] };
|
||||
let edgeNode: Node = helper.createFullNode(edgeKey, edgeLla, sequenceKey, [0, -Math.PI / 2, 0]);
|
||||
|
||||
let potentialEdges: IPotentialEdge[] =
|
||||
let potentialEdges: PotentialEdge[] =
|
||||
edgeCalculator.getPotentialEdges(node, [edgeNode], []);
|
||||
|
||||
expect(potentialEdges.length).toBe(1);
|
||||
|
||||
let potentialEdge: IPotentialEdge = potentialEdges[0];
|
||||
let potentialEdge: PotentialEdge = potentialEdges[0];
|
||||
|
||||
expect(potentialEdge.key).toBe(edgeKey);
|
||||
expect(potentialEdge.distance).toBeCloseTo(5, precision);
|
||||
@ -138,20 +138,20 @@ describe("EdgeCalculator.getPotentialEdges", () => {
|
||||
let edgeKey: string = "edgeKey";
|
||||
let sequenceKey: string = "skey";
|
||||
|
||||
let lla: ILatLonAlt = { alt: 0, lat: 0, lon: 0 };
|
||||
let lla: LatLonAltEnt = { alt: 0, lat: 0, lon: 0 };
|
||||
let node: Node = helper.createFullNode(key, lla, sequenceKey, [0, -Math.PI / 2, 0]);
|
||||
|
||||
let enu: number[] = [5, 5, 0];
|
||||
let geodetic: number[] = geoCoords.enuToGeodetic(enu[0], enu[1], enu[2], lla.lat, lla.lon, lla.alt);
|
||||
let edgeLla: ILatLonAlt = { alt: geodetic[2], lat: geodetic[0], lon: geodetic[1] };
|
||||
let edgeLla: LatLonAltEnt = { alt: geodetic[2], lat: geodetic[0], lon: geodetic[1] };
|
||||
let edgeNode: Node = helper.createFullNode(edgeKey, edgeLla, sequenceKey, [0, -Math.PI / 2, 0]);
|
||||
|
||||
let potentialEdges: IPotentialEdge[] =
|
||||
let potentialEdges: PotentialEdge[] =
|
||||
edgeCalculator.getPotentialEdges(node, [edgeNode], []);
|
||||
|
||||
expect(potentialEdges.length).toBe(1);
|
||||
|
||||
let potentialEdge: IPotentialEdge = potentialEdges[0];
|
||||
let potentialEdge: PotentialEdge = potentialEdges[0];
|
||||
|
||||
expect(potentialEdge.key).toBe(edgeKey);
|
||||
expect(potentialEdge.motionChange).toBeCloseTo(Math.PI / 4, precision);
|
||||
@ -162,20 +162,20 @@ describe("EdgeCalculator.getPotentialEdges", () => {
|
||||
let edgeKey: string = "edgeKey";
|
||||
let sequenceKey: string = "skey";
|
||||
|
||||
let lla: ILatLonAlt = { alt: 0, lat: 0, lon: 0 };
|
||||
let lla: LatLonAltEnt = { alt: 0, lat: 0, lon: 0 };
|
||||
let node: Node = helper.createFullNode(key, lla, sequenceKey, [Math.PI / 2, 0, 0]);
|
||||
|
||||
let enu: number[] = [5, 5, 0];
|
||||
let geodetic: number[] = geoCoords.enuToGeodetic(enu[0], enu[1], enu[2], lla.lat, lla.lon, lla.alt);
|
||||
let edgeLla: ILatLonAlt = { alt: geodetic[2], lat: geodetic[0], lon: geodetic[1] };
|
||||
let edgeLla: LatLonAltEnt = { alt: geodetic[2], lat: geodetic[0], lon: geodetic[1] };
|
||||
let edgeNode: Node = helper.createFullNode(edgeKey, edgeLla, sequenceKey, [Math.PI / 2, 0, 0]);
|
||||
|
||||
let potentialEdges: IPotentialEdge[] =
|
||||
let potentialEdges: PotentialEdge[] =
|
||||
edgeCalculator.getPotentialEdges(node, [edgeNode], []);
|
||||
|
||||
expect(potentialEdges.length).toBe(1);
|
||||
|
||||
let potentialEdge: IPotentialEdge = potentialEdges[0];
|
||||
let potentialEdge: PotentialEdge = potentialEdges[0];
|
||||
|
||||
expect(potentialEdge.key).toBe(edgeKey);
|
||||
expect(potentialEdge.motionChange).toBeCloseTo(-Math.PI / 4, precision);
|
||||
@ -186,20 +186,20 @@ describe("EdgeCalculator.getPotentialEdges", () => {
|
||||
let edgeKey: string = "edgeKey";
|
||||
let sequenceKey: string = "skey";
|
||||
|
||||
let lla: ILatLonAlt = { alt: 0, lat: 0, lon: 0 };
|
||||
let lla: LatLonAltEnt = { alt: 0, lat: 0, lon: 0 };
|
||||
let node: Node = helper.createFullNode(key, lla, sequenceKey, [Math.PI / 2, 0, 0]);
|
||||
|
||||
let enu: number[] = [0, -10, 0];
|
||||
let geodetic: number[] = geoCoords.enuToGeodetic(enu[0], enu[1], enu[2], lla.lat, lla.lon, lla.alt);
|
||||
let edgeLla: ILatLonAlt = { alt: geodetic[2], lat: geodetic[0], lon: geodetic[1] };
|
||||
let edgeLla: LatLonAltEnt = { alt: geodetic[2], lat: geodetic[0], lon: geodetic[1] };
|
||||
let edgeNode: Node = helper.createFullNode(edgeKey, edgeLla, sequenceKey, [Math.PI / 2, 0, 0]);
|
||||
|
||||
let potentialEdges: IPotentialEdge[] =
|
||||
let potentialEdges: PotentialEdge[] =
|
||||
edgeCalculator.getPotentialEdges(node, [edgeNode], []);
|
||||
|
||||
expect(potentialEdges.length).toBe(1);
|
||||
|
||||
let potentialEdge: IPotentialEdge = potentialEdges[0];
|
||||
let potentialEdge: PotentialEdge = potentialEdges[0];
|
||||
|
||||
expect(potentialEdge.key).toBe(edgeKey);
|
||||
expect(Math.abs(potentialEdge.motionChange)).toBeCloseTo(Math.PI, precision);
|
||||
@ -210,20 +210,20 @@ describe("EdgeCalculator.getPotentialEdges", () => {
|
||||
let edgeKey: string = "edgeKey";
|
||||
let sequenceKey: string = "skey";
|
||||
|
||||
let lla: ILatLonAlt = { alt: 0, lat: 0, lon: 0 };
|
||||
let lla: LatLonAltEnt = { alt: 0, lat: 0, lon: 0 };
|
||||
let node: Node = helper.createFullNode(key, lla, sequenceKey, [Math.PI / 2, 0, 0]);
|
||||
|
||||
let enu: number[] = [3, 4, 5];
|
||||
let geodetic: number[] = geoCoords.enuToGeodetic(enu[0], enu[1], enu[2], lla.lat, lla.lon, lla.alt);
|
||||
let edgeLla: ILatLonAlt = { alt: geodetic[2], lat: geodetic[0], lon: geodetic[1] };
|
||||
let edgeLla: LatLonAltEnt = { alt: geodetic[2], lat: geodetic[0], lon: geodetic[1] };
|
||||
let edgeNode: Node = helper.createFullNode(edgeKey, edgeLla, sequenceKey, [Math.PI / 2, 0, 0]);
|
||||
|
||||
let potentialEdges: IPotentialEdge[] =
|
||||
let potentialEdges: PotentialEdge[] =
|
||||
edgeCalculator.getPotentialEdges(node, [edgeNode], []);
|
||||
|
||||
expect(potentialEdges.length).toBe(1);
|
||||
|
||||
let potentialEdge: IPotentialEdge = potentialEdges[0];
|
||||
let potentialEdge: PotentialEdge = potentialEdges[0];
|
||||
|
||||
expect(potentialEdge.key).toBe(edgeKey);
|
||||
expect(potentialEdge.verticalMotion).toBeCloseTo(Math.PI / 4, precision);
|
||||
@ -234,20 +234,20 @@ describe("EdgeCalculator.getPotentialEdges", () => {
|
||||
let edgeKey: string = "edgeKey";
|
||||
let sequenceKey: string = "skey";
|
||||
|
||||
let lla: ILatLonAlt = { alt: 0, lat: 0, lon: 0 };
|
||||
let lla: LatLonAltEnt = { alt: 0, lat: 0, lon: 0 };
|
||||
let node: Node = helper.createFullNode(key, lla, sequenceKey, [Math.PI / 2, 0, 0]);
|
||||
|
||||
let enu: number[] = [-3, 4, -5];
|
||||
let geodetic: number[] = geoCoords.enuToGeodetic(enu[0], enu[1], enu[2], lla.lat, lla.lon, lla.alt);
|
||||
let edgeLla: ILatLonAlt = { alt: geodetic[2], lat: geodetic[0], lon: geodetic[1] };
|
||||
let edgeLla: LatLonAltEnt = { alt: geodetic[2], lat: geodetic[0], lon: geodetic[1] };
|
||||
let edgeNode: Node = helper.createFullNode(edgeKey, edgeLla, sequenceKey, [Math.PI / 2, 0, 0]);
|
||||
|
||||
let potentialEdges: IPotentialEdge[] =
|
||||
let potentialEdges: PotentialEdge[] =
|
||||
edgeCalculator.getPotentialEdges(node, [edgeNode], []);
|
||||
|
||||
expect(potentialEdges.length).toBe(1);
|
||||
|
||||
let potentialEdge: IPotentialEdge = potentialEdges[0];
|
||||
let potentialEdge: PotentialEdge = potentialEdges[0];
|
||||
|
||||
expect(potentialEdge.key).toBe(edgeKey);
|
||||
expect(potentialEdge.verticalMotion).toBeCloseTo(-Math.PI / 4, precision);
|
||||
@ -258,20 +258,20 @@ describe("EdgeCalculator.getPotentialEdges", () => {
|
||||
let edgeKey: string = "edgeKey";
|
||||
let sequenceKey: string = "skey";
|
||||
|
||||
let lla: ILatLonAlt = { alt: 0, lat: 0, lon: 0 };
|
||||
let lla: LatLonAltEnt = { alt: 0, lat: 0, lon: 0 };
|
||||
let node: Node = helper.createFullNode(key, lla, sequenceKey, createRotationVector(0));
|
||||
|
||||
let enu: number[] = [1, 0, 0];
|
||||
let geodetic: number[] = geoCoords.enuToGeodetic(enu[0], enu[1], enu[2], lla.lat, lla.lon, lla.alt);
|
||||
let edgeLla: ILatLonAlt = { alt: geodetic[2], lat: geodetic[0], lon: geodetic[1] };
|
||||
let edgeLla: LatLonAltEnt = { alt: geodetic[2], lat: geodetic[0], lon: geodetic[1] };
|
||||
let edgeNode: Node = helper.createFullNode(edgeKey, edgeLla, sequenceKey, createRotationVector(Math.PI / 2));
|
||||
|
||||
let potentialEdges: IPotentialEdge[] =
|
||||
let potentialEdges: PotentialEdge[] =
|
||||
edgeCalculator.getPotentialEdges(node, [edgeNode], []);
|
||||
|
||||
expect(potentialEdges.length).toBe(1);
|
||||
|
||||
let potentialEdge: IPotentialEdge = potentialEdges[0];
|
||||
let potentialEdge: PotentialEdge = potentialEdges[0];
|
||||
|
||||
expect(potentialEdge.key).toBe(edgeKey);
|
||||
expect(potentialEdge.directionChange).toBeCloseTo(Math.PI / 2, precision);
|
||||
@ -282,20 +282,20 @@ describe("EdgeCalculator.getPotentialEdges", () => {
|
||||
let edgeKey: string = "edgeKey";
|
||||
let sequenceKey: string = "skey";
|
||||
|
||||
let lla: ILatLonAlt = { alt: 0, lat: 0, lon: 0 };
|
||||
let lla: LatLonAltEnt = { alt: 0, lat: 0, lon: 0 };
|
||||
let node: Node = helper.createFullNode(key, lla, sequenceKey, createRotationVector(0));
|
||||
|
||||
let enu: number[] = [1, 0, 0];
|
||||
let geodetic: number[] = geoCoords.enuToGeodetic(enu[0], enu[1], enu[2], lla.lat, lla.lon, lla.alt);
|
||||
let edgeLla: ILatLonAlt = { alt: geodetic[2], lat: geodetic[0], lon: geodetic[1] };
|
||||
let edgeLla: LatLonAltEnt = { alt: geodetic[2], lat: geodetic[0], lon: geodetic[1] };
|
||||
let edgeNode: Node = helper.createFullNode(edgeKey, edgeLla, sequenceKey, createRotationVector(-Math.PI / 2));
|
||||
|
||||
let potentialEdges: IPotentialEdge[] =
|
||||
let potentialEdges: PotentialEdge[] =
|
||||
edgeCalculator.getPotentialEdges(node, [edgeNode], []);
|
||||
|
||||
expect(potentialEdges.length).toBe(1);
|
||||
|
||||
let potentialEdge: IPotentialEdge = potentialEdges[0];
|
||||
let potentialEdge: PotentialEdge = potentialEdges[0];
|
||||
|
||||
expect(potentialEdge.key).toBe(edgeKey);
|
||||
expect(potentialEdge.directionChange).toBeCloseTo(-Math.PI / 2, precision);
|
||||
@ -306,20 +306,20 @@ describe("EdgeCalculator.getPotentialEdges", () => {
|
||||
let edgeKey: string = "edgeKey";
|
||||
let sequenceKey: string = "skey";
|
||||
|
||||
let lla: ILatLonAlt = { alt: 0, lat: 0, lon: 0 };
|
||||
let lla: LatLonAltEnt = { alt: 0, lat: 0, lon: 0 };
|
||||
let node: Node = helper.createFullNode(key, lla, sequenceKey, createRotationVector(Math.PI / 4));
|
||||
|
||||
let enu: number[] = [1, 0, 0];
|
||||
let geodetic: number[] = geoCoords.enuToGeodetic(enu[0], enu[1], enu[2], lla.lat, lla.lon, lla.alt);
|
||||
let edgeLla: ILatLonAlt = { alt: geodetic[2], lat: geodetic[0], lon: geodetic[1] };
|
||||
let edgeLla: LatLonAltEnt = { alt: geodetic[2], lat: geodetic[0], lon: geodetic[1] };
|
||||
let edgeNode: Node = helper.createFullNode(edgeKey, edgeLla, sequenceKey, createRotationVector(-3 * Math.PI / 4));
|
||||
|
||||
let potentialEdges: IPotentialEdge[] =
|
||||
let potentialEdges: PotentialEdge[] =
|
||||
edgeCalculator.getPotentialEdges(node, [edgeNode], []);
|
||||
|
||||
expect(potentialEdges.length).toBe(1);
|
||||
|
||||
let potentialEdge: IPotentialEdge = potentialEdges[0];
|
||||
let potentialEdge: PotentialEdge = potentialEdges[0];
|
||||
|
||||
expect(potentialEdge.key).toBe(edgeKey);
|
||||
expect(Math.abs(potentialEdge.directionChange)).toBeCloseTo(Math.PI, precision);
|
||||
@ -330,20 +330,20 @@ describe("EdgeCalculator.getPotentialEdges", () => {
|
||||
let edgeKey: string = "edgeKey";
|
||||
let sequenceKey: string = "skey";
|
||||
|
||||
let lla: ILatLonAlt = { alt: 0, lat: 0, lon: 0 };
|
||||
let lla: LatLonAltEnt = { alt: 0, lat: 0, lon: 0 };
|
||||
let node: Node = helper.createFullNode(key, lla, sequenceKey, createRotationVector(Math.PI / 4));
|
||||
|
||||
let enu: number[] = [1, 0, 0];
|
||||
let geodetic: number[] = geoCoords.enuToGeodetic(enu[0], enu[1], enu[2], lla.lat, lla.lon, lla.alt);
|
||||
let edgeLla: ILatLonAlt = { alt: geodetic[2], lat: geodetic[0], lon: geodetic[1] };
|
||||
let edgeLla: LatLonAltEnt = { alt: geodetic[2], lat: geodetic[0], lon: geodetic[1] };
|
||||
let edgeNode: Node = helper.createFullNode(edgeKey, edgeLla, sequenceKey, createRotationVector(Math.PI / 4, Math.PI / 4));
|
||||
|
||||
let potentialEdges: IPotentialEdge[] =
|
||||
let potentialEdges: PotentialEdge[] =
|
||||
edgeCalculator.getPotentialEdges(node, [edgeNode], []);
|
||||
|
||||
expect(potentialEdges.length).toBe(1);
|
||||
|
||||
let potentialEdge: IPotentialEdge = potentialEdges[0];
|
||||
let potentialEdge: PotentialEdge = potentialEdges[0];
|
||||
|
||||
expect(potentialEdge.key).toBe(edgeKey);
|
||||
expect(potentialEdge.verticalDirectionChange).toBeCloseTo(Math.PI / 4, precision);
|
||||
@ -354,20 +354,20 @@ describe("EdgeCalculator.getPotentialEdges", () => {
|
||||
let edgeKey: string = "edgeKey";
|
||||
let sequenceKey: string = "skey";
|
||||
|
||||
let lla: ILatLonAlt = { alt: 0, lat: 0, lon: 0 };
|
||||
let lla: LatLonAltEnt = { alt: 0, lat: 0, lon: 0 };
|
||||
let node: Node = helper.createFullNode(key, lla, sequenceKey, createRotationVector(Math.PI / 4, 5 * Math.PI / 12));
|
||||
|
||||
let enu: number[] = [1, 0, 0];
|
||||
let geodetic: number[] = geoCoords.enuToGeodetic(enu[0], enu[1], enu[2], lla.lat, lla.lon, lla.alt);
|
||||
let edgeLla: ILatLonAlt = { alt: geodetic[2], lat: geodetic[0], lon: geodetic[1] };
|
||||
let edgeLla: LatLonAltEnt = { alt: geodetic[2], lat: geodetic[0], lon: geodetic[1] };
|
||||
let edgeNode: Node = helper.createFullNode(edgeKey, edgeLla, sequenceKey, createRotationVector(Math.PI / 4, 7 * Math.PI / 12));
|
||||
|
||||
let potentialEdges: IPotentialEdge[] =
|
||||
let potentialEdges: PotentialEdge[] =
|
||||
edgeCalculator.getPotentialEdges(node, [edgeNode], []);
|
||||
|
||||
expect(potentialEdges.length).toBe(1);
|
||||
|
||||
let potentialEdge: IPotentialEdge = potentialEdges[0];
|
||||
let potentialEdge: PotentialEdge = potentialEdges[0];
|
||||
|
||||
expect(potentialEdge.key).toBe(edgeKey);
|
||||
expect(potentialEdge.verticalDirectionChange).toBeCloseTo(-Math.PI / 6, precision);
|
||||
@ -378,20 +378,20 @@ describe("EdgeCalculator.getPotentialEdges", () => {
|
||||
let edgeKey: string = "edgeKey";
|
||||
let sequenceKey: string = "skey";
|
||||
|
||||
let lla: ILatLonAlt = { alt: 0, lat: 0, lon: 0 };
|
||||
let lla: LatLonAltEnt = { alt: 0, lat: 0, lon: 0 };
|
||||
let node: Node = helper.createFullNode(key, lla, sequenceKey, createRotationVector(Math.PI / 2, Math.PI / 6));
|
||||
|
||||
let enu: number[] = [1, 0, 0];
|
||||
let geodetic: number[] = geoCoords.enuToGeodetic(enu[0], enu[1], enu[2], lla.lat, lla.lon, lla.alt);
|
||||
let edgeLla: ILatLonAlt = { alt: geodetic[2], lat: geodetic[0], lon: geodetic[1] };
|
||||
let edgeLla: LatLonAltEnt = { alt: geodetic[2], lat: geodetic[0], lon: geodetic[1] };
|
||||
let edgeNode: Node = helper.createFullNode(edgeKey, edgeLla, sequenceKey, createRotationVector(Math.PI / 2, 2 * Math.PI / 3));
|
||||
|
||||
let potentialEdges: IPotentialEdge[] =
|
||||
let potentialEdges: PotentialEdge[] =
|
||||
edgeCalculator.getPotentialEdges(node, [edgeNode], []);
|
||||
|
||||
expect(potentialEdges.length).toBe(1);
|
||||
|
||||
let potentialEdge: IPotentialEdge = potentialEdges[0];
|
||||
let potentialEdge: PotentialEdge = potentialEdges[0];
|
||||
|
||||
expect(potentialEdge.key).toBe(edgeKey);
|
||||
expect(potentialEdge.rotation).toBeCloseTo(Math.PI / 2, precision);
|
||||
@ -407,20 +407,20 @@ describe("EdgeCalculator.getPotentialEdges", () => {
|
||||
|
||||
let theta: number = spatial.relativeRotationAngle(r1, r2);
|
||||
|
||||
let lla: ILatLonAlt = { alt: 0, lat: 0, lon: 0 };
|
||||
let lla: LatLonAltEnt = { alt: 0, lat: 0, lon: 0 };
|
||||
let node: Node = helper.createFullNode(key, lla, sequenceKey, r1);
|
||||
|
||||
let enu: number[] = [1, 0, 0];
|
||||
let geodetic: number[] = geoCoords.enuToGeodetic(enu[0], enu[1], enu[2], lla.lat, lla.lon, lla.alt);
|
||||
let edgeLla: ILatLonAlt = { alt: geodetic[2], lat: geodetic[0], lon: geodetic[1] };
|
||||
let edgeLla: LatLonAltEnt = { alt: geodetic[2], lat: geodetic[0], lon: geodetic[1] };
|
||||
let edgeNode: Node = helper.createFullNode(edgeKey, edgeLla, sequenceKey, r2);
|
||||
|
||||
let potentialEdges: IPotentialEdge[] =
|
||||
let potentialEdges: PotentialEdge[] =
|
||||
edgeCalculator.getPotentialEdges(node, [edgeNode], []);
|
||||
|
||||
expect(potentialEdges.length).toBe(1);
|
||||
|
||||
let potentialEdge: IPotentialEdge = potentialEdges[0];
|
||||
let potentialEdge: PotentialEdge = potentialEdges[0];
|
||||
|
||||
expect(potentialEdge.key).toBe(edgeKey);
|
||||
expect(potentialEdge.rotation).toBeCloseTo(theta, precision);
|
||||
@ -434,20 +434,20 @@ describe("EdgeCalculator.getPotentialEdges", () => {
|
||||
let r1: number[] = [0, 0, 0];
|
||||
let r2: number[] = [0, 0, 0];
|
||||
|
||||
let lla: ILatLonAlt = { alt: 0, lat: 0, lon: 0 };
|
||||
let lla: LatLonAltEnt = { alt: 0, lat: 0, lon: 0 };
|
||||
let node: Node = helper.createFullNode(key, lla, sequenceKey, r1);
|
||||
|
||||
let enu: number[] = [1, 0, 0];
|
||||
let geodetic: number[] = geoCoords.enuToGeodetic(enu[0], enu[1], enu[2], lla.lat, lla.lon, lla.alt);
|
||||
let edgeLla: ILatLonAlt = { alt: geodetic[2], lat: geodetic[0], lon: geodetic[1] };
|
||||
let edgeLla: LatLonAltEnt = { alt: geodetic[2], lat: geodetic[0], lon: geodetic[1] };
|
||||
let edgeNode: Node = helper.createFullNode(edgeKey, edgeLla, sequenceKey, r2);
|
||||
|
||||
let potentialEdges: IPotentialEdge[] =
|
||||
let potentialEdges: PotentialEdge[] =
|
||||
edgeCalculator.getPotentialEdges(node, [edgeNode], []);
|
||||
|
||||
expect(potentialEdges.length).toBe(1);
|
||||
|
||||
let potentialEdge: IPotentialEdge = potentialEdges[0];
|
||||
let potentialEdge: PotentialEdge = potentialEdges[0];
|
||||
|
||||
expect(potentialEdge.key).toBe(edgeKey);
|
||||
expect(potentialEdge.worldMotionAzimuth).toBeCloseTo(0, precision);
|
||||
@ -461,20 +461,20 @@ describe("EdgeCalculator.getPotentialEdges", () => {
|
||||
let r1: number[] = [0, 0, 0];
|
||||
let r2: number[] = [0, 0, 0];
|
||||
|
||||
let lla: ILatLonAlt = { alt: 0, lat: 0, lon: 0 };
|
||||
let lla: LatLonAltEnt = { alt: 0, lat: 0, lon: 0 };
|
||||
let node: Node = helper.createFullNode(key, lla, sequenceKey, r1);
|
||||
|
||||
let enu: number[] = [0, 1, 0];
|
||||
let geodetic: number[] = geoCoords.enuToGeodetic(enu[0], enu[1], enu[2], lla.lat, lla.lon, lla.alt);
|
||||
let edgeLla: ILatLonAlt = { alt: geodetic[2], lat: geodetic[0], lon: geodetic[1] };
|
||||
let edgeLla: LatLonAltEnt = { alt: geodetic[2], lat: geodetic[0], lon: geodetic[1] };
|
||||
let edgeNode: Node = helper.createFullNode(edgeKey, edgeLla, sequenceKey, r2);
|
||||
|
||||
let potentialEdges: IPotentialEdge[] =
|
||||
let potentialEdges: PotentialEdge[] =
|
||||
edgeCalculator.getPotentialEdges(node, [edgeNode], []);
|
||||
|
||||
expect(potentialEdges.length).toBe(1);
|
||||
|
||||
let potentialEdge: IPotentialEdge = potentialEdges[0];
|
||||
let potentialEdge: PotentialEdge = potentialEdges[0];
|
||||
|
||||
expect(potentialEdge.key).toBe(edgeKey);
|
||||
expect(potentialEdge.worldMotionAzimuth).toBeCloseTo(Math.PI / 2, precision);
|
||||
@ -488,20 +488,20 @@ describe("EdgeCalculator.getPotentialEdges", () => {
|
||||
let r1: number[] = [0, 0, 0];
|
||||
let r2: number[] = [0, 0, 0];
|
||||
|
||||
let lla: ILatLonAlt = { alt: 0, lat: 0, lon: 0 };
|
||||
let lla: LatLonAltEnt = { alt: 0, lat: 0, lon: 0 };
|
||||
let node: Node = helper.createFullNode(key, lla, sequenceKey, r1);
|
||||
|
||||
let enu: number[] = [-1, 0, 0];
|
||||
let geodetic: number[] = geoCoords.enuToGeodetic(enu[0], enu[1], enu[2], lla.lat, lla.lon, lla.alt);
|
||||
let edgeLla: ILatLonAlt = { alt: geodetic[2], lat: geodetic[0], lon: geodetic[1] };
|
||||
let edgeLla: LatLonAltEnt = { alt: geodetic[2], lat: geodetic[0], lon: geodetic[1] };
|
||||
let edgeNode: Node = helper.createFullNode(edgeKey, edgeLla, sequenceKey, r2);
|
||||
|
||||
let potentialEdges: IPotentialEdge[] =
|
||||
let potentialEdges: PotentialEdge[] =
|
||||
edgeCalculator.getPotentialEdges(node, [edgeNode], []);
|
||||
|
||||
expect(potentialEdges.length).toBe(1);
|
||||
|
||||
let potentialEdge: IPotentialEdge = potentialEdges[0];
|
||||
let potentialEdge: PotentialEdge = potentialEdges[0];
|
||||
|
||||
expect(potentialEdge.key).toBe(edgeKey);
|
||||
expect(Math.abs(potentialEdge.worldMotionAzimuth)).toBeCloseTo(Math.PI, precision);
|
||||
@ -515,20 +515,20 @@ describe("EdgeCalculator.getPotentialEdges", () => {
|
||||
let r1: number[] = [0, 0, 0];
|
||||
let r2: number[] = [0, 0, 0];
|
||||
|
||||
let lla: ILatLonAlt = { alt: 0, lat: 0, lon: 0 };
|
||||
let lla: LatLonAltEnt = { alt: 0, lat: 0, lon: 0 };
|
||||
let node: Node = helper.createFullNode(key, lla, sequenceKey, r1);
|
||||
|
||||
let enu: number[] = [0, -1, 0];
|
||||
let geodetic: number[] = geoCoords.enuToGeodetic(enu[0], enu[1], enu[2], lla.lat, lla.lon, lla.alt);
|
||||
let edgeLla: ILatLonAlt = { alt: geodetic[2], lat: geodetic[0], lon: geodetic[1] };
|
||||
let edgeLla: LatLonAltEnt = { alt: geodetic[2], lat: geodetic[0], lon: geodetic[1] };
|
||||
let edgeNode: Node = helper.createFullNode(edgeKey, edgeLla, sequenceKey, r2);
|
||||
|
||||
let potentialEdges: IPotentialEdge[] =
|
||||
let potentialEdges: PotentialEdge[] =
|
||||
edgeCalculator.getPotentialEdges(node, [edgeNode], []);
|
||||
|
||||
expect(potentialEdges.length).toBe(1);
|
||||
|
||||
let potentialEdge: IPotentialEdge = potentialEdges[0];
|
||||
let potentialEdge: PotentialEdge = potentialEdges[0];
|
||||
|
||||
expect(potentialEdge.key).toBe(edgeKey);
|
||||
expect(potentialEdge.worldMotionAzimuth).toBeCloseTo(-Math.PI / 2, precision);
|
||||
@ -542,20 +542,20 @@ describe("EdgeCalculator.getPotentialEdges", () => {
|
||||
let r1: number[] = [0, 0, 0];
|
||||
let r2: number[] = [0, 0, 0];
|
||||
|
||||
let lla: ILatLonAlt = { alt: 0, lat: 0, lon: 0 };
|
||||
let lla: LatLonAltEnt = { alt: 0, lat: 0, lon: 0 };
|
||||
let node: Node = helper.createFullNode(key, lla, sequenceKey, r1);
|
||||
|
||||
let enu: number[] = [1, 1, 0];
|
||||
let geodetic: number[] = geoCoords.enuToGeodetic(enu[0], enu[1], enu[2], lla.lat, lla.lon, lla.alt);
|
||||
let edgeLla: ILatLonAlt = { alt: geodetic[2], lat: geodetic[0], lon: geodetic[1] };
|
||||
let edgeLla: LatLonAltEnt = { alt: geodetic[2], lat: geodetic[0], lon: geodetic[1] };
|
||||
let edgeNode: Node = helper.createFullNode(edgeKey, edgeLla, sequenceKey, r2);
|
||||
|
||||
let potentialEdges: IPotentialEdge[] =
|
||||
let potentialEdges: PotentialEdge[] =
|
||||
edgeCalculator.getPotentialEdges(node, [edgeNode], []);
|
||||
|
||||
expect(potentialEdges.length).toBe(1);
|
||||
|
||||
let potentialEdge: IPotentialEdge = potentialEdges[0];
|
||||
let potentialEdge: PotentialEdge = potentialEdges[0];
|
||||
|
||||
expect(potentialEdge.key).toBe(edgeKey);
|
||||
expect(potentialEdge.worldMotionAzimuth).toBeCloseTo(Math.PI / 4, precision);
|
||||
@ -566,20 +566,20 @@ describe("EdgeCalculator.getPotentialEdges", () => {
|
||||
let edgeKey: string = "edgeKey";
|
||||
let sequenceKey: string = "skey";
|
||||
|
||||
let lla: ILatLonAlt = { alt: 0, lat: 0, lon: 0 };
|
||||
let lla: LatLonAltEnt = { alt: 0, lat: 0, lon: 0 };
|
||||
let node: Node = helper.createFullNode(key, lla, sequenceKey, createRotationVector(0));
|
||||
|
||||
let enu: number[] = [1, 0, 0];
|
||||
let geodetic: number[] = geoCoords.enuToGeodetic(enu[0], enu[1], enu[2], lla.lat, lla.lon, lla.alt);
|
||||
let edgeLla: ILatLonAlt = { alt: geodetic[2], lat: geodetic[0], lon: geodetic[1] };
|
||||
let edgeLla: LatLonAltEnt = { alt: geodetic[2], lat: geodetic[0], lon: geodetic[1] };
|
||||
let edgeNode: Node = helper.createFullNode(edgeKey, edgeLla, sequenceKey, createRotationVector(0));
|
||||
|
||||
let potentialEdges: IPotentialEdge[] =
|
||||
let potentialEdges: PotentialEdge[] =
|
||||
edgeCalculator.getPotentialEdges(node, [edgeNode], []);
|
||||
|
||||
expect(potentialEdges.length).toBe(1);
|
||||
|
||||
let potentialEdge: IPotentialEdge = potentialEdges[0];
|
||||
let potentialEdge: PotentialEdge = potentialEdges[0];
|
||||
|
||||
expect(potentialEdge.key).toBe(edgeKey);
|
||||
expect(potentialEdge.sameSequence).toBe(true);
|
||||
@ -591,20 +591,20 @@ describe("EdgeCalculator.getPotentialEdges", () => {
|
||||
let sequenceKey: string = "skey";
|
||||
let edgeSequenceKey: string = "edgeSkey";
|
||||
|
||||
let lla: ILatLonAlt = { alt: 0, lat: 0, lon: 0 };
|
||||
let lla: LatLonAltEnt = { alt: 0, lat: 0, lon: 0 };
|
||||
let node: Node = helper.createFullNode(key, lla, sequenceKey, createRotationVector(0));
|
||||
|
||||
let enu: number[] = [1, 0, 0];
|
||||
let geodetic: number[] = geoCoords.enuToGeodetic(enu[0], enu[1], enu[2], lla.lat, lla.lon, lla.alt);
|
||||
let edgeLla: ILatLonAlt = { alt: geodetic[2], lat: geodetic[0], lon: geodetic[1] };
|
||||
let edgeLla: LatLonAltEnt = { alt: geodetic[2], lat: geodetic[0], lon: geodetic[1] };
|
||||
let edgeNode: Node = helper.createFullNode(edgeKey, edgeLla, edgeSequenceKey, createRotationVector(0));
|
||||
|
||||
let potentialEdges: IPotentialEdge[] =
|
||||
let potentialEdges: PotentialEdge[] =
|
||||
edgeCalculator.getPotentialEdges(node, [edgeNode], []);
|
||||
|
||||
expect(potentialEdges.length).toBe(1);
|
||||
|
||||
let potentialEdge: IPotentialEdge = potentialEdges[0];
|
||||
let potentialEdge: PotentialEdge = potentialEdges[0];
|
||||
|
||||
expect(potentialEdge.key).toBe(edgeKey);
|
||||
expect(potentialEdge.sameSequence).toBe(false);
|
||||
@ -617,20 +617,20 @@ describe("EdgeCalculator.getPotentialEdges", () => {
|
||||
|
||||
let mergeCC: number = 45;
|
||||
|
||||
let lla: ILatLonAlt = { alt: 0, lat: 0, lon: 0 };
|
||||
let lla: LatLonAltEnt = { alt: 0, lat: 0, lon: 0 };
|
||||
let node: Node = helper.createFullNode(key, lla, sequenceKey, createRotationVector(0), mergeCC);
|
||||
|
||||
let enu: number[] = [1, 0, 0];
|
||||
let geodetic: number[] = geoCoords.enuToGeodetic(enu[0], enu[1], enu[2], lla.lat, lla.lon, lla.alt);
|
||||
let edgeLla: ILatLonAlt = { alt: geodetic[2], lat: geodetic[0], lon: geodetic[1] };
|
||||
let edgeLla: LatLonAltEnt = { alt: geodetic[2], lat: geodetic[0], lon: geodetic[1] };
|
||||
let edgeNode: Node = helper.createFullNode(edgeKey, edgeLla, sequenceKey, createRotationVector(0), mergeCC);
|
||||
|
||||
let potentialEdges: IPotentialEdge[] =
|
||||
let potentialEdges: PotentialEdge[] =
|
||||
edgeCalculator.getPotentialEdges(node, [edgeNode], []);
|
||||
|
||||
expect(potentialEdges.length).toBe(1);
|
||||
|
||||
let potentialEdge: IPotentialEdge = potentialEdges[0];
|
||||
let potentialEdge: PotentialEdge = potentialEdges[0];
|
||||
|
||||
expect(potentialEdge.key).toBe(edgeKey);
|
||||
expect(potentialEdge.sameMergeCC).toBe(true);
|
||||
@ -644,20 +644,20 @@ describe("EdgeCalculator.getPotentialEdges", () => {
|
||||
let mergeCC1: number = 45;
|
||||
let mergeCC2: number = 22;
|
||||
|
||||
let lla: ILatLonAlt = { alt: 0, lat: 0, lon: 0 };
|
||||
let lla: LatLonAltEnt = { alt: 0, lat: 0, lon: 0 };
|
||||
let node: Node = helper.createFullNode(key, lla, sequenceKey, createRotationVector(0), mergeCC1);
|
||||
|
||||
let enu: number[] = [1, 0, 0];
|
||||
let geodetic: number[] = geoCoords.enuToGeodetic(enu[0], enu[1], enu[2], lla.lat, lla.lon, lla.alt);
|
||||
let edgeLla: ILatLonAlt = { alt: geodetic[2], lat: geodetic[0], lon: geodetic[1] };
|
||||
let edgeLla: LatLonAltEnt = { alt: geodetic[2], lat: geodetic[0], lon: geodetic[1] };
|
||||
let edgeNode: Node = helper.createFullNode(edgeKey, edgeLla, sequenceKey, createRotationVector(0), mergeCC2);
|
||||
|
||||
let potentialEdges: IPotentialEdge[] =
|
||||
let potentialEdges: PotentialEdge[] =
|
||||
edgeCalculator.getPotentialEdges(node, [edgeNode], []);
|
||||
|
||||
expect(potentialEdges.length).toBe(1);
|
||||
|
||||
let potentialEdge: IPotentialEdge = potentialEdges[0];
|
||||
let potentialEdge: PotentialEdge = potentialEdges[0];
|
||||
|
||||
expect(potentialEdge.key).toBe(edgeKey);
|
||||
expect(potentialEdge.sameMergeCC).toBe(false);
|
||||
@ -668,20 +668,20 @@ describe("EdgeCalculator.getPotentialEdges", () => {
|
||||
let edgeKey: string = "edgeKey";
|
||||
let sequenceKey: string = "skey";
|
||||
|
||||
let lla: ILatLonAlt = { alt: 0, lat: 0, lon: 0 };
|
||||
let lla: LatLonAltEnt = { alt: 0, lat: 0, lon: 0 };
|
||||
let node: Node = helper.createFullNode(key, lla, sequenceKey, createRotationVector(0), null);
|
||||
|
||||
let enu: number[] = [1, 0, 0];
|
||||
let geodetic: number[] = geoCoords.enuToGeodetic(enu[0], enu[1], enu[2], lla.lat, lla.lon, lla.alt);
|
||||
let edgeLla: ILatLonAlt = { alt: geodetic[2], lat: geodetic[0], lon: geodetic[1] };
|
||||
let edgeLla: LatLonAltEnt = { alt: geodetic[2], lat: geodetic[0], lon: geodetic[1] };
|
||||
let edgeNode: Node = helper.createFullNode(edgeKey, edgeLla, sequenceKey, createRotationVector(0), null);
|
||||
|
||||
let potentialEdges: IPotentialEdge[] =
|
||||
let potentialEdges: PotentialEdge[] =
|
||||
edgeCalculator.getPotentialEdges(node, [edgeNode], []);
|
||||
|
||||
expect(potentialEdges.length).toBe(1);
|
||||
|
||||
let potentialEdge: IPotentialEdge = potentialEdges[0];
|
||||
let potentialEdge: PotentialEdge = potentialEdges[0];
|
||||
|
||||
expect(potentialEdge.key).toBe(edgeKey);
|
||||
expect(potentialEdge.sameMergeCC).toBe(true);
|
||||
@ -692,20 +692,20 @@ describe("EdgeCalculator.getPotentialEdges", () => {
|
||||
let edgeKey: string = "edgeKey";
|
||||
let sequenceKey: string = "skey";
|
||||
|
||||
let lla: ILatLonAlt = { alt: 0, lat: 0, lon: 0 };
|
||||
let lla: LatLonAltEnt = { alt: 0, lat: 0, lon: 0 };
|
||||
let node: Node = helper.createFullNode(key, lla, sequenceKey, createRotationVector(0), 467);
|
||||
|
||||
let enu: number[] = [1, 0, 0];
|
||||
let geodetic: number[] = geoCoords.enuToGeodetic(enu[0], enu[1], enu[2], lla.lat, lla.lon, lla.alt);
|
||||
let edgeLla: ILatLonAlt = { alt: geodetic[2], lat: geodetic[0], lon: geodetic[1] };
|
||||
let edgeLla: LatLonAltEnt = { alt: geodetic[2], lat: geodetic[0], lon: geodetic[1] };
|
||||
let edgeNode: Node = helper.createFullNode(edgeKey, edgeLla, sequenceKey, createRotationVector(0), null);
|
||||
|
||||
let potentialEdges: IPotentialEdge[] =
|
||||
let potentialEdges: PotentialEdge[] =
|
||||
edgeCalculator.getPotentialEdges(node, [edgeNode], []);
|
||||
|
||||
expect(potentialEdges.length).toBe(1);
|
||||
|
||||
let potentialEdge: IPotentialEdge = potentialEdges[0];
|
||||
let potentialEdge: PotentialEdge = potentialEdges[0];
|
||||
|
||||
expect(potentialEdge.key).toBe(edgeKey);
|
||||
expect(potentialEdge.sameMergeCC).toBe(false);
|
||||
@ -716,20 +716,20 @@ describe("EdgeCalculator.getPotentialEdges", () => {
|
||||
let edgeKey: string = "edgeKey";
|
||||
let sequenceKey: string = "skey";
|
||||
|
||||
let lla: ILatLonAlt = { alt: 0, lat: 0, lon: 0 };
|
||||
let lla: LatLonAltEnt = { alt: 0, lat: 0, lon: 0 };
|
||||
let node: Node = helper.createFullNode(key, lla, sequenceKey, createRotationVector(0), 467);
|
||||
|
||||
let enu: number[] = [1, 0, 0];
|
||||
let geodetic: number[] = geoCoords.enuToGeodetic(enu[0], enu[1], enu[2], lla.lat, lla.lon, lla.alt);
|
||||
let edgeLla: ILatLonAlt = { alt: geodetic[2], lat: geodetic[0], lon: geodetic[1] };
|
||||
let edgeLla: LatLonAltEnt = { alt: geodetic[2], lat: geodetic[0], lon: geodetic[1] };
|
||||
let edgeNode: Node = helper.createFullNode(edgeKey, edgeLla, sequenceKey, createRotationVector(0), 435, "equirectangular");
|
||||
|
||||
let potentialEdges: IPotentialEdge[] =
|
||||
let potentialEdges: PotentialEdge[] =
|
||||
edgeCalculator.getPotentialEdges(node, [edgeNode], []);
|
||||
|
||||
expect(potentialEdges.length).toBe(1);
|
||||
|
||||
let potentialEdge: IPotentialEdge = potentialEdges[0];
|
||||
let potentialEdge: PotentialEdge = potentialEdges[0];
|
||||
|
||||
expect(potentialEdge.key).toBe(edgeKey);
|
||||
expect(potentialEdge.spherical).toBe(true);
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
import { Subject } from "rxjs";
|
||||
import { DOMRenderer } from "../../src/render/DOMRenderer";
|
||||
import { IVNodeHash } from "../../src/render/interfaces/IVNodeHash";
|
||||
import { VirtualNodeHash } from "../../src/render/interfaces/VirtualNodeHash";
|
||||
|
||||
import { MockCreator } from "./MockCreator";
|
||||
import { MockCreatorBase } from "./MockCreatorBase";
|
||||
@ -9,8 +9,8 @@ export class DOMRendererMockCreator extends MockCreatorBase<DOMRenderer> {
|
||||
public create(): DOMRenderer {
|
||||
const mock: DOMRenderer = new MockCreator().create(DOMRenderer, "DOMRenderer");
|
||||
|
||||
this._mockProperty(mock, "element$", new Subject<IVNodeHash>());
|
||||
this._mockProperty(mock, "render$", new Subject<IVNodeHash>());
|
||||
this._mockProperty(mock, "element$", new Subject<VirtualNodeHash>());
|
||||
this._mockProperty(mock, "render$", new Subject<VirtualNodeHash>());
|
||||
|
||||
return mock;
|
||||
}
|
||||
|
||||
@ -1,12 +1,12 @@
|
||||
import { Node } from "../../src/graph/Node";
|
||||
import { ICoreNode } from "../../src/api/interfaces/ICoreNode";
|
||||
import { IFillNode } from "../../src/api/interfaces/IFillNode";
|
||||
import { ILatLonAlt } from "../../src/geo/interfaces/ILatLonAlt";
|
||||
import { IPotentialEdge } from "../../src/graph/edge/interfaces/IPotentialEdge";
|
||||
import { CameraProjectionType } from "../../src/api/interfaces/CameraProjectionType";
|
||||
import { CoreImageEnt } from "../../src/api/ents/CoreImageEnt";
|
||||
import { SpatialImageEnt } from "../../src/api/ents/SpatialImageEnt";
|
||||
import { LatLonAltEnt } from "../../src/api/ents/LatLonAltEnt";
|
||||
import { PotentialEdge } from "../../src/graph/edge/interfaces/PotentialEdge";
|
||||
import { CameraType } from "../../src/geo/interfaces/CameraType";
|
||||
|
||||
export class EdgeCalculatorHelper {
|
||||
public createPotentialEdge(key: string = "pkey"): IPotentialEdge {
|
||||
public createPotentialEdge(key: string = "pkey"): PotentialEdge {
|
||||
return {
|
||||
capturedAt: 0,
|
||||
directionChange: 0,
|
||||
@ -27,10 +27,10 @@ export class EdgeCalculatorHelper {
|
||||
|
||||
public createCoreNode(
|
||||
key: string,
|
||||
latLonAlt: ILatLonAlt,
|
||||
latLonAlt: LatLonAltEnt,
|
||||
sequenceKey: string): Node {
|
||||
|
||||
let coreNode: ICoreNode = {
|
||||
let coreNode: CoreImageEnt = {
|
||||
cl: { lat: latLonAlt.lat, lon: latLonAlt.lon },
|
||||
key: key,
|
||||
l: { lat: latLonAlt.lat, lon: latLonAlt.lon },
|
||||
@ -42,17 +42,17 @@ export class EdgeCalculatorHelper {
|
||||
|
||||
public createFullNode(
|
||||
key: string = "key",
|
||||
latLonAlt: ILatLonAlt = { alt: 0, lat: 0, lon: 0 },
|
||||
latLonAlt: LatLonAltEnt = { alt: 0, lat: 0, lon: 0 },
|
||||
sequenceKey: string = "skey",
|
||||
r: number[] = [0, 0, 0],
|
||||
mergeCC: number = 2,
|
||||
cameraType: CameraProjectionType = "perspective",
|
||||
cameraType: CameraType = "perspective",
|
||||
capturedAt: number = 0,
|
||||
mergeVersion: number = 1): Node {
|
||||
|
||||
let node: Node = this.createCoreNode(key, latLonAlt, sequenceKey);
|
||||
|
||||
let fillNode: IFillNode = {
|
||||
let fillNode: SpatialImageEnt = {
|
||||
atomic_scale: 0,
|
||||
c_rotation: r,
|
||||
ca: 0,
|
||||
@ -79,9 +79,9 @@ export class EdgeCalculatorHelper {
|
||||
public createDefaultNode(spherical: boolean = false): Node {
|
||||
let key: string = "key";
|
||||
let sequenceKey: string = "skey";
|
||||
let latLonAlt: ILatLonAlt = { alt: 0, lat: 0, lon: 0 };
|
||||
let latLonAlt: LatLonAltEnt = { alt: 0, lat: 0, lon: 0 };
|
||||
|
||||
let cameraType: CameraProjectionType = spherical ?
|
||||
let cameraType: CameraType = spherical ?
|
||||
"equirectangular" :
|
||||
null;
|
||||
|
||||
|
||||
@ -1,17 +1,17 @@
|
||||
import { NodeHelper } from "./NodeHelper";
|
||||
import { TransformHelper } from "./TransformHelper";
|
||||
|
||||
import { IFrame } from "../../src/state/interfaces/IFrame";
|
||||
import { AnimationFrame } from "../../src/state/interfaces/AnimationFrame";
|
||||
import { State } from "../../src/state/State";
|
||||
import { Camera } from "../../src/geo/Camera";
|
||||
import { CameraProjectionType } from "../../src/api/interfaces/CameraProjectionType";
|
||||
import { CameraType } from "../../src/geo/interfaces/CameraType";
|
||||
|
||||
export class FrameHelper {
|
||||
private _nodeHelper: NodeHelper = new NodeHelper();
|
||||
private _transformHelper: TransformHelper = new TransformHelper();
|
||||
|
||||
public createFrame(
|
||||
cameraType: CameraProjectionType = "perspective"): IFrame {
|
||||
cameraType: CameraType = "perspective"): AnimationFrame {
|
||||
|
||||
const currentNode =
|
||||
this._nodeHelper.createNode(cameraType);
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
import { Subject } from "rxjs";
|
||||
import { GLRenderer } from "../../src/render/GLRenderer";
|
||||
import { IGLRenderHash } from "../../src/render/interfaces/IGLRenderHash";
|
||||
import { GLRenderHash } from "../../src/render/interfaces/IGLRenderHash";
|
||||
|
||||
import { MockCreator } from "./MockCreator";
|
||||
import { MockCreatorBase } from "./MockCreatorBase";
|
||||
@ -10,7 +10,7 @@ export class GLRendererMockCreator extends MockCreatorBase<GLRenderer> {
|
||||
const mock: GLRenderer = new MockCreator().create(GLRenderer, "GLRenderer");
|
||||
|
||||
this._mockProperty(mock, "webGLRenderer$", new Subject<THREE.WebGLRenderer>());
|
||||
this._mockProperty(mock, "render$", new Subject<IGLRenderHash>());
|
||||
this._mockProperty(mock, "render$", new Subject<GLRenderHash>());
|
||||
this._mockProperty(mock, "postrender$", new Subject<void>());
|
||||
|
||||
return mock;
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
import { CameraProjectionType } from "../../src/api/interfaces/CameraProjectionType";
|
||||
import { ICoreNode } from "../../src/api/interfaces/ICoreNode";
|
||||
import { IFillNode } from "../../src/api/interfaces/IFillNode";
|
||||
import { IFullNode } from "../../src/api/interfaces/IFullNode";
|
||||
import { CameraType } from "../../src/geo/interfaces/CameraType";
|
||||
import { CoreImageEnt } from "../../src/api/ents/CoreImageEnt";
|
||||
import { SpatialImageEnt } from "../../src/api/ents/SpatialImageEnt";
|
||||
import { ImageEnt } from "../../src/api/ents/ImageEnt";
|
||||
import { Node } from "../../src/graph/Node";
|
||||
|
||||
export class NodeHelper {
|
||||
@ -11,7 +11,7 @@ export class NodeHelper {
|
||||
private _userKey: string = "ukey";
|
||||
private _username: string = "uname";
|
||||
|
||||
public createCoreNode(): ICoreNode {
|
||||
public createCoreNode(): CoreImageEnt {
|
||||
return {
|
||||
cl: { lat: 0, lon: 0 },
|
||||
key: this._nodeKey,
|
||||
@ -20,7 +20,7 @@ export class NodeHelper {
|
||||
};
|
||||
}
|
||||
|
||||
public createFillNode(): IFillNode {
|
||||
public createFillNode(): SpatialImageEnt {
|
||||
return {
|
||||
atomic_scale: 0,
|
||||
c_rotation: [0, 0, 0],
|
||||
@ -42,7 +42,7 @@ export class NodeHelper {
|
||||
};
|
||||
}
|
||||
|
||||
public createFullNode(): IFullNode {
|
||||
public createFullNode(): ImageEnt {
|
||||
return {
|
||||
atomic_scale: 0,
|
||||
c_rotation: [0, 0, 0],
|
||||
@ -68,7 +68,7 @@ export class NodeHelper {
|
||||
};
|
||||
}
|
||||
|
||||
public createNode(cameraType: CameraProjectionType = "perspective"): Node {
|
||||
public createNode(cameraType: CameraType = "perspective"): Node {
|
||||
let fullNode = this.createFullNode();
|
||||
fullNode.camera_projection_type = cameraType;
|
||||
let node = new Node(fullNode);
|
||||
@ -77,7 +77,7 @@ export class NodeHelper {
|
||||
}
|
||||
|
||||
public createUnmergedNode(): Node {
|
||||
let fullNode: IFullNode = this.createFullNode();
|
||||
let fullNode: ImageEnt = this.createFullNode();
|
||||
|
||||
fullNode.atomic_scale = undefined;
|
||||
fullNode.ca = undefined;
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
import { Subject } from "rxjs";
|
||||
import { EdgeDirection } from "../../src/graph/edge/EdgeDirection";
|
||||
import { NavigationDirection } from "../../src/graph/edge/NavigationDirection";
|
||||
import { PlayService } from "../../src/viewer/PlayService";
|
||||
|
||||
import { MockCreator } from "./MockCreator";
|
||||
@ -9,7 +9,7 @@ export class PlayServiceMockCreator extends MockCreatorBase<PlayService> {
|
||||
public create(): PlayService {
|
||||
const mock: PlayService = new MockCreator().create(PlayService, "PlayService");
|
||||
|
||||
this._mockProperty(mock, "direction$", new Subject<EdgeDirection>());
|
||||
this._mockProperty(mock, "direction$", new Subject<NavigationDirection>());
|
||||
this._mockProperty(mock, "playing$", new Subject<boolean>());
|
||||
this._mockProperty(mock, "speed$", new Subject<boolean>());
|
||||
|
||||
|
||||
@ -5,8 +5,8 @@ import { MockCreatorBase } from "./MockCreatorBase";
|
||||
|
||||
import { Node } from "../../src/graph/Node";
|
||||
import { Transform } from "stream";
|
||||
import { ILatLonAlt } from "../../src/geo/interfaces/ILatLonAlt";
|
||||
import { IFrame } from "../../src/state/interfaces/IFrame";
|
||||
import { LatLonAltEnt } from "../../src/api/ents/LatLonAltEnt";
|
||||
import { AnimationFrame } from "../../src/state/interfaces/AnimationFrame";
|
||||
import { State } from "../../src/state/State";
|
||||
import { StateService } from "../../src/state/StateService";
|
||||
|
||||
@ -18,11 +18,11 @@ export class StateServiceMockCreator extends MockCreatorBase<StateService> {
|
||||
this._mockProperty(mock, "currentKey$", new Subject<Node>());
|
||||
this._mockProperty(mock, "currentNode$", new Subject<Node>());
|
||||
this._mockProperty(mock, "currentNodeExternal$", new Subject<Node>());
|
||||
this._mockProperty(mock, "currentState$", new Subject<IFrame>());
|
||||
this._mockProperty(mock, "currentState$", new Subject<AnimationFrame>());
|
||||
this._mockProperty(mock, "currentTransform$", new Subject<Transform>());
|
||||
this._mockProperty(mock, "inMotion$", new Subject<boolean>());
|
||||
this._mockProperty(mock, "inTranslation$", new Subject<boolean>());
|
||||
this._mockProperty(mock, "reference$", new Subject<ILatLonAlt>());
|
||||
this._mockProperty(mock, "reference$", new Subject<LatLonAltEnt>());
|
||||
this._mockProperty(mock, "state$", new Subject<State>());
|
||||
|
||||
return mock;
|
||||
|
||||
@ -1,17 +1,17 @@
|
||||
import { Component } from "../../src/component/Component";
|
||||
import { IComponentConfiguration } from "../../src/component/interfaces/IComponentConfiguration";
|
||||
import { ComponentConfiguration } from "../../src/component/interfaces/ComponentConfiguration";
|
||||
import { Container } from "../../src/viewer/Container";
|
||||
import { Navigator } from "../../src/viewer/Navigator";
|
||||
|
||||
export interface ITestConfiguration extends IComponentConfiguration {
|
||||
export interface TestConfiguration extends ComponentConfiguration {
|
||||
test: boolean;
|
||||
}
|
||||
|
||||
export class TestComponent extends Component<ITestConfiguration> {
|
||||
export class TestComponent extends Component<TestConfiguration> {
|
||||
constructor(name: string, container: Container, navigator: Navigator) {
|
||||
super(name, container, navigator);
|
||||
}
|
||||
protected _activate(): void { /* noop */ }
|
||||
protected _deactivate(): void { /* noop */ }
|
||||
protected _getDefaultConfiguration(): ITestConfiguration { return { test: false }; }
|
||||
protected _getDefaultConfiguration(): TestConfiguration { return { test: false }; }
|
||||
}
|
||||
|
||||
@ -1,12 +1,12 @@
|
||||
import { NodeHelper } from "./NodeHelper";
|
||||
import { Transform } from "../../src/geo/Transform";
|
||||
import { CameraProjectionType } from "../../src/api/interfaces/CameraProjectionType";
|
||||
import { CameraType } from "../../src/geo/interfaces/CameraType";
|
||||
|
||||
export class TransformHelper {
|
||||
private _nodeHelper: NodeHelper = new NodeHelper();
|
||||
|
||||
public createTransform(
|
||||
cameraType: CameraProjectionType = "perspective"): Transform {
|
||||
cameraType: CameraType = "perspective"): Transform {
|
||||
|
||||
const node = this._nodeHelper
|
||||
.createNode(cameraType);
|
||||
|
||||
@ -4,20 +4,20 @@ import { map } from "rxjs/operators";
|
||||
import * as THREE from "three";
|
||||
import { GLRenderer } from "../../src/render/GLRenderer";
|
||||
import { GLRenderStage } from "../../src/render/GLRenderStage";
|
||||
import { IGLRender } from "../../src/render/interfaces/IGLRender";
|
||||
import { IGLRenderFunction } from "../../src/render/interfaces/IGLRenderFunction";
|
||||
import { IGLRenderHash } from "../../src/render/interfaces/IGLRenderHash";
|
||||
import { ISize } from "../../src/render/interfaces/ISize";
|
||||
import { GLFrameRenderer } from "../../src/render/interfaces/GLFrameRenderer";
|
||||
import { GLRenderFunction } from "../../src/render/interfaces/GLRenderFunction";
|
||||
import { GLRenderHash } from "../../src/render/interfaces/IGLRenderHash";
|
||||
import { ViewportSize } from "../../src/render/interfaces/ViewportSize";
|
||||
import { RenderCamera } from "../../src/render/RenderCamera";
|
||||
import { RenderMode } from "../../src/render/RenderMode";
|
||||
import { RenderService } from "../../src/render/RenderService";
|
||||
import { IFrame } from "../../src/state/interfaces/IFrame";
|
||||
import { AnimationFrame } from "../../src/state/interfaces/AnimationFrame";
|
||||
import { FrameHelper } from "../helper/FrameHelper";
|
||||
import { RendererMock } from "../helper/WebGLRenderer";
|
||||
|
||||
|
||||
class RenderServiceMock extends RenderService {
|
||||
private _sizeMock$: Subject<ISize> = new Subject<ISize>();
|
||||
private _sizeMock$: Subject<ViewportSize> = new Subject<ViewportSize>();
|
||||
private _renderModeMock$: Subject<RenderMode> = new Subject<RenderMode>();
|
||||
private _renderCameraFrameMock$: Subject<RenderCamera> = new Subject<RenderCamera>();
|
||||
|
||||
@ -25,11 +25,11 @@ class RenderServiceMock extends RenderService {
|
||||
super(element, observableEmpty(), RenderMode.Letterbox);
|
||||
}
|
||||
|
||||
public get size$(): Subject<ISize> {
|
||||
public get size$(): Subject<ViewportSize> {
|
||||
return this._sizeMock$;
|
||||
}
|
||||
|
||||
public set size$(value: Subject<ISize>) {
|
||||
public set size$(value: Subject<ViewportSize>) {
|
||||
this._sizeMock$ = value;
|
||||
}
|
||||
|
||||
@ -79,23 +79,23 @@ describe("GLRenderer.ctor", () => {
|
||||
});
|
||||
|
||||
describe("GLRenderer.renderer", () => {
|
||||
let createGLRenderHash: (frameId: number, needsRender: boolean, name?: string) => IGLRenderHash =
|
||||
(frameId: number, needsRender: boolean, name?: string): IGLRenderHash => {
|
||||
let renderFunction: IGLRenderFunction =
|
||||
let createGLRenderHash: (frameId: number, needsRender: boolean, name?: string) => GLRenderHash =
|
||||
(frameId: number, needsRender: boolean, name?: string): GLRenderHash => {
|
||||
let renderFunction: GLRenderFunction =
|
||||
(pc: THREE.PerspectiveCamera, r: THREE.WebGLRenderer): void => {
|
||||
r.render(new THREE.Scene(), pc);
|
||||
};
|
||||
|
||||
let render: IGLRender = {
|
||||
let render: GLFrameRenderer = {
|
||||
frameId: frameId,
|
||||
needsRender: needsRender,
|
||||
render: renderFunction,
|
||||
stage: GLRenderStage.Background,
|
||||
};
|
||||
|
||||
let renderHash: IGLRenderHash = {
|
||||
let renderHash: GLRenderHash = {
|
||||
name: name != null ? name : "mock",
|
||||
render: render,
|
||||
renderer: render,
|
||||
};
|
||||
|
||||
return renderHash;
|
||||
@ -108,7 +108,7 @@ describe("GLRenderer.renderer", () => {
|
||||
let canvas = document.createElement("canvas");
|
||||
let renderServiceMock: RenderServiceMock = new RenderServiceMock(document.createElement("div"));
|
||||
let glRenderer: GLRenderer = new GLRenderer(canvas, document.createElement("div"), renderServiceMock);
|
||||
let renderHash: IGLRenderHash = createGLRenderHash(0, true);
|
||||
let renderHash: GLRenderHash = createGLRenderHash(0, true);
|
||||
|
||||
glRenderer.render$.next(renderHash);
|
||||
|
||||
@ -124,11 +124,11 @@ describe("GLRenderer.renderer", () => {
|
||||
let renderServiceMock: RenderServiceMock = new RenderServiceMock(document.createElement("div"));
|
||||
let glRenderer: GLRenderer = new GLRenderer(canvas, document.createElement("div"), renderServiceMock);
|
||||
|
||||
let renderHash: IGLRenderHash = createGLRenderHash(0, true);
|
||||
let renderHash: GLRenderHash = createGLRenderHash(0, true);
|
||||
glRenderer.render$.next(renderHash);
|
||||
|
||||
let renderCamera: RenderCamera = new RenderCamera(1, 1, RenderMode.Letterbox);
|
||||
const frame: IFrame = new FrameHelper().createFrame();
|
||||
const frame: AnimationFrame = new FrameHelper().createFrame();
|
||||
frame.id = 0;
|
||||
renderCamera.setFrame(frame);
|
||||
renderServiceMock.renderCameraFrame$.next(renderCamera);
|
||||
@ -145,11 +145,11 @@ describe("GLRenderer.renderer", () => {
|
||||
let renderServiceMock: RenderServiceMock = new RenderServiceMock(document.createElement("div"));
|
||||
let glRenderer: GLRenderer = new GLRenderer(canvas, document.createElement("div"), renderServiceMock);
|
||||
|
||||
let renderHash: IGLRenderHash = createGLRenderHash(0, true);
|
||||
let renderHash: GLRenderHash = createGLRenderHash(0, true);
|
||||
glRenderer.render$.next(renderHash);
|
||||
|
||||
let renderCamera: RenderCamera = new RenderCamera(1, 1, RenderMode.Letterbox);
|
||||
const frame: IFrame = new FrameHelper().createFrame();
|
||||
const frame: AnimationFrame = new FrameHelper().createFrame();
|
||||
frame.id = 0;
|
||||
renderCamera.setFrame(frame);
|
||||
renderServiceMock.renderCameraFrame$.next(renderCamera);
|
||||
@ -164,9 +164,9 @@ describe("GLRenderer.renderer", () => {
|
||||
spyOn(rendererMock, "render");
|
||||
spyOn(THREE, "WebGLRenderer").and.returnValue(<THREE.WebGLRenderer>rendererMock);
|
||||
|
||||
const frame: IFrame = new FrameHelper().createFrame();
|
||||
const frame: AnimationFrame = new FrameHelper().createFrame();
|
||||
frame.id = 1;
|
||||
let frame$: BehaviorSubject<IFrame> = new BehaviorSubject<IFrame>(frame);
|
||||
let frame$: BehaviorSubject<AnimationFrame> = new BehaviorSubject<AnimationFrame>(frame);
|
||||
|
||||
let renderServiceMock: RenderServiceMock = new RenderServiceMock(document.createElement("div"));
|
||||
let renderCamera: RenderCamera = new RenderCamera(1, 1, RenderMode.Letterbox);
|
||||
@ -178,8 +178,8 @@ describe("GLRenderer.renderer", () => {
|
||||
|
||||
frame$.pipe(
|
||||
map(
|
||||
(f: IFrame): IGLRenderHash => {
|
||||
let renderHash: IGLRenderHash = createGLRenderHash(f.id, true);
|
||||
(f: AnimationFrame): GLRenderHash => {
|
||||
let renderHash: GLRenderHash = createGLRenderHash(f.id, true);
|
||||
|
||||
return renderHash;
|
||||
}))
|
||||
@ -200,9 +200,9 @@ describe("GLRenderer.renderer", () => {
|
||||
spyOn(rendererMock, "clear");
|
||||
spyOn(THREE, "WebGLRenderer").and.returnValue(<THREE.WebGLRenderer>rendererMock);
|
||||
|
||||
const frame: IFrame = new FrameHelper().createFrame();
|
||||
const frame: AnimationFrame = new FrameHelper().createFrame();
|
||||
frame.id = 1;
|
||||
let frame$: BehaviorSubject<IFrame> = new BehaviorSubject<IFrame>(frame);
|
||||
let frame$: BehaviorSubject<AnimationFrame> = new BehaviorSubject<AnimationFrame>(frame);
|
||||
|
||||
let renderServiceMock: RenderServiceMock = new RenderServiceMock(document.createElement("div"));
|
||||
let renderCamera: RenderCamera = new RenderCamera(1, 1, RenderMode.Letterbox);
|
||||
@ -214,8 +214,8 @@ describe("GLRenderer.renderer", () => {
|
||||
|
||||
let frameSubscription: Subscription = frame$.pipe(
|
||||
map(
|
||||
(f: IFrame): IGLRenderHash => {
|
||||
let renderHash: IGLRenderHash = createGLRenderHash(f.id, true);
|
||||
(f: AnimationFrame): GLRenderHash => {
|
||||
let renderHash: GLRenderHash = createGLRenderHash(f.id, true);
|
||||
|
||||
return renderHash;
|
||||
}))
|
||||
@ -239,7 +239,7 @@ describe("GLRenderer.renderer", () => {
|
||||
let renderServiceMock: RenderServiceMock = new RenderServiceMock(document.createElement("div"));
|
||||
|
||||
let renderCamera: RenderCamera = new RenderCamera(1, 1, RenderMode.Letterbox);
|
||||
const frame: IFrame = new FrameHelper().createFrame();
|
||||
const frame: AnimationFrame = new FrameHelper().createFrame();
|
||||
frame.id = 1;
|
||||
renderCamera.setFrame(frame);
|
||||
|
||||
@ -268,7 +268,7 @@ describe("GLRenderer.renderer", () => {
|
||||
|
||||
let renderServiceMock: RenderServiceMock = new RenderServiceMock(document.createElement("div"));
|
||||
let renderCamera: RenderCamera = new RenderCamera(1, 1, RenderMode.Letterbox);
|
||||
const frame: IFrame = new FrameHelper().createFrame();
|
||||
const frame: AnimationFrame = new FrameHelper().createFrame();
|
||||
frame.id = 1;
|
||||
renderCamera.setFrame(frame);
|
||||
renderServiceMock.renderCameraFrame$ = new BehaviorSubject<RenderCamera>(renderCamera);
|
||||
@ -295,7 +295,7 @@ describe("GLRenderer.renderer", () => {
|
||||
spyOn(rendererMock, "setClearColor");
|
||||
spyOn(THREE, "WebGLRenderer").and.returnValue(<THREE.WebGLRenderer>rendererMock);
|
||||
|
||||
const frame: IFrame = new FrameHelper().createFrame();
|
||||
const frame: AnimationFrame = new FrameHelper().createFrame();
|
||||
frame.id = 1;
|
||||
|
||||
let renderServiceMock: RenderServiceMock = new RenderServiceMock(document.createElement("div"));
|
||||
@ -326,7 +326,7 @@ describe("GLRenderer.renderer", () => {
|
||||
spyOn(rendererMock, "setClearColor");
|
||||
spyOn(THREE, "WebGLRenderer").and.returnValue(<THREE.WebGLRenderer>rendererMock);
|
||||
|
||||
const frame: IFrame = new FrameHelper().createFrame();
|
||||
const frame: AnimationFrame = new FrameHelper().createFrame();
|
||||
frame.id = 1;
|
||||
|
||||
let renderServiceMock: RenderServiceMock = new RenderServiceMock(document.createElement("div"));
|
||||
@ -362,7 +362,7 @@ describe("GLRenderer.renderer", () => {
|
||||
spyOn(rendererMock, "setClearColor");
|
||||
spyOn(THREE, "WebGLRenderer").and.returnValue(<THREE.WebGLRenderer>rendererMock);
|
||||
|
||||
const frame: IFrame = new FrameHelper().createFrame();
|
||||
const frame: AnimationFrame = new FrameHelper().createFrame();
|
||||
frame.id = 1;
|
||||
|
||||
let renderServiceMock: RenderServiceMock = new RenderServiceMock(document.createElement("div"));
|
||||
@ -403,7 +403,7 @@ describe("GLRenderer.renderer", () => {
|
||||
spyOn(rendererMock, "setClearColor");
|
||||
spyOn(THREE, "WebGLRenderer").and.returnValue(<THREE.WebGLRenderer>rendererMock);
|
||||
|
||||
const frame: IFrame = new FrameHelper().createFrame();
|
||||
const frame: AnimationFrame = new FrameHelper().createFrame();
|
||||
frame.id = 1;
|
||||
|
||||
let renderServiceMock: RenderServiceMock = new RenderServiceMock(document.createElement("div"));
|
||||
@ -437,7 +437,7 @@ describe("GLRenderer.renderer", () => {
|
||||
let renderServiceMock: RenderServiceMock = new RenderServiceMock(document.createElement("div"));
|
||||
let renderCamera: RenderCamera = new RenderCamera(1, 1, RenderMode.Letterbox);
|
||||
|
||||
const frame: IFrame = new FrameHelper().createFrame();
|
||||
const frame: AnimationFrame = new FrameHelper().createFrame();
|
||||
frame.id = 1;
|
||||
renderCamera.setFrame(frame);
|
||||
renderServiceMock.renderCameraFrame$ = new BehaviorSubject<RenderCamera>(renderCamera);
|
||||
@ -466,7 +466,7 @@ describe("GLRenderer.renderer", () => {
|
||||
let renderServiceMock: RenderServiceMock = new RenderServiceMock(document.createElement("div"));
|
||||
let renderCamera: RenderCamera = new RenderCamera(1, 1, RenderMode.Letterbox);
|
||||
|
||||
const frame: IFrame = new FrameHelper().createFrame();
|
||||
const frame: AnimationFrame = new FrameHelper().createFrame();
|
||||
frame.id = 1;
|
||||
renderCamera.setFrame(frame);
|
||||
renderServiceMock.renderCameraFrame$ = new BehaviorSubject<RenderCamera>(renderCamera);
|
||||
@ -497,7 +497,7 @@ describe("GLRenderer.renderer", () => {
|
||||
|
||||
let renderServiceMock: RenderServiceMock = new RenderServiceMock(document.createElement("div"));
|
||||
let renderCamera: RenderCamera = new RenderCamera(1, 1, RenderMode.Letterbox);
|
||||
const frame: IFrame = new FrameHelper().createFrame();
|
||||
const frame: AnimationFrame = new FrameHelper().createFrame();
|
||||
frame.id = 1;
|
||||
renderCamera.setFrame(frame);
|
||||
renderServiceMock.renderCameraFrame$ = new BehaviorSubject<RenderCamera>(renderCamera);
|
||||
@ -505,8 +505,8 @@ describe("GLRenderer.renderer", () => {
|
||||
let canvas = document.createElement("canvas");
|
||||
let glRenderer: GLRenderer = new GLRenderer(canvas, document.createElement("div"), renderServiceMock);
|
||||
|
||||
let renderHash1: IGLRenderHash = createGLRenderHash(frame.id, true, hash1);
|
||||
let renderHash2: IGLRenderHash = createGLRenderHash(frame.id, true, hash2);
|
||||
let renderHash1: GLRenderHash = createGLRenderHash(frame.id, true, hash1);
|
||||
let renderHash2: GLRenderHash = createGLRenderHash(frame.id, true, hash2);
|
||||
|
||||
glRenderer.render$.next(renderHash1);
|
||||
glRenderer.render$.next(renderHash2);
|
||||
@ -544,7 +544,7 @@ describe("GLRenderer.renderer", () => {
|
||||
|
||||
let renderServiceMock: RenderServiceMock = new RenderServiceMock(document.createElement("div"));
|
||||
let renderCamera: RenderCamera = new RenderCamera(1, 1, RenderMode.Letterbox);
|
||||
const frame: IFrame = new FrameHelper().createFrame();
|
||||
const frame: AnimationFrame = new FrameHelper().createFrame();
|
||||
frame.id = 1;
|
||||
renderCamera.setFrame(frame);
|
||||
renderServiceMock.renderCameraFrame$ = new BehaviorSubject<RenderCamera>(renderCamera);
|
||||
@ -552,8 +552,8 @@ describe("GLRenderer.renderer", () => {
|
||||
let canvas = document.createElement("canvas");
|
||||
let glRenderer: GLRenderer = new GLRenderer(canvas, document.createElement("div"), renderServiceMock);
|
||||
|
||||
let renderHash1: IGLRenderHash = createGLRenderHash(frame.id, true, hash1);
|
||||
let renderHash2: IGLRenderHash = createGLRenderHash(frame.id, true, hash2);
|
||||
let renderHash1: GLRenderHash = createGLRenderHash(frame.id, true, hash1);
|
||||
let renderHash2: GLRenderHash = createGLRenderHash(frame.id, true, hash2);
|
||||
|
||||
glRenderer.render$.next(renderHash1);
|
||||
glRenderer.render$.next(renderHash2);
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
import { RenderCamera } from "../../src/render/RenderCamera";
|
||||
import { RenderMode } from "../../src/render/RenderMode";
|
||||
import { IFrame } from "../../src/state/interfaces/IFrame";
|
||||
import { AnimationFrame } from "../../src/state/interfaces/AnimationFrame";
|
||||
import { FrameHelper } from "../helper/FrameHelper";
|
||||
|
||||
describe("RenderCamera.ctor", () => {
|
||||
@ -63,7 +63,7 @@ describe("RenderCamera.setRenderMode", () => {
|
||||
|
||||
renderCamera.setRenderMode(RenderMode.Fill);
|
||||
|
||||
const frame: IFrame = new FrameHelper().createFrame();
|
||||
const frame: AnimationFrame = new FrameHelper().createFrame();
|
||||
renderCamera.setFrame(frame);
|
||||
|
||||
expect(renderCamera.changed).toBe(true);
|
||||
@ -88,7 +88,7 @@ describe("RenderCamera.setFrame", () => {
|
||||
it("should not be changed when not updated", () => {
|
||||
let renderCamera: RenderCamera = new RenderCamera(1, 1, RenderMode.Letterbox);
|
||||
|
||||
const frame: IFrame = new FrameHelper().createFrame();
|
||||
const frame: AnimationFrame = new FrameHelper().createFrame();
|
||||
renderCamera.setFrame(frame);
|
||||
|
||||
expect(renderCamera.changed).toBe(true);
|
||||
@ -113,7 +113,7 @@ describe("RenderCamera.setFrame", () => {
|
||||
|
||||
renderCamera.setSize({ width: 1, height: 1 });
|
||||
|
||||
const frame: IFrame = new FrameHelper().createFrame();
|
||||
const frame: AnimationFrame = new FrameHelper().createFrame();
|
||||
frame.id = 0;
|
||||
renderCamera.setFrame(frame);
|
||||
frame.id = 1;
|
||||
@ -186,7 +186,7 @@ describe("RenderCamera.perspective.fov", () => {
|
||||
|
||||
const fov: number = renderCamera.perspective.fov;
|
||||
|
||||
const frame: IFrame = new FrameHelper().createFrame();
|
||||
const frame: AnimationFrame = new FrameHelper().createFrame();
|
||||
frame.state.zoom = 1;
|
||||
renderCamera.setFrame(frame);
|
||||
|
||||
|
||||
@ -2,16 +2,16 @@ import { empty as observableEmpty, Subject } from "rxjs";
|
||||
|
||||
import { skip, first, take, count } from "rxjs/operators";
|
||||
import { Camera } from "../../src/geo/Camera";
|
||||
import { ISize } from "../../src/render/interfaces/ISize";
|
||||
import { ViewportSize } from "../../src/render/interfaces/ViewportSize";
|
||||
import { RenderCamera } from "../../src/render/RenderCamera";
|
||||
import { RenderMode } from "../../src/render/RenderMode";
|
||||
import { RenderService } from "../../src/render/RenderService";
|
||||
import { IFrame } from "../../src/state/interfaces/IFrame";
|
||||
import { AnimationFrame } from "../../src/state/interfaces/AnimationFrame";
|
||||
import { FrameHelper } from "../helper/FrameHelper";
|
||||
|
||||
const createFrame: (frameId: number, alpha?: number, camera?: Camera) => IFrame =
|
||||
(frameId: number, alpha?: number, camera?: Camera): IFrame => {
|
||||
const frame: IFrame = new FrameHelper().createFrame();
|
||||
const createFrame: (frameId: number, alpha?: number, camera?: Camera) => AnimationFrame =
|
||||
(frameId: number, alpha?: number, camera?: Camera): AnimationFrame => {
|
||||
const frame: AnimationFrame = new FrameHelper().createFrame();
|
||||
|
||||
frame.id = frameId;
|
||||
frame.state.alpha = alpha != null ? alpha : 0;
|
||||
@ -89,7 +89,7 @@ describe("RenderService.size", () => {
|
||||
renderService.size$.pipe(
|
||||
first())
|
||||
.subscribe(
|
||||
(size: ISize): void => {
|
||||
(size: ViewportSize): void => {
|
||||
expect(size).toBeDefined();
|
||||
|
||||
done();
|
||||
@ -104,7 +104,7 @@ describe("RenderService.size", () => {
|
||||
renderService.size$.pipe(
|
||||
first())
|
||||
.subscribe(
|
||||
(size: ISize): void => {
|
||||
(size: ViewportSize): void => {
|
||||
expect(size.width).toBe(0);
|
||||
expect(size.height).toBe(0);
|
||||
|
||||
@ -120,7 +120,7 @@ describe("RenderService.size", () => {
|
||||
renderService.size$.pipe(
|
||||
take(2))
|
||||
.subscribe(
|
||||
(size: ISize): void => { return; },
|
||||
(size: ViewportSize): void => { return; },
|
||||
(e: Error): void => { return; },
|
||||
(): void => { done(); });
|
||||
|
||||
@ -137,7 +137,7 @@ describe("RenderService.renderCameraFrame", () => {
|
||||
|
||||
it("should be defined", (done: Function) => {
|
||||
let element: HTMLDivElement = document.createElement("div");
|
||||
let frame$: Subject<IFrame> = new Subject<IFrame>();
|
||||
let frame$: Subject<AnimationFrame> = new Subject<AnimationFrame>();
|
||||
const renderCamera: RenderCamera = createRenderCameraMock();
|
||||
|
||||
let renderService: RenderService = new RenderService(element, frame$, RenderMode.Letterbox, renderCamera);
|
||||
@ -157,7 +157,7 @@ describe("RenderService.renderCameraFrame", () => {
|
||||
|
||||
it("should be changed for first frame", (done: Function) => {
|
||||
let element: HTMLDivElement = document.createElement("div");
|
||||
let frame$: Subject<IFrame> = new Subject<IFrame>();
|
||||
let frame$: Subject<AnimationFrame> = new Subject<AnimationFrame>();
|
||||
const renderCamera: RenderCamera = createRenderCameraMock();
|
||||
|
||||
let renderService: RenderService = new RenderService(element, frame$, RenderMode.Letterbox, renderCamera);
|
||||
@ -177,7 +177,7 @@ describe("RenderService.renderCameraFrame", () => {
|
||||
|
||||
it("should not be changed for two identical frames", (done: Function) => {
|
||||
let element: HTMLDivElement = document.createElement("div");
|
||||
let frame$: Subject<IFrame> = new Subject<IFrame>();
|
||||
let frame$: Subject<AnimationFrame> = new Subject<AnimationFrame>();
|
||||
const renderCamera: RenderCamera = createRenderCameraMock();
|
||||
|
||||
let renderService: RenderService = new RenderService(element, frame$, RenderMode.Letterbox, renderCamera);
|
||||
@ -199,7 +199,7 @@ describe("RenderService.renderCameraFrame", () => {
|
||||
|
||||
it("should be changed for alpha changes between two frames", (done: Function) => {
|
||||
let element: HTMLDivElement = document.createElement("div");
|
||||
let frame$: Subject<IFrame> = new Subject<IFrame>();
|
||||
let frame$: Subject<AnimationFrame> = new Subject<AnimationFrame>();
|
||||
const renderCamera: RenderCamera = createRenderCameraMock();
|
||||
|
||||
let renderService: RenderService = new RenderService(element, frame$, RenderMode.Letterbox, renderCamera);
|
||||
@ -221,7 +221,7 @@ describe("RenderService.renderCameraFrame", () => {
|
||||
|
||||
it("should be changed for camera changes between two frames", (done: Function) => {
|
||||
let element: HTMLDivElement = document.createElement("div");
|
||||
let frame$: Subject<IFrame> = new Subject<IFrame>();
|
||||
let frame$: Subject<AnimationFrame> = new Subject<AnimationFrame>();
|
||||
const renderCamera: RenderCamera = createRenderCameraMock();
|
||||
|
||||
let renderService: RenderService = new RenderService(element, frame$, RenderMode.Letterbox, renderCamera);
|
||||
@ -246,7 +246,7 @@ describe("RenderService.renderCameraFrame", () => {
|
||||
|
||||
it("should be changed for resize", (done: Function) => {
|
||||
let element: HTMLDivElement = document.createElement("div");
|
||||
let frame$: Subject<IFrame> = new Subject<IFrame>();
|
||||
let frame$: Subject<AnimationFrame> = new Subject<AnimationFrame>();
|
||||
const renderCamera: RenderCamera = createRenderCameraMock();
|
||||
|
||||
let renderService: RenderService = new RenderService(element, frame$, RenderMode.Letterbox, renderCamera);
|
||||
@ -270,7 +270,7 @@ describe("RenderService.renderCameraFrame", () => {
|
||||
|
||||
it("should be changed for changed render mode", (done: Function) => {
|
||||
let element: HTMLDivElement = document.createElement("div");
|
||||
let frame$: Subject<IFrame> = new Subject<IFrame>();
|
||||
let frame$: Subject<AnimationFrame> = new Subject<AnimationFrame>();
|
||||
const renderCamera: RenderCamera = createRenderCameraMock();
|
||||
|
||||
let renderService: RenderService = new RenderService(element, frame$, RenderMode.Letterbox, renderCamera);
|
||||
@ -294,7 +294,7 @@ describe("RenderService.renderCameraFrame", () => {
|
||||
|
||||
it("should have correct render mode when changed before subscribe", (done: Function) => {
|
||||
let element: HTMLDivElement = document.createElement("div");
|
||||
let frame$: Subject<IFrame> = new Subject<IFrame>();
|
||||
let frame$: Subject<AnimationFrame> = new Subject<AnimationFrame>();
|
||||
const renderCamera: RenderCamera = createRenderCameraMock();
|
||||
|
||||
let renderService: RenderService = new RenderService(element, frame$, RenderMode.Letterbox, renderCamera);
|
||||
@ -316,7 +316,7 @@ describe("RenderService.renderCameraFrame", () => {
|
||||
|
||||
it("should emit once for each frame", (done: Function) => {
|
||||
let element: HTMLDivElement = document.createElement("div");
|
||||
let frame$: Subject<IFrame> = new Subject<IFrame>();
|
||||
let frame$: Subject<AnimationFrame> = new Subject<AnimationFrame>();
|
||||
const renderCamera: RenderCamera = createRenderCameraMock();
|
||||
|
||||
let renderService: RenderService = new RenderService(element, frame$, RenderMode.Letterbox, renderCamera);
|
||||
@ -345,7 +345,7 @@ describe("RenderService.renderCameraFrame", () => {
|
||||
describe("RenderService.renderCamera$", () => {
|
||||
it("should be defined", (done: Function) => {
|
||||
let element: HTMLDivElement = document.createElement("div");
|
||||
let frame$: Subject<IFrame> = new Subject<IFrame>();
|
||||
let frame$: Subject<AnimationFrame> = new Subject<AnimationFrame>();
|
||||
|
||||
const renderCamera: RenderCamera = new RenderCamera(1, 1, RenderMode.Fill);
|
||||
|
||||
@ -366,7 +366,7 @@ describe("RenderService.renderCamera$", () => {
|
||||
|
||||
it("should only emit when camera has changed", (done: Function) => {
|
||||
let element: HTMLDivElement = document.createElement("div");
|
||||
let frame$: Subject<IFrame> = new Subject<IFrame>();
|
||||
let frame$: Subject<AnimationFrame> = new Subject<AnimationFrame>();
|
||||
|
||||
const renderCamera: RenderCamera = new RenderCamera(1, 1, RenderMode.Fill);
|
||||
|
||||
@ -405,7 +405,7 @@ describe("RenderService.renderCamera$", () => {
|
||||
appendChild(htmlElement: HTMLElement): void { return; },
|
||||
};
|
||||
|
||||
let frame$: Subject<IFrame> = new Subject<IFrame>();
|
||||
let frame$: Subject<AnimationFrame> = new Subject<AnimationFrame>();
|
||||
|
||||
let renderService: RenderService = new RenderService(element, frame$, RenderMode.Letterbox);
|
||||
|
||||
@ -425,7 +425,7 @@ describe("RenderService.renderCamera$", () => {
|
||||
describe("RenderService.bearing$", () => {
|
||||
it("should be defined", (done: Function) => {
|
||||
let element: HTMLDivElement = document.createElement("div");
|
||||
let frame$: Subject<IFrame> = new Subject<IFrame>();
|
||||
let frame$: Subject<AnimationFrame> = new Subject<AnimationFrame>();
|
||||
|
||||
const renderCamera: RenderCamera = new RenderCamera(1, 1, RenderMode.Fill);
|
||||
|
||||
@ -445,7 +445,7 @@ describe("RenderService.bearing$", () => {
|
||||
|
||||
it("should be 90 degrees", (done: Function) => {
|
||||
let element: HTMLDivElement = document.createElement("div");
|
||||
let frame$: Subject<IFrame> = new Subject<IFrame>();
|
||||
let frame$: Subject<AnimationFrame> = new Subject<AnimationFrame>();
|
||||
|
||||
const renderCamera: RenderCamera = new RenderCamera(1, 1, RenderMode.Fill);
|
||||
|
||||
@ -460,7 +460,7 @@ describe("RenderService.bearing$", () => {
|
||||
done();
|
||||
});
|
||||
|
||||
let frame: IFrame = createFrame(0);
|
||||
let frame: AnimationFrame = createFrame(0);
|
||||
frame.state.camera.lookat.set(1, 0, 0);
|
||||
|
||||
frame$.next(frame);
|
||||
|
||||
@ -1,10 +1,10 @@
|
||||
import { NodeHelper } from "../helper/NodeHelper";
|
||||
|
||||
import { Node } from "../../src/graph/Node";
|
||||
import { ICoreNode } from "../../src/api/interfaces/ICoreNode";
|
||||
import { IFullNode } from "../../src/api/interfaces/IFullNode";
|
||||
import { IRotation } from "../../src/state/interfaces/IRotation";
|
||||
import { IState } from "../../src/state/interfaces/IState";
|
||||
import { CoreImageEnt } from "../../src/api/ents/CoreImageEnt";
|
||||
import { ImageEnt } from "../../src/api/ents/ImageEnt";
|
||||
import { EulerRotation } from "../../src/state/interfaces/EulerRotation";
|
||||
import { IStateBase } from "../../src/state/interfaces/IStateBase";
|
||||
import { StateBase } from "../../src/state/states/StateBase";
|
||||
import { Camera } from "../../src/geo/Camera";
|
||||
import { TransitionMode } from "../../src/state/TransitionMode";
|
||||
@ -15,9 +15,9 @@ class TestStateBase extends StateBase {
|
||||
public waitInteractively(): StateBase { return null; }
|
||||
public move(delta: number): void { return; }
|
||||
public moveTo(position: number): void { return; }
|
||||
public rotate(delta: IRotation): void { return; }
|
||||
public rotateUnbounded(delta: IRotation): void { return; }
|
||||
public rotateWithoutInertia(delta: IRotation): void { return; }
|
||||
public rotate(delta: EulerRotation): void { return; }
|
||||
public rotateUnbounded(delta: EulerRotation): void { return; }
|
||||
public rotateWithoutInertia(delta: EulerRotation): void { return; }
|
||||
public rotateBasic(basicRotation: number[]): void { return; }
|
||||
public rotateBasicUnbounded(basic: number[]): void { return; }
|
||||
public rotateBasicWithoutInertia(basic: number[]): void { return; }
|
||||
@ -34,7 +34,7 @@ class TestStateBase extends StateBase {
|
||||
}
|
||||
|
||||
class TestNode extends Node {
|
||||
constructor(core: ICoreNode) {
|
||||
constructor(core: CoreImageEnt) {
|
||||
super(core);
|
||||
}
|
||||
|
||||
@ -47,7 +47,7 @@ class TestNode extends Node {
|
||||
}
|
||||
}
|
||||
|
||||
let createState: () => IState = (): IState => {
|
||||
let createState: () => IStateBase = (): IStateBase => {
|
||||
return {
|
||||
alpha: 1,
|
||||
camera: new Camera(),
|
||||
@ -69,12 +69,12 @@ let createFullNode: () => Node = (): Node => {
|
||||
|
||||
describe("StateBase.transitionMode", () => {
|
||||
it("should set transition mode", () => {
|
||||
const state1: IState = createState();
|
||||
const state1: IStateBase = createState();
|
||||
const stateBase1: TestStateBase = new TestStateBase(state1);
|
||||
|
||||
expect(stateBase1.transitionMode).toBe(TransitionMode.Default);
|
||||
|
||||
const state2: IState = createState();
|
||||
const state2: IStateBase = createState();
|
||||
state2.transitionMode = TransitionMode.Instantaneous;
|
||||
const stateBase2: TestStateBase = new TestStateBase(state2);
|
||||
|
||||
@ -84,25 +84,25 @@ describe("StateBase.transitionMode", () => {
|
||||
|
||||
describe("StateBase.motionlessTransition", () => {
|
||||
it("should be false if not both nodes set", () => {
|
||||
const state: IState = createState();
|
||||
const state: IStateBase = createState();
|
||||
const stateBase: TestStateBase = new TestStateBase(state);
|
||||
|
||||
expect(stateBase.motionlessTransition()).toBe(false);
|
||||
});
|
||||
|
||||
it("should be false if nodes in same connected component", () => {
|
||||
const state: IState = createState();
|
||||
const state: IStateBase = createState();
|
||||
const stateBase: TestStateBase = new TestStateBase(state);
|
||||
|
||||
const helper: NodeHelper = new NodeHelper();
|
||||
|
||||
const fullNode1: IFullNode = helper.createFullNode();
|
||||
const fullNode1: ImageEnt = helper.createFullNode();
|
||||
fullNode1.merge_cc = 1;
|
||||
fullNode1.merge_version = 1;
|
||||
const node1: Node = new TestNode(fullNode1);
|
||||
node1.makeFull(fullNode1);
|
||||
|
||||
const fullNode2: IFullNode = helper.createFullNode();
|
||||
const fullNode2: ImageEnt = helper.createFullNode();
|
||||
fullNode2.merge_cc = 1;
|
||||
fullNode2.merge_version = 1;
|
||||
const node2: Node = new TestNode(fullNode2);
|
||||
@ -115,19 +115,19 @@ describe("StateBase.motionlessTransition", () => {
|
||||
});
|
||||
|
||||
it("should be true if instantaneous transition mode", () => {
|
||||
const state: IState = createState();
|
||||
const state: IStateBase = createState();
|
||||
state.transitionMode = TransitionMode.Instantaneous;
|
||||
const stateBase: TestStateBase = new TestStateBase(state);
|
||||
|
||||
const helper: NodeHelper = new NodeHelper();
|
||||
|
||||
const fullNode1: IFullNode = helper.createFullNode();
|
||||
const fullNode1: ImageEnt = helper.createFullNode();
|
||||
fullNode1.merge_cc = 1;
|
||||
fullNode1.merge_version = 1;
|
||||
const node1: Node = new TestNode(fullNode1);
|
||||
node1.makeFull(fullNode1);
|
||||
|
||||
const fullNode2: IFullNode = helper.createFullNode();
|
||||
const fullNode2: ImageEnt = helper.createFullNode();
|
||||
fullNode2.merge_cc = 1;
|
||||
fullNode2.merge_version = 1;
|
||||
const node2: Node = new TestNode(fullNode2);
|
||||
@ -142,7 +142,7 @@ describe("StateBase.motionlessTransition", () => {
|
||||
|
||||
describe("StateBase.set", () => {
|
||||
it("should set current node", () => {
|
||||
let state: IState = createState();
|
||||
let state: IStateBase = createState();
|
||||
let stateBase: TestStateBase = new TestStateBase(state);
|
||||
|
||||
let node: Node = createFullNode();
|
||||
@ -154,7 +154,7 @@ describe("StateBase.set", () => {
|
||||
});
|
||||
|
||||
it("should set multiple nodes", () => {
|
||||
let state: IState = createState();
|
||||
let state: IStateBase = createState();
|
||||
let stateBase: TestStateBase = new TestStateBase(state);
|
||||
|
||||
stateBase.set([
|
||||
@ -177,14 +177,14 @@ describe("StateBase.remove", () => {
|
||||
});
|
||||
|
||||
it("should throw when removing negative number", () => {
|
||||
let state: IState = createState();
|
||||
let state: IStateBase = createState();
|
||||
let stateBase: TestStateBase = new TestStateBase(state);
|
||||
|
||||
expect((): void => { stateBase.remove(-1); }).toThrowError(Error);
|
||||
});
|
||||
|
||||
it("should throw when removing current node", () => {
|
||||
let state: IState = createState();
|
||||
let state: IStateBase = createState();
|
||||
let stateBase: TestStateBase = new TestStateBase(state);
|
||||
|
||||
let node: Node = createFullNode();
|
||||
@ -194,7 +194,7 @@ describe("StateBase.remove", () => {
|
||||
});
|
||||
|
||||
it("should throw when removing previous node", () => {
|
||||
let state: IState = createState();
|
||||
let state: IStateBase = createState();
|
||||
|
||||
let stateBase: TestStateBase = new TestStateBase(state);
|
||||
|
||||
@ -205,11 +205,11 @@ describe("StateBase.remove", () => {
|
||||
});
|
||||
|
||||
it("should remove one node", () => {
|
||||
let state: IState = createState();
|
||||
let state: IStateBase = createState();
|
||||
|
||||
let stateBase: TestStateBase = new TestStateBase(state);
|
||||
|
||||
let coreNode: ICoreNode = helper.createCoreNode();
|
||||
let coreNode: CoreImageEnt = helper.createCoreNode();
|
||||
coreNode.key = "currentNode";
|
||||
let node: TestNode = new TestNode(coreNode);
|
||||
node.makeFull(helper.createFillNode());
|
||||
@ -226,11 +226,11 @@ describe("StateBase.remove", () => {
|
||||
});
|
||||
|
||||
it("should remove multiple nodes", () => {
|
||||
let state: IState = createState();
|
||||
let state: IStateBase = createState();
|
||||
|
||||
let stateBase: TestStateBase = new TestStateBase(state);
|
||||
|
||||
let coreNode: ICoreNode = helper.createCoreNode();
|
||||
let coreNode: CoreImageEnt = helper.createCoreNode();
|
||||
coreNode.key = "currentNode";
|
||||
let node: TestNode = new TestNode(coreNode);
|
||||
node.makeFull(helper.createFillNode());
|
||||
@ -260,7 +260,7 @@ describe("StateBase.clear", () => {
|
||||
});
|
||||
|
||||
it("should clear empty state without affecting it", () => {
|
||||
let state: IState = createState();
|
||||
let state: IStateBase = createState();
|
||||
let stateBase: TestStateBase = new TestStateBase(state);
|
||||
|
||||
stateBase.clear();
|
||||
@ -269,11 +269,11 @@ describe("StateBase.clear", () => {
|
||||
});
|
||||
|
||||
it("should remove one previous node", () => {
|
||||
let state: IState = createState();
|
||||
let state: IStateBase = createState();
|
||||
|
||||
let stateBase: TestStateBase = new TestStateBase(state);
|
||||
|
||||
let coreNode: ICoreNode = helper.createCoreNode();
|
||||
let coreNode: CoreImageEnt = helper.createCoreNode();
|
||||
coreNode.key = "currentNode";
|
||||
let node: TestNode = new TestNode(coreNode);
|
||||
node.makeFull(helper.createFillNode());
|
||||
@ -290,11 +290,11 @@ describe("StateBase.clear", () => {
|
||||
});
|
||||
|
||||
it("should remove multiple previous nodes", () => {
|
||||
let state: IState = createState();
|
||||
let state: IStateBase = createState();
|
||||
|
||||
let stateBase: TestStateBase = new TestStateBase(state);
|
||||
|
||||
let coreNode: ICoreNode = helper.createCoreNode();
|
||||
let coreNode: CoreImageEnt = helper.createCoreNode();
|
||||
coreNode.key = "currentNode";
|
||||
let node: TestNode = new TestNode(coreNode);
|
||||
node.makeFull(helper.createFillNode());
|
||||
@ -316,11 +316,11 @@ describe("StateBase.clear", () => {
|
||||
});
|
||||
|
||||
it("should remove one coming node", () => {
|
||||
let state: IState = createState();
|
||||
let state: IStateBase = createState();
|
||||
|
||||
let stateBase: TestStateBase = new TestStateBase(state);
|
||||
|
||||
let coreNode: ICoreNode = helper.createCoreNode();
|
||||
let coreNode: CoreImageEnt = helper.createCoreNode();
|
||||
coreNode.key = "currentNode";
|
||||
let node: TestNode = new TestNode(coreNode);
|
||||
node.makeFull(helper.createFillNode());
|
||||
@ -337,11 +337,11 @@ describe("StateBase.clear", () => {
|
||||
});
|
||||
|
||||
it("should remove multiple coming nodes", () => {
|
||||
let state: IState = createState();
|
||||
let state: IStateBase = createState();
|
||||
|
||||
let stateBase: TestStateBase = new TestStateBase(state);
|
||||
|
||||
let coreNode: ICoreNode = helper.createCoreNode();
|
||||
let coreNode: CoreImageEnt = helper.createCoreNode();
|
||||
coreNode.key = "currentNode";
|
||||
let node: TestNode = new TestNode(coreNode);
|
||||
node.makeFull(helper.createFillNode());
|
||||
@ -363,11 +363,11 @@ describe("StateBase.clear", () => {
|
||||
});
|
||||
|
||||
it("should remove one previous and one coming node", () => {
|
||||
let state: IState = createState();
|
||||
let state: IStateBase = createState();
|
||||
|
||||
let stateBase: TestStateBase = new TestStateBase(state);
|
||||
|
||||
let coreNode: ICoreNode = helper.createCoreNode();
|
||||
let coreNode: CoreImageEnt = helper.createCoreNode();
|
||||
coreNode.key = "currentNode";
|
||||
let node: TestNode = new TestNode(coreNode);
|
||||
node.makeFull(helper.createFillNode());
|
||||
@ -393,7 +393,7 @@ describe("StateBase.clearPrior", () => {
|
||||
});
|
||||
|
||||
it("should clear prior of empty state without affecting it", () => {
|
||||
let state: IState = createState();
|
||||
let state: IStateBase = createState();
|
||||
let stateBase: TestStateBase = new TestStateBase(state);
|
||||
|
||||
stateBase.clearPrior();
|
||||
@ -402,11 +402,11 @@ describe("StateBase.clearPrior", () => {
|
||||
});
|
||||
|
||||
it("should remove one previous node", () => {
|
||||
let state: IState = createState();
|
||||
let state: IStateBase = createState();
|
||||
|
||||
let stateBase: TestStateBase = new TestStateBase(state);
|
||||
|
||||
let coreNode: ICoreNode = helper.createCoreNode();
|
||||
let coreNode: CoreImageEnt = helper.createCoreNode();
|
||||
coreNode.key = "currentNode";
|
||||
let node: TestNode = new TestNode(coreNode);
|
||||
node.makeFull(helper.createFillNode());
|
||||
@ -423,11 +423,11 @@ describe("StateBase.clearPrior", () => {
|
||||
});
|
||||
|
||||
it("should remove multiple previous nodes", () => {
|
||||
let state: IState = createState();
|
||||
let state: IStateBase = createState();
|
||||
|
||||
let stateBase: TestStateBase = new TestStateBase(state);
|
||||
|
||||
let coreNode: ICoreNode = helper.createCoreNode();
|
||||
let coreNode: CoreImageEnt = helper.createCoreNode();
|
||||
coreNode.key = "currentNode";
|
||||
let node: TestNode = new TestNode(coreNode);
|
||||
node.makeFull(helper.createFillNode());
|
||||
|
||||
@ -6,8 +6,8 @@ import * as THREE from "three";
|
||||
import { NodeHelper } from "../helper/NodeHelper";
|
||||
|
||||
import { Node } from "../../src/graph/Node";
|
||||
import { IFillNode } from "../../src/api/interfaces/IFillNode";
|
||||
import { IState } from "../../src/state/interfaces/IState";
|
||||
import { SpatialImageEnt } from "../../src/api/ents/SpatialImageEnt";
|
||||
import { IStateBase } from "../../src/state/interfaces/IStateBase";
|
||||
import { TraversingState } from "../../src/state/states/TraversingState";
|
||||
import { Camera } from "../../src/geo/Camera";
|
||||
import { TransitionMode } from "../../src/state/TransitionMode";
|
||||
@ -17,7 +17,7 @@ const transformHelper = new TransformHelper();
|
||||
|
||||
describe("TraversingState.ctor", () => {
|
||||
it("should be defined", () => {
|
||||
let state: IState = {
|
||||
let state: IStateBase = {
|
||||
alpha: 1,
|
||||
camera: new Camera(),
|
||||
currentIndex: -1,
|
||||
@ -76,7 +76,7 @@ describe("TraversingState.currentCamera.lookat", () => {
|
||||
camera.position.fromArray([10, 10, 0]);
|
||||
camera.lookat.fromArray([15, 15, 0]);
|
||||
|
||||
let state: IState = {
|
||||
let state: IStateBase = {
|
||||
alpha: 1,
|
||||
camera: camera,
|
||||
currentIndex: -1,
|
||||
@ -89,7 +89,7 @@ describe("TraversingState.currentCamera.lookat", () => {
|
||||
let traversingState: TestTraversingState = new TestTraversingState(state);
|
||||
|
||||
let node: TestNode = new TestNode();
|
||||
let fillNode: IFillNode = helper.createFillNode();
|
||||
let fillNode: SpatialImageEnt = helper.createFillNode();
|
||||
node.makeFull(fillNode);
|
||||
|
||||
traversingState.set([node]);
|
||||
@ -108,7 +108,7 @@ describe("TraversingState.currentCamera.lookat", () => {
|
||||
camera.position.fromArray([10, 10, 0]);
|
||||
camera.lookat.fromArray([15, 15, 0]);
|
||||
|
||||
let state: IState = {
|
||||
let state: IStateBase = {
|
||||
alpha: 1,
|
||||
camera: camera,
|
||||
currentIndex: -1,
|
||||
@ -121,12 +121,12 @@ describe("TraversingState.currentCamera.lookat", () => {
|
||||
let traversingState: TestTraversingState = new TestTraversingState(state);
|
||||
|
||||
let previousNode: TestNode = new TestNode();
|
||||
let previousFillNode: IFillNode = helper.createFillNode();
|
||||
let previousFillNode: SpatialImageEnt = helper.createFillNode();
|
||||
previousFillNode.c_rotation = [Math.PI, 0, 0];
|
||||
previousNode.makeFull(previousFillNode);
|
||||
|
||||
let currentNode: TestNode = new TestNode();
|
||||
let currentFillNode: IFillNode = helper.createFillNode();
|
||||
let currentFillNode: SpatialImageEnt = helper.createFillNode();
|
||||
currentNode.makeFull(currentFillNode);
|
||||
|
||||
traversingState.set([previousNode]);
|
||||
@ -146,7 +146,7 @@ describe("TraversingState.currentCamera.lookat", () => {
|
||||
camera.position.fromArray([10, 10, 0]);
|
||||
camera.lookat.fromArray([15, 15, 0]);
|
||||
|
||||
let state: IState = {
|
||||
let state: IStateBase = {
|
||||
alpha: 1,
|
||||
camera: camera,
|
||||
currentIndex: -1,
|
||||
@ -159,12 +159,12 @@ describe("TraversingState.currentCamera.lookat", () => {
|
||||
let traversingState: TestTraversingState = new TestTraversingState(state);
|
||||
|
||||
let previousNode: TestNode = new TestNode();
|
||||
let preivousFillNode: IFillNode = helper.createFillNode();
|
||||
let preivousFillNode: SpatialImageEnt = helper.createFillNode();
|
||||
preivousFillNode.c_rotation = [Math.PI, 0, 0];
|
||||
previousNode.makeFull(preivousFillNode);
|
||||
|
||||
let currentNode: TestNode = new TestNode();
|
||||
let currentFillNode: IFillNode = helper.createFillNode();
|
||||
let currentFillNode: SpatialImageEnt = helper.createFillNode();
|
||||
currentFillNode.camera_projection_type = "equirectangular";
|
||||
|
||||
currentNode.makeFull(currentFillNode);
|
||||
@ -198,7 +198,7 @@ describe("TraversingState.previousCamera.lookat", () => {
|
||||
camera.position.fromArray([10, 10, 0]);
|
||||
camera.lookat.fromArray([15, 15, 0]);
|
||||
|
||||
let state: IState = {
|
||||
let state: IStateBase = {
|
||||
alpha: 1,
|
||||
camera: camera,
|
||||
currentIndex: -1,
|
||||
@ -211,7 +211,7 @@ describe("TraversingState.previousCamera.lookat", () => {
|
||||
let traversingState: TestTraversingState = new TestTraversingState(state);
|
||||
|
||||
let node: TestNode = new TestNode();
|
||||
let fillNode: IFillNode = helper.createFillNode();
|
||||
let fillNode: SpatialImageEnt = helper.createFillNode();
|
||||
node.makeFull(fillNode);
|
||||
|
||||
traversingState.set([node]);
|
||||
@ -230,7 +230,7 @@ describe("TraversingState.previousCamera.lookat", () => {
|
||||
camera.position.fromArray([10, 10, 0]);
|
||||
camera.lookat.fromArray([15, 15, 0]);
|
||||
|
||||
let state: IState = {
|
||||
let state: IStateBase = {
|
||||
alpha: 1,
|
||||
camera: camera,
|
||||
currentIndex: -1,
|
||||
@ -243,12 +243,12 @@ describe("TraversingState.previousCamera.lookat", () => {
|
||||
let traversingState: TestTraversingState = new TestTraversingState(state);
|
||||
|
||||
let previousNode: TestNode = new TestNode();
|
||||
let previousFillNode: IFillNode = helper.createFillNode();
|
||||
let previousFillNode: SpatialImageEnt = helper.createFillNode();
|
||||
previousFillNode.c_rotation = [Math.PI, 0, 0];
|
||||
previousNode.makeFull(previousFillNode);
|
||||
|
||||
let currentNode: TestNode = new TestNode();
|
||||
let currentFillNode: IFillNode = helper.createFillNode();
|
||||
let currentFillNode: SpatialImageEnt = helper.createFillNode();
|
||||
currentNode.makeFull(currentFillNode);
|
||||
|
||||
traversingState.set([previousNode]);
|
||||
|
||||
@ -3,8 +3,8 @@ import * as THREE from "three";
|
||||
import { NodeHelper } from "../helper/NodeHelper";
|
||||
|
||||
import { Node } from "../../src/graph/Node";
|
||||
import { IFillNode } from "../../src/api/interfaces/IFillNode";
|
||||
import { IState } from "../../src/state/interfaces/IState";
|
||||
import { SpatialImageEnt } from "../../src/api/ents/SpatialImageEnt";
|
||||
import { IStateBase } from "../../src/state/interfaces/IStateBase";
|
||||
import { WaitingState } from "../../src/state/states/WaitingState";
|
||||
import { Camera } from "../../src/geo/Camera";
|
||||
import { TransitionMode } from "../../src/state/TransitionMode";
|
||||
@ -14,7 +14,7 @@ const transformHelper = new TransformHelper();
|
||||
|
||||
describe("WaitingState.ctor", () => {
|
||||
it("should be defined", () => {
|
||||
let state: IState = {
|
||||
let state: IStateBase = {
|
||||
alpha: 1,
|
||||
camera: new Camera(),
|
||||
currentIndex: -1,
|
||||
@ -73,7 +73,7 @@ describe("WaitingState.currentCamera.lookat", () => {
|
||||
camera.position.fromArray([10, 10, 0]);
|
||||
camera.lookat.fromArray([15, 15, 0]);
|
||||
|
||||
let state: IState = {
|
||||
let state: IStateBase = {
|
||||
alpha: 1,
|
||||
camera: camera,
|
||||
currentIndex: -1,
|
||||
@ -86,7 +86,7 @@ describe("WaitingState.currentCamera.lookat", () => {
|
||||
let waitingState: TestWaitingState = new TestWaitingState(state);
|
||||
|
||||
let node: TestNode = new TestNode();
|
||||
let fillNode: IFillNode = helper.createFillNode();
|
||||
let fillNode: SpatialImageEnt = helper.createFillNode();
|
||||
node.makeFull(fillNode);
|
||||
|
||||
waitingState.set([node]);
|
||||
@ -105,7 +105,7 @@ describe("WaitingState.currentCamera.lookat", () => {
|
||||
camera.position.fromArray([10, 10, 0]);
|
||||
camera.lookat.fromArray([15, 15, 0]);
|
||||
|
||||
let state: IState = {
|
||||
let state: IStateBase = {
|
||||
alpha: 1,
|
||||
camera: camera,
|
||||
currentIndex: -1,
|
||||
@ -118,12 +118,12 @@ describe("WaitingState.currentCamera.lookat", () => {
|
||||
let waitingState: TestWaitingState = new TestWaitingState(state);
|
||||
|
||||
let previousNode: TestNode = new TestNode();
|
||||
let previousFillNode: IFillNode = helper.createFillNode();
|
||||
let previousFillNode: SpatialImageEnt = helper.createFillNode();
|
||||
previousFillNode.c_rotation = [Math.PI, 0, 0];
|
||||
previousNode.makeFull(previousFillNode);
|
||||
|
||||
let currentNode: TestNode = new TestNode();
|
||||
let currentFillNode: IFillNode = helper.createFillNode();
|
||||
let currentFillNode: SpatialImageEnt = helper.createFillNode();
|
||||
currentNode.makeFull(currentFillNode);
|
||||
|
||||
waitingState.set([previousNode]);
|
||||
@ -143,7 +143,7 @@ describe("WaitingState.currentCamera.lookat", () => {
|
||||
camera.position.fromArray([10, 10, 0]);
|
||||
camera.lookat.fromArray([15, 15, 0]);
|
||||
|
||||
let state: IState = {
|
||||
let state: IStateBase = {
|
||||
alpha: 1,
|
||||
camera: camera,
|
||||
currentIndex: -1,
|
||||
@ -156,12 +156,12 @@ describe("WaitingState.currentCamera.lookat", () => {
|
||||
let waitingState: TestWaitingState = new TestWaitingState(state);
|
||||
|
||||
let previousNode: TestNode = new TestNode();
|
||||
let previousFillNode: IFillNode = helper.createFillNode();
|
||||
let previousFillNode: SpatialImageEnt = helper.createFillNode();
|
||||
previousFillNode.c_rotation = [Math.PI, 0, 0];
|
||||
previousNode.makeFull(previousFillNode);
|
||||
|
||||
let currentNode: TestNode = new TestNode();
|
||||
let currentFillNode: IFillNode = helper.createFillNode();
|
||||
let currentFillNode: SpatialImageEnt = helper.createFillNode();
|
||||
currentFillNode.camera_projection_type = "equirectangular";
|
||||
|
||||
currentNode.makeFull(currentFillNode);
|
||||
@ -199,7 +199,7 @@ describe("WaitingState.previousCamera.lookat", () => {
|
||||
camera.position.fromArray([10, 10, 0]);
|
||||
camera.lookat.fromArray([15, 15, 0]);
|
||||
|
||||
let state: IState = {
|
||||
let state: IStateBase = {
|
||||
alpha: 1,
|
||||
camera: camera,
|
||||
currentIndex: -1,
|
||||
@ -212,7 +212,7 @@ describe("WaitingState.previousCamera.lookat", () => {
|
||||
let waitingState: TestWaitingState = new TestWaitingState(state);
|
||||
|
||||
let node: TestNode = new TestNode();
|
||||
let fillNode: IFillNode = helper.createFillNode();
|
||||
let fillNode: SpatialImageEnt = helper.createFillNode();
|
||||
node.makeFull(fillNode);
|
||||
|
||||
waitingState.set([node]);
|
||||
@ -231,7 +231,7 @@ describe("WaitingState.previousCamera.lookat", () => {
|
||||
camera.position.fromArray([10, 10, 0]);
|
||||
camera.lookat.fromArray([15, 15, 0]);
|
||||
|
||||
let state: IState = {
|
||||
let state: IStateBase = {
|
||||
alpha: 1,
|
||||
camera: camera,
|
||||
currentIndex: -1,
|
||||
@ -244,11 +244,11 @@ describe("WaitingState.previousCamera.lookat", () => {
|
||||
let waitingState: TestWaitingState = new TestWaitingState(state);
|
||||
|
||||
let previousNode: TestNode = new TestNode();
|
||||
let previousFillNode: IFillNode = helper.createFillNode();
|
||||
let previousFillNode: SpatialImageEnt = helper.createFillNode();
|
||||
previousNode.makeFull(previousFillNode);
|
||||
|
||||
let currentNode: TestNode = new TestNode();
|
||||
let currentFillNode: IFillNode = helper.createFillNode();
|
||||
let currentFillNode: SpatialImageEnt = helper.createFillNode();
|
||||
currentFillNode.c_rotation = [Math.PI, 0, 0];
|
||||
currentNode.makeFull(currentFillNode);
|
||||
|
||||
@ -267,7 +267,7 @@ describe("WaitingState.previousCamera.lookat", () => {
|
||||
it("should correspond to direction of current camera when spherical and previous node set", () => {
|
||||
let camera: Camera = new Camera();
|
||||
|
||||
let state: IState = {
|
||||
let state: IStateBase = {
|
||||
alpha: 1,
|
||||
camera: camera,
|
||||
currentIndex: -1,
|
||||
@ -280,13 +280,13 @@ describe("WaitingState.previousCamera.lookat", () => {
|
||||
let waitingState: TestWaitingState = new TestWaitingState(state);
|
||||
|
||||
let previousNode: TestNode = new TestNode();
|
||||
let previousFillNode: IFillNode = helper.createFillNode();
|
||||
let previousFillNode: SpatialImageEnt = helper.createFillNode();
|
||||
previousFillNode.camera_projection_type = "equirectangular";
|
||||
|
||||
previousNode.makeFull(previousFillNode);
|
||||
|
||||
let currentNode: TestNode = new TestNode();
|
||||
let currentFillNode: IFillNode = helper.createFillNode();
|
||||
let currentFillNode: SpatialImageEnt = helper.createFillNode();
|
||||
currentFillNode.c_rotation = [0.2, 0.3, 0.4];
|
||||
currentNode.makeFull(currentFillNode);
|
||||
|
||||
|
||||
@ -2,7 +2,7 @@ import { empty as observableEmpty } from "rxjs";
|
||||
import * as THREE from "three";
|
||||
import { ImageTileLoader } from "../../src/tiles/ImageTileLoader";
|
||||
import { ImageTileStore } from "../../src/tiles/ImageTileStore";
|
||||
import { IRegionOfInterest } from "../../src/tiles/interfaces/IRegionOfInterest";
|
||||
import { TileRegionOfInterest } from "../../src/tiles/interfaces/TileRegionOfInterest";
|
||||
import { TextureProvider } from "../../src/tiles/TextureProvider";
|
||||
|
||||
import { MockCreator } from "../helper/MockCreator";
|
||||
@ -77,7 +77,7 @@ describe("TextureProvider.setRegionOfInterest", () => {
|
||||
imageTileStore,
|
||||
rendererMock);
|
||||
|
||||
let roi: IRegionOfInterest = {
|
||||
let roi: TileRegionOfInterest = {
|
||||
bbox: { maxX: 0, maxY: 0, minX: 0, minY: 0 },
|
||||
pixelHeight: 1 / height,
|
||||
pixelWidth: 1 / width,
|
||||
@ -129,7 +129,7 @@ describe("TextureProvider.setRegionOfInterest", () => {
|
||||
imageTileStore,
|
||||
rendererMock);
|
||||
|
||||
let roi: IRegionOfInterest = {
|
||||
let roi: TileRegionOfInterest = {
|
||||
bbox: { maxX: 1, maxY: 1, minX: 0, minY: 0 },
|
||||
pixelHeight: 1 / height / 4,
|
||||
pixelWidth: 1 / width / 4,
|
||||
@ -181,7 +181,7 @@ describe("TextureProvider.setRegionOfInterest", () => {
|
||||
imageTileStore,
|
||||
rendererMock);
|
||||
|
||||
let roi: IRegionOfInterest = {
|
||||
let roi: TileRegionOfInterest = {
|
||||
bbox: { maxX: 1, maxY: 1, minX: 0, minY: 0 },
|
||||
pixelHeight: 2 / height,
|
||||
pixelWidth: 2 / width,
|
||||
@ -233,7 +233,7 @@ describe("TextureProvider.setRegionOfInterest", () => {
|
||||
imageTileStore,
|
||||
rendererMock);
|
||||
|
||||
let roi: IRegionOfInterest = {
|
||||
let roi: TileRegionOfInterest = {
|
||||
bbox: { maxX: 1, maxY: 1, minX: 0, minY: 0 },
|
||||
pixelHeight: 2,
|
||||
pixelWidth: 2,
|
||||
@ -285,7 +285,7 @@ describe("TextureProvider.setRegionOfInterest", () => {
|
||||
imageTileStore,
|
||||
rendererMock);
|
||||
|
||||
let roi: IRegionOfInterest = {
|
||||
let roi: TileRegionOfInterest = {
|
||||
bbox: { maxX: 1, maxY: 1, minX: 1, minY: 0 },
|
||||
pixelHeight: 1 / height / 2,
|
||||
pixelWidth: 1 / width / 2,
|
||||
@ -337,7 +337,7 @@ describe("TextureProvider.setRegionOfInterest", () => {
|
||||
imageTileStore,
|
||||
rendererMock);
|
||||
|
||||
let roi: IRegionOfInterest = {
|
||||
let roi: TileRegionOfInterest = {
|
||||
bbox: { maxX: 1, maxY: 1, minX: 0, minY: 1 },
|
||||
pixelHeight: 1 / height / 2,
|
||||
pixelWidth: 1 / width / 2,
|
||||
@ -389,7 +389,7 @@ describe("TextureProvider.setRegionOfInterest", () => {
|
||||
imageTileStore,
|
||||
rendererMock);
|
||||
|
||||
let roi: IRegionOfInterest = {
|
||||
let roi: TileRegionOfInterest = {
|
||||
bbox: { maxX: 1, maxY: 1, minX: 1, minY: 1 },
|
||||
pixelHeight: 1 / height / 2,
|
||||
pixelWidth: 1 / width / 2,
|
||||
@ -441,7 +441,7 @@ describe("TextureProvider.setRegionOfInterest", () => {
|
||||
imageTileStore,
|
||||
rendererMock);
|
||||
|
||||
let roi: IRegionOfInterest = {
|
||||
let roi: TileRegionOfInterest = {
|
||||
bbox: { maxX: 1, maxY: 1, minX: 0, minY: 0 },
|
||||
pixelHeight: 1 / tileSize,
|
||||
pixelWidth: 1 / tileSize,
|
||||
@ -493,7 +493,7 @@ describe("TextureProvider.setRegionOfInterest", () => {
|
||||
imageTileStore,
|
||||
rendererMock);
|
||||
|
||||
let roi: IRegionOfInterest = {
|
||||
let roi: TileRegionOfInterest = {
|
||||
bbox: { maxX: 1, maxY: 1, minX: 0, minY: 0 },
|
||||
pixelHeight: 2 / tileSize,
|
||||
pixelWidth: 2 / tileSize,
|
||||
@ -545,7 +545,7 @@ describe("TextureProvider.setRegionOfInterest", () => {
|
||||
imageTileStore,
|
||||
rendererMock);
|
||||
|
||||
let roi: IRegionOfInterest = {
|
||||
let roi: TileRegionOfInterest = {
|
||||
bbox: { maxX: 0.75, maxY: 0.25, minX: 0.25, minY: 0 },
|
||||
pixelHeight: 1 / width,
|
||||
pixelWidth: 1 / height,
|
||||
@ -606,7 +606,7 @@ describe("TextureProvider.setRegionOfInterest", () => {
|
||||
imageTileStore,
|
||||
rendererMock);
|
||||
|
||||
let roi: IRegionOfInterest = {
|
||||
let roi: TileRegionOfInterest = {
|
||||
bbox: { maxX: 0.25, maxY: 0.75, minX: 0, minY: 0.25 },
|
||||
pixelHeight: 1 / width,
|
||||
pixelWidth: 1 / height,
|
||||
|
||||
@ -1,9 +1,9 @@
|
||||
import { Urls } from "../../src/utils/Urls";
|
||||
import { IUrlOptions } from "../../src/viewer/interfaces/IUrlOptions";
|
||||
import { UrlOptions } from "../../src/viewer/interfaces/UrlOptions";
|
||||
|
||||
describe("Urls.setOptions", () => {
|
||||
it("should set all option properties", () => {
|
||||
const options: IUrlOptions = {
|
||||
const options: UrlOptions = {
|
||||
exploreHost: "test-explore",
|
||||
scheme: "test-scheme",
|
||||
};
|
||||
|
||||
@ -8,12 +8,12 @@ import { NodeHelper } from "../helper/NodeHelper";
|
||||
import { Node } from "../../src/graph/Node";
|
||||
import { APIWrapper } from "../../src/api/APIWrapper";
|
||||
import { FalcorDataProvider } from "../../src/api/FalcorDataProvider";
|
||||
import { ICoreNode } from "../../src/api/interfaces/ICoreNode";
|
||||
import { CoreImageEnt } from "../../src/api/ents/CoreImageEnt";
|
||||
import { Graph } from "../../src/graph/Graph";
|
||||
import { GraphMode } from "../../src/graph/GraphMode";
|
||||
import { GraphService } from "../../src/graph/GraphService";
|
||||
import { ICurrentState } from "../../src/state/interfaces/ICurrentState";
|
||||
import { IFrame } from "../../src/state/interfaces/IFrame";
|
||||
import { IAnimationState } from "../../src/state/interfaces/IAnimationState";
|
||||
import { AnimationFrame } from "../../src/state/interfaces/AnimationFrame";
|
||||
import { State } from "../../src/state/State";
|
||||
import { StateService } from "../../src/state/StateService";
|
||||
import { CacheService } from "../../src/viewer/CacheService";
|
||||
@ -68,20 +68,20 @@ describe("CacheService.started", () => {
|
||||
});
|
||||
|
||||
class TestStateService extends StateService {
|
||||
private _overridingCurrentState$: Subject<IFrame>;
|
||||
private _overridingCurrentState$: Subject<AnimationFrame>;
|
||||
|
||||
constructor(currentState$: Subject<IFrame>) {
|
||||
constructor(currentState$: Subject<AnimationFrame>) {
|
||||
super();
|
||||
|
||||
this._overridingCurrentState$ = currentState$;
|
||||
}
|
||||
|
||||
public get currentState$(): Subject<IFrame> {
|
||||
public get currentState$(): Subject<AnimationFrame> {
|
||||
return this._overridingCurrentState$;
|
||||
}
|
||||
}
|
||||
|
||||
const createState: () => ICurrentState = (): ICurrentState => {
|
||||
const createState: () => IAnimationState = (): IAnimationState => {
|
||||
return {
|
||||
alpha: 0,
|
||||
camera: null,
|
||||
@ -114,7 +114,7 @@ describe("CacheService.start", () => {
|
||||
const graphService: GraphService = new GraphService(graph);
|
||||
graphService.setGraphMode(GraphMode.Spatial);
|
||||
|
||||
const currentStateSubject$: Subject<IFrame> = new Subject<IFrame>();
|
||||
const currentStateSubject$: Subject<AnimationFrame> = new Subject<AnimationFrame>();
|
||||
const stateService: TestStateService = new TestStateService(currentStateSubject$);
|
||||
|
||||
const uncacheSpy: jasmine.Spy = spyOn(graphService, "uncache$");
|
||||
@ -125,15 +125,15 @@ describe("CacheService.start", () => {
|
||||
|
||||
cacheService.start();
|
||||
|
||||
const coreNode1: ICoreNode = helper.createCoreNode();
|
||||
const coreNode1: CoreImageEnt = helper.createCoreNode();
|
||||
coreNode1.key = "node1";
|
||||
const node1: Node = new Node(coreNode1);
|
||||
|
||||
const coreNode2: ICoreNode = helper.createCoreNode();
|
||||
const coreNode2: CoreImageEnt = helper.createCoreNode();
|
||||
coreNode2.key = "node2";
|
||||
const node2: Node = new Node(coreNode2);
|
||||
|
||||
const state: ICurrentState = createState();
|
||||
const state: IAnimationState = createState();
|
||||
state.trajectory = [node1, node2];
|
||||
state.currentNode = node1;
|
||||
|
||||
@ -156,7 +156,7 @@ describe("CacheService.start", () => {
|
||||
const graphService: GraphService = new GraphService(graph);
|
||||
graphService.setGraphMode(GraphMode.Sequence);
|
||||
|
||||
const currentStateSubject$: Subject<IFrame> = new Subject<IFrame>();
|
||||
const currentStateSubject$: Subject<AnimationFrame> = new Subject<AnimationFrame>();
|
||||
const stateService: TestStateService = new TestStateService(currentStateSubject$);
|
||||
|
||||
const uncacheSpy: jasmine.Spy = spyOn(graphService, "uncache$");
|
||||
@ -167,16 +167,16 @@ describe("CacheService.start", () => {
|
||||
|
||||
cacheService.start();
|
||||
|
||||
const coreNode1: ICoreNode = helper.createCoreNode();
|
||||
const coreNode1: CoreImageEnt = helper.createCoreNode();
|
||||
coreNode1.key = "node1";
|
||||
const node1: Node = new Node(coreNode1);
|
||||
|
||||
const coreNode2: ICoreNode = helper.createCoreNode();
|
||||
const coreNode2: CoreImageEnt = helper.createCoreNode();
|
||||
coreNode2.key = "node2";
|
||||
coreNode2.sequence_key = "sequence2";
|
||||
const node2: Node = new Node(coreNode2);
|
||||
|
||||
const state: ICurrentState = createState();
|
||||
const state: IAnimationState = createState();
|
||||
state.trajectory = [node1, node2];
|
||||
state.currentNode = node1;
|
||||
|
||||
@ -202,7 +202,7 @@ describe("CacheService.start", () => {
|
||||
|
||||
graphService.setGraphMode(GraphMode.Spatial);
|
||||
|
||||
const currentStateSubject$: Subject<IFrame> = new Subject<IFrame>();
|
||||
const currentStateSubject$: Subject<AnimationFrame> = new Subject<AnimationFrame>();
|
||||
const stateService: TestStateService = new TestStateService(currentStateSubject$);
|
||||
|
||||
const cacheNodeSpy: jasmine.Spy = spyOn(graphService, "cacheNode$");
|
||||
@ -213,15 +213,15 @@ describe("CacheService.start", () => {
|
||||
|
||||
cacheService.start();
|
||||
|
||||
const coreNode1: ICoreNode = helper.createCoreNode();
|
||||
const coreNode1: CoreImageEnt = helper.createCoreNode();
|
||||
coreNode1.key = "node1";
|
||||
const node1: Node = new Node(coreNode1);
|
||||
|
||||
const coreNode2: ICoreNode = helper.createCoreNode();
|
||||
const coreNode2: CoreImageEnt = helper.createCoreNode();
|
||||
coreNode2.key = "node2";
|
||||
const node2: Node = new Node(coreNode2);
|
||||
|
||||
const state: ICurrentState = createState();
|
||||
const state: IAnimationState = createState();
|
||||
state.trajectory = [node1, node2];
|
||||
state.currentNode = node1;
|
||||
|
||||
@ -245,7 +245,7 @@ describe("CacheService.start", () => {
|
||||
|
||||
graphService.setGraphMode(GraphMode.Sequence);
|
||||
|
||||
const currentStateSubject$: Subject<IFrame> = new Subject<IFrame>();
|
||||
const currentStateSubject$: Subject<AnimationFrame> = new Subject<AnimationFrame>();
|
||||
const stateService: TestStateService = new TestStateService(currentStateSubject$);
|
||||
|
||||
const cacheNodeSpy: jasmine.Spy = spyOn(graphService, "cacheNode$");
|
||||
@ -256,19 +256,19 @@ describe("CacheService.start", () => {
|
||||
|
||||
cacheService.start();
|
||||
|
||||
const coreNode1: ICoreNode = helper.createCoreNode();
|
||||
const coreNode1: CoreImageEnt = helper.createCoreNode();
|
||||
coreNode1.key = "node1";
|
||||
const node1: Node = new Node(coreNode1);
|
||||
|
||||
const coreNode2: ICoreNode = helper.createCoreNode();
|
||||
const coreNode2: CoreImageEnt = helper.createCoreNode();
|
||||
coreNode2.key = "node2";
|
||||
const node2: Node = new Node(coreNode2);
|
||||
|
||||
const coreNode3: ICoreNode = helper.createCoreNode();
|
||||
const coreNode3: CoreImageEnt = helper.createCoreNode();
|
||||
coreNode3.key = "node3";
|
||||
const node3: Node = new Node(coreNode3);
|
||||
|
||||
const state: ICurrentState = createState();
|
||||
const state: IAnimationState = createState();
|
||||
state.trajectory = [node1, node2, node3];
|
||||
state.currentNode = node2;
|
||||
state.currentIndex = 1;
|
||||
@ -295,7 +295,7 @@ describe("CacheService.start", () => {
|
||||
|
||||
spyOn(graphService, "uncache$").and.returnValue(observableOf<void>(null));
|
||||
|
||||
const currentStateSubject$: Subject<IFrame> = new Subject<IFrame>();
|
||||
const currentStateSubject$: Subject<AnimationFrame> = new Subject<AnimationFrame>();
|
||||
const stateService: TestStateService = new TestStateService(currentStateSubject$);
|
||||
|
||||
const cacheNodeSpy: jasmine.Spy = spyOn(graphService, "cacheNode$");
|
||||
@ -304,11 +304,11 @@ describe("CacheService.start", () => {
|
||||
|
||||
cacheService.start();
|
||||
|
||||
const coreNode1: ICoreNode = helper.createCoreNode();
|
||||
const coreNode1: CoreImageEnt = helper.createCoreNode();
|
||||
coreNode1.key = "node1";
|
||||
const node1: Node = new Node(coreNode1);
|
||||
|
||||
const state: ICurrentState = createState();
|
||||
const state: IAnimationState = createState();
|
||||
state.trajectory = [node1];
|
||||
state.currentNode = node1;
|
||||
state.currentIndex = 0;
|
||||
|
||||
@ -10,23 +10,23 @@ import { NodeMockCreator } from "../helper/NodeMockCreator";
|
||||
import { MockCreator } from "../helper/MockCreator";
|
||||
import { ComponentService } from "../../src/component/ComponentService";
|
||||
import { CoverComponent } from "../../src/component/CoverComponent";
|
||||
import { ICoverConfiguration, CoverState } from "../../src/component/interfaces/ICoverConfiguration";
|
||||
import { CoverConfiguration, CoverState } from "../../src/component/interfaces/CoverConfiguration";
|
||||
import { Container } from "../../src/viewer/Container";
|
||||
import { Observer } from "../../src/viewer/Observer";
|
||||
import { EventEmitter } from "../../src/utils/EventEmitter";
|
||||
import { ComponentController } from "../../src/viewer/ComponentController";
|
||||
import { Viewer } from "../../src/viewer/Viewer";
|
||||
import { Component } from "../../src/component/Component";
|
||||
import { IComponentConfiguration } from "../../src/component/interfaces/IComponentConfiguration";
|
||||
import { ComponentConfiguration } from "../../src/component/interfaces/ComponentConfiguration";
|
||||
|
||||
class ComponentMock extends Component<IComponentConfiguration> {
|
||||
class ComponentMock extends Component<ComponentConfiguration> {
|
||||
protected static _cn: string = "mock";
|
||||
public static get componentName(): string {
|
||||
return this._cn;
|
||||
};
|
||||
protected _activate(): void { /*noop*/ }
|
||||
protected _deactivate(): void { /*noop*/ }
|
||||
protected _getDefaultConfiguration(): IComponentConfiguration {
|
||||
protected _getDefaultConfiguration(): ComponentConfiguration {
|
||||
return {};
|
||||
}
|
||||
}
|
||||
@ -74,7 +74,7 @@ ComponentService.register(ZC);
|
||||
class CoverComponentMock extends CoverComponent {
|
||||
protected _activate(): void { /*noop*/ }
|
||||
protected _deactivate(): void { /*noop*/ }
|
||||
protected _getDefaultConfiguration(): IComponentConfiguration {
|
||||
protected _getDefaultConfiguration(): ComponentConfiguration {
|
||||
return {};
|
||||
}
|
||||
}
|
||||
@ -203,7 +203,7 @@ describe("ComponentController.navigable", () => {
|
||||
skip(1), // skip initial default configuration
|
||||
take(1))
|
||||
.subscribe(
|
||||
(c: ICoverConfiguration): void => {
|
||||
(c: CoverConfiguration): void => {
|
||||
expect(c.key).toBe(key);
|
||||
});
|
||||
|
||||
@ -253,11 +253,11 @@ describe("ComponentController.navigable", () => {
|
||||
let configurationCount: number = 0;
|
||||
coverComponent.configuration$.pipe(
|
||||
first(
|
||||
(c: ICoverConfiguration): boolean => {
|
||||
(c: CoverConfiguration): boolean => {
|
||||
return c.state === CoverState.Hidden;
|
||||
}))
|
||||
.subscribe(
|
||||
(c: ICoverConfiguration): void => {
|
||||
(c: CoverConfiguration): void => {
|
||||
configurationCount++;
|
||||
expect(c.key).toBe(key);
|
||||
});
|
||||
|
||||
@ -12,7 +12,7 @@ import { ContainerMockCreator } from "../helper/ContainerMockCreator";
|
||||
import { MockCreator } from "../helper/MockCreator";
|
||||
import { NavigatorMockCreator } from "../helper/NavigatorMockCreator";
|
||||
import { RendererMock } from "../helper/WebGLRenderer";
|
||||
import { ILatLonAlt } from "../../src/geo/interfaces/ILatLonAlt";
|
||||
import { LatLonAltEnt } from "../../src/api/ents/LatLonAltEnt";
|
||||
import { RenderCamera } from "../../src/render/RenderCamera";
|
||||
import { RenderMode } from "../../src/render/RenderMode";
|
||||
|
||||
@ -99,7 +99,7 @@ describe("CustomRenderer.add", () => {
|
||||
spyOn(rendererMock, "getContext").and.returnValue(contextMock);
|
||||
(<Subject<WebGLRenderer>>container.glRenderer.webGLRenderer$)
|
||||
.next(rendererMock);
|
||||
(<Subject<ILatLonAlt>>navigator.stateService.reference$)
|
||||
(<Subject<LatLonAltEnt>>navigator.stateService.reference$)
|
||||
.next(referenceMock);
|
||||
});
|
||||
|
||||
@ -134,7 +134,7 @@ describe("CustomRenderer.add", () => {
|
||||
spyOn(rendererMock, "getContext").and.returnValue(contextMock);
|
||||
(<Subject<WebGLRenderer>>container.glRenderer.webGLRenderer$)
|
||||
.next(rendererMock);
|
||||
(<Subject<ILatLonAlt>>navigator.stateService.reference$)
|
||||
(<Subject<LatLonAltEnt>>navigator.stateService.reference$)
|
||||
.next(referenceMock);
|
||||
|
||||
expect(invokeCount).toBe(0);
|
||||
@ -172,9 +172,9 @@ describe("CustomRenderer.add", () => {
|
||||
(<Subject<WebGLRenderer>>container.glRenderer.webGLRenderer$)
|
||||
.next(rendererMock);
|
||||
|
||||
(<Subject<ILatLonAlt>>navigator.stateService.reference$)
|
||||
(<Subject<LatLonAltEnt>>navigator.stateService.reference$)
|
||||
.next(referenceMock);
|
||||
(<Subject<ILatLonAlt>>navigator.stateService.reference$)
|
||||
(<Subject<LatLonAltEnt>>navigator.stateService.reference$)
|
||||
.next(referenceMock);
|
||||
|
||||
expect(invokeCount).toBe(1);
|
||||
@ -215,7 +215,7 @@ describe("CustomRenderer.add", () => {
|
||||
spyOn(rendererMock, "getContext").and.returnValue(contextMock);
|
||||
(<Subject<WebGLRenderer>>container.glRenderer.webGLRenderer$)
|
||||
.next(rendererMock);
|
||||
(<Subject<ILatLonAlt>>navigator.stateService.reference$)
|
||||
(<Subject<LatLonAltEnt>>navigator.stateService.reference$)
|
||||
.next(referenceMock);
|
||||
|
||||
const renderCameraMock = new RenderCamera(1, 1, RenderMode.Fill);
|
||||
|
||||
@ -17,19 +17,19 @@ import { Navigator } from "../../src/viewer/Navigator";
|
||||
import { Node } from "../../src/graph/Node";
|
||||
import { APIWrapper } from "../../src/api/APIWrapper";
|
||||
import { FalcorDataProvider } from "../../src/api/FalcorDataProvider";
|
||||
import { ICoreNode } from "../../src/api/interfaces/ICoreNode";
|
||||
import { CoreImageEnt } from "../../src/api/ents/CoreImageEnt";
|
||||
import { Graph } from "../../src/graph/Graph";
|
||||
import { GraphService } from "../../src/graph/GraphService";
|
||||
import { ICurrentState } from "../../src/state/interfaces/ICurrentState";
|
||||
import { IFrame } from "../../src/state/interfaces/IFrame";
|
||||
import { IAnimationState } from "../../src/state/interfaces/IAnimationState";
|
||||
import { AnimationFrame } from "../../src/state/interfaces/AnimationFrame";
|
||||
import { State } from "../../src/state/State";
|
||||
import { StateService } from "../../src/state/StateService";
|
||||
import { CacheService } from "../../src/viewer/CacheService";
|
||||
import { LoadingService } from "../../src/viewer/LoadingService";
|
||||
import { AbortMapillaryError } from "../../src/error/AbortMapillaryError";
|
||||
import { EdgeDirection } from "../../src/graph/edge/EdgeDirection";
|
||||
import { NavigationDirection } from "../../src/graph/edge/NavigationDirection";
|
||||
|
||||
const createState: () => ICurrentState = (): ICurrentState => {
|
||||
const createState: () => IAnimationState = (): IAnimationState => {
|
||||
return {
|
||||
alpha: 0,
|
||||
camera: null,
|
||||
@ -406,15 +406,15 @@ describe("Navigator.movedToKey$", () => {
|
||||
});
|
||||
|
||||
class TestStateService extends StateService {
|
||||
private _overridingCurrentState$: Subject<IFrame>;
|
||||
private _overridingCurrentState$: Subject<AnimationFrame>;
|
||||
|
||||
constructor(currentState$: Subject<IFrame>) {
|
||||
constructor(currentState$: Subject<AnimationFrame>) {
|
||||
super();
|
||||
|
||||
this._overridingCurrentState$ = currentState$;
|
||||
}
|
||||
|
||||
public get currentState$(): Subject<IFrame> {
|
||||
public get currentState$(): Subject<AnimationFrame> {
|
||||
return this._overridingCurrentState$;
|
||||
}
|
||||
}
|
||||
@ -572,7 +572,7 @@ describe("Navigator.setFilter$", () => {
|
||||
const graphService: GraphService = new GraphService(graph);
|
||||
const loadingService: LoadingService = new LoadingService();
|
||||
|
||||
const currentStateSubject$: Subject<IFrame> = new Subject<IFrame>();
|
||||
const currentStateSubject$: Subject<AnimationFrame> = new Subject<AnimationFrame>();
|
||||
const stateService: TestStateService = new TestStateService(currentStateSubject$);
|
||||
const cacheService: CacheService = new CacheService(graphService, stateService);
|
||||
|
||||
@ -613,7 +613,7 @@ describe("Navigator.setFilter$", () => {
|
||||
|
||||
navigator.moveToKey$("key").subscribe(() => { /*noop*/ });
|
||||
|
||||
const coreNode0: ICoreNode = helper.createCoreNode();
|
||||
const coreNode0: CoreImageEnt = helper.createCoreNode();
|
||||
coreNode0.key = "node0";
|
||||
const node0: Node = new Node(coreNode0);
|
||||
|
||||
@ -635,15 +635,15 @@ describe("Navigator.setFilter$", () => {
|
||||
done();
|
||||
});
|
||||
|
||||
const coreNode1: ICoreNode = helper.createCoreNode();
|
||||
const coreNode1: CoreImageEnt = helper.createCoreNode();
|
||||
coreNode1.key = "node1";
|
||||
const node1: Node = new Node(coreNode1);
|
||||
|
||||
const coreNode2: ICoreNode = helper.createCoreNode();
|
||||
const coreNode2: CoreImageEnt = helper.createCoreNode();
|
||||
coreNode2.key = "node2";
|
||||
const node2: Node = new Node(coreNode2);
|
||||
|
||||
const state: ICurrentState = createState();
|
||||
const state: IAnimationState = createState();
|
||||
state.trajectory = [node1, node2];
|
||||
|
||||
currentStateSubject$.next({ fps: 60, id: 0, state: state });
|
||||
@ -716,7 +716,7 @@ describe("Navigator.setToken$", () => {
|
||||
const graphService: GraphService = new GraphService(graph);
|
||||
const loadingService: LoadingService = new LoadingService();
|
||||
|
||||
const currentStateSubject$: Subject<IFrame> = new Subject<IFrame>();
|
||||
const currentStateSubject$: Subject<AnimationFrame> = new Subject<AnimationFrame>();
|
||||
const stateService: TestStateService = new TestStateService(currentStateSubject$);
|
||||
const cacheService: CacheService = new CacheService(graphService, stateService);
|
||||
|
||||
@ -758,7 +758,7 @@ describe("Navigator.setToken$", () => {
|
||||
|
||||
navigator.moveToKey$("key").subscribe(() => { /*noop*/ });
|
||||
|
||||
const coreNode0: ICoreNode = helper.createCoreNode();
|
||||
const coreNode0: CoreImageEnt = helper.createCoreNode();
|
||||
coreNode0.key = "node0";
|
||||
const node0: Node = new Node(coreNode0);
|
||||
|
||||
@ -786,15 +786,15 @@ describe("Navigator.setToken$", () => {
|
||||
done();
|
||||
});
|
||||
|
||||
const coreNode1: ICoreNode = helper.createCoreNode();
|
||||
const coreNode1: CoreImageEnt = helper.createCoreNode();
|
||||
coreNode1.key = "node1";
|
||||
const node1: Node = new Node(coreNode1);
|
||||
|
||||
const coreNode2: ICoreNode = helper.createCoreNode();
|
||||
const coreNode2: CoreImageEnt = helper.createCoreNode();
|
||||
coreNode2.key = "node2";
|
||||
const node2: Node = new Node(coreNode2);
|
||||
|
||||
const state: ICurrentState = createState();
|
||||
const state: IAnimationState = createState();
|
||||
state.trajectory = [node1, node2];
|
||||
|
||||
currentStateSubject$.next({ fps: 60, id: 0, state: state });
|
||||
@ -861,7 +861,7 @@ describe("Navigator.setToken$", () => {
|
||||
stateService,
|
||||
cacheService);
|
||||
|
||||
navigator.moveDir$(EdgeDirection.Next)
|
||||
navigator.moveDir$(NavigationDirection.Next)
|
||||
.subscribe(
|
||||
undefined,
|
||||
(e: Error): void => {
|
||||
|
||||
@ -3,9 +3,9 @@ import { skip } from "rxjs/operators";
|
||||
|
||||
import { Node } from "../../src/graph/Node";
|
||||
import { Transform } from "../../src/geo/Transform";
|
||||
import { ILatLonAlt } from "../../src/geo/interfaces/ILatLonAlt";
|
||||
import { LatLonAltEnt } from "../../src/api/ents/LatLonAltEnt";
|
||||
import { GraphService } from "../../src/graph/GraphService";
|
||||
import { IFrame } from "../../src/state/interfaces/IFrame";
|
||||
import { AnimationFrame } from "../../src/state/interfaces/AnimationFrame";
|
||||
import { StateService } from "../../src/state/StateService";
|
||||
import { PanService } from "../../src/viewer/PanService";
|
||||
import { FrameHelper } from "../helper/FrameHelper";
|
||||
@ -40,9 +40,9 @@ describe("PanService.panNodes$", () => {
|
||||
done();
|
||||
});
|
||||
|
||||
(<Subject<IFrame>>stateService.currentState$).next(new FrameHelper().createFrame());
|
||||
(<Subject<AnimationFrame>>stateService.currentState$).next(new FrameHelper().createFrame());
|
||||
(<Subject<Node>>stateService.currentNode$).next(new NodeHelper().createNode());
|
||||
(<Subject<ILatLonAlt>>stateService.reference$).next({ alt: 0, lat: 0, lon: 0 });
|
||||
(<Subject<LatLonAltEnt>>stateService.reference$).next({ alt: 0, lat: 0, lon: 0 });
|
||||
});
|
||||
|
||||
it("should emit", (done: Function) => {
|
||||
@ -63,9 +63,9 @@ describe("PanService.panNodes$", () => {
|
||||
done();
|
||||
});
|
||||
|
||||
(<Subject<IFrame>>stateService.currentState$).next(new FrameHelper().createFrame());
|
||||
(<Subject<AnimationFrame>>stateService.currentState$).next(new FrameHelper().createFrame());
|
||||
(<Subject<Node>>stateService.currentNode$).next(new NodeHelper().createNode());
|
||||
(<Subject<ILatLonAlt>>stateService.reference$).next({ alt: 0, lat: 0, lon: 0 });
|
||||
(<Subject<LatLonAltEnt>>stateService.reference$).next({ alt: 0, lat: 0, lon: 0 });
|
||||
cacheBoundingBoxSubject.next([]);
|
||||
});
|
||||
|
||||
@ -87,9 +87,9 @@ describe("PanService.panNodes$", () => {
|
||||
done();
|
||||
});
|
||||
|
||||
(<Subject<IFrame>>stateService.currentState$).next(new FrameHelper().createFrame());
|
||||
(<Subject<AnimationFrame>>stateService.currentState$).next(new FrameHelper().createFrame());
|
||||
(<Subject<Node>>stateService.currentNode$).next(new NodeHelper().createUnmergedNode());
|
||||
(<Subject<ILatLonAlt>>stateService.reference$).next({ alt: 0, lat: 0, lon: 0 });
|
||||
(<Subject<LatLonAltEnt>>stateService.reference$).next({ alt: 0, lat: 0, lon: 0 });
|
||||
cacheBoundingBoxSubject.next([]);
|
||||
});
|
||||
|
||||
@ -112,9 +112,9 @@ describe("PanService.panNodes$", () => {
|
||||
emitCount++;
|
||||
});
|
||||
|
||||
(<Subject<IFrame>>stateService.currentState$).next(new FrameHelper().createFrame());
|
||||
(<Subject<AnimationFrame>>stateService.currentState$).next(new FrameHelper().createFrame());
|
||||
(<Subject<Node>>stateService.currentNode$).next(new NodeHelper().createNode());
|
||||
(<Subject<ILatLonAlt>>stateService.reference$).next({ alt: 0, lat: 0, lon: 0 });
|
||||
(<Subject<LatLonAltEnt>>stateService.reference$).next({ alt: 0, lat: 0, lon: 0 });
|
||||
erroredCacheBoundingBoxSubject.error(new Error());
|
||||
|
||||
expect(emitCount).toBe(1);
|
||||
@ -123,7 +123,7 @@ describe("PanService.panNodes$", () => {
|
||||
(<jasmine.Spy>graphService.cacheBoundingBox$).and.returnValue(cacheBoundingBoxSubject);
|
||||
|
||||
(<Subject<Node>>stateService.currentNode$).next(new NodeHelper().createNode());
|
||||
(<Subject<ILatLonAlt>>stateService.reference$).next({ alt: 0, lat: 0, lon: 0 });
|
||||
(<Subject<LatLonAltEnt>>stateService.reference$).next({ alt: 0, lat: 0, lon: 0 });
|
||||
|
||||
cacheBoundingBoxSubject.next([]);
|
||||
|
||||
@ -150,9 +150,9 @@ describe("PanService.panNodes$", () => {
|
||||
done();
|
||||
});
|
||||
|
||||
(<Subject<IFrame>>stateService.currentState$).next(new FrameHelper().createFrame());
|
||||
(<Subject<AnimationFrame>>stateService.currentState$).next(new FrameHelper().createFrame());
|
||||
(<Subject<Node>>stateService.currentNode$).next(new NodeHelper().createNode());
|
||||
(<Subject<ILatLonAlt>>stateService.reference$).next({ alt: 0, lat: 0, lon: 0 });
|
||||
(<Subject<LatLonAltEnt>>stateService.reference$).next({ alt: 0, lat: 0, lon: 0 });
|
||||
cacheBoundingBoxSubject.next([]);
|
||||
});
|
||||
});
|
||||
|
||||
@ -15,19 +15,19 @@ import { FrameHelper } from "../helper/FrameHelper";
|
||||
import { Node } from "../../src/graph/Node";
|
||||
import { APIWrapper } from "../../src/api/APIWrapper";
|
||||
import { FalcorDataProvider } from "../../src/api/FalcorDataProvider";
|
||||
import { IFullNode } from "../../src/api/interfaces/IFullNode";
|
||||
import { ImageEnt } from "../../src/api/ents/ImageEnt";
|
||||
import { Graph } from "../../src/graph/Graph";
|
||||
import { GraphMode } from "../../src/graph/GraphMode";
|
||||
import { GraphService } from "../../src/graph/GraphService";
|
||||
import { IEdgeStatus } from "../../src/graph/interfaces/IEdgeStatus";
|
||||
import { NavigationEdgeStatus } from "../../src/graph/interfaces/NavigationEdgeStatus";
|
||||
import { NodeCache } from "../../src/graph/NodeCache";
|
||||
import { Sequence } from "../../src/graph/Sequence";
|
||||
import { ICurrentState } from "../../src/state/interfaces/ICurrentState";
|
||||
import { IFrame } from "../../src/state/interfaces/IFrame";
|
||||
import { IAnimationState } from "../../src/state/interfaces/IAnimationState";
|
||||
import { AnimationFrame } from "../../src/state/interfaces/AnimationFrame";
|
||||
import { State } from "../../src/state/State";
|
||||
import { StateService } from "../../src/state/StateService";
|
||||
import { PlayService } from "../../src/viewer/PlayService";
|
||||
import { EdgeDirection } from "../../src/graph/edge/EdgeDirection";
|
||||
import { NavigationDirection } from "../../src/graph/edge/NavigationDirection";
|
||||
|
||||
describe("PlayService.ctor", () => {
|
||||
it("should be defined when constructed", () => {
|
||||
@ -53,8 +53,8 @@ describe("PlayService.ctor", () => {
|
||||
playService.speed$).pipe(
|
||||
first())
|
||||
.subscribe(
|
||||
([d, p, s]: [EdgeDirection, boolean, number]): void => {
|
||||
expect(d).toBe(EdgeDirection.Next);
|
||||
([d, p, s]: [NavigationDirection, boolean, number]): void => {
|
||||
expect(d).toBe(NavigationDirection.Next);
|
||||
expect(p).toBe(false);
|
||||
expect(s).toBe(0.5);
|
||||
|
||||
@ -199,7 +199,7 @@ describe("PlayService.speed$", () => {
|
||||
});
|
||||
});
|
||||
|
||||
let createState: () => ICurrentState = (): ICurrentState => {
|
||||
let createState: () => IAnimationState = (): IAnimationState => {
|
||||
return {
|
||||
alpha: 0,
|
||||
camera: null,
|
||||
@ -260,13 +260,13 @@ describe("PlayService.play", () => {
|
||||
spyOn(graphService, "cacheSequenceNodes$").and.returnValue(new Subject<Sequence>());
|
||||
spyOn(graphService, "cacheBoundingBox$").and.returnValue(observableOf([]));
|
||||
|
||||
playService.setDirection(EdgeDirection.Next);
|
||||
playService.setDirection(NavigationDirection.Next);
|
||||
|
||||
playService.play();
|
||||
|
||||
const frame: IFrame = new FrameHelper().createFrame();
|
||||
const frame: AnimationFrame = new FrameHelper().createFrame();
|
||||
frame.state.currentNode.initializeCache(new NodeCache(undefined));
|
||||
(<Subject<IFrame>>stateService.currentState$).next(frame);
|
||||
(<Subject<AnimationFrame>>stateService.currentState$).next(frame);
|
||||
|
||||
frame.state.currentNode.cacheSequenceEdges([]);
|
||||
|
||||
@ -281,7 +281,7 @@ describe("PlayService.play", () => {
|
||||
spyOn(graphService, "cacheSequenceNodes$").and.returnValue(new Subject<Sequence>());
|
||||
spyOn(graphService, "cacheBoundingBox$").and.returnValue(observableOf([]));
|
||||
|
||||
playService.setDirection(EdgeDirection.Next);
|
||||
playService.setDirection(NavigationDirection.Next);
|
||||
|
||||
playService.play();
|
||||
|
||||
@ -300,17 +300,17 @@ describe("PlayService.play", () => {
|
||||
spyOn(graphService, "cacheSequenceNodes$").and.returnValue(new Subject<Sequence>());
|
||||
spyOn(graphService, "cacheBoundingBox$").and.returnValue(new Subject<Node[]>());
|
||||
|
||||
playService.setDirection(EdgeDirection.Next);
|
||||
playService.setDirection(NavigationDirection.Next);
|
||||
|
||||
playService.play();
|
||||
|
||||
const frame: IFrame = new FrameHelper().createFrame();
|
||||
const frame: AnimationFrame = new FrameHelper().createFrame();
|
||||
|
||||
const node: Node = frame.state.currentNode;
|
||||
const sequenceEdgesSubject: Subject<IEdgeStatus> = new Subject<IEdgeStatus>();
|
||||
const sequenceEdgesSubject: Subject<NavigationEdgeStatus> = new Subject<NavigationEdgeStatus>();
|
||||
new MockCreator().mockProperty(node, "sequenceEdges$", sequenceEdgesSubject);
|
||||
|
||||
(<Subject<IFrame>>stateService.currentState$).next(frame);
|
||||
(<Subject<AnimationFrame>>stateService.currentState$).next(frame);
|
||||
|
||||
sequenceEdgesSubject.error(new Error());
|
||||
|
||||
@ -324,7 +324,7 @@ describe("PlayService.play", () => {
|
||||
spyOn(graphService, "cacheSequenceNodes$").and.returnValue(new Subject<Sequence>());
|
||||
spyOn(graphService, "cacheBoundingBox$").and.returnValue(observableOf([]));
|
||||
|
||||
playService.setDirection(EdgeDirection.Next);
|
||||
playService.setDirection(NavigationDirection.Next);
|
||||
|
||||
let firstEmit: boolean = true;
|
||||
playService.playing$.pipe(
|
||||
@ -345,9 +345,9 @@ describe("PlayService.play", () => {
|
||||
|
||||
playService.play();
|
||||
|
||||
const frame: IFrame = new FrameHelper().createFrame();
|
||||
const frame: AnimationFrame = new FrameHelper().createFrame();
|
||||
frame.state.currentNode.initializeCache(new NodeCache(undefined));
|
||||
(<Subject<IFrame>>stateService.currentState$).next(frame);
|
||||
(<Subject<AnimationFrame>>stateService.currentState$).next(frame);
|
||||
|
||||
frame.state.currentNode.cacheSequenceEdges([]);
|
||||
});
|
||||
@ -360,17 +360,17 @@ describe("PlayService.play", () => {
|
||||
spyOn(graphService, "cacheSequenceNodes$").and.returnValue(new Subject<Sequence>());
|
||||
spyOn(graphService, "cacheBoundingBox$").and.returnValue(observableOf([]));
|
||||
|
||||
playService.setDirection(EdgeDirection.Next);
|
||||
playService.setDirection(NavigationDirection.Next);
|
||||
|
||||
playService.play();
|
||||
|
||||
const frame: IFrame = new FrameHelper().createFrame();
|
||||
const frame: AnimationFrame = new FrameHelper().createFrame();
|
||||
const node: Node = frame.state.currentNode;
|
||||
node.initializeCache(new NodeCache(undefined));
|
||||
const sequenceEdgesSubject: Subject<IEdgeStatus> = new Subject<IEdgeStatus>();
|
||||
const sequenceEdgesSubject: Subject<NavigationEdgeStatus> = new Subject<NavigationEdgeStatus>();
|
||||
new MockCreator().mockProperty(node, "sequenceEdges$", sequenceEdgesSubject);
|
||||
|
||||
(<Subject<IFrame>>stateService.currentState$).next(frame);
|
||||
(<Subject<AnimationFrame>>stateService.currentState$).next(frame);
|
||||
|
||||
sequenceEdgesSubject.next({ cached: false, edges: [] });
|
||||
|
||||
@ -390,16 +390,16 @@ describe("PlayService.play", () => {
|
||||
const cacheBoundingBoxSubject: Subject<Node[]> = new Subject<Node[]>();
|
||||
spyOn(graphService, "cacheBoundingBox$").and.returnValue(cacheBoundingBoxSubject);
|
||||
|
||||
playService.setDirection(EdgeDirection.Next);
|
||||
playService.setDirection(NavigationDirection.Next);
|
||||
|
||||
playService.play();
|
||||
|
||||
const frame: IFrame = new FrameHelper().createFrame();
|
||||
const frame: AnimationFrame = new FrameHelper().createFrame();
|
||||
const node: Node = frame.state.currentNode;
|
||||
node.initializeCache(new NodeCache(undefined));
|
||||
const sequenceEdgesSubject: Subject<IEdgeStatus> = new Subject<IEdgeStatus>();
|
||||
const sequenceEdgesSubject: Subject<NavigationEdgeStatus> = new Subject<NavigationEdgeStatus>();
|
||||
|
||||
const prevFullNode: IFullNode = new NodeHelper().createFullNode();
|
||||
const prevFullNode: ImageEnt = new NodeHelper().createFullNode();
|
||||
prevFullNode.captured_at = -1;
|
||||
const prevNode: Node = new Node(prevFullNode);
|
||||
prevNode.makeFull(prevFullNode);
|
||||
@ -408,7 +408,7 @@ describe("PlayService.play", () => {
|
||||
|
||||
new MockCreator().mockProperty(node, "sequenceEdges$", sequenceEdgesSubject);
|
||||
|
||||
(<Subject<IFrame>>stateService.currentState$).next(frame);
|
||||
(<Subject<AnimationFrame>>stateService.currentState$).next(frame);
|
||||
|
||||
sequenceEdgesSubject.next({ cached: false, edges: [] });
|
||||
|
||||
@ -438,24 +438,24 @@ describe("PlayService.play", () => {
|
||||
const appendNodesSpy: jasmine.Spy = <jasmine.Spy>stateService.appendNodes;
|
||||
appendNodesSpy.and.stub();
|
||||
|
||||
playService.setDirection(EdgeDirection.Next);
|
||||
playService.setDirection(NavigationDirection.Next);
|
||||
|
||||
playService.play();
|
||||
|
||||
const cameraUuid: string = "camera_uuid";
|
||||
const sequenceKey1: string = "sequence1";
|
||||
|
||||
const currentFullNode: IFullNode = new NodeHelper().createFullNode();
|
||||
const currentFullNode: ImageEnt = new NodeHelper().createFullNode();
|
||||
currentFullNode.captured_at = 0;
|
||||
currentFullNode.captured_with_camera_uuid = cameraUuid;
|
||||
currentFullNode.key = "currKey";
|
||||
currentFullNode.sequence_key = sequenceKey1;
|
||||
const currentNode: Node = new Node(currentFullNode);
|
||||
currentNode.makeFull(currentFullNode);
|
||||
const sequenceEdgesSubject: Subject<IEdgeStatus> = new Subject<IEdgeStatus>();
|
||||
const sequenceEdgesSubject: Subject<NavigationEdgeStatus> = new Subject<NavigationEdgeStatus>();
|
||||
new MockCreator().mockProperty(currentNode, "sequenceEdges$", sequenceEdgesSubject);
|
||||
|
||||
const prevFullNode: IFullNode = new NodeHelper().createFullNode();
|
||||
const prevFullNode: ImageEnt = new NodeHelper().createFullNode();
|
||||
prevFullNode.captured_at = -1;
|
||||
prevFullNode.captured_with_camera_uuid = cameraUuid;
|
||||
prevFullNode.key = "prevKey";
|
||||
@ -463,20 +463,20 @@ describe("PlayService.play", () => {
|
||||
const prevNode: Node = new Node(prevFullNode);
|
||||
prevNode.makeFull(prevFullNode);
|
||||
|
||||
const state: ICurrentState = createState();
|
||||
const state: IAnimationState = createState();
|
||||
state.trajectory = [prevNode, currentNode];
|
||||
state.lastNode = currentNode;
|
||||
state.currentNode = currentNode;
|
||||
state.nodesAhead = 0;
|
||||
state.currentIndex = 1;
|
||||
|
||||
(<Subject<IFrame>>stateService.currentState$).next({ fps: 60, id: 0, state: state });
|
||||
(<Subject<AnimationFrame>>stateService.currentState$).next({ fps: 60, id: 0, state: state });
|
||||
|
||||
sequenceEdgesSubject.next({ cached: true, edges: [] });
|
||||
|
||||
expect(stopSpy.calls.count()).toBe(0);
|
||||
|
||||
const bridgeFullNode: IFullNode = new NodeHelper().createFullNode();
|
||||
const bridgeFullNode: ImageEnt = new NodeHelper().createFullNode();
|
||||
bridgeFullNode.captured_at = 1;
|
||||
bridgeFullNode.captured_with_camera_uuid = cameraUuid;
|
||||
bridgeFullNode.key = "bridgeKey";
|
||||
@ -511,24 +511,24 @@ describe("PlayService.play", () => {
|
||||
const appendNodesSpy: jasmine.Spy = <jasmine.Spy>stateService.appendNodes;
|
||||
appendNodesSpy.and.stub();
|
||||
|
||||
playService.setDirection(EdgeDirection.Next);
|
||||
playService.setDirection(NavigationDirection.Next);
|
||||
|
||||
playService.play();
|
||||
|
||||
const cameraUuid: string = "camera_uuid";
|
||||
const sequenceKey1: string = "sequence1";
|
||||
|
||||
const currentFullNode: IFullNode = new NodeHelper().createFullNode();
|
||||
const currentFullNode: ImageEnt = new NodeHelper().createFullNode();
|
||||
currentFullNode.captured_at = -1;
|
||||
currentFullNode.captured_with_camera_uuid = cameraUuid;
|
||||
currentFullNode.key = "currKey";
|
||||
currentFullNode.sequence_key = sequenceKey1;
|
||||
const currentNode: Node = new Node(currentFullNode);
|
||||
currentNode.makeFull(currentFullNode);
|
||||
const sequenceEdgesSubject: Subject<IEdgeStatus> = new Subject<IEdgeStatus>();
|
||||
const sequenceEdgesSubject: Subject<NavigationEdgeStatus> = new Subject<NavigationEdgeStatus>();
|
||||
new MockCreator().mockProperty(currentNode, "sequenceEdges$", sequenceEdgesSubject);
|
||||
|
||||
const prevFullNode: IFullNode = new NodeHelper().createFullNode();
|
||||
const prevFullNode: ImageEnt = new NodeHelper().createFullNode();
|
||||
prevFullNode.captured_at = 0;
|
||||
prevFullNode.captured_with_camera_uuid = cameraUuid;
|
||||
prevFullNode.key = "prevKey";
|
||||
@ -536,14 +536,14 @@ describe("PlayService.play", () => {
|
||||
const prevNode: Node = new Node(prevFullNode);
|
||||
prevNode.makeFull(prevFullNode);
|
||||
|
||||
const state: ICurrentState = createState();
|
||||
const state: IAnimationState = createState();
|
||||
state.trajectory = [prevNode, currentNode];
|
||||
state.lastNode = currentNode;
|
||||
state.currentNode = currentNode;
|
||||
state.nodesAhead = 0;
|
||||
state.currentIndex = 1;
|
||||
|
||||
(<Subject<IFrame>>stateService.currentState$).next({ fps: 60, id: 0, state: state });
|
||||
(<Subject<AnimationFrame>>stateService.currentState$).next({ fps: 60, id: 0, state: state });
|
||||
|
||||
sequenceEdgesSubject.next({ cached: true, edges: [] });
|
||||
|
||||
@ -552,7 +552,7 @@ describe("PlayService.play", () => {
|
||||
const cacheBoudndingBoxNodex: Node[] = [1, -3, -5]
|
||||
.map(
|
||||
(capturedAt: number): Node => {
|
||||
const bridgeFullNode: IFullNode = new NodeHelper().createFullNode();
|
||||
const bridgeFullNode: ImageEnt = new NodeHelper().createFullNode();
|
||||
bridgeFullNode.captured_at = capturedAt;
|
||||
bridgeFullNode.captured_with_camera_uuid = cameraUuid;
|
||||
bridgeFullNode.key = "bridgeKey";
|
||||
@ -563,7 +563,7 @@ describe("PlayService.play", () => {
|
||||
return bridgeNode;
|
||||
});
|
||||
|
||||
const sameSequenceFullNode: IFullNode = new NodeHelper().createFullNode();
|
||||
const sameSequenceFullNode: ImageEnt = new NodeHelper().createFullNode();
|
||||
sameSequenceFullNode.captured_at = -2;
|
||||
sameSequenceFullNode.captured_with_camera_uuid = cameraUuid;
|
||||
sameSequenceFullNode.key = "bridgeKey";
|
||||
@ -601,31 +601,31 @@ describe("PlayService.play", () => {
|
||||
const appendNodesSpy: jasmine.Spy = <jasmine.Spy>stateService.appendNodes;
|
||||
appendNodesSpy.and.stub();
|
||||
|
||||
playService.setDirection(EdgeDirection.Next);
|
||||
playService.setDirection(NavigationDirection.Next);
|
||||
|
||||
playService.play();
|
||||
|
||||
const cameraUuid: string = "camera_uuid";
|
||||
const sequenceKey1: string = "sequence1";
|
||||
|
||||
const currentFullNode: IFullNode = new NodeHelper().createFullNode();
|
||||
const currentFullNode: ImageEnt = new NodeHelper().createFullNode();
|
||||
currentFullNode.captured_at = 0;
|
||||
currentFullNode.captured_with_camera_uuid = cameraUuid;
|
||||
currentFullNode.key = "currKey";
|
||||
currentFullNode.sequence_key = sequenceKey1;
|
||||
const currentNode: Node = new Node(currentFullNode);
|
||||
currentNode.makeFull(currentFullNode);
|
||||
const sequenceEdgesSubject: Subject<IEdgeStatus> = new Subject<IEdgeStatus>();
|
||||
const sequenceEdgesSubject: Subject<NavigationEdgeStatus> = new Subject<NavigationEdgeStatus>();
|
||||
new MockCreator().mockProperty(currentNode, "sequenceEdges$", sequenceEdgesSubject);
|
||||
|
||||
const state: ICurrentState = createState();
|
||||
const state: IAnimationState = createState();
|
||||
state.trajectory = [currentNode];
|
||||
state.lastNode = currentNode;
|
||||
state.currentNode = currentNode;
|
||||
state.nodesAhead = 0;
|
||||
state.currentIndex = 0;
|
||||
|
||||
(<Subject<IFrame>>stateService.currentState$).next({ fps: 60, id: 0, state: state });
|
||||
(<Subject<AnimationFrame>>stateService.currentState$).next({ fps: 60, id: 0, state: state });
|
||||
|
||||
sequenceEdgesSubject.next({ cached: true, edges: [] });
|
||||
|
||||
@ -648,28 +648,28 @@ describe("PlayService.play", () => {
|
||||
spyOn(graphService, "cacheSequenceNodes$").and.returnValue(new Subject<Sequence>());
|
||||
spyOn(graphService, "cacheBoundingBox$").and.returnValue(new Subject<Node[]>());
|
||||
|
||||
playService.setDirection(EdgeDirection.Next);
|
||||
playService.setDirection(NavigationDirection.Next);
|
||||
|
||||
playService.play();
|
||||
|
||||
const frame: IFrame = new FrameHelper().createFrame();
|
||||
const frame: AnimationFrame = new FrameHelper().createFrame();
|
||||
const node: Node = frame.state.currentNode;
|
||||
node.initializeCache(new NodeCache(undefined));
|
||||
const sequenceEdgesSubject: Subject<IEdgeStatus> = new Subject<IEdgeStatus>();
|
||||
const sequenceEdgesSubject: Subject<NavigationEdgeStatus> = new Subject<NavigationEdgeStatus>();
|
||||
new MockCreator().mockProperty(node, "sequenceEdges$", sequenceEdgesSubject);
|
||||
|
||||
(<Subject<IFrame>>stateService.currentState$).next(frame);
|
||||
(<Subject<AnimationFrame>>stateService.currentState$).next(frame);
|
||||
|
||||
const fullToNode: IFullNode = nodeHelper.createFullNode();
|
||||
const fullToNode: ImageEnt = nodeHelper.createFullNode();
|
||||
fullToNode.key = "toKey";
|
||||
const toNode: Node = new Node(fullToNode);
|
||||
|
||||
sequenceEdgesSubject.next({
|
||||
cached: true,
|
||||
edges: [{
|
||||
data: { direction: EdgeDirection.Next, worldMotionAzimuth: 0 },
|
||||
from: node.key,
|
||||
to: toNode.key,
|
||||
data: { direction: NavigationDirection.Next, worldMotionAzimuth: 0 },
|
||||
source: node.key,
|
||||
target: toNode.key,
|
||||
}],
|
||||
});
|
||||
|
||||
@ -700,28 +700,28 @@ describe("PlayService.play", () => {
|
||||
spyOn(graphService, "cacheSequenceNodes$").and.returnValue(new Subject<Sequence>());
|
||||
spyOn(graphService, "cacheBoundingBox$").and.returnValue(new Subject<Node[]>());
|
||||
|
||||
playService.setDirection(EdgeDirection.Next);
|
||||
playService.setDirection(NavigationDirection.Next);
|
||||
|
||||
playService.play();
|
||||
|
||||
const frame: IFrame = new FrameHelper().createFrame();
|
||||
const frame: AnimationFrame = new FrameHelper().createFrame();
|
||||
const node: Node = frame.state.currentNode;
|
||||
node.initializeCache(new NodeCache(undefined));
|
||||
const sequenceEdgesSubject: Subject<IEdgeStatus> = new Subject<IEdgeStatus>();
|
||||
const sequenceEdgesSubject: Subject<NavigationEdgeStatus> = new Subject<NavigationEdgeStatus>();
|
||||
new MockCreator().mockProperty(node, "sequenceEdges$", sequenceEdgesSubject);
|
||||
|
||||
(<Subject<IFrame>>stateService.currentState$).next(frame);
|
||||
(<Subject<AnimationFrame>>stateService.currentState$).next(frame);
|
||||
|
||||
const fullToNode: IFullNode = nodeHelper.createFullNode();
|
||||
const fullToNode: ImageEnt = nodeHelper.createFullNode();
|
||||
fullToNode.key = "toKey";
|
||||
const toNode: Node = new Node(fullToNode);
|
||||
|
||||
sequenceEdgesSubject.next({
|
||||
cached: true,
|
||||
edges: [{
|
||||
data: { direction: EdgeDirection.Next, worldMotionAzimuth: 0 },
|
||||
from: node.key,
|
||||
to: toNode.key,
|
||||
data: { direction: NavigationDirection.Next, worldMotionAzimuth: 0 },
|
||||
source: node.key,
|
||||
target: toNode.key,
|
||||
}],
|
||||
});
|
||||
|
||||
@ -737,7 +737,7 @@ describe("PlayService.play", () => {
|
||||
|
||||
it("should cache sequence when in spatial graph mode", () => {
|
||||
const playService: PlayService = new PlayService(graphService, stateService);
|
||||
playService.setDirection(EdgeDirection.Next);
|
||||
playService.setDirection(NavigationDirection.Next);
|
||||
// Set speed to zero so that graph mode is set to spatial when calling play
|
||||
playService.setSpeed(0);
|
||||
|
||||
@ -749,7 +749,7 @@ describe("PlayService.play", () => {
|
||||
playService.play();
|
||||
|
||||
const currentNode: Node = nodeHelper.createNode();
|
||||
new MockCreator().mockProperty(currentNode, "sequenceEdges$", new Subject<IEdgeStatus>());
|
||||
new MockCreator().mockProperty(currentNode, "sequenceEdges$", new Subject<NavigationEdgeStatus>());
|
||||
|
||||
const currentNodeSubject: Subject<Node> = <Subject<Node>>stateService.currentNode$;
|
||||
currentNodeSubject.next(currentNode);
|
||||
@ -764,7 +764,7 @@ describe("PlayService.play", () => {
|
||||
|
||||
it("should cache sequence nodes when in sequence graph mode", () => {
|
||||
const playService: PlayService = new PlayService(graphService, stateService);
|
||||
playService.setDirection(EdgeDirection.Next);
|
||||
playService.setDirection(NavigationDirection.Next);
|
||||
// Set speed to one so that graph mode is set to sequence when calling play
|
||||
playService.setSpeed(1);
|
||||
|
||||
@ -776,7 +776,7 @@ describe("PlayService.play", () => {
|
||||
playService.play();
|
||||
|
||||
const currentNode: Node = nodeHelper.createNode();
|
||||
new MockCreator().mockProperty(currentNode, "sequenceEdges$", new Subject<IEdgeStatus>());
|
||||
new MockCreator().mockProperty(currentNode, "sequenceEdges$", new Subject<NavigationEdgeStatus>());
|
||||
|
||||
const currentNodeSubject: Subject<Node> = <Subject<Node>>stateService.currentNode$;
|
||||
currentNodeSubject.next(currentNode);
|
||||
@ -793,7 +793,7 @@ describe("PlayService.play", () => {
|
||||
graphService.setGraphMode(GraphMode.Spatial);
|
||||
|
||||
const playService: PlayService = new PlayService(graphService, stateService);
|
||||
playService.setDirection(EdgeDirection.Next);
|
||||
playService.setDirection(NavigationDirection.Next);
|
||||
|
||||
const cacheSequenceSubject: Subject<Sequence> = new Subject<Sequence>();
|
||||
spyOn(graphService, "cacheSequence$").and.returnValue(cacheSequenceSubject);
|
||||
@ -802,11 +802,11 @@ describe("PlayService.play", () => {
|
||||
|
||||
const sequenceKey: string = "sequenceKey";
|
||||
|
||||
const currentFullNode: IFullNode = new NodeHelper().createFullNode();
|
||||
const currentFullNode: ImageEnt = new NodeHelper().createFullNode();
|
||||
currentFullNode.sequence_key = sequenceKey;
|
||||
currentFullNode.key = "node0";
|
||||
const currentNode: Node = new Node(currentFullNode);
|
||||
new MockCreator().mockProperty(currentNode, "sequenceEdges$", new Subject<IEdgeStatus>());
|
||||
new MockCreator().mockProperty(currentNode, "sequenceEdges$", new Subject<NavigationEdgeStatus>());
|
||||
|
||||
const prevNodeKey: string = "node1";
|
||||
|
||||
@ -820,13 +820,13 @@ describe("PlayService.play", () => {
|
||||
const cacheNodeSubject: Subject<Node> = new Subject<Node>();
|
||||
cacheNodeSpy.and.returnValue(cacheNodeSubject);
|
||||
|
||||
const state: ICurrentState = createState();
|
||||
const state: IAnimationState = createState();
|
||||
state.trajectory = [currentNode];
|
||||
state.lastNode = currentNode;
|
||||
state.currentNode = currentNode;
|
||||
state.nodesAhead = 0;
|
||||
|
||||
(<Subject<IFrame>>stateService.currentState$).next({ fps: 60, id: 0, state: state });
|
||||
(<Subject<AnimationFrame>>stateService.currentState$).next({ fps: 60, id: 0, state: state });
|
||||
|
||||
expect(cacheNodeSpy.calls.count()).toBe(0);
|
||||
|
||||
@ -837,7 +837,7 @@ describe("PlayService.play", () => {
|
||||
graphService.setGraphMode(GraphMode.Spatial);
|
||||
|
||||
const playService: PlayService = new PlayService(graphService, stateService);
|
||||
playService.setDirection(EdgeDirection.Next);
|
||||
playService.setDirection(NavigationDirection.Next);
|
||||
|
||||
const cacheSequenceSubject: Subject<Sequence> = new Subject<Sequence>();
|
||||
spyOn(graphService, "cacheSequence$").and.returnValue(cacheSequenceSubject);
|
||||
@ -846,11 +846,11 @@ describe("PlayService.play", () => {
|
||||
|
||||
const sequenceKey: string = "sequenceKey";
|
||||
|
||||
const currentFullNode: IFullNode = new NodeHelper().createFullNode();
|
||||
const currentFullNode: ImageEnt = new NodeHelper().createFullNode();
|
||||
currentFullNode.sequence_key = sequenceKey;
|
||||
currentFullNode.key = "node0";
|
||||
const currentNode: Node = new Node(currentFullNode);
|
||||
new MockCreator().mockProperty(currentNode, "sequenceEdges$", new Subject<IEdgeStatus>());
|
||||
new MockCreator().mockProperty(currentNode, "sequenceEdges$", new Subject<NavigationEdgeStatus>());
|
||||
|
||||
const nextNodeKey: string = "node1";
|
||||
|
||||
@ -864,13 +864,13 @@ describe("PlayService.play", () => {
|
||||
const cacheNodeSubject: Subject<Node> = new Subject<Node>();
|
||||
cacheNodeSpy.and.returnValue(cacheNodeSubject);
|
||||
|
||||
const state: ICurrentState = createState();
|
||||
const state: IAnimationState = createState();
|
||||
state.trajectory = [currentNode];
|
||||
state.lastNode = currentNode;
|
||||
state.currentNode = currentNode;
|
||||
state.nodesAhead = 0;
|
||||
|
||||
const currentStateSubject$: Subject<IFrame> = <Subject<IFrame>>stateService.currentState$;
|
||||
const currentStateSubject$: Subject<AnimationFrame> = <Subject<AnimationFrame>>stateService.currentState$;
|
||||
currentStateSubject$.next({ fps: 60, id: 0, state: state });
|
||||
|
||||
cacheNodeSubject.next(new NodeHelper().createNode());
|
||||
@ -885,7 +885,7 @@ describe("PlayService.play", () => {
|
||||
graphService.setGraphMode(GraphMode.Spatial);
|
||||
|
||||
const playService: PlayService = new PlayService(graphService, stateService);
|
||||
playService.setDirection(EdgeDirection.Prev);
|
||||
playService.setDirection(NavigationDirection.Prev);
|
||||
|
||||
const cacheSequenceSubject: Subject<Sequence> = new Subject<Sequence>();
|
||||
spyOn(graphService, "cacheSequence$").and.returnValue(cacheSequenceSubject);
|
||||
@ -894,11 +894,11 @@ describe("PlayService.play", () => {
|
||||
|
||||
const sequenceKey: string = "sequenceKey";
|
||||
|
||||
const currentFullNode: IFullNode = new NodeHelper().createFullNode();
|
||||
const currentFullNode: ImageEnt = new NodeHelper().createFullNode();
|
||||
currentFullNode.sequence_key = sequenceKey;
|
||||
currentFullNode.key = "node0";
|
||||
const currentNode: Node = new Node(currentFullNode);
|
||||
new MockCreator().mockProperty(currentNode, "sequenceEdges$", new Subject<IEdgeStatus>());
|
||||
new MockCreator().mockProperty(currentNode, "sequenceEdges$", new Subject<NavigationEdgeStatus>());
|
||||
|
||||
const prevNodeKey: string = "node1";
|
||||
|
||||
@ -912,13 +912,13 @@ describe("PlayService.play", () => {
|
||||
const cacheNodeSubject: Subject<Node> = new Subject<Node>();
|
||||
cacheNodeSpy.and.returnValue(cacheNodeSubject);
|
||||
|
||||
const state: ICurrentState = createState();
|
||||
const state: IAnimationState = createState();
|
||||
state.trajectory = [currentNode];
|
||||
state.lastNode = currentNode;
|
||||
state.currentNode = currentNode;
|
||||
state.nodesAhead = 0;
|
||||
|
||||
const currentStateSubject$: Subject<IFrame> = <Subject<IFrame>>stateService.currentState$;
|
||||
const currentStateSubject$: Subject<AnimationFrame> = <Subject<AnimationFrame>>stateService.currentState$;
|
||||
currentStateSubject$.next({ fps: 60, id: 0, state: state });
|
||||
|
||||
cacheNodeSubject.next(new NodeHelper().createNode());
|
||||
@ -937,7 +937,7 @@ describe("PlayService.play", () => {
|
||||
graphService.setGraphMode(GraphMode.Spatial);
|
||||
|
||||
const playService: PlayService = new PlayService(graphService, stateService);
|
||||
playService.setDirection(EdgeDirection.Next);
|
||||
playService.setDirection(NavigationDirection.Next);
|
||||
|
||||
const cacheSequenceSubject: Subject<Sequence> = new Subject<Sequence>();
|
||||
spyOn(graphService, "cacheSequence$").and.returnValue(cacheSequenceSubject);
|
||||
@ -946,12 +946,12 @@ describe("PlayService.play", () => {
|
||||
|
||||
const sequenceKey: string = "sequenceKey";
|
||||
|
||||
const currentFullNode: IFullNode = new NodeHelper().createFullNode();
|
||||
const currentFullNode: ImageEnt = new NodeHelper().createFullNode();
|
||||
currentFullNode.sequence_key = sequenceKey;
|
||||
currentFullNode.key = "node0";
|
||||
const currentNode: Node = new Node(currentFullNode);
|
||||
currentNode.makeFull(currentFullNode);
|
||||
new MockCreator().mockProperty(currentNode, "sequenceEdges$", new Subject<IEdgeStatus>());
|
||||
new MockCreator().mockProperty(currentNode, "sequenceEdges$", new Subject<NavigationEdgeStatus>());
|
||||
|
||||
const nextNodeKey: string = "node1";
|
||||
|
||||
@ -965,16 +965,16 @@ describe("PlayService.play", () => {
|
||||
const cacheNodeSubject: Subject<Node> = new Subject<Node>();
|
||||
cacheNodeSpy.and.returnValue(cacheNodeSubject);
|
||||
|
||||
const state: ICurrentState = createState();
|
||||
const state: IAnimationState = createState();
|
||||
state.trajectory = [currentNode];
|
||||
state.lastNode = currentNode;
|
||||
state.currentNode = currentNode;
|
||||
state.nodesAhead = 0;
|
||||
|
||||
const currentStateSubject$: Subject<IFrame> = <Subject<IFrame>>stateService.currentState$;
|
||||
const currentStateSubject$: Subject<AnimationFrame> = <Subject<AnimationFrame>>stateService.currentState$;
|
||||
currentStateSubject$.next({ fps: 60, id: 0, state: state });
|
||||
|
||||
const nextFullNode: IFullNode = new NodeHelper().createFullNode();
|
||||
const nextFullNode: ImageEnt = new NodeHelper().createFullNode();
|
||||
nextFullNode.sequence_key = sequenceKey;
|
||||
nextFullNode.key = nextNodeKey;
|
||||
const nextNode: Node = new Node(nextFullNode);
|
||||
@ -995,7 +995,7 @@ describe("PlayService.play", () => {
|
||||
graphService.setGraphMode(GraphMode.Spatial);
|
||||
|
||||
const playService: PlayService = new PlayService(graphService, stateService);
|
||||
playService.setDirection(EdgeDirection.Next);
|
||||
playService.setDirection(NavigationDirection.Next);
|
||||
|
||||
const cacheSequenceSubject: Subject<Sequence> = new Subject<Sequence>();
|
||||
spyOn(graphService, "cacheSequence$").and.returnValue(cacheSequenceSubject);
|
||||
@ -1004,20 +1004,20 @@ describe("PlayService.play", () => {
|
||||
|
||||
const sequenceKey: string = "sequenceKey";
|
||||
|
||||
const currentFullNode: IFullNode = new NodeHelper().createFullNode();
|
||||
const currentFullNode: ImageEnt = new NodeHelper().createFullNode();
|
||||
currentFullNode.sequence_key = sequenceKey;
|
||||
currentFullNode.key = "node0";
|
||||
const currentNode: Node = new Node(currentFullNode);
|
||||
currentNode.makeFull(currentFullNode);
|
||||
new MockCreator().mockProperty(currentNode, "sequenceEdges$", new Subject<IEdgeStatus>());
|
||||
new MockCreator().mockProperty(currentNode, "sequenceEdges$", new Subject<NavigationEdgeStatus>());
|
||||
|
||||
const nextNodeKey: string = "node1";
|
||||
const nextFullNode: IFullNode = new NodeHelper().createFullNode();
|
||||
const nextFullNode: ImageEnt = new NodeHelper().createFullNode();
|
||||
nextFullNode.sequence_key = sequenceKey;
|
||||
nextFullNode.key = nextNodeKey;
|
||||
const nextNode: Node = new Node(nextFullNode);
|
||||
nextNode.makeFull(nextFullNode);
|
||||
new MockCreator().mockProperty(nextNode, "sequenceEdges$", new Subject<IEdgeStatus>());
|
||||
new MockCreator().mockProperty(nextNode, "sequenceEdges$", new Subject<NavigationEdgeStatus>());
|
||||
|
||||
const currentNodeSubject: Subject<Node> = <Subject<Node>>stateService.currentNode$;
|
||||
currentNodeSubject.next(currentNode);
|
||||
@ -1029,13 +1029,13 @@ describe("PlayService.play", () => {
|
||||
const cacheNodeSubject: Subject<Node> = new Subject<Node>();
|
||||
cacheNodeSpy.and.returnValue(cacheNodeSubject);
|
||||
|
||||
const state: ICurrentState = createState();
|
||||
const state: IAnimationState = createState();
|
||||
state.trajectory = [currentNode, nextNode];
|
||||
state.lastNode = nextNode;
|
||||
state.currentNode = currentNode;
|
||||
state.nodesAhead = 0;
|
||||
|
||||
const currentStateSubject$: Subject<IFrame> = <Subject<IFrame>>stateService.currentState$;
|
||||
const currentStateSubject$: Subject<AnimationFrame> = <Subject<AnimationFrame>>stateService.currentState$;
|
||||
currentStateSubject$.next({ fps: 60, id: 0, state: state });
|
||||
|
||||
expect(cacheNodeSpy.calls.count()).toBe(0);
|
||||
@ -1047,7 +1047,7 @@ describe("PlayService.play", () => {
|
||||
graphService.setGraphMode(GraphMode.Spatial);
|
||||
|
||||
const playService: PlayService = new PlayService(graphService, stateService);
|
||||
playService.setDirection(EdgeDirection.Next);
|
||||
playService.setDirection(NavigationDirection.Next);
|
||||
// Zero speed means max ten nodes ahead
|
||||
playService.setSpeed(0);
|
||||
|
||||
@ -1058,24 +1058,24 @@ describe("PlayService.play", () => {
|
||||
|
||||
const sequenceKey: string = "sequenceKey";
|
||||
|
||||
const currentFullNode: IFullNode = new NodeHelper().createFullNode();
|
||||
const currentFullNode: ImageEnt = new NodeHelper().createFullNode();
|
||||
currentFullNode.sequence_key = sequenceKey;
|
||||
currentFullNode.key = "currentNodeKey";
|
||||
const currentNode: Node = new Node(currentFullNode);
|
||||
currentNode.makeFull(currentFullNode);
|
||||
new MockCreator().mockProperty(currentNode, "sequenceEdges$", new Subject<IEdgeStatus>());
|
||||
new MockCreator().mockProperty(currentNode, "sequenceEdges$", new Subject<NavigationEdgeStatus>());
|
||||
|
||||
const sequence: Sequence = new Sequence({ key: sequenceKey, keys: [currentNode.key] });
|
||||
const sequenceNodes: Node[] = [];
|
||||
|
||||
for (let i: number = 0; i < 20; i++) {
|
||||
const sequenceNodeKey: string = `node${i}`;
|
||||
const sequenceFullNode: IFullNode = new NodeHelper().createFullNode();
|
||||
const sequenceFullNode: ImageEnt = new NodeHelper().createFullNode();
|
||||
sequenceFullNode.sequence_key = sequenceKey;
|
||||
sequenceFullNode.key = sequenceNodeKey;
|
||||
const sequenceNode: Node = new Node(sequenceFullNode);
|
||||
sequenceNode.makeFull(sequenceFullNode);
|
||||
new MockCreator().mockProperty(sequenceNode, "sequenceEdges$", new Subject<IEdgeStatus>());
|
||||
new MockCreator().mockProperty(sequenceNode, "sequenceEdges$", new Subject<NavigationEdgeStatus>());
|
||||
|
||||
sequence.keys.push(sequenceNode.key);
|
||||
sequenceNodes.push(sequenceNode);
|
||||
@ -1088,7 +1088,7 @@ describe("PlayService.play", () => {
|
||||
|
||||
const cacheNodeSpy: jasmine.Spy = spyOn(graphService, "cacheNode$").and.callFake(
|
||||
(key: string): Observable<Node> => {
|
||||
const fullNode: IFullNode = new NodeHelper().createFullNode();
|
||||
const fullNode: ImageEnt = new NodeHelper().createFullNode();
|
||||
fullNode.sequence_key = sequenceKey;
|
||||
fullNode.key = key;
|
||||
const node: Node = new Node(fullNode);
|
||||
@ -1097,7 +1097,7 @@ describe("PlayService.play", () => {
|
||||
return observableOf(node);
|
||||
});
|
||||
|
||||
const state: ICurrentState = createState();
|
||||
const state: IAnimationState = createState();
|
||||
state.trajectory = [currentNode];
|
||||
state.lastNode = currentNode;
|
||||
state.currentNode = currentNode;
|
||||
@ -1105,7 +1105,7 @@ describe("PlayService.play", () => {
|
||||
state.nodesAhead = 0;
|
||||
|
||||
// Cache ten nodes immediately
|
||||
const currentStateSubject$: Subject<IFrame> = <Subject<IFrame>>stateService.currentState$;
|
||||
const currentStateSubject$: Subject<AnimationFrame> = <Subject<AnimationFrame>>stateService.currentState$;
|
||||
currentStateSubject$.next({ fps: 60, id: 0, state: state });
|
||||
|
||||
let cachedCount: number = 10;
|
||||
|
||||
@ -4,16 +4,21 @@
|
||||
* @name Mapillary
|
||||
*/
|
||||
|
||||
// Bootstrap spatial index.
|
||||
//
|
||||
// Bootstrap
|
||||
// This is a workaround to make the CommonJS unit testing
|
||||
// work with Jest. Once Jest/Node supports ES6 modules
|
||||
// fully this should be removed.
|
||||
// fully this should be removed. GeoRBush and UnitBezier
|
||||
// are registered here only to avoid loading them during
|
||||
// unit tests.
|
||||
|
||||
// Bootstrap GeoRBush
|
||||
import { Graph } from "./graph/Graph";
|
||||
import { MarkerSet } from "./component/marker/MarkerSet";
|
||||
import { GeoRBush } from "./geo/GeoRBush";
|
||||
Graph.register(GeoRBush);
|
||||
MarkerSet.register(GeoRBush);
|
||||
|
||||
// Bootstrap UnitBezier
|
||||
import UnitBezier from "@mapbox/unitbezier";
|
||||
import { TraversingState } from "./state/states/TraversingState";
|
||||
TraversingState.register(UnitBezier);
|
||||
@ -62,26 +67,30 @@ ComponentService.register(ZoomComponent);
|
||||
export { isFallbackSupported, isSupported } from "./utils/Support";
|
||||
|
||||
// Viewer types
|
||||
export { RenderMode } from "./render/RenderMode";
|
||||
export { TransitionMode } from "./state/TransitionMode";
|
||||
export { Alignment } from "./viewer/Alignment";
|
||||
export { ImageSize } from "./viewer/ImageSize";
|
||||
export { Viewer } from "./viewer/Viewer";
|
||||
export { IComponentOptions } from "./viewer/interfaces/IComponentOptions";
|
||||
export { ComponentSize } from "./component/utils/ComponentSize";
|
||||
export { ICustomRenderer } from "./viewer/interfaces/ICustomRenderer";
|
||||
export { IPointOfView } from "./viewer/interfaces/IPointOfView";
|
||||
export { IUrlOptions } from "./viewer/interfaces/IUrlOptions";
|
||||
export { IViewerEvent } from "./viewer/interfaces/IViewerEvent";
|
||||
export { IViewerMouseEvent } from "./viewer/interfaces/IViewerMouseEvent";
|
||||
export { IViewerOptions } from "./viewer/interfaces/IViewerOptions";
|
||||
export { ImageSize } from "./viewer/ImageSize";
|
||||
export { PointOfView } from "./viewer/interfaces/PointOfView";
|
||||
export { RenderMode } from "./render/RenderMode";
|
||||
export { TransitionMode } from "./state/TransitionMode";
|
||||
export { Viewer } from "./viewer/Viewer";
|
||||
|
||||
// Viewer events
|
||||
export { ViewerEvent } from "./viewer/interfaces/ViewerEvent";
|
||||
export { ViewerMouseEvent } from "./viewer/interfaces/ViewerMouseEvent";
|
||||
|
||||
// Viewer configuration
|
||||
export { ComponentOptions } from "./viewer/interfaces/ComponentOptions";
|
||||
export { UrlOptions } from "./viewer/interfaces/UrlOptions";
|
||||
export { ViewerOptions } from "./viewer/interfaces/ViewerOptions";
|
||||
|
||||
// Graph types
|
||||
export { Node } from "./graph/Node";
|
||||
export { EdgeDirection } from "./graph/edge/EdgeDirection";
|
||||
export { IEdge } from "./graph/edge/interfaces/IEdge";
|
||||
export { IEdgeData } from "./graph/edge/interfaces/IEdgeData";
|
||||
export { IEdgeStatus } from "./graph/interfaces/IEdgeStatus";
|
||||
export { NavigationDirection } from "./graph/edge/NavigationDirection";
|
||||
export { NavigationEdge } from "./graph/edge/interfaces/NavigationEdge";
|
||||
export { NavigationEdgeData } from "./graph/edge/interfaces/NavigationEdgeData";
|
||||
export { NavigationEdgeStatus } from "./graph/interfaces/NavigationEdgeStatus";
|
||||
export {
|
||||
FilterExpression,
|
||||
FilterOperation,
|
||||
|
||||
@ -4,10 +4,10 @@ import {
|
||||
} from "rxjs";
|
||||
import { DataProviderBase } from "./DataProviderBase";
|
||||
|
||||
import { ICoreNode } from "./interfaces/ICoreNode";
|
||||
import { IFillNode } from "./interfaces/IFillNode";
|
||||
import { IFullNode } from "./interfaces/IFullNode";
|
||||
import { ISequence } from "./interfaces/ISequence";
|
||||
import { CoreImageEnt } from "./ents/CoreImageEnt";
|
||||
import { SpatialImageEnt } from "./ents/SpatialImageEnt";
|
||||
import { ImageEnt } from "./ents/ImageEnt";
|
||||
import { SequenceEnt } from "./ents/SequenceEnt";
|
||||
|
||||
/**
|
||||
* @class API
|
||||
@ -21,19 +21,19 @@ export class APIWrapper {
|
||||
return this._data;
|
||||
}
|
||||
|
||||
public imageByKeyFill$(keys: string[]): Observable<{ [key: string]: IFillNode }> {
|
||||
public imageByKeyFill$(keys: string[]): Observable<{ [key: string]: SpatialImageEnt }> {
|
||||
return this._wrapPromise$(this._data.getFillImages(keys));
|
||||
}
|
||||
|
||||
public imageByKeyFull$(keys: string[]): Observable<{ [key: string]: IFullNode }> {
|
||||
public imageByKeyFull$(keys: string[]): Observable<{ [key: string]: ImageEnt }> {
|
||||
return this._wrapPromise$(this._data.getFullImages(keys));
|
||||
}
|
||||
|
||||
public imagesByH$(h: string): Observable<{ [h: string]: { [index: string]: ICoreNode } }> {
|
||||
public imagesByH$(h: string): Observable<{ [h: string]: { [index: string]: CoreImageEnt } }> {
|
||||
return this._wrapPromise$(this._data.getCoreImages(h));
|
||||
}
|
||||
|
||||
public sequenceByKey$(sequenceKeys: string[]): Observable<{ [sequenceKey: string]: ISequence }> {
|
||||
public sequenceByKey$(sequenceKeys: string[]): Observable<{ [sequenceKey: string]: SequenceEnt }> {
|
||||
return this._wrapPromise$(this._data.getSequences(sequenceKeys));
|
||||
}
|
||||
|
||||
|
||||
@ -1,12 +1,12 @@
|
||||
import { MapillaryError } from "../error/MapillaryError";
|
||||
import { EventEmitter } from "../utils/EventEmitter";
|
||||
import { IClusterReconstruction } from "./interfaces/IClusterReconstruction";
|
||||
import { ICoreNode } from "./interfaces/ICoreNode";
|
||||
import { IFillNode } from "./interfaces/IFillNode";
|
||||
import { IFullNode } from "./interfaces/IFullNode";
|
||||
import { IMesh } from "./interfaces/IMesh";
|
||||
import { ISequence } from "./interfaces/ISequence";
|
||||
import { ReconstructionEnt } from "./ents/ReconstructionEnt";
|
||||
import { CoreImageEnt } from "./ents/CoreImageEnt";
|
||||
import { SpatialImageEnt } from "./ents/SpatialImageEnt";
|
||||
import { ImageEnt } from "./ents/ImageEnt";
|
||||
import { MeshEnt } from "./ents/MeshEnt";
|
||||
import { GeometryProviderBase } from "./GeometryProviderBase";
|
||||
import { SequenceEnt } from "./ents/SequenceEnt";
|
||||
|
||||
/**
|
||||
* @class DataProviderBase
|
||||
@ -59,7 +59,7 @@ export abstract class DataProviderBase extends EventEmitter {
|
||||
* @throws {Error} Rejects the promise on errors.
|
||||
*/
|
||||
public getCoreImages(cellId: string):
|
||||
Promise<{ [cellId: string]: { [imageKey: string]: ICoreNode } }> {
|
||||
Promise<{ [cellId: string]: { [imageKey: string]: CoreImageEnt } }> {
|
||||
return Promise.reject(new MapillaryError("Not implemented"));
|
||||
}
|
||||
|
||||
@ -70,12 +70,12 @@ export abstract class DataProviderBase extends EventEmitter {
|
||||
* to retrieve.
|
||||
* @param {Promise} [abort] - Optional promise for aborting
|
||||
* the request through rejection.
|
||||
* @returns {Promise<IClusterReconstruction>} Promise to the
|
||||
* @returns {Promise<ReconstructionEnt>} Promise to the
|
||||
* cluster reconstruction.
|
||||
* @throws {Error} Rejects the promise on errors.
|
||||
*/
|
||||
public getClusterReconstruction(url: string, abort?: Promise<void>):
|
||||
Promise<IClusterReconstruction> {
|
||||
Promise<ReconstructionEnt> {
|
||||
return Promise.reject(new MapillaryError("Not implemented"));
|
||||
}
|
||||
|
||||
@ -89,7 +89,7 @@ export abstract class DataProviderBase extends EventEmitter {
|
||||
* @throws {Error} Rejects the promise on errors.
|
||||
*/
|
||||
public getFillImages(imageKeys: string[]):
|
||||
Promise<{ [imageKey: string]: IFillNode }> {
|
||||
Promise<{ [imageKey: string]: SpatialImageEnt }> {
|
||||
return Promise.reject(new MapillaryError("Not implemented"));
|
||||
}
|
||||
|
||||
@ -103,7 +103,7 @@ export abstract class DataProviderBase extends EventEmitter {
|
||||
* @throws {Error} Rejects the promise on errors.
|
||||
*/
|
||||
public getFullImages(imageKeys: string[]):
|
||||
Promise<{ [imageKey: string]: IFullNode }> {
|
||||
Promise<{ [imageKey: string]: ImageEnt }> {
|
||||
return Promise.reject(new MapillaryError("Not implemented"));
|
||||
}
|
||||
|
||||
@ -156,10 +156,10 @@ export abstract class DataProviderBase extends EventEmitter {
|
||||
* @param {string} url - URL for mesh to retrieve.
|
||||
* @param {Promise} [abort] - Optional promise for aborting
|
||||
* the request through rejection.
|
||||
* @returns {Promise<IMesh>} Promise to the mesh.
|
||||
* @returns {Promise<MeshEnt>} Promise to the mesh.
|
||||
* @throws {Error} Rejects the promise on errors.
|
||||
*/
|
||||
public getMesh(url: string, abort?: Promise<void>): Promise<IMesh> {
|
||||
public getMesh(url: string, abort?: Promise<void>): Promise<MeshEnt> {
|
||||
return Promise.reject(new MapillaryError("Not implemented"));
|
||||
}
|
||||
|
||||
@ -173,7 +173,7 @@ export abstract class DataProviderBase extends EventEmitter {
|
||||
* @throws {Error} Rejects the promise on errors.
|
||||
*/
|
||||
public getSequences(sequenceKeys: string[]):
|
||||
Promise<{ [sequenceKey: string]: ISequence }> {
|
||||
Promise<{ [sequenceKey: string]: SequenceEnt }> {
|
||||
return Promise.reject(new MapillaryError("Not implemented"));
|
||||
}
|
||||
|
||||
|
||||
@ -9,28 +9,29 @@ import { GeohashGeometryProvider } from "./GeohashGeometryProvider";
|
||||
import { JsonInflator } from "./JsonInflator";
|
||||
import { ModelCreator } from "./ModelCreator";
|
||||
import { PbfMeshReader } from "./PbfMeshReader";
|
||||
import { IClusterReconstruction } from "./interfaces/IClusterReconstruction";
|
||||
import { ICoreNode } from "./interfaces/ICoreNode";
|
||||
import { IFalcorDataProviderOptions } from "./interfaces/IFalcorDataProviderOptions";
|
||||
import { IFillNode } from "./interfaces/IFillNode";
|
||||
import { IFullNode } from "./interfaces/IFullNode";
|
||||
import { IMesh } from "./interfaces/IMesh";
|
||||
import { ISequence } from "./interfaces/ISequence";
|
||||
import { ReconstructionEnt } from "./ents/ReconstructionEnt";
|
||||
import { CoreImageEnt } from "./ents/CoreImageEnt";
|
||||
import { FalcorDataProviderOptions } from "./interfaces/FalcorDataProviderOptions";
|
||||
import { SpatialImageEnt } from "./ents/SpatialImageEnt";
|
||||
import { ImageEnt } from "./ents/ImageEnt";
|
||||
import { MeshEnt } from "./ents/MeshEnt";
|
||||
|
||||
import { MapillaryError } from "../error/MapillaryError";
|
||||
import { ImageSize } from "../viewer/ImageSize";
|
||||
import { GeometryProviderBase } from "./GeometryProviderBase";
|
||||
import { SequenceEnt } from "./ents/SequenceEnt";
|
||||
import { LatLonAltEnt } from "./ents/LatLonAltEnt";
|
||||
|
||||
|
||||
interface IImageByKey<T> {
|
||||
interface ImageByKey<T> {
|
||||
imageByKey: { [key: string]: T };
|
||||
}
|
||||
|
||||
interface IImagesByH<T> {
|
||||
interface ImagesByH<T> {
|
||||
imagesByH: { [key: string]: { [index: string]: T } };
|
||||
}
|
||||
|
||||
interface ISequenceByKey<T> {
|
||||
interface SequenceByKey<T> {
|
||||
sequenceByKey: { [sequenceKey: string]: T };
|
||||
}
|
||||
|
||||
@ -39,6 +40,14 @@ type APIPath =
|
||||
"imagesByH" |
|
||||
"sequenceByKey";
|
||||
|
||||
interface Reconstruction extends ReconstructionEnt {
|
||||
reference_lla: {
|
||||
altitude: number,
|
||||
latitude: number,
|
||||
longitude: number,
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @class PointsGeometry
|
||||
*
|
||||
@ -64,17 +73,17 @@ export class FalcorDataProviderUrls {
|
||||
/**
|
||||
* Create a new Falcor data provider URLs instance.
|
||||
*
|
||||
* @param {IFalcorDataProviderOptions} options - Options struct.
|
||||
* @param {FalcorDataProviderOptions} options - Options struct.
|
||||
*/
|
||||
constructor(options: IFalcorDataProviderOptions) {
|
||||
constructor(options: FalcorDataProviderOptions) {
|
||||
this._clientToken = options.clientToken;
|
||||
|
||||
if (!!options.apiHost) {
|
||||
this._apiHost = options.apiHost;
|
||||
}
|
||||
|
||||
if (!!options.clusterReconstructionHost) {
|
||||
this._clusterReconstructionHost = options.clusterReconstructionHost;
|
||||
if (!!options.reconstructionHost) {
|
||||
this._clusterReconstructionHost = options.reconstructionHost;
|
||||
}
|
||||
|
||||
if (!!options.imageHost) {
|
||||
@ -156,12 +165,12 @@ export class FalcorDataProvider extends DataProviderBase {
|
||||
/**
|
||||
* Create a new Falcor data provider instance.
|
||||
*
|
||||
* @param {IFalcorDataProviderOptions} options - Options struct.
|
||||
* @param {FalcorDataProviderOptions} options - Options struct.
|
||||
* @param {GeometryProviderBase} [geometry] - Optional geometry
|
||||
* provider instance.
|
||||
*/
|
||||
constructor(
|
||||
options: IFalcorDataProviderOptions,
|
||||
options: FalcorDataProviderOptions,
|
||||
geometry?: GeometryProviderBase) {
|
||||
|
||||
super(!!geometry ? geometry : new GeohashGeometryProvider());
|
||||
@ -236,8 +245,8 @@ export class FalcorDataProvider extends DataProviderBase {
|
||||
* @inheritdoc
|
||||
*/
|
||||
public getCoreImages(cellId: string):
|
||||
Promise<{ [cellId: string]: { [imageKey: string]: ICoreNode } }> {
|
||||
return Promise.resolve(<PromiseLike<JSONEnvelope<IImagesByH<ICoreNode>>>>this._model
|
||||
Promise<{ [cellId: string]: { [imageKey: string]: CoreImageEnt } }> {
|
||||
return Promise.resolve(<PromiseLike<JSONEnvelope<ImagesByH<CoreImageEnt>>>>this._model
|
||||
.get([
|
||||
this._pathImagesByH,
|
||||
[cellId],
|
||||
@ -245,7 +254,7 @@ export class FalcorDataProvider extends DataProviderBase {
|
||||
this._propertiesKey
|
||||
.concat(this._propertiesCore)]))
|
||||
.then(
|
||||
(value: JSONEnvelope<IImagesByH<ICoreNode>>): { [h: string]: { [index: string]: ICoreNode } } => {
|
||||
(value: JSONEnvelope<ImagesByH<CoreImageEnt>>): { [h: string]: { [index: string]: CoreImageEnt } } => {
|
||||
if (!value) {
|
||||
value = { json: { imagesByH: {} } };
|
||||
for (const h of [cellId]) {
|
||||
@ -267,20 +276,32 @@ export class FalcorDataProvider extends DataProviderBase {
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public getClusterReconstruction(url: string, abort?: Promise<void>): Promise<IClusterReconstruction> {
|
||||
public getClusterReconstruction(
|
||||
url: string,
|
||||
abort?: Promise<void>): Promise<ReconstructionEnt> {
|
||||
return BufferFetcher.getArrayBuffer(url, abort)
|
||||
.then(
|
||||
(buffer: ArrayBuffer): IClusterReconstruction => {
|
||||
const reconstructions: IClusterReconstruction[] =
|
||||
(buffer: ArrayBuffer): Reconstruction => {
|
||||
const reconstructions: Reconstruction[] =
|
||||
JsonInflator.decompress(buffer);
|
||||
|
||||
if (reconstructions.length < 1) {
|
||||
throw new MapillaryError("Cluster reconstruction is empty.");
|
||||
}
|
||||
|
||||
const reconstruction = reconstructions[0];
|
||||
const referenceLla = reconstruction.reference_lla;
|
||||
const reference: LatLonAltEnt = {
|
||||
alt: referenceLla.altitude,
|
||||
lat: referenceLla.latitude,
|
||||
lon: referenceLla.longitude,
|
||||
};
|
||||
reconstruction.reference = reference;
|
||||
delete reconstruction.reference_lla;
|
||||
|
||||
return reconstructions[0];
|
||||
},
|
||||
(reason: Error): IClusterReconstruction => {
|
||||
(reason: Error): Reconstruction => {
|
||||
throw reason;
|
||||
});
|
||||
}
|
||||
@ -288,8 +309,8 @@ export class FalcorDataProvider extends DataProviderBase {
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public getFillImages(keys: string[]): Promise<{ [key: string]: IFillNode }> {
|
||||
return Promise.resolve(<PromiseLike<JSONEnvelope<IImageByKey<IFillNode>>>>this._model
|
||||
public getFillImages(keys: string[]): Promise<{ [key: string]: SpatialImageEnt }> {
|
||||
return Promise.resolve(<PromiseLike<JSONEnvelope<ImageByKey<SpatialImageEnt>>>>this._model
|
||||
.get([
|
||||
this._pathImageByKey,
|
||||
keys,
|
||||
@ -299,7 +320,7 @@ export class FalcorDataProvider extends DataProviderBase {
|
||||
this._propertiesKey
|
||||
.concat(this._propertiesUser)]))
|
||||
.then(
|
||||
(value: JSONEnvelope<IImageByKey<IFillNode>>): { [key: string]: IFillNode } => {
|
||||
(value: JSONEnvelope<ImageByKey<SpatialImageEnt>>): { [key: string]: SpatialImageEnt } => {
|
||||
if (!value) {
|
||||
this._invalidateGet(this._pathImageByKey, keys);
|
||||
throw new Error(`Images (${keys.join(", ")}) could not be found.`);
|
||||
@ -316,8 +337,8 @@ export class FalcorDataProvider extends DataProviderBase {
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public getFullImages(keys: string[]): Promise<{ [key: string]: IFullNode }> {
|
||||
return Promise.resolve(<PromiseLike<JSONEnvelope<IImageByKey<IFullNode>>>>this._model
|
||||
public getFullImages(keys: string[]): Promise<{ [key: string]: ImageEnt }> {
|
||||
return Promise.resolve(<PromiseLike<JSONEnvelope<ImageByKey<ImageEnt>>>>this._model
|
||||
.get([
|
||||
this._pathImageByKey,
|
||||
keys,
|
||||
@ -328,7 +349,7 @@ export class FalcorDataProvider extends DataProviderBase {
|
||||
this._propertiesKey
|
||||
.concat(this._propertiesUser)]))
|
||||
.then(
|
||||
(value: JSONEnvelope<IImageByKey<IFullNode>>): { [key: string]: IFullNode } => {
|
||||
(value: JSONEnvelope<ImageByKey<ImageEnt>>): { [key: string]: ImageEnt } => {
|
||||
if (!value) {
|
||||
this._invalidateGet(this._pathImageByKey, keys);
|
||||
throw new Error(`Images (${keys.join(", ")}) could not be found.`);
|
||||
@ -371,13 +392,13 @@ export class FalcorDataProvider extends DataProviderBase {
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public getMesh(url: string, abort?: Promise<void>): Promise<IMesh> {
|
||||
public getMesh(url: string, abort?: Promise<void>): Promise<MeshEnt> {
|
||||
return BufferFetcher.getArrayBuffer(url, abort)
|
||||
.then(
|
||||
(buffer: ArrayBuffer): IMesh => {
|
||||
(buffer: ArrayBuffer): MeshEnt => {
|
||||
return PbfMeshReader.read(buffer);
|
||||
},
|
||||
(reason: Error): IMesh => {
|
||||
(reason: Error): MeshEnt => {
|
||||
throw reason;
|
||||
});
|
||||
}
|
||||
@ -386,15 +407,15 @@ export class FalcorDataProvider extends DataProviderBase {
|
||||
* @inheritdoc
|
||||
*/
|
||||
public getSequences(sequenceKeys: string[]):
|
||||
Promise<{ [sequenceKey: string]: ISequence }> {
|
||||
return Promise.resolve(<PromiseLike<JSONEnvelope<ISequenceByKey<ISequence>>>>this._model
|
||||
Promise<{ [sequenceKey: string]: SequenceEnt }> {
|
||||
return Promise.resolve(<PromiseLike<JSONEnvelope<SequenceByKey<SequenceEnt>>>>this._model
|
||||
.get([
|
||||
this._pathSequenceByKey,
|
||||
sequenceKeys,
|
||||
this._propertiesKey
|
||||
.concat(this._propertiesSequence)]))
|
||||
.then(
|
||||
(value: JSONEnvelope<ISequenceByKey<ISequence>>): { [sequenceKey: string]: ISequence } => {
|
||||
(value: JSONEnvelope<SequenceByKey<SequenceEnt>>): { [sequenceKey: string]: SequenceEnt } => {
|
||||
if (!value) {
|
||||
value = { json: { sequenceByKey: {} } };
|
||||
}
|
||||
@ -429,7 +450,7 @@ export class FalcorDataProvider extends DataProviderBase {
|
||||
this._model.invalidate([path, paths]);
|
||||
}
|
||||
|
||||
private _populateUrls<T extends IFillNode>(ibk: { [key: string]: T }): { [key: string]: T } {
|
||||
private _populateUrls<T extends SpatialImageEnt>(ibk: { [key: string]: T }): { [key: string]: T } {
|
||||
for (let key in ibk) {
|
||||
if (!ibk.hasOwnProperty(key)) {
|
||||
continue;
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
import * as geohash from "latlon-geohash";
|
||||
|
||||
import { GeometryProviderBase } from "./GeometryProviderBase";
|
||||
import { ICellCorners, ICellNeighbors } from "./interfaces/ICellCorners";
|
||||
import { ILatLon } from "./interfaces/ILatLon";
|
||||
import { CellCorners, CellNeighbors } from "./interfaces/CellCorners";
|
||||
import { LatLonEnt } from "./ents/LatLonEnt";
|
||||
|
||||
import { GeoCoords } from "../geo/GeoCoords";
|
||||
|
||||
@ -44,40 +44,40 @@ export class GeohashGeometryProvider extends GeometryProviderBase {
|
||||
* The method currently uses the largest side as the threshold leading to
|
||||
* more tiles being returned than needed in edge cases.
|
||||
*
|
||||
* @param {ILatLon} sw - South west corner of bounding box.
|
||||
* @param {ILatLon} ne - North east corner of bounding box.
|
||||
* @param {LatLonEnt} sw - South west corner of bounding box.
|
||||
* @param {LatLonEnt} ne - North east corner of bounding box.
|
||||
*
|
||||
* @returns {string} The geohash tiles containing the bounding box.
|
||||
*/
|
||||
public bboxToCellIds(sw: ILatLon, ne: ILatLon): string[] {
|
||||
public bboxToCellIds(sw: LatLonEnt, ne: LatLonEnt): string[] {
|
||||
return this._bboxSquareToCellIds(sw, ne);
|
||||
}
|
||||
|
||||
/** @inheritdoc */
|
||||
public getCorners(cellId: string): ICellCorners {
|
||||
public getCorners(cellId: string): CellCorners {
|
||||
const bounds: geohash.Bounds = geohash.bounds(cellId);
|
||||
const nw: ILatLon = { lat: bounds.ne.lat, lon: bounds.sw.lon };
|
||||
const ne: ILatLon = { lat: bounds.ne.lat, lon: bounds.ne.lon };
|
||||
const se: ILatLon = { lat: bounds.ne.lat, lon: bounds.sw.lon };
|
||||
const sw: ILatLon = { lat: bounds.sw.lat, lon: bounds.sw.lon };
|
||||
const nw: LatLonEnt = { lat: bounds.ne.lat, lon: bounds.sw.lon };
|
||||
const ne: LatLonEnt = { lat: bounds.ne.lat, lon: bounds.ne.lon };
|
||||
const se: LatLonEnt = { lat: bounds.ne.lat, lon: bounds.sw.lon };
|
||||
const sw: LatLonEnt = { lat: bounds.sw.lat, lon: bounds.sw.lon };
|
||||
return { nw, ne, se, sw };
|
||||
}
|
||||
|
||||
/** @inheritdoc */
|
||||
public getNeighbors(cellId: string): ICellNeighbors {
|
||||
public getNeighbors(cellId: string): CellNeighbors {
|
||||
return geohash.neighbours(cellId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Encode the geohash tile for geodetic coordinates.
|
||||
*
|
||||
* @param {ILatLon} latlon - Latitude and longitude to encode.
|
||||
* @param {LatLonEnt} latlon - Latitude and longitude to encode.
|
||||
* @param {number} precision - Precision of the encoding.
|
||||
*
|
||||
* @returns {string} The geohash tile for the lat, lon and precision.
|
||||
*/
|
||||
public latLonToCellId(
|
||||
latLon: ILatLon,
|
||||
latLon: LatLonEnt,
|
||||
relativeLevel: number = 0): string {
|
||||
|
||||
return geohash.encode(
|
||||
@ -90,7 +90,7 @@ export class GeohashGeometryProvider extends GeometryProviderBase {
|
||||
* Encode the geohash tiles within a threshold from a position
|
||||
* using Manhattan distance.
|
||||
*
|
||||
* @param {ILatLon} latlon - Latitude and longitude to encode.
|
||||
* @param {LatLonEnt} latlon - Latitude and longitude to encode.
|
||||
* @param {number} precision - Precision of the encoding.
|
||||
* @param {number} threshold - Threshold of the encoding in meters.
|
||||
*
|
||||
@ -98,7 +98,7 @@ export class GeohashGeometryProvider extends GeometryProviderBase {
|
||||
* threshold.
|
||||
*/
|
||||
public latLonToCellIds(
|
||||
latLon: ILatLon,
|
||||
latLon: LatLonEnt,
|
||||
threshold: number,
|
||||
relativeLevel: number = 0): string[] {
|
||||
|
||||
@ -106,14 +106,14 @@ export class GeohashGeometryProvider extends GeometryProviderBase {
|
||||
latLon.lat, latLon.lon, this._level + relativeLevel);
|
||||
|
||||
const bounds: geohash.Bounds = geohash.bounds(h);
|
||||
const corners: ICellCorners = {
|
||||
const corners: CellCorners = {
|
||||
ne: { lat: bounds.ne.lat, lon: bounds.ne.lon },
|
||||
nw: { lat: bounds.ne.lat, lon: bounds.sw.lon },
|
||||
se: { lat: bounds.sw.lat, lon: bounds.ne.lon },
|
||||
sw: { lat: bounds.sw.lat, lon: bounds.sw.lon },
|
||||
};
|
||||
|
||||
const neighbours: ICellNeighbors = this.getNeighbors(h);
|
||||
const neighbours: CellNeighbors = this.getNeighbors(h);
|
||||
|
||||
return this._filterNeighbors(
|
||||
latLon,
|
||||
@ -124,11 +124,11 @@ export class GeohashGeometryProvider extends GeometryProviderBase {
|
||||
}
|
||||
|
||||
private _filterNeighbors(
|
||||
latLon: ILatLon,
|
||||
latLon: LatLonEnt,
|
||||
threshold: number,
|
||||
cellId: string,
|
||||
corners: ICellCorners,
|
||||
neighbors: ICellNeighbors): string[] {
|
||||
corners: CellCorners,
|
||||
neighbors: CellNeighbors): string[] {
|
||||
|
||||
const bl: number[] = [0, 0, 0];
|
||||
const tr: number[] =
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
import { ICellCorners, ICellNeighbors } from "./interfaces/ICellCorners";
|
||||
import { ILatLon } from "./interfaces/ILatLon";
|
||||
import { CellCorners, CellNeighbors } from "./interfaces/CellCorners";
|
||||
import { LatLonEnt } from "./ents/LatLonEnt";
|
||||
|
||||
import { MapillaryError } from "../error/MapillaryError";
|
||||
import { GeoCoords } from "../geo/GeoCoords";
|
||||
@ -36,12 +36,12 @@ export abstract class GeometryProviderBase {
|
||||
* to be sufficiently small to be contained in an area with the size
|
||||
* of maximally four tiles. Up to nine adjacent tiles may be returned.
|
||||
*
|
||||
* @param {ILatLon} sw - South west corner of bounding box.
|
||||
* @param {ILatLon} ne - North east corner of bounding box.
|
||||
* @param {LatLonEnt} sw - South west corner of bounding box.
|
||||
* @param {LatLonEnt} ne - North east corner of bounding box.
|
||||
*
|
||||
* @returns {Array<string>} Array of cell ids.
|
||||
*/
|
||||
public bboxToCellIds(sw: ILatLon, ne: ILatLon): string[] {
|
||||
public bboxToCellIds(sw: LatLonEnt, ne: LatLonEnt): string[] {
|
||||
throw new MapillaryError("Not implemented");
|
||||
}
|
||||
|
||||
@ -49,30 +49,30 @@ export abstract class GeometryProviderBase {
|
||||
* Get the corners of a cell.
|
||||
*
|
||||
* @param {string} cellId - Id of cell.
|
||||
* @returns {ICellCorners} Cell corners struct.
|
||||
* @returns {CellCorners} Cell corners struct.
|
||||
*/
|
||||
public getCorners(cellId: string): ICellCorners {
|
||||
public getCorners(cellId: string): CellCorners {
|
||||
throw new MapillaryError("Not implemented");
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the neighbors of a cell.
|
||||
*
|
||||
* @param {ILatLon} sw - South west corner of the bounding box.
|
||||
* @param {ILatLon} ne - North east corner of the bounding box.
|
||||
* @returns {ICellCorners} Cell corners struct.
|
||||
* @param {LatLonEnt} sw - South west corner of the bounding box.
|
||||
* @param {LatLonEnt} ne - North east corner of the bounding box.
|
||||
* @returns {CellCorners} Cell corners struct.
|
||||
*/
|
||||
public getNeighbors(cellId: string): ICellNeighbors {
|
||||
public getNeighbors(cellId: string): CellNeighbors {
|
||||
throw new MapillaryError("Not implemented");
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert geodetic coordinates to a cell id.
|
||||
*
|
||||
* @param {ILatLon} latlon - Latitude and longitude to convert.
|
||||
* @param {LatLonEnt} latlon - Latitude and longitude to convert.
|
||||
* @returns {string} Cell id for the latitude, longitude.
|
||||
*/
|
||||
public latLonToCellId(latLon: ILatLon, relativeLevel?: number): string {
|
||||
public latLonToCellId(latLon: LatLonEnt, relativeLevel?: number): string {
|
||||
throw new MapillaryError("Not implemented");
|
||||
}
|
||||
|
||||
@ -82,17 +82,17 @@ export abstract class GeometryProviderBase {
|
||||
* The square is specified as a latitude, longitude
|
||||
* and a threshold from the position using Manhattan distance.
|
||||
*
|
||||
* @param {ILatLon} latlon - Latitude and longitude.
|
||||
* @param {LatLonEnt} latlon - Latitude and longitude.
|
||||
* @param {number} threshold - Threshold of the conversion in meters.
|
||||
*
|
||||
* @returns {Array<string>} Array of cell ids reachable within
|
||||
* the threshold.
|
||||
*/
|
||||
public latLonToCellIds(latLon: ILatLon, threshold: number, relativeLevel?: number): string[] {
|
||||
public latLonToCellIds(latLon: LatLonEnt, threshold: number, relativeLevel?: number): string[] {
|
||||
throw new MapillaryError("Not implemented");
|
||||
}
|
||||
|
||||
protected _bboxSquareToCellIds(sw: ILatLon, ne: ILatLon): string[] {
|
||||
protected _bboxSquareToCellIds(sw: LatLonEnt, ne: LatLonEnt): string[] {
|
||||
if (ne.lat <= sw.lat || ne.lon <= sw.lon) {
|
||||
throw new MapillaryError("North east needs to be top right of south west");
|
||||
}
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
import Pbf from "pbf";
|
||||
|
||||
import { IMesh } from "./interfaces/IMesh";
|
||||
import { MeshEnt } from "./ents/MeshEnt";
|
||||
|
||||
/**
|
||||
* @class PbfMeshReader
|
||||
@ -16,16 +16,16 @@ export class PbfMeshReader {
|
||||
* @static
|
||||
* @param {ArrayBuffer} buffer - Array buffer to read.
|
||||
*
|
||||
* @returns {IMesh} Mesh object.
|
||||
* @returns {MeshEnt} Mesh object.
|
||||
*/
|
||||
public static read(buffer: ArrayBuffer): IMesh {
|
||||
public static read(buffer: ArrayBuffer): MeshEnt {
|
||||
const pbf = new Pbf(buffer);
|
||||
return pbf.readFields(
|
||||
PbfMeshReader._readMeshField,
|
||||
{ faces: [], vertices: [] });
|
||||
}
|
||||
|
||||
private static _readMeshField(tag: number, mesh: IMesh, pbf: Pbf): void {
|
||||
private static _readMeshField(tag: number, mesh: MeshEnt, pbf: Pbf): void {
|
||||
if (tag === 1) {
|
||||
mesh.vertices.push(pbf.readFloat());
|
||||
} else if (tag === 2) {
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
import { S2 } from "s2-geometry";
|
||||
|
||||
import { GeometryProviderBase } from "./GeometryProviderBase";
|
||||
import { ICellCorners, ICellNeighbors } from "./interfaces/ICellCorners";
|
||||
import { ILatLon } from "./interfaces/ILatLon";
|
||||
import { CellCorners, CellNeighbors } from "./interfaces/CellCorners";
|
||||
import { LatLonEnt } from "./ents/LatLonEnt";
|
||||
|
||||
import { GeoCoords } from "../geo/GeoCoords";
|
||||
|
||||
@ -36,12 +36,12 @@ export class S2GeometryProvider extends GeometryProviderBase {
|
||||
}
|
||||
|
||||
/** @inheritdoc */
|
||||
public bboxToCellIds(sw: ILatLon, ne: ILatLon): string[] {
|
||||
public bboxToCellIds(sw: LatLonEnt, ne: LatLonEnt): string[] {
|
||||
return this._bboxSquareToCellIds(sw, ne);
|
||||
}
|
||||
|
||||
/** @inheritdoc */
|
||||
public getNeighbors(cellId: string): ICellNeighbors {
|
||||
public getNeighbors(cellId: string): CellNeighbors {
|
||||
const key: string = S2.idToKey(cellId);
|
||||
const position: string = key.split('/')[1];
|
||||
const level: number = position.length;
|
||||
@ -63,7 +63,7 @@ export class S2GeometryProvider extends GeometryProviderBase {
|
||||
}
|
||||
|
||||
/** @inheritdoc */
|
||||
public getCorners(cellId: string): ICellCorners {
|
||||
public getCorners(cellId: string): CellCorners {
|
||||
const key: string = S2.idToKey(cellId);
|
||||
const cell: S2.S2Cell = S2.S2Cell.FromHilbertQuadKey(key);
|
||||
const corners: S2.ILatLng[] = cell.getCornerLatLngs();
|
||||
@ -89,15 +89,15 @@ export class S2GeometryProvider extends GeometryProviderBase {
|
||||
}
|
||||
|
||||
/** @inheritdoc */
|
||||
public latLonToCellId(latLon: ILatLon): string {
|
||||
public latLonToCellId(latLon: LatLonEnt): string {
|
||||
return this._latLonToId(latLon, this._level);
|
||||
}
|
||||
|
||||
/** @inheritdoc */
|
||||
public latLonToCellIds(latLon: ILatLon, threshold: number): string[] {
|
||||
public latLonToCellIds(latLon: LatLonEnt, threshold: number): string[] {
|
||||
const cellId: string = this._latLonToId(latLon, this._level);
|
||||
const neighbors: ICellNeighbors = this.getNeighbors(cellId);
|
||||
const corners: ILatLon[] =
|
||||
const neighbors: CellNeighbors = this.getNeighbors(cellId);
|
||||
const corners: LatLonEnt[] =
|
||||
this._getLatLonBoundingBoxCorners(latLon, threshold);
|
||||
|
||||
for (let corner of corners) {
|
||||
@ -119,7 +119,7 @@ export class S2GeometryProvider extends GeometryProviderBase {
|
||||
return [cellId];
|
||||
}
|
||||
|
||||
private _enuToGeodetic(point: number[], reference: ILatLon): ILatLon {
|
||||
private _enuToGeodetic(point: number[], reference: LatLonEnt): LatLonEnt {
|
||||
const [lat, lon]: number[] = this._geoCoords.enuToGeodetic(
|
||||
point[0],
|
||||
point[1],
|
||||
@ -132,14 +132,14 @@ export class S2GeometryProvider extends GeometryProviderBase {
|
||||
}
|
||||
|
||||
private _getLatLonBoundingBoxCorners(
|
||||
latLon: ILatLon, threshold: number): ILatLon[] {
|
||||
latLon: LatLonEnt, threshold: number): LatLonEnt[] {
|
||||
return [
|
||||
[-threshold, threshold, 0],
|
||||
[threshold, threshold, 0],
|
||||
[threshold, -threshold, 0],
|
||||
[-threshold, -threshold, 0],
|
||||
].map(
|
||||
(point: number[]): ILatLon => {
|
||||
(point: number[]): LatLonEnt => {
|
||||
return this._enuToGeodetic(point, latLon);
|
||||
});
|
||||
}
|
||||
@ -154,7 +154,7 @@ export class S2GeometryProvider extends GeometryProviderBase {
|
||||
return neighbors;
|
||||
}
|
||||
|
||||
private _latLonToId(latLon: ILatLon, level: number): string {
|
||||
private _latLonToId(latLon: LatLonEnt, level: number): string {
|
||||
const key: string = S2.latLngToKey(
|
||||
latLon.lat,
|
||||
latLon.lon,
|
||||
|
||||
27
src/api/ents/CameraEnt.ts
Normal file
27
src/api/ents/CameraEnt.ts
Normal file
@ -0,0 +1,27 @@
|
||||
/**
|
||||
* Interface that represents a camera type in a
|
||||
* reconstruction.
|
||||
*
|
||||
* @interface CameraEnt
|
||||
*/
|
||||
export interface CameraEnt {
|
||||
/**
|
||||
* SfM computed focal length.
|
||||
*/
|
||||
focal: number;
|
||||
|
||||
/**
|
||||
* SfM computed radial distortion parameter.
|
||||
*/
|
||||
k1: number;
|
||||
|
||||
/**
|
||||
* SfM computed radial distortion parameter.
|
||||
*/
|
||||
k2: number;
|
||||
|
||||
/**
|
||||
* Projection type of the camera.
|
||||
*/
|
||||
projection_type: string;
|
||||
}
|
||||
23
src/api/ents/CameraShotEnt.ts
Normal file
23
src/api/ents/CameraShotEnt.ts
Normal file
@ -0,0 +1,23 @@
|
||||
/**
|
||||
* Interface that represents a shot (a camera frame) in a
|
||||
* reconstruction.
|
||||
*
|
||||
* @interface CameraShotEnt
|
||||
*/
|
||||
export interface CameraShotEnt {
|
||||
/**
|
||||
* Key of the camera for the shot.
|
||||
*/
|
||||
camera: string;
|
||||
|
||||
/**
|
||||
* Rotation vector in angle axis representation.
|
||||
*/
|
||||
rotation: number[];
|
||||
|
||||
/**
|
||||
* The translation in meters in topocentric ENU
|
||||
* reference frame.
|
||||
*/
|
||||
translation: number[];
|
||||
}
|
||||
@ -1,21 +1,21 @@
|
||||
import { IKey } from "./IKey";
|
||||
import { ILatLon } from "./ILatLon";
|
||||
import { KeyedEnt } from "./KeyedEnt";
|
||||
import { LatLonEnt } from "./LatLonEnt";
|
||||
|
||||
/**
|
||||
* Interface that describes the raw core node properties.
|
||||
*
|
||||
* @interface ICoreNode
|
||||
* @interface CoreImageEnt
|
||||
*/
|
||||
export interface ICoreNode extends IKey {
|
||||
export interface CoreImageEnt extends KeyedEnt {
|
||||
/**
|
||||
* SfM computed latitude longitude in WGS84 datum, measured in degrees.
|
||||
*/
|
||||
cl?: ILatLon;
|
||||
cl?: LatLonEnt;
|
||||
|
||||
/**
|
||||
* Original EXIF latitude longitude in WGS84 datum, measured in degrees.
|
||||
*/
|
||||
l: ILatLon;
|
||||
l: LatLonEnt;
|
||||
|
||||
/**
|
||||
* Key of sequence that the node is part of.
|
||||
9
src/api/ents/ImageEnt.ts
Normal file
9
src/api/ents/ImageEnt.ts
Normal file
@ -0,0 +1,9 @@
|
||||
import { SpatialImageEnt } from "./SpatialImageEnt";
|
||||
import { CoreImageEnt } from "./CoreImageEnt";
|
||||
|
||||
/**
|
||||
* Interface that describes the raw image properties.
|
||||
*
|
||||
* @interface ImageEnt
|
||||
*/
|
||||
export interface ImageEnt extends CoreImageEnt, SpatialImageEnt { }
|
||||
11
src/api/ents/KeyedEnt.ts
Normal file
11
src/api/ents/KeyedEnt.ts
Normal file
@ -0,0 +1,11 @@
|
||||
/**
|
||||
* Interface that describes an entity with a unique key.
|
||||
*
|
||||
* @interface KeyedEnt
|
||||
*/
|
||||
export interface KeyedEnt {
|
||||
/**
|
||||
* Unique key.
|
||||
*/
|
||||
key: string;
|
||||
}
|
||||
15
src/api/ents/LatLonAltEnt.ts
Normal file
15
src/api/ents/LatLonAltEnt.ts
Normal file
@ -0,0 +1,15 @@
|
||||
import { LatLonEnt } from "./LatLonEnt";
|
||||
|
||||
/**
|
||||
* Interface that represents a latitude-longitude reference
|
||||
* of a reconstruction, measured in degrees and an
|
||||
* altitude in meters. Coordinates are defined in the WGS84 datum.
|
||||
*
|
||||
* @interface LatLonAltEnt
|
||||
*/
|
||||
export interface LatLonAltEnt extends LatLonEnt {
|
||||
/**
|
||||
* Altitude, measured in meters.
|
||||
*/
|
||||
alt: number;
|
||||
}
|
||||
@ -2,9 +2,9 @@
|
||||
* Interface that represents a latitude and longitude coordinate,
|
||||
* measured in degrees. Coordinates are defined in the WGS84 datum.
|
||||
*
|
||||
* @interface ILatLon
|
||||
* @interface LatLonEnt
|
||||
*/
|
||||
export interface ILatLon {
|
||||
export interface LatLonEnt {
|
||||
/**
|
||||
* Latitude, measured in degrees.
|
||||
*/
|
||||
@ -1,9 +1,9 @@
|
||||
/**
|
||||
* Interface that describes SfM triangulated meshes.
|
||||
*
|
||||
* @interface IMesh
|
||||
* @interface MeshEnt
|
||||
*/
|
||||
export interface IMesh {
|
||||
export interface MeshEnt {
|
||||
/**
|
||||
* Flattened array of faces for the mesh. Each face consist
|
||||
* three vertex indices.
|
||||
17
src/api/ents/PointEnt.ts
Normal file
17
src/api/ents/PointEnt.ts
Normal file
@ -0,0 +1,17 @@
|
||||
/**
|
||||
* Interface that represents a reconstruction point.
|
||||
*
|
||||
* @interface PointEnt
|
||||
*/
|
||||
export interface PointEnt {
|
||||
/**
|
||||
* RGB color vector of the point.
|
||||
*/
|
||||
color: number[];
|
||||
|
||||
/**
|
||||
* Coordinates in metric scale in topocentric ENU
|
||||
* reference frame with respect to a geo reference.
|
||||
*/
|
||||
coordinates: number[];
|
||||
}
|
||||
8
src/api/ents/ProjectEnt.ts
Normal file
8
src/api/ents/ProjectEnt.ts
Normal file
@ -0,0 +1,8 @@
|
||||
import { KeyedEnt } from "./KeyedEnt";
|
||||
|
||||
/**
|
||||
* Interface that describes the raw image project properties.
|
||||
*
|
||||
* @interface ProjectEnt
|
||||
*/
|
||||
export interface ProjectEnt extends KeyedEnt { }
|
||||
34
src/api/ents/ReconstructionEnt.ts
Normal file
34
src/api/ents/ReconstructionEnt.ts
Normal file
@ -0,0 +1,34 @@
|
||||
import { CameraEnt } from "./CameraEnt";
|
||||
import { CameraShotEnt } from "./CameraShotEnt";
|
||||
import { LatLonAltEnt } from "./LatLonAltEnt";
|
||||
import { PointEnt } from "./PointEnt";
|
||||
|
||||
export interface ReconstructionEnt {
|
||||
/**
|
||||
* The unique key of the reconstruction.
|
||||
*/
|
||||
key: string;
|
||||
|
||||
/**
|
||||
* The cameras of the reconstruction.
|
||||
*/
|
||||
cameras: { [key: string]: CameraEnt };
|
||||
|
||||
/**
|
||||
* The points of the reconstruction.
|
||||
*/
|
||||
points: { [id: string]: PointEnt };
|
||||
|
||||
/**
|
||||
* The reference latitude, longitue, altitude of
|
||||
* the reconstruction. Determines the
|
||||
* position of the reconstruction in world reference
|
||||
* frame.
|
||||
*/
|
||||
reference: LatLonAltEnt;
|
||||
|
||||
/**
|
||||
* The shots of the reconstruction.
|
||||
*/
|
||||
shots: { [key: string]: CameraShotEnt };
|
||||
}
|
||||
@ -1,11 +1,11 @@
|
||||
import { IKey } from "./IKey";
|
||||
import { KeyedEnt } from "./KeyedEnt";
|
||||
|
||||
/**
|
||||
* Interface that describes the raw image sequence properties.
|
||||
*
|
||||
* @interface ISequence
|
||||
* @interface SequenceEnt
|
||||
*/
|
||||
export interface ISequence extends IKey {
|
||||
export interface SequenceEnt extends KeyedEnt {
|
||||
/**
|
||||
* The ordered image keys of the sequence.
|
||||
*/
|
||||
@ -1,14 +1,13 @@
|
||||
import { CameraProjectionType } from "./CameraProjectionType";
|
||||
import { INodeUrls } from "./INodeUrls";
|
||||
import { IProject } from "./IProject";
|
||||
import { IUser } from "./IUser";
|
||||
import { URLImageEnt } from "./URLImageEnt";
|
||||
import { ProjectEnt } from "./ProjectEnt";
|
||||
import { UserEnt } from "./UserEnt";
|
||||
|
||||
/**
|
||||
* Interface that describes the raw filling node properties.
|
||||
* Interface that describes the raw spatial image properties.
|
||||
*
|
||||
* @interface ISpatialNode
|
||||
* @interface SpatialImageEnt
|
||||
*/
|
||||
export interface IFillNode extends INodeUrls {
|
||||
export interface SpatialImageEnt extends URLImageEnt {
|
||||
/**
|
||||
* Original EXIF altitude above sea level, in meters.
|
||||
*/
|
||||
@ -37,6 +36,11 @@ export interface IFillNode extends INodeUrls {
|
||||
*/
|
||||
calt?: number;
|
||||
|
||||
/**
|
||||
* Projection type of captured image.
|
||||
*/
|
||||
camera_projection_type?: string;
|
||||
|
||||
/**
|
||||
* Timestamp when the image was captured.
|
||||
*/
|
||||
@ -107,22 +111,17 @@ export interface IFillNode extends INodeUrls {
|
||||
/**
|
||||
* Project the image belongs to.
|
||||
*/
|
||||
project?: IProject;
|
||||
project?: ProjectEnt;
|
||||
|
||||
/**
|
||||
* Image quality score.
|
||||
*/
|
||||
quality_score?: number;
|
||||
|
||||
/**
|
||||
* Projection type of captured image.
|
||||
*/
|
||||
camera_projection_type?: CameraProjectionType;
|
||||
|
||||
/**
|
||||
* User who uploaded the image.
|
||||
*/
|
||||
user: IUser;
|
||||
user: UserEnt;
|
||||
|
||||
/**
|
||||
* Width of original image, not adjusted for orientation.
|
||||
@ -1,9 +1,9 @@
|
||||
/**
|
||||
* Interface that describes an object with image thumb URLs.
|
||||
*
|
||||
* @interface INodeUrls
|
||||
* @interface URLImageEnt
|
||||
*/
|
||||
export interface INodeUrls {
|
||||
export interface URLImageEnt {
|
||||
/**
|
||||
* URL for cluster reconstruction resource.
|
||||
*/
|
||||
@ -1,11 +1,11 @@
|
||||
import { IKey } from "./IKey";
|
||||
import { KeyedEnt } from "./KeyedEnt";
|
||||
|
||||
/**
|
||||
* Interface that describes the raw image user properties.
|
||||
*
|
||||
* @interface IUser
|
||||
* @interface UserEnt
|
||||
*/
|
||||
export interface IUser extends IKey {
|
||||
export interface UserEnt extends KeyedEnt {
|
||||
/**
|
||||
* The username of the user.
|
||||
*/
|
||||
@ -1,11 +1,11 @@
|
||||
import { ILatLon } from "./ILatLon";
|
||||
import { LatLonEnt } from "../ents/LatLonEnt";
|
||||
|
||||
/**
|
||||
* Interface that describes a cell neighbors object.
|
||||
*
|
||||
* @interface ICellNeighbors
|
||||
* @interface CellNeighbors
|
||||
*/
|
||||
export interface ICellNeighbors {
|
||||
export interface CellNeighbors {
|
||||
/**
|
||||
* East neighbor.
|
||||
*/
|
||||
@ -50,26 +50,26 @@ export interface ICellNeighbors {
|
||||
/**
|
||||
* Interface that describes a cell corners object.
|
||||
*
|
||||
* @interface ICellCorners
|
||||
* @interface CellCorners
|
||||
*/
|
||||
export interface ICellCorners {
|
||||
export interface CellCorners {
|
||||
/**
|
||||
* North east corner.
|
||||
*/
|
||||
ne: ILatLon;
|
||||
ne: LatLonEnt;
|
||||
|
||||
/**
|
||||
* North west corner.
|
||||
*/
|
||||
nw: ILatLon;
|
||||
nw: LatLonEnt;
|
||||
|
||||
/**
|
||||
* South east corner.
|
||||
*/
|
||||
se: ILatLon;
|
||||
se: LatLonEnt;
|
||||
|
||||
/**
|
||||
* South west corner.
|
||||
*/
|
||||
sw: ILatLon;
|
||||
sw: LatLonEnt;
|
||||
}
|
||||
@ -6,10 +6,9 @@ import { DataProviderBase } from "../DataProviderBase";
|
||||
* @description Emitted when data has been added to a
|
||||
* data provider after initial load.
|
||||
*
|
||||
* @event IDataAddedEvent
|
||||
* @type {IDataAddedEvent}
|
||||
* @event DataAddedProviderEvent
|
||||
*/
|
||||
export interface IDataAddedEvent {
|
||||
export interface DataAddedProviderEvent {
|
||||
/**
|
||||
* Event type.
|
||||
*/
|
||||
@ -1,11 +1,12 @@
|
||||
import { ModelCreator } from "../ModelCreator";
|
||||
|
||||
/**
|
||||
* Interface for the options that can be provided to the {@link FalcorDataProvider}.
|
||||
* Interface for the options that can be provided to
|
||||
* the {@link FalcorDataProvider}.
|
||||
*
|
||||
* @interface IFalcorDataProviderOptions
|
||||
* @interface FalcorDataProviderOptions
|
||||
*/
|
||||
export interface IFalcorDataProviderOptions {
|
||||
export interface FalcorDataProviderOptions {
|
||||
/**
|
||||
* API v3 host.
|
||||
*
|
||||
@ -28,7 +29,7 @@ export interface IFalcorDataProviderOptions {
|
||||
*
|
||||
* @default {"cluster-reconstructions.mapillary.com"}
|
||||
*/
|
||||
clusterReconstructionHost?: string;
|
||||
reconstructionHost?: string;
|
||||
|
||||
/**
|
||||
* Optional model creator instance.
|
||||
@ -1,124 +0,0 @@
|
||||
import { CameraProjectionType } from "./CameraProjectionType";
|
||||
|
||||
/**
|
||||
* Interface that represents a camera type in a cluster
|
||||
* reconstruction.
|
||||
*
|
||||
* @interface ICamera
|
||||
*/
|
||||
export interface ICamera {
|
||||
/**
|
||||
* SfM computed focal length.
|
||||
*/
|
||||
focal: number;
|
||||
|
||||
/**
|
||||
* SfM computed radial distortion parameter.
|
||||
*/
|
||||
k1: number;
|
||||
|
||||
/**
|
||||
* SfM computed radial distortion parameter.
|
||||
*/
|
||||
k2: number;
|
||||
|
||||
/**
|
||||
* Projection type of the camera.
|
||||
*/
|
||||
projection_type: CameraProjectionType;
|
||||
}
|
||||
|
||||
/**
|
||||
* Interface that represents a latitude-longitude reference
|
||||
* of a cluster reconstruction, measured in degrees and an
|
||||
* altitude in meters. Coordinates are defined in the WGS84 datum.
|
||||
*
|
||||
* @interface IGeoReference
|
||||
*/
|
||||
export interface IGeoReference {
|
||||
/**
|
||||
* Altitude, measured in meters.
|
||||
*/
|
||||
altitude: number;
|
||||
|
||||
/**
|
||||
* Latitude, measured in degrees.
|
||||
*/
|
||||
latitude: number;
|
||||
|
||||
/**
|
||||
* Longitude, measured in degrees.
|
||||
*/
|
||||
longitude: number;
|
||||
}
|
||||
|
||||
/**
|
||||
* Interface that represents a cluster reconstruction point.
|
||||
*
|
||||
* @interface IReconstructionPoint
|
||||
*/
|
||||
export interface IReconstructionPoint {
|
||||
/**
|
||||
* RGB color vector of the point.
|
||||
*/
|
||||
color: number[];
|
||||
|
||||
/**
|
||||
* Coordinates in metric scale in topocentric ENU
|
||||
* reference frame with respect to a geo reference.
|
||||
*/
|
||||
coordinates: number[];
|
||||
}
|
||||
|
||||
/**
|
||||
* Interface that represents a shot (a camera frame) in a cluster
|
||||
* reconstruction.
|
||||
*
|
||||
* @interface IShot
|
||||
*/
|
||||
export interface IShot {
|
||||
/**
|
||||
* Key of the camera for the shot.
|
||||
*/
|
||||
camera: string;
|
||||
|
||||
/**
|
||||
* Rotation vector in angle axis representation.
|
||||
*/
|
||||
rotation: number[];
|
||||
|
||||
/**
|
||||
* The translation in meters in topocentric ENU
|
||||
* reference frame.
|
||||
*/
|
||||
translation: number[];
|
||||
}
|
||||
|
||||
export interface IClusterReconstruction {
|
||||
/**
|
||||
* The unique key of the reconstruction.
|
||||
*/
|
||||
key: string;
|
||||
|
||||
/**
|
||||
* The cameras of the reconstruction.
|
||||
*/
|
||||
cameras: { [key: string]: ICamera };
|
||||
|
||||
/**
|
||||
* The points of the reconstruction.
|
||||
*/
|
||||
points: { [id: string]: IReconstructionPoint };
|
||||
|
||||
/**
|
||||
* The reference of the reconstruction. Determines the
|
||||
* position of the reconstruction in world reference
|
||||
* frame.
|
||||
*/
|
||||
reference_lla: IGeoReference;
|
||||
|
||||
/**
|
||||
* The shots of the reconstruction.
|
||||
*/
|
||||
shots: { [key: string]: IShot };
|
||||
}
|
||||
@ -1,9 +0,0 @@
|
||||
import { IFillNode } from "./IFillNode";
|
||||
import { ICoreNode } from "./ICoreNode";
|
||||
|
||||
/**
|
||||
* Interface that describes the raw full image properties.
|
||||
*
|
||||
* @interface IFullNode
|
||||
*/
|
||||
export interface IFullNode extends ICoreNode, IFillNode { }
|
||||
@ -1,11 +0,0 @@
|
||||
/**
|
||||
* Interface that describes an object with a unique key.
|
||||
*
|
||||
* @interface IKey
|
||||
*/
|
||||
export interface IKey {
|
||||
/**
|
||||
* Unique key.
|
||||
*/
|
||||
key: string;
|
||||
}
|
||||
@ -1,8 +0,0 @@
|
||||
import { IKey } from "./IKey";
|
||||
|
||||
/**
|
||||
* Interface that describes the raw image project properties.
|
||||
*
|
||||
* @interface IProject
|
||||
*/
|
||||
export interface IProject extends IKey { }
|
||||
@ -8,16 +8,16 @@ import {
|
||||
import { map } from "rxjs/operators";
|
||||
|
||||
import { Component } from "./Component";
|
||||
import { IComponentConfiguration } from "./interfaces/IComponentConfiguration";
|
||||
import { ComponentConfiguration } from "./interfaces/ComponentConfiguration";
|
||||
|
||||
import { Node } from "../graph/Node";
|
||||
import { ISize } from "../render/interfaces/ISize";
|
||||
import { IVNodeHash } from "../render/interfaces/IVNodeHash";
|
||||
import { ViewportSize } from "../render/interfaces/ViewportSize";
|
||||
import { VirtualNodeHash } from "../render/interfaces/VirtualNodeHash";
|
||||
import { Urls } from "../utils/Urls";
|
||||
import { Container } from "../viewer/Container";
|
||||
import { Navigator } from "../viewer/Navigator";
|
||||
|
||||
export class AttributionComponent extends Component<IComponentConfiguration> {
|
||||
export class AttributionComponent extends Component<ComponentConfiguration> {
|
||||
public static componentName: string = "attribution";
|
||||
private _disposable: Subscription;
|
||||
|
||||
@ -30,7 +30,7 @@ export class AttributionComponent extends Component<IComponentConfiguration> {
|
||||
this._navigator.stateService.currentNode$,
|
||||
this._container.renderService.size$).pipe(
|
||||
map(
|
||||
([node, size]: [Node, ISize]): IVNodeHash => {
|
||||
([node, size]: [Node, ViewportSize]): VirtualNodeHash => {
|
||||
return {
|
||||
name: this._name,
|
||||
vnode: this._getAttributionNode(node.username, node.key, node.capturedAt, size.width),
|
||||
@ -43,7 +43,7 @@ export class AttributionComponent extends Component<IComponentConfiguration> {
|
||||
this._disposable.unsubscribe();
|
||||
}
|
||||
|
||||
protected _getDefaultConfiguration(): IComponentConfiguration {
|
||||
protected _getDefaultConfiguration(): ComponentConfiguration {
|
||||
return {};
|
||||
}
|
||||
|
||||
|
||||
@ -20,16 +20,16 @@ import {
|
||||
import * as Geo from "../geo/Geo";
|
||||
|
||||
import { Component } from "./Component";
|
||||
import { IBearingConfiguration } from "./interfaces/IBearingConfiguration";
|
||||
import { BearingConfiguration } from "./interfaces/BearingConfiguration";
|
||||
|
||||
import { Spatial } from "../geo/Spatial";
|
||||
import { Transform } from "../geo/Transform";
|
||||
import { ViewportCoords } from "../geo/ViewportCoords";
|
||||
import { Node } from "../graph/Node";
|
||||
import { RenderCamera } from "../render/RenderCamera";
|
||||
import { ISize } from "../render/interfaces/ISize";
|
||||
import { IVNodeHash } from "../render/interfaces/IVNodeHash";
|
||||
import { IFrame } from "../state/interfaces/IFrame";
|
||||
import { ViewportSize } from "../render/interfaces/ViewportSize";
|
||||
import { VirtualNodeHash } from "../render/interfaces/VirtualNodeHash";
|
||||
import { AnimationFrame } from "../state/interfaces/AnimationFrame";
|
||||
import { ComponentSize } from "./utils/ComponentSize";
|
||||
import { Container } from "../viewer/Container";
|
||||
import { Navigator } from "../viewer/Navigator";
|
||||
@ -45,7 +45,7 @@ type NodeFovState = {
|
||||
prev: NodeFov,
|
||||
};
|
||||
|
||||
interface INodeFovOperation {
|
||||
interface NodeFovOperation {
|
||||
(state: NodeFovState): NodeFovState;
|
||||
}
|
||||
|
||||
@ -65,7 +65,7 @@ interface INodeFovOperation {
|
||||
* bearingComponent.configure({ size: Mapillary.ComponentSize.Small });
|
||||
* ```
|
||||
*/
|
||||
export class BearingComponent extends Component<IBearingConfiguration> {
|
||||
export class BearingComponent extends Component<BearingConfiguration> {
|
||||
public static componentName: string = "bearing";
|
||||
|
||||
private _spatial: Spatial;
|
||||
@ -115,12 +115,12 @@ export class BearingComponent extends Component<IBearingConfiguration> {
|
||||
this._navigator.stateService.currentState$.pipe(
|
||||
distinctUntilChanged(
|
||||
undefined,
|
||||
(frame: IFrame): string => {
|
||||
(frame: AnimationFrame): string => {
|
||||
return frame.state.currentNode.key;
|
||||
})),
|
||||
this._navigator.panService.panNodes$).pipe(
|
||||
map(
|
||||
([frame, panNodes]: [IFrame, [Node, Transform, number][]]): NodeFov => {
|
||||
([frame, panNodes]: [AnimationFrame, [Node, Transform, number][]]): NodeFov => {
|
||||
const node: Node = frame.state.currentNode;
|
||||
const transform: Transform = frame.state.currentTransform;
|
||||
|
||||
@ -158,22 +158,22 @@ export class BearingComponent extends Component<IBearingConfiguration> {
|
||||
this._navigator.stateService.currentState$.pipe(
|
||||
distinctUntilChanged(
|
||||
undefined,
|
||||
(frame: IFrame): string => {
|
||||
(frame: AnimationFrame): string => {
|
||||
return frame.state.currentNode.key;
|
||||
})),
|
||||
this._container.renderService.bearing$).pipe(
|
||||
map(
|
||||
([frame, bearing]: [IFrame, number]): number => {
|
||||
([frame, bearing]: [AnimationFrame, number]): number => {
|
||||
const offset: number = this._spatial.degToRad(frame.state.currentNode.ca - bearing);
|
||||
|
||||
return offset;
|
||||
}));
|
||||
|
||||
const nodeFovOperation$: Subject<INodeFovOperation> = new Subject<INodeFovOperation>();
|
||||
const nodeFovOperation$: Subject<NodeFovOperation> = new Subject<NodeFovOperation>();
|
||||
|
||||
const smoothNodeFov$: Observable<NodeFov> = nodeFovOperation$.pipe(
|
||||
scan(
|
||||
(state: NodeFovState, operation: INodeFovOperation): NodeFovState => {
|
||||
(state: NodeFovState, operation: NodeFovOperation): NodeFovState => {
|
||||
return operation(state);
|
||||
},
|
||||
{ alpha: 0, curr: [0, 0, 0], prev: [0, 0, 0] }),
|
||||
@ -191,7 +191,7 @@ export class BearingComponent extends Component<IBearingConfiguration> {
|
||||
|
||||
this._fovSubscription = nodeFov$.pipe(
|
||||
map(
|
||||
(nbf: NodeFov): INodeFovOperation => {
|
||||
(nbf: NodeFov): NodeFovOperation => {
|
||||
return (state: NodeFovState): NodeFovState => {
|
||||
const a: number = this._unitBezier.solve(state.alpha);
|
||||
const c: NodeFov = state.curr;
|
||||
@ -233,7 +233,7 @@ export class BearingComponent extends Component<IBearingConfiguration> {
|
||||
}));
|
||||
}),
|
||||
map(
|
||||
(alpha: number): INodeFovOperation => {
|
||||
(alpha: number): NodeFovOperation => {
|
||||
return (nbfState: NodeFovState): NodeFovState => {
|
||||
return {
|
||||
alpha: alpha,
|
||||
@ -259,7 +259,7 @@ export class BearingComponent extends Component<IBearingConfiguration> {
|
||||
this._container.renderService.size$).pipe(
|
||||
map(
|
||||
([[cb, cf], [no, nfl, nfr], configuration, size]:
|
||||
[[number, number], [number, number, number], IBearingConfiguration, ISize]): IVNodeHash => {
|
||||
[[number, number], [number, number, number], BearingConfiguration, ViewportSize]): VirtualNodeHash => {
|
||||
|
||||
const background: vd.VNode = this._createBackground(cb);
|
||||
const fovIndicator: vd.VNode = this._createFovIndicator(nfl, nfr, no);
|
||||
@ -293,7 +293,7 @@ export class BearingComponent extends Component<IBearingConfiguration> {
|
||||
this._fovAnimationSubscription.unsubscribe();
|
||||
}
|
||||
|
||||
protected _getDefaultConfiguration(): IBearingConfiguration {
|
||||
protected _getDefaultConfiguration(): BearingConfiguration {
|
||||
return { size: ComponentSize.Automatic };
|
||||
}
|
||||
|
||||
|
||||
@ -22,19 +22,19 @@ import {
|
||||
} from "rxjs/operators";
|
||||
|
||||
import { Component } from "./Component";
|
||||
import { ICacheConfiguration, ICacheDepth } from "./interfaces/ICacheConfiguration";
|
||||
import { CacheConfiguration, CacheDepthConfiguration } from "./interfaces/CacheConfiguration";
|
||||
|
||||
import { Node } from "../graph/Node";
|
||||
import { IEdge } from "../graph/edge/interfaces/IEdge";
|
||||
import { IEdgeStatus } from "../graph/interfaces/IEdgeStatus";
|
||||
import { EdgeDirection } from "../graph/edge/EdgeDirection";
|
||||
import { NavigationEdge } from "../graph/edge/interfaces/NavigationEdge";
|
||||
import { NavigationEdgeStatus } from "../graph/interfaces/NavigationEdgeStatus";
|
||||
import { NavigationDirection } from "../graph/edge/NavigationDirection";
|
||||
import { Container } from "../viewer/Container";
|
||||
import { Navigator } from "../viewer/Navigator";
|
||||
import { isSpherical } from "../geo/Geo";
|
||||
|
||||
type EdgesDepth = [IEdge[], number];
|
||||
type EdgesDepth = [NavigationEdge[], number];
|
||||
|
||||
export class CacheComponent extends Component<ICacheConfiguration> {
|
||||
export class CacheComponent extends Component<CacheConfiguration> {
|
||||
public static componentName: string = "cache";
|
||||
|
||||
private _sequenceSubscription: Subscription;
|
||||
@ -50,9 +50,9 @@ export class CacheComponent extends Component<ICacheConfiguration> {
|
||||
* Configures the cache depth. The cache depth can be different for
|
||||
* different edge direction types.
|
||||
*
|
||||
* @param {ICacheDepth} depth - Cache depth structure.
|
||||
* @param {CacheDepthConfiguration} depth - Cache depth structure.
|
||||
*/
|
||||
public setDepth(depth: ICacheDepth): void {
|
||||
public setDepth(depth: CacheDepthConfiguration): void {
|
||||
this.configure({ depth: depth });
|
||||
}
|
||||
|
||||
@ -60,23 +60,23 @@ export class CacheComponent extends Component<ICacheConfiguration> {
|
||||
this._sequenceSubscription = observableCombineLatest(
|
||||
this._navigator.stateService.currentNode$.pipe(
|
||||
switchMap(
|
||||
(node: Node): Observable<IEdgeStatus> => {
|
||||
(node: Node): Observable<NavigationEdgeStatus> => {
|
||||
return node.sequenceEdges$;
|
||||
}),
|
||||
filter(
|
||||
(status: IEdgeStatus): boolean => {
|
||||
(status: NavigationEdgeStatus): boolean => {
|
||||
return status.cached;
|
||||
})),
|
||||
this._configuration$).pipe(
|
||||
switchMap(
|
||||
(nc: [IEdgeStatus, ICacheConfiguration]): Observable<EdgesDepth> => {
|
||||
let status: IEdgeStatus = nc[0];
|
||||
let configuration: ICacheConfiguration = nc[1];
|
||||
(nc: [NavigationEdgeStatus, CacheConfiguration]): Observable<EdgesDepth> => {
|
||||
let status: NavigationEdgeStatus = nc[0];
|
||||
let configuration: CacheConfiguration = nc[1];
|
||||
|
||||
let sequenceDepth = Math.max(0, Math.min(4, configuration.depth.sequence));
|
||||
|
||||
let next$ = this._cache$(status.edges, EdgeDirection.Next, sequenceDepth);
|
||||
let prev$ = this._cache$(status.edges, EdgeDirection.Prev, sequenceDepth);
|
||||
let next$ = this._cache$(status.edges, NavigationDirection.Next, sequenceDepth);
|
||||
let prev$ = this._cache$(status.edges, NavigationDirection.Prev, sequenceDepth);
|
||||
|
||||
return observableMerge<EdgesDepth>(
|
||||
next$,
|
||||
@ -93,20 +93,20 @@ export class CacheComponent extends Component<ICacheConfiguration> {
|
||||
this._spatialSubscription = observableCombineLatest(
|
||||
this._navigator.stateService.currentNode$.pipe(
|
||||
switchMap(
|
||||
(node: Node): Observable<[Node, IEdgeStatus]> => {
|
||||
(node: Node): Observable<[Node, NavigationEdgeStatus]> => {
|
||||
return observableCombineLatest(
|
||||
observableOf<Node>(node),
|
||||
node.spatialEdges$.pipe(
|
||||
filter(
|
||||
(status: IEdgeStatus): boolean => {
|
||||
(status: NavigationEdgeStatus): boolean => {
|
||||
return status.cached;
|
||||
})));
|
||||
})),
|
||||
this._configuration$).pipe(
|
||||
switchMap(
|
||||
([[node, edgeStatus], configuration]: [[Node, IEdgeStatus], ICacheConfiguration]): Observable<EdgesDepth> => {
|
||||
let edges: IEdge[] = edgeStatus.edges;
|
||||
let depth: ICacheDepth = configuration.depth;
|
||||
([[node, edgeStatus], configuration]: [[Node, NavigationEdgeStatus], CacheConfiguration]): Observable<EdgesDepth> => {
|
||||
let edges: NavigationEdge[] = edgeStatus.edges;
|
||||
let depth: CacheDepthConfiguration = configuration.depth;
|
||||
|
||||
let sphericalDepth =
|
||||
Math.max(0, Math.min(2, depth.spherical));
|
||||
@ -115,16 +115,16 @@ export class CacheComponent extends Component<ICacheConfiguration> {
|
||||
let turnDepth = isSpherical(node.cameraType) ?
|
||||
0 : Math.max(0, Math.min(1, depth.turn));
|
||||
|
||||
let spherical$ = this._cache$(edges, EdgeDirection.Spherical, sphericalDepth);
|
||||
let spherical$ = this._cache$(edges, NavigationDirection.Spherical, sphericalDepth);
|
||||
|
||||
let forward$ = this._cache$(edges, EdgeDirection.StepForward, stepDepth);
|
||||
let backward$ = this._cache$(edges, EdgeDirection.StepBackward, stepDepth);
|
||||
let left$ = this._cache$(edges, EdgeDirection.StepLeft, stepDepth);
|
||||
let right$ = this._cache$(edges, EdgeDirection.StepRight, stepDepth);
|
||||
let forward$ = this._cache$(edges, NavigationDirection.StepForward, stepDepth);
|
||||
let backward$ = this._cache$(edges, NavigationDirection.StepBackward, stepDepth);
|
||||
let left$ = this._cache$(edges, NavigationDirection.StepLeft, stepDepth);
|
||||
let right$ = this._cache$(edges, NavigationDirection.StepRight, stepDepth);
|
||||
|
||||
let turnLeft$ = this._cache$(edges, EdgeDirection.TurnLeft, turnDepth);
|
||||
let turnRight$ = this._cache$(edges, EdgeDirection.TurnRight, turnDepth);
|
||||
let turnU$ = this._cache$(edges, EdgeDirection.TurnU, turnDepth);
|
||||
let turnLeft$ = this._cache$(edges, NavigationDirection.TurnLeft, turnDepth);
|
||||
let turnRight$ = this._cache$(edges, NavigationDirection.TurnRight, turnDepth);
|
||||
let turnU$ = this._cache$(edges, NavigationDirection.TurnU, turnDepth);
|
||||
|
||||
return observableMerge<EdgesDepth>(
|
||||
forward$,
|
||||
@ -150,17 +150,17 @@ export class CacheComponent extends Component<ICacheConfiguration> {
|
||||
this._spatialSubscription.unsubscribe();
|
||||
}
|
||||
|
||||
protected _getDefaultConfiguration(): ICacheConfiguration {
|
||||
protected _getDefaultConfiguration(): CacheConfiguration {
|
||||
return { depth: { spherical: 1, sequence: 2, step: 1, turn: 0 } };
|
||||
}
|
||||
|
||||
private _cache$(edges: IEdge[], direction: EdgeDirection, depth: number): Observable<EdgesDepth> {
|
||||
private _cache$(edges: NavigationEdge[], direction: NavigationDirection, depth: number): Observable<EdgesDepth> {
|
||||
return observableZip(
|
||||
observableOf<IEdge[]>(edges),
|
||||
observableOf<NavigationEdge[]>(edges),
|
||||
observableOf<number>(depth)).pipe(
|
||||
expand(
|
||||
(ed: EdgesDepth): Observable<EdgesDepth> => {
|
||||
let es: IEdge[] = ed[0];
|
||||
let es: NavigationEdge[] = ed[0];
|
||||
let d = ed[1];
|
||||
|
||||
let edgesDepths$: Observable<EdgesDepth>[] = [];
|
||||
@ -170,9 +170,9 @@ export class CacheComponent extends Component<ICacheConfiguration> {
|
||||
if (edge.data.direction === direction) {
|
||||
edgesDepths$.push(
|
||||
observableZip(
|
||||
this._navigator.graphService.cacheNode$(edge.to).pipe(
|
||||
this._navigator.graphService.cacheNode$(edge.target).pipe(
|
||||
mergeMap(
|
||||
(n: Node): Observable<IEdge[]> => {
|
||||
(n: Node): Observable<NavigationEdge[]> => {
|
||||
return this._nodeToEdges$(n, direction);
|
||||
})),
|
||||
observableOf<number>(d - 1)));
|
||||
@ -186,16 +186,16 @@ export class CacheComponent extends Component<ICacheConfiguration> {
|
||||
skip(1));
|
||||
}
|
||||
|
||||
private _nodeToEdges$(node: Node, direction: EdgeDirection): Observable<IEdge[]> {
|
||||
return ([EdgeDirection.Next, EdgeDirection.Prev].indexOf(direction) > -1 ?
|
||||
private _nodeToEdges$(node: Node, direction: NavigationDirection): Observable<NavigationEdge[]> {
|
||||
return ([NavigationDirection.Next, NavigationDirection.Prev].indexOf(direction) > -1 ?
|
||||
node.sequenceEdges$ :
|
||||
node.spatialEdges$).pipe(
|
||||
first(
|
||||
(status: IEdgeStatus): boolean => {
|
||||
(status: NavigationEdgeStatus): boolean => {
|
||||
return status.cached;
|
||||
}),
|
||||
map(
|
||||
(status: IEdgeStatus): IEdge[] => {
|
||||
(status: NavigationEdgeStatus): NavigationEdge[] => {
|
||||
return status.edges;
|
||||
}));
|
||||
}
|
||||
|
||||
@ -11,13 +11,13 @@ import {
|
||||
Subject,
|
||||
} from "rxjs";
|
||||
|
||||
import { IComponentConfiguration } from "./interfaces/IComponentConfiguration";
|
||||
import { ComponentConfiguration } from "./interfaces/ComponentConfiguration";
|
||||
|
||||
import { Container } from "../viewer/Container";
|
||||
import { Navigator } from "../viewer/Navigator";
|
||||
import { EventEmitter } from "../utils/EventEmitter";
|
||||
|
||||
export abstract class Component<TConfiguration extends IComponentConfiguration> extends EventEmitter {
|
||||
export abstract class Component<TConfiguration extends ComponentConfiguration> extends EventEmitter {
|
||||
public static componentName: string = "not_worthy";
|
||||
|
||||
protected _activated: boolean;
|
||||
|
||||
@ -1,23 +1,23 @@
|
||||
import { Component } from "./Component";
|
||||
import { CoverComponent } from "./CoverComponent";
|
||||
import { IComponentConfiguration } from "./interfaces/IComponentConfiguration";
|
||||
import { ComponentConfiguration } from "./interfaces/ComponentConfiguration";
|
||||
|
||||
import { ArgumentMapillaryError } from "../error/ArgumentMapillaryError";
|
||||
import { Container } from "../viewer/Container";
|
||||
import { Navigator } from "../viewer/Navigator";
|
||||
|
||||
interface IActiveComponent {
|
||||
interface ActiveComponent {
|
||||
active: boolean;
|
||||
component: Component<IComponentConfiguration>;
|
||||
component: Component<ComponentConfiguration>;
|
||||
}
|
||||
|
||||
export class ComponentService {
|
||||
public static registeredCoverComponent: typeof CoverComponent;
|
||||
public static registeredComponents: { [key: string]: { new(...args: any[]): Component<IComponentConfiguration>; } } = {};
|
||||
public static registeredComponents: { [key: string]: { new(...args: any[]): Component<ComponentConfiguration>; } } = {};
|
||||
|
||||
private _coverActivated: boolean;
|
||||
private _coverComponent: CoverComponent;
|
||||
private _components: { [key: string]: IActiveComponent } = {};
|
||||
private _components: { [key: string]: ActiveComponent } = {};
|
||||
|
||||
constructor(container: Container, navigator: Navigator) {
|
||||
for (const componentName in ComponentService.registeredComponents) {
|
||||
@ -25,7 +25,7 @@ export class ComponentService {
|
||||
continue;
|
||||
}
|
||||
|
||||
const component: new (...args: any[]) => Component<IComponentConfiguration> =
|
||||
const component: new (...args: any[]) => Component<ComponentConfiguration> =
|
||||
ComponentService.registeredComponents[componentName];
|
||||
|
||||
this._components[componentName] = {
|
||||
@ -39,7 +39,7 @@ export class ComponentService {
|
||||
this._coverActivated = true;
|
||||
}
|
||||
|
||||
public static register<T extends Component<IComponentConfiguration>>(
|
||||
public static register<T extends Component<ComponentConfiguration>>(
|
||||
component: { componentName: string, new(...args: any[]): T; }): void {
|
||||
if (ComponentService.registeredComponents[component.componentName] === undefined) {
|
||||
ComponentService.registeredComponents[component.componentName] = component;
|
||||
@ -66,7 +66,7 @@ export class ComponentService {
|
||||
continue;
|
||||
}
|
||||
|
||||
const component: IActiveComponent = this._components[componentName];
|
||||
const component: ActiveComponent = this._components[componentName];
|
||||
|
||||
if (component.active) {
|
||||
component.component.deactivate();
|
||||
@ -86,7 +86,7 @@ export class ComponentService {
|
||||
continue;
|
||||
}
|
||||
|
||||
const component: IActiveComponent = this._components[componentName];
|
||||
const component: ActiveComponent = this._components[componentName];
|
||||
|
||||
if (component.active) {
|
||||
component.component.activate();
|
||||
@ -103,7 +103,7 @@ export class ComponentService {
|
||||
}
|
||||
}
|
||||
|
||||
public configure<TConfiguration extends IComponentConfiguration>(name: string, conf: TConfiguration): void {
|
||||
public configure<TConfiguration extends ComponentConfiguration>(name: string, conf: TConfiguration): void {
|
||||
this._checkName(name);
|
||||
this.get(name).configure(conf);
|
||||
}
|
||||
@ -117,7 +117,7 @@ export class ComponentService {
|
||||
}
|
||||
}
|
||||
|
||||
public get<TComponent extends Component<IComponentConfiguration>>(name: string): TComponent {
|
||||
public get<TComponent extends Component<ComponentConfiguration>>(name: string): TComponent {
|
||||
return <TComponent>this._components[name].component;
|
||||
}
|
||||
|
||||
|
||||
@ -21,18 +21,18 @@ import {
|
||||
} from "rxjs/operators";
|
||||
|
||||
import { Component } from "./Component";
|
||||
import { CoverState, ICoverConfiguration } from "./interfaces/ICoverConfiguration";
|
||||
import { CoverState, CoverConfiguration } from "./interfaces/CoverConfiguration";
|
||||
|
||||
import { IFullNode } from "../api/interfaces/IFullNode";
|
||||
import { ImageEnt } from "../api/ents/ImageEnt";
|
||||
import { MapillaryError } from "../error/MapillaryError";
|
||||
import { Node } from "../graph/Node";
|
||||
import { ISize } from "../render/interfaces/ISize";
|
||||
import { IVNodeHash } from "../render/interfaces/IVNodeHash";
|
||||
import { ViewportSize } from "../render/interfaces/ViewportSize";
|
||||
import { VirtualNodeHash } from "../render/interfaces/VirtualNodeHash";
|
||||
import { Urls } from "../utils/Urls";
|
||||
import { Container } from "../viewer/Container";
|
||||
import { Navigator } from "../viewer/Navigator";
|
||||
|
||||
export class CoverComponent extends Component<ICoverConfiguration> {
|
||||
export class CoverComponent extends Component<CoverConfiguration> {
|
||||
public static componentName: string = "cover";
|
||||
|
||||
private _renderSubscription: Subscription;
|
||||
@ -47,15 +47,15 @@ export class CoverComponent extends Component<ICoverConfiguration> {
|
||||
protected _activate(): void {
|
||||
const originalSrc$: Observable<string> = this.configuration$.pipe(
|
||||
first(
|
||||
(c: ICoverConfiguration): boolean => {
|
||||
(c: CoverConfiguration): boolean => {
|
||||
return !!c.key;
|
||||
}),
|
||||
filter(
|
||||
(c: ICoverConfiguration): boolean => {
|
||||
(c: CoverConfiguration): boolean => {
|
||||
return !c.src;
|
||||
}),
|
||||
switchMap(
|
||||
(c: ICoverConfiguration): Observable<string> => {
|
||||
(c: CoverConfiguration): Observable<string> => {
|
||||
return this._getImageSrc$(c.key).pipe(
|
||||
catchError(
|
||||
(error: Error): Observable<string> => {
|
||||
@ -69,11 +69,11 @@ export class CoverComponent extends Component<ICoverConfiguration> {
|
||||
|
||||
this._configureSrcSubscription = originalSrc$.pipe(
|
||||
map(
|
||||
(src: string): ICoverConfiguration => {
|
||||
(src: string): CoverConfiguration => {
|
||||
return { src: src };
|
||||
}))
|
||||
.subscribe(
|
||||
(c: ICoverConfiguration): void => {
|
||||
(c: CoverConfiguration): void => {
|
||||
this._configurationSubject$.next(c);
|
||||
});
|
||||
|
||||
@ -81,23 +81,23 @@ export class CoverComponent extends Component<ICoverConfiguration> {
|
||||
this.configuration$,
|
||||
originalSrc$).pipe(
|
||||
filter(
|
||||
([c, src]: [ICoverConfiguration, string]): boolean => {
|
||||
([c, src]: [CoverConfiguration, string]): boolean => {
|
||||
return !!c.src && c.src !== src;
|
||||
}),
|
||||
first())
|
||||
.subscribe(
|
||||
([, src]: [ICoverConfiguration, string]): void => {
|
||||
([, src]: [CoverConfiguration, string]): void => {
|
||||
window.URL.revokeObjectURL(src);
|
||||
});
|
||||
|
||||
this._keySubscription = this._configuration$.pipe(
|
||||
distinctUntilChanged(
|
||||
undefined,
|
||||
(configuration: ICoverConfiguration): CoverState => {
|
||||
(configuration: CoverConfiguration): CoverState => {
|
||||
return configuration.state;
|
||||
}),
|
||||
switchMap(
|
||||
(configuration: ICoverConfiguration): Observable<[CoverState, Node]> => {
|
||||
(configuration: CoverConfiguration): Observable<[CoverState, Node]> => {
|
||||
return observableCombineLatest(
|
||||
observableOf(configuration.state),
|
||||
this._navigator.stateService.currentNode$);
|
||||
@ -123,7 +123,7 @@ export class CoverComponent extends Component<ICoverConfiguration> {
|
||||
return k1 === k2 && s1 === s2;
|
||||
}),
|
||||
map(
|
||||
([key, src]: [string, string]): ICoverConfiguration => {
|
||||
([key, src]: [string, string]): CoverConfiguration => {
|
||||
return { key: key, src: src };
|
||||
}))
|
||||
.subscribe(this._configurationSubject$);
|
||||
@ -132,7 +132,7 @@ export class CoverComponent extends Component<ICoverConfiguration> {
|
||||
this._configuration$,
|
||||
this._container.renderService.size$).pipe(
|
||||
map(
|
||||
([configuration, size]: [ICoverConfiguration, ISize]): IVNodeHash => {
|
||||
([configuration, size]: [CoverConfiguration, ViewportSize]): VirtualNodeHash => {
|
||||
if (!configuration.src) {
|
||||
return { name: this._name, vnode: vd.h("div", []) };
|
||||
}
|
||||
@ -163,11 +163,11 @@ export class CoverComponent extends Component<ICoverConfiguration> {
|
||||
this._revokeUrlSubscription.unsubscribe();
|
||||
}
|
||||
|
||||
protected _getDefaultConfiguration(): ICoverConfiguration {
|
||||
protected _getDefaultConfiguration(): CoverConfiguration {
|
||||
return { state: CoverState.Visible };
|
||||
}
|
||||
|
||||
private _getCoverButtonVNode(configuration: ICoverConfiguration): vd.VNode {
|
||||
private _getCoverButtonVNode(configuration: CoverConfiguration): vd.VNode {
|
||||
const cover: string = configuration.state === CoverState.Loading ? "div.mapillary-cover.mapillary-cover-loading" : "div.mapillary-cover";
|
||||
const coverButton: vd.VNode = vd.h(
|
||||
"div.mapillary-cover-button",
|
||||
@ -189,7 +189,7 @@ export class CoverComponent extends Component<ICoverConfiguration> {
|
||||
]);
|
||||
}
|
||||
|
||||
private _getCoverBackgroundVNode(conf: ICoverConfiguration): vd.VNode {
|
||||
private _getCoverBackgroundVNode(conf: CoverConfiguration): vd.VNode {
|
||||
const properties: vd.createProperties = {
|
||||
style: { backgroundImage: `url(${conf.src})` },
|
||||
};
|
||||
@ -207,7 +207,7 @@ export class CoverComponent extends Component<ICoverConfiguration> {
|
||||
(subscriber: Subscriber<string>): void => {
|
||||
this._navigator.api.imageByKeyFull$([key])
|
||||
.subscribe(
|
||||
(fullNodes: { [key: string]: IFullNode; }): void => {
|
||||
(fullNodes: { [key: string]: ImageEnt; }): void => {
|
||||
if (!fullNodes[key]) {
|
||||
subscriber.error(new MapillaryError(`Non existent cover key: ${key}`));
|
||||
return;
|
||||
|
||||
@ -13,15 +13,15 @@ import {
|
||||
} from "rxjs/operators";
|
||||
|
||||
import { Component } from "./Component";
|
||||
import { IComponentConfiguration } from "./interfaces/IComponentConfiguration";
|
||||
import { ComponentConfiguration } from "./interfaces/ComponentConfiguration";
|
||||
|
||||
import { Node } from "../graph/Node";
|
||||
import { Container } from "../viewer/Container";
|
||||
import { Navigator } from "../viewer/Navigator";
|
||||
import { ISize } from "../render/interfaces/ISize";
|
||||
import { ViewportSize } from "../render/interfaces/ViewportSize";
|
||||
import { DOM } from "../utils/DOM";
|
||||
|
||||
export class ImageComponent extends Component<IComponentConfiguration> {
|
||||
export class ImageComponent extends Component<ComponentConfiguration> {
|
||||
public static componentName: string = "image";
|
||||
|
||||
private _canvasId: string;
|
||||
@ -36,7 +36,7 @@ export class ImageComponent extends Component<IComponentConfiguration> {
|
||||
}
|
||||
|
||||
protected _activate(): void {
|
||||
const canvasSize$: Observable<[HTMLCanvasElement, ISize]> = this._container.domRenderer.element$.pipe(
|
||||
const canvasSize$: Observable<[HTMLCanvasElement, ViewportSize]> = this._container.domRenderer.element$.pipe(
|
||||
map(
|
||||
(): HTMLCanvasElement => {
|
||||
return <HTMLCanvasElement>this._dom.document.getElementById(this._canvasId);
|
||||
@ -46,7 +46,7 @@ export class ImageComponent extends Component<IComponentConfiguration> {
|
||||
return !!canvas;
|
||||
}),
|
||||
map(
|
||||
(canvas: HTMLCanvasElement): [HTMLCanvasElement, ISize] => {
|
||||
(canvas: HTMLCanvasElement): [HTMLCanvasElement, ViewportSize] => {
|
||||
const adaptableDomRenderer: HTMLElement = canvas.parentElement;
|
||||
const width: number = adaptableDomRenderer.offsetWidth;
|
||||
const height: number = adaptableDomRenderer.offsetHeight;
|
||||
@ -54,10 +54,10 @@ export class ImageComponent extends Component<IComponentConfiguration> {
|
||||
return [canvas, { height: height, width: width }];
|
||||
}),
|
||||
distinctUntilChanged(
|
||||
(s1: ISize, s2: ISize): boolean => {
|
||||
(s1: ViewportSize, s2: ViewportSize): boolean => {
|
||||
return s1.height === s2.height && s1.width === s2.width;
|
||||
},
|
||||
([, size]: [HTMLCanvasElement, ISize]): ISize => {
|
||||
([, size]: [HTMLCanvasElement, ViewportSize]): ViewportSize => {
|
||||
return size;
|
||||
}));
|
||||
|
||||
@ -65,7 +65,7 @@ export class ImageComponent extends Component<IComponentConfiguration> {
|
||||
canvasSize$,
|
||||
this._navigator.stateService.currentNode$)
|
||||
.subscribe(
|
||||
([[canvas, size], node]: [[HTMLCanvasElement, ISize], Node]): void => {
|
||||
([[canvas, size], node]: [[HTMLCanvasElement, ViewportSize], Node]): void => {
|
||||
canvas.width = size.width;
|
||||
canvas.height = size.height;
|
||||
canvas
|
||||
@ -80,7 +80,7 @@ export class ImageComponent extends Component<IComponentConfiguration> {
|
||||
this.drawSubscription.unsubscribe();
|
||||
}
|
||||
|
||||
protected _getDefaultConfiguration(): IComponentConfiguration {
|
||||
protected _getDefaultConfiguration(): ComponentConfiguration {
|
||||
return {};
|
||||
}
|
||||
}
|
||||
|
||||
@ -13,14 +13,14 @@ import {
|
||||
} from "rxjs/operators";
|
||||
|
||||
import { Component } from "./Component";
|
||||
import { INavigationConfiguration } from "./interfaces/INavigationConfiguration";
|
||||
import { NavigationConfiguration } from "./interfaces/NavigationConfiguration";
|
||||
|
||||
import { AbortMapillaryError } from "../error/AbortMapillaryError";
|
||||
import { Node } from "../graph/Node";
|
||||
import { EdgeDirection } from "../graph/edge/EdgeDirection";
|
||||
import { IEdge } from "../graph/edge/interfaces/IEdge";
|
||||
import { IEdgeStatus } from "../graph/interfaces/IEdgeStatus";
|
||||
import { IVNodeHash } from "../render/interfaces/IVNodeHash";
|
||||
import { NavigationDirection } from "../graph/edge/NavigationDirection";
|
||||
import { NavigationEdge } from "../graph/edge/interfaces/NavigationEdge";
|
||||
import { NavigationEdgeStatus } from "../graph/interfaces/NavigationEdgeStatus";
|
||||
import { VirtualNodeHash } from "../render/interfaces/VirtualNodeHash";
|
||||
import { Container } from "../viewer/Container";
|
||||
import { Navigator } from "../viewer/Navigator";
|
||||
import { isSpherical } from "../geo/Geo";
|
||||
@ -32,7 +32,7 @@ import { isSpherical } from "../geo/Geo";
|
||||
*
|
||||
* Replaces the functionality in the Direction and Sequence components.
|
||||
*/
|
||||
export class NavigationComponent extends Component<INavigationConfiguration> {
|
||||
export class NavigationComponent extends Component<NavigationConfiguration> {
|
||||
public static componentName: string = "navigation";
|
||||
|
||||
private _renderSubscription: Subscription;
|
||||
@ -46,18 +46,18 @@ export class NavigationComponent extends Component<INavigationConfiguration> {
|
||||
super(name, container, navigator);
|
||||
|
||||
this._seqNames = {};
|
||||
this._seqNames[EdgeDirection[EdgeDirection.Prev]] = "-prev";
|
||||
this._seqNames[EdgeDirection[EdgeDirection.Next]] = "-next";
|
||||
this._seqNames[NavigationDirection[NavigationDirection.Prev]] = "-prev";
|
||||
this._seqNames[NavigationDirection[NavigationDirection.Next]] = "-next";
|
||||
|
||||
this._spaTopNames = {};
|
||||
this._spaTopNames[EdgeDirection[EdgeDirection.TurnLeft]] = "-turn-left";
|
||||
this._spaTopNames[EdgeDirection[EdgeDirection.StepLeft]] = "-left";
|
||||
this._spaTopNames[EdgeDirection[EdgeDirection.StepForward]] = "-forward";
|
||||
this._spaTopNames[EdgeDirection[EdgeDirection.StepRight]] = "-right";
|
||||
this._spaTopNames[EdgeDirection[EdgeDirection.TurnRight]] = "-turn-right";
|
||||
this._spaTopNames[NavigationDirection[NavigationDirection.TurnLeft]] = "-turn-left";
|
||||
this._spaTopNames[NavigationDirection[NavigationDirection.StepLeft]] = "-left";
|
||||
this._spaTopNames[NavigationDirection[NavigationDirection.StepForward]] = "-forward";
|
||||
this._spaTopNames[NavigationDirection[NavigationDirection.StepRight]] = "-right";
|
||||
this._spaTopNames[NavigationDirection[NavigationDirection.TurnRight]] = "-turn-right";
|
||||
this._spaBottomNames = {};
|
||||
this._spaBottomNames[EdgeDirection[EdgeDirection.TurnU]] = "-turn-around";
|
||||
this._spaBottomNames[EdgeDirection[EdgeDirection.StepBackward]] = "-backward";
|
||||
this._spaBottomNames[NavigationDirection[NavigationDirection.TurnU]] = "-turn-around";
|
||||
this._spaBottomNames[NavigationDirection[NavigationDirection.StepBackward]] = "-backward";
|
||||
}
|
||||
|
||||
protected _activate(): void {
|
||||
@ -65,42 +65,42 @@ export class NavigationComponent extends Component<INavigationConfiguration> {
|
||||
this._navigator.stateService.currentNode$,
|
||||
this._configuration$).pipe(
|
||||
switchMap(
|
||||
([node, configuration]: [Node, INavigationConfiguration]): Observable<EdgeDirection[]> => {
|
||||
const sequenceEdges$: Observable<EdgeDirection[]> = configuration.sequence ?
|
||||
([node, configuration]: [Node, NavigationConfiguration]): Observable<NavigationDirection[]> => {
|
||||
const sequenceEdges$: Observable<NavigationDirection[]> = configuration.sequence ?
|
||||
node.sequenceEdges$.pipe(
|
||||
map(
|
||||
(status: IEdgeStatus): EdgeDirection[] => {
|
||||
(status: NavigationEdgeStatus): NavigationDirection[] => {
|
||||
return status.edges
|
||||
.map(
|
||||
(edge: IEdge): EdgeDirection => {
|
||||
(edge: NavigationEdge): NavigationDirection => {
|
||||
return edge.data.direction;
|
||||
});
|
||||
})) :
|
||||
observableOf<EdgeDirection[]>([]);
|
||||
observableOf<NavigationDirection[]>([]);
|
||||
|
||||
const spatialEdges$: Observable<EdgeDirection[]> = !isSpherical(node.cameraType) &&
|
||||
const spatialEdges$: Observable<NavigationDirection[]> = !isSpherical(node.cameraType) &&
|
||||
configuration.spatial ?
|
||||
node.spatialEdges$.pipe(
|
||||
map(
|
||||
(status: IEdgeStatus): EdgeDirection[] => {
|
||||
(status: NavigationEdgeStatus): NavigationDirection[] => {
|
||||
return status.edges
|
||||
.map(
|
||||
(edge: IEdge): EdgeDirection => {
|
||||
(edge: NavigationEdge): NavigationDirection => {
|
||||
return edge.data.direction;
|
||||
});
|
||||
})) :
|
||||
observableOf<EdgeDirection[]>([]);
|
||||
observableOf<NavigationDirection[]>([]);
|
||||
|
||||
return observableCombineLatest(
|
||||
sequenceEdges$,
|
||||
spatialEdges$).pipe(
|
||||
map(
|
||||
([seq, spa]: [EdgeDirection[], EdgeDirection[]]): EdgeDirection[] => {
|
||||
([seq, spa]: [NavigationDirection[], NavigationDirection[]]): NavigationDirection[] => {
|
||||
return seq.concat(spa);
|
||||
}));
|
||||
}),
|
||||
map(
|
||||
(edgeDirections: EdgeDirection[]): IVNodeHash => {
|
||||
(edgeDirections: NavigationDirection[]): VirtualNodeHash => {
|
||||
const seqs: vd.VNode[] = this._createArrowRow(this._seqNames, edgeDirections);
|
||||
const spaTops: vd.VNode[] = this._createArrowRow(this._spaTopNames, edgeDirections);
|
||||
const spaBottoms: vd.VNode[] = this._createArrowRow(this._spaBottomNames, edgeDirections);
|
||||
@ -119,11 +119,11 @@ export class NavigationComponent extends Component<INavigationConfiguration> {
|
||||
this._renderSubscription.unsubscribe();
|
||||
}
|
||||
|
||||
protected _getDefaultConfiguration(): INavigationConfiguration {
|
||||
protected _getDefaultConfiguration(): NavigationConfiguration {
|
||||
return { sequence: true, spatial: true };
|
||||
}
|
||||
|
||||
private _createArrowRow(arrowNames: { [dir: string]: string }, edgeDirections: EdgeDirection[]): vd.VNode[] {
|
||||
private _createArrowRow(arrowNames: { [dir: string]: string }, edgeDirections: NavigationDirection[]): vd.VNode[] {
|
||||
const arrows: vd.VNode[] = [];
|
||||
|
||||
for (const arrowName in arrowNames) {
|
||||
@ -131,7 +131,7 @@ export class NavigationComponent extends Component<INavigationConfiguration> {
|
||||
continue;
|
||||
}
|
||||
|
||||
const direction: EdgeDirection = EdgeDirection[<keyof typeof EdgeDirection>arrowName];
|
||||
const direction: NavigationDirection = NavigationDirection[<keyof typeof NavigationDirection>arrowName];
|
||||
if (edgeDirections.indexOf(direction) !== -1) {
|
||||
arrows.push(this._createVNode(direction, arrowNames[arrowName], "visible"));
|
||||
} else {
|
||||
@ -142,7 +142,7 @@ export class NavigationComponent extends Component<INavigationConfiguration> {
|
||||
return arrows;
|
||||
}
|
||||
|
||||
private _createVNode(direction: EdgeDirection, name: string, visibility: string): vd.VNode {
|
||||
private _createVNode(direction: NavigationDirection, name: string, visibility: string): vd.VNode {
|
||||
return vd.h(
|
||||
`span.mapillary-navigation-button.mapillary-navigation${name}`,
|
||||
{
|
||||
|
||||
@ -25,19 +25,19 @@ import { Component } from "../Component";
|
||||
import { Node } from "../../graph/Node";
|
||||
import { Container } from "../../viewer/Container";
|
||||
import { Navigator } from "../../viewer/Navigator";
|
||||
import { IEdgeStatus } from "../../graph/interfaces/IEdgeStatus";
|
||||
import { NavigationEdgeStatus } from "../../graph/interfaces/NavigationEdgeStatus";
|
||||
import { Sequence } from "../../graph/Sequence";
|
||||
import { ISize } from "../../render/interfaces/ISize";
|
||||
import { IVNodeHash } from "../../render/interfaces/IVNodeHash";
|
||||
import { ViewportSize } from "../../render/interfaces/ViewportSize";
|
||||
import { VirtualNodeHash } from "../../render/interfaces/VirtualNodeHash";
|
||||
import { RenderCamera } from "../../render/RenderCamera";
|
||||
import { IDirectionConfiguration } from "../interfaces/IDirectionConfiguration";
|
||||
import { DirectionConfiguration } from "../interfaces/DirectionConfiguration";
|
||||
import { DirectionDOMRenderer } from "./DirectionDOMRenderer";
|
||||
|
||||
/**
|
||||
* @class DirectionComponent
|
||||
* @classdesc Component showing navigation arrows for steps and turns.
|
||||
*/
|
||||
export class DirectionComponent extends Component<IDirectionConfiguration> {
|
||||
export class DirectionComponent extends Component<DirectionConfiguration> {
|
||||
/** @inheritdoc */
|
||||
public static componentName: string = "direction";
|
||||
|
||||
@ -140,13 +140,13 @@ export class DirectionComponent extends Component<IDirectionConfiguration> {
|
||||
protected _activate(): void {
|
||||
this._configurationSubscription = this._configuration$
|
||||
.subscribe(
|
||||
(configuration: IDirectionConfiguration): void => {
|
||||
(configuration: DirectionConfiguration): void => {
|
||||
this._renderer.setConfiguration(configuration);
|
||||
});
|
||||
|
||||
this._resizeSubscription = this._container.renderService.size$
|
||||
.subscribe(
|
||||
(size: ISize): void => {
|
||||
(size: ViewportSize): void => {
|
||||
this._renderer.resize(size);
|
||||
});
|
||||
|
||||
@ -158,7 +158,7 @@ export class DirectionComponent extends Component<IDirectionConfiguration> {
|
||||
}),
|
||||
withLatestFrom(this._configuration$),
|
||||
switchMap(
|
||||
([node, configuration]: [Node, IDirectionConfiguration]): Observable<[IEdgeStatus, Sequence]> => {
|
||||
([node, configuration]: [Node, DirectionConfiguration]): Observable<[NavigationEdgeStatus, Sequence]> => {
|
||||
return observableCombineLatest(
|
||||
node.spatialEdges$,
|
||||
configuration.distinguishSequence ?
|
||||
@ -173,7 +173,7 @@ export class DirectionComponent extends Component<IDirectionConfiguration> {
|
||||
observableOf<Sequence>(null));
|
||||
}))
|
||||
.subscribe(
|
||||
([edgeStatus, sequence]: [IEdgeStatus, Sequence]): void => {
|
||||
([edgeStatus, sequence]: [NavigationEdgeStatus, Sequence]): void => {
|
||||
this._renderer.setEdges(edgeStatus, sequence);
|
||||
});
|
||||
|
||||
@ -191,7 +191,7 @@ export class DirectionComponent extends Component<IDirectionConfiguration> {
|
||||
return renderer.needsRender;
|
||||
}),
|
||||
map(
|
||||
(renderer: DirectionDOMRenderer): IVNodeHash => {
|
||||
(renderer: DirectionDOMRenderer): VirtualNodeHash => {
|
||||
return { name: this._name, vnode: renderer.render(this._navigator) };
|
||||
}))
|
||||
.subscribe(this._container.domRenderer.render$);
|
||||
@ -235,7 +235,7 @@ export class DirectionComponent extends Component<IDirectionConfiguration> {
|
||||
this._resizeSubscription.unsubscribe();
|
||||
}
|
||||
|
||||
protected _getDefaultConfiguration(): IDirectionConfiguration {
|
||||
protected _getDefaultConfiguration(): DirectionConfiguration {
|
||||
return {
|
||||
distinguishSequence: false,
|
||||
maxWidth: 460,
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
import { Spatial } from "../../geo/Spatial";
|
||||
import { ISize } from "../../render/interfaces/ISize";
|
||||
import { IDirectionConfiguration } from "../interfaces/IDirectionConfiguration";
|
||||
import { ViewportSize } from "../../render/interfaces/ViewportSize";
|
||||
import { DirectionConfiguration } from "../interfaces/DirectionConfiguration";
|
||||
|
||||
/**
|
||||
* @class DirectionDOMCalculator
|
||||
@ -40,7 +40,7 @@ export class DirectionDOMCalculator {
|
||||
|
||||
private _shadowOffset: number;
|
||||
|
||||
constructor(configuration: IDirectionConfiguration, size: ISize) {
|
||||
constructor(configuration: DirectionConfiguration, size: ViewportSize) {
|
||||
this._spatial = new Spatial();
|
||||
|
||||
this._minThresholdWidth = 320;
|
||||
@ -124,10 +124,10 @@ export class DirectionDOMCalculator {
|
||||
/**
|
||||
* Configures the min and max width values.
|
||||
*
|
||||
* @param {IDirectionConfiguration} configuration Configuration
|
||||
* @param {DirectionConfiguration} configuration Configuration
|
||||
* with min and max width values.
|
||||
*/
|
||||
public configure(configuration: IDirectionConfiguration): void {
|
||||
public configure(configuration: DirectionConfiguration): void {
|
||||
this._configure(configuration);
|
||||
this._reset();
|
||||
}
|
||||
@ -136,9 +136,9 @@ export class DirectionDOMCalculator {
|
||||
* Resizes all properties according to the width and height
|
||||
* of the size object.
|
||||
*
|
||||
* @param {ISize} size The size of the container element.
|
||||
* @param {ViewportSize} size The size of the container element.
|
||||
*/
|
||||
public resize(size: ISize): void {
|
||||
public resize(size: ViewportSize): void {
|
||||
this._resize(size);
|
||||
this._reset();
|
||||
}
|
||||
@ -168,12 +168,12 @@ export class DirectionDOMCalculator {
|
||||
return this.angleToCoordinates(relativeAngle);
|
||||
}
|
||||
|
||||
private _configure(configuration: IDirectionConfiguration): void {
|
||||
private _configure(configuration: DirectionConfiguration): void {
|
||||
this._minWidth = configuration.minWidth;
|
||||
this._maxWidth = this._getMaxWidth(configuration.minWidth, configuration.maxWidth);
|
||||
}
|
||||
|
||||
private _resize(size: ISize): void {
|
||||
private _resize(size: ViewportSize): void {
|
||||
this._elementWidth = size.width;
|
||||
this._elementHeight = size.height;
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user