Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

change widget home button to use camera flights #803

Merged
merged 14 commits into from
Jun 11, 2013
18 changes: 0 additions & 18 deletions Source/Scene/CameraFlightPath.js
Original file line number Diff line number Diff line change
@@ -558,15 +558,6 @@ define([
throw new DeveloperError('frameState.mode cannot be SceneMode.MORPHING');
}

if (Cartesian3.equalsEpsilon(c3destination, frameState.camera.position, CesiumMath.EPSILON6)) {
if (frameState.mode !== SceneMode.SCENE2D) {
return {
duration : 0,
onComplete : description.onComplete
};
}
}

var createAnimationDescription = clone(description);
createAnimationDescription.destination = c3destination;
return this.createAnimation(frameState, createAnimationDescription);
@@ -607,15 +598,6 @@ define([
var camera = frameState.camera;
camera.controller.getExtentCameraCoordinates(extent, c3destination);

if (Cartesian3.equalsEpsilon(c3destination, frameState.camera.position, CesiumMath.EPSILON6)) {
if (frameState.mode !== SceneMode.SCENE2D) {
return {
duration : 0,
onComplete : description.onComplete
};
}
}

createAnimationDescription.destination = c3destination;
return this.createAnimation(frameState, createAnimationDescription);
};
134 changes: 134 additions & 0 deletions Specs/Scene/CameraFlightPathSpec.js
Original file line number Diff line number Diff line change
@@ -579,4 +579,138 @@ defineSuite([
expect(frameState.camera.position).toEqual(destination);
});

it('duration is 0 when destination is the same as camera position in 2D', function() {
frameState.mode = SceneMode.SCENE2D;
var camera = frameState.camera;

camera.position = new Cartesian3(0.0, 0.0, 1000.0);
camera.direction = Cartesian3.UNIT_Z.negate();
camera.up = Cartesian3.UNIT_Y.clone();
camera.right = camera.direction.cross(camera.up);
camera.frustum = createOrthographicFrustum();
var frustum = camera.frustum;
var destination = camera.position.clone();
destination.z = Math.max(frustum.right - frustum.left, frustum.top - frustum.bottom);

var flight = CameraFlightPath.createAnimation(frameState, {
destination : destination
});

expect(flight.duration).toEqual(0);
});

it('duration is 0 when destination is the same as camera position in 3D', function() {
frameState.mode = SceneMode.SCENE3D;
var camera = frameState.camera;

camera.position = new Cartesian3(0.0, 0.0, 1000.0);
camera.direction = Cartesian3.UNIT_Z.negate();
camera.up = Cartesian3.UNIT_Y.clone();
camera.right = camera.direction.cross(camera.up);
camera.frustum = createOrthographicFrustum();

var flight = CameraFlightPath.createAnimation(frameState, {
destination : camera.position
});

expect(flight.duration).toEqual(0);
});

it('duration is 0 when destination is the same as camera position in CV', function() {
frameState.mode = SceneMode.COLUMBUS_VIEW;
var camera = frameState.camera;

camera.position = new Cartesian3(0.0, 0.0, 1000.0);
camera.direction = Cartesian3.UNIT_Z.negate();
camera.up = Cartesian3.UNIT_Y.clone();
camera.right = camera.direction.cross(camera.up);

var flight = CameraFlightPath.createAnimation(frameState, {
destination : camera.position
});

expect(flight.duration).toEqual(0);
});

it('creates an animation in 2D 0 duration', function() {
frameState.mode = SceneMode.SCENE2D;
var camera = frameState.camera;

camera.position = new Cartesian3(0.0, 0.0, 1000.0);
camera.direction = Cartesian3.UNIT_Z.negate();
camera.up = Cartesian3.UNIT_Y.clone();
camera.right = camera.direction.cross(camera.up);
camera.frustum = createOrthographicFrustum();

var startPosition = camera.position.clone();
var startDirection = camera.direction.clone();
var startUp = camera.up.clone();

var endPosition = startPosition.add(new Cartesian3(-6e6 * Math.PI, 6e6 * CesiumMath.PI_OVER_FOUR, 100.0));
var endDirection = startDirection.clone();
var endUp = startUp.negate();

var flight = CameraFlightPath.createAnimation(frameState, {
destination : endPosition,
direction : endDirection,
up : endUp,
duration : 0
});

expect(typeof flight.onComplete).toEqual('function');
flight.onComplete();
expect(camera.position.x).toEqualEpsilon(endPosition.x, CesiumMath.EPSILON12);
expect(camera.position.y).toEqualEpsilon(endPosition.y, CesiumMath.EPSILON12);
expect(camera.direction).toEqualEpsilon(endDirection, CesiumMath.EPSILON12);
expect(camera.up).toEqualEpsilon(endUp, CesiumMath.EPSILON12);
expect(camera.frustum.right - camera.frustum.left).toEqual(endPosition.z);
});

it('creates an animation in Columbus view 0 duration', function() {
frameState.mode = SceneMode.COLUMBUS_VIEW;
var camera = frameState.camera;

camera.position = new Cartesian3(0.0, 0.0, 1000.0);
camera.direction = Cartesian3.UNIT_Z.negate();
camera.up = Cartesian3.UNIT_Y.clone();
camera.right = camera.direction.cross(camera.up);

var startPosition = camera.position.clone();
var endPosition = startPosition.add(new Cartesian3(-6e6 * Math.PI, 6e6 * CesiumMath.PI_OVER_FOUR, 100.0));

var flight = CameraFlightPath.createAnimation(frameState, {
destination : endPosition,
duration : 0
});

expect(typeof flight.onComplete).toEqual('function');
flight.onComplete();
expect(camera.position).toEqualEpsilon(endPosition, CesiumMath.EPSILON12);
});

it('creates an animation in 3d 0 duration', function() {
var camera = frameState.camera;

var startPosition = camera.position.clone();
var startDirection = camera.direction.clone();
var startUp = camera.up.clone();

var endPosition = startPosition.negate();
var endDirection = startDirection.negate();
var endUp = startUp.negate();

var flight = CameraFlightPath.createAnimation(frameState, {
destination : endPosition,
direction : endDirection,
up : endUp,
duration : 0
});

expect(typeof flight.onComplete).toEqual('function');
flight.onComplete();
expect(camera.position).toEqualEpsilon(endPosition, CesiumMath.EPSILON12);
expect(camera.direction).toEqualEpsilon(endDirection, CesiumMath.EPSILON12);
expect(camera.up).toEqualEpsilon(endUp, CesiumMath.EPSILON12);
});

});