|
@@ -1,31 +1,36 @@
|
|
<template>
|
|
<template>
|
|
<div>
|
|
<div>
|
|
<div>
|
|
<div>
|
|
- <!--button @click="increment">Count is: {{ count }}</button-->
|
|
|
|
-
|
|
|
|
|
|
+ <!--button @click="increment">Count is: {{ count }}</button-->
|
|
</div>
|
|
</div>
|
|
<div id="vtkContainer" />
|
|
<div id="vtkContainer" />
|
|
<div class="tool">
|
|
<div class="tool">
|
|
- <div class="img" v-for="(item,index) in listArray" :key="index" @click="add(item.id)"><el-image :src="item.img" fit="cover" /><span>{{item.name}}</span></div>
|
|
|
|
-
|
|
|
|
- <div class="left_container" >
|
|
|
|
|
|
+ <div
|
|
|
|
+ class="img"
|
|
|
|
+ v-for="(item, index) in listArray"
|
|
|
|
+ :key="index"
|
|
|
|
+ @click="add(item.id)"
|
|
|
|
+ >
|
|
|
|
+ <el-image :src="item.img" fit="cover" /><span>{{ item.name }}</span>
|
|
|
|
+ </div>
|
|
|
|
|
|
-
|
|
|
|
- <div class="leftdialong" v-show="dialogVisible">
|
|
|
|
- <div class="time" > 当前时间:{{count}}</div>
|
|
|
|
- <div class="block">
|
|
|
|
- <el-form-item label="标 量" >
|
|
|
|
- <el-cascader
|
|
|
|
- transfer="true"
|
|
|
|
- clearable
|
|
|
|
- :popper-append-to-body="false"
|
|
|
|
- v-model="arrvalue"
|
|
|
|
- :options="options"
|
|
|
|
- :props="props"
|
|
|
|
- @change="handleChange($event)"></el-cascader>
|
|
|
|
|
|
+ <div class="left_container">
|
|
|
|
+ <div class="leftdialong" v-show="dialogVisible">
|
|
|
|
+ <div class="time">当前时间:{{ count }}</div>
|
|
|
|
+ <div class="block">
|
|
|
|
+ <el-form-item label="标 量">
|
|
|
|
+ <el-cascader
|
|
|
|
+ transfer="true"
|
|
|
|
+ clearable
|
|
|
|
+ :popper-append-to-body="false"
|
|
|
|
+ v-model="arrvalue"
|
|
|
|
+ :options="options"
|
|
|
|
+ :props="props"
|
|
|
|
+ @change="handleChange($event)"
|
|
|
|
+ ></el-cascader>
|
|
</el-form-item>
|
|
</el-form-item>
|
|
- </div>
|
|
|
|
- <!-- <el-form-item
|
|
|
|
|
|
+ </div>
|
|
|
|
+ <!-- <el-form-item
|
|
label="动画开始"
|
|
label="动画开始"
|
|
|
|
|
|
>
|
|
>
|
|
@@ -43,115 +48,118 @@
|
|
autocomplete="off"
|
|
autocomplete="off"
|
|
></el-input>
|
|
></el-input>
|
|
</el-form-item> -->
|
|
</el-form-item> -->
|
|
- <div class="block">
|
|
|
|
- <span class="demonstration">动画开始</span>
|
|
|
|
- <el-slider
|
|
|
|
- :max='endtime'
|
|
|
|
- :min="starttime"
|
|
|
|
- v-model="count"
|
|
|
|
- @change="sliderchange"
|
|
|
|
- ></el-slider>
|
|
|
|
- <span class="demonstration">动画结束</span>
|
|
|
|
- </div>
|
|
|
|
-
|
|
|
|
- <div class="itemlist">
|
|
|
|
- <div class="item" @click="play(500)">播 放</div>
|
|
|
|
|
|
+ <div class="block">
|
|
|
|
+ <span class="demonstration">动画开始</span>
|
|
|
|
+ <el-slider
|
|
|
|
+ :max="endtime"
|
|
|
|
+ :min="starttime"
|
|
|
|
+ v-model="count"
|
|
|
|
+ @change="sliderchange"
|
|
|
|
+ ></el-slider>
|
|
|
|
+ <span class="demonstration">动画结束</span>
|
|
|
|
+ </div>
|
|
|
|
+
|
|
|
|
+ <div class="itemlist">
|
|
|
|
+ <div class="item" @click="play(500)">播 放</div>
|
|
<div class="item" @click="suspend">暂 停</div>
|
|
<div class="item" @click="suspend">暂 停</div>
|
|
- <div class="item" @click="Prev" >上一分钟</div>
|
|
|
|
|
|
+ <div class="item" @click="Prev">上一分钟</div>
|
|
<div class="item" @click="increment">下一分钟</div>
|
|
<div class="item" @click="increment">下一分钟</div>
|
|
- </div>
|
|
|
|
- <!-- <button @click="inOpacity">透明度: {{ opacity }}</button> -->
|
|
|
|
- <div class="dialog-footer">
|
|
|
|
- <span class="btn" @click="dialogVisible = false">关 闭</span>
|
|
|
|
- <!-- <el-button>关 闭</el-button> -->
|
|
|
|
- <!-- <el-button type="primary" @click="dialogVisible = false">确 定</el-button> -->
|
|
|
|
- </div >
|
|
|
|
- </div>
|
|
|
|
- </div>
|
|
|
|
- </div>
|
|
|
|
- <!-- 内容 -->
|
|
|
|
|
|
+ </div>
|
|
|
|
+ <!-- <button @click="inOpacity">透明度: {{ opacity }}</button> -->
|
|
|
|
+ <div class="dialog-footer">
|
|
|
|
+ <span class="btn" @click="dialogVisible = false">关 闭</span>
|
|
|
|
+ <!-- <el-button>关 闭</el-button> -->
|
|
|
|
+ <!-- <el-button type="primary" @click="dialogVisible = false">确 定</el-button> -->
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ <!-- 内容 -->
|
|
</div>
|
|
</div>
|
|
-</template >
|
|
|
|
|
|
+</template>
|
|
|
|
|
|
<script setup>
|
|
<script setup>
|
|
-import p1 from '@/assets/img/u3479.png'
|
|
|
|
-import p2 from '@/assets/img/u10068.png'
|
|
|
|
-import p3 from '@/assets/img/12.png'
|
|
|
|
-import p4 from '@/assets/img/u3883.png'
|
|
|
|
-import p5 from '@/assets/img/u3405.png'
|
|
|
|
-import * as d3 from 'd3-scale';
|
|
|
|
-import { formatDefaultLocale } from 'd3-format';
|
|
|
|
-import { ref,onMounted,reactive } 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 p1 from "@/assets/img/u3479.png";
|
|
|
|
+import p2 from "@/assets/img/u10068.png";
|
|
|
|
+import p3 from "@/assets/img/12.png";
|
|
|
|
+import p4 from "@/assets/img/u3883.png";
|
|
|
|
+import p5 from "@/assets/img/u3405.png";
|
|
|
|
+import * as d3 from "d3-scale";
|
|
|
|
+import { formatDefaultLocale } from "d3-format";
|
|
|
|
+import { ref, onMounted, reactive } 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';
|
|
|
|
-import { I } from '@kitware/vtk.js/macros2.js'
|
|
|
|
-const props = {
|
|
|
|
-}
|
|
|
|
-let time=3*60
|
|
|
|
-let listArray=reactive([
|
|
|
|
-{id:0,img:p1,name:'灾情演化'},
|
|
|
|
-{id:1,img:p2,name:'演化过程'},
|
|
|
|
-{id:2,img:p3,name:'动画'},
|
|
|
|
-{id:3,img:p4,name:'日志'},
|
|
|
|
|
|
+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";
|
|
|
|
+import { I } from "@kitware/vtk.js/macros2.js";
|
|
|
|
+const props = {};
|
|
|
|
+let time = 3 * 60;
|
|
|
|
+let listArray = reactive([
|
|
|
|
+ { id: 0, img: p1, name: "灾情演化" },
|
|
|
|
+ { id: 1, img: p2, name: "演化过程" },
|
|
|
|
+ { id: 2, img: p3, name: "动画" },
|
|
|
|
+ { id: 3, img: p4, name: "日志" },
|
|
]);
|
|
]);
|
|
-let dialogVisible=ref(false);
|
|
|
|
-let num=ref(4)
|
|
|
|
-let starttime=ref(1);
|
|
|
|
-let endtime=ref(60);
|
|
|
|
-let timenum=ref(2)
|
|
|
|
-let isstop=ref(false)
|
|
|
|
-let arrvalue=reactive(['Water', 'Height'])
|
|
|
|
-let options=reactive( [
|
|
|
|
|
|
+let dialogVisible = ref(false);
|
|
|
|
+let num = ref(4);
|
|
|
|
+let starttime = ref(1);
|
|
|
|
+let endtime = ref(60);
|
|
|
|
+let timenum = ref(2);
|
|
|
|
+let isstop = ref(false);
|
|
|
|
+let arrvalue = reactive();
|
|
|
|
+let options = reactive([
|
|
|
|
+ {
|
|
|
|
+ value: "fire",
|
|
|
|
+ label: "火灾",
|
|
|
|
+ children: [
|
|
{
|
|
{
|
|
- value: 'fire',
|
|
|
|
- label: '火灾',
|
|
|
|
- children: [{
|
|
|
|
- value: 'Temperature',
|
|
|
|
- label: '温度'
|
|
|
|
- }, {
|
|
|
|
- value: 'Pressure',
|
|
|
|
- label: '压强'
|
|
|
|
- }, {
|
|
|
|
- value: 'SO2',
|
|
|
|
- label: 'SO2'
|
|
|
|
- }, {
|
|
|
|
- value: 'CO2',
|
|
|
|
- label: 'CO2'
|
|
|
|
- }]
|
|
|
|
- },
|
|
|
|
- {
|
|
|
|
- value: 'Water',
|
|
|
|
- label: '水灾',
|
|
|
|
- children: [{
|
|
|
|
- value: 'Height',
|
|
|
|
- label: '水位高度源'
|
|
|
|
- }, {
|
|
|
|
- value: 'SiO2',
|
|
|
|
- label: 'SiO2'
|
|
|
|
- }]
|
|
|
|
- },
|
|
|
|
- ])
|
|
|
|
-function add(id){
|
|
|
|
- if(id==2){
|
|
|
|
- dialogVisible.value=true
|
|
|
|
- }
|
|
|
|
|
|
+ value: "Temperature",
|
|
|
|
+ label: "温度",
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ value: "Pressure",
|
|
|
|
+ label: "压强",
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ value: "SO2",
|
|
|
|
+ label: "SO2",
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ value: "CO2",
|
|
|
|
+ label: "CO2",
|
|
|
|
+ },
|
|
|
|
+ ],
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ value: "Water",
|
|
|
|
+ label: "水灾",
|
|
|
|
+ children: [
|
|
|
|
+ {
|
|
|
|
+ value: "Height",
|
|
|
|
+ label: "水位高度源",
|
|
|
|
+ },
|
|
|
|
+ ],
|
|
|
|
+ },
|
|
|
|
+]);
|
|
|
|
+function add(id) {
|
|
|
|
+ if (id == 2) {
|
|
|
|
+ dialogVisible.value = true;
|
|
}
|
|
}
|
|
|
|
+}
|
|
// 响应式状态
|
|
// 响应式状态
|
|
const count = ref(0);
|
|
const count = ref(0);
|
|
const opacity = ref(0.1);
|
|
const opacity = ref(0.1);
|
|
-const min=ref(0);
|
|
|
|
-const max=ref(1);
|
|
|
|
-const scalarFAll = ref([]);//火灾标量
|
|
|
|
-const scalarWAll = ref([]);//水灾标量
|
|
|
|
|
|
+const min = ref(0);
|
|
|
|
+const max = ref(1);
|
|
|
|
+const scalarFAll = ref([]); //火灾标量
|
|
|
|
+const scalarWAll = ref([]); //水灾标量
|
|
/*
|
|
/*
|
|
Temperature:温度
|
|
Temperature:温度
|
|
Pressure:压强
|
|
Pressure:压强
|
|
@@ -162,13 +170,13 @@ Height:水位高度
|
|
// const scalarName = ref("CO2");
|
|
// const scalarName = ref("CO2");
|
|
// const filedir =ref("data/Fire/");
|
|
// const filedir =ref("data/Fire/");
|
|
//const scalarName = ref("Height");
|
|
//const scalarName = ref("Height");
|
|
-const filedir =ref("data/Water/");
|
|
|
|
|
|
+const filedir = ref("data/Water/");
|
|
// const renderWindowWith = vtkRenderWindowWithControlBar.newInstance({
|
|
// const renderWindowWith = vtkRenderWindowWithControlBar.newInstance({
|
|
// controlSize: 11,
|
|
// controlSize: 11,
|
|
// });
|
|
// });
|
|
-const renderWindowWith= vtkFullScreenRenderWindow.newInstance();
|
|
|
|
|
|
+const renderWindowWith = vtkFullScreenRenderWindow.newInstance();
|
|
const renderer = renderWindowWith.getRenderer();
|
|
const renderer = renderWindowWith.getRenderer();
|
|
-// renderer.setBackground([0.1,0.2,0]);
|
|
|
|
|
|
+// renderer.setBackground([0.1,0.2,0]);
|
|
const renderWindow = renderWindowWith.getRenderWindow();
|
|
const renderWindow = renderWindowWith.getRenderWindow();
|
|
const resetCamera = renderer.resetCamera;
|
|
const resetCamera = renderer.resetCamera;
|
|
const render = renderWindow.render;
|
|
const render = renderWindow.render;
|
|
@@ -180,131 +188,124 @@ const reader = vtkUnstructuredDataReader.newInstance();
|
|
|
|
|
|
// 用来修改状态、触发更新的函数
|
|
// 用来修改状态、触发更新的函数
|
|
function inOpacity() {
|
|
function inOpacity() {
|
|
- opacity.value=opacity.value+0.1;
|
|
|
|
|
|
+ opacity.value = opacity.value + 0.1;
|
|
actor.getProperty().setOpacity(opacity.value);
|
|
actor.getProperty().setOpacity(opacity.value);
|
|
renderWindow.render();
|
|
renderWindow.render();
|
|
}
|
|
}
|
|
-function getMinMax(scalars){
|
|
|
|
|
|
+function getMinMax(scalars) {
|
|
// console.log("getMinMax:",scalars);
|
|
// console.log("getMinMax:",scalars);
|
|
- min.value=scalars[0];
|
|
|
|
- max.value=scalars[0];
|
|
|
|
|
|
+ min.value = scalars[0];
|
|
|
|
+ max.value = scalars[0];
|
|
for (let index = 0; index <= scalars.length; index++) {
|
|
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;
|
|
|
|
- }
|
|
|
|
|
|
+ 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);
|
|
|
|
|
|
+ // console.log("max,min:", max.value, min.value);
|
|
}
|
|
}
|
|
//时间
|
|
//时间
|
|
function sleep(numberMillis) {
|
|
function sleep(numberMillis) {
|
|
var now = new Date();
|
|
var now = new Date();
|
|
var exitTime = now.getTime() + numberMillis;
|
|
var exitTime = now.getTime() + numberMillis;
|
|
- console.log(exitTime);
|
|
|
|
|
|
+ console.log(exitTime);
|
|
}
|
|
}
|
|
-//联级选择
|
|
|
|
-function exchange(){
|
|
|
|
- console.log(1111)
|
|
|
|
- arrvalue=[];
|
|
|
|
- console.log(arrvalue);
|
|
|
|
-}
|
|
|
|
-function handleChange(val){
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- arrvalue=val;
|
|
|
|
- console.log("arrvalue",arrvalue);
|
|
|
|
- // min.value=0.0;
|
|
|
|
- // max.value=1.0;
|
|
|
|
- // changeScalar();
|
|
|
|
|
|
+function handleChange(val) {
|
|
|
|
+ arrvalue = val;
|
|
|
|
+ min.value = 0.0;
|
|
|
|
+ max.value = 1.0;
|
|
|
|
+ changeScalar();
|
|
}
|
|
}
|
|
//暂停
|
|
//暂停
|
|
-function suspend(){
|
|
|
|
- isstop.value=false;
|
|
|
|
|
|
+function suspend() {
|
|
|
|
+ isstop.value = false;
|
|
console.log(isstop.value);
|
|
console.log(isstop.value);
|
|
}
|
|
}
|
|
//滑块
|
|
//滑块
|
|
-function sliderchange(val){
|
|
|
|
- console.log(val);
|
|
|
|
- changeScalar()
|
|
|
|
|
|
+function sliderchange(val) {
|
|
|
|
+ // console.log(val);
|
|
|
|
+ changeScalar();
|
|
}
|
|
}
|
|
|
|
|
|
//播放
|
|
//播放
|
|
-function play(time){
|
|
|
|
- isstop.value=true;
|
|
|
|
|
|
+function play(time) {
|
|
|
|
+ isstop.value = true;
|
|
const sleep = (timeout = time) =>
|
|
const sleep = (timeout = time) =>
|
|
new Promise((resolve, reject) => {
|
|
new Promise((resolve, reject) => {
|
|
setTimeout(resolve, timeout);
|
|
setTimeout(resolve, timeout);
|
|
});
|
|
});
|
|
let timer = async (timeout) => {
|
|
let timer = async (timeout) => {
|
|
- for (let i = 0;i <endtime.value; i++) {
|
|
|
|
- if( isstop.value==true){
|
|
|
|
|
|
+ while (count.value < endtime.value) {
|
|
|
|
+ if (isstop.value == true) {
|
|
await sleep(time);
|
|
await sleep(time);
|
|
- count.value++;
|
|
|
|
- changeScalar();
|
|
|
|
|
|
+ changeScalar();
|
|
|
|
+ count.value++;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- }
|
|
|
|
|
|
+ };
|
|
timer(time);
|
|
timer(time);
|
|
}
|
|
}
|
|
//回到上一页
|
|
//回到上一页
|
|
-function Prev(){
|
|
|
|
- isstop.value=false;
|
|
|
|
|
|
+function Prev() {
|
|
|
|
+ isstop.value = false;
|
|
count.value--;
|
|
count.value--;
|
|
changeScalar();
|
|
changeScalar();
|
|
}
|
|
}
|
|
// 用来修改状态、触发更新的函数
|
|
// 用来修改状态、触发更新的函数
|
|
function increment() {
|
|
function increment() {
|
|
- isstop.value=false;
|
|
|
|
|
|
+ isstop.value = false;
|
|
|
|
+ if (count.value == endtime.value) {
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
count.value++;
|
|
count.value++;
|
|
changeScalar();
|
|
changeScalar();
|
|
}
|
|
}
|
|
-function changeScalar(){
|
|
|
|
|
|
+function changeScalar() {
|
|
var scalars;
|
|
var scalars;
|
|
- if(arrvalue[0]=='fire'){
|
|
|
|
- scalars=scalarFAll.value[count.value];
|
|
|
|
- }else {
|
|
|
|
- scalars=scalarWAll.value[count.value];
|
|
|
|
- }
|
|
|
|
- const polydata = mapper.getInputData();
|
|
|
|
- const scalarArray=scalars.get(arrvalue[1]);
|
|
|
|
- console.log("scalarArray:",scalarArray);
|
|
|
|
|
|
+ if (arrvalue[0] == "fire") {
|
|
|
|
+ scalars = scalarFAll.value[count.value];
|
|
|
|
+ } else {
|
|
|
|
+ scalars = scalarWAll.value[count.value];
|
|
|
|
+ }
|
|
|
|
+ const polydata = mapper.getInputData();
|
|
|
|
+ const scalarArray = scalars.get(arrvalue[1]);
|
|
|
|
+ // console.log("scalarArray:", scalarArray);
|
|
const dataArray = vtkDataArray.newInstance({
|
|
const dataArray = vtkDataArray.newInstance({
|
|
- name:arrvalue[1],
|
|
|
|
- size:polydata.getNumberOfPoints()
|
|
|
|
- });
|
|
|
|
|
|
+ name: arrvalue[1],
|
|
|
|
+ size: polydata.getNumberOfPoints(),
|
|
|
|
+ });
|
|
dataArray.setData(scalarArray);
|
|
dataArray.setData(scalarArray);
|
|
getMinMax(scalarArray);
|
|
getMinMax(scalarArray);
|
|
- mapper.setScalarRange(min.value,max.value);//设置范围
|
|
|
|
- polydata.getPointData().setScalars(dataArray);
|
|
|
|
- mapper.clearColorArrays();//强制重建颜色
|
|
|
|
- actor.getProperty().setOpacity(count.value);//设置错误的透明度使得页面重新加载 不设置不刷新页面
|
|
|
|
|
|
+ mapper.setScalarRange(min.value, max.value); //设置范围
|
|
|
|
+ polydata.getPointData().setScalars(dataArray);
|
|
|
|
+ mapper.clearColorArrays(); //强制重建颜色
|
|
|
|
+ actor.getProperty().setOpacity(count.value); //设置错误的透明度使得页面重新加载 不设置不刷新页面
|
|
renderWindow.render();
|
|
renderWindow.render();
|
|
}
|
|
}
|
|
//加载所有 标量数据
|
|
//加载所有 标量数据
|
|
-function loadScalarAll(){
|
|
|
|
|
|
+function loadScalarAll() {
|
|
//水灾
|
|
//水灾
|
|
- for (let index = 0; index <= 60; index++) {
|
|
|
|
|
|
+ for (let index = 0; index <= 60; index++) {
|
|
const reader = vtkUnstructuredDataReader.newInstance();
|
|
const reader = vtkUnstructuredDataReader.newInstance();
|
|
- reader.setUrl("data/Water/"+'POST'+index+'.vtk').then(() => {
|
|
|
|
- const scalars = reader.getOutputData(1);
|
|
|
|
- scalarWAll.value[index]=scalars;
|
|
|
|
|
|
+ reader.setUrl("data/Water/" + "POST" + index + ".vtk").then(() => {
|
|
|
|
+ const scalars = reader.getOutputData(1);
|
|
|
|
+ scalarWAll.value[index] = scalars;
|
|
});
|
|
});
|
|
}
|
|
}
|
|
//火灾
|
|
//火灾
|
|
for (let index = 0; index <= 60; index++) {
|
|
for (let index = 0; index <= 60; index++) {
|
|
const reader = vtkUnstructuredDataReader.newInstance();
|
|
const reader = vtkUnstructuredDataReader.newInstance();
|
|
- reader.setUrl("data/Fire/"+'POST'+index+'.vtk').then(() => {
|
|
|
|
- const scalars = reader.getOutputData(1);
|
|
|
|
- scalarFAll.value[index]=scalars;
|
|
|
|
|
|
+ reader.setUrl("data/Fire/" + "POST" + index + ".vtk").then(() => {
|
|
|
|
+ const scalars = reader.getOutputData(1);
|
|
|
|
+ scalarFAll.value[index] = scalars;
|
|
});
|
|
});
|
|
}
|
|
}
|
|
// console.log("scalarAll.value:",scalarAll.value);
|
|
// console.log("scalarAll.value:",scalarAll.value);
|
|
}
|
|
}
|
|
-//设置
|
|
|
|
|
|
+//设置
|
|
function generateTicks(numberOfTicks) {
|
|
function generateTicks(numberOfTicks) {
|
|
return (helper) => {
|
|
return (helper) => {
|
|
const lastTickBounds = helper.getLastTickBounds();
|
|
const lastTickBounds = helper.getLastTickBounds();
|
|
@@ -316,48 +317,33 @@ function generateTicks(numberOfTicks) {
|
|
const samples = scale.ticks(numberOfTicks);
|
|
const samples = scale.ticks(numberOfTicks);
|
|
const ticks = samples.map((tick) => scale(tick));
|
|
const ticks = samples.map((tick) => scale(tick));
|
|
// Replace minus "\u2212" with hyphen-minus "\u002D" so that parseFloat() works
|
|
// 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
|
|
|
|
- );
|
|
|
|
|
|
+ formatDefaultLocale({ minus: "\u002D" });
|
|
|
|
+ const format = scale.tickFormat(ticks[0], ticks[ticks.length - 1], numberOfTicks);
|
|
const tickStrings = ticks
|
|
const tickStrings = ticks
|
|
.map(format)
|
|
.map(format)
|
|
.map((tick) => Number(parseFloat(tick).toPrecision(12)).toPrecision()); // d3 sometimes adds unwanted whitespace
|
|
.map((tick) => Number(parseFloat(tick).toPrecision(12)).toPrecision()); // d3 sometimes adds unwanted whitespace
|
|
helper.setTicks(ticks);
|
|
helper.setTicks(ticks);
|
|
helper.setTickStrings(tickStrings);
|
|
helper.setTickStrings(tickStrings);
|
|
- };
|
|
|
|
|
|
+ };
|
|
}
|
|
}
|
|
//安装时
|
|
//安装时
|
|
onMounted(() => {
|
|
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();
|
|
|
|
- console.log("arrvalue:",arrvalue)
|
|
|
|
- reader.setUrl(filedir.value+'POST1.vtk').then(() => {
|
|
|
|
- const polydata = reader.getOutputData(0);
|
|
|
|
- const scalars = reader.getOutputData(1);
|
|
|
|
- const scalarArray=scalars.get(arrvalue[1]);
|
|
|
|
- console.log("scalarArray:",scalarArray);
|
|
|
|
|
|
+ arrvalue = ["Water", "Height"];
|
|
|
|
+ reader.setUrl(filedir.value + "POST1.vtk").then(() => {
|
|
|
|
+ const polydata = reader.getOutputData(0);
|
|
|
|
+ const scalars = reader.getOutputData(1);
|
|
|
|
+ const scalarArray = scalars.get(arrvalue[1]);
|
|
|
|
+ console.log("scalarArray:", scalarArray);
|
|
const dataArray = vtkDataArray.newInstance({
|
|
const dataArray = vtkDataArray.newInstance({
|
|
- name:arrvalue[1],
|
|
|
|
- size:polydata.getNumberOfPoints()
|
|
|
|
|
|
+ name: arrvalue[1],
|
|
|
|
+ size: polydata.getNumberOfPoints(),
|
|
});
|
|
});
|
|
dataArray.setData(scalarArray);
|
|
dataArray.setData(scalarArray);
|
|
- polydata.getPointData().setScalars(dataArray);
|
|
|
|
|
|
+ polydata.getPointData().setScalars(dataArray);
|
|
actor.setMapper(mapper);
|
|
actor.setMapper(mapper);
|
|
mapper.setInputData(polydata);
|
|
mapper.setInputData(polydata);
|
|
getMinMax(scalarArray);
|
|
getMinMax(scalarArray);
|
|
- mapper.setScalarRange(min.value,max.value);//设置范围
|
|
|
|
|
|
+ mapper.setScalarRange(min.value, max.value); //设置范围
|
|
|
|
|
|
renderer.addActor(actor);
|
|
renderer.addActor(actor);
|
|
|
|
|
|
@@ -365,12 +351,12 @@ onMounted(() => {
|
|
const scalarBarActor = vtkScalarBarActor.newInstance();
|
|
const scalarBarActor = vtkScalarBarActor.newInstance();
|
|
renderer.addActor(scalarBarActor);
|
|
renderer.addActor(scalarBarActor);
|
|
scalarBarActor.setScalarsToColors(lut);
|
|
scalarBarActor.setScalarsToColors(lut);
|
|
- console.log("lut:",lut.getRange());
|
|
|
|
|
|
+ console.log("lut:", lut.getRange());
|
|
// Change the number of ticks (TODO: add numberOfTicks to ScalarBarActor)
|
|
// Change the number of ticks (TODO: add numberOfTicks to ScalarBarActor)
|
|
scalarBarActor.setGenerateTicks(generateTicks(5));
|
|
scalarBarActor.setGenerateTicks(generateTicks(5));
|
|
scalarBarActor.setAxisLabel(arrvalue[1]);
|
|
scalarBarActor.setAxisLabel(arrvalue[1]);
|
|
scalarBarActor.setDrawAboveRangeSwatch(true);
|
|
scalarBarActor.setDrawAboveRangeSwatch(true);
|
|
-
|
|
|
|
|
|
+
|
|
//修改设条颜色
|
|
//修改设条颜色
|
|
const ctf = vtkColorTransferFunction.newInstance();
|
|
const ctf = vtkColorTransferFunction.newInstance();
|
|
ctf.addRGBPoint(0.0, 0.0, 0.0, 1.0);
|
|
ctf.addRGBPoint(0.0, 0.0, 0.0, 1.0);
|
|
@@ -379,20 +365,15 @@ onMounted(() => {
|
|
ctf.addRGBPoint(3.0, 1.0, 0.5, 0.0);
|
|
ctf.addRGBPoint(3.0, 1.0, 0.5, 0.0);
|
|
ctf.addRGBPoint(4.0, 1.0, 0.0, 0.0);
|
|
ctf.addRGBPoint(4.0, 1.0, 0.0, 0.0);
|
|
mapper.setLookupTable(ctf);
|
|
mapper.setLookupTable(ctf);
|
|
-
|
|
|
|
-
|
|
|
|
lut = mapper.getLookupTable();
|
|
lut = mapper.getLookupTable();
|
|
scalarBarActor.setScalarsToColors(lut);
|
|
scalarBarActor.setScalarsToColors(lut);
|
|
-
|
|
|
|
resetCamera();
|
|
resetCamera();
|
|
render();
|
|
render();
|
|
});
|
|
});
|
|
- // renderWindow.render();
|
|
|
|
loadScalarAll();
|
|
loadScalarAll();
|
|
});
|
|
});
|
|
</script>
|
|
</script>
|
|
|
|
|
|
-
|
|
|
|
<style>
|
|
<style>
|
|
.controls {
|
|
.controls {
|
|
position: absolute;
|
|
position: absolute;
|
|
@@ -401,98 +382,95 @@ onMounted(() => {
|
|
background: white;
|
|
background: white;
|
|
padding: 12px;
|
|
padding: 12px;
|
|
}
|
|
}
|
|
-.haha{
|
|
|
|
|
|
+.haha {
|
|
color: #fff;
|
|
color: #fff;
|
|
-
|
|
|
|
}
|
|
}
|
|
-.tool{
|
|
|
|
|
|
+.tool {
|
|
position: fixed;
|
|
position: fixed;
|
|
top: 50px;
|
|
top: 50px;
|
|
left: 20px;
|
|
left: 20px;
|
|
|
|
|
|
- z-index:205;
|
|
|
|
-
|
|
|
|
|
|
+ z-index: 205;
|
|
}
|
|
}
|
|
-.img{
|
|
|
|
|
|
+.img {
|
|
width: 48px;
|
|
width: 48px;
|
|
-margin: -6px 0;
|
|
|
|
|
|
+ margin: -6px 0;
|
|
padding: 8px 10px;
|
|
padding: 8px 10px;
|
|
- background-color:rgba(255, 255, 255, 0.1);
|
|
|
|
|
|
+ background-color: rgba(255, 255, 255, 0.1);
|
|
font-size: 12px;
|
|
font-size: 12px;
|
|
transform: scale(0.9);
|
|
transform: scale(0.9);
|
|
}
|
|
}
|
|
-.img span{
|
|
|
|
- color: #fff;
|
|
|
|
|
|
+.img span {
|
|
|
|
+ color: #fff;
|
|
display: inline-block;
|
|
display: inline-block;
|
|
-
|
|
|
|
}
|
|
}
|
|
-.img .el-image{
|
|
|
|
|
|
+.img .el-image {
|
|
width: 34px;
|
|
width: 34px;
|
|
}
|
|
}
|
|
-.leftdialong{
|
|
|
|
-padding: 15px;
|
|
|
|
- width: 300px;
|
|
|
|
- position: relative;
|
|
|
|
- top: -248px;
|
|
|
|
- left: 69px;
|
|
|
|
- border-radius: 5px;
|
|
|
|
- box-shadow: 0px 3px 10px rgba(255, 255, 255, 0.1);
|
|
|
|
|
|
+.leftdialong {
|
|
|
|
+ padding: 15px;
|
|
|
|
+ width: 300px;
|
|
|
|
+ position: relative;
|
|
|
|
+ top: -248px;
|
|
|
|
+ left: 69px;
|
|
|
|
+ border-radius: 5px;
|
|
|
|
+ box-shadow: 0px 3px 10px rgba(255, 255, 255, 0.1);
|
|
}
|
|
}
|
|
- .leftdialong .el-form-item__label{
|
|
|
|
-font-size: 12px;
|
|
|
|
-color: #fff !important;
|
|
|
|
-padding-left: 6px;
|
|
|
|
|
|
+.leftdialong .el-form-item__label {
|
|
|
|
+ font-size: 12px;
|
|
|
|
+ color: #fff !important;
|
|
|
|
+ padding-left: 6px;
|
|
}
|
|
}
|
|
-.time{
|
|
|
|
|
|
+.time {
|
|
color: #fff;
|
|
color: #fff;
|
|
font-size: 12px;
|
|
font-size: 12px;
|
|
margin-bottom: 30px;
|
|
margin-bottom: 30px;
|
|
}
|
|
}
|
|
-.itemlist{
|
|
|
|
|
|
+.itemlist {
|
|
display: flex;
|
|
display: flex;
|
|
}
|
|
}
|
|
-.item{
|
|
|
|
|
|
+.item {
|
|
background-color: rgba(255, 255, 255, 0.1);
|
|
background-color: rgba(255, 255, 255, 0.1);
|
|
margin: 5px;
|
|
margin: 5px;
|
|
- padding:5px 9px;
|
|
|
|
-border-radius: 5px;
|
|
|
|
-font-size: 14px;
|
|
|
|
|
|
+ padding: 5px 9px;
|
|
|
|
+ border-radius: 5px;
|
|
|
|
+ font-size: 14px;
|
|
transform: scale(0.8);
|
|
transform: scale(0.8);
|
|
- color: #fff;
|
|
|
|
|
|
+ color: #fff;
|
|
}
|
|
}
|
|
-.dialog-footer{
|
|
|
|
|
|
+.dialog-footer {
|
|
margin-top: 30px;
|
|
margin-top: 30px;
|
|
text-align: right;
|
|
text-align: right;
|
|
}
|
|
}
|
|
-.block{
|
|
|
|
-display: flex;
|
|
|
|
|
|
+.block {
|
|
|
|
+ display: flex;
|
|
}
|
|
}
|
|
-.demonstration{
|
|
|
|
-padding: 5px 5px 5px 0;
|
|
|
|
-font-size: 12px;
|
|
|
|
-color: #fff;
|
|
|
|
-display: inline-block;
|
|
|
|
-width:100px;
|
|
|
|
-height: 24px;
|
|
|
|
-line-height: 24px;
|
|
|
|
|
|
+.demonstration {
|
|
|
|
+ padding: 5px 5px 5px 0;
|
|
|
|
+ font-size: 12px;
|
|
|
|
+ color: #fff;
|
|
|
|
+ display: inline-block;
|
|
|
|
+ width: 100px;
|
|
|
|
+ height: 24px;
|
|
|
|
+ line-height: 24px;
|
|
}
|
|
}
|
|
-.block .el-slider{
|
|
|
|
|
|
+.block .el-slider {
|
|
padding: 0 5px;
|
|
padding: 0 5px;
|
|
}
|
|
}
|
|
-.cascadeer .el-cascader{
|
|
|
|
|
|
+.cascadeer .el-cascader {
|
|
width: 100%;
|
|
width: 100%;
|
|
}
|
|
}
|
|
-.cascadeer .asterisk-left{
|
|
|
|
- width: 100% !important;
|
|
|
|
- font-size: 12px;
|
|
|
|
|
|
+.cascadeer .asterisk-left {
|
|
|
|
+ width: 100% !important;
|
|
|
|
+ font-size: 12px;
|
|
}
|
|
}
|
|
-.btn{
|
|
|
|
- background-color: rgba(255, 255, 255, 0.1);
|
|
|
|
- margin: 5px;
|
|
|
|
- padding: 5px 9px;
|
|
|
|
- border-radius: 5px;
|
|
|
|
- font-size: 14px;
|
|
|
|
- transform: scale(0.8);
|
|
|
|
- color: #fff;
|
|
|
|
|
|
+.btn {
|
|
|
|
+ background-color: rgba(255, 255, 255, 0.1);
|
|
|
|
+ margin: 5px;
|
|
|
|
+ padding: 5px 9px;
|
|
|
|
+ border-radius: 5px;
|
|
|
|
+ font-size: 14px;
|
|
|
|
+ transform: scale(0.8);
|
|
|
|
+ color: #fff;
|
|
}
|
|
}
|
|
</style>
|
|
</style>
|