Added support for czml Billboard rotation and alignedAxis

This commit is contained in:
Caleb Morse 2013-07-17 12:09:47 -06:00
parent eee0e9823d
commit 2db02a2edf
4 changed files with 89 additions and 15 deletions

View File

@ -54,6 +54,18 @@ define([
* @default undefined
*/
this.scale = undefined;
/**
* A DynamicProperty of type CzmlNumber which determines the billboard's rotation.
* @type {DynamicProperty}
* @default undefined
*/
this.rotation = undefined;
/**
* A DynamicProperty of type CzmlCartesian3 which determines the billboard's aligned axis.
* @type {DynamicProperty}
* @default undefined
*/
this.alignedAxis = undefined;
/**
* A DynamicProperty of type CzmlHorizontalOrigin which determines the billboard's horizontal origin.
* @type {DynamicProperty}
@ -182,6 +194,24 @@ define([
scale.processCzmlIntervals(billboardData.scale, interval);
}
if (typeof billboardData.rotation !== 'undefined') {
var rotation = billboard.rotation;
if (typeof rotation === 'undefined') {
billboard.rotation = rotation = new DynamicProperty(CzmlNumber);
billboardUpdated = true;
}
rotation.processCzmlIntervals(billboardData.rotation, interval);
}
if (typeof billboardData.alignedAxis !== 'undefined') {
var alignedAxis = billboard.alignedAxis;
if (typeof alignedAxis === 'undefined') {
billboard.alignedAxis = alignedAxis = new DynamicProperty(CzmlCartesian3);
billboardUpdated = true;
}
alignedAxis.processCzmlIntervals(billboardData.alignedAxis, interval);
}
if (typeof billboardData.show !== 'undefined') {
var show = billboard.show;
if (typeof show === 'undefined') {
@ -230,6 +260,8 @@ define([
targetBillboard.image = defaultValue(targetBillboard.image, billboardToMerge.image);
targetBillboard.pixelOffset = defaultValue(targetBillboard.pixelOffset, billboardToMerge.pixelOffset);
targetBillboard.scale = defaultValue(targetBillboard.scale, billboardToMerge.scale);
targetBillboard.rotation = defaultValue(targetBillboard.rotation, billboardToMerge.rotation);
targetBillboard.alignedAxis = defaultValue(targetBillboard.alignedAxis, billboardToMerge.alignedAxis);
targetBillboard.show = defaultValue(targetBillboard.show, billboardToMerge.show);
targetBillboard.verticalOrigin = defaultValue(targetBillboard.verticalOrigin, billboardToMerge.verticalOrigin);
}

View File

@ -308,6 +308,22 @@ define([
}
}
property = dynamicBillboard.rotation;
if (typeof property !== 'undefined') {
var rotation = property.getValue(time);
if (typeof rotation !== 'undefined') {
billboard.setRotation(rotation);
}
}
property = dynamicBillboard.alignedAxis;
if (typeof property !== 'undefined') {
var alignedAxis = property.getValue(time);
if (typeof alignedAxis !== 'undefined') {
billboard.setAlignedAxis(alignedAxis);
}
}
property = dynamicBillboard.horizontalOrigin;
if (typeof property !== 'undefined') {
var horizontalOrigin = property.getValue(time);
@ -344,4 +360,4 @@ define([
};
return DynamicBillboardVisualizer;
});
});

View File

@ -115,6 +115,8 @@ defineSuite([
it('mergeProperties does not change a fully configured billboard', function() {
var expectedImage = 'image';
var expectedScale = 'scale';
var expectedRotation = 'rotation';
var expectedAlignedAxis = 'alignedAxis';
var expectedHorizontalOrigin = 'horizontalOrigin';
var expectedVerticalOrigin = 'verticalOrigin';
var expectedColor = 'color';
@ -126,17 +128,21 @@ defineSuite([
objectToMerge.billboard = new DynamicBillboard();
objectToMerge.billboard.image = 1;
objectToMerge.billboard.scale = 2;
objectToMerge.billboard.horizontalOrigin = 3;
objectToMerge.billboard.verticalOrigin = 4;
objectToMerge.billboard.color = 5;
objectToMerge.billboard.eyeOffset = 6;
objectToMerge.billboard.pixelOffset = 7;
objectToMerge.billboard.show = 8;
objectToMerge.billboard.rotation = 3;
objectToMerge.billboard.alignedAxis = 4;
objectToMerge.billboard.horizontalOrigin = 5;
objectToMerge.billboard.verticalOrigin = 6;
objectToMerge.billboard.color = 7;
objectToMerge.billboard.eyeOffset = 8;
objectToMerge.billboard.pixelOffset = 9;
objectToMerge.billboard.show = 10;
var targetObject = new DynamicObject('targetObject');
targetObject.billboard = new DynamicBillboard();
targetObject.billboard.image = expectedImage;
targetObject.billboard.scale = expectedScale;
targetObject.billboard.rotation = expectedRotation;
targetObject.billboard.alignedAxis = expectedAlignedAxis;
targetObject.billboard.horizontalOrigin = expectedHorizontalOrigin;
targetObject.billboard.verticalOrigin = expectedVerticalOrigin;
targetObject.billboard.color = expectedColor;
@ -148,6 +154,8 @@ defineSuite([
expect(targetObject.billboard.image).toEqual(expectedImage);
expect(targetObject.billboard.scale).toEqual(expectedScale);
expect(targetObject.billboard.rotation).toEqual(expectedRotation);
expect(targetObject.billboard.alignedAxis).toEqual(expectedAlignedAxis);
expect(targetObject.billboard.horizontalOrigin).toEqual(expectedHorizontalOrigin);
expect(targetObject.billboard.verticalOrigin).toEqual(expectedVerticalOrigin);
expect(targetObject.billboard.color).toEqual(expectedColor);
@ -161,12 +169,14 @@ defineSuite([
objectToMerge.billboard = new DynamicBillboard();
objectToMerge.billboard.image = 1;
objectToMerge.billboard.scale = 2;
objectToMerge.billboard.horizontalOrigin = 3;
objectToMerge.billboard.verticalOrigin = 4;
objectToMerge.billboard.color = 5;
objectToMerge.billboard.eyeOffset = 6;
objectToMerge.billboard.pixelOffset = 7;
objectToMerge.billboard.show = 8;
objectToMerge.billboard.rotation = 3;
objectToMerge.billboard.alignedAxis = 4;
objectToMerge.billboard.horizontalOrigin = 5;
objectToMerge.billboard.verticalOrigin = 6;
objectToMerge.billboard.color = 7;
objectToMerge.billboard.eyeOffset = 8;
objectToMerge.billboard.pixelOffset = 9;
objectToMerge.billboard.show = 10;
var targetObject = new DynamicObject('targetObject');
@ -174,6 +184,8 @@ defineSuite([
expect(targetObject.billboard.image).toEqual(objectToMerge.billboard.image);
expect(targetObject.billboard.scale).toEqual(objectToMerge.billboard.scale);
expect(targetObject.billboard.rotation).toEqual(objectToMerge.billboard.rotation);
expect(targetObject.billboard.alignedAxis).toEqual(objectToMerge.billboard.alignedAxis);
expect(targetObject.billboard.horizontalOrigin).toEqual(objectToMerge.billboard.horizontalOrigin);
expect(targetObject.billboard.verticalOrigin).toEqual(objectToMerge.billboard.verticalOrigin);
expect(targetObject.billboard.color).toEqual(objectToMerge.billboard.color);
@ -185,6 +197,8 @@ defineSuite([
it('mergeProperties does not change when used with an undefined billboard', function() {
var expectedImage = 'image';
var expectedScale = 'scale';
var expectedRotation = 'rotation';
var expectedAlignedAxis = 'alignedAxis';
var expectedHorizontalOrigin = 'horizontalOrigin';
var expectedVerticalOrigin = 'verticalOrigin';
var expectedColor = 'color';
@ -198,6 +212,8 @@ defineSuite([
targetObject.billboard = new DynamicBillboard();
targetObject.billboard.image = expectedImage;
targetObject.billboard.scale = expectedScale;
targetObject.billboard.rotation = expectedRotation;
targetObject.billboard.alignedAxis = expectedAlignedAxis;
targetObject.billboard.horizontalOrigin = expectedHorizontalOrigin;
targetObject.billboard.verticalOrigin = expectedVerticalOrigin;
targetObject.billboard.color = expectedColor;
@ -209,6 +225,8 @@ defineSuite([
expect(targetObject.billboard.image).toEqual(expectedImage);
expect(targetObject.billboard.scale).toEqual(expectedScale);
expect(targetObject.billboard.rotation).toEqual(expectedRotation);
expect(targetObject.billboard.alignedAxis).toEqual(expectedAlignedAxis);
expect(targetObject.billboard.horizontalOrigin).toEqual(expectedHorizontalOrigin);
expect(targetObject.billboard.verticalOrigin).toEqual(expectedVerticalOrigin);
expect(targetObject.billboard.color).toEqual(expectedColor);
@ -223,4 +241,4 @@ defineSuite([
DynamicBillboard.undefineProperties(testObject);
expect(testObject.billboard).toBeUndefined();
});
});
});

View File

@ -144,6 +144,8 @@ defineSuite([
billboard.image = new MockProperty('Data/Images/Blue.png');
billboard.eyeOffset = new MockProperty(new Cartesian3(1.0, 2.0, 3.0));
billboard.scale = new MockProperty(12.5);
billboard.rotation = new MockProperty(1.5);
billboard.alignedAxis = new MockProperty(Cartesian3.UNIT_Z);
billboard.horizontalOrigin = new MockProperty(HorizontalOrigin.RIGHT);
billboard.verticalOrigin = new MockProperty(VerticalOrigin.TOP);
billboard.pixelOffset = new MockProperty(new Cartesian2(3, 2));
@ -161,6 +163,8 @@ defineSuite([
expect(bb.getColor()).toEqual(testObject.billboard.color.getValue(time));
expect(bb.getEyeOffset()).toEqual(testObject.billboard.eyeOffset.getValue(time));
expect(bb.getScale()).toEqual(testObject.billboard.scale.getValue(time));
expect(bb.getRotation()).toEqual(testObject.billboard.rotation.getValue(time));
expect(bb.getAlignedAxis()).toEqual(testObject.billboard.alignedAxis.getValue(time));
expect(bb.getHorizontalOrigin()).toEqual(testObject.billboard.horizontalOrigin.getValue(time));
expect(bb.getVerticalOrigin()).toEqual(testObject.billboard.verticalOrigin.getValue(time));
expect(bb.getPixelOffset()).toEqual(testObject.billboard.pixelOffset.getValue(time));
@ -176,6 +180,8 @@ defineSuite([
billboard.image = new MockProperty('Data/Images/Green.png');
billboard.eyeOffset = new MockProperty(new Cartesian3(2.0, 3.0, 1.0));
billboard.scale = new MockProperty(2.5);
billboard.rotation = new MockProperty(2.9);
billboard.alignedAxis = new MockProperty(Cartesian3.UNIT_Y);
billboard.horizontalOrigin = new MockProperty(HorizontalOrigin.LEFT);
billboard.verticalOrigin = new MockProperty(VerticalOrigin.BOTTOM);
billboard.pixelOffset = new MockProperty(new Cartesian2(2, 3));
@ -188,6 +194,8 @@ defineSuite([
expect(bb.getColor()).toEqual(testObject.billboard.color.getValue(time));
expect(bb.getEyeOffset()).toEqual(testObject.billboard.eyeOffset.getValue(time));
expect(bb.getScale()).toEqual(testObject.billboard.scale.getValue(time));
expect(bb.getRotation()).toEqual(testObject.billboard.rotation.getValue(time));
expect(bb.getAlignedAxis()).toEqual(testObject.billboard.alignedAxis.getValue(time));
expect(bb.getHorizontalOrigin()).toEqual(testObject.billboard.horizontalOrigin.getValue(time));
expect(bb.getVerticalOrigin()).toEqual(testObject.billboard.verticalOrigin.getValue(time));
expect(bb.getPixelOffset()).toEqual(testObject.billboard.pixelOffset.getValue(time));
@ -290,4 +298,4 @@ defineSuite([
bb = billboardCollection.get(0);
expect(bb.dynamicObject).toEqual(testObject2);
});
}, 'WebGL');
}, 'WebGL');