cesium 0.22.0 → 0.23.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/Cesium.js +5 -2
  3. data/app/assets/javascripts/Core/Cartesian2.js +58 -0
  4. data/app/assets/javascripts/Core/Cartesian3.js +67 -7
  5. data/app/assets/javascripts/Core/Cartesian4.js +63 -0
  6. data/app/assets/javascripts/Core/CatmullRomSpline.js +183 -163
  7. data/app/assets/javascripts/Core/CorridorGeometry.js +2 -2
  8. data/app/assets/javascripts/Core/Ellipsoid.js +16 -0
  9. data/app/assets/javascripts/Core/ExtentGeometry.js +9 -2
  10. data/app/assets/javascripts/Core/ExtentOutlineGeometry.js +2 -2
  11. data/app/assets/javascripts/Core/GeometryPipeline.js +23 -23
  12. data/app/assets/javascripts/Core/HermiteSpline.js +260 -155
  13. data/app/assets/javascripts/Core/IndexDatatype.js +43 -34
  14. data/app/assets/javascripts/Core/LinearSpline.js +118 -0
  15. data/app/assets/javascripts/Core/Math.js +34 -3
  16. data/app/assets/javascripts/Core/Matrix2.js +26 -0
  17. data/app/assets/javascripts/Core/Matrix3.js +98 -0
  18. data/app/assets/javascripts/Core/Matrix4.js +42 -0
  19. data/app/assets/javascripts/Core/ObjectOrientedBoundingBox.js +396 -0
  20. data/app/assets/javascripts/Core/PolygonGeometry.js +87 -47
  21. data/app/assets/javascripts/Core/PolygonGeometryLibrary.js +20 -17
  22. data/app/assets/javascripts/Core/PolygonOutlineGeometry.js +68 -40
  23. data/app/assets/javascripts/Core/PolygonPipeline.js +19 -9
  24. data/app/assets/javascripts/Core/PrimitiveType.js +33 -36
  25. data/app/assets/javascripts/Core/Quaternion.js +147 -1
  26. data/app/assets/javascripts/Core/QuaternionSpline.js +160 -0
  27. data/app/assets/javascripts/Core/Spline.js +121 -0
  28. data/app/assets/javascripts/Core/Transforms.js +0 -2
  29. data/app/assets/javascripts/Core/loadArrayBuffer.js +5 -1
  30. data/app/assets/javascripts/Core/loadBlob.js +5 -1
  31. data/app/assets/javascripts/Core/loadText.js +4 -1
  32. data/app/assets/javascripts/Core/loadWithXhr.js +30 -14
  33. data/app/assets/javascripts/DynamicScene/PolylineOutlineMaterialProperty.js +2 -2
  34. data/app/assets/javascripts/Renderer/AutomaticUniforms.js +41 -41
  35. data/app/assets/javascripts/Renderer/Context.js +171 -201
  36. data/app/assets/javascripts/Renderer/CubeMapFace.js +2 -2
  37. data/app/assets/javascripts/Renderer/DrawCommand.js +2 -2
  38. data/app/assets/javascripts/Renderer/PixelFormat.js +22 -28
  39. data/app/assets/javascripts/Renderer/ShaderProgram.js +65 -46
  40. data/app/assets/javascripts/Renderer/Texture.js +1 -1
  41. data/app/assets/javascripts/Renderer/TextureMagnificationFilter.js +7 -9
  42. data/app/assets/javascripts/Renderer/TextureMinificationFilter.js +19 -25
  43. data/app/assets/javascripts/Renderer/TextureWrap.js +11 -13
  44. data/app/assets/javascripts/Renderer/UniformDatatype.js +29 -29
  45. data/app/assets/javascripts/Renderer/VertexArray.js +43 -35
  46. data/app/assets/javascripts/Scene/ArcGisMapServerImageryProvider.js +1 -2
  47. data/app/assets/javascripts/Scene/BillboardCollection.js +10 -1
  48. data/app/assets/javascripts/Scene/CameraFlightPath.js +58 -101
  49. data/app/assets/javascripts/Scene/CentralBody.js +1 -4
  50. data/app/assets/javascripts/Scene/CentralBodySurface.js +1 -2
  51. data/app/assets/javascripts/Scene/CesiumTerrainProvider.js +1 -2
  52. data/app/assets/javascripts/Scene/CustomSensorVolume.js +17 -3
  53. data/app/assets/javascripts/Scene/EllipsoidPrimitive.js +20 -5
  54. data/app/assets/javascripts/Scene/EllipsoidSurfaceAppearance.js +1 -2
  55. data/app/assets/javascripts/Scene/FrameState.js +1 -3
  56. data/app/assets/javascripts/Scene/GoogleEarthImageryProvider.js +2 -5
  57. data/app/assets/javascripts/Scene/OpenStreetMapImageryProvider.js +1 -2
  58. data/app/assets/javascripts/Scene/OrthographicFrustum.js +1 -2
  59. data/app/assets/javascripts/Scene/PerspectiveOffCenterFrustum.js +1 -2
  60. data/app/assets/javascripts/Scene/Polygon.js +1 -3
  61. data/app/assets/javascripts/Scene/Polyline.js +5 -2
  62. data/app/assets/javascripts/Scene/PolylineCollection.js +4 -6
  63. data/app/assets/javascripts/Scene/Primitive.js +19 -13
  64. data/app/assets/javascripts/Scene/PrimitivePipeline.js +1 -1
  65. data/app/assets/javascripts/Scene/Scene.js +7 -10
  66. data/app/assets/javascripts/Scene/SceneTransforms.js +1 -3
  67. data/app/assets/javascripts/Scene/SceneTransitioner.js +11 -11
  68. data/app/assets/javascripts/Scene/SingleTileImageryProvider.js +1 -2
  69. data/app/assets/javascripts/Scene/TexturePool.js +1 -1
  70. data/app/assets/javascripts/Scene/TileMapServiceImageryProvider.js +1 -2
  71. data/app/assets/javascripts/Scene/VRTheWorldTerrainProvider.js +1 -2
  72. data/app/assets/javascripts/Scene/ViewportQuad.js +1 -3
  73. data/app/assets/javascripts/Scene/WebMapServiceImageryProvider.js +1 -2
  74. data/app/assets/javascripts/ThirdParty/knockout-3.0.0.js +6 -3
  75. data/app/assets/javascripts/Widgets/CesiumWidget/CesiumWidget.js +4 -3
  76. data/app/assets/javascripts/Widgets/SceneModePicker/SceneModePickerViewModel.js +1 -1
  77. data/app/assets/javascripts/Widgets/Viewer/Viewer.js +5 -5
  78. data/app/assets/javascripts/Widgets/Viewer/viewerDragDropMixin.js +13 -13
  79. data/app/assets/javascripts/Widgets/Viewer/viewerDynamicObjectMixin.js +6 -6
  80. data/app/assets/javascripts/Widgets/widgets.css +1 -1
  81. data/lib/cesium/version.rb +1 -1
  82. metadata +6 -3
  83. data/app/assets/javascripts/Core/OrientationInterpolator.js +0 -106
@@ -25,8 +25,8 @@ define(['Core/defaultValue', 'Core/defined', 'Core/Cartesian3', 'Core/Ellipsoid'
25
25
  PolygonGeometryLibrary.subdivideLine = function(p0, p1, granularity) {
26
26
  var length = Cartesian3.distance(p0, p1);
27
27
  var angleBetween = Cartesian3.angleBetween(p0, p1);
28
- var n = angleBetween/granularity;
29
- var countDivide = Math.ceil(Math.log(n)/Math.log(2));
28
+ var n = angleBetween / granularity;
29
+ var countDivide = Math.ceil(Math.log(n) / Math.log(2));
30
30
  if (countDivide < 1) {
31
31
  countDivide = 0;
32
32
  }
@@ -39,8 +39,8 @@ define(['Core/defaultValue', 'Core/defined', 'Core/Cartesian3', 'Core/Ellipsoid'
39
39
  positions[index++] = p0.x;
40
40
  positions[index++] = p0.y;
41
41
  positions[index++] = p0.z;
42
- for (var i = 1; i < numVertices; i++) {
43
- var p = getPointAtDistance(p0, p1, i*distanceBetweenVertices, length);
42
+ for ( var i = 1; i < numVertices; i++) {
43
+ var p = getPointAtDistance(p0, p1, i * distanceBetweenVertices, length);
44
44
  positions[index++] = p[0];
45
45
  positions[index++] = p[1];
46
46
  positions[index++] = p[2];
@@ -49,19 +49,20 @@ define(['Core/defaultValue', 'Core/defined', 'Core/Cartesian3', 'Core/Ellipsoid'
49
49
  return positions;
50
50
  };
51
51
 
52
-
53
52
  var scaleToGeodeticHeightN1 = new Cartesian3();
54
53
  var scaleToGeodeticHeightN2 = new Cartesian3();
55
- var scaleToGeodeticHeightP = new Cartesian3();
54
+ var scaleToGeodeticHeightP1 = new Cartesian3();
55
+ var scaleToGeodeticHeightP2 = new Cartesian3();
56
56
  /**
57
57
  * @private
58
58
  */
59
- PolygonGeometryLibrary.scaleToGeodeticHeightExtruded = function(geometry, maxHeight, minHeight, ellipsoid) {
59
+ PolygonGeometryLibrary.scaleToGeodeticHeightExtruded = function(geometry, maxHeight, minHeight, ellipsoid, perPositionHeight) {
60
60
  ellipsoid = defaultValue(ellipsoid, Ellipsoid.WGS84);
61
61
 
62
62
  var n1 = scaleToGeodeticHeightN1;
63
63
  var n2 = scaleToGeodeticHeightN2;
64
- var p = scaleToGeodeticHeightP;
64
+ var p = scaleToGeodeticHeightP1;
65
+ var p2 = scaleToGeodeticHeightP2;
65
66
 
66
67
  if (defined(geometry) && defined(geometry.attributes) && defined(geometry.attributes.position)) {
67
68
  var positions = geometry.attributes.position.values;
@@ -70,20 +71,22 @@ define(['Core/defaultValue', 'Core/defined', 'Core/Cartesian3', 'Core/Ellipsoid'
70
71
  for ( var i = 0; i < length; i += 3) {
71
72
  Cartesian3.fromArray(positions, i, p);
72
73
 
73
- ellipsoid.scaleToGeodeticSurface(p, p);
74
74
  ellipsoid.geodeticSurfaceNormal(p, n1);
75
+ p2 = ellipsoid.scaleToGeodeticSurface(p, p2);
76
+ n2 = Cartesian3.multiplyByScalar(n1, minHeight, n2);
77
+ n2 = Cartesian3.add(p2, n2, n2);
78
+ positions[i + length] = n2.x;
79
+ positions[i + 1 + length] = n2.y;
80
+ positions[i + 2 + length] = n2.z;
75
81
 
76
- Cartesian3.multiplyByScalar(n1, maxHeight, n2);
77
- Cartesian3.add(p, n2, n2);
82
+ if (perPositionHeight) {
83
+ p2 = Cartesian3.clone(p, p2);
84
+ }
85
+ n2 = Cartesian3.multiplyByScalar(n1, maxHeight, n2);
86
+ n2 = Cartesian3.add(p2, n2, n2);
78
87
  positions[i] = n2.x;
79
88
  positions[i + 1] = n2.y;
80
89
  positions[i + 2] = n2.z;
81
-
82
- Cartesian3.multiplyByScalar(n1, minHeight, n2);
83
- Cartesian3.add(p, n2, n2);
84
- positions[i + length] = n2.x;
85
- positions[i + 1 + length] = n2.y;
86
- positions[i + 2 + length] = n2.z;
87
90
  }
88
91
  }
89
92
  return geometry;
@@ -23,7 +23,7 @@ define(['Core/defaultValue', 'Core/defined', 'Core/BoundingSphere', 'Core/Cartes
23
23
  "use strict";
24
24
  var createGeometryFromPositionsPositions = [];
25
25
 
26
- function createGeometryFromPositions(ellipsoid, positions, granularity) {
26
+ function createGeometryFromPositions(ellipsoid, positions, granularity, perPositionHeight) {
27
27
  var cleanedPositions = PolygonPipeline.removeDuplicates(positions);
28
28
  if (cleanedPositions.length < 3) {
29
29
  throw new DeveloperError('Duplicate positions result in not enough positions to form a polygon.');
@@ -37,36 +37,44 @@ define(['Core/defaultValue', 'Core/defined', 'Core/BoundingSphere', 'Core/Cartes
37
37
  positions2D.reverse();
38
38
  cleanedPositions.reverse();
39
39
  }
40
+
40
41
  var subdividedPositions = [];
41
42
  var length = cleanedPositions.length;
42
43
  var i;
43
- for (i = 0; i < length-1; i++) {
44
- subdividedPositions = subdividedPositions.concat(PolygonGeometryLibrary.subdivideLine(cleanedPositions[i], cleanedPositions[i+1], granularity));
44
+ if (!perPositionHeight) {
45
+ for (i = 0; i < length; i++) {
46
+ subdividedPositions = subdividedPositions.concat(PolygonGeometryLibrary.subdivideLine(cleanedPositions[i], cleanedPositions[(i + 1) % length], granularity));
47
+ }
48
+ } else {
49
+ for (i = 0; i < length; i++) {
50
+ var p0 = cleanedPositions[i];
51
+ var p1 = cleanedPositions[(i + 1) % length];
52
+ subdividedPositions.push(p0.x, p0.y, p0.z, p1.x, p1.y, p1.z);
53
+ }
45
54
  }
46
- subdividedPositions = subdividedPositions.concat(PolygonGeometryLibrary.subdivideLine(cleanedPositions[length-1], cleanedPositions[0], granularity));
47
55
 
48
- length = subdividedPositions.length/3;
49
- var indicesSize = length*2;
50
- var indices = IndexDatatype.createTypedArray(subdividedPositions.length/3, indicesSize);
56
+ length = subdividedPositions.length / 3;
57
+ var indicesSize = length * 2;
58
+ var indices = IndexDatatype.createTypedArray(subdividedPositions.length / 3, indicesSize);
51
59
  var index = 0;
52
- for (i = 0; i < length-1; i++) {
60
+ for (i = 0; i < length - 1; i++) {
53
61
  indices[index++] = i;
54
- indices[index++] = i+1;
62
+ indices[index++] = i + 1;
55
63
  }
56
- indices[index++] = length-1;
64
+ indices[index++] = length - 1;
57
65
  indices[index++] = 0;
58
66
 
59
67
  return new GeometryInstance({
60
68
  geometry : new Geometry({
61
- attributes: new GeometryAttributes({
62
- position: new GeometryAttribute({
69
+ attributes : new GeometryAttributes({
70
+ position : new GeometryAttribute({
63
71
  componentDatatype : ComponentDatatype.DOUBLE,
64
72
  componentsPerAttribute : 3,
65
73
  values : new Float64Array(subdividedPositions)
66
74
  })
67
75
  }),
68
- indices: indices,
69
- primitiveType: PrimitiveType.LINES
76
+ indices : indices,
77
+ primitiveType : PrimitiveType.LINES
70
78
  })
71
79
  });
72
80
  }
@@ -75,7 +83,7 @@ define(['Core/defaultValue', 'Core/defined', 'Core/BoundingSphere', 'Core/Cartes
75
83
  var scratchNormal = new Cartesian3();
76
84
  var scratchBoundingSphere = new BoundingSphere();
77
85
 
78
- function createGeometryFromPositionsExtruded(ellipsoid, positions, granularity) {
86
+ function createGeometryFromPositionsExtruded(ellipsoid, positions, granularity, perPositionHeight) {
79
87
  var cleanedPositions = PolygonPipeline.removeDuplicates(positions);
80
88
  if (cleanedPositions.length < 3) {
81
89
  throw new DeveloperError('Duplicate positions result in not enough positions to form a polygon.');
@@ -94,25 +102,39 @@ define(['Core/defaultValue', 'Core/defined', 'Core/BoundingSphere', 'Core/Cartes
94
102
  var i;
95
103
  var corners = new Array(length);
96
104
  corners[0] = 0;
97
- for (i = 0; i < length-1; i++) {
98
- subdividedPositions = subdividedPositions.concat(PolygonGeometryLibrary.subdivideLine(cleanedPositions[i], cleanedPositions[i+1], granularity));
99
- corners[i+1] = subdividedPositions.length/3;
105
+ if (!perPositionHeight) {
106
+ for (i = 0; i < length - 1; i++) {
107
+ subdividedPositions = subdividedPositions.concat(PolygonGeometryLibrary.subdivideLine(cleanedPositions[i], cleanedPositions[i + 1], granularity));
108
+ corners[i + 1] = subdividedPositions.length / 3;
109
+ }
110
+ subdividedPositions = subdividedPositions.concat(PolygonGeometryLibrary.subdivideLine(cleanedPositions[length - 1], cleanedPositions[0], granularity));
111
+ } else {
112
+ var p0;
113
+ var p1;
114
+ for (i = 0; i < length - 1; i++) {
115
+ p0 = cleanedPositions[i];
116
+ p1 = cleanedPositions[(i + 1) % length];
117
+ subdividedPositions.push(p0.x, p0.y, p0.z, p1.x, p1.y, p1.z);
118
+ corners[i + 1] = subdividedPositions.length / 3;
119
+ }
120
+ p0 = cleanedPositions[length - 1];
121
+ p1 = cleanedPositions[0];
122
+ subdividedPositions.push(p0.x, p0.y, p0.z, p1.x, p1.y, p1.z);
100
123
  }
101
- subdividedPositions = subdividedPositions.concat(PolygonGeometryLibrary.subdivideLine(cleanedPositions[length-1], cleanedPositions[0], granularity));
102
124
 
103
- length = subdividedPositions.length/3;
104
- var indicesSize = ((length * 2) + corners.length)*2;
105
- var indices = IndexDatatype.createTypedArray(subdividedPositions.length/3, indicesSize);
125
+ length = subdividedPositions.length / 3;
126
+ var indicesSize = ((length * 2) + corners.length) * 2;
127
+ var indices = IndexDatatype.createTypedArray(subdividedPositions.length / 3, indicesSize);
106
128
  var index = 0;
107
- for (i = 0; i < length-1; i++) {
129
+ for (i = 0; i < length - 1; i++) {
108
130
  indices[index++] = i;
109
- indices[index++] = i+1;
131
+ indices[index++] = i + 1;
110
132
  indices[index++] = i + length;
111
- indices[index++] = i+1 + length;
133
+ indices[index++] = i + 1 + length;
112
134
  }
113
- indices[index++] = length-1;
135
+ indices[index++] = length - 1;
114
136
  indices[index++] = 0;
115
- indices[index++] = length + length-1;
137
+ indices[index++] = length + length - 1;
116
138
  indices[index++] = length;
117
139
 
118
140
  for (i = 0; i < corners.length; i++) {
@@ -125,15 +147,15 @@ define(['Core/defaultValue', 'Core/defined', 'Core/BoundingSphere', 'Core/Cartes
125
147
 
126
148
  return new GeometryInstance({
127
149
  geometry : new Geometry({
128
- attributes: new GeometryAttributes({
129
- position: new GeometryAttribute({
150
+ attributes : new GeometryAttributes({
151
+ position : new GeometryAttribute({
130
152
  componentDatatype : ComponentDatatype.DOUBLE,
131
153
  componentsPerAttribute : 3,
132
154
  values : new Float64Array(subdividedPositions)
133
155
  })
134
156
  }),
135
- indices: indices,
136
- primitiveType: PrimitiveType.LINES
157
+ indices : indices,
158
+ primitiveType : PrimitiveType.LINES
137
159
  })
138
160
  });
139
161
  }
@@ -150,6 +172,7 @@ define(['Core/defaultValue', 'Core/defined', 'Core/BoundingSphere', 'Core/Cartes
150
172
  * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed.
151
173
  * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid to be used as a reference.
152
174
  * @param {Number} [options.granularity=CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer.
175
+ * @param {Boolean} [options.perPositionHeight=false] Use the height of options.positions for each position instead of using options.height to determine the height.
153
176
  *
154
177
  * @exception {DeveloperError} polygonHierarchy is required.
155
178
  *
@@ -228,9 +251,10 @@ define(['Core/defaultValue', 'Core/defined', 'Core/BoundingSphere', 'Core/Cartes
228
251
  var ellipsoid = defaultValue(options.ellipsoid, Ellipsoid.WGS84);
229
252
  var granularity = defaultValue(options.granularity, CesiumMath.RADIANS_PER_DEGREE);
230
253
  var height = defaultValue(options.height, 0.0);
254
+ var perPositionHeight = defaultValue(options.perPositionHeight, false);
231
255
 
232
- var extrudedHeight = defaultValue(options.extrudedHeight, undefined);
233
- var extrude = (defined(extrudedHeight) && !CesiumMath.equalsEpsilon(height, extrudedHeight, CesiumMath.EPSILON6));
256
+ var extrudedHeight = options.extrudedHeight;
257
+ var extrude = (defined(extrudedHeight) && (!CesiumMath.equalsEpsilon(height, extrudedHeight, CesiumMath.EPSILON6) || perPositionHeight));
234
258
  if (extrude) {
235
259
  var h = extrudedHeight;
236
260
  extrudedHeight = Math.min(h, height);
@@ -248,6 +272,7 @@ define(['Core/defaultValue', 'Core/defined', 'Core/BoundingSphere', 'Core/Cartes
248
272
  this._extrudedHeight = extrudedHeight;
249
273
  this._extrude = extrude;
250
274
  this._polygonHierarchy = polygonHierarchy;
275
+ this._perPositionHeight = perPositionHeight;
251
276
  this._workerName = 'createPolygonOutlineGeometry';
252
277
  };
253
278
 
@@ -261,6 +286,7 @@ define(['Core/defaultValue', 'Core/defined', 'Core/BoundingSphere', 'Core/Cartes
261
286
  * @param {Number} [options.extrudedHeight] The height of the polygon extrusion.
262
287
  * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid to be used as a reference.
263
288
  * @param {Number} [options.granularity=CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer.
289
+ * @param {Boolean} [options.perPositionHeight=false] Use the height of options.positions for each position instead of using options.height to determine the height.
264
290
  *
265
291
  * @exception {DeveloperError} options.positions is required.
266
292
  *
@@ -293,7 +319,8 @@ define(['Core/defaultValue', 'Core/defined', 'Core/BoundingSphere', 'Core/Cartes
293
319
  height : options.height,
294
320
  extrudedHeight : options.extrudedHeight,
295
321
  ellipsoid : options.ellipsoid,
296
- granularity : options.granularity
322
+ granularity : options.granularity,
323
+ perPositionHeight : options.perPositionHeight
297
324
  };
298
325
  return new PolygonOutlineGeometry(newOptions);
299
326
  };
@@ -315,6 +342,7 @@ define(['Core/defaultValue', 'Core/defined', 'Core/BoundingSphere', 'Core/Cartes
315
342
  var extrudedHeight = polygonGeometry._extrudedHeight;
316
343
  var extrude = polygonGeometry._extrude;
317
344
  var polygonHierarchy = polygonGeometry._polygonHierarchy;
345
+ var perPositionHeight = polygonGeometry._perPositionHeight;
318
346
 
319
347
  var boundingSphere;
320
348
  var outerPositions;
@@ -344,7 +372,7 @@ define(['Core/defaultValue', 'Core/defined', 'Core/BoundingSphere', 'Core/Cartes
344
372
  numGrandchildren = hole.holes.length;
345
373
  }
346
374
 
347
- for (var j = 0; j < numGrandchildren; j++) {
375
+ for ( var j = 0; j < numGrandchildren; j++) {
348
376
  queue.enqueue(hole.holes[j]);
349
377
  }
350
378
  }
@@ -352,7 +380,7 @@ define(['Core/defaultValue', 'Core/defined', 'Core/BoundingSphere', 'Core/Cartes
352
380
  polygons.push(outerRing);
353
381
  }
354
382
 
355
- outerPositions = polygons[0];
383
+ outerPositions = polygons[0];
356
384
  // The bounding volume is just around the boundary points, so there could be cases for
357
385
  // contrived polygons on contrived ellipsoids - very oblate ones - where the bounding
358
386
  // volume doesn't cover the polygon.
@@ -363,17 +391,17 @@ define(['Core/defaultValue', 'Core/defined', 'Core/BoundingSphere', 'Core/Cartes
363
391
 
364
392
  if (extrude) {
365
393
  for (i = 0; i < polygons.length; i++) {
366
- geometry = createGeometryFromPositionsExtruded(ellipsoid, polygons[i], granularity);
394
+ geometry = createGeometryFromPositionsExtruded(ellipsoid, polygons[i], granularity, perPositionHeight);
367
395
  if (defined(geometry)) {
368
- geometry.geometry = PolygonGeometryLibrary.scaleToGeodeticHeightExtruded(geometry.geometry, height, extrudedHeight, ellipsoid);
396
+ geometry.geometry = PolygonGeometryLibrary.scaleToGeodeticHeightExtruded(geometry.geometry, height, extrudedHeight, ellipsoid, perPositionHeight);
369
397
  geometries.push(geometry);
370
398
  }
371
399
  }
372
400
  } else {
373
401
  for (i = 0; i < polygons.length; i++) {
374
- geometry = createGeometryFromPositions(ellipsoid, polygons[i], granularity);
402
+ geometry = createGeometryFromPositions(ellipsoid, polygons[i], granularity, perPositionHeight);
375
403
  if (defined(geometry)) {
376
- geometry.geometry = PolygonPipeline.scaleToGeodeticHeight(geometry.geometry, height, ellipsoid);
404
+ geometry.geometry = PolygonPipeline.scaleToGeodeticHeight(geometry.geometry, height, ellipsoid, !perPositionHeight);
377
405
  geometries.push(geometry);
378
406
  }
379
407
  }
@@ -882,11 +882,11 @@ define(['Core/DeveloperError', 'Core/Math', 'Core/Cartesian2', 'Core/Cartesian3'
882
882
  },
883
883
 
884
884
  /**
885
- * DOC_TBA
885
+ * Subdivides positions and raises points to the surface of the ellipsoid.
886
886
  *
887
- * @param {DOC_TBA} positions DOC_TBA
888
- * @param {DOC_TBA} indices DOC_TBA
889
- * @param {Number} [granularity] DOC_TBA
887
+ * @param {Array} positions An array of {@link Cartesian3} positions of the polygon.
888
+ * @param {Array} indices An array of indices that determines the triangles in the polygon.
889
+ * @param {Number} [granularity=CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer.
890
890
  *
891
891
  * @exception {DeveloperError} positions is required.
892
892
  * @exception {DeveloperError} indices is required.
@@ -1053,17 +1053,23 @@ define(['Core/DeveloperError', 'Core/Math', 'Core/Cartesian2', 'Core/Cartesian3'
1053
1053
  },
1054
1054
 
1055
1055
  /**
1056
- * DOC_TBA
1056
+ * Scales each position of a geometry's position attribute to a height, in place.
1057
+ *
1058
+ * @param {Geometry} geometry The geometry whose positions are to be scaled.
1059
+ * @param {Number} [height=0.0] The desired height to add to the positions of the geometry.
1060
+ * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid on which the positions lie.
1061
+ * @param {Boolean} [scaleToSurface=true] <code>true</code> if the positions need to be scaled to the surface before the height is added.
1057
1062
  *
1058
- * @exception {DeveloperError} ellipsoid is required.
1063
+ * @returns {Geometry} The same geometry whose positions where scaled.
1059
1064
  */
1060
- scaleToGeodeticHeight : function(geometry, height, ellipsoid) {
1065
+ scaleToGeodeticHeight : function(geometry, height, ellipsoid, scaleToSurface) {
1061
1066
  ellipsoid = defaultValue(ellipsoid, Ellipsoid.WGS84);
1062
1067
 
1063
1068
  var n = scaleToGeodeticHeightN;
1064
1069
  var p = scaleToGeodeticHeightP;
1065
1070
 
1066
1071
  height = defaultValue(height, 0.0);
1072
+ scaleToSurface = defaultValue(scaleToSurface, true);
1067
1073
 
1068
1074
  if (defined(geometry) && defined(geometry.attributes) && defined(geometry.attributes.position)) {
1069
1075
  var positions = geometry.attributes.position.values;
@@ -1072,8 +1078,12 @@ define(['Core/DeveloperError', 'Core/Math', 'Core/Cartesian2', 'Core/Cartesian3'
1072
1078
  for ( var i = 0; i < length; i += 3) {
1073
1079
  Cartesian3.fromArray(positions, i, p);
1074
1080
 
1075
- ellipsoid.scaleToGeodeticSurface(p, p);
1076
- ellipsoid.geodeticSurfaceNormal(p, n);
1081
+ if (scaleToSurface) {
1082
+ p = ellipsoid.scaleToGeodeticSurface(p, p);
1083
+ }
1084
+
1085
+ n = ellipsoid.geodeticSurfaceNormal(p, n);
1086
+
1077
1087
  Cartesian3.multiplyByScalar(n, height, n);
1078
1088
  Cartesian3.add(p, n, p);
1079
1089
 
@@ -1,5 +1,5 @@
1
1
  /*global define*/
2
- define(['Core/Enumeration'], function(Enumeration) {
2
+ define(function() {
3
3
  "use strict";
4
4
 
5
5
  /**
@@ -9,61 +9,58 @@ define(['Core/Enumeration'], function(Enumeration) {
9
9
  */
10
10
  var PrimitiveType = {
11
11
  /**
12
- * DOC_TBA
12
+ * 0x0000. Points primitive where each vertex (or index) is a separate point.
13
13
  *
14
- * @type {Enumeration}
14
+ * @type {Number}
15
15
  * @constant
16
- * @default 0x0000
17
16
  */
18
- POINTS : new Enumeration(0x0000, 'POINTS'),
17
+ POINTS : 0x0000,
19
18
  /**
20
- * DOC_TBA
19
+ * 0x0001. Lines primitive where each two vertices (or indices) is a line segment. Line segments are not necessarily connected.
21
20
  *
22
- * @type {Enumeration}
21
+ * @type {Number}
23
22
  * @constant
24
- * @default 0x0001
25
23
  */
26
- LINES : new Enumeration(0x0001, 'LINES'),
24
+ LINES : 0x0001,
27
25
  /**
28
- * DOC_TBA
26
+ * 0x0002. Line loop primitive where each vertex (or index) after the first connects a line to
27
+ * the previous vertex, and the last vertex implicitly connects to the first.
29
28
  *
30
- * @type {Enumeration}
29
+ * @type {Number}
31
30
  * @constant
32
- * @default 0x0002
33
31
  */
34
- LINE_LOOP : new Enumeration(0x0002, 'LINE_LOOP'),
32
+ LINE_LOOP : 0x0002,
35
33
  /**
36
- * DOC_TBA
34
+ * 0x0003. Line strip primitive where each vertex (or index) after the first connects a line to the previous vertex.
37
35
  *
38
- * @type {Enumeration}
36
+ * @type {Number}
39
37
  * @constant
40
- * @default 0x0003
41
38
  */
42
- LINE_STRIP : new Enumeration(0x0003, 'LINE_STRIP'),
39
+ LINE_STRIP : 0x0003,
43
40
  /**
44
- * DOC_TBA
41
+ * 0x0004. Triangles primitive where each three vertices (or indices) is a triangle. Triangles do not necessarily share edges.
45
42
  *
46
- * @type {Enumeration}
43
+ * @type {Number}
47
44
  * @constant
48
- * @default 0x0004
49
45
  */
50
- TRIANGLES : new Enumeration(0x0004, 'TRIANGLES'),
46
+ TRIANGLES : 0x0004,
51
47
  /**
52
- * DOC_TBA
48
+ * 0x0005. Triangle strip primitive where each vertex (or index) after the first two connect to
49
+ * the previous two vertices forming a triangle. For example, this can be used to model a wall.
53
50
  *
54
- * @type {Enumeration}
51
+ * @type {Number}
55
52
  * @constant
56
- * @default 0x0004
57
53
  */
58
- TRIANGLE_STRIP : new Enumeration(0x0005, 'TRIANGLE_STRIP'),
54
+ TRIANGLE_STRIP : 0x0005,
59
55
  /**
60
- * DOC_TBA
56
+ * 0x0006. Triangle fan primitive where each vertex (or index) after the first two connect to
57
+ * the previous vertex and the first vertex forming a triangle. For example, this can be used
58
+ * to model a cone or circle.
61
59
  *
62
- * @type {Enumeration}
60
+ * @type {Number}
63
61
  * @constant
64
- * @default 0x0006
65
62
  */
66
- TRIANGLE_FAN : new Enumeration(0x0006, 'TRIANGLE_FAN'),
63
+ TRIANGLE_FAN : 0x0006,
67
64
 
68
65
  /**
69
66
  * DOC_TBA
@@ -73,13 +70,13 @@ define(['Core/Enumeration'], function(Enumeration) {
73
70
  * @returns {Boolean}
74
71
  */
75
72
  validate : function(primitiveType) {
76
- return ((primitiveType.value === PrimitiveType.POINTS.value) ||
77
- (primitiveType.value === PrimitiveType.LINES.value) ||
78
- (primitiveType.value === PrimitiveType.LINE_LOOP.value) ||
79
- (primitiveType.value === PrimitiveType.LINE_STRIP.value) ||
80
- (primitiveType.value === PrimitiveType.TRIANGLES.value) ||
81
- (primitiveType.value === PrimitiveType.TRIANGLE_STRIP.value) ||
82
- (primitiveType.value === PrimitiveType.TRIANGLE_FAN.value));
73
+ return ((primitiveType === PrimitiveType.POINTS) ||
74
+ (primitiveType === PrimitiveType.LINES) ||
75
+ (primitiveType === PrimitiveType.LINE_LOOP) ||
76
+ (primitiveType === PrimitiveType.LINE_STRIP) ||
77
+ (primitiveType === PrimitiveType.TRIANGLES) ||
78
+ (primitiveType === PrimitiveType.TRIANGLE_STRIP) ||
79
+ (primitiveType === PrimitiveType.TRIANGLE_FAN));
83
80
  }
84
81
  };
85
82