2988 lines
		
	
	
		
			105 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
		
		
			
		
	
	
			2988 lines
		
	
	
		
			105 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Cesium Sensor Volumes - https://github.com/jlouns/cesium-sensor-volumes
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * Copyright 2016 Jonathan Lounsbury
							 | 
						||
| 
								 | 
							
								 * Copyright 2011-2014 Analytical Graphics Inc. and Cesium Contributors
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * 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.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * Portions licensed separately.
							 | 
						||
| 
								 | 
							
								 * See https://github.com/jlouns/cesium-sensor-volumes/blob/master/LICENSE.md for full licensing details.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * Derived from Cesium Sensors - https://github.com/AnalyticalGraphicsInc/cesium-sensors
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								;(function () {
							 | 
						||
| 
								 | 
							
								  /**
							 | 
						||
| 
								 | 
							
								   * @license almond 0.3.3 Copyright jQuery Foundation and other contributors.
							 | 
						||
| 
								 | 
							
								   * Released under MIT license, http://github.com/requirejs/almond/LICENSE
							 | 
						||
| 
								 | 
							
								   */
							 | 
						||
| 
								 | 
							
								  //Going sloppy to avoid 'use strict' string cost, but strict practices should
							 | 
						||
| 
								 | 
							
								  //be followed.
							 | 
						||
| 
								 | 
							
								  /*global setTimeout: false */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  var requirejs, require, define
							 | 
						||
| 
								 | 
							
								  ;(function (undef) {
							 | 
						||
| 
								 | 
							
								    var main,
							 | 
						||
| 
								 | 
							
								      req,
							 | 
						||
| 
								 | 
							
								      makeMap,
							 | 
						||
| 
								 | 
							
								      handlers,
							 | 
						||
| 
								 | 
							
								      defined = {},
							 | 
						||
| 
								 | 
							
								      waiting = {},
							 | 
						||
| 
								 | 
							
								      config = {},
							 | 
						||
| 
								 | 
							
								      defining = {},
							 | 
						||
| 
								 | 
							
								      hasOwn = Object.prototype.hasOwnProperty,
							 | 
						||
| 
								 | 
							
								      aps = [].slice,
							 | 
						||
| 
								 | 
							
								      jsSuffixRegExp = /\.js$/
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    function hasProp(obj, prop) {
							 | 
						||
| 
								 | 
							
								      return hasOwn.call(obj, prop)
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Given a relative module name, like ./something, normalize it to
							 | 
						||
| 
								 | 
							
								     * a real name that can be mapped to a path.
							 | 
						||
| 
								 | 
							
								     * @param {String} name the relative name
							 | 
						||
| 
								 | 
							
								     * @param {String} baseName a real name that the name arg is relative
							 | 
						||
| 
								 | 
							
								     * to.
							 | 
						||
| 
								 | 
							
								     * @returns {String} normalized name
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    function normalize(name, baseName) {
							 | 
						||
| 
								 | 
							
								      var nameParts,
							 | 
						||
| 
								 | 
							
								        nameSegment,
							 | 
						||
| 
								 | 
							
								        mapValue,
							 | 
						||
| 
								 | 
							
								        foundMap,
							 | 
						||
| 
								 | 
							
								        lastIndex,
							 | 
						||
| 
								 | 
							
								        foundI,
							 | 
						||
| 
								 | 
							
								        foundStarMap,
							 | 
						||
| 
								 | 
							
								        starI,
							 | 
						||
| 
								 | 
							
								        i,
							 | 
						||
| 
								 | 
							
								        j,
							 | 
						||
| 
								 | 
							
								        part,
							 | 
						||
| 
								 | 
							
								        normalizedBaseParts,
							 | 
						||
| 
								 | 
							
								        baseParts = baseName && baseName.split("/"),
							 | 
						||
| 
								 | 
							
								        map = config.map,
							 | 
						||
| 
								 | 
							
								        starMap = (map && map["*"]) || {}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      //Adjust any relative paths.
							 | 
						||
| 
								 | 
							
								      if (name) {
							 | 
						||
| 
								 | 
							
								        name = name.split("/")
							 | 
						||
| 
								 | 
							
								        lastIndex = name.length - 1
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // If wanting node ID compatibility, strip .js from end
							 | 
						||
| 
								 | 
							
								        // of IDs. Have to do this here, and not in nameToUrl
							 | 
						||
| 
								 | 
							
								        // because node allows either .js or non .js to map
							 | 
						||
| 
								 | 
							
								        // to same file.
							 | 
						||
| 
								 | 
							
								        if (config.nodeIdCompat && jsSuffixRegExp.test(name[lastIndex])) {
							 | 
						||
| 
								 | 
							
								          name[lastIndex] = name[lastIndex].replace(jsSuffixRegExp, "")
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // Starts with a '.' so need the baseName
							 | 
						||
| 
								 | 
							
								        if (name[0].charAt(0) === "." && baseParts) {
							 | 
						||
| 
								 | 
							
								          //Convert baseName to array, and lop off the last part,
							 | 
						||
| 
								 | 
							
								          //so that . matches that 'directory' and not name of the baseName's
							 | 
						||
| 
								 | 
							
								          //module. For instance, baseName of 'one/two/three', maps to
							 | 
						||
| 
								 | 
							
								          //'one/two/three.js', but we want the directory, 'one/two' for
							 | 
						||
| 
								 | 
							
								          //this normalization.
							 | 
						||
| 
								 | 
							
								          normalizedBaseParts = baseParts.slice(0, baseParts.length - 1)
							 | 
						||
| 
								 | 
							
								          name = normalizedBaseParts.concat(name)
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        //start trimDots
							 | 
						||
| 
								 | 
							
								        for (i = 0; i < name.length; i++) {
							 | 
						||
| 
								 | 
							
								          part = name[i]
							 | 
						||
| 
								 | 
							
								          if (part === ".") {
							 | 
						||
| 
								 | 
							
								            name.splice(i, 1)
							 | 
						||
| 
								 | 
							
								            i -= 1
							 | 
						||
| 
								 | 
							
								          } else if (part === "..") {
							 | 
						||
| 
								 | 
							
								            // If at the start, or previous value is still ..,
							 | 
						||
| 
								 | 
							
								            // keep them so that when converted to a path it may
							 | 
						||
| 
								 | 
							
								            // still work when converted to a path, even though
							 | 
						||
| 
								 | 
							
								            // as an ID it is less than ideal. In larger point
							 | 
						||
| 
								 | 
							
								            // releases, may be better to just kick out an error.
							 | 
						||
| 
								 | 
							
								            if (i === 0 || (i === 1 && name[2] === "..") || name[i - 1] === "..") {
							 | 
						||
| 
								 | 
							
								              continue
							 | 
						||
| 
								 | 
							
								            } else if (i > 0) {
							 | 
						||
| 
								 | 
							
								              name.splice(i - 1, 2)
							 | 
						||
| 
								 | 
							
								              i -= 2
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								          }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        //end trimDots
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        name = name.join("/")
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      //Apply map config if available.
							 | 
						||
| 
								 | 
							
								      if ((baseParts || starMap) && map) {
							 | 
						||
| 
								 | 
							
								        nameParts = name.split("/")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        for (i = nameParts.length; i > 0; i -= 1) {
							 | 
						||
| 
								 | 
							
								          nameSegment = nameParts.slice(0, i).join("/")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								          if (baseParts) {
							 | 
						||
| 
								 | 
							
								            //Find the longest baseName segment match in the config.
							 | 
						||
| 
								 | 
							
								            //So, do joins on the biggest to smallest lengths of baseParts.
							 | 
						||
| 
								 | 
							
								            for (j = baseParts.length; j > 0; j -= 1) {
							 | 
						||
| 
								 | 
							
								              mapValue = map[baseParts.slice(0, j).join("/")]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								              //baseName segment has  config, find if it has one for
							 | 
						||
| 
								 | 
							
								              //this name.
							 | 
						||
| 
								 | 
							
								              if (mapValue) {
							 | 
						||
| 
								 | 
							
								                mapValue = mapValue[nameSegment]
							 | 
						||
| 
								 | 
							
								                if (mapValue) {
							 | 
						||
| 
								 | 
							
								                  //Match, update name to the new value.
							 | 
						||
| 
								 | 
							
								                  foundMap = mapValue
							 | 
						||
| 
								 | 
							
								                  foundI = i
							 | 
						||
| 
								 | 
							
								                  break
							 | 
						||
| 
								 | 
							
								                }
							 | 
						||
| 
								 | 
							
								              }
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								          }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								          if (foundMap) {
							 | 
						||
| 
								 | 
							
								            break
							 | 
						||
| 
								 | 
							
								          }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								          //Check for a star map match, but just hold on to it,
							 | 
						||
| 
								 | 
							
								          //if there is a shorter segment match later in a matching
							 | 
						||
| 
								 | 
							
								          //config, then favor over this star map.
							 | 
						||
| 
								 | 
							
								          if (!foundStarMap && starMap && starMap[nameSegment]) {
							 | 
						||
| 
								 | 
							
								            foundStarMap = starMap[nameSegment]
							 | 
						||
| 
								 | 
							
								            starI = i
							 | 
						||
| 
								 | 
							
								          }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if (!foundMap && foundStarMap) {
							 | 
						||
| 
								 | 
							
								          foundMap = foundStarMap
							 | 
						||
| 
								 | 
							
								          foundI = starI
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if (foundMap) {
							 | 
						||
| 
								 | 
							
								          nameParts.splice(0, foundI, foundMap)
							 | 
						||
| 
								 | 
							
								          name = nameParts.join("/")
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      return name
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    function makeRequire(relName, forceSync) {
							 | 
						||
| 
								 | 
							
								      return function () {
							 | 
						||
| 
								 | 
							
								        //A version of a require function that passes a moduleName
							 | 
						||
| 
								 | 
							
								        //value for items that may need to
							 | 
						||
| 
								 | 
							
								        //look up paths relative to the moduleName
							 | 
						||
| 
								 | 
							
								        var args = aps.call(arguments, 0)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        //If first arg is not require('string'), and there is only
							 | 
						||
| 
								 | 
							
								        //one arg, it is the array form without a callback. Insert
							 | 
						||
| 
								 | 
							
								        //a null so that the following concat is correct.
							 | 
						||
| 
								 | 
							
								        if (typeof args[0] !== "string" && args.length === 1) {
							 | 
						||
| 
								 | 
							
								          args.push(null)
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        return req.apply(undef, args.concat([relName, forceSync]))
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    function makeNormalize(relName) {
							 | 
						||
| 
								 | 
							
								      return function (name) {
							 | 
						||
| 
								 | 
							
								        return normalize(name, relName)
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    function makeLoad(depName) {
							 | 
						||
| 
								 | 
							
								      return function (value) {
							 | 
						||
| 
								 | 
							
								        defined[depName] = value
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    function callDep(name) {
							 | 
						||
| 
								 | 
							
								      if (hasProp(waiting, name)) {
							 | 
						||
| 
								 | 
							
								        var args = waiting[name]
							 | 
						||
| 
								 | 
							
								        delete waiting[name]
							 | 
						||
| 
								 | 
							
								        defining[name] = true
							 | 
						||
| 
								 | 
							
								        main.apply(undef, args)
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      if (!hasProp(defined, name) && !hasProp(defining, name)) {
							 | 
						||
| 
								 | 
							
								        throw new Error("No " + name)
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      return defined[name]
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    //Turns a plugin!resource to [plugin, resource]
							 | 
						||
| 
								 | 
							
								    //with the plugin being undefined if the name
							 | 
						||
| 
								 | 
							
								    //did not have a plugin prefix.
							 | 
						||
| 
								 | 
							
								    function splitPrefix(name) {
							 | 
						||
| 
								 | 
							
								      var prefix,
							 | 
						||
| 
								 | 
							
								        index = name ? name.indexOf("!") : -1
							 | 
						||
| 
								 | 
							
								      if (index > -1) {
							 | 
						||
| 
								 | 
							
								        prefix = name.substring(0, index)
							 | 
						||
| 
								 | 
							
								        name = name.substring(index + 1, name.length)
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      return [prefix, name]
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    //Creates a parts array for a relName where first part is plugin ID,
							 | 
						||
| 
								 | 
							
								    //second part is resource ID. Assumes relName has already been normalized.
							 | 
						||
| 
								 | 
							
								    function makeRelParts(relName) {
							 | 
						||
| 
								 | 
							
								      return relName ? splitPrefix(relName) : []
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Makes a name map, normalizing the name, and using a plugin
							 | 
						||
| 
								 | 
							
								     * for normalization if necessary. Grabs a ref to plugin
							 | 
						||
| 
								 | 
							
								     * too, as an optimization.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    makeMap = function (name, relParts) {
							 | 
						||
| 
								 | 
							
								      var plugin,
							 | 
						||
| 
								 | 
							
								        parts = splitPrefix(name),
							 | 
						||
| 
								 | 
							
								        prefix = parts[0],
							 | 
						||
| 
								 | 
							
								        relResourceName = relParts[1]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      name = parts[1]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      if (prefix) {
							 | 
						||
| 
								 | 
							
								        prefix = normalize(prefix, relResourceName)
							 | 
						||
| 
								 | 
							
								        plugin = callDep(prefix)
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      //Normalize according
							 | 
						||
| 
								 | 
							
								      if (prefix) {
							 | 
						||
| 
								 | 
							
								        if (plugin && plugin.normalize) {
							 | 
						||
| 
								 | 
							
								          name = plugin.normalize(name, makeNormalize(relResourceName))
							 | 
						||
| 
								 | 
							
								        } else {
							 | 
						||
| 
								 | 
							
								          name = normalize(name, relResourceName)
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      } else {
							 | 
						||
| 
								 | 
							
								        name = normalize(name, relResourceName)
							 | 
						||
| 
								 | 
							
								        parts = splitPrefix(name)
							 | 
						||
| 
								 | 
							
								        prefix = parts[0]
							 | 
						||
| 
								 | 
							
								        name = parts[1]
							 | 
						||
| 
								 | 
							
								        if (prefix) {
							 | 
						||
| 
								 | 
							
								          plugin = callDep(prefix)
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      //Using ridiculous property names for space reasons
							 | 
						||
| 
								 | 
							
								      return {
							 | 
						||
| 
								 | 
							
								        f: prefix ? prefix + "!" + name : name, //fullName
							 | 
						||
| 
								 | 
							
								        n: name,
							 | 
						||
| 
								 | 
							
								        pr: prefix,
							 | 
						||
| 
								 | 
							
								        p: plugin
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    function makeConfig(name) {
							 | 
						||
| 
								 | 
							
								      return function () {
							 | 
						||
| 
								 | 
							
								        return (config && config.config && config.config[name]) || {}
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    handlers = {
							 | 
						||
| 
								 | 
							
								      require: function (name) {
							 | 
						||
| 
								 | 
							
								        return makeRequire(name)
							 | 
						||
| 
								 | 
							
								      },
							 | 
						||
| 
								 | 
							
								      exports: function (name) {
							 | 
						||
| 
								 | 
							
								        var e = defined[name]
							 | 
						||
| 
								 | 
							
								        if (typeof e !== "undefined") {
							 | 
						||
| 
								 | 
							
								          return e
							 | 
						||
| 
								 | 
							
								        } else {
							 | 
						||
| 
								 | 
							
								          return (defined[name] = {})
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      },
							 | 
						||
| 
								 | 
							
								      module: function (name) {
							 | 
						||
| 
								 | 
							
								        return {
							 | 
						||
| 
								 | 
							
								          id: name,
							 | 
						||
| 
								 | 
							
								          uri: "",
							 | 
						||
| 
								 | 
							
								          exports: defined[name],
							 | 
						||
| 
								 | 
							
								          config: makeConfig(name)
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    main = function (name, deps, callback, relName) {
							 | 
						||
| 
								 | 
							
								      var cjsModule,
							 | 
						||
| 
								 | 
							
								        depName,
							 | 
						||
| 
								 | 
							
								        ret,
							 | 
						||
| 
								 | 
							
								        map,
							 | 
						||
| 
								 | 
							
								        i,
							 | 
						||
| 
								 | 
							
								        relParts,
							 | 
						||
| 
								 | 
							
								        args = [],
							 | 
						||
| 
								 | 
							
								        callbackType = typeof callback,
							 | 
						||
| 
								 | 
							
								        usingExports
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      //Use name if no relName
							 | 
						||
| 
								 | 
							
								      relName = relName || name
							 | 
						||
| 
								 | 
							
								      relParts = makeRelParts(relName)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      //Call the callback to define the module, if necessary.
							 | 
						||
| 
								 | 
							
								      if (callbackType === "undefined" || callbackType === "function") {
							 | 
						||
| 
								 | 
							
								        //Pull out the defined dependencies and pass the ordered
							 | 
						||
| 
								 | 
							
								        //values to the callback.
							 | 
						||
| 
								 | 
							
								        //Default to [require, exports, module] if no deps
							 | 
						||
| 
								 | 
							
								        deps = !deps.length && callback.length ? ["require", "exports", "module"] : deps
							 | 
						||
| 
								 | 
							
								        for (i = 0; i < deps.length; i += 1) {
							 | 
						||
| 
								 | 
							
								          map = makeMap(deps[i], relParts)
							 | 
						||
| 
								 | 
							
								          depName = map.f
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								          //Fast path CommonJS standard dependencies.
							 | 
						||
| 
								 | 
							
								          if (depName === "require") {
							 | 
						||
| 
								 | 
							
								            args[i] = handlers.require(name)
							 | 
						||
| 
								 | 
							
								          } else if (depName === "exports") {
							 | 
						||
| 
								 | 
							
								            //CommonJS module spec 1.1
							 | 
						||
| 
								 | 
							
								            args[i] = handlers.exports(name)
							 | 
						||
| 
								 | 
							
								            usingExports = true
							 | 
						||
| 
								 | 
							
								          } else if (depName === "module") {
							 | 
						||
| 
								 | 
							
								            //CommonJS module spec 1.1
							 | 
						||
| 
								 | 
							
								            cjsModule = args[i] = handlers.module(name)
							 | 
						||
| 
								 | 
							
								          } else if (hasProp(defined, depName) || hasProp(waiting, depName) || hasProp(defining, depName)) {
							 | 
						||
| 
								 | 
							
								            args[i] = callDep(depName)
							 | 
						||
| 
								 | 
							
								          } else if (map.p) {
							 | 
						||
| 
								 | 
							
								            map.p.load(map.n, makeRequire(relName, true), makeLoad(depName), {})
							 | 
						||
| 
								 | 
							
								            args[i] = defined[depName]
							 | 
						||
| 
								 | 
							
								          } else {
							 | 
						||
| 
								 | 
							
								            throw new Error(name + " missing " + depName)
							 | 
						||
| 
								 | 
							
								          }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        ret = callback ? callback.apply(defined[name], args) : undefined
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if (name) {
							 | 
						||
| 
								 | 
							
								          //If setting exports via "module" is in play,
							 | 
						||
| 
								 | 
							
								          //favor that over return value and exports. After that,
							 | 
						||
| 
								 | 
							
								          //favor a non-undefined return value over exports use.
							 | 
						||
| 
								 | 
							
								          if (cjsModule && cjsModule.exports !== undef && cjsModule.exports !== defined[name]) {
							 | 
						||
| 
								 | 
							
								            defined[name] = cjsModule.exports
							 | 
						||
| 
								 | 
							
								          } else if (ret !== undef || !usingExports) {
							 | 
						||
| 
								 | 
							
								            //Use the return value from the function.
							 | 
						||
| 
								 | 
							
								            defined[name] = ret
							 | 
						||
| 
								 | 
							
								          }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      } else if (name) {
							 | 
						||
| 
								 | 
							
								        //May just be an object definition for the module. Only
							 | 
						||
| 
								 | 
							
								        //worry about defining if have a module name.
							 | 
						||
| 
								 | 
							
								        defined[name] = callback
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    requirejs =
							 | 
						||
| 
								 | 
							
								      require =
							 | 
						||
| 
								 | 
							
								      req =
							 | 
						||
| 
								 | 
							
								        function (deps, callback, relName, forceSync, alt) {
							 | 
						||
| 
								 | 
							
								          if (typeof deps === "string") {
							 | 
						||
| 
								 | 
							
								            if (handlers[deps]) {
							 | 
						||
| 
								 | 
							
								              //callback in this case is really relName
							 | 
						||
| 
								 | 
							
								              return handlers[deps](callback)
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            //Just return the module wanted. In this scenario, the
							 | 
						||
| 
								 | 
							
								            //deps arg is the module name, and second arg (if passed)
							 | 
						||
| 
								 | 
							
								            //is just the relName.
							 | 
						||
| 
								 | 
							
								            //Normalize module name, if it contains . or ..
							 | 
						||
| 
								 | 
							
								            return callDep(makeMap(deps, makeRelParts(callback)).f)
							 | 
						||
| 
								 | 
							
								          } else if (!deps.splice) {
							 | 
						||
| 
								 | 
							
								            //deps is a config object, not an array.
							 | 
						||
| 
								 | 
							
								            config = deps
							 | 
						||
| 
								 | 
							
								            if (config.deps) {
							 | 
						||
| 
								 | 
							
								              req(config.deps, config.callback)
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            if (!callback) {
							 | 
						||
| 
								 | 
							
								              return
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								            if (callback.splice) {
							 | 
						||
| 
								 | 
							
								              //callback is an array, which means it is a dependency list.
							 | 
						||
| 
								 | 
							
								              //Adjust args if there are dependencies
							 | 
						||
| 
								 | 
							
								              deps = callback
							 | 
						||
| 
								 | 
							
								              callback = relName
							 | 
						||
| 
								 | 
							
								              relName = null
							 | 
						||
| 
								 | 
							
								            } else {
							 | 
						||
| 
								 | 
							
								              deps = undef
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								          }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								          //Support require(['a'])
							 | 
						||
| 
								 | 
							
								          callback = callback || function () {}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								          //If relName is a function, it is an errback handler,
							 | 
						||
| 
								 | 
							
								          //so remove it.
							 | 
						||
| 
								 | 
							
								          if (typeof relName === "function") {
							 | 
						||
| 
								 | 
							
								            relName = forceSync
							 | 
						||
| 
								 | 
							
								            forceSync = alt
							 | 
						||
| 
								 | 
							
								          }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								          //Simulate async callback;
							 | 
						||
| 
								 | 
							
								          if (forceSync) {
							 | 
						||
| 
								 | 
							
								            main(undef, deps, callback, relName)
							 | 
						||
| 
								 | 
							
								          } else {
							 | 
						||
| 
								 | 
							
								            //Using a non-zero value because of concern for what old browsers
							 | 
						||
| 
								 | 
							
								            //do, and latest browsers "upgrade" to 4 if lower value is used:
							 | 
						||
| 
								 | 
							
								            //http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#dom-windowtimers-settimeout:
							 | 
						||
| 
								 | 
							
								            //If want a value immediately, use require('id') instead -- something
							 | 
						||
| 
								 | 
							
								            //that works in almond on the global level, but not guaranteed and
							 | 
						||
| 
								 | 
							
								            //unlikely to work in other AMD implementations.
							 | 
						||
| 
								 | 
							
								            setTimeout(function () {
							 | 
						||
| 
								 | 
							
								              main(undef, deps, callback, relName)
							 | 
						||
| 
								 | 
							
								            }, 4)
							 | 
						||
| 
								 | 
							
								          }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								          return req
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Just drops the config on the floor, but returns req in case
							 | 
						||
| 
								 | 
							
								     * the config return value is used.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    req.config = function (cfg) {
							 | 
						||
| 
								 | 
							
								      return req(cfg)
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Expose module registry for debugging and tooling
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    requirejs._defined = defined
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    define = function (name, deps, callback) {
							 | 
						||
| 
								 | 
							
								      if (typeof name !== "string") {
							 | 
						||
| 
								 | 
							
								        throw new Error("See almond README: incorrect module build, no module name")
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      //This module may not have dependencies
							 | 
						||
| 
								 | 
							
								      if (!deps.splice) {
							 | 
						||
| 
								 | 
							
								        //deps is not an array, so probably means
							 | 
						||
| 
								 | 
							
								        //an object literal or factory function for
							 | 
						||
| 
								 | 
							
								        //the value. Adjust args.
							 | 
						||
| 
								 | 
							
								        callback = deps
							 | 
						||
| 
								 | 
							
								        deps = []
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      if (!hasProp(defined, name) && !hasProp(waiting, name)) {
							 | 
						||
| 
								 | 
							
								        waiting[name] = [name, deps, callback]
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    define.amd = {
							 | 
						||
| 
								 | 
							
								      jQuery: true
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  })()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  define("conic/conic-sensor-graphics", [
							 | 
						||
| 
								 | 
							
								    "require",
							 | 
						||
| 
								 | 
							
								    "Cesium/Core/defaultValue",
							 | 
						||
| 
								 | 
							
								    "Cesium/Core/defined",
							 | 
						||
| 
								 | 
							
								    "Cesium/Core/DeveloperError",
							 | 
						||
| 
								 | 
							
								    "Cesium/Core/Event",
							 | 
						||
| 
								 | 
							
								    "Cesium/DataSources/createMaterialPropertyDescriptor",
							 | 
						||
| 
								 | 
							
								    "Cesium/DataSources/createPropertyDescriptor"
							 | 
						||
| 
								 | 
							
								  ], function (require) {
							 | 
						||
| 
								 | 
							
								    "use strict"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    var defaultValue = require("Cesium/Core/defaultValue")
							 | 
						||
| 
								 | 
							
								    var defined = require("Cesium/Core/defined")
							 | 
						||
| 
								 | 
							
								    var defineProperties = Object.defineProperties
							 | 
						||
| 
								 | 
							
								    var DeveloperError = require("Cesium/Core/DeveloperError")
							 | 
						||
| 
								 | 
							
								    var Event = require("Cesium/Core/Event")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    var createMaterialPropertyDescriptor = require("Cesium/DataSources/createMaterialPropertyDescriptor")
							 | 
						||
| 
								 | 
							
								    var createPropertyDescriptor = require("Cesium/DataSources/createPropertyDescriptor")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * An optionally time-dynamic cone.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @alias ConicSensorGraphics
							 | 
						||
| 
								 | 
							
								     * @constructor
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    var ConicSensorGraphics = function (options) {
							 | 
						||
| 
								 | 
							
								      this._minimumClockAngle = undefined
							 | 
						||
| 
								 | 
							
								      this._minimumClockAngleSubscription = undefined
							 | 
						||
| 
								 | 
							
								      this._maximumClockAngle = undefined
							 | 
						||
| 
								 | 
							
								      this._maximumClockAngleSubscription = undefined
							 | 
						||
| 
								 | 
							
								      this._innerHalfAngle = undefined
							 | 
						||
| 
								 | 
							
								      this._innerHalfAngleSubscription = undefined
							 | 
						||
| 
								 | 
							
								      this._outerHalfAngle = undefined
							 | 
						||
| 
								 | 
							
								      this._outerHalfAngleSubscription = undefined
							 | 
						||
| 
								 | 
							
								      this._lateralSurfaceMaterial = undefined
							 | 
						||
| 
								 | 
							
								      this._lateralSurfaceMaterialSubscription = undefined
							 | 
						||
| 
								 | 
							
								      this._intersectionColor = undefined
							 | 
						||
| 
								 | 
							
								      this._intersectionColorSubscription = undefined
							 | 
						||
| 
								 | 
							
								      this._intersectionWidth = undefined
							 | 
						||
| 
								 | 
							
								      this._intersectionWidthSubscription = undefined
							 | 
						||
| 
								 | 
							
								      this._showIntersection = undefined
							 | 
						||
| 
								 | 
							
								      this._showIntersectionSubscription = undefined
							 | 
						||
| 
								 | 
							
								      this._radius = undefined
							 | 
						||
| 
								 | 
							
								      this._radiusSubscription = undefined
							 | 
						||
| 
								 | 
							
								      this._show = undefined
							 | 
						||
| 
								 | 
							
								      this._showSubscription = undefined
							 | 
						||
| 
								 | 
							
								      this._definitionChanged = new Event()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      this.merge(defaultValue(options, defaultValue.EMPTY_OBJECT))
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    defineProperties(ConicSensorGraphics.prototype, {
							 | 
						||
| 
								 | 
							
								      /**
							 | 
						||
| 
								 | 
							
								       * Gets the event that is raised whenever a new property is assigned.
							 | 
						||
| 
								 | 
							
								       * @memberof ConicSensorGraphics.prototype
							 | 
						||
| 
								 | 
							
								       *
							 | 
						||
| 
								 | 
							
								       * @type {Event}
							 | 
						||
| 
								 | 
							
								       * @readonly
							 | 
						||
| 
								 | 
							
								       */
							 | 
						||
| 
								 | 
							
								      definitionChanged: {
							 | 
						||
| 
								 | 
							
								        get: function () {
							 | 
						||
| 
								 | 
							
								          return this._definitionChanged
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      },
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      /**
							 | 
						||
| 
								 | 
							
								       * Gets or sets the numeric {@link Property} specifying the the cone's minimum clock angle.
							 | 
						||
| 
								 | 
							
								       * @memberof ConicSensorGraphics.prototype
							 | 
						||
| 
								 | 
							
								       * @type {Property}
							 | 
						||
| 
								 | 
							
								       */
							 | 
						||
| 
								 | 
							
								      minimumClockAngle: createPropertyDescriptor("minimumClockAngle"),
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      /**
							 | 
						||
| 
								 | 
							
								       * Gets or sets the numeric {@link Property} specifying the the cone's maximum clock angle.
							 | 
						||
| 
								 | 
							
								       * @memberof ConicSensorGraphics.prototype
							 | 
						||
| 
								 | 
							
								       * @type {Property}
							 | 
						||
| 
								 | 
							
								       */
							 | 
						||
| 
								 | 
							
								      maximumClockAngle: createPropertyDescriptor("maximumClockAngle"),
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      /**
							 | 
						||
| 
								 | 
							
								       * Gets or sets the numeric {@link Property} specifying the the cone's inner half-angle.
							 | 
						||
| 
								 | 
							
								       * @memberof ConicSensorGraphics.prototype
							 | 
						||
| 
								 | 
							
								       * @type {Property}
							 | 
						||
| 
								 | 
							
								       */
							 | 
						||
| 
								 | 
							
								      innerHalfAngle: createPropertyDescriptor("innerHalfAngle"),
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      /**
							 | 
						||
| 
								 | 
							
								       * Gets or sets the numeric {@link Property} specifying the the cone's outer half-angle.
							 | 
						||
| 
								 | 
							
								       * @memberof ConicSensorGraphics.prototype
							 | 
						||
| 
								 | 
							
								       * @type {Property}
							 | 
						||
| 
								 | 
							
								       */
							 | 
						||
| 
								 | 
							
								      outerHalfAngle: createPropertyDescriptor("outerHalfAngle"),
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      /**
							 | 
						||
| 
								 | 
							
								       * Gets or sets the {@link MaterialProperty} specifying the the cone's appearance.
							 | 
						||
| 
								 | 
							
								       * @memberof ConicSensorGraphics.prototype
							 | 
						||
| 
								 | 
							
								       * @type {MaterialProperty}
							 | 
						||
| 
								 | 
							
								       */
							 | 
						||
| 
								 | 
							
								      lateralSurfaceMaterial: createMaterialPropertyDescriptor("lateralSurfaceMaterial"),
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      /**
							 | 
						||
| 
								 | 
							
								       * Gets or sets the {@link Color} {@link Property} specifying the color of the line formed by the intersection of the cone and other central bodies.
							 | 
						||
| 
								 | 
							
								       * @memberof ConicSensorGraphics.prototype
							 | 
						||
| 
								 | 
							
								       * @type {Property}
							 | 
						||
| 
								 | 
							
								       */
							 | 
						||
| 
								 | 
							
								      intersectionColor: createPropertyDescriptor("intersectionColor"),
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      /**
							 | 
						||
| 
								 | 
							
								       * Gets or sets the numeric {@link Property} specifying the width of the line formed by the intersection of the cone and other central bodies.
							 | 
						||
| 
								 | 
							
								       * @memberof ConicSensorGraphics.prototype
							 | 
						||
| 
								 | 
							
								       * @type {Property}
							 | 
						||
| 
								 | 
							
								       */
							 | 
						||
| 
								 | 
							
								      intersectionWidth: createPropertyDescriptor("intersectionWidth"),
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      /**
							 | 
						||
| 
								 | 
							
								       * Gets or sets the boolean {@link Property} specifying the visibility of the line formed by the intersection of the cone and other central bodies.
							 | 
						||
| 
								 | 
							
								       * @memberof ConicSensorGraphics.prototype
							 | 
						||
| 
								 | 
							
								       * @type {Property}
							 | 
						||
| 
								 | 
							
								       */
							 | 
						||
| 
								 | 
							
								      showIntersection: createPropertyDescriptor("showIntersection"),
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      /**
							 | 
						||
| 
								 | 
							
								       * Gets or sets the numeric {@link Property} specifying the radius of the cone's projection.
							 | 
						||
| 
								 | 
							
								       * @memberof ConicSensorGraphics.prototype
							 | 
						||
| 
								 | 
							
								       * @type {Property}
							 | 
						||
| 
								 | 
							
								       */
							 | 
						||
| 
								 | 
							
								      radius: createPropertyDescriptor("radius"),
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      /**
							 | 
						||
| 
								 | 
							
								       * Gets or sets the boolean {@link Property} specifying the visibility of the cone.
							 | 
						||
| 
								 | 
							
								       * @memberof ConicSensorGraphics.prototype
							 | 
						||
| 
								 | 
							
								       * @type {Property}
							 | 
						||
| 
								 | 
							
								       */
							 | 
						||
| 
								 | 
							
								      show: createPropertyDescriptor("show")
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Duplicates a ConicSensorGraphics instance.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param {ConicSensorGraphics} [result] The object onto which to store the result.
							 | 
						||
| 
								 | 
							
								     * @returns {ConicSensorGraphics} The modified result parameter or a new instance if one was not provided.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    ConicSensorGraphics.prototype.clone = function (result) {
							 | 
						||
| 
								 | 
							
								      if (!defined(result)) {
							 | 
						||
| 
								 | 
							
								        result = new ConicSensorGraphics()
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      result.show = this.show
							 | 
						||
| 
								 | 
							
								      result.innerHalfAngle = this.innerHalfAngle
							 | 
						||
| 
								 | 
							
								      result.outerHalfAngle = this.outerHalfAngle
							 | 
						||
| 
								 | 
							
								      result.minimumClockAngle = this.minimumClockAngle
							 | 
						||
| 
								 | 
							
								      result.maximumClockAngle = this.maximumClockAngle
							 | 
						||
| 
								 | 
							
								      result.radius = this.radius
							 | 
						||
| 
								 | 
							
								      result.showIntersection = this.showIntersection
							 | 
						||
| 
								 | 
							
								      result.intersectionColor = this.intersectionColor
							 | 
						||
| 
								 | 
							
								      result.intersectionWidth = this.intersectionWidth
							 | 
						||
| 
								 | 
							
								      result.lateralSurfaceMaterial = this.lateralSurfaceMaterial
							 | 
						||
| 
								 | 
							
								      return result
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Assigns each unassigned property on this object to the value
							 | 
						||
| 
								 | 
							
								     * of the same property on the provided source object.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param {ConicSensorGraphics} source The object to be merged into this object.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    ConicSensorGraphics.prototype.merge = function (source) {
							 | 
						||
| 
								 | 
							
								      // >>includeStart('debug', pragmas.debug);
							 | 
						||
| 
								 | 
							
								      if (!defined(source)) {
							 | 
						||
| 
								 | 
							
								        throw new DeveloperError("source is required.")
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      // >>includeEnd('debug');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      this.show = defaultValue(this.show, source.show)
							 | 
						||
| 
								 | 
							
								      this.innerHalfAngle = defaultValue(this.innerHalfAngle, source.innerHalfAngle)
							 | 
						||
| 
								 | 
							
								      this.outerHalfAngle = defaultValue(this.outerHalfAngle, source.outerHalfAngle)
							 | 
						||
| 
								 | 
							
								      this.minimumClockAngle = defaultValue(this.minimumClockAngle, source.minimumClockAngle)
							 | 
						||
| 
								 | 
							
								      this.maximumClockAngle = defaultValue(this.maximumClockAngle, source.maximumClockAngle)
							 | 
						||
| 
								 | 
							
								      this.radius = defaultValue(this.radius, source.radius)
							 | 
						||
| 
								 | 
							
								      this.showIntersection = defaultValue(this.showIntersection, source.showIntersection)
							 | 
						||
| 
								 | 
							
								      this.intersectionColor = defaultValue(this.intersectionColor, source.intersectionColor)
							 | 
						||
| 
								 | 
							
								      this.intersectionWidth = defaultValue(this.intersectionWidth, source.intersectionWidth)
							 | 
						||
| 
								 | 
							
								      this.lateralSurfaceMaterial = defaultValue(this.lateralSurfaceMaterial, source.lateralSurfaceMaterial)
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    return ConicSensorGraphics
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  define("text", {
							 | 
						||
| 
								 | 
							
								    load: function (id) {
							 | 
						||
| 
								 | 
							
								      throw new Error("Dynamic load not allowed: " + id)
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  define("text!custom/custom-sensor-volume-fs.glsl", [], function () {
							 | 
						||
| 
								 | 
							
								    return `#ifdef GL_OES_standard_derivatives
							 | 
						||
| 
								 | 
							
								    #extension GL_OES_standard_derivatives : enable
							 | 
						||
| 
								 | 
							
								    #endif
							 | 
						||
| 
								 | 
							
								    uniform bool u_showIntersection;
							 | 
						||
| 
								 | 
							
								    uniform bool u_showThroughEllipsoid;
							 | 
						||
| 
								 | 
							
								    uniform float u_sensorRadius;
							 | 
						||
| 
								 | 
							
								    uniform float u_normalDirection;
							 | 
						||
| 
								 | 
							
								    in vec3 v_positionWC;
							 | 
						||
| 
								 | 
							
								    in vec3 v_positionEC;
							 | 
						||
| 
								 | 
							
								    in vec3 v_normalEC;
							 | 
						||
| 
								 | 
							
								    vec4 getColor(float sensorRadius, vec3 pointEC)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								    czm_materialInput materialInput;
							 | 
						||
| 
								 | 
							
								    vec3 pointMC = (czm_inverseModelView * vec4(pointEC, 1.0)).xyz;
							 | 
						||
| 
								 | 
							
								    materialInput.st = sensor2dTextureCoordinates(sensorRadius, pointMC);
							 | 
						||
| 
								 | 
							
								    materialInput.str = pointMC / sensorRadius;
							 | 
						||
| 
								 | 
							
								    vec3 positionToEyeEC = -v_positionEC;
							 | 
						||
| 
								 | 
							
								    materialInput.positionToEyeEC = positionToEyeEC;
							 | 
						||
| 
								 | 
							
								    vec3 normalEC = normalize(v_normalEC);
							 | 
						||
| 
								 | 
							
								    materialInput.normalEC = u_normalDirection * normalEC;
							 | 
						||
| 
								 | 
							
								    czm_material material = czm_getMaterial(materialInput);
							 | 
						||
| 
								 | 
							
								    return mix(czm_phong(normalize(positionToEyeEC), material, czm_lightDirectionEC), vec4(material.diffuse, material.alpha), 0.4);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    bool isOnBoundary(float value, float epsilon)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								    float width = getIntersectionWidth();
							 | 
						||
| 
								 | 
							
								    float tolerance = width * epsilon;
							 | 
						||
| 
								 | 
							
								    #ifdef GL_OES_standard_derivatives
							 | 
						||
| 
								 | 
							
								    float delta = max(abs(dFdx(value)), abs(dFdy(value)));
							 | 
						||
| 
								 | 
							
								    float pixels = width * delta;
							 | 
						||
| 
								 | 
							
								    float temp = abs(value);
							 | 
						||
| 
								 | 
							
								    return temp < tolerance && temp < pixels || (delta < 10.0 * tolerance && temp - delta < tolerance && temp < pixels);
							 | 
						||
| 
								 | 
							
								    #else
							 | 
						||
| 
								 | 
							
								    return abs(value) < tolerance;
							 | 
						||
| 
								 | 
							
								    #endif
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    vec4 shade(bool isOnBoundary)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								    if (u_showIntersection && isOnBoundary)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								    return getIntersectionColor();
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    return getColor(u_sensorRadius, v_positionEC);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    float ellipsoidSurfaceFunction( vec3 point)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								    vec3 scaled = czm_ellipsoidInverseRadii * point;
							 | 
						||
| 
								 | 
							
								    return dot(scaled, scaled) - 1.0;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    void main()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								    vec3 sensorVertexWC = czm_model[3].xyz;
							 | 
						||
| 
								 | 
							
								    vec3 sensorVertexEC = czm_modelView[3].xyz;
							 | 
						||
| 
								 | 
							
								    float ellipsoidValue = ellipsoidSurfaceFunction( v_positionWC);
							 | 
						||
| 
								 | 
							
								    if (!u_showThroughEllipsoid)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								    if (ellipsoidValue < 0.0)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								    discard;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    if (inSensorShadow(sensorVertexWC, v_positionWC))
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								    discard;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    if (distance(v_positionEC, sensorVertexEC) > u_sensorRadius)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								    discard;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    bool isOnEllipsoid = isOnBoundary(ellipsoidValue, czm_epsilon3);
							 | 
						||
| 
								 | 
							
								    out_FragColor = shade(isOnEllipsoid);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    `
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  define("text!custom/custom-sensor-volume-vs.glsl", [], function () {
							 | 
						||
| 
								 | 
							
								    return `in vec4 position;
							 | 
						||
| 
								 | 
							
								    in vec3 normal;
							 | 
						||
| 
								 | 
							
								    out vec3 v_positionWC;
							 | 
						||
| 
								 | 
							
								    out vec3 v_positionEC;
							 | 
						||
| 
								 | 
							
								    out vec3 v_normalEC;
							 | 
						||
| 
								 | 
							
								    void main()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								    gl_Position = czm_modelViewProjection * position;
							 | 
						||
| 
								 | 
							
								    v_positionWC = (czm_model * position).xyz;
							 | 
						||
| 
								 | 
							
								    v_positionEC = (czm_modelView * position).xyz;
							 | 
						||
| 
								 | 
							
								    v_normalEC = czm_normal * normal;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    `
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  define("text!sensor-volume.glsl", [], function () {
							 | 
						||
| 
								 | 
							
								    return  `uniform vec4 u_intersectionColor;
							 | 
						||
| 
								 | 
							
								    uniform float u_intersectionWidth;
							 | 
						||
| 
								 | 
							
								    bool inSensorShadow(vec3 coneVertexWC, vec3 pointWC)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								    vec3 D = czm_ellipsoidInverseRadii;
							 | 
						||
| 
								 | 
							
								    vec3 q = D * coneVertexWC;
							 | 
						||
| 
								 | 
							
								    float qMagnitudeSquared = dot(q, q);
							 | 
						||
| 
								 | 
							
								    float test = qMagnitudeSquared - 1.0;
							 | 
						||
| 
								 | 
							
								    vec3 temp = D * pointWC - q;
							 | 
						||
| 
								 | 
							
								    float d = dot(temp, q);
							 | 
						||
| 
								 | 
							
								    return (d < -test) && (d / length(temp) < -sqrt(test));
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    vec4 getIntersectionColor()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								    return u_intersectionColor;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    float getIntersectionWidth()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								    return u_intersectionWidth;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    vec2 sensor2dTextureCoordinates(float sensorRadius, vec3 pointMC)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								    float t = pointMC.z / sensorRadius;
							 | 
						||
| 
								 | 
							
								    float s = 1.0 + (atan(pointMC.y, pointMC.x) / czm_twoPi);
							 | 
						||
| 
								 | 
							
								    s = s - floor(s);
							 | 
						||
| 
								 | 
							
								    return vec2(s, t);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    `
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  define("custom/custom-sensor-volume", [
							 | 
						||
| 
								 | 
							
								    "require",
							 | 
						||
| 
								 | 
							
								    "Cesium/Core/BoundingSphere",
							 | 
						||
| 
								 | 
							
								    "Cesium/Core/Cartesian3",
							 | 
						||
| 
								 | 
							
								    "Cesium/Core/Color",
							 | 
						||
| 
								 | 
							
								    "Cesium/Core/combine",
							 | 
						||
| 
								 | 
							
								    "Cesium/Core/ComponentDatatype",
							 | 
						||
| 
								 | 
							
								    "Cesium/Core/defaultValue",
							 | 
						||
| 
								 | 
							
								    "Cesium/Core/defined",
							 | 
						||
| 
								 | 
							
								    "Cesium/Core/destroyObject",
							 | 
						||
| 
								 | 
							
								    "Cesium/Core/DeveloperError",
							 | 
						||
| 
								 | 
							
								    "Cesium/Core/Matrix4",
							 | 
						||
| 
								 | 
							
								    "Cesium/Core/PrimitiveType",
							 | 
						||
| 
								 | 
							
								    "Cesium/Renderer/Buffer",
							 | 
						||
| 
								 | 
							
								    "Cesium/Renderer/BufferUsage",
							 | 
						||
| 
								 | 
							
								    "Cesium/Renderer/DrawCommand",
							 | 
						||
| 
								 | 
							
								    "Cesium/Renderer/Pass",
							 | 
						||
| 
								 | 
							
								    "Cesium/Renderer/RenderState",
							 | 
						||
| 
								 | 
							
								    "Cesium/Renderer/ShaderProgram",
							 | 
						||
| 
								 | 
							
								    "Cesium/Renderer/ShaderSource",
							 | 
						||
| 
								 | 
							
								    "Cesium/Renderer/VertexArray",
							 | 
						||
| 
								 | 
							
								    "Cesium/Scene/BlendingState",
							 | 
						||
| 
								 | 
							
								    "Cesium/Scene/CullFace",
							 | 
						||
| 
								 | 
							
								    "Cesium/Scene/Material",
							 | 
						||
| 
								 | 
							
								    "Cesium/Scene/SceneMode",
							 | 
						||
| 
								 | 
							
								    "text!./custom-sensor-volume-fs.glsl",
							 | 
						||
| 
								 | 
							
								    "text!./custom-sensor-volume-vs.glsl",
							 | 
						||
| 
								 | 
							
								    "text!../sensor-volume.glsl"
							 | 
						||
| 
								 | 
							
								  ], function (require) {
							 | 
						||
| 
								 | 
							
								    "use strict"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    var BoundingSphere = require("Cesium/Core/BoundingSphere")
							 | 
						||
| 
								 | 
							
								    var Cartesian3 = require("Cesium/Core/Cartesian3")
							 | 
						||
| 
								 | 
							
								    var Color = require("Cesium/Core/Color")
							 | 
						||
| 
								 | 
							
								    var combine = require("Cesium/Core/combine")
							 | 
						||
| 
								 | 
							
								    var ComponentDatatype = require("Cesium/Core/ComponentDatatype")
							 | 
						||
| 
								 | 
							
								    var defaultValue = require("Cesium/Core/defaultValue")
							 | 
						||
| 
								 | 
							
								    var defined = require("Cesium/Core/defined")
							 | 
						||
| 
								 | 
							
								    var defineProperties = Object.defineProperties
							 | 
						||
| 
								 | 
							
								    var destroyObject = require("Cesium/Core/destroyObject")
							 | 
						||
| 
								 | 
							
								    var DeveloperError = require("Cesium/Core/DeveloperError")
							 | 
						||
| 
								 | 
							
								    var Matrix4 = require("Cesium/Core/Matrix4")
							 | 
						||
| 
								 | 
							
								    var PrimitiveType = require("Cesium/Core/PrimitiveType")
							 | 
						||
| 
								 | 
							
								    var Buffer = require("Cesium/Renderer/Buffer")
							 | 
						||
| 
								 | 
							
								    var BufferUsage = require("Cesium/Renderer/BufferUsage")
							 | 
						||
| 
								 | 
							
								    var DrawCommand = require("Cesium/Renderer/DrawCommand")
							 | 
						||
| 
								 | 
							
								    var Pass = require("Cesium/Renderer/Pass")
							 | 
						||
| 
								 | 
							
								    var RenderState = require("Cesium/Renderer/RenderState")
							 | 
						||
| 
								 | 
							
								    var ShaderProgram = require("Cesium/Renderer/ShaderProgram")
							 | 
						||
| 
								 | 
							
								    var ShaderSource = require("Cesium/Renderer/ShaderSource")
							 | 
						||
| 
								 | 
							
								    var VertexArray = require("Cesium/Renderer/VertexArray")
							 | 
						||
| 
								 | 
							
								    var BlendingState = require("Cesium/Scene/BlendingState")
							 | 
						||
| 
								 | 
							
								    var CullFace = require("Cesium/Scene/CullFace")
							 | 
						||
| 
								 | 
							
								    var Material = require("Cesium/Scene/Material")
							 | 
						||
| 
								 | 
							
								    var SceneMode = require("Cesium/Scene/SceneMode")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    var CustomSensorVolumeFS = require("text!./custom-sensor-volume-fs.glsl")
							 | 
						||
| 
								 | 
							
								    var CustomSensorVolumeVS = require("text!./custom-sensor-volume-vs.glsl")
							 | 
						||
| 
								 | 
							
								    var SensorVolume = require("text!../sensor-volume.glsl")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    var attributeLocations = {
							 | 
						||
| 
								 | 
							
								      position: 0,
							 | 
						||
| 
								 | 
							
								      normal: 1
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    var FAR = 5906376272000.0 // distance from the Sun to Pluto in meters.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * DOC_TBA
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @alias CustomSensorVolume
							 | 
						||
| 
								 | 
							
								     * @constructor
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    var CustomSensorVolume = function (options) {
							 | 
						||
| 
								 | 
							
								      options = defaultValue(options, defaultValue.EMPTY_OBJECT)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      this._pickId = undefined
							 | 
						||
| 
								 | 
							
								      this._pickPrimitive = defaultValue(options._pickPrimitive, this)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      this._frontFaceColorCommand = new DrawCommand()
							 | 
						||
| 
								 | 
							
								      this._backFaceColorCommand = new DrawCommand()
							 | 
						||
| 
								 | 
							
								      this._pickCommand = new DrawCommand()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      this._boundingSphere = new BoundingSphere()
							 | 
						||
| 
								 | 
							
								      this._boundingSphereWC = new BoundingSphere()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      this._frontFaceColorCommand.primitiveType = PrimitiveType.TRIANGLES
							 | 
						||
| 
								 | 
							
								      this._frontFaceColorCommand.boundingVolume = this._boundingSphereWC
							 | 
						||
| 
								 | 
							
								      this._frontFaceColorCommand.owner = this
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      this._backFaceColorCommand.primitiveType = this._frontFaceColorCommand.primitiveType
							 | 
						||
| 
								 | 
							
								      this._backFaceColorCommand.boundingVolume = this._frontFaceColorCommand.boundingVolume
							 | 
						||
| 
								 | 
							
								      this._backFaceColorCommand.owner = this
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      this._pickCommand.primitiveType = this._frontFaceColorCommand.primitiveType
							 | 
						||
| 
								 | 
							
								      this._pickCommand.boundingVolume = this._frontFaceColorCommand.boundingVolume
							 | 
						||
| 
								 | 
							
								      this._pickCommand.owner = this
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      /**
							 | 
						||
| 
								 | 
							
								       * <code>true</code> if this sensor will be shown; otherwise, <code>false</code>
							 | 
						||
| 
								 | 
							
								       *
							 | 
						||
| 
								 | 
							
								       * @type {Boolean}
							 | 
						||
| 
								 | 
							
								       * @default true
							 | 
						||
| 
								 | 
							
								       */
							 | 
						||
| 
								 | 
							
								      this.show = defaultValue(options.show, true)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      /**
							 | 
						||
| 
								 | 
							
								       * When <code>true</code>, a polyline is shown where the sensor outline intersections the globe.
							 | 
						||
| 
								 | 
							
								       *
							 | 
						||
| 
								 | 
							
								       * @type {Boolean}
							 | 
						||
| 
								 | 
							
								       *
							 | 
						||
| 
								 | 
							
								       * @default true
							 | 
						||
| 
								 | 
							
								       *
							 | 
						||
| 
								 | 
							
								       * @see CustomSensorVolume#intersectionColor
							 | 
						||
| 
								 | 
							
								       */
							 | 
						||
| 
								 | 
							
								      this.showIntersection = defaultValue(options.showIntersection, true)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      /**
							 | 
						||
| 
								 | 
							
								       * <p>
							 | 
						||
| 
								 | 
							
								       * Determines if a sensor intersecting the ellipsoid is drawn through the ellipsoid and potentially out
							 | 
						||
| 
								 | 
							
								       * to the other side, or if the part of the sensor intersecting the ellipsoid stops at the ellipsoid.
							 | 
						||
| 
								 | 
							
								       * </p>
							 | 
						||
| 
								 | 
							
								       *
							 | 
						||
| 
								 | 
							
								       * @type {Boolean}
							 | 
						||
| 
								 | 
							
								       * @default false
							 | 
						||
| 
								 | 
							
								       */
							 | 
						||
| 
								 | 
							
								      this.showThroughEllipsoid = defaultValue(options.showThroughEllipsoid, false)
							 | 
						||
| 
								 | 
							
								      this._showThroughEllipsoid = this.showThroughEllipsoid
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      /**
							 | 
						||
| 
								 | 
							
								       * The 4x4 transformation matrix that transforms this sensor from model to world coordinates.  In it's model
							 | 
						||
| 
								 | 
							
								       * coordinates, the sensor's principal direction is along the positive z-axis.  The clock angle, sometimes
							 | 
						||
| 
								 | 
							
								       * called azimuth, is the angle in the sensor's X-Y plane measured from the positive X-axis toward the positive
							 | 
						||
| 
								 | 
							
								       * Y-axis.  The cone angle, sometimes called elevation, is the angle out of the X-Y plane along the positive Z-axis.
							 | 
						||
| 
								 | 
							
								       * <br /><br />
							 | 
						||
| 
								 | 
							
								       * <div align='center'>
							 | 
						||
| 
								 | 
							
								       * <img src='images/CustomSensorVolume.setModelMatrix.png' /><br />
							 | 
						||
| 
								 | 
							
								       * Model coordinate system for a custom sensor
							 | 
						||
| 
								 | 
							
								       * </div>
							 | 
						||
| 
								 | 
							
								       *
							 | 
						||
| 
								 | 
							
								       * @type {Matrix4}
							 | 
						||
| 
								 | 
							
								       * @default {@link Matrix4.IDENTITY}
							 | 
						||
| 
								 | 
							
								       *
							 | 
						||
| 
								 | 
							
								       * @example
							 | 
						||
| 
								 | 
							
								       * // The sensor's vertex is located on the surface at -75.59777 degrees longitude and 40.03883 degrees latitude.
							 | 
						||
| 
								 | 
							
								       * // The sensor's opens upward, along the surface normal.
							 | 
						||
| 
								 | 
							
								       * var center = Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883);
							 | 
						||
| 
								 | 
							
								       * sensor.modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(center);
							 | 
						||
| 
								 | 
							
								       */
							 | 
						||
| 
								 | 
							
								      this.modelMatrix = Matrix4.clone(defaultValue(options.modelMatrix, Matrix4.IDENTITY))
							 | 
						||
| 
								 | 
							
								      this._modelMatrix = new Matrix4()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      /**
							 | 
						||
| 
								 | 
							
								       * DOC_TBA
							 | 
						||
| 
								 | 
							
								       *
							 | 
						||
| 
								 | 
							
								       * @type {Number}
							 | 
						||
| 
								 | 
							
								       * @default {@link Number.POSITIVE_INFINITY}
							 | 
						||
| 
								 | 
							
								       */
							 | 
						||
| 
								 | 
							
								      this.radius = defaultValue(options.radius, Number.POSITIVE_INFINITY)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      this._directions = undefined
							 | 
						||
| 
								 | 
							
								      this._directionsDirty = false
							 | 
						||
| 
								 | 
							
								      this.directions = defined(options.directions) ? options.directions : []
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      /**
							 | 
						||
| 
								 | 
							
								       * The surface appearance of the sensor.  This can be one of several built-in {@link Material} objects or a custom material, scripted with
							 | 
						||
| 
								 | 
							
								       * {@link https://github.com/AnalyticalGraphicsInc/cesium/wiki/Fabric|Fabric}.
							 | 
						||
| 
								 | 
							
								       * <p>
							 | 
						||
| 
								 | 
							
								       * The default material is <code>Material.ColorType</code>.
							 | 
						||
| 
								 | 
							
								       * </p>
							 | 
						||
| 
								 | 
							
								       *
							 | 
						||
| 
								 | 
							
								       * @type {Material}
							 | 
						||
| 
								 | 
							
								       * @default Material.fromType(Material.ColorType)
							 | 
						||
| 
								 | 
							
								       *
							 | 
						||
| 
								 | 
							
								       * @see {@link https://github.com/AnalyticalGraphicsInc/cesium/wiki/Fabric|Fabric}
							 | 
						||
| 
								 | 
							
								       *
							 | 
						||
| 
								 | 
							
								       * @example
							 | 
						||
| 
								 | 
							
								       * // 1. Change the color of the default material to yellow
							 | 
						||
| 
								 | 
							
								       * sensor.lateralSurfaceMaterial.uniforms.color = new Cesium.Color(1.0, 1.0, 0.0, 1.0);
							 | 
						||
| 
								 | 
							
								       *
							 | 
						||
| 
								 | 
							
								       * // 2. Change material to horizontal stripes
							 | 
						||
| 
								 | 
							
								       * sensor.lateralSurfaceMaterial = Cesium.Material.fromType(Material.StripeType);
							 | 
						||
| 
								 | 
							
								       */
							 | 
						||
| 
								 | 
							
								      this.lateralSurfaceMaterial = defined(options.lateralSurfaceMaterial) ? options.lateralSurfaceMaterial : Material.fromType(Material.ColorType)
							 | 
						||
| 
								 | 
							
								      this._lateralSurfaceMaterial = undefined
							 | 
						||
| 
								 | 
							
								      this._translucent = undefined
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      /**
							 | 
						||
| 
								 | 
							
								       * The color of the polyline where the sensor outline intersects the globe.  The default is {@link Color.WHITE}.
							 | 
						||
| 
								 | 
							
								       *
							 | 
						||
| 
								 | 
							
								       * @type {Color}
							 | 
						||
| 
								 | 
							
								       * @default {@link Color.WHITE}
							 | 
						||
| 
								 | 
							
								       *
							 | 
						||
| 
								 | 
							
								       * @see CustomSensorVolume#showIntersection
							 | 
						||
| 
								 | 
							
								       */
							 | 
						||
| 
								 | 
							
								      this.intersectionColor = Color.clone(defaultValue(options.intersectionColor, Color.WHITE))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      /**
							 | 
						||
| 
								 | 
							
								       * The approximate pixel width of the polyline where the sensor outline intersects the globe.  The default is 5.0.
							 | 
						||
| 
								 | 
							
								       *
							 | 
						||
| 
								 | 
							
								       * @type {Number}
							 | 
						||
| 
								 | 
							
								       * @default 5.0
							 | 
						||
| 
								 | 
							
								       *
							 | 
						||
| 
								 | 
							
								       * @see CustomSensorVolume#showIntersection
							 | 
						||
| 
								 | 
							
								       */
							 | 
						||
| 
								 | 
							
								      this.intersectionWidth = defaultValue(options.intersectionWidth, 5.0)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      /**
							 | 
						||
| 
								 | 
							
								       * User-defined object returned when the sensors is picked.
							 | 
						||
| 
								 | 
							
								       *
							 | 
						||
| 
								 | 
							
								       * @type Object
							 | 
						||
| 
								 | 
							
								       *
							 | 
						||
| 
								 | 
							
								       * @default undefined
							 | 
						||
| 
								 | 
							
								       *
							 | 
						||
| 
								 | 
							
								       * @see Scene#pick
							 | 
						||
| 
								 | 
							
								       */
							 | 
						||
| 
								 | 
							
								      this.id = options.id
							 | 
						||
| 
								 | 
							
								      this._id = undefined
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      var that = this
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      /* eslint-disable camelcase */
							 | 
						||
| 
								 | 
							
								      this._uniforms = {
							 | 
						||
| 
								 | 
							
								        u_showThroughEllipsoid: function () {
							 | 
						||
| 
								 | 
							
								          return that.showThroughEllipsoid
							 | 
						||
| 
								 | 
							
								        },
							 | 
						||
| 
								 | 
							
								        u_showIntersection: function () {
							 | 
						||
| 
								 | 
							
								          return that.showIntersection
							 | 
						||
| 
								 | 
							
								        },
							 | 
						||
| 
								 | 
							
								        u_sensorRadius: function () {
							 | 
						||
| 
								 | 
							
								          return isFinite(that.radius) ? that.radius : FAR
							 | 
						||
| 
								 | 
							
								        },
							 | 
						||
| 
								 | 
							
								        u_intersectionColor: function () {
							 | 
						||
| 
								 | 
							
								          return that.intersectionColor
							 | 
						||
| 
								 | 
							
								        },
							 | 
						||
| 
								 | 
							
								        u_intersectionWidth: function () {
							 | 
						||
| 
								 | 
							
								          return that.intersectionWidth
							 | 
						||
| 
								 | 
							
								        },
							 | 
						||
| 
								 | 
							
								        u_normalDirection: function () {
							 | 
						||
| 
								 | 
							
								          return 1.0
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    defineProperties(CustomSensorVolume.prototype, {
							 | 
						||
| 
								 | 
							
								      directions: {
							 | 
						||
| 
								 | 
							
								        get: function () {
							 | 
						||
| 
								 | 
							
								          return this._directions
							 | 
						||
| 
								 | 
							
								        },
							 | 
						||
| 
								 | 
							
								        set: function (value) {
							 | 
						||
| 
								 | 
							
								          this._directions = value
							 | 
						||
| 
								 | 
							
								          this._directionsDirty = true
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    var n0Scratch = new Cartesian3()
							 | 
						||
| 
								 | 
							
								    var n1Scratch = new Cartesian3()
							 | 
						||
| 
								 | 
							
								    var n2Scratch = new Cartesian3()
							 | 
						||
| 
								 | 
							
								    function computePositions(customSensorVolume) {
							 | 
						||
| 
								 | 
							
								      var directions = customSensorVolume._directions
							 | 
						||
| 
								 | 
							
								      var length = directions.length
							 | 
						||
| 
								 | 
							
								      var positions = new Float32Array(3 * length)
							 | 
						||
| 
								 | 
							
								      var r = isFinite(customSensorVolume.radius) ? customSensorVolume.radius : FAR
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      var boundingVolumePositions = [Cartesian3.ZERO]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      for (var i = length - 2, j = length - 1, k = 0; k < length; i = j++, j = k++) {
							 | 
						||
| 
								 | 
							
								        // PERFORMANCE_IDEA:  We can avoid redundant operations for adjacent edges.
							 | 
						||
| 
								 | 
							
								        var n0 = Cartesian3.fromSpherical(directions[i], n0Scratch)
							 | 
						||
| 
								 | 
							
								        var n1 = Cartesian3.fromSpherical(directions[j], n1Scratch)
							 | 
						||
| 
								 | 
							
								        var n2 = Cartesian3.fromSpherical(directions[k], n2Scratch)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // Extend position so the volume encompasses the sensor's radius.
							 | 
						||
| 
								 | 
							
								        var theta = Math.max(Cartesian3.angleBetween(n0, n1), Cartesian3.angleBetween(n1, n2))
							 | 
						||
| 
								 | 
							
								        var distance = r / Math.cos(theta * 0.5)
							 | 
						||
| 
								 | 
							
								        var p = Cartesian3.multiplyByScalar(n1, distance, new Cartesian3())
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        positions[j * 3] = p.x
							 | 
						||
| 
								 | 
							
								        positions[j * 3 + 1] = p.y
							 | 
						||
| 
								 | 
							
								        positions[j * 3 + 2] = p.z
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        boundingVolumePositions.push(p)
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      BoundingSphere.fromPoints(boundingVolumePositions, customSensorVolume._boundingSphere)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      return positions
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    var nScratch = new Cartesian3()
							 | 
						||
| 
								 | 
							
								    function createVertexArray(customSensorVolume, context) {
							 | 
						||
| 
								 | 
							
								      var positions = computePositions(customSensorVolume)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      var length = customSensorVolume._directions.length
							 | 
						||
| 
								 | 
							
								      var vertices = new Float32Array(2 * 3 * 3 * length)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      var k = 0
							 | 
						||
| 
								 | 
							
								      for (var i = length - 1, j = 0; j < length; i = j++) {
							 | 
						||
| 
								 | 
							
								        var p0 = new Cartesian3(positions[i * 3], positions[i * 3 + 1], positions[i * 3 + 2])
							 | 
						||
| 
								 | 
							
								        var p1 = new Cartesian3(positions[j * 3], positions[j * 3 + 1], positions[j * 3 + 2])
							 | 
						||
| 
								 | 
							
								        var n = Cartesian3.normalize(Cartesian3.cross(p1, p0, nScratch), nScratch) // Per-face normals
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        vertices[k++] = 0.0 // Sensor vertex
							 | 
						||
| 
								 | 
							
								        vertices[k++] = 0.0
							 | 
						||
| 
								 | 
							
								        vertices[k++] = 0.0
							 | 
						||
| 
								 | 
							
								        vertices[k++] = n.x
							 | 
						||
| 
								 | 
							
								        vertices[k++] = n.y
							 | 
						||
| 
								 | 
							
								        vertices[k++] = n.z
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        vertices[k++] = p1.x
							 | 
						||
| 
								 | 
							
								        vertices[k++] = p1.y
							 | 
						||
| 
								 | 
							
								        vertices[k++] = p1.z
							 | 
						||
| 
								 | 
							
								        vertices[k++] = n.x
							 | 
						||
| 
								 | 
							
								        vertices[k++] = n.y
							 | 
						||
| 
								 | 
							
								        vertices[k++] = n.z
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        vertices[k++] = p0.x
							 | 
						||
| 
								 | 
							
								        vertices[k++] = p0.y
							 | 
						||
| 
								 | 
							
								        vertices[k++] = p0.z
							 | 
						||
| 
								 | 
							
								        vertices[k++] = n.x
							 | 
						||
| 
								 | 
							
								        vertices[k++] = n.y
							 | 
						||
| 
								 | 
							
								        vertices[k++] = n.z
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      var vertexBuffer = Buffer.createVertexBuffer({
							 | 
						||
| 
								 | 
							
								        context: context,
							 | 
						||
| 
								 | 
							
								        typedArray: new Float32Array(vertices),
							 | 
						||
| 
								 | 
							
								        usage: BufferUsage.STATIC_DRAW
							 | 
						||
| 
								 | 
							
								      })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      var stride = 2 * 3 * Float32Array.BYTES_PER_ELEMENT
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      var attributes = [
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								          index: attributeLocations.position,
							 | 
						||
| 
								 | 
							
								          vertexBuffer: vertexBuffer,
							 | 
						||
| 
								 | 
							
								          componentsPerAttribute: 3,
							 | 
						||
| 
								 | 
							
								          componentDatatype: ComponentDatatype.FLOAT,
							 | 
						||
| 
								 | 
							
								          offsetInBytes: 0,
							 | 
						||
| 
								 | 
							
								          strideInBytes: stride
							 | 
						||
| 
								 | 
							
								        },
							 | 
						||
| 
								 | 
							
								        {
							 | 
						||
| 
								 | 
							
								          index: attributeLocations.normal,
							 | 
						||
| 
								 | 
							
								          vertexBuffer: vertexBuffer,
							 | 
						||
| 
								 | 
							
								          componentsPerAttribute: 3,
							 | 
						||
| 
								 | 
							
								          componentDatatype: ComponentDatatype.FLOAT,
							 | 
						||
| 
								 | 
							
								          offsetInBytes: 3 * Float32Array.BYTES_PER_ELEMENT,
							 | 
						||
| 
								 | 
							
								          strideInBytes: stride
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      ]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      return new VertexArray({
							 | 
						||
| 
								 | 
							
								        context: context,
							 | 
						||
| 
								 | 
							
								        attributes: attributes
							 | 
						||
| 
								 | 
							
								      })
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Called when {@link Viewer} or {@link CesiumWidget} render the scene to
							 | 
						||
| 
								 | 
							
								     * get the draw commands needed to render this primitive.
							 | 
						||
| 
								 | 
							
								     * <p>
							 | 
						||
| 
								 | 
							
								     * Do not call this function directly.  This is documented just to
							 | 
						||
| 
								 | 
							
								     * list the exceptions that may be propagated when the scene is rendered:
							 | 
						||
| 
								 | 
							
								     * </p>
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @exception {DeveloperError} this.radius must be greater than or equal to zero.
							 | 
						||
| 
								 | 
							
								     * @exception {DeveloperError} this.lateralSurfaceMaterial must be defined.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    CustomSensorVolume.prototype.update = function (frameState) {
							 | 
						||
| 
								 | 
							
								      if (!this.show || frameState.mode !== SceneMode.SCENE3D) {
							 | 
						||
| 
								 | 
							
								        return
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      var context = frameState.context
							 | 
						||
| 
								 | 
							
								      var commandList = frameState.commandList
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      // >>includeStart('debug', pragmas.debug);
							 | 
						||
| 
								 | 
							
								      if (this.radius < 0.0) {
							 | 
						||
| 
								 | 
							
								        throw new DeveloperError("this.radius must be greater than or equal to zero.")
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      if (!defined(this.lateralSurfaceMaterial)) {
							 | 
						||
| 
								 | 
							
								        throw new DeveloperError("this.lateralSurfaceMaterial must be defined.")
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      // >>includeEnd('debug');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      var translucent = this.lateralSurfaceMaterial.isTranslucent()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      // Initial render state creation
							 | 
						||
| 
								 | 
							
								      if (
							 | 
						||
| 
								 | 
							
								        this._showThroughEllipsoid !== this.showThroughEllipsoid ||
							 | 
						||
| 
								 | 
							
								        !defined(this._frontFaceColorCommand.renderState) ||
							 | 
						||
| 
								 | 
							
								        this._translucent !== translucent
							 | 
						||
| 
								 | 
							
								      ) {
							 | 
						||
| 
								 | 
							
								        this._showThroughEllipsoid = this.showThroughEllipsoid
							 | 
						||
| 
								 | 
							
								        this._translucent = translucent
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        var rs
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if (translucent) {
							 | 
						||
| 
								 | 
							
								          rs = RenderState.fromCache({
							 | 
						||
| 
								 | 
							
								            depthTest: {
							 | 
						||
| 
								 | 
							
								              // This would be better served by depth testing with a depth buffer that does not
							 | 
						||
| 
								 | 
							
								              // include the ellipsoid depth - or a g-buffer containing an ellipsoid mask
							 | 
						||
| 
								 | 
							
								              // so we can selectively depth test.
							 | 
						||
| 
								 | 
							
								              enabled: !this.showThroughEllipsoid
							 | 
						||
| 
								 | 
							
								            },
							 | 
						||
| 
								 | 
							
								            depthMask: false,
							 | 
						||
| 
								 | 
							
								            blending: BlendingState.ALPHA_BLEND,
							 | 
						||
| 
								 | 
							
								            cull: {
							 | 
						||
| 
								 | 
							
								              enabled: true,
							 | 
						||
| 
								 | 
							
								              face: CullFace.BACK
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								          })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								          this._frontFaceColorCommand.renderState = rs
							 | 
						||
| 
								 | 
							
								          this._frontFaceColorCommand.pass = Pass.TRANSLUCENT
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								          rs = RenderState.fromCache({
							 | 
						||
| 
								 | 
							
								            depthTest: {
							 | 
						||
| 
								 | 
							
								              enabled: !this.showThroughEllipsoid
							 | 
						||
| 
								 | 
							
								            },
							 | 
						||
| 
								 | 
							
								            depthMask: false,
							 | 
						||
| 
								 | 
							
								            blending: BlendingState.ALPHA_BLEND,
							 | 
						||
| 
								 | 
							
								            cull: {
							 | 
						||
| 
								 | 
							
								              enabled: true,
							 | 
						||
| 
								 | 
							
								              face: CullFace.FRONT
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								          })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								          this._backFaceColorCommand.renderState = rs
							 | 
						||
| 
								 | 
							
								          this._backFaceColorCommand.pass = Pass.TRANSLUCENT
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								          rs = RenderState.fromCache({
							 | 
						||
| 
								 | 
							
								            depthTest: {
							 | 
						||
| 
								 | 
							
								              enabled: !this.showThroughEllipsoid
							 | 
						||
| 
								 | 
							
								            },
							 | 
						||
| 
								 | 
							
								            depthMask: false,
							 | 
						||
| 
								 | 
							
								            blending: BlendingState.ALPHA_BLEND
							 | 
						||
| 
								 | 
							
								          })
							 | 
						||
| 
								 | 
							
								          this._pickCommand.renderState = rs
							 | 
						||
| 
								 | 
							
								        } else {
							 | 
						||
| 
								 | 
							
								          rs = RenderState.fromCache({
							 | 
						||
| 
								 | 
							
								            depthTest: {
							 | 
						||
| 
								 | 
							
								              enabled: true
							 | 
						||
| 
								 | 
							
								            },
							 | 
						||
| 
								 | 
							
								            depthMask: true
							 | 
						||
| 
								 | 
							
								          })
							 | 
						||
| 
								 | 
							
								          this._frontFaceColorCommand.renderState = rs
							 | 
						||
| 
								 | 
							
								          this._frontFaceColorCommand.pass = Pass.OPAQUE
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								          rs = RenderState.fromCache({
							 | 
						||
| 
								 | 
							
								            depthTest: {
							 | 
						||
| 
								 | 
							
								              enabled: true
							 | 
						||
| 
								 | 
							
								            },
							 | 
						||
| 
								 | 
							
								            depthMask: true
							 | 
						||
| 
								 | 
							
								          })
							 | 
						||
| 
								 | 
							
								          this._pickCommand.renderState = rs
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      // Recreate vertex buffer when directions change
							 | 
						||
| 
								 | 
							
								      var directionsChanged = this._directionsDirty
							 | 
						||
| 
								 | 
							
								      if (directionsChanged) {
							 | 
						||
| 
								 | 
							
								        this._directionsDirty = false
							 | 
						||
| 
								 | 
							
								        this._va = this._va && this._va.destroy()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        var directions = this._directions
							 | 
						||
| 
								 | 
							
								        if (directions && directions.length >= 3) {
							 | 
						||
| 
								 | 
							
								          this._frontFaceColorCommand.vertexArray = createVertexArray(this, context)
							 | 
						||
| 
								 | 
							
								          this._backFaceColorCommand.vertexArray = this._frontFaceColorCommand.vertexArray
							 | 
						||
| 
								 | 
							
								          this._pickCommand.vertexArray = this._frontFaceColorCommand.vertexArray
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      if (!defined(this._frontFaceColorCommand.vertexArray)) {
							 | 
						||
| 
								 | 
							
								        return
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      var pass = frameState.passes
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      var modelMatrixChanged = !Matrix4.equals(this.modelMatrix, this._modelMatrix)
							 | 
						||
| 
								 | 
							
								      if (modelMatrixChanged) {
							 | 
						||
| 
								 | 
							
								        Matrix4.clone(this.modelMatrix, this._modelMatrix)
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      if (directionsChanged || modelMatrixChanged) {
							 | 
						||
| 
								 | 
							
								        BoundingSphere.transform(this._boundingSphere, this.modelMatrix, this._boundingSphereWC)
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      this._frontFaceColorCommand.modelMatrix = this.modelMatrix
							 | 
						||
| 
								 | 
							
								      this._backFaceColorCommand.modelMatrix = this._frontFaceColorCommand.modelMatrix
							 | 
						||
| 
								 | 
							
								      this._pickCommand.modelMatrix = this._frontFaceColorCommand.modelMatrix
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      var materialChanged = this._lateralSurfaceMaterial !== this.lateralSurfaceMaterial
							 | 
						||
| 
								 | 
							
								      this._lateralSurfaceMaterial = this.lateralSurfaceMaterial
							 | 
						||
| 
								 | 
							
								      this._lateralSurfaceMaterial.update(context)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      if (pass.render) {
							 | 
						||
| 
								 | 
							
								        var frontFaceColorCommand = this._frontFaceColorCommand
							 | 
						||
| 
								 | 
							
								        var backFaceColorCommand = this._backFaceColorCommand
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // Recompile shader when material changes
							 | 
						||
| 
								 | 
							
								        if (materialChanged || !defined(frontFaceColorCommand.shaderProgram)) {
							 | 
						||
| 
								 | 
							
								          var fsSource = new ShaderSource({
							 | 
						||
| 
								 | 
							
								            sources: [SensorVolume, this._lateralSurfaceMaterial.shaderSource, CustomSensorVolumeFS]
							 | 
						||
| 
								 | 
							
								          })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								          frontFaceColorCommand.shaderProgram = ShaderProgram.replaceCache({
							 | 
						||
| 
								 | 
							
								            context: context,
							 | 
						||
| 
								 | 
							
								            shaderProgram: frontFaceColorCommand.shaderProgram,
							 | 
						||
| 
								 | 
							
								            vertexShaderSource: CustomSensorVolumeVS,
							 | 
						||
| 
								 | 
							
								            fragmentShaderSource: fsSource,
							 | 
						||
| 
								 | 
							
								            attributeLocations: attributeLocations
							 | 
						||
| 
								 | 
							
								          })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								          frontFaceColorCommand.uniformMap = combine(this._uniforms, this._lateralSurfaceMaterial._uniforms)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								          backFaceColorCommand.shaderProgram = frontFaceColorCommand.shaderProgram
							 | 
						||
| 
								 | 
							
								          backFaceColorCommand.uniformMap = combine(this._uniforms, this._lateralSurfaceMaterial._uniforms)
							 | 
						||
| 
								 | 
							
								          // eslint-disable-next-line camelcase
							 | 
						||
| 
								 | 
							
								          backFaceColorCommand.uniformMap.u_normalDirection = function () {
							 | 
						||
| 
								 | 
							
								            return -1.0
							 | 
						||
| 
								 | 
							
								          }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if (translucent) {
							 | 
						||
| 
								 | 
							
								          commandList.push(this._backFaceColorCommand, this._frontFaceColorCommand)
							 | 
						||
| 
								 | 
							
								        } else {
							 | 
						||
| 
								 | 
							
								          commandList.push(this._frontFaceColorCommand)
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      if (pass.pick) {
							 | 
						||
| 
								 | 
							
								        var pickCommand = this._pickCommand
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if (!defined(this._pickId) || this._id !== this.id) {
							 | 
						||
| 
								 | 
							
								          this._id = this.id
							 | 
						||
| 
								 | 
							
								          this._pickId = this._pickId && this._pickId.destroy()
							 | 
						||
| 
								 | 
							
								          this._pickId = context.createPickId({
							 | 
						||
| 
								 | 
							
								            primitive: this._pickPrimitive,
							 | 
						||
| 
								 | 
							
								            id: this.id
							 | 
						||
| 
								 | 
							
								          })
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        // Recompile shader when material changes
							 | 
						||
| 
								 | 
							
								        if (materialChanged || !defined(pickCommand.shaderProgram)) {
							 | 
						||
| 
								 | 
							
								          var pickFS = new ShaderSource({
							 | 
						||
| 
								 | 
							
								            sources: [SensorVolume, this._lateralSurfaceMaterial.shaderSource, CustomSensorVolumeFS],
							 | 
						||
| 
								 | 
							
								            pickColorQualifier: "uniform"
							 | 
						||
| 
								 | 
							
								          })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								          pickCommand.shaderProgram = ShaderProgram.replaceCache({
							 | 
						||
| 
								 | 
							
								            context: context,
							 | 
						||
| 
								 | 
							
								            shaderProgram: pickCommand.shaderProgram,
							 | 
						||
| 
								 | 
							
								            vertexShaderSource: CustomSensorVolumeVS,
							 | 
						||
| 
								 | 
							
								            fragmentShaderSource: pickFS,
							 | 
						||
| 
								 | 
							
								            attributeLocations: attributeLocations
							 | 
						||
| 
								 | 
							
								          })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								          var that = this
							 | 
						||
| 
								 | 
							
								          var uniforms = {
							 | 
						||
| 
								 | 
							
								            // eslint-disable-next-line camelcase
							 | 
						||
| 
								 | 
							
								            czm_pickColor: function () {
							 | 
						||
| 
								 | 
							
								              return that._pickId.color
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								          }
							 | 
						||
| 
								 | 
							
								          pickCommand.uniformMap = combine(combine(this._uniforms, this._lateralSurfaceMaterial._uniforms), uniforms)
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        pickCommand.pass = translucent ? Pass.TRANSLUCENT : Pass.OPAQUE
							 | 
						||
| 
								 | 
							
								        commandList.push(pickCommand)
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * DOC_TBA
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    CustomSensorVolume.prototype.isDestroyed = function () {
							 | 
						||
| 
								 | 
							
								      return false
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * DOC_TBA
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    CustomSensorVolume.prototype.destroy = function () {
							 | 
						||
| 
								 | 
							
								      this._frontFaceColorCommand.vertexArray = this._frontFaceColorCommand.vertexArray && this._frontFaceColorCommand.vertexArray.destroy()
							 | 
						||
| 
								 | 
							
								      this._frontFaceColorCommand.shaderProgram = this._frontFaceColorCommand.shaderProgram && this._frontFaceColorCommand.shaderProgram.destroy()
							 | 
						||
| 
								 | 
							
								      this._pickCommand.shaderProgram = this._pickCommand.shaderProgram && this._pickCommand.shaderProgram.destroy()
							 | 
						||
| 
								 | 
							
								      this._pickId = this._pickId && this._pickId.destroy()
							 | 
						||
| 
								 | 
							
								      return destroyObject(this)
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    return CustomSensorVolume
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  define("util/remove-primitive", ["require", "Cesium/Core/defined"], function (require) {
							 | 
						||
| 
								 | 
							
								    "use strict"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    var defined = require("Cesium/Core/defined")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    return function removePrimitive(entity, hash, primitives) {
							 | 
						||
| 
								 | 
							
								      var data = hash[entity.id]
							 | 
						||
| 
								 | 
							
								      if (defined(data)) {
							 | 
						||
| 
								 | 
							
								        var primitive = data.primitive
							 | 
						||
| 
								 | 
							
								        primitives.remove(primitive)
							 | 
						||
| 
								 | 
							
								        if (!primitive.isDestroyed()) {
							 | 
						||
| 
								 | 
							
								          primitive.destroy()
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        delete hash[entity.id]
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  define("conic/conic-sensor-visualizer", [
							 | 
						||
| 
								 | 
							
								    "require",
							 | 
						||
| 
								 | 
							
								    "Cesium/Core/AssociativeArray",
							 | 
						||
| 
								 | 
							
								    "Cesium/Core/Cartesian3",
							 | 
						||
| 
								 | 
							
								    "Cesium/Core/Color",
							 | 
						||
| 
								 | 
							
								    "Cesium/Core/defined",
							 | 
						||
| 
								 | 
							
								    "Cesium/Core/destroyObject",
							 | 
						||
| 
								 | 
							
								    "Cesium/Core/DeveloperError",
							 | 
						||
| 
								 | 
							
								    "Cesium/Core/Math",
							 | 
						||
| 
								 | 
							
								    "Cesium/Core/Matrix3",
							 | 
						||
| 
								 | 
							
								    "Cesium/Core/Matrix4",
							 | 
						||
| 
								 | 
							
								    "Cesium/Core/Quaternion",
							 | 
						||
| 
								 | 
							
								    "Cesium/Core/Spherical",
							 | 
						||
| 
								 | 
							
								    "Cesium/DataSources/MaterialProperty",
							 | 
						||
| 
								 | 
							
								    "Cesium/DataSources/Property",
							 | 
						||
| 
								 | 
							
								    "../custom/custom-sensor-volume",
							 | 
						||
| 
								 | 
							
								    "../util/remove-primitive"
							 | 
						||
| 
								 | 
							
								  ], function (require) {
							 | 
						||
| 
								 | 
							
								    "use strict"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    var AssociativeArray = require("Cesium/Core/AssociativeArray")
							 | 
						||
| 
								 | 
							
								    var Cartesian3 = require("Cesium/Core/Cartesian3")
							 | 
						||
| 
								 | 
							
								    var Color = require("Cesium/Core/Color")
							 | 
						||
| 
								 | 
							
								    var defined = require("Cesium/Core/defined")
							 | 
						||
| 
								 | 
							
								    var destroyObject = require("Cesium/Core/destroyObject")
							 | 
						||
| 
								 | 
							
								    var DeveloperError = require("Cesium/Core/DeveloperError")
							 | 
						||
| 
								 | 
							
								    var CesiumMath = require("Cesium/Core/Math")
							 | 
						||
| 
								 | 
							
								    var Matrix3 = require("Cesium/Core/Matrix3")
							 | 
						||
| 
								 | 
							
								    var Matrix4 = require("Cesium/Core/Matrix4")
							 | 
						||
| 
								 | 
							
								    var Quaternion = require("Cesium/Core/Quaternion")
							 | 
						||
| 
								 | 
							
								    var Spherical = require("Cesium/Core/Spherical")
							 | 
						||
| 
								 | 
							
								    var MaterialProperty = require("Cesium/DataSources/MaterialProperty")
							 | 
						||
| 
								 | 
							
								    var Property = require("Cesium/DataSources/Property")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    var CustomSensorVolume = require("../custom/custom-sensor-volume")
							 | 
						||
| 
								 | 
							
								    var removePrimitive = require("../util/remove-primitive")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    var defaultIntersectionColor = Color.WHITE
							 | 
						||
| 
								 | 
							
								    var defaultIntersectionWidth = 1.0
							 | 
						||
| 
								 | 
							
								    var defaultRadius = Number.POSITIVE_INFINITY
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    var matrix3Scratch = new Matrix3()
							 | 
						||
| 
								 | 
							
								    var cachedPosition = new Cartesian3()
							 | 
						||
| 
								 | 
							
								    var cachedOrientation = new Quaternion()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    function assignSpherical(index, array, clock, cone) {
							 | 
						||
| 
								 | 
							
								      var spherical = array[index]
							 | 
						||
| 
								 | 
							
								      if (!defined(spherical)) {
							 | 
						||
| 
								 | 
							
								        spherical = new Spherical()
							 | 
						||
| 
								 | 
							
								        array[index] = spherical
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      spherical.clock = clock
							 | 
						||
| 
								 | 
							
								      spherical.cone = cone
							 | 
						||
| 
								 | 
							
								      spherical.magnitude = 1.0
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    function computeDirections(primitive, minimumClockAngle, maximumClockAngle, innerHalfAngle, outerHalfAngle) {
							 | 
						||
| 
								 | 
							
								      var directions = primitive.directions
							 | 
						||
| 
								 | 
							
								      var angle
							 | 
						||
| 
								 | 
							
								      var i = 0
							 | 
						||
| 
								 | 
							
								      var angleStep = CesiumMath.toRadians(2.0)
							 | 
						||
| 
								 | 
							
								      if (minimumClockAngle === 0.0 && maximumClockAngle === CesiumMath.TWO_PI) {
							 | 
						||
| 
								 | 
							
								        // No clock angle limits, so this is just a circle.
							 | 
						||
| 
								 | 
							
								        // There might be a hole but we're ignoring it for now.
							 | 
						||
| 
								 | 
							
								        for (angle = 0.0; angle < CesiumMath.TWO_PI; angle += angleStep) {
							 | 
						||
| 
								 | 
							
								          assignSpherical(i++, directions, angle, outerHalfAngle)
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      } else {
							 | 
						||
| 
								 | 
							
								        // There are clock angle limits.
							 | 
						||
| 
								 | 
							
								        for (angle = minimumClockAngle; angle < maximumClockAngle; angle += angleStep) {
							 | 
						||
| 
								 | 
							
								          assignSpherical(i++, directions, angle, outerHalfAngle)
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        assignSpherical(i++, directions, maximumClockAngle, outerHalfAngle)
							 | 
						||
| 
								 | 
							
								        if (innerHalfAngle) {
							 | 
						||
| 
								 | 
							
								          for (angle = maximumClockAngle; angle > minimumClockAngle; angle -= angleStep) {
							 | 
						||
| 
								 | 
							
								            assignSpherical(i++, directions, angle, innerHalfAngle)
							 | 
						||
| 
								 | 
							
								          }
							 | 
						||
| 
								 | 
							
								          assignSpherical(i++, directions, minimumClockAngle, innerHalfAngle)
							 | 
						||
| 
								 | 
							
								        } else {
							 | 
						||
| 
								 | 
							
								          assignSpherical(i++, directions, maximumClockAngle, 0.0)
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      directions.length = i
							 | 
						||
| 
								 | 
							
								      primitive.directions = directions
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * A {@link Visualizer} which maps {@link Entity#conicSensor} to a {@link ConicSensor}.
							 | 
						||
| 
								 | 
							
								     * @alias ConicSensorVisualizer
							 | 
						||
| 
								 | 
							
								     * @constructor
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param {Scene} scene The scene the primitives will be rendered in.
							 | 
						||
| 
								 | 
							
								     * @param {EntityCollection} entityCollection The entityCollection to visualize.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    var ConicSensorVisualizer = function (scene, entityCollection) {
							 | 
						||
| 
								 | 
							
								      // >>includeStart('debug', pragmas.debug);
							 | 
						||
| 
								 | 
							
								      if (!defined(scene)) {
							 | 
						||
| 
								 | 
							
								        throw new DeveloperError("scene is required.")
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      if (!defined(entityCollection)) {
							 | 
						||
| 
								 | 
							
								        throw new DeveloperError("entityCollection is required.")
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      // >>includeEnd('debug');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      entityCollection.collectionChanged.addEventListener(ConicSensorVisualizer.prototype._onCollectionChanged, this)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      this._scene = scene
							 | 
						||
| 
								 | 
							
								      this._primitives = scene.primitives
							 | 
						||
| 
								 | 
							
								      this._entityCollection = entityCollection
							 | 
						||
| 
								 | 
							
								      this._hash = {}
							 | 
						||
| 
								 | 
							
								      this._entitiesToVisualize = new AssociativeArray()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      this._onCollectionChanged(entityCollection, entityCollection.values, [], [])
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Updates the primitives created by this visualizer to match their
							 | 
						||
| 
								 | 
							
								     * Entity counterpart at the given time.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param {JulianDate} time The time to update to.
							 | 
						||
| 
								 | 
							
								     * @returns {Boolean} This function always returns true.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    ConicSensorVisualizer.prototype.update = function (time) {
							 | 
						||
| 
								 | 
							
								      // >>includeStart('debug', pragmas.debug);
							 | 
						||
| 
								 | 
							
								      if (!defined(time)) {
							 | 
						||
| 
								 | 
							
								        throw new DeveloperError("time is required.")
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      // >>includeEnd('debug');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      var entities = this._entitiesToVisualize.values
							 | 
						||
| 
								 | 
							
								      var hash = this._hash
							 | 
						||
| 
								 | 
							
								      var primitives = this._primitives
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      for (var i = 0, len = entities.length; i < len; i++) {
							 | 
						||
| 
								 | 
							
								        var entity = entities[i]
							 | 
						||
| 
								 | 
							
								        var conicSensorGraphics = entity._conicSensor
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        var position
							 | 
						||
| 
								 | 
							
								        var orientation
							 | 
						||
| 
								 | 
							
								        var data = hash[entity.id]
							 | 
						||
| 
								 | 
							
								        var show = entity.isShowing && entity.isAvailable(time) && Property.getValueOrDefault(conicSensorGraphics._show, time, true)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if (show) {
							 | 
						||
| 
								 | 
							
								          position = Property.getValueOrUndefined(entity._position, time, cachedPosition)
							 | 
						||
| 
								 | 
							
								          orientation = Property.getValueOrUndefined(entity._orientation, time, cachedOrientation)
							 | 
						||
| 
								 | 
							
								          show = defined(position) && defined(orientation)
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if (!show) {
							 | 
						||
| 
								 | 
							
								          // don't bother creating or updating anything else
							 | 
						||
| 
								 | 
							
								          if (defined(data)) {
							 | 
						||
| 
								 | 
							
								            data.primitive.show = false
							 | 
						||
| 
								 | 
							
								          }
							 | 
						||
| 
								 | 
							
								          continue
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        var primitive = defined(data) ? data.primitive : undefined
							 | 
						||
| 
								 | 
							
								        if (!defined(primitive)) {
							 | 
						||
| 
								 | 
							
								          primitive = new CustomSensorVolume()
							 | 
						||
| 
								 | 
							
								          primitive.id = entity
							 | 
						||
| 
								 | 
							
								          primitives.add(primitive)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								          data = {
							 | 
						||
| 
								 | 
							
								            primitive: primitive,
							 | 
						||
| 
								 | 
							
								            position: undefined,
							 | 
						||
| 
								 | 
							
								            orientation: undefined,
							 | 
						||
| 
								 | 
							
								            minimumClockAngle: undefined,
							 | 
						||
| 
								 | 
							
								            maximumClockAngle: undefined,
							 | 
						||
| 
								 | 
							
								            innerHalfAngle: undefined,
							 | 
						||
| 
								 | 
							
								            outerHalfAngle: undefined
							 | 
						||
| 
								 | 
							
								          }
							 | 
						||
| 
								 | 
							
								          hash[entity.id] = data
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if (!Cartesian3.equals(position, data.position) || !Quaternion.equals(orientation, data.orientation)) {
							 | 
						||
| 
								 | 
							
								          Matrix4.fromRotationTranslation(Matrix3.fromQuaternion(orientation, matrix3Scratch), position, primitive.modelMatrix)
							 | 
						||
| 
								 | 
							
								          data.position = Cartesian3.clone(position, data.position)
							 | 
						||
| 
								 | 
							
								          data.orientation = Quaternion.clone(orientation, data.orientation)
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        primitive.show = true
							 | 
						||
| 
								 | 
							
								        var minimumClockAngle = Property.getValueOrDefault(conicSensorGraphics._minimumClockAngle, time, 0)
							 | 
						||
| 
								 | 
							
								        var maximumClockAngle = Property.getValueOrDefault(conicSensorGraphics._maximumClockAngle, time, CesiumMath.TWO_PI)
							 | 
						||
| 
								 | 
							
								        var innerHalfAngle = Property.getValueOrDefault(conicSensorGraphics._innerHalfAngle, time, 0)
							 | 
						||
| 
								 | 
							
								        var outerHalfAngle = Property.getValueOrDefault(conicSensorGraphics._outerHalfAngle, time, Math.PI)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if (
							 | 
						||
| 
								 | 
							
								          minimumClockAngle !== data.minimumClockAngle ||
							 | 
						||
| 
								 | 
							
								          maximumClockAngle !== data.maximumClockAngle ||
							 | 
						||
| 
								 | 
							
								          innerHalfAngle !== data.innerHalfAngle ||
							 | 
						||
| 
								 | 
							
								          outerHalfAngle !== data.outerHalfAngle
							 | 
						||
| 
								 | 
							
								        ) {
							 | 
						||
| 
								 | 
							
								          computeDirections(primitive, minimumClockAngle, maximumClockAngle, innerHalfAngle, outerHalfAngle)
							 | 
						||
| 
								 | 
							
								          data.innerHalfAngle = innerHalfAngle
							 | 
						||
| 
								 | 
							
								          data.maximumClockAngle = maximumClockAngle
							 | 
						||
| 
								 | 
							
								          data.outerHalfAngle = outerHalfAngle
							 | 
						||
| 
								 | 
							
								          data.minimumClockAngle = minimumClockAngle
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        primitive.radius = Property.getValueOrDefault(conicSensorGraphics._radius, time, defaultRadius)
							 | 
						||
| 
								 | 
							
								        primitive.lateralSurfaceMaterial = MaterialProperty.getValue(
							 | 
						||
| 
								 | 
							
								          time,
							 | 
						||
| 
								 | 
							
								          conicSensorGraphics._lateralSurfaceMaterial,
							 | 
						||
| 
								 | 
							
								          primitive.lateralSurfaceMaterial
							 | 
						||
| 
								 | 
							
								        )
							 | 
						||
| 
								 | 
							
								        primitive.intersectionColor = Property.getValueOrClonedDefault(
							 | 
						||
| 
								 | 
							
								          conicSensorGraphics._intersectionColor,
							 | 
						||
| 
								 | 
							
								          time,
							 | 
						||
| 
								 | 
							
								          defaultIntersectionColor,
							 | 
						||
| 
								 | 
							
								          primitive.intersectionColor
							 | 
						||
| 
								 | 
							
								        )
							 | 
						||
| 
								 | 
							
								        primitive.intersectionWidth = Property.getValueOrDefault(conicSensorGraphics._intersectionWidth, time, defaultIntersectionWidth)
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      return true
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Returns true if this object was destroyed; otherwise, false.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @returns {Boolean} True if this object was destroyed; otherwise, false.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    ConicSensorVisualizer.prototype.isDestroyed = function () {
							 | 
						||
| 
								 | 
							
								      return false
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Removes and destroys all primitives created by this instance.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    ConicSensorVisualizer.prototype.destroy = function () {
							 | 
						||
| 
								 | 
							
								      var entities = this._entitiesToVisualize.values
							 | 
						||
| 
								 | 
							
								      var hash = this._hash
							 | 
						||
| 
								 | 
							
								      var primitives = this._primitives
							 | 
						||
| 
								 | 
							
								      for (var i = entities.length - 1; i > -1; i--) {
							 | 
						||
| 
								 | 
							
								        removePrimitive(entities[i], hash, primitives)
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      return destroyObject(this)
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * @private
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    ConicSensorVisualizer.prototype._onCollectionChanged = function (entityCollection, added, removed, changed) {
							 | 
						||
| 
								 | 
							
								      var i
							 | 
						||
| 
								 | 
							
								      var entity
							 | 
						||
| 
								 | 
							
								      var entities = this._entitiesToVisualize
							 | 
						||
| 
								 | 
							
								      var hash = this._hash
							 | 
						||
| 
								 | 
							
								      var primitives = this._primitives
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      for (i = added.length - 1; i > -1; i--) {
							 | 
						||
| 
								 | 
							
								        entity = added[i]
							 | 
						||
| 
								 | 
							
								        if (defined(entity._conicSensor) && defined(entity._position) && defined(entity._orientation)) {
							 | 
						||
| 
								 | 
							
								          entities.set(entity.id, entity)
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      for (i = changed.length - 1; i > -1; i--) {
							 | 
						||
| 
								 | 
							
								        entity = changed[i]
							 | 
						||
| 
								 | 
							
								        if (defined(entity._conicSensor) && defined(entity._position) && defined(entity._orientation)) {
							 | 
						||
| 
								 | 
							
								          entities.set(entity.id, entity)
							 | 
						||
| 
								 | 
							
								        } else {
							 | 
						||
| 
								 | 
							
								          removePrimitive(entity, hash, primitives)
							 | 
						||
| 
								 | 
							
								          entities.remove(entity.id)
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      for (i = removed.length - 1; i > -1; i--) {
							 | 
						||
| 
								 | 
							
								        entity = removed[i]
							 | 
						||
| 
								 | 
							
								        removePrimitive(entity, hash, primitives)
							 | 
						||
| 
								 | 
							
								        entities.remove(entity.id)
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    return ConicSensorVisualizer
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  define("custom/custom-pattern-sensor-graphics", [
							 | 
						||
| 
								 | 
							
								    "require",
							 | 
						||
| 
								 | 
							
								    "Cesium/Core/defaultValue",
							 | 
						||
| 
								 | 
							
								    "Cesium/Core/defined",
							 | 
						||
| 
								 | 
							
								    "Cesium/Core/DeveloperError",
							 | 
						||
| 
								 | 
							
								    "Cesium/Core/Event",
							 | 
						||
| 
								 | 
							
								    "Cesium/DataSources/createMaterialPropertyDescriptor",
							 | 
						||
| 
								 | 
							
								    "Cesium/DataSources/createPropertyDescriptor"
							 | 
						||
| 
								 | 
							
								  ], function (require) {
							 | 
						||
| 
								 | 
							
								    "use strict"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    var defaultValue = require("Cesium/Core/defaultValue")
							 | 
						||
| 
								 | 
							
								    var defined = require("Cesium/Core/defined")
							 | 
						||
| 
								 | 
							
								    var defineProperties = Object.defineProperties
							 | 
						||
| 
								 | 
							
								    var DeveloperError = require("Cesium/Core/DeveloperError")
							 | 
						||
| 
								 | 
							
								    var Event = require("Cesium/Core/Event")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    var createMaterialPropertyDescriptor = require("Cesium/DataSources/createMaterialPropertyDescriptor")
							 | 
						||
| 
								 | 
							
								    var createPropertyDescriptor = require("Cesium/DataSources/createPropertyDescriptor")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * An optionally time-dynamic custom patterned sensor.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @alias CustomPatternSensorGraphics
							 | 
						||
| 
								 | 
							
								     * @constructor
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    var CustomPatternSensorGraphics = function (options) {
							 | 
						||
| 
								 | 
							
								      this._directions = undefined
							 | 
						||
| 
								 | 
							
								      this._directionsSubscription = undefined
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      this._lateralSurfaceMaterial = undefined
							 | 
						||
| 
								 | 
							
								      this._lateralSurfaceMaterialSubscription = undefined
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      this._intersectionColor = undefined
							 | 
						||
| 
								 | 
							
								      this._intersectionColorSubscription = undefined
							 | 
						||
| 
								 | 
							
								      this._intersectionWidth = undefined
							 | 
						||
| 
								 | 
							
								      this._intersectionWidthSubscription = undefined
							 | 
						||
| 
								 | 
							
								      this._showIntersection = undefined
							 | 
						||
| 
								 | 
							
								      this._showIntersectionSubscription = undefined
							 | 
						||
| 
								 | 
							
								      this._radius = undefined
							 | 
						||
| 
								 | 
							
								      this._radiusSubscription = undefined
							 | 
						||
| 
								 | 
							
								      this._show = undefined
							 | 
						||
| 
								 | 
							
								      this._showSubscription = undefined
							 | 
						||
| 
								 | 
							
								      this._definitionChanged = new Event()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      this.merge(defaultValue(options, defaultValue.EMPTY_OBJECT))
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    defineProperties(CustomPatternSensorGraphics.prototype, {
							 | 
						||
| 
								 | 
							
								      /**
							 | 
						||
| 
								 | 
							
								       * Gets the event that is raised whenever a new property is assigned.
							 | 
						||
| 
								 | 
							
								       * @memberof CustomPatternSensorGraphics.prototype
							 | 
						||
| 
								 | 
							
								       *
							 | 
						||
| 
								 | 
							
								       * @type {Event}
							 | 
						||
| 
								 | 
							
								       * @readonly
							 | 
						||
| 
								 | 
							
								       */
							 | 
						||
| 
								 | 
							
								      definitionChanged: {
							 | 
						||
| 
								 | 
							
								        get: function () {
							 | 
						||
| 
								 | 
							
								          return this._definitionChanged
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      },
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      /**
							 | 
						||
| 
								 | 
							
								       * A {@link Property} which returns an array of {@link Spherical} instances representing the sensor's projection.
							 | 
						||
| 
								 | 
							
								       * @memberof CustomPatternSensorGraphics.prototype
							 | 
						||
| 
								 | 
							
								       * @type {Property}
							 | 
						||
| 
								 | 
							
								       */
							 | 
						||
| 
								 | 
							
								      directions: createPropertyDescriptor("directions"),
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      /**
							 | 
						||
| 
								 | 
							
								       * Gets or sets the {@link MaterialProperty} specifying the the sensor's appearance.
							 | 
						||
| 
								 | 
							
								       * @memberof CustomPatternSensorGraphics.prototype
							 | 
						||
| 
								 | 
							
								       * @type {MaterialProperty}
							 | 
						||
| 
								 | 
							
								       */
							 | 
						||
| 
								 | 
							
								      lateralSurfaceMaterial: createMaterialPropertyDescriptor("lateralSurfaceMaterial"),
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      /**
							 | 
						||
| 
								 | 
							
								       * Gets or sets the {@link Color} {@link Property} specifying the color of the line formed by the intersection of the sensor and other central bodies.
							 | 
						||
| 
								 | 
							
								       * @memberof CustomPatternSensorGraphics.prototype
							 | 
						||
| 
								 | 
							
								       * @type {Property}
							 | 
						||
| 
								 | 
							
								       */
							 | 
						||
| 
								 | 
							
								      intersectionColor: createPropertyDescriptor("intersectionColor"),
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      /**
							 | 
						||
| 
								 | 
							
								       * Gets or sets the numeric {@link Property} specifying the width of the line formed by the intersection of the sensor and other central bodies.
							 | 
						||
| 
								 | 
							
								       * @memberof CustomPatternSensorGraphics.prototype
							 | 
						||
| 
								 | 
							
								       * @type {Property}
							 | 
						||
| 
								 | 
							
								       */
							 | 
						||
| 
								 | 
							
								      intersectionWidth: createPropertyDescriptor("intersectionWidth"),
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      /**
							 | 
						||
| 
								 | 
							
								       * Gets or sets the boolean {@link Property} specifying the visibility of the line formed by the intersection of the sensor and other central bodies.
							 | 
						||
| 
								 | 
							
								       * @memberof CustomPatternSensorGraphics.prototype
							 | 
						||
| 
								 | 
							
								       * @type {Property}
							 | 
						||
| 
								 | 
							
								       */
							 | 
						||
| 
								 | 
							
								      showIntersection: createPropertyDescriptor("showIntersection"),
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      /**
							 | 
						||
| 
								 | 
							
								       * Gets or sets the numeric {@link Property} specifying the radius of the sensor's projection.
							 | 
						||
| 
								 | 
							
								       * @memberof CustomPatternSensorGraphics.prototype
							 | 
						||
| 
								 | 
							
								       * @type {Property}
							 | 
						||
| 
								 | 
							
								       */
							 | 
						||
| 
								 | 
							
								      radius: createPropertyDescriptor("radius"),
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      /**
							 | 
						||
| 
								 | 
							
								       * Gets or sets the boolean {@link Property} specifying the visibility of the sensor.
							 | 
						||
| 
								 | 
							
								       * @memberof CustomPatternSensorGraphics.prototype
							 | 
						||
| 
								 | 
							
								       * @type {Property}
							 | 
						||
| 
								 | 
							
								       */
							 | 
						||
| 
								 | 
							
								      show: createPropertyDescriptor("show")
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Duplicates a CustomPatternSensorGraphics instance.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param {CustomPatternSensorGraphics} [result] The object onto which to store the result.
							 | 
						||
| 
								 | 
							
								     * @returns {CustomPatternSensorGraphics} The modified result parameter or a new instance if one was not provided.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    CustomPatternSensorGraphics.prototype.clone = function (result) {
							 | 
						||
| 
								 | 
							
								      if (!defined(result)) {
							 | 
						||
| 
								 | 
							
								        result = new CustomPatternSensorGraphics()
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      result.directions = this.directions
							 | 
						||
| 
								 | 
							
								      result.radius = this.radius
							 | 
						||
| 
								 | 
							
								      result.show = this.show
							 | 
						||
| 
								 | 
							
								      result.showIntersection = this.showIntersection
							 | 
						||
| 
								 | 
							
								      result.intersectionColor = this.intersectionColor
							 | 
						||
| 
								 | 
							
								      result.intersectionWidth = this.intersectionWidth
							 | 
						||
| 
								 | 
							
								      result.lateralSurfaceMaterial = this.lateralSurfaceMaterial
							 | 
						||
| 
								 | 
							
								      return result
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Assigns each unassigned property on this object to the value
							 | 
						||
| 
								 | 
							
								     * of the same property on the provided source object.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param {CustomPatternSensorGraphics} source The object to be merged into this object.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    CustomPatternSensorGraphics.prototype.merge = function (source) {
							 | 
						||
| 
								 | 
							
								      // >>includeStart('debug', pragmas.debug);
							 | 
						||
| 
								 | 
							
								      if (!defined(source)) {
							 | 
						||
| 
								 | 
							
								        throw new DeveloperError("source is required.")
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      // >>includeEnd('debug');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      this.directions = defaultValue(this.directions, source.directions)
							 | 
						||
| 
								 | 
							
								      this.radius = defaultValue(this.radius, source.radius)
							 | 
						||
| 
								 | 
							
								      this.show = defaultValue(this.show, source.show)
							 | 
						||
| 
								 | 
							
								      this.showIntersection = defaultValue(this.showIntersection, source.showIntersection)
							 | 
						||
| 
								 | 
							
								      this.intersectionColor = defaultValue(this.intersectionColor, source.intersectionColor)
							 | 
						||
| 
								 | 
							
								      this.intersectionWidth = defaultValue(this.intersectionWidth, source.intersectionWidth)
							 | 
						||
| 
								 | 
							
								      this.lateralSurfaceMaterial = defaultValue(this.lateralSurfaceMaterial, source.lateralSurfaceMaterial)
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    return CustomPatternSensorGraphics
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  define("custom/custom-pattern-sensor-visualizer", [
							 | 
						||
| 
								 | 
							
								    "require",
							 | 
						||
| 
								 | 
							
								    "Cesium/Core/AssociativeArray",
							 | 
						||
| 
								 | 
							
								    "Cesium/Core/Cartesian3",
							 | 
						||
| 
								 | 
							
								    "Cesium/Core/Color",
							 | 
						||
| 
								 | 
							
								    "Cesium/Core/defined",
							 | 
						||
| 
								 | 
							
								    "Cesium/Core/destroyObject",
							 | 
						||
| 
								 | 
							
								    "Cesium/Core/DeveloperError",
							 | 
						||
| 
								 | 
							
								    "Cesium/Core/Matrix3",
							 | 
						||
| 
								 | 
							
								    "Cesium/Core/Matrix4",
							 | 
						||
| 
								 | 
							
								    "Cesium/Core/Quaternion",
							 | 
						||
| 
								 | 
							
								    "Cesium/DataSources/MaterialProperty",
							 | 
						||
| 
								 | 
							
								    "Cesium/DataSources/Property",
							 | 
						||
| 
								 | 
							
								    "../custom/custom-sensor-volume",
							 | 
						||
| 
								 | 
							
								    "../util/remove-primitive"
							 | 
						||
| 
								 | 
							
								  ], function (require) {
							 | 
						||
| 
								 | 
							
								    "use strict"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    var AssociativeArray = require("Cesium/Core/AssociativeArray")
							 | 
						||
| 
								 | 
							
								    var Cartesian3 = require("Cesium/Core/Cartesian3")
							 | 
						||
| 
								 | 
							
								    var Color = require("Cesium/Core/Color")
							 | 
						||
| 
								 | 
							
								    var defined = require("Cesium/Core/defined")
							 | 
						||
| 
								 | 
							
								    var destroyObject = require("Cesium/Core/destroyObject")
							 | 
						||
| 
								 | 
							
								    var DeveloperError = require("Cesium/Core/DeveloperError")
							 | 
						||
| 
								 | 
							
								    var Matrix3 = require("Cesium/Core/Matrix3")
							 | 
						||
| 
								 | 
							
								    var Matrix4 = require("Cesium/Core/Matrix4")
							 | 
						||
| 
								 | 
							
								    var Quaternion = require("Cesium/Core/Quaternion")
							 | 
						||
| 
								 | 
							
								    var MaterialProperty = require("Cesium/DataSources/MaterialProperty")
							 | 
						||
| 
								 | 
							
								    var Property = require("Cesium/DataSources/Property")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    var CustomSensorVolume = require("../custom/custom-sensor-volume")
							 | 
						||
| 
								 | 
							
								    var removePrimitive = require("../util/remove-primitive")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    var defaultIntersectionColor = Color.WHITE
							 | 
						||
| 
								 | 
							
								    var defaultIntersectionWidth = 1.0
							 | 
						||
| 
								 | 
							
								    var defaultRadius = Number.POSITIVE_INFINITY
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    var matrix3Scratch = new Matrix3()
							 | 
						||
| 
								 | 
							
								    var cachedPosition = new Cartesian3()
							 | 
						||
| 
								 | 
							
								    var cachedOrientation = new Quaternion()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * A {@link Visualizer} which maps {@link Entity#customPatternSensor} to a {@link CustomPatternSensor}.
							 | 
						||
| 
								 | 
							
								     * @alias CustomPatternSensorVisualizer
							 | 
						||
| 
								 | 
							
								     * @constructor
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param {Scene} scene The scene the primitives will be rendered in.
							 | 
						||
| 
								 | 
							
								     * @param {EntityCollection} entityCollection The entityCollection to visualize.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    var CustomPatternSensorVisualizer = function (scene, entityCollection) {
							 | 
						||
| 
								 | 
							
								      // >>includeStart('debug', pragmas.debug);
							 | 
						||
| 
								 | 
							
								      if (!defined(scene)) {
							 | 
						||
| 
								 | 
							
								        throw new DeveloperError("scene is required.")
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      if (!defined(entityCollection)) {
							 | 
						||
| 
								 | 
							
								        throw new DeveloperError("entityCollection is required.")
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      // >>includeEnd('debug');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      entityCollection.collectionChanged.addEventListener(CustomPatternSensorVisualizer.prototype._onCollectionChanged, this)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      this._scene = scene
							 | 
						||
| 
								 | 
							
								      this._primitives = scene.primitives
							 | 
						||
| 
								 | 
							
								      this._entityCollection = entityCollection
							 | 
						||
| 
								 | 
							
								      this._hash = {}
							 | 
						||
| 
								 | 
							
								      this._entitiesToVisualize = new AssociativeArray()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      this._onCollectionChanged(entityCollection, entityCollection.values, [], [])
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Updates the primitives created by this visualizer to match their
							 | 
						||
| 
								 | 
							
								     * Entity counterpart at the given time.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param {JulianDate} time The time to update to.
							 | 
						||
| 
								 | 
							
								     * @returns {Boolean} This function always returns true.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    CustomPatternSensorVisualizer.prototype.update = function (time) {
							 | 
						||
| 
								 | 
							
								      // >>includeStart('debug', pragmas.debug);
							 | 
						||
| 
								 | 
							
								      if (!defined(time)) {
							 | 
						||
| 
								 | 
							
								        throw new DeveloperError("time is required.")
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      // >>includeEnd('debug');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      var entities = this._entitiesToVisualize.values
							 | 
						||
| 
								 | 
							
								      var hash = this._hash
							 | 
						||
| 
								 | 
							
								      var primitives = this._primitives
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      for (var i = 0, len = entities.length; i < len; i++) {
							 | 
						||
| 
								 | 
							
								        var entity = entities[i]
							 | 
						||
| 
								 | 
							
								        var customPatternSensorGraphics = entity._customPatternSensor
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        var position
							 | 
						||
| 
								 | 
							
								        var orientation
							 | 
						||
| 
								 | 
							
								        var directions
							 | 
						||
| 
								 | 
							
								        var data = hash[entity.id]
							 | 
						||
| 
								 | 
							
								        var show = entity.isShowing && entity.isAvailable(time) && Property.getValueOrDefault(customPatternSensorGraphics._show, time, true)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if (show) {
							 | 
						||
| 
								 | 
							
								          position = Property.getValueOrUndefined(entity._position, time, cachedPosition)
							 | 
						||
| 
								 | 
							
								          orientation = Property.getValueOrUndefined(entity._orientation, time, cachedOrientation)
							 | 
						||
| 
								 | 
							
								          directions = Property.getValueOrUndefined(customPatternSensorGraphics._directions, time)
							 | 
						||
| 
								 | 
							
								          show = defined(position) && defined(orientation) && defined(directions)
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if (!show) {
							 | 
						||
| 
								 | 
							
								          // don't bother creating or updating anything else
							 | 
						||
| 
								 | 
							
								          if (defined(data)) {
							 | 
						||
| 
								 | 
							
								            data.primitive.show = false
							 | 
						||
| 
								 | 
							
								          }
							 | 
						||
| 
								 | 
							
								          continue
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        var primitive = defined(data) ? data.primitive : undefined
							 | 
						||
| 
								 | 
							
								        if (!defined(primitive)) {
							 | 
						||
| 
								 | 
							
								          primitive = new CustomSensorVolume()
							 | 
						||
| 
								 | 
							
								          primitive.id = entity
							 | 
						||
| 
								 | 
							
								          primitives.add(primitive)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								          data = {
							 | 
						||
| 
								 | 
							
								            primitive: primitive,
							 | 
						||
| 
								 | 
							
								            position: undefined,
							 | 
						||
| 
								 | 
							
								            orientation: undefined
							 | 
						||
| 
								 | 
							
								          }
							 | 
						||
| 
								 | 
							
								          hash[entity.id] = data
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if (!Cartesian3.equals(position, data.position) || !Quaternion.equals(orientation, data.orientation)) {
							 | 
						||
| 
								 | 
							
								          Matrix4.fromRotationTranslation(Matrix3.fromQuaternion(orientation, matrix3Scratch), position, primitive.modelMatrix)
							 | 
						||
| 
								 | 
							
								          data.position = Cartesian3.clone(position, data.position)
							 | 
						||
| 
								 | 
							
								          data.orientation = Quaternion.clone(orientation, data.orientation)
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        primitive.show = true
							 | 
						||
| 
								 | 
							
								        primitive.directions = directions
							 | 
						||
| 
								 | 
							
								        primitive.radius = Property.getValueOrDefault(customPatternSensorGraphics._radius, time, defaultRadius)
							 | 
						||
| 
								 | 
							
								        primitive.lateralSurfaceMaterial = MaterialProperty.getValue(
							 | 
						||
| 
								 | 
							
								          time,
							 | 
						||
| 
								 | 
							
								          customPatternSensorGraphics._lateralSurfaceMaterial,
							 | 
						||
| 
								 | 
							
								          primitive.lateralSurfaceMaterial
							 | 
						||
| 
								 | 
							
								        )
							 | 
						||
| 
								 | 
							
								        primitive.intersectionColor = Property.getValueOrClonedDefault(
							 | 
						||
| 
								 | 
							
								          customPatternSensorGraphics._intersectionColor,
							 | 
						||
| 
								 | 
							
								          time,
							 | 
						||
| 
								 | 
							
								          defaultIntersectionColor,
							 | 
						||
| 
								 | 
							
								          primitive.intersectionColor
							 | 
						||
| 
								 | 
							
								        )
							 | 
						||
| 
								 | 
							
								        primitive.intersectionWidth = Property.getValueOrDefault(customPatternSensorGraphics._intersectionWidth, time, defaultIntersectionWidth)
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      return true
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Returns true if this object was destroyed; otherwise, false.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @returns {Boolean} True if this object was destroyed; otherwise, false.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    CustomPatternSensorVisualizer.prototype.isDestroyed = function () {
							 | 
						||
| 
								 | 
							
								      return false
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Removes and destroys all primitives created by this instance.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    CustomPatternSensorVisualizer.prototype.destroy = function () {
							 | 
						||
| 
								 | 
							
								      var entities = this._entitiesToVisualize.values
							 | 
						||
| 
								 | 
							
								      var hash = this._hash
							 | 
						||
| 
								 | 
							
								      var primitives = this._primitives
							 | 
						||
| 
								 | 
							
								      for (var i = entities.length - 1; i > -1; i--) {
							 | 
						||
| 
								 | 
							
								        removePrimitive(entities[i], hash, primitives)
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      return destroyObject(this)
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * @private
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    CustomPatternSensorVisualizer.prototype._onCollectionChanged = function (entityCollection, added, removed, changed) {
							 | 
						||
| 
								 | 
							
								      var i
							 | 
						||
| 
								 | 
							
								      var entity
							 | 
						||
| 
								 | 
							
								      var entities = this._entitiesToVisualize
							 | 
						||
| 
								 | 
							
								      var hash = this._hash
							 | 
						||
| 
								 | 
							
								      var primitives = this._primitives
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      for (i = added.length - 1; i > -1; i--) {
							 | 
						||
| 
								 | 
							
								        entity = added[i]
							 | 
						||
| 
								 | 
							
								        if (defined(entity._customPatternSensor) && defined(entity._position) && defined(entity._orientation)) {
							 | 
						||
| 
								 | 
							
								          entities.set(entity.id, entity)
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      for (i = changed.length - 1; i > -1; i--) {
							 | 
						||
| 
								 | 
							
								        entity = changed[i]
							 | 
						||
| 
								 | 
							
								        if (defined(entity._customPatternSensor) && defined(entity._position) && defined(entity._orientation)) {
							 | 
						||
| 
								 | 
							
								          entities.set(entity.id, entity)
							 | 
						||
| 
								 | 
							
								        } else {
							 | 
						||
| 
								 | 
							
								          removePrimitive(entity, hash, primitives)
							 | 
						||
| 
								 | 
							
								          entities.remove(entity.id)
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      for (i = removed.length - 1; i > -1; i--) {
							 | 
						||
| 
								 | 
							
								        entity = removed[i]
							 | 
						||
| 
								 | 
							
								        removePrimitive(entity, hash, primitives)
							 | 
						||
| 
								 | 
							
								        entities.remove(entity.id)
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    return CustomPatternSensorVisualizer
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  define("rectangular/rectangular-sensor-graphics", [
							 | 
						||
| 
								 | 
							
								    "require",
							 | 
						||
| 
								 | 
							
								    "Cesium/Core/defaultValue",
							 | 
						||
| 
								 | 
							
								    "Cesium/Core/defined",
							 | 
						||
| 
								 | 
							
								    "Cesium/Core/DeveloperError",
							 | 
						||
| 
								 | 
							
								    "Cesium/Core/Event",
							 | 
						||
| 
								 | 
							
								    "Cesium/DataSources/createPropertyDescriptor"
							 | 
						||
| 
								 | 
							
								  ], function (require) {
							 | 
						||
| 
								 | 
							
								    "use strict"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    var defaultValue = require("Cesium/Core/defaultValue")
							 | 
						||
| 
								 | 
							
								    var defined = require("Cesium/Core/defined")
							 | 
						||
| 
								 | 
							
								    var defineProperties = Object.defineProperties
							 | 
						||
| 
								 | 
							
								    var DeveloperError = require("Cesium/Core/DeveloperError")
							 | 
						||
| 
								 | 
							
								    var Event = require("Cesium/Core/Event")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    var createPropertyDescriptor = require("Cesium/DataSources/createPropertyDescriptor")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * An optionally time-dynamic pyramid.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @alias RectangularSensorGraphics
							 | 
						||
| 
								 | 
							
								     * @constructor
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    var RectangularSensorGraphics = function () {
							 | 
						||
| 
								 | 
							
								      this._xHalfAngle = undefined
							 | 
						||
| 
								 | 
							
								      this._xHalfAngleSubscription = undefined
							 | 
						||
| 
								 | 
							
								      this._yHalfAngle = undefined
							 | 
						||
| 
								 | 
							
								      this._yHalfAngleSubscription = undefined
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      this._lateralSurfaceMaterial = undefined
							 | 
						||
| 
								 | 
							
								      this._lateralSurfaceMaterialSubscription = undefined
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      this._intersectionColor = undefined
							 | 
						||
| 
								 | 
							
								      this._intersectionColorSubscription = undefined
							 | 
						||
| 
								 | 
							
								      this._intersectionWidth = undefined
							 | 
						||
| 
								 | 
							
								      this._intersectionWidthSubscription = undefined
							 | 
						||
| 
								 | 
							
								      this._showIntersection = undefined
							 | 
						||
| 
								 | 
							
								      this._showIntersectionSubscription = undefined
							 | 
						||
| 
								 | 
							
								      this._radius = undefined
							 | 
						||
| 
								 | 
							
								      this._radiusSubscription = undefined
							 | 
						||
| 
								 | 
							
								      this._show = undefined
							 | 
						||
| 
								 | 
							
								      this._showSubscription = undefined
							 | 
						||
| 
								 | 
							
								      this._definitionChanged = new Event()
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    defineProperties(RectangularSensorGraphics.prototype, {
							 | 
						||
| 
								 | 
							
								      /**
							 | 
						||
| 
								 | 
							
								       * Gets the event that is raised whenever a new property is assigned.
							 | 
						||
| 
								 | 
							
								       * @memberof RectangularSensorGraphics.prototype
							 | 
						||
| 
								 | 
							
								       *
							 | 
						||
| 
								 | 
							
								       * @type {Event}
							 | 
						||
| 
								 | 
							
								       * @readonly
							 | 
						||
| 
								 | 
							
								       */
							 | 
						||
| 
								 | 
							
								      definitionChanged: {
							 | 
						||
| 
								 | 
							
								        get: function () {
							 | 
						||
| 
								 | 
							
								          return this._definitionChanged
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      },
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      /**
							 | 
						||
| 
								 | 
							
								       * A {@link Property} which returns an array of {@link Spherical} instances representing the pyramid's projection.
							 | 
						||
| 
								 | 
							
								       * @memberof RectangularSensorGraphics.prototype
							 | 
						||
| 
								 | 
							
								       * @type {Property}
							 | 
						||
| 
								 | 
							
								       */
							 | 
						||
| 
								 | 
							
								      xHalfAngle: createPropertyDescriptor("xHalfAngle"),
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      /**
							 | 
						||
| 
								 | 
							
								       * A {@link Property} which returns an array of {@link Spherical} instances representing the pyramid's projection.
							 | 
						||
| 
								 | 
							
								       * @memberof RectangularSensorGraphics.prototype
							 | 
						||
| 
								 | 
							
								       * @type {Property}
							 | 
						||
| 
								 | 
							
								       */
							 | 
						||
| 
								 | 
							
								      yHalfAngle: createPropertyDescriptor("yHalfAngle"),
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      /**
							 | 
						||
| 
								 | 
							
								       * Gets or sets the {@link MaterialProperty} specifying the the pyramid's appearance.
							 | 
						||
| 
								 | 
							
								       * @memberof RectangularSensorGraphics.prototype
							 | 
						||
| 
								 | 
							
								       * @type {MaterialProperty}
							 | 
						||
| 
								 | 
							
								       */
							 | 
						||
| 
								 | 
							
								      lateralSurfaceMaterial: createPropertyDescriptor("lateralSurfaceMaterial"),
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      /**
							 | 
						||
| 
								 | 
							
								       * Gets or sets the {@link Color} {@link Property} specifying the color of the line formed by the intersection of the pyramid and other central bodies.
							 | 
						||
| 
								 | 
							
								       * @memberof RectangularSensorGraphics.prototype
							 | 
						||
| 
								 | 
							
								       * @type {Property}
							 | 
						||
| 
								 | 
							
								       */
							 | 
						||
| 
								 | 
							
								      intersectionColor: createPropertyDescriptor("intersectionColor"),
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      /**
							 | 
						||
| 
								 | 
							
								       * Gets or sets the numeric {@link Property} specifying the width of the line formed by the intersection of the pyramid and other central bodies.
							 | 
						||
| 
								 | 
							
								       * @memberof RectangularSensorGraphics.prototype
							 | 
						||
| 
								 | 
							
								       * @type {Property}
							 | 
						||
| 
								 | 
							
								       */
							 | 
						||
| 
								 | 
							
								      intersectionWidth: createPropertyDescriptor("intersectionWidth"),
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      /**
							 | 
						||
| 
								 | 
							
								       * Gets or sets the boolean {@link Property} specifying the visibility of the line formed by the intersection of the pyramid and other central bodies.
							 | 
						||
| 
								 | 
							
								       * @memberof RectangularSensorGraphics.prototype
							 | 
						||
| 
								 | 
							
								       * @type {Property}
							 | 
						||
| 
								 | 
							
								       */
							 | 
						||
| 
								 | 
							
								      showIntersection: createPropertyDescriptor("showIntersection"),
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      /**
							 | 
						||
| 
								 | 
							
								       * Gets or sets the numeric {@link Property} specifying the radius of the pyramid's projection.
							 | 
						||
| 
								 | 
							
								       * @memberof RectangularSensorGraphics.prototype
							 | 
						||
| 
								 | 
							
								       * @type {Property}
							 | 
						||
| 
								 | 
							
								       */
							 | 
						||
| 
								 | 
							
								      radius: createPropertyDescriptor("radius"),
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      /**
							 | 
						||
| 
								 | 
							
								       * Gets or sets the boolean {@link Property} specifying the visibility of the pyramid.
							 | 
						||
| 
								 | 
							
								       * @memberof RectangularSensorGraphics.prototype
							 | 
						||
| 
								 | 
							
								       * @type {Property}
							 | 
						||
| 
								 | 
							
								       */
							 | 
						||
| 
								 | 
							
								      show: createPropertyDescriptor("show")
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Duplicates a RectangularSensorGraphics instance.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param {RectangularSensorGraphics} [result] The object onto which to store the result.
							 | 
						||
| 
								 | 
							
								     * @returns {RectangularSensorGraphics} The modified result parameter or a new instance if one was not provided.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    RectangularSensorGraphics.prototype.clone = function (result) {
							 | 
						||
| 
								 | 
							
								      if (!defined(result)) {
							 | 
						||
| 
								 | 
							
								        result = new RectangularSensorGraphics()
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      result.xHalfAngle = this.xHalfAngle
							 | 
						||
| 
								 | 
							
								      result.yHalfAngle = this.yHalfAngle
							 | 
						||
| 
								 | 
							
								      result.radius = this.radius
							 | 
						||
| 
								 | 
							
								      result.show = this.show
							 | 
						||
| 
								 | 
							
								      result.showIntersection = this.showIntersection
							 | 
						||
| 
								 | 
							
								      result.intersectionColor = this.intersectionColor
							 | 
						||
| 
								 | 
							
								      result.intersectionWidth = this.intersectionWidth
							 | 
						||
| 
								 | 
							
								      result.lateralSurfaceMaterial = this.lateralSurfaceMaterial
							 | 
						||
| 
								 | 
							
								      return result
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Assigns each unassigned property on this object to the value
							 | 
						||
| 
								 | 
							
								     * of the same property on the provided source object.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param {RectangularSensorGraphics} source The object to be merged into this object.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    RectangularSensorGraphics.prototype.merge = function (source) {
							 | 
						||
| 
								 | 
							
								      // >>includeStart('debug', pragmas.debug);
							 | 
						||
| 
								 | 
							
								      if (!defined(source)) {
							 | 
						||
| 
								 | 
							
								        throw new DeveloperError("source is required.")
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      // >>includeEnd('debug');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      this.xHalfAngle = defaultValue(this.xHalfAngle, source.xHalfAngle)
							 | 
						||
| 
								 | 
							
								      this.yHalfAngle = defaultValue(this.yHalfAngle, source.yHalfAngle)
							 | 
						||
| 
								 | 
							
								      this.radius = defaultValue(this.radius, source.radius)
							 | 
						||
| 
								 | 
							
								      this.show = defaultValue(this.show, source.show)
							 | 
						||
| 
								 | 
							
								      this.showIntersection = defaultValue(this.showIntersection, source.showIntersection)
							 | 
						||
| 
								 | 
							
								      this.intersectionColor = defaultValue(this.intersectionColor, source.intersectionColor)
							 | 
						||
| 
								 | 
							
								      this.intersectionWidth = defaultValue(this.intersectionWidth, source.intersectionWidth)
							 | 
						||
| 
								 | 
							
								      this.lateralSurfaceMaterial = defaultValue(this.lateralSurfaceMaterial, source.lateralSurfaceMaterial)
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    return RectangularSensorGraphics
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  define("rectangular/rectangular-pyramid-sensor-volume", [
							 | 
						||
| 
								 | 
							
								    "require",
							 | 
						||
| 
								 | 
							
								    "Cesium/Core/clone",
							 | 
						||
| 
								 | 
							
								    "Cesium/Core/defaultValue",
							 | 
						||
| 
								 | 
							
								    "Cesium/Core/defined",
							 | 
						||
| 
								 | 
							
								    "Cesium/Core/destroyObject",
							 | 
						||
| 
								 | 
							
								    "Cesium/Core/DeveloperError",
							 | 
						||
| 
								 | 
							
								    "Cesium/Core/Math",
							 | 
						||
| 
								 | 
							
								    "Cesium/Core/Spherical",
							 | 
						||
| 
								 | 
							
								    "../custom/custom-sensor-volume"
							 | 
						||
| 
								 | 
							
								  ], function (require) {
							 | 
						||
| 
								 | 
							
								    "use strict"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    var clone = require("Cesium/Core/clone")
							 | 
						||
| 
								 | 
							
								    var defaultValue = require("Cesium/Core/defaultValue")
							 | 
						||
| 
								 | 
							
								    var defined = require("Cesium/Core/defined")
							 | 
						||
| 
								 | 
							
								    var defineProperties = Object.defineProperties
							 | 
						||
| 
								 | 
							
								    var destroyObject = require("Cesium/Core/destroyObject")
							 | 
						||
| 
								 | 
							
								    var DeveloperError = require("Cesium/Core/DeveloperError")
							 | 
						||
| 
								 | 
							
								    var CesiumMath = require("Cesium/Core/Math")
							 | 
						||
| 
								 | 
							
								    var Spherical = require("Cesium/Core/Spherical")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    var CustomSensorVolume = require("../custom/custom-sensor-volume")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    function assignSpherical(index, array, clock, cone) {
							 | 
						||
| 
								 | 
							
								      var spherical = array[index]
							 | 
						||
| 
								 | 
							
								      if (!defined(spherical)) {
							 | 
						||
| 
								 | 
							
								        spherical = new Spherical()
							 | 
						||
| 
								 | 
							
								        array[index] = spherical
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      spherical.clock = clock
							 | 
						||
| 
								 | 
							
								      spherical.cone = cone
							 | 
						||
| 
								 | 
							
								      spherical.magnitude = 1.0
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    function updateDirections(rectangularSensor) {
							 | 
						||
| 
								 | 
							
								      var directions = rectangularSensor._customSensor.directions
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      // At 90 degrees the sensor is completely open, and tan() goes to infinity.
							 | 
						||
| 
								 | 
							
								      var tanX = Math.tan(Math.min(rectangularSensor._xHalfAngle, CesiumMath.toRadians(89.0)))
							 | 
						||
| 
								 | 
							
								      var tanY = Math.tan(Math.min(rectangularSensor._yHalfAngle, CesiumMath.toRadians(89.0)))
							 | 
						||
| 
								 | 
							
								      var theta = Math.atan(tanX / tanY)
							 | 
						||
| 
								 | 
							
								      var cone = Math.atan(Math.sqrt(tanX * tanX + tanY * tanY))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      assignSpherical(0, directions, theta, cone)
							 | 
						||
| 
								 | 
							
								      assignSpherical(1, directions, CesiumMath.toRadians(180.0) - theta, cone)
							 | 
						||
| 
								 | 
							
								      assignSpherical(2, directions, CesiumMath.toRadians(180.0) + theta, cone)
							 | 
						||
| 
								 | 
							
								      assignSpherical(3, directions, -theta, cone)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      directions.length = 4
							 | 
						||
| 
								 | 
							
								      rectangularSensor._customSensor.directions = directions
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    var RectangularPyramidSensorVolume = function (options) {
							 | 
						||
| 
								 | 
							
								      options = defaultValue(options, defaultValue.EMPTY_OBJECT)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      var customSensorOptions = clone(options)
							 | 
						||
| 
								 | 
							
								      customSensorOptions._pickPrimitive = defaultValue(options._pickPrimitive, this)
							 | 
						||
| 
								 | 
							
								      customSensorOptions.directions = undefined
							 | 
						||
| 
								 | 
							
								      this._customSensor = new CustomSensorVolume(customSensorOptions)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      this._xHalfAngle = defaultValue(options.xHalfAngle, CesiumMath.PI_OVER_TWO)
							 | 
						||
| 
								 | 
							
								      this._yHalfAngle = defaultValue(options.yHalfAngle, CesiumMath.PI_OVER_TWO)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      updateDirections(this)
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    defineProperties(RectangularPyramidSensorVolume.prototype, {
							 | 
						||
| 
								 | 
							
								      xHalfAngle: {
							 | 
						||
| 
								 | 
							
								        get: function () {
							 | 
						||
| 
								 | 
							
								          return this._xHalfAngle
							 | 
						||
| 
								 | 
							
								        },
							 | 
						||
| 
								 | 
							
								        set: function (value) {
							 | 
						||
| 
								 | 
							
								          // >>includeStart('debug', pragmas.debug)
							 | 
						||
| 
								 | 
							
								          if (value > CesiumMath.PI_OVER_TWO) {
							 | 
						||
| 
								 | 
							
								            throw new DeveloperError("xHalfAngle must be less than or equal to 90 degrees.")
							 | 
						||
| 
								 | 
							
								          }
							 | 
						||
| 
								 | 
							
								          // >>includeEnd('debug');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								          if (this._xHalfAngle !== value) {
							 | 
						||
| 
								 | 
							
								            this._xHalfAngle = value
							 | 
						||
| 
								 | 
							
								            updateDirections(this)
							 | 
						||
| 
								 | 
							
								          }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      },
							 | 
						||
| 
								 | 
							
								      yHalfAngle: {
							 | 
						||
| 
								 | 
							
								        get: function () {
							 | 
						||
| 
								 | 
							
								          return this._yHalfAngle
							 | 
						||
| 
								 | 
							
								        },
							 | 
						||
| 
								 | 
							
								        set: function (value) {
							 | 
						||
| 
								 | 
							
								          // >>includeStart('debug', pragmas.debug)
							 | 
						||
| 
								 | 
							
								          if (value > CesiumMath.PI_OVER_TWO) {
							 | 
						||
| 
								 | 
							
								            throw new DeveloperError("yHalfAngle must be less than or equal to 90 degrees.")
							 | 
						||
| 
								 | 
							
								          }
							 | 
						||
| 
								 | 
							
								          // >>includeEnd('debug');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								          if (this._yHalfAngle !== value) {
							 | 
						||
| 
								 | 
							
								            this._yHalfAngle = value
							 | 
						||
| 
								 | 
							
								            updateDirections(this)
							 | 
						||
| 
								 | 
							
								          }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      },
							 | 
						||
| 
								 | 
							
								      show: {
							 | 
						||
| 
								 | 
							
								        get: function () {
							 | 
						||
| 
								 | 
							
								          return this._customSensor.show
							 | 
						||
| 
								 | 
							
								        },
							 | 
						||
| 
								 | 
							
								        set: function (value) {
							 | 
						||
| 
								 | 
							
								          this._customSensor.show = value
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      },
							 | 
						||
| 
								 | 
							
								      showIntersection: {
							 | 
						||
| 
								 | 
							
								        get: function () {
							 | 
						||
| 
								 | 
							
								          return this._customSensor.showIntersection
							 | 
						||
| 
								 | 
							
								        },
							 | 
						||
| 
								 | 
							
								        set: function (value) {
							 | 
						||
| 
								 | 
							
								          this._customSensor.showIntersection = value
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      },
							 | 
						||
| 
								 | 
							
								      showThroughEllipsoid: {
							 | 
						||
| 
								 | 
							
								        get: function () {
							 | 
						||
| 
								 | 
							
								          return this._customSensor.showThroughEllipsoid
							 | 
						||
| 
								 | 
							
								        },
							 | 
						||
| 
								 | 
							
								        set: function (value) {
							 | 
						||
| 
								 | 
							
								          this._customSensor.showThroughEllipsoid = value
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      },
							 | 
						||
| 
								 | 
							
								      modelMatrix: {
							 | 
						||
| 
								 | 
							
								        get: function () {
							 | 
						||
| 
								 | 
							
								          return this._customSensor.modelMatrix
							 | 
						||
| 
								 | 
							
								        },
							 | 
						||
| 
								 | 
							
								        set: function (value) {
							 | 
						||
| 
								 | 
							
								          this._customSensor.modelMatrix = value
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      },
							 | 
						||
| 
								 | 
							
								      radius: {
							 | 
						||
| 
								 | 
							
								        get: function () {
							 | 
						||
| 
								 | 
							
								          return this._customSensor.radius
							 | 
						||
| 
								 | 
							
								        },
							 | 
						||
| 
								 | 
							
								        set: function (value) {
							 | 
						||
| 
								 | 
							
								          this._customSensor.radius = value
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      },
							 | 
						||
| 
								 | 
							
								      lateralSurfaceMaterial: {
							 | 
						||
| 
								 | 
							
								        get: function () {
							 | 
						||
| 
								 | 
							
								          return this._customSensor.lateralSurfaceMaterial
							 | 
						||
| 
								 | 
							
								        },
							 | 
						||
| 
								 | 
							
								        set: function (value) {
							 | 
						||
| 
								 | 
							
								          this._customSensor.lateralSurfaceMaterial = value
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      },
							 | 
						||
| 
								 | 
							
								      intersectionColor: {
							 | 
						||
| 
								 | 
							
								        get: function () {
							 | 
						||
| 
								 | 
							
								          return this._customSensor.intersectionColor
							 | 
						||
| 
								 | 
							
								        },
							 | 
						||
| 
								 | 
							
								        set: function (value) {
							 | 
						||
| 
								 | 
							
								          this._customSensor.intersectionColor = value
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      },
							 | 
						||
| 
								 | 
							
								      intersectionWidth: {
							 | 
						||
| 
								 | 
							
								        get: function () {
							 | 
						||
| 
								 | 
							
								          return this._customSensor.intersectionWidth
							 | 
						||
| 
								 | 
							
								        },
							 | 
						||
| 
								 | 
							
								        set: function (value) {
							 | 
						||
| 
								 | 
							
								          this._customSensor.intersectionWidth = value
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      },
							 | 
						||
| 
								 | 
							
								      id: {
							 | 
						||
| 
								 | 
							
								        get: function () {
							 | 
						||
| 
								 | 
							
								          return this._customSensor.id
							 | 
						||
| 
								 | 
							
								        },
							 | 
						||
| 
								 | 
							
								        set: function (value) {
							 | 
						||
| 
								 | 
							
								          this._customSensor.id = value
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    RectangularPyramidSensorVolume.prototype.update = function (frameState) {
							 | 
						||
| 
								 | 
							
								      this._customSensor.update(frameState)
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    RectangularPyramidSensorVolume.prototype.isDestroyed = function () {
							 | 
						||
| 
								 | 
							
								      return false
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    RectangularPyramidSensorVolume.prototype.destroy = function () {
							 | 
						||
| 
								 | 
							
								      this._customSensor = this._customSensor && this._customSensor.destroy()
							 | 
						||
| 
								 | 
							
								      return destroyObject(this)
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    return RectangularPyramidSensorVolume
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  define("rectangular/rectangular-sensor-visualizer", [
							 | 
						||
| 
								 | 
							
								    "require",
							 | 
						||
| 
								 | 
							
								    "Cesium/Core/AssociativeArray",
							 | 
						||
| 
								 | 
							
								    "Cesium/Core/Cartesian3",
							 | 
						||
| 
								 | 
							
								    "Cesium/Core/Color",
							 | 
						||
| 
								 | 
							
								    "Cesium/Core/defined",
							 | 
						||
| 
								 | 
							
								    "Cesium/Core/destroyObject",
							 | 
						||
| 
								 | 
							
								    "Cesium/Core/DeveloperError",
							 | 
						||
| 
								 | 
							
								    "Cesium/Core/Math",
							 | 
						||
| 
								 | 
							
								    "Cesium/Core/Matrix3",
							 | 
						||
| 
								 | 
							
								    "Cesium/Core/Matrix4",
							 | 
						||
| 
								 | 
							
								    "Cesium/Core/Quaternion",
							 | 
						||
| 
								 | 
							
								    "Cesium/DataSources/MaterialProperty",
							 | 
						||
| 
								 | 
							
								    "Cesium/DataSources/Property",
							 | 
						||
| 
								 | 
							
								    "./rectangular-pyramid-sensor-volume",
							 | 
						||
| 
								 | 
							
								    "../util/remove-primitive"
							 | 
						||
| 
								 | 
							
								  ], function (require) {
							 | 
						||
| 
								 | 
							
								    "use strict"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    var AssociativeArray = require("Cesium/Core/AssociativeArray")
							 | 
						||
| 
								 | 
							
								    var Cartesian3 = require("Cesium/Core/Cartesian3")
							 | 
						||
| 
								 | 
							
								    var Color = require("Cesium/Core/Color")
							 | 
						||
| 
								 | 
							
								    var defined = require("Cesium/Core/defined")
							 | 
						||
| 
								 | 
							
								    var destroyObject = require("Cesium/Core/destroyObject")
							 | 
						||
| 
								 | 
							
								    var DeveloperError = require("Cesium/Core/DeveloperError")
							 | 
						||
| 
								 | 
							
								    var CesiumMath = require("Cesium/Core/Math")
							 | 
						||
| 
								 | 
							
								    var Matrix3 = require("Cesium/Core/Matrix3")
							 | 
						||
| 
								 | 
							
								    var Matrix4 = require("Cesium/Core/Matrix4")
							 | 
						||
| 
								 | 
							
								    var Quaternion = require("Cesium/Core/Quaternion")
							 | 
						||
| 
								 | 
							
								    var MaterialProperty = require("Cesium/DataSources/MaterialProperty")
							 | 
						||
| 
								 | 
							
								    var Property = require("Cesium/DataSources/Property")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    var RectangularPyramidSensorVolume = require("./rectangular-pyramid-sensor-volume")
							 | 
						||
| 
								 | 
							
								    var removePrimitive = require("../util/remove-primitive")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    var defaultIntersectionColor = Color.WHITE
							 | 
						||
| 
								 | 
							
								    var defaultIntersectionWidth = 1.0
							 | 
						||
| 
								 | 
							
								    var defaultRadius = Number.POSITIVE_INFINITY
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    var matrix3Scratch = new Matrix3()
							 | 
						||
| 
								 | 
							
								    var cachedPosition = new Cartesian3()
							 | 
						||
| 
								 | 
							
								    var cachedOrientation = new Quaternion()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * A {@link Visualizer} which maps {@link Entity#rectangularSensor} to a {@link RectangularSensor}.
							 | 
						||
| 
								 | 
							
								     * @alias RectangularSensorVisualizer
							 | 
						||
| 
								 | 
							
								     * @constructor
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param {Scene} scene The scene the primitives will be rendered in.
							 | 
						||
| 
								 | 
							
								     * @param {EntityCollection} entityCollection The entityCollection to visualize.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    var RectangularSensorVisualizer = function (scene, entityCollection) {
							 | 
						||
| 
								 | 
							
								      // >>includeStart('debug', pragmas.debug);
							 | 
						||
| 
								 | 
							
								      if (!defined(scene)) {
							 | 
						||
| 
								 | 
							
								        throw new DeveloperError("scene is required.")
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      if (!defined(entityCollection)) {
							 | 
						||
| 
								 | 
							
								        throw new DeveloperError("entityCollection is required.")
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      // >>includeEnd('debug');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      entityCollection.collectionChanged.addEventListener(RectangularSensorVisualizer.prototype._onCollectionChanged, this)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      this._scene = scene
							 | 
						||
| 
								 | 
							
								      this._primitives = scene.primitives
							 | 
						||
| 
								 | 
							
								      this._entityCollection = entityCollection
							 | 
						||
| 
								 | 
							
								      this._hash = {}
							 | 
						||
| 
								 | 
							
								      this._entitiesToVisualize = new AssociativeArray()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      this._onCollectionChanged(entityCollection, entityCollection.values, [], [])
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Updates the primitives created by this visualizer to match their
							 | 
						||
| 
								 | 
							
								     * Entity counterpart at the given time.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param {JulianDate} time The time to update to.
							 | 
						||
| 
								 | 
							
								     * @returns {Boolean} This function always returns true.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    RectangularSensorVisualizer.prototype.update = function (time) {
							 | 
						||
| 
								 | 
							
								      // >>includeStart('debug', pragmas.debug);
							 | 
						||
| 
								 | 
							
								      if (!defined(time)) {
							 | 
						||
| 
								 | 
							
								        throw new DeveloperError("time is required.")
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      // >>includeEnd('debug');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      var entities = this._entitiesToVisualize.values
							 | 
						||
| 
								 | 
							
								      var hash = this._hash
							 | 
						||
| 
								 | 
							
								      var primitives = this._primitives
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      for (var i = 0, len = entities.length; i < len; i++) {
							 | 
						||
| 
								 | 
							
								        var entity = entities[i]
							 | 
						||
| 
								 | 
							
								        var rectangularSensorGraphics = entity._rectangularSensorVoumes
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        var position
							 | 
						||
| 
								 | 
							
								        var orientation
							 | 
						||
| 
								 | 
							
								        var data = hash[entity.id]
							 | 
						||
| 
								 | 
							
								        var show = entity.isShowing && entity.isAvailable(time) && Property.getValueOrDefault(rectangularSensorGraphics._show, time, true)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if (show) {
							 | 
						||
| 
								 | 
							
								          position = Property.getValueOrUndefined(entity._position, time, cachedPosition)
							 | 
						||
| 
								 | 
							
								          orientation = Property.getValueOrUndefined(entity._orientation, time, cachedOrientation)
							 | 
						||
| 
								 | 
							
								          show = defined(position) && defined(orientation)
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if (!show) {
							 | 
						||
| 
								 | 
							
								          // don't bother creating or updating anything else
							 | 
						||
| 
								 | 
							
								          if (defined(data)) {
							 | 
						||
| 
								 | 
							
								            data.primitive.show = false
							 | 
						||
| 
								 | 
							
								          }
							 | 
						||
| 
								 | 
							
								          continue
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        var primitive = defined(data) ? data.primitive : undefined
							 | 
						||
| 
								 | 
							
								        if (!defined(primitive)) {
							 | 
						||
| 
								 | 
							
								          primitive = new RectangularPyramidSensorVolume()
							 | 
						||
| 
								 | 
							
								          primitive.id = entity
							 | 
						||
| 
								 | 
							
								          primitives.add(primitive)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								          data = {
							 | 
						||
| 
								 | 
							
								            primitive: primitive,
							 | 
						||
| 
								 | 
							
								            position: undefined,
							 | 
						||
| 
								 | 
							
								            orientation: undefined
							 | 
						||
| 
								 | 
							
								          }
							 | 
						||
| 
								 | 
							
								          hash[entity.id] = data
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if (!Cartesian3.equals(position, data.position) || !Quaternion.equals(orientation, data.orientation)) {
							 | 
						||
| 
								 | 
							
								          Matrix4.fromRotationTranslation(Matrix3.fromQuaternion(orientation, matrix3Scratch), position, primitive.modelMatrix)
							 | 
						||
| 
								 | 
							
								          data.position = Cartesian3.clone(position, data.position)
							 | 
						||
| 
								 | 
							
								          data.orientation = Quaternion.clone(orientation, data.orientation)
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        primitive.show = true
							 | 
						||
| 
								 | 
							
								        primitive.xHalfAngle = Property.getValueOrDefault(rectangularSensorGraphics._xHalfAngle, time, CesiumMath.PI_OVER_TWO)
							 | 
						||
| 
								 | 
							
								        primitive.yHalfAngle = Property.getValueOrDefault(rectangularSensorGraphics._yHalfAngle, time, CesiumMath.PI_OVER_TWO)
							 | 
						||
| 
								 | 
							
								        primitive.radius = Property.getValueOrDefault(rectangularSensorGraphics._radius, time, defaultRadius)
							 | 
						||
| 
								 | 
							
								        primitive.lateralSurfaceMaterial = MaterialProperty.getValue(
							 | 
						||
| 
								 | 
							
								          time,
							 | 
						||
| 
								 | 
							
								          rectangularSensorGraphics._lateralSurfaceMaterial,
							 | 
						||
| 
								 | 
							
								          primitive.lateralSurfaceMaterial
							 | 
						||
| 
								 | 
							
								        )
							 | 
						||
| 
								 | 
							
								        primitive.intersectionColor = Property.getValueOrClonedDefault(
							 | 
						||
| 
								 | 
							
								          rectangularSensorGraphics._intersectionColor,
							 | 
						||
| 
								 | 
							
								          time,
							 | 
						||
| 
								 | 
							
								          defaultIntersectionColor,
							 | 
						||
| 
								 | 
							
								          primitive.intersectionColor
							 | 
						||
| 
								 | 
							
								        )
							 | 
						||
| 
								 | 
							
								        primitive.intersectionWidth = Property.getValueOrDefault(rectangularSensorGraphics._intersectionWidth, time, defaultIntersectionWidth)
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      return true
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Returns true if this object was destroyed; otherwise, false.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @returns {Boolean} True if this object was destroyed; otherwise, false.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    RectangularSensorVisualizer.prototype.isDestroyed = function () {
							 | 
						||
| 
								 | 
							
								      return false
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Removes and destroys all primitives created by this instance.
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    RectangularSensorVisualizer.prototype.destroy = function () {
							 | 
						||
| 
								 | 
							
								      var entities = this._entitiesToVisualize.values
							 | 
						||
| 
								 | 
							
								      var hash = this._hash
							 | 
						||
| 
								 | 
							
								      var primitives = this._primitives
							 | 
						||
| 
								 | 
							
								      for (var i = entities.length - 1; i > -1; i--) {
							 | 
						||
| 
								 | 
							
								        removePrimitive(entities[i], hash, primitives)
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      return destroyObject(this)
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * @private
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    RectangularSensorVisualizer.prototype._onCollectionChanged = function (entityCollection, added, removed, changed) {
							 | 
						||
| 
								 | 
							
								      var i
							 | 
						||
| 
								 | 
							
								      var entity
							 | 
						||
| 
								 | 
							
								      var entities = this._entitiesToVisualize
							 | 
						||
| 
								 | 
							
								      var hash = this._hash
							 | 
						||
| 
								 | 
							
								      var primitives = this._primitives
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      for (i = added.length - 1; i > -1; i--) {
							 | 
						||
| 
								 | 
							
								        entity = added[i]
							 | 
						||
| 
								 | 
							
								        if (defined(entity._rectangularSensorVoumes) && defined(entity._position) && defined(entity._orientation)) {
							 | 
						||
| 
								 | 
							
								          entities.set(entity.id, entity)
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      for (i = changed.length - 1; i > -1; i--) {
							 | 
						||
| 
								 | 
							
								        entity = changed[i]
							 | 
						||
| 
								 | 
							
								        if (defined(entity._rectangularSensorVoumes) && defined(entity._position) && defined(entity._orientation)) {
							 | 
						||
| 
								 | 
							
								          entities.set(entity.id, entity)
							 | 
						||
| 
								 | 
							
								        } else {
							 | 
						||
| 
								 | 
							
								          removePrimitive(entity, hash, primitives)
							 | 
						||
| 
								 | 
							
								          entities.remove(entity.id)
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      for (i = removed.length - 1; i > -1; i--) {
							 | 
						||
| 
								 | 
							
								        entity = removed[i]
							 | 
						||
| 
								 | 
							
								        removePrimitive(entity, hash, primitives)
							 | 
						||
| 
								 | 
							
								        entities.remove(entity.id)
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    return RectangularSensorVisualizer
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  define("initialize", [
							 | 
						||
| 
								 | 
							
								    "require",
							 | 
						||
| 
								 | 
							
								    "Cesium/Core/Cartesian3",
							 | 
						||
| 
								 | 
							
								    "Cesium/Core/Color",
							 | 
						||
| 
								 | 
							
								    "Cesium/Core/defined",
							 | 
						||
| 
								 | 
							
								    "Cesium/Core/Spherical",
							 | 
						||
| 
								 | 
							
								    "Cesium/Core/TimeInterval",
							 | 
						||
| 
								 | 
							
								    "Cesium/DataSources/CzmlDataSource",
							 | 
						||
| 
								 | 
							
								    "Cesium/DataSources/DataSourceDisplay",
							 | 
						||
| 
								 | 
							
								    "./conic/conic-sensor-graphics",
							 | 
						||
| 
								 | 
							
								    "./conic/conic-sensor-visualizer",
							 | 
						||
| 
								 | 
							
								    "./custom/custom-pattern-sensor-graphics",
							 | 
						||
| 
								 | 
							
								    "./custom/custom-pattern-sensor-visualizer",
							 | 
						||
| 
								 | 
							
								    "./rectangular/rectangular-sensor-graphics",
							 | 
						||
| 
								 | 
							
								    "./rectangular/rectangular-sensor-visualizer"
							 | 
						||
| 
								 | 
							
								  ], function (require) {
							 | 
						||
| 
								 | 
							
								    "use strict"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    var Cartesian3 = require("Cesium/Core/Cartesian3")
							 | 
						||
| 
								 | 
							
								    var Color = require("Cesium/Core/Color")
							 | 
						||
| 
								 | 
							
								    var defined = require("Cesium/Core/defined")
							 | 
						||
| 
								 | 
							
								    var Spherical = require("Cesium/Core/Spherical")
							 | 
						||
| 
								 | 
							
								    var TimeInterval = require("Cesium/Core/TimeInterval")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    var CzmlDataSource = require("Cesium/DataSources/CzmlDataSource")
							 | 
						||
| 
								 | 
							
								    var DataSourceDisplay = require("Cesium/DataSources/DataSourceDisplay")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    var ConicSensorGraphics = require("./conic/conic-sensor-graphics")
							 | 
						||
| 
								 | 
							
								    var ConicSensorVisualizer = require("./conic/conic-sensor-visualizer")
							 | 
						||
| 
								 | 
							
								    var CustomPatternSensorGraphics = require("./custom/custom-pattern-sensor-graphics")
							 | 
						||
| 
								 | 
							
								    var CustomPatternSensorVisualizer = require("./custom/custom-pattern-sensor-visualizer")
							 | 
						||
| 
								 | 
							
								    var RectangularSensorGraphics = require("./rectangular/rectangular-sensor-graphics")
							 | 
						||
| 
								 | 
							
								    var RectangularSensorVisualizer = require("./rectangular/rectangular-sensor-visualizer")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    var processPacketData = CzmlDataSource.processPacketData
							 | 
						||
| 
								 | 
							
								    var processMaterialPacketData = CzmlDataSource.processMaterialPacketData
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    function processDirectionData(customPatternSensor, directions, interval, sourceUri, entityCollection) {
							 | 
						||
| 
								 | 
							
								      var i
							 | 
						||
| 
								 | 
							
								      var len
							 | 
						||
| 
								 | 
							
								      var values = []
							 | 
						||
| 
								 | 
							
								      var unitSphericals = directions.unitSpherical
							 | 
						||
| 
								 | 
							
								      var sphericals = directions.spherical
							 | 
						||
| 
								 | 
							
								      var unitCartesians = directions.unitCartesian
							 | 
						||
| 
								 | 
							
								      var cartesians = directions.cartesian
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      if (defined(unitSphericals)) {
							 | 
						||
| 
								 | 
							
								        for (i = 0, len = unitSphericals.length; i < len; i += 2) {
							 | 
						||
| 
								 | 
							
								          values.push(new Spherical(unitSphericals[i], unitSphericals[i + 1]))
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        directions.array = values
							 | 
						||
| 
								 | 
							
								      } else if (defined(sphericals)) {
							 | 
						||
| 
								 | 
							
								        for (i = 0, len = sphericals.length; i < len; i += 3) {
							 | 
						||
| 
								 | 
							
								          values.push(new Spherical(sphericals[i], sphericals[i + 1], sphericals[i + 2]))
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        directions.array = values
							 | 
						||
| 
								 | 
							
								      } else if (defined(unitCartesians)) {
							 | 
						||
| 
								 | 
							
								        for (i = 0, len = unitCartesians.length; i < len; i += 3) {
							 | 
						||
| 
								 | 
							
								          var tmp = Spherical.fromCartesian3(new Cartesian3(unitCartesians[i], unitCartesians[i + 1], unitCartesians[i + 2]))
							 | 
						||
| 
								 | 
							
								          Spherical.normalize(tmp, tmp)
							 | 
						||
| 
								 | 
							
								          values.push(tmp)
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        directions.array = values
							 | 
						||
| 
								 | 
							
								      } else if (defined(cartesians)) {
							 | 
						||
| 
								 | 
							
								        for (i = 0, len = cartesians.length; i < len; i += 3) {
							 | 
						||
| 
								 | 
							
								          values.push(Spherical.fromCartesian3(new Cartesian3(cartesians[i], cartesians[i + 1], cartesians[i + 2])))
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        directions.array = values
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      processPacketData(Array, customPatternSensor, "directions", directions, interval, sourceUri, entityCollection)
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    function processCommonSensorProperties(sensor, sensorData, interval, sourceUri, entityCollection) {
							 | 
						||
| 
								 | 
							
								      processPacketData(Boolean, sensor, "show", sensorData.show, interval, sourceUri, entityCollection)
							 | 
						||
| 
								 | 
							
								      processPacketData(Number, sensor, "radius", sensorData.radius, interval, sourceUri, entityCollection)
							 | 
						||
| 
								 | 
							
								      processPacketData(Boolean, sensor, "showIntersection", sensorData.showIntersection, interval, sourceUri, entityCollection)
							 | 
						||
| 
								 | 
							
								      processPacketData(Color, sensor, "intersectionColor", sensorData.intersectionColor, interval, sourceUri, entityCollection)
							 | 
						||
| 
								 | 
							
								      processPacketData(Number, sensor, "intersectionWidth", sensorData.intersectionWidth, interval, sourceUri, entityCollection)
							 | 
						||
| 
								 | 
							
								      processMaterialPacketData(sensor, "lateralSurfaceMaterial", sensorData.lateralSurfaceMaterial, interval, sourceUri, entityCollection)
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    var iso8601Scratch = {
							 | 
						||
| 
								 | 
							
								      iso8601: undefined
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    function processConicSensor(entity, packet, entityCollection, sourceUri) {
							 | 
						||
| 
								 | 
							
								      var conicSensorData = packet.agi_conicSensor
							 | 
						||
| 
								 | 
							
								      if (!defined(conicSensorData)) {
							 | 
						||
| 
								 | 
							
								        return
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      var interval
							 | 
						||
| 
								 | 
							
								      var intervalString = conicSensorData.interval
							 | 
						||
| 
								 | 
							
								      if (defined(intervalString)) {
							 | 
						||
| 
								 | 
							
								        iso8601Scratch.iso8601 = intervalString
							 | 
						||
| 
								 | 
							
								        interval = TimeInterval.fromIso8601(iso8601Scratch)
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      var conicSensor = entity.conicSensor
							 | 
						||
| 
								 | 
							
								      if (!defined(conicSensor)) {
							 | 
						||
| 
								 | 
							
								        entity.addProperty("conicSensor")
							 | 
						||
| 
								 | 
							
								        conicSensor = new ConicSensorGraphics()
							 | 
						||
| 
								 | 
							
								        entity.conicSensor = conicSensor
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      processCommonSensorProperties(conicSensor, conicSensorData, interval, sourceUri, entityCollection)
							 | 
						||
| 
								 | 
							
								      processPacketData(Number, conicSensor, "innerHalfAngle", conicSensorData.innerHalfAngle, interval, sourceUri, entityCollection)
							 | 
						||
| 
								 | 
							
								      processPacketData(Number, conicSensor, "outerHalfAngle", conicSensorData.outerHalfAngle, interval, sourceUri, entityCollection)
							 | 
						||
| 
								 | 
							
								      processPacketData(Number, conicSensor, "minimumClockAngle", conicSensorData.minimumClockAngle, interval, sourceUri, entityCollection)
							 | 
						||
| 
								 | 
							
								      processPacketData(Number, conicSensor, "maximumClockAngle", conicSensorData.maximumClockAngle, interval, sourceUri, entityCollection)
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    function processCustomPatternSensor(entity, packet, entityCollection, sourceUri) {
							 | 
						||
| 
								 | 
							
								      var customPatternSensorData = packet.agi_customPatternSensor
							 | 
						||
| 
								 | 
							
								      if (!defined(customPatternSensorData)) {
							 | 
						||
| 
								 | 
							
								        return
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      var interval
							 | 
						||
| 
								 | 
							
								      var intervalString = customPatternSensorData.interval
							 | 
						||
| 
								 | 
							
								      if (defined(intervalString)) {
							 | 
						||
| 
								 | 
							
								        iso8601Scratch.iso8601 = intervalString
							 | 
						||
| 
								 | 
							
								        interval = TimeInterval.fromIso8601(iso8601Scratch)
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      var customPatternSensor = entity.customPatternSensor
							 | 
						||
| 
								 | 
							
								      if (!defined(customPatternSensor)) {
							 | 
						||
| 
								 | 
							
								        entity.addProperty("customPatternSensor")
							 | 
						||
| 
								 | 
							
								        customPatternSensor = new CustomPatternSensorGraphics()
							 | 
						||
| 
								 | 
							
								        entity.customPatternSensor = customPatternSensor
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      processCommonSensorProperties(customPatternSensor, customPatternSensorData, interval, sourceUri, entityCollection)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      // The directions property is a special case value that can be an array of unitSpherical or unit Cartesians.
							 | 
						||
| 
								 | 
							
								      // We pre-process this into Spherical instances and then process it like any other array.
							 | 
						||
| 
								 | 
							
								      var directions = customPatternSensorData.directions
							 | 
						||
| 
								 | 
							
								      if (defined(directions)) {
							 | 
						||
| 
								 | 
							
								        if (Array.isArray(directions)) {
							 | 
						||
| 
								 | 
							
								          var length = directions.length
							 | 
						||
| 
								 | 
							
								          for (var i = 0; i < length; i++) {
							 | 
						||
| 
								 | 
							
								            processDirectionData(customPatternSensor, directions[i], interval, sourceUri, entityCollection)
							 | 
						||
| 
								 | 
							
								          }
							 | 
						||
| 
								 | 
							
								        } else {
							 | 
						||
| 
								 | 
							
								          processDirectionData(customPatternSensor, directions, interval, sourceUri, entityCollection)
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    function processRectangularSensor(entity, packet, entityCollection, sourceUri) {
							 | 
						||
| 
								 | 
							
								      var rectangularSensorData = packet.agi_rectangularSensor
							 | 
						||
| 
								 | 
							
								      if (!defined(rectangularSensorData)) {
							 | 
						||
| 
								 | 
							
								        return
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      var interval
							 | 
						||
| 
								 | 
							
								      var intervalString = rectangularSensorData.interval
							 | 
						||
| 
								 | 
							
								      if (defined(intervalString)) {
							 | 
						||
| 
								 | 
							
								        iso8601Scratch.iso8601 = intervalString
							 | 
						||
| 
								 | 
							
								        interval = TimeInterval.fromIso8601(iso8601Scratch)
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      var rectangularSensorVoumes = entity.rectangularSensorVoumes
							 | 
						||
| 
								 | 
							
								      if (!defined(rectangularSensorVoumes)) {
							 | 
						||
| 
								 | 
							
								        entity.addProperty("rectangularSensorVoumes")
							 | 
						||
| 
								 | 
							
								        rectangularSensorVoumes = new RectangularSensorGraphics()
							 | 
						||
| 
								 | 
							
								        entity.rectangularSensorVoumes = rectangularSensorVoumes
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      processCommonSensorProperties(rectangularSensorVoumes, rectangularSensorData, interval, sourceUri, entityCollection)
							 | 
						||
| 
								 | 
							
								      processPacketData(Number, rectangularSensorVoumes, "xHalfAngle", rectangularSensorData.xHalfAngle, interval, sourceUri, entityCollection)
							 | 
						||
| 
								 | 
							
								      processPacketData(Number, rectangularSensorVoumes, "yHalfAngle", rectangularSensorData.yHalfAngle, interval, sourceUri, entityCollection)
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    var initialized = false
							 | 
						||
| 
								 | 
							
								    return function initialize() {
							 | 
						||
| 
								 | 
							
								      if (initialized) {
							 | 
						||
| 
								 | 
							
								        return
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      CzmlDataSource.updaters.push(processConicSensor, processCustomPatternSensor, processRectangularSensor)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      var originalDefaultVisualizersCallback = DataSourceDisplay.defaultVisualizersCallback
							 | 
						||
| 
								 | 
							
								      DataSourceDisplay.defaultVisualizersCallback = function (scene, entityCluster, dataSource) {
							 | 
						||
| 
								 | 
							
								        var entities = dataSource.entities
							 | 
						||
| 
								 | 
							
								        var array = originalDefaultVisualizersCallback(scene, entityCluster, dataSource)
							 | 
						||
| 
								 | 
							
								        return array.concat([
							 | 
						||
| 
								 | 
							
								          new ConicSensorVisualizer(scene, entities),
							 | 
						||
| 
								 | 
							
								          new CustomPatternSensorVisualizer(scene, entities),
							 | 
						||
| 
								 | 
							
								          new RectangularSensorVisualizer(scene, entities)
							 | 
						||
| 
								 | 
							
								        ])
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      initialized = true
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  define("cesium-sensor-volumes", [
							 | 
						||
| 
								 | 
							
								    "require",
							 | 
						||
| 
								 | 
							
								    "./initialize",
							 | 
						||
| 
								 | 
							
								    "./conic/conic-sensor-graphics",
							 | 
						||
| 
								 | 
							
								    "./conic/conic-sensor-visualizer",
							 | 
						||
| 
								 | 
							
								    "./custom/custom-pattern-sensor-graphics",
							 | 
						||
| 
								 | 
							
								    "./custom/custom-pattern-sensor-visualizer",
							 | 
						||
| 
								 | 
							
								    "./custom/custom-sensor-volume",
							 | 
						||
| 
								 | 
							
								    "./rectangular/rectangular-pyramid-sensor-volume",
							 | 
						||
| 
								 | 
							
								    "./rectangular/rectangular-sensor-graphics",
							 | 
						||
| 
								 | 
							
								    "./rectangular/rectangular-sensor-visualizer"
							 | 
						||
| 
								 | 
							
								  ], function (require) {
							 | 
						||
| 
								 | 
							
								    "use strict"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    var initialize = require("./initialize")
							 | 
						||
| 
								 | 
							
								    var ConicSensorGraphics = require("./conic/conic-sensor-graphics")
							 | 
						||
| 
								 | 
							
								    var ConicSensorVisualizer = require("./conic/conic-sensor-visualizer")
							 | 
						||
| 
								 | 
							
								    var CustomPatternSensorGraphics = require("./custom/custom-pattern-sensor-graphics")
							 | 
						||
| 
								 | 
							
								    var CustomPatternSensorVisualizer = require("./custom/custom-pattern-sensor-visualizer")
							 | 
						||
| 
								 | 
							
								    var CustomSensorVolume = require("./custom/custom-sensor-volume")
							 | 
						||
| 
								 | 
							
								    var RectangularPyramidSensorVolume = require("./rectangular/rectangular-pyramid-sensor-volume")
							 | 
						||
| 
								 | 
							
								    var RectangularSensorGraphics = require("./rectangular/rectangular-sensor-graphics")
							 | 
						||
| 
								 | 
							
								    var RectangularSensorVisualizer = require("./rectangular/rectangular-sensor-visualizer")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    initialize()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    return {
							 | 
						||
| 
								 | 
							
								      ConicSensorGraphics: ConicSensorGraphics,
							 | 
						||
| 
								 | 
							
								      ConicSensorVisualizer: ConicSensorVisualizer,
							 | 
						||
| 
								 | 
							
								      CustomPatternSensorGraphics: CustomPatternSensorGraphics,
							 | 
						||
| 
								 | 
							
								      CustomPatternSensorVisualizer: CustomPatternSensorVisualizer,
							 | 
						||
| 
								 | 
							
								      CustomSensorVolume: CustomSensorVolume,
							 | 
						||
| 
								 | 
							
								      RectangularPyramidSensorVolume: RectangularPyramidSensorVolume,
							 | 
						||
| 
								 | 
							
								      RectangularSensorGraphics: RectangularSensorGraphics,
							 | 
						||
| 
								 | 
							
								      RectangularSensorVisualizer: RectangularSensorVisualizer
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  ;("use strict")
							 | 
						||
| 
								 | 
							
								  /* global Cesium */
							 | 
						||
| 
								 | 
							
								  define("Cesium/Core/Cartesian3", function () {
							 | 
						||
| 
								 | 
							
								    return Cesium["Cartesian3"]
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								  define("Cesium/Core/Color", function () {
							 | 
						||
| 
								 | 
							
								    return Cesium["Color"]
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								  define("Cesium/Core/defined", function () {
							 | 
						||
| 
								 | 
							
								    return Cesium["defined"]
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								  define("Cesium/Core/Spherical", function () {
							 | 
						||
| 
								 | 
							
								    return Cesium["Spherical"]
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								  define("Cesium/Core/TimeInterval", function () {
							 | 
						||
| 
								 | 
							
								    return Cesium["TimeInterval"]
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								  define("Cesium/DataSources/CzmlDataSource", function () {
							 | 
						||
| 
								 | 
							
								    return Cesium["CzmlDataSource"]
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								  define("Cesium/DataSources/DataSourceDisplay", function () {
							 | 
						||
| 
								 | 
							
								    return Cesium["DataSourceDisplay"]
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								  define("Cesium/Core/defaultValue", function () {
							 | 
						||
| 
								 | 
							
								    return Cesium["defaultValue"]
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								  define("Cesium/Core/DeveloperError", function () {
							 | 
						||
| 
								 | 
							
								    return Cesium["DeveloperError"]
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								  define("Cesium/Core/Event", function () {
							 | 
						||
| 
								 | 
							
								    return Cesium["Event"]
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								  define("Cesium/DataSources/createMaterialPropertyDescriptor", function () {
							 | 
						||
| 
								 | 
							
								    return Cesium["createMaterialPropertyDescriptor"]
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								  define("Cesium/DataSources/createPropertyDescriptor", function () {
							 | 
						||
| 
								 | 
							
								    return Cesium["createPropertyDescriptor"]
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								  define("Cesium/Core/AssociativeArray", function () {
							 | 
						||
| 
								 | 
							
								    return Cesium["AssociativeArray"]
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								  define("Cesium/Core/destroyObject", function () {
							 | 
						||
| 
								 | 
							
								    return Cesium["destroyObject"]
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								  define("Cesium/Core/Math", function () {
							 | 
						||
| 
								 | 
							
								    return Cesium["Math"]
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								  define("Cesium/Core/Matrix3", function () {
							 | 
						||
| 
								 | 
							
								    return Cesium["Matrix3"]
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								  define("Cesium/Core/Matrix4", function () {
							 | 
						||
| 
								 | 
							
								    return Cesium["Matrix4"]
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								  define("Cesium/Core/Quaternion", function () {
							 | 
						||
| 
								 | 
							
								    return Cesium["Quaternion"]
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								  define("Cesium/DataSources/MaterialProperty", function () {
							 | 
						||
| 
								 | 
							
								    return Cesium["MaterialProperty"]
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								  define("Cesium/DataSources/Property", function () {
							 | 
						||
| 
								 | 
							
								    return Cesium["Property"]
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								  define("Cesium/Core/BoundingSphere", function () {
							 | 
						||
| 
								 | 
							
								    return Cesium["BoundingSphere"]
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								  define("Cesium/Core/combine", function () {
							 | 
						||
| 
								 | 
							
								    return Cesium["combine"]
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								  define("Cesium/Core/ComponentDatatype", function () {
							 | 
						||
| 
								 | 
							
								    return Cesium["ComponentDatatype"]
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								  define("Cesium/Core/PrimitiveType", function () {
							 | 
						||
| 
								 | 
							
								    return Cesium["PrimitiveType"]
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								  define("Cesium/Renderer/Buffer", function () {
							 | 
						||
| 
								 | 
							
								    return Cesium["Buffer"]
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								  define("Cesium/Renderer/BufferUsage", function () {
							 | 
						||
| 
								 | 
							
								    return Cesium["BufferUsage"]
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								  define("Cesium/Renderer/DrawCommand", function () {
							 | 
						||
| 
								 | 
							
								    return Cesium["DrawCommand"]
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								  define("Cesium/Renderer/Pass", function () {
							 | 
						||
| 
								 | 
							
								    return Cesium["Pass"]
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								  define("Cesium/Renderer/RenderState", function () {
							 | 
						||
| 
								 | 
							
								    return Cesium["RenderState"]
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								  define("Cesium/Renderer/ShaderProgram", function () {
							 | 
						||
| 
								 | 
							
								    return Cesium["ShaderProgram"]
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								  define("Cesium/Renderer/ShaderSource", function () {
							 | 
						||
| 
								 | 
							
								    return Cesium["ShaderSource"]
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								  define("Cesium/Renderer/VertexArray", function () {
							 | 
						||
| 
								 | 
							
								    return Cesium["VertexArray"]
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								  define("Cesium/Scene/BlendingState", function () {
							 | 
						||
| 
								 | 
							
								    return Cesium["BlendingState"]
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								  define("Cesium/Scene/CullFace", function () {
							 | 
						||
| 
								 | 
							
								    return Cesium["CullFace"]
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								  define("Cesium/Scene/Material", function () {
							 | 
						||
| 
								 | 
							
								    return Cesium["Material"]
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								  define("Cesium/Scene/SceneMode", function () {
							 | 
						||
| 
								 | 
							
								    return Cesium["SceneMode"]
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								  define("Cesium/Core/clone", function () {
							 | 
						||
| 
								 | 
							
								    return Cesium["clone"]
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								  // eslint-disable-next-line import/no-dynamic-require
							 | 
						||
| 
								 | 
							
								  require(["cesium-sensor-volumes"], function (CesiumSensorVolumes) {
							 | 
						||
| 
								 | 
							
								    "use strict"
							 | 
						||
| 
								 | 
							
								    /* global window, self */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    var scope
							 | 
						||
| 
								 | 
							
								    if (typeof window === "undefined") {
							 | 
						||
| 
								 | 
							
								      if (typeof self === "undefined") {
							 | 
						||
| 
								 | 
							
								        scope = {}
							 | 
						||
| 
								 | 
							
								      } else {
							 | 
						||
| 
								 | 
							
								        scope = self
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    } else {
							 | 
						||
| 
								 | 
							
								      scope = window
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    scope.CesiumSensorVolumes = CesiumSensorVolumes
							 | 
						||
| 
								 | 
							
								  }, undefined, true)
							 | 
						||
| 
								 | 
							
								})()
							 |