123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198 |
- <template>
- <div>
- <div>
- <button @click="increment">Count is: {{ 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 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 scalarAll = ref([]);
- /*
- 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: 11,
- });
- 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++;
- const scalars=scalarAll.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);//设置错误的透明度使得页面重新加载 不设置不刷新页面
- renderWindow.render();
- }
- //加载所有 标量数据
- function loadScalarAll(){
- for (let index = 0; index <= 60; index++) {
- const reader = vtkUnstructuredDataReader.newInstance();
- reader.setUrl(filedir.value+'POST'+index+'.vtk').then(() => {
- const scalars = reader.getOutputData(1);
- scalarAll.value[index]=scalars;
- });
- }
- // console.log("scalarAll.value:",scalarAll.value);
- }
- //设置
- 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+'POST1.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();
- render();
- });
- // renderWindow.render();
- loadScalarAll();
- });
- </script>
- <style scoped>
- </style>
|