DistanceDisplayConditionGeometryInstanceAttribute.js 6.1 KB

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