mirror of
https://github.com/nasa/openmct.git
synced 2025-05-29 05:34:18 +00:00
[Plot] Follow universal time controller
Follow displayable area of universal time controller, WTD-1515
This commit is contained in:
parent
3ce40ab870
commit
c2985d61b7
@ -138,6 +138,16 @@ define(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Change the displayable bounds
|
||||||
|
function setBasePanZoom(event, bounds) {
|
||||||
|
var start = bounds.start,
|
||||||
|
end = bounds.end;
|
||||||
|
if (updater) {
|
||||||
|
updater.setDomainBounds(start, end);
|
||||||
|
self.update();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Create a new subscription; telemetrySubscriber gets
|
// Create a new subscription; telemetrySubscriber gets
|
||||||
// to do the meaningful work here.
|
// to do the meaningful work here.
|
||||||
function subscribe(domainObject) {
|
function subscribe(domainObject) {
|
||||||
@ -172,11 +182,14 @@ define(
|
|||||||
this.scheduleUpdate = throttle(function () {
|
this.scheduleUpdate = throttle(function () {
|
||||||
self.modeOptions.getModeHandler().getSubPlots()
|
self.modeOptions.getModeHandler().getSubPlots()
|
||||||
.forEach(updateSubplot);
|
.forEach(updateSubplot);
|
||||||
});
|
}, 50);
|
||||||
|
|
||||||
// Subscribe to telemetry when a domain object becomes available
|
// Subscribe to telemetry when a domain object becomes available
|
||||||
$scope.$watch('domainObject', subscribe);
|
$scope.$watch('domainObject', subscribe);
|
||||||
|
|
||||||
|
// Respond to external bounds changes
|
||||||
|
$scope.$on("telemetry:display:bounds", setBasePanZoom);
|
||||||
|
|
||||||
// Unsubscribe when the plot is destroyed
|
// Unsubscribe when the plot is destroyed
|
||||||
$scope.$on("$destroy", releaseSubscription);
|
$scope.$on("$destroy", releaseSubscription);
|
||||||
|
|
||||||
|
@ -143,8 +143,7 @@ define(
|
|||||||
PlotPanZoomStackGroup.prototype.getDepth = function () {
|
PlotPanZoomStackGroup.prototype.getDepth = function () {
|
||||||
// All stacks are kept in sync, so look up depth
|
// All stacks are kept in sync, so look up depth
|
||||||
// from the first one.
|
// from the first one.
|
||||||
return this.stacks.length > 0 ?
|
return this.stacks.length > 0 ? this.stacks[0].getDepth() : 0;
|
||||||
this.stacks[0].getDepth() : 0;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -141,10 +141,10 @@ define(
|
|||||||
PlotUpdater.prototype.initializeDomainOffset = function (values) {
|
PlotUpdater.prototype.initializeDomainOffset = function (values) {
|
||||||
this.domainOffset =
|
this.domainOffset =
|
||||||
((this.domainOffset === undefined) && (values.length > 0)) ?
|
((this.domainOffset === undefined) && (values.length > 0)) ?
|
||||||
(values.reduce(function (a, b) {
|
(values.reduce(function (a, b) {
|
||||||
return (a || 0) + (b || 0);
|
return (a || 0) + (b || 0);
|
||||||
}, 0) / values.length) :
|
}, 0) / values.length) :
|
||||||
this.domainOffset;
|
this.domainOffset;
|
||||||
};
|
};
|
||||||
|
|
||||||
// Expand range slightly so points near edges are visible
|
// Expand range slightly so points near edges are visible
|
||||||
@ -159,7 +159,10 @@ define(
|
|||||||
|
|
||||||
// Update dimensions and origin based on extrema of plots
|
// Update dimensions and origin based on extrema of plots
|
||||||
PlotUpdater.prototype.updateBounds = function () {
|
PlotUpdater.prototype.updateBounds = function () {
|
||||||
var bufferArray = this.bufferArray;
|
var bufferArray = this.bufferArray,
|
||||||
|
priorDomainOrigin = this.origin[0],
|
||||||
|
priorDomainDimensions = this.dimensions[0];
|
||||||
|
|
||||||
if (bufferArray.length > 0) {
|
if (bufferArray.length > 0) {
|
||||||
this.domainExtrema = bufferArray.map(function (lineBuffer) {
|
this.domainExtrema = bufferArray.map(function (lineBuffer) {
|
||||||
return lineBuffer.getDomainExtrema();
|
return lineBuffer.getDomainExtrema();
|
||||||
@ -178,6 +181,18 @@ define(
|
|||||||
// Enforce some minimum visible area
|
// Enforce some minimum visible area
|
||||||
this.expandRange();
|
this.expandRange();
|
||||||
|
|
||||||
|
// Suppress domain changes when pinned
|
||||||
|
if (this.hasSpecificDomainBounds) {
|
||||||
|
this.origin[0] = priorDomainOrigin;
|
||||||
|
this.dimensions[0] = priorDomainDimensions;
|
||||||
|
if (this.following) {
|
||||||
|
this.origin[0] = Math.max(
|
||||||
|
this.domainExtrema[1] - this.dimensions[0],
|
||||||
|
this.origin[0]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// ...then enforce a fixed duration if needed
|
// ...then enforce a fixed duration if needed
|
||||||
if (this.fixedDuration !== undefined) {
|
if (this.fixedDuration !== undefined) {
|
||||||
this.origin[0] = this.origin[0] + this.dimensions[0] -
|
this.origin[0] = this.origin[0] + this.dimensions[0] -
|
||||||
@ -281,6 +296,22 @@ define(
|
|||||||
return this.bufferArray;
|
return this.bufferArray;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the start and end boundaries (usually time) for the
|
||||||
|
* domain axis of this updater.
|
||||||
|
*/
|
||||||
|
PlotUpdater.prototype.setDomainBounds = function (start, end) {
|
||||||
|
this.fixedDuration = end - start;
|
||||||
|
this.origin[0] = start;
|
||||||
|
this.dimensions[0] = this.fixedDuration;
|
||||||
|
|
||||||
|
// Suppress follow behavior if we have windowed in on the past
|
||||||
|
this.hasSpecificDomainBounds = true;
|
||||||
|
this.following = end >= this.domainExtrema[1];
|
||||||
|
|
||||||
|
this.updateBounds();
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fill in historical data.
|
* Fill in historical data.
|
||||||
*/
|
*/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user