You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
215 lines
7.4 KiB
JavaScript
215 lines
7.4 KiB
JavaScript
import { Cartesian3 } from "../../Source/Cesium.js";
|
|
import { Ellipsoid } from "../../Source/Cesium.js";
|
|
import { Event } from "../../Source/Cesium.js";
|
|
import { ExtrapolationType } from "../../Source/Cesium.js";
|
|
import { JulianDate } from "../../Source/Cesium.js";
|
|
import { Quaternion } from "../../Source/Cesium.js";
|
|
import { Transforms } from "../../Source/Cesium.js";
|
|
import { CallbackProperty } from "../../Source/Cesium.js";
|
|
import { SampledPositionProperty } from "../../Source/Cesium.js";
|
|
import { VelocityOrientationProperty } from "../../Source/Cesium.js";
|
|
|
|
describe("DataSources/VelocityOrientationProperty", function () {
|
|
var time = JulianDate.now();
|
|
|
|
it("can default construct", function () {
|
|
var property = new VelocityOrientationProperty();
|
|
expect(property.isConstant).toBe(true);
|
|
expect(property.definitionChanged).toBeInstanceOf(Event);
|
|
expect(property.position).toBeUndefined();
|
|
expect(property.ellipsoid).toBe(Ellipsoid.WGS84);
|
|
expect(property.getValue(time)).toBeUndefined();
|
|
});
|
|
|
|
it("can construct with arguments", function () {
|
|
var position = new SampledPositionProperty();
|
|
var property = new VelocityOrientationProperty(
|
|
position,
|
|
Ellipsoid.UNIT_SPHERE
|
|
);
|
|
expect(property.isConstant).toBe(true);
|
|
expect(property.definitionChanged).toBeInstanceOf(Event);
|
|
expect(property.position).toBe(position);
|
|
expect(property.ellipsoid).toBe(Ellipsoid.UNIT_SPHERE);
|
|
expect(property.getValue(time)).toBeUndefined();
|
|
});
|
|
|
|
it("setting position raises definitionChanged event", function () {
|
|
var property = new VelocityOrientationProperty();
|
|
|
|
var listener = jasmine.createSpy("listener");
|
|
property.definitionChanged.addEventListener(listener);
|
|
|
|
var position = new SampledPositionProperty();
|
|
property.position = position;
|
|
expect(listener).toHaveBeenCalledWith(property);
|
|
});
|
|
|
|
it("subscribes/unsubscribes to position definitionChanged and propagates up", function () {
|
|
var position = new SampledPositionProperty();
|
|
var property = new VelocityOrientationProperty(position);
|
|
|
|
var listener = jasmine.createSpy("listener");
|
|
property.definitionChanged.addEventListener(listener);
|
|
|
|
//Position changing should raise out property change event
|
|
position.definitionChanged.raiseEvent(position);
|
|
expect(listener).toHaveBeenCalledWith(property);
|
|
|
|
//Make sure it unsubscribes when value is changed
|
|
property.position = undefined;
|
|
|
|
listener.calls.reset();
|
|
position.definitionChanged.raiseEvent(position);
|
|
expect(listener.calls.count()).toBe(0);
|
|
});
|
|
|
|
it("setting position does not raise definitionChanged event for same data", function () {
|
|
var position = new SampledPositionProperty();
|
|
var property = new VelocityOrientationProperty(position);
|
|
|
|
var listener = jasmine.createSpy("listener");
|
|
property.definitionChanged.addEventListener(listener);
|
|
|
|
property.position = position;
|
|
expect(listener.calls.count()).toBe(0);
|
|
});
|
|
|
|
it("setting ellipsoid raises definitionChanged event", function () {
|
|
var property = new VelocityOrientationProperty();
|
|
|
|
var listener = jasmine.createSpy("listener");
|
|
property.definitionChanged.addEventListener(listener);
|
|
|
|
property.ellipsoid = Ellipsoid.UNIT_SPHERE;
|
|
expect(listener).toHaveBeenCalledWith(property);
|
|
});
|
|
|
|
it("setting ellipsoid does not raise definitionChanged event for same data", function () {
|
|
var property = new VelocityOrientationProperty();
|
|
|
|
var listener = jasmine.createSpy("listener");
|
|
property.definitionChanged.addEventListener(listener);
|
|
|
|
property.ellipsoid = Ellipsoid.WGS84;
|
|
expect(listener.calls.count()).toBe(0);
|
|
});
|
|
|
|
it("works without result parameter", function () {
|
|
var times = [new JulianDate(0, 0), new JulianDate(0, 1.0 / 60.0)];
|
|
var values = [
|
|
Cartesian3.fromDegrees(0, 0, 0),
|
|
Cartesian3.fromDegrees(1, 0, 0),
|
|
];
|
|
var velocity = Cartesian3.subtract(values[1], values[0], new Cartesian3());
|
|
Cartesian3.normalize(velocity, velocity);
|
|
|
|
var position = new SampledPositionProperty();
|
|
position.addSamples(times, values);
|
|
|
|
var property = new VelocityOrientationProperty(position);
|
|
|
|
var matrix = Transforms.rotationMatrixFromPositionVelocity(
|
|
position.getValue(times[0]),
|
|
velocity
|
|
);
|
|
expect(property.getValue(times[0])).toEqual(
|
|
Quaternion.fromRotationMatrix(matrix)
|
|
);
|
|
|
|
matrix = Transforms.rotationMatrixFromPositionVelocity(
|
|
position.getValue(times[0]),
|
|
velocity
|
|
);
|
|
expect(property.getValue(times[1])).toEqual(
|
|
Quaternion.fromRotationMatrix(matrix)
|
|
);
|
|
});
|
|
|
|
it("works with result parameter", function () {
|
|
var times = [new JulianDate(0, 0), new JulianDate(0, 1.0 / 60.0)];
|
|
var values = [
|
|
Cartesian3.fromDegrees(0, 0, 0),
|
|
Cartesian3.fromDegrees(1, 0, 0),
|
|
];
|
|
var velocity = Cartesian3.subtract(values[1], values[0], new Cartesian3());
|
|
Cartesian3.normalize(velocity, velocity);
|
|
|
|
var position = new SampledPositionProperty();
|
|
position.addSamples(times, values);
|
|
|
|
var property = new VelocityOrientationProperty(position);
|
|
|
|
var expected = new Cartesian3();
|
|
var result = property.getValue(times[0], expected);
|
|
expect(result).toBe(expected);
|
|
|
|
var matrix = Transforms.rotationMatrixFromPositionVelocity(
|
|
position.getValue(times[0]),
|
|
velocity
|
|
);
|
|
expect(expected).toEqual(Quaternion.fromRotationMatrix(matrix));
|
|
});
|
|
|
|
it("is undefined at zero velocity", function () {
|
|
var position = new CallbackProperty(function () {
|
|
return Cartesian3.fromDegrees(0, 0, 0);
|
|
}, false);
|
|
|
|
var property = new VelocityOrientationProperty(position);
|
|
expect(property.getValue(new JulianDate())).toBeUndefined();
|
|
});
|
|
|
|
it("returns undefined when position value is undefined", function () {
|
|
var position = new SampledPositionProperty();
|
|
position.addSample(new JulianDate(1, 0), Cartesian3.fromDegrees(0, 0, 0));
|
|
position.forwardExtrapolationType = ExtrapolationType.NONE;
|
|
position.backwardExtrapolationType = ExtrapolationType.NONE;
|
|
|
|
var property = new VelocityOrientationProperty(position);
|
|
|
|
var result = property.getValue(new JulianDate());
|
|
expect(result).toBeUndefined();
|
|
});
|
|
|
|
it("returns undefined when position has exactly one value", function () {
|
|
var position = new SampledPositionProperty();
|
|
position.addSample(new JulianDate(1, 0), Cartesian3.fromDegrees(0, 0, 0));
|
|
position.forwardExtrapolationType = ExtrapolationType.NONE;
|
|
position.backwardExtrapolationType = ExtrapolationType.NONE;
|
|
|
|
var property = new VelocityOrientationProperty(position);
|
|
|
|
var result = property.getValue(new JulianDate(1, 0));
|
|
expect(result).toBeUndefined();
|
|
});
|
|
|
|
it("equals works", function () {
|
|
var position = new SampledPositionProperty();
|
|
|
|
var left = new VelocityOrientationProperty();
|
|
var right = new VelocityOrientationProperty();
|
|
|
|
expect(left.equals(right)).toBe(true);
|
|
|
|
left.position = position;
|
|
expect(left.equals(right)).toBe(false);
|
|
|
|
right.position = position;
|
|
expect(left.equals(right)).toBe(true);
|
|
|
|
left.ellipsoid = Ellipsoid.UNIT_SPHERE;
|
|
expect(left.equals(right)).toBe(false);
|
|
|
|
right.ellipsoid = Ellipsoid.UNIT_SPHERE;
|
|
expect(left.equals(right)).toBe(true);
|
|
});
|
|
|
|
it("getValue throws without time", function () {
|
|
var property = new VelocityOrientationProperty();
|
|
expect(function () {
|
|
property.getValue();
|
|
}).toThrowDeveloperError();
|
|
});
|
|
});
|