Skip to content

Commit

Permalink
Merge pull request CesiumGS#1495 from AnalyticalGraphicsInc/czml-refe…
Browse files Browse the repository at this point in the history
…renceFrame

Tweak CZML reference frame handling
  • Loading branch information
shunter committed Feb 21, 2014
2 parents 88a96ab + 7fe2d97 commit 67be26b
Show file tree
Hide file tree
Showing 2 changed files with 62 additions and 4 deletions.
8 changes: 4 additions & 4 deletions Source/DynamicScene/CzmlDataSource.js
Original file line number Diff line number Diff line change
Expand Up @@ -545,7 +545,7 @@ define(['../Core/Cartesian2',
combinedInterval = constrainedInterval;
}

var referenceFrame = ReferenceFrame[defaultValue(packetData.referenceFrame, "FIXED")];
var referenceFrame = defaultValue(ReferenceFrame[packetData.referenceFrame], undefined);
var unwrappedInterval = unwrapCartesianInterval(packetData);
var hasInterval = defined(combinedInterval) && !combinedInterval.equals(Iso8601.MAXIMUM_INTERVAL);
var packedLength = Cartesian3.packedLength;
Expand All @@ -570,7 +570,7 @@ define(['../Core/Cartesian2',
//Without an interval, any sampled value is infinite, meaning it completely
//replaces any non-sampled property that may exist.
if (isSampled && !hasInterval) {
if (!(property instanceof SampledPositionProperty) || property.referenceFrame !== referenceFrame) {
if (!(property instanceof SampledPositionProperty) || (defined(referenceFrame) && property.referenceFrame !== referenceFrame)) {
property = new SampledPositionProperty(referenceFrame);
object[propertyName] = property;
propertyCreated = true;
Expand All @@ -597,7 +597,7 @@ define(['../Core/Cartesian2',
propertyCreated = true;
}

if (property instanceof TimeIntervalCollectionPositionProperty && property.referenceFrame === referenceFrame) {
if (property instanceof TimeIntervalCollectionPositionProperty && (defined(referenceFrame) && property.referenceFrame === referenceFrame)) {
//If we create a collection, or it already existed, use it.
property.intervals.addInterval(combinedInterval);
} else if (property instanceof CompositePositionProperty) {
Expand Down Expand Up @@ -650,7 +650,7 @@ define(['../Core/Cartesian2',
//Check if the interval already exists in the composite
var intervals = property.intervals;
interval = intervals.findInterval(combinedInterval.start, combinedInterval.stop, combinedInterval.isStartIncluded, combinedInterval.isStopIncluded);
if (!defined(interval) || !(interval.data instanceof SampledPositionProperty) || interval.data.referenceFrame !== referenceFrame) {
if (!defined(interval) || !(interval.data instanceof SampledPositionProperty) || (defined(referenceFrame) && interval.data.referenceFrame !== referenceFrame)) {
//If not, create a SampledPositionProperty for it.
interval = combinedInterval.clone();
interval.data = new SampledPositionProperty(referenceFrame);
Expand Down
58 changes: 58 additions & 0 deletions Specs/DynamicScene/CzmlDataSourceSpec.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ defineSuite([
'Core/defined',
'Core/Ellipsoid',
'Core/Quaternion',
'Core/ReferenceFrame',
'Core/Spherical',
'DynamicScene/DynamicBillboard',
'DynamicScene/DynamicObject',
Expand All @@ -35,6 +36,7 @@ defineSuite([
defined,
Ellipsoid,
Quaternion,
ReferenceFrame,
Spherical,
DynamicBillboard,
DynamicObject,
Expand Down Expand Up @@ -771,6 +773,62 @@ defineSuite([
expect(resultCartesian).toEqual(Ellipsoid.WGS84.cartographicToCartesian(cartographic));
});

it('Can set reference frame', function() {
var epoch = new JulianDate();
var dataSource = new CzmlDataSource();

var czml = {
position : {
referenceFrame : "INERTIAL",
epoch : epoch.toIso8601(),
cartesian : [1.0, 2.0, 3.0]
}
};

dataSource.load(czml);
var dynamicObject = dataSource.getDynamicObjectCollection().getObjects()[0];
expect(dynamicObject.position.referenceFrame).toBe(ReferenceFrame.INERTIAL);

czml = {
position : {
referenceFrame : "FIXED",
epoch : epoch.toIso8601(),
cartesian : [1.0, 2.0, 3.0]
}
};

dataSource.load(czml);
dynamicObject = dataSource.getDynamicObjectCollection().getObjects()[0];
expect(dynamicObject.position.referenceFrame).toBe(ReferenceFrame.FIXED);
});

it('Default reference frame on existing interval does not reset value to FIXED.', function() {
var epoch = new JulianDate();
var dataSource = new CzmlDataSource();

var czml = {
position : {
referenceFrame : "INERTIAL",
epoch : epoch.toIso8601(),
cartesian : [1.0, 2.0, 3.0]
}
};

dataSource.process(czml);
var dynamicObject = dataSource.getDynamicObjectCollection().getObjects()[0];
expect(dynamicObject.position.referenceFrame).toBe(ReferenceFrame.INERTIAL);

var czml2 = {
position : {
epoch : epoch.toIso8601(),
cartesian : [1.0, 2.0, 3.0]
}
};
dataSource.process(czml2);

expect(dynamicObject.position.referenceFrame).toBe(ReferenceFrame.INERTIAL);
});

it('CZML sampled cartographicRadians positions work.', function() {
var epoch = new JulianDate();

Expand Down

0 comments on commit 67be26b

Please sign in to comment.