|  | @@ -1,209 +0,0 @@
 | 
											
												
													
														|  | -<template>
 |  | 
 | 
											
												
													
														|  | -  <div>
 |  | 
 | 
											
												
													
														|  | -    <div>
 |  | 
 | 
											
												
													
														|  | -    <button @click="increment">步数: {{ count }}</button>
 |  | 
 | 
											
												
													
														|  | -    <button @click="inOpacity">透明度: {{ opacity }}</button>
 |  | 
 | 
											
												
													
														|  | -    </div>
 |  | 
 | 
											
												
													
														|  | -    <div id="vtkContainer" />
 |  | 
 | 
											
												
													
														|  | -   
 |  | 
 | 
											
												
													
														|  | -  </div>
 |  | 
 | 
											
												
													
														|  | -</template >
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -<script setup>
 |  | 
 | 
											
												
													
														|  | -import * as d3 from 'd3-scale';
 |  | 
 | 
											
												
													
														|  | -import { formatDefaultLocale } from 'd3-format';
 |  | 
 | 
											
												
													
														|  | -import { ref,onMounted } from 'vue';
 |  | 
 | 
											
												
													
														|  | -import '@kitware/vtk.js/Rendering/Profiles/Geometry';
 |  | 
 | 
											
												
													
														|  | -import vtkRenderWindowWithControlBar from '@kitware/vtk.js/Rendering/Misc/RenderWindowWithControlBar';
 |  | 
 | 
											
												
													
														|  | -import vtkFullScreenRenderWindow from '@kitware/vtk.js/Rendering/Misc/FullScreenRenderWindow';
 |  | 
 | 
											
												
													
														|  | -import vtkActor           from '@kitware/vtk.js/Rendering/Core/Actor';
 |  | 
 | 
											
												
													
														|  | -import vtkMapper          from '@kitware/vtk.js/Rendering/Core/Mapper';
 |  | 
 | 
											
												
													
														|  | -import vtkUnstructuredDataReader from '../reader/UnstructuredDataReader.js';
 |  | 
 | 
											
												
													
														|  | -import vtkScalarBarActor from '@kitware/vtk.js/Rendering/Core/ScalarBarActor';
 |  | 
 | 
											
												
													
														|  | -import vtkLookupTable from '@kitware/vtk.js/Common/Core/LookupTable';
 |  | 
 | 
											
												
													
														|  | -import vtkDataArray from '@kitware/vtk.js/Common/Core/DataArray.js';
 |  | 
 | 
											
												
													
														|  | -import vtkColorTransferFunction from '@kitware/vtk.js/Rendering/Core/ColorTransferFunction';
 |  | 
 | 
											
												
													
														|  | -// 响应式状态
 |  | 
 | 
											
												
													
														|  | -const count = ref(0);//步数
 |  | 
 | 
											
												
													
														|  | -const opacity = ref(0.1);
 |  | 
 | 
											
												
													
														|  | -const min=ref(0.0);
 |  | 
 | 
											
												
													
														|  | -const max=ref(1.0);
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -const scalarFAll = ref([]);//火灾标量
 |  | 
 | 
											
												
													
														|  | -const scalarWAll = ref([]);//水灾标量
 |  | 
 | 
											
												
													
														|  | -const foW =ref(false);//火灾 true  水灾 false
 |  | 
 | 
											
												
													
														|  | -/*
 |  | 
 | 
											
												
													
														|  | -  Temperature:温度
 |  | 
 | 
											
												
													
														|  | -  Pressure:压强
 |  | 
 | 
											
												
													
														|  | -  SO2:SO2
 |  | 
 | 
											
												
													
														|  | -  CO2:CO2
 |  | 
 | 
											
												
													
														|  | -  Height:水位高度
 |  | 
 | 
											
												
													
														|  | -*/
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -const scalarName = ref("CO2");
 |  | 
 | 
											
												
													
														|  | -const filedir =ref("data/Fire/");
 |  | 
 | 
											
												
													
														|  | -//const scalarName = ref("Height");
 |  | 
 | 
											
												
													
														|  | -//const filedir =ref("data/Water/"); 
 |  | 
 | 
											
												
													
														|  | -const renderWindowWith = vtkRenderWindowWithControlBar.newInstance({
 |  | 
 | 
											
												
													
														|  | -    controlSize: 2,
 |  | 
 | 
											
												
													
														|  | -  });
 |  | 
 | 
											
												
													
														|  | -// const renderWindowWith =vtkFullScreenRenderWindow.newInstance();
 |  | 
 | 
											
												
													
														|  | -const renderer = renderWindowWith.getRenderer();
 |  | 
 | 
											
												
													
														|  | -// renderer.setBackground([0.1,0.2,0]); 
 |  | 
 | 
											
												
													
														|  | -const renderWindow = renderWindowWith.getRenderWindow();
 |  | 
 | 
											
												
													
														|  | -const resetCamera = renderer.resetCamera;
 |  | 
 | 
											
												
													
														|  | -const render = renderWindow.render;
 |  | 
 | 
											
												
													
														|  | -const mapper = vtkMapper.newInstance();
 |  | 
 | 
											
												
													
														|  | -//Sets scalarMode to USE_POINT_DATA
 |  | 
 | 
											
												
													
														|  | -// mapper.setScalarModeToUsePointData();
 |  | 
 | 
											
												
													
														|  | -const actor = vtkActor.newInstance();
 |  | 
 | 
											
												
													
														|  | -const reader = vtkUnstructuredDataReader.newInstance();
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -// 设置透明度
 |  | 
 | 
											
												
													
														|  | -function inOpacity() {
 |  | 
 | 
											
												
													
														|  | -  opacity.value=opacity.value+0.1;
 |  | 
 | 
											
												
													
														|  | -  actor.getProperty().setOpacity(opacity.value);
 |  | 
 | 
											
												
													
														|  | -  renderWindow.render();
 |  | 
 | 
											
												
													
														|  | -}
 |  | 
 | 
											
												
													
														|  | -//计算最大最小值
 |  | 
 | 
											
												
													
														|  | -function getMinMax(scalars){
 |  | 
 | 
											
												
													
														|  | -  // console.log("getMinMax:",scalars);
 |  | 
 | 
											
												
													
														|  | -       min.value=scalars[0];
 |  | 
 | 
											
												
													
														|  | -       max.value=scalars[0];
 |  | 
 | 
											
												
													
														|  | -  for (let index = 0; index <= scalars.length; index++) {
 |  | 
 | 
											
												
													
														|  | -    let scalar=scalars[index];
 |  | 
 | 
											
												
													
														|  | -     if(min.value>scalar){
 |  | 
 | 
											
												
													
														|  | -        min.value=scalar;
 |  | 
 | 
											
												
													
														|  | -      }
 |  | 
 | 
											
												
													
														|  | -      if(max.value<scalar){
 |  | 
 | 
											
												
													
														|  | -        max.value=scalar;
 |  | 
 | 
											
												
													
														|  | -      }
 |  | 
 | 
											
												
													
														|  | -  }
 |  | 
 | 
											
												
													
														|  | -  // console.log("max,min:",max.value,min.value);
 |  | 
 | 
											
												
													
														|  | -}
 |  | 
 | 
											
												
													
														|  | -// 用来修改状态、触发更新的函数
 |  | 
 | 
											
												
													
														|  | -function increment() {
 |  | 
 | 
											
												
													
														|  | -  count.value++;
 |  | 
 | 
											
												
													
														|  | -  var scalars;
 |  | 
 | 
											
												
													
														|  | -  if(foW.value){
 |  | 
 | 
											
												
													
														|  | -       scalars=scalarFAll.value[count.value];
 |  | 
 | 
											
												
													
														|  | -  }else{
 |  | 
 | 
											
												
													
														|  | -       scalars=scalarWAll.value[count.value];
 |  | 
 | 
											
												
													
														|  | -  }
 |  | 
 | 
											
												
													
														|  | -  const polydata = mapper.getInputData();      
 |  | 
 | 
											
												
													
														|  | -  const scalarArray=scalars.get(scalarName.value);
 |  | 
 | 
											
												
													
														|  | -  // console.log("scalarArray:",scalarArray);
 |  | 
 | 
											
												
													
														|  | -  const dataArray = vtkDataArray.newInstance({
 |  | 
 | 
											
												
													
														|  | -    name:scalarName.value,
 |  | 
 | 
											
												
													
														|  | -    size:polydata.getNumberOfPoints()
 |  | 
 | 
											
												
													
														|  | -  }); 
 |  | 
 | 
											
												
													
														|  | -  dataArray.setData(scalarArray);
 |  | 
 | 
											
												
													
														|  | -  polydata.getPointData().setScalars(dataArray); 
 |  | 
 | 
											
												
													
														|  | - 
 |  | 
 | 
											
												
													
														|  | -  mapper.clearColorArrays();//强制重建颜色
 |  | 
 | 
											
												
													
														|  | -  actor.getProperty().setOpacity(count.value+2);//设置错误的透明度使得页面重新加载  不设置不刷新页面
 |  | 
 | 
											
												
													
														|  | -  renderWindow.render();
 |  | 
 | 
											
												
													
														|  | -}
 |  | 
 | 
											
												
													
														|  | -//加载所有 标量数据
 |  | 
 | 
											
												
													
														|  | -function loadScalarAll(){
 |  | 
 | 
											
												
													
														|  | -  //水灾
 |  | 
 | 
											
												
													
														|  | - for (let index = 0; index <= 60; index++) {
 |  | 
 | 
											
												
													
														|  | -    const reader = vtkUnstructuredDataReader.newInstance();
 |  | 
 | 
											
												
													
														|  | -    reader.setUrl("data/Water/"+'POST'+index+'.vtk').then(() => {
 |  | 
 | 
											
												
													
														|  | -    const scalars = reader.getOutputData(1);
 |  | 
 | 
											
												
													
														|  | -    scalarWAll.value[index]=scalars;
 |  | 
 | 
											
												
													
														|  | -    });
 |  | 
 | 
											
												
													
														|  | -  }
 |  | 
 | 
											
												
													
														|  | -  //火灾
 |  | 
 | 
											
												
													
														|  | -  for (let index = 0; index <= 60; index++) {
 |  | 
 | 
											
												
													
														|  | -    const reader = vtkUnstructuredDataReader.newInstance();
 |  | 
 | 
											
												
													
														|  | -    reader.setUrl("data/Fire/"+'POST'+index+'.vtk').then(() => {
 |  | 
 | 
											
												
													
														|  | -    const scalars = reader.getOutputData(1);
 |  | 
 | 
											
												
													
														|  | -    scalarFAll.value[index]=scalars;
 |  | 
 | 
											
												
													
														|  | -    });
 |  | 
 | 
											
												
													
														|  | -  }
 |  | 
 | 
											
												
													
														|  | -}
 |  | 
 | 
											
												
													
														|  | -//设置 
 |  | 
 | 
											
												
													
														|  | -function generateTicks(numberOfTicks) {
 |  | 
 | 
											
												
													
														|  | -  return (helper) => {
 |  | 
 | 
											
												
													
														|  | -    const lastTickBounds = helper.getLastTickBounds();
 |  | 
 | 
											
												
													
														|  | -    // compute tick marks for axes
 |  | 
 | 
											
												
													
														|  | -    const scale = d3
 |  | 
 | 
											
												
													
														|  | -      .scaleLinear()
 |  | 
 | 
											
												
													
														|  | -      .domain([0.0, 1.0])
 |  | 
 | 
											
												
													
														|  | -      .range([lastTickBounds[0], lastTickBounds[1]]);
 |  | 
 | 
											
												
													
														|  | -    const samples = scale.ticks(numberOfTicks);
 |  | 
 | 
											
												
													
														|  | -    const ticks = samples.map((tick) => scale(tick));
 |  | 
 | 
											
												
													
														|  | -    // Replace minus "\u2212" with hyphen-minus "\u002D" so that parseFloat() works
 |  | 
 | 
											
												
													
														|  | -    formatDefaultLocale({ minus: '\u002D' });
 |  | 
 | 
											
												
													
														|  | -    const format = scale.tickFormat(
 |  | 
 | 
											
												
													
														|  | -      ticks[0],
 |  | 
 | 
											
												
													
														|  | -      ticks[ticks.length - 1],
 |  | 
 | 
											
												
													
														|  | -      numberOfTicks
 |  | 
 | 
											
												
													
														|  | -    );
 |  | 
 | 
											
												
													
														|  | -    const tickStrings = ticks
 |  | 
 | 
											
												
													
														|  | -      .map(format)
 |  | 
 | 
											
												
													
														|  | -      .map((tick) => Number(parseFloat(tick).toPrecision(12)).toPrecision()); // d3 sometimes adds unwanted whitespace
 |  | 
 | 
											
												
													
														|  | -    helper.setTicks(ticks);
 |  | 
 | 
											
												
													
														|  | -    helper.setTickStrings(tickStrings);
 |  | 
 | 
											
												
													
														|  | -  };     
 |  | 
 | 
											
												
													
														|  | -}
 |  | 
 | 
											
												
													
														|  | -//安装时
 |  | 
 | 
											
												
													
														|  | -onMounted(() => {
 |  | 
 | 
											
												
													
														|  | -  //div 绑定
 |  | 
 | 
											
												
													
														|  | -  const rootContainer =document.getElementById("vtkContainer");
 |  | 
 | 
											
												
													
														|  | -  rootContainer.style.position = 'relative';
 |  | 
 | 
											
												
													
														|  | -  rootContainer.style.width = '1000px';
 |  | 
 | 
											
												
													
														|  | -  rootContainer.style.height = '500px';
 |  | 
 | 
											
												
													
														|  | -  console.log("rootContainer:",rootContainer);    
 |  | 
 | 
											
												
													
														|  | - 
 |  | 
 | 
											
												
													
														|  | -  renderWindowWith.setContainer(rootContainer);
 |  | 
 | 
											
												
													
														|  | -  // fullScreenRenderer.setBackground([0,0,0]);
 |  | 
 | 
											
												
													
														|  | -  // const fullScreenRenderer = vtkFullScreenRenderWindow.newInstance();
 |  | 
 | 
											
												
													
														|  | -  reader.setUrl(filedir.value+'POST0.vtk').then(() => {
 |  | 
 | 
											
												
													
														|  | -    const polydata = reader.getOutputData(0);        
 |  | 
 | 
											
												
													
														|  | -    const scalars = reader.getOutputData(1);    
 |  | 
 | 
											
												
													
														|  | -    const scalarArray=scalars.get(scalarName.value);
 |  | 
 | 
											
												
													
														|  | -    // console.log("scalarArray:",scalarArray);
 |  | 
 | 
											
												
													
														|  | -    const dataArray = vtkDataArray.newInstance({
 |  | 
 | 
											
												
													
														|  | -      name:scalarName.value,
 |  | 
 | 
											
												
													
														|  | -      size:polydata.getNumberOfPoints()
 |  | 
 | 
											
												
													
														|  | -    });
 |  | 
 | 
											
												
													
														|  | -    dataArray.setData(scalarArray);
 |  | 
 | 
											
												
													
														|  | -    polydata.getPointData().setScalars(dataArray); 
 |  | 
 | 
											
												
													
														|  | -    actor.setMapper(mapper);
 |  | 
 | 
											
												
													
														|  | -    mapper.setInputData(polydata);
 |  | 
 | 
											
												
													
														|  | -    getMinMax(scalarArray);
 |  | 
 | 
											
												
													
														|  | -    mapper.setScalarRange(min.value,max.value);//设置范围
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -    renderer.addActor(actor);
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -    let lut = mapper.getLookupTable();
 |  | 
 | 
											
												
													
														|  | -    const scalarBarActor = vtkScalarBarActor.newInstance();
 |  | 
 | 
											
												
													
														|  | -    renderer.addActor(scalarBarActor);
 |  | 
 | 
											
												
													
														|  | -    scalarBarActor.setScalarsToColors(lut);
 |  | 
 | 
											
												
													
														|  | -    // console.log("lut:",lut.getRange());    
 |  | 
 | 
											
												
													
														|  | -    // Change the number of ticks (TODO: add numberOfTicks to ScalarBarActor)
 |  | 
 | 
											
												
													
														|  | -    scalarBarActor.setGenerateTicks(generateTicks(5));
 |  | 
 | 
											
												
													
														|  | -    scalarBarActor.setAxisLabel(scalarName.value);
 |  | 
 | 
											
												
													
														|  | -    scalarBarActor.setDrawAboveRangeSwatch(true);
 |  | 
 | 
											
												
													
														|  | -    
 |  | 
 | 
											
												
													
														|  | -    //修改设条颜色
 |  | 
 | 
											
												
													
														|  | -    const ctf = vtkColorTransferFunction.newInstance();
 |  | 
 | 
											
												
													
														|  | -    ctf.addRGBPoint(0.0, 0.0, 0.0, 1.0);
 |  | 
 | 
											
												
													
														|  | -    ctf.addRGBPoint(1.0, 0.0, 1.0, 0.5);
 |  | 
 | 
											
												
													
														|  | -    ctf.addRGBPoint(2.0, 0.0, 1.0, 0.0);
 |  | 
 | 
											
												
													
														|  | -    ctf.addRGBPoint(3.0, 1.0, 0.5, 0.0);
 |  | 
 | 
											
												
													
														|  | -    ctf.addRGBPoint(4.0, 1.0, 0.0, 0.0);
 |  | 
 | 
											
												
													
														|  | -    mapper.setLookupTable(ctf);
 |  | 
 | 
											
												
													
														|  | -    // lut = mapper.getLookupTable();
 |  | 
 | 
											
												
													
														|  | -    // scalarBarActor.setScalarsToColors(lut);
 |  | 
 | 
											
												
													
														|  | -    resetCamera();
 |  | 
 | 
											
												
													
														|  | -   renderWindow.render();
 |  | 
 | 
											
												
													
														|  | -  });
 |  | 
 | 
											
												
													
														|  | -  loadScalarAll();
 |  | 
 | 
											
												
													
														|  | -});
 |  | 
 | 
											
												
													
														|  | -</script>
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -<style scoped>
 |  | 
 | 
											
												
													
														|  | -</style>
 |  | 
 |