Skip to content

模型裁剪


ts
import { Viewer, TilesetCut } from "joDVF";
import { Pane } from "tweakpane";
import { Cesium3DTileset, HeadingPitchRange } from "joCesium";

const { mapContainer, uiContainer } = createContainer();

const viewer = new Viewer(mapContainer);
const dataBaseURL = "./assets/3dtilesets/dayanta/tileset.json";
let tilesetCut;
Cesium3DTileset.fromUrl(dataBaseURL).then((tile) => {
  const boundingSphere = tile.boundingSphere;
  const radius = boundingSphere.radius;
  viewer.scene.primitives.add(tile);
  viewer.zoomTo(tile, new HeadingPitchRange(-1.2, -0.6, radius * 4.0));
  tilesetCut = new TilesetCut(viewer, {
    layer: tile,
    clampToGround: true
  });
});

addUI(uiContainer);

function createContainer() {
  const container = document.createElement("div");
  container.style.width = "100%";
  container.style.height = "100%";

  const uiContainer = document.createElement("div");
  uiContainer.style.position = "fixed";
  uiContainer.style.top = "5px";
  uiContainer.style.left = "5px";
  document.body.appendChild(container);
  document.body.appendChild(uiContainer);

  return {
    mapContainer: container,
    uiContainer
  };
}

function addUI(uiContainer) {
  const pane = new Pane({
    container: uiContainer,
    title: "参数"
  });

  const startBtn = pane.addButton({
    title: "start",
    label: "模型裁剪" // optional
  });

  startBtn.on("click", () => {
    tilesetCut.start();
  });

  const clearBtn = pane.addButton({
    title: "clear",
    label: "清除"
  });

  clearBtn.on("click", () => {
    tilesetCut.clear();
  });
}