DistanceDisplayConditionGeometryInstanceAttribute.js 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. import ComponentDatatype from './ComponentDatatype.js';
  2. import defaultValue from './defaultValue.js';
  3. import defined from './defined.js';
  4. import defineProperties from './defineProperties.js';
  5. import DeveloperError from './DeveloperError.js';
  6. /**
  7. * Value and type information for per-instance geometry attribute that determines if the geometry instance has a distance display condition.
  8. *
  9. * @alias DistanceDisplayConditionGeometryInstanceAttribute
  10. * @constructor
  11. *
  12. * @param {Number} [near=0.0] The near distance.
  13. * @param {Number} [far=Number.MAX_VALUE] The far distance.
  14. *
  15. * @exception {DeveloperError} far must be greater than near.
  16. *
  17. * @example
  18. * var instance = new Cesium.GeometryInstance({
  19. * geometry : new Cesium.BoxGeometry({
  20. * vertexFormat : Cesium.VertexFormat.POSITION_AND_NORMAL,
  21. * minimum : new Cesium.Cartesian3(-250000.0, -250000.0, -250000.0),
  22. * maximum : new Cesium.Cartesian3(250000.0, 250000.0, 250000.0)
  23. * }),
  24. * modelMatrix : Cesium.Matrix4.multiplyByTranslation(Cesium.Transforms.eastNorthUpToFixedFrame(
  25. * Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883)), new Cesium.Cartesian3(0.0, 0.0, 1000000.0), new Cesium.Matrix4()),
  26. * id : 'box',
  27. * attributes : {
  28. * distanceDisplayCondition : new Cesium.DistanceDisplayConditionGeometryInstanceAttribute(100.0, 10000.0)
  29. * }
  30. * });
  31. *
  32. * @see GeometryInstance
  33. * @see GeometryInstanceAttribute
  34. */
  35. function DistanceDisplayConditionGeometryInstanceAttribute(near, far) {
  36. near = defaultValue(near, 0.0);
  37. far = defaultValue(far, Number.MAX_VALUE);
  38. //>>includeStart('debug', pragmas.debug);
  39. if (far <= near) {
  40. throw new DeveloperError('far distance must be greater than near distance.');
  41. }
  42. //>>includeEnd('debug');
  43. /**
  44. * The values for the attributes stored in a typed array.
  45. *
  46. * @type Float32Array
  47. *
  48. * @default [0.0, 0.0, Number.MAX_VALUE]
  49. */
  50. this.value = new Float32Array([near, far]);
  51. }
  52. defineProperties(DistanceDisplayConditionGeometryInstanceAttribute.prototype, {
  53. /**
  54. * The datatype of each component in the attribute, e.g., individual elements in
  55. * {@link DistanceDisplayConditionGeometryInstanceAttribute#value}.
  56. *
  57. * @memberof DistanceDisplayConditionGeometryInstanceAttribute.prototype
  58. *
  59. * @type {ComponentDatatype}
  60. * @readonly
  61. *
  62. * @default {@link ComponentDatatype.FLOAT}
  63. */
  64. componentDatatype : {
  65. get : function() {
  66. return ComponentDatatype.FLOAT;
  67. }
  68. },
  69. /**
  70. * The number of components in the attributes, i.e., {@link DistanceDisplayConditionGeometryInstanceAttribute#value}.
  71. *
  72. * @memberof DistanceDisplayConditionGeometryInstanceAttribute.prototype
  73. *
  74. * @type {Number}
  75. * @readonly
  76. *
  77. * @default 3
  78. */
  79. componentsPerAttribute : {
  80. get : function() {
  81. return 2;
  82. }
  83. },
  84. /**
  85. * When <code>true</code> and <code>componentDatatype</code> is an integer format,
  86. * indicate that the components should be mapped to the range [0, 1] (unsigned)
  87. * or [-1, 1] (signed) when they are accessed as floating-point for rendering.
  88. *
  89. * @memberof DistanceDisplayConditionGeometryInstanceAttribute.prototype
  90. *
  91. * @type {Boolean}
  92. * @readonly
  93. *
  94. * @default false
  95. */
  96. normalize : {
  97. get : function() {
  98. return false;
  99. }
  100. }
  101. });
  102. /**
  103. * Creates a new {@link DistanceDisplayConditionGeometryInstanceAttribute} instance given the provided an enabled flag and {@link DistanceDisplayCondition}.
  104. *
  105. * @param {DistanceDisplayCondition} distanceDisplayCondition The distance display condition.
  106. * @returns {DistanceDisplayConditionGeometryInstanceAttribute} The new {@link DistanceDisplayConditionGeometryInstanceAttribute} instance.
  107. *
  108. * @exception {DeveloperError} distanceDisplayCondition.far must be greater than distanceDisplayCondition.near
  109. *
  110. * @example
  111. * var distanceDisplayCondition = new Cesium.DistanceDisplayCondition(100.0, 10000.0);
  112. * var instance = new Cesium.GeometryInstance({
  113. * geometry : geometry,
  114. * attributes : {
  115. * distanceDisplayCondition : Cesium.DistanceDisplayConditionGeometryInstanceAttribute.fromDistanceDisplayCondition(distanceDisplayCondition)
  116. * }
  117. * });
  118. */
  119. DistanceDisplayConditionGeometryInstanceAttribute.fromDistanceDisplayCondition = function(distanceDisplayCondition) {
  120. //>>includeStart('debug', pragmas.debug);
  121. if (!defined(distanceDisplayCondition)) {
  122. throw new DeveloperError('distanceDisplayCondition is required.');
  123. }
  124. if (distanceDisplayCondition.far <= distanceDisplayCondition.near) {
  125. throw new DeveloperError('distanceDisplayCondition.far distance must be greater than distanceDisplayCondition.near distance.');
  126. }
  127. //>>includeEnd('debug');
  128. return new DistanceDisplayConditionGeometryInstanceAttribute(distanceDisplayCondition.near, distanceDisplayCondition.far);
  129. };
  130. /**
  131. * Converts a distance display condition to a typed array that can be used to assign a distance display condition attribute.
  132. *
  133. * @param {DistanceDisplayCondition} distanceDisplayCondition The distance display condition value.
  134. * @param {Float32Array} [result] The array to store the result in, if undefined a new instance will be created.
  135. * @returns {Float32Array} The modified result parameter or a new instance if result was undefined.
  136. *
  137. * @example
  138. * var attributes = primitive.getGeometryInstanceAttributes('an id');
  139. * attributes.distanceDisplayCondition = Cesium.DistanceDisplayConditionGeometryInstanceAttribute.toValue(distanceDisplayCondition, attributes.distanceDisplayCondition);
  140. */
  141. DistanceDisplayConditionGeometryInstanceAttribute.toValue = function(distanceDisplayCondition, result) {
  142. //>>includeStart('debug', pragmas.debug);
  143. if (!defined(distanceDisplayCondition)) {
  144. throw new DeveloperError('distanceDisplayCondition is required.');
  145. }
  146. //>>includeEnd('debug');
  147. if (!defined(result)) {
  148. return new Float32Array([distanceDisplayCondition.near, distanceDisplayCondition.far]);
  149. }
  150. result[0] = distanceDisplayCondition.near;
  151. result[1] = distanceDisplayCondition.far;
  152. return result;
  153. };
  154. export default DistanceDisplayConditionGeometryInstanceAttribute;