Cesium 3DTilesInspector监视器

var viewer = new Cesium.Viewer("cesiumContainer", {
  shadows: true,
});
viewer.extend(Cesium.viewerCesium3DTilesInspectorMixin);
var inspectorViewModel = viewer.cesium3DTilesInspector.viewModel;

var scene = viewer.scene;
var tileset;

var viewModel = {
  tilesets: [
    {
      name: "Tileset",
      resource:
        "../SampleData/Cesium3DTiles/Tilesets/Tileset/tileset.json",
    },
    {
      name: "Translucent",
      resource:
        "../SampleData/Cesium3DTiles/Batched/BatchedTranslucent/tileset.json",
    },
    {
      name: "Translucent/Opaque",
      resource:
        "../SampleData/Cesium3DTiles/Batched/BatchedTranslucentOpaqueMix/tileset.json",
    },
    {
      name: "Multi-color",
      resource:
        "../SampleData/Cesium3DTiles/Batched/BatchedColors/tileset.json",
    },
    {
      name: "Request Volume",
      resource:
        "../SampleData/Cesium3DTiles/Tilesets/TilesetWithViewerRequestVolume/tileset.json",
    },
    {
      name: "Batched",
      resource:
        "../SampleData/Cesium3DTiles/Batched/BatchedWithBatchTable/tileset.json",
    },
    {
      name: "Instanced",
      resource:
        "../SampleData/Cesium3DTiles/Instanced/InstancedWithBatchTable/tileset.json",
    },
    {
      name: "Instanced/Orientation",
      resource:
        "../SampleData/Cesium3DTiles/Instanced/InstancedOrientation/tileset.json",
    },
    {
      name: "Composite",
      resource:
        "../SampleData/Cesium3DTiles/Composite/Composite/tileset.json",
    },
    {
      name: "PointCloud",
      resource:
        "../SampleData/Cesium3DTiles/PointCloud/PointCloudRGB/tileset.json",
    },
    {
      name: "PointCloudConstantColor",
      resource:
        "../SampleData/Cesium3DTiles/PointCloud/PointCloudConstantColor/tileset.json",
    },
    {
      name: "PointCloudNormals",
      resource:
        "../SampleData/Cesium3DTiles/PointCloud/PointCloudNormals/tileset.json",
    },
    {
      name: "PointCloudBatched",
      resource:
        "../SampleData/Cesium3DTiles/PointCloud/PointCloudBatched/tileset.json",
    },
    {
      name: "PointCloudDraco",
      resource:
        "../SampleData/Cesium3DTiles/PointCloud/PointCloudDraco/tileset.json",
    },
  ],
  selectedTileset: undefined,
  shadows: true,
};

Cesium.knockout.track(viewModel);//把对象关联到Cesium这里用的绑定可以参考观察者模式

var toolbar = document.getElementById("toolbar");
Cesium.knockout.applyBindings(viewModel, toolbar);//绑定MV

Cesium.knockout
  .getObservable(viewModel, "shadows")
  .subscribe(function (enabled) {
    viewer.shadows = enabled;
  });

Cesium.knockout
  .getObservable(viewModel, "selectedTileset")
  .subscribe(function (options) {
    if (Cesium.defined(tileset)) {
      scene.primitives.remove(tileset);
    }
    if (!Cesium.defined(options)) {
      inspectorViewModel.tileset = undefined;
      return;
    }

    tileset = viewer.scene.primitives.add(
      new Cesium.Cesium3DTileset({
        url: options.resource,
      })
    );

    tileset.readyPromise
      .then(function () {
        inspectorViewModel.tileset = tileset;
        viewer.zoomTo(
          tileset,
          new Cesium.HeadingPitchRange(
            0,
            -2.0,
            Math.max(100.0 - tileset.boundingSphere.radius, 0.0)
          )
        );

        var properties = tileset.properties;
        if (
          Cesium.defined(properties) &&
          Cesium.defined(properties.Height)
        ) {
          tileset.style = new Cesium.Cesium3DTileStyle({
            color: {
              conditions: [
                ["${Height} >= 83", "color('purple', 0.5)"],
                ["${Height} >= 80", "color('red')"],
                ["${Height} >= 70", "color('orange')"],
                ["${Height} >= 12", "color('yellow')"],
                ["${Height} >= 7", "color('lime')"],
                ["${Height} >= 1", "color('cyan')"],
                ["true", "color('blue')"],
              ],
            },
          });
        }
      })
      .otherwise(function (error) {
        throw error;
      });
  });

viewModel.selectedTileset = viewModel.tilesets[0];

var handler = new Cesium.ScreenSpaceEventHandler(viewer.canvas);

handler.setInputAction(function (movement) {
  var feature = inspectorViewModel.feature;
  if (Cesium.defined(feature)) {
    var propertyNames = feature.getPropertyNames();
    var length = propertyNames.length;
    for (var i = 0; i < length; ++i) {
      var propertyName = propertyNames[i];
      console.log(
        propertyName + ": " + feature.getProperty(propertyName)
      );
    }
  }
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);

handler.setInputAction(function (movement) {
  var feature = inspectorViewModel.feature;
  if (Cesium.defined(feature)) {
    feature.show = false;
  }
}, Cesium.ScreenSpaceEventType.MIDDLE_CLICK);

可以看到添加3DTiles监视器的代码比较简单,将Cesium.viewerCesium3DTilesInspectorMixin对象传入拓展函数viewer.extend()即可。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值