15832144755
2022-01-06 7b4c8991dca9cf2a809a95e239d144697d3afb56
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
import { Cartesian2 } from "../../Source/Cesium.js";
import { Cartesian3 } from "../../Source/Cesium.js";
import { JulianDate } from "../../Source/Cesium.js";
import { Plane } from "../../Source/Cesium.js";
import { TimeIntervalCollection } from "../../Source/Cesium.js";
import { ConstantPositionProperty } from "../../Source/Cesium.js";
import { ConstantProperty } from "../../Source/Cesium.js";
import { Entity } from "../../Source/Cesium.js";
import { PlaneGeometryUpdater } from "../../Source/Cesium.js";
import { PlaneGraphics } from "../../Source/Cesium.js";
import { PrimitiveCollection } from "../../Source/Cesium.js";
import createDynamicGeometryUpdaterSpecs from "../createDynamicGeometryUpdaterSpecs.js";
import createDynamicProperty from "../createDynamicProperty.js";
import createGeometryUpdaterSpecs from "../createGeometryUpdaterSpecs.js";
import createScene from "../createScene.js";
 
describe(
  "DataSources/PlaneGeometryUpdater",
  function () {
    var scene;
 
    beforeAll(function () {
      scene = createScene();
    });
 
    afterAll(function () {
      scene.destroyForSpecs();
    });
 
    function createBasicPlane() {
      var planeGraphics = new PlaneGraphics();
      planeGraphics.plane = new ConstantProperty(
        new Plane(Cartesian3.UNIT_X, 0.0)
      );
      planeGraphics.dimensions = new ConstantProperty(new Cartesian2(1.0, 2.0));
      var entity = new Entity();
      entity.position = new ConstantPositionProperty(
        Cartesian3.fromDegrees(0, 0, 0)
      );
      entity.plane = planeGraphics;
      return entity;
    }
 
    function createDynamicPlane() {
      var entity = createBasicPlane();
      entity.plane.plane = createDynamicProperty(
        new Plane(Cartesian3.UNIT_X, 0.0)
      );
      entity.plane.dimensions = createDynamicProperty(new Cartesian2(1.0, 2.0));
      return entity;
    }
 
    it("A time-varying plane causes geometry to be dynamic", function () {
      var entity = createBasicPlane();
      var updater = new PlaneGeometryUpdater(entity, scene);
      entity.plane.plane = createDynamicProperty();
      updater._onEntityPropertyChanged(entity, "plane");
 
      expect(updater.isDynamic).toBe(true);
    });
 
    it("A time-varying dimensions causes geometry to be dynamic", function () {
      var entity = createBasicPlane();
      var updater = new PlaneGeometryUpdater(entity, scene);
      entity.plane.dimensions = createDynamicProperty();
      updater._onEntityPropertyChanged(entity, "plane");
 
      expect(updater.isDynamic).toBe(true);
    });
 
    it("dynamic updater sets properties", function () {
      var entity = createDynamicPlane();
 
      var updater = new PlaneGeometryUpdater(entity, scene);
      var dynamicUpdater = updater.createDynamicUpdater(
        new PrimitiveCollection(),
        new PrimitiveCollection()
      );
      dynamicUpdater.update(JulianDate.now());
 
      var options = dynamicUpdater._options;
      expect(options.plane).toEqual(entity.plane.plane.getValue());
      expect(options.dimensions).toEqual(entity.plane.dimensions.getValue());
    });
 
    it("geometryChanged event is raised when expected", function () {
      var entity = createBasicPlane();
      var updater = new PlaneGeometryUpdater(entity, scene);
      var listener = jasmine.createSpy("listener");
      updater.geometryChanged.addEventListener(listener);
 
      entity.plane.dimensions = new ConstantProperty();
      updater._onEntityPropertyChanged(entity, "plane");
      expect(listener.calls.count()).toEqual(1);
 
      entity.availability = new TimeIntervalCollection();
      updater._onEntityPropertyChanged(entity, "availability");
      expect(listener.calls.count()).toEqual(2);
 
      entity.plane.dimensions = undefined;
      updater._onEntityPropertyChanged(entity, "plane");
      expect(listener.calls.count()).toEqual(3);
 
      //Since there's no valid geometry, changing another property should not raise the event.
      entity.plane.height = undefined;
      updater._onEntityPropertyChanged(entity, "plane");
 
      //Modifying an unrelated property should not have any effect.
      entity.viewFrom = new ConstantProperty(Cartesian3.UNIT_X);
      updater._onEntityPropertyChanged(entity, "viewFrom");
      expect(listener.calls.count()).toEqual(3);
    });
 
    function getScene() {
      return scene;
    }
    createGeometryUpdaterSpecs(
      PlaneGeometryUpdater,
      "plane",
      createBasicPlane,
      getScene
    );
 
    createDynamicGeometryUpdaterSpecs(
      PlaneGeometryUpdater,
      "plane",
      createDynamicPlane,
      getScene
    );
  },
  "WebGL"
);