SurroundingsVisualisation.ts 3.02 KB
Newer Older
Rushikesh Padsala's avatar
Rushikesh Padsala committed
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
/*
 * Copyright 2019 Esri
 *
 * 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.
 *
 */
import { subclass, property } from "esri/core/accessorSupport/decorators";
import Accessor from "esri/core/Accessor";

// App
import AppState from "../AppState";
import * as buildingSceneLayerUtils from "./buildingSceneLayerUtils";
import * as watchUtils from "esri/core/watchUtils";
import Renderer from "esri/renderers/Renderer";
import SceneLayer from "esri/layers/SceneLayer";

@subclass("support/SurroundingsVisualisation")
class SurroundingsVisualisation extends Accessor {
  //--------------------------------------------------------------------------
  //
  //  Properties
  //
  //--------------------------------------------------------------------------

  @property({
    readOnly: true,
    dependsOn: [
      "appState.pageLocation",
      "appState.BldgLevel"
    ]
  })
  get surroundingsRenderer() {
    return buildingSceneLayerUtils
      .getVisualVarsFromAppState(
        this.appState,
        "surroundings",
        "renderer"
      );
  }

  @property()
  customRenderer: Renderer;

  @property({
    readOnly: true,
    dependsOn: [
      "appState.pageLocation",
      "appState.BldgLevel"
    ]
  })
  get surroundingsOpacity() {
    return buildingSceneLayerUtils
      .getVisualVarsFromAppState(
        this.appState,
        "surroundings",
        "opacity"
      );
  }

  @property()
  layer: SceneLayer;

  @property({ constructOnly: true})
  appState: AppState;

  //--------------------------------------------------------------------------
  //
  //  Life circle
  //
  //--------------------------------------------------------------------------

  constructor(args: {layer: SceneLayer, appState: AppState}) {
    super();

    this.appState = args.appState;
    this.layer = args.layer;

    this.layer.when(() => {
        watchUtils.init(this, "surroundingsRenderer", this._updateBaseRenderer);
        watchUtils.init(this, "customRenderer", this._updateBaseRenderer);

        watchUtils.init(this, "surroundingsOpacity", (surroundingsOpacity) => {
          this.layer.opacity = surroundingsOpacity;
        });
    });
  }

  //--------------------------------------------------------------------------
  //
  //  Private Methods
  //
  //--------------------------------------------------------------------------

  private _updateBaseRenderer() {
    if (this.customRenderer) {
      this.layer.renderer = this.customRenderer;  
    }
    else {
      this.layer.renderer = this.surroundingsRenderer;
    }
  }
}

export = SurroundingsVisualisation;