/***************************************************************************** * Open MCT, Copyright (c) 2014-2024, United States Government * as represented by the Administrator of the National Aeronautics and Space * Administration. All rights reserved. * * Open MCT is licensed under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance with the License. * You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2.0. * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations * under the License. * * Open MCT includes source code licensed under additional open source * licenses. See the Open Source Licenses file (LICENSES.md) included with * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ var PURPLE = { sin: 2.2, cos: 2.2 }, RED = { sin: 0.9, cos: 0.9 }, ORANGE = { sin: 0.7, cos: 0.7 }, YELLOW = { sin: 0.5, cos: 0.5 }, CYAN = { sin: 0.45, cos: 0.45 }, LIMITS = { rh: { cssClass: 'is-limit--upr is-limit--red', low: RED, high: Number.POSITIVE_INFINITY, name: 'Red High' }, rl: { cssClass: 'is-limit--lwr is-limit--red', high: -RED, low: Number.NEGATIVE_INFINITY, name: 'Red Low' }, yh: { cssClass: 'is-limit--upr is-limit--yellow', low: YELLOW, high: RED, name: 'Yellow High' }, yl: { cssClass: 'is-limit--lwr is-limit--yellow', low: -RED, high: -YELLOW, name: 'Yellow Low' } }; export default function SinewaveLimitProvider() {} SinewaveLimitProvider.prototype.supportsLimits = function (domainObject) { return domainObject.type === 'generator'; }; SinewaveLimitProvider.prototype.getLimitEvaluator = function (domainObject) { return { evaluate: function (datum, valueMetadata) { var range = valueMetadata && valueMetadata.key; if (datum[range] > RED[range]) { return LIMITS.rh; } if (datum[range] < -RED[range]) { return LIMITS.rl; } if (datum[range] > YELLOW[range]) { return LIMITS.yh; } if (datum[range] < -YELLOW[range]) { return LIMITS.yl; } } }; }; SinewaveLimitProvider.prototype.getLimits = function (domainObject) { return { limits: function () { return Promise.resolve({ WATCH: { low: { color: 'cyan', sin: -CYAN.sin, cos: -CYAN.cos }, high: { color: 'cyan', ...CYAN } }, WARNING: { low: { color: 'yellow', sin: -YELLOW.sin, cos: -YELLOW.cos }, high: { color: 'yellow', ...YELLOW } }, DISTRESS: { low: { color: 'orange', sin: -ORANGE.sin, cos: -ORANGE.cos }, high: { color: 'orange', ...ORANGE } }, CRITICAL: { low: { color: 'red', sin: -RED.sin, cos: -RED.cos }, high: { color: 'red', ...RED } }, SEVERE: { low: { color: 'purple', sin: -PURPLE.sin, cos: -PURPLE.cos }, high: { color: 'purple', ...PURPLE } } }); } }; };