소스 검색

告警显示

huangxingxing 10 달 전
부모
커밋
f0a5773d20
4개의 변경된 파일249개의 추가작업 그리고 24개의 파일을 삭제
  1. 106 1
      src/control/fireControl.js
  2. 48 7
      src/control/vtkModel.js
  3. 43 2
      src/view/components/InfoAnimation.vue
  4. 52 14
      src/view/index/first-left.vue

+ 106 - 1
src/control/fireControl.js

@@ -17,6 +17,7 @@ export class fireControl {
         //Scalars 数据 array[setp]=Map(scalars,value[points]=array),
         this.scalars = new Map();
         this.scalar = new Map();
+        this.gjScalar;
         this.reader = vtkUnstructuredDataReader.newInstance();
         this.velocityreader = velocityDataReader.newInstance();
         this.velocityMap = new Map();
@@ -58,7 +59,7 @@ export class fireControl {
         }
     }
 
-    //获取第几步量数据
+    //获取第几步量数据
     async getVelocityByStep(step) {
         console.log("getVelocityByStep");
         this.step = step;
@@ -74,6 +75,110 @@ export class fireControl {
         }
 
     }
+
+    //标量数据初始化
+    intgjScalar(stype){
+        let scalar =this.gjScalar=[];
+        if(stype =="Water"){
+            //Map(scalars,value[points]=array),
+            this.scalar.forEach(function(scalarVarry, skey) {
+                // ["Temperature", "(℃)"],
+                // ["Pressure", "(Pa)"],
+                // ["CO", "(ppm)"],
+                // ["CO2", "(%)"],
+                // ["H2S", "(%)"],
+                // ["HCL", "(ppm)"],
+                // ["NO2", "(ppm)"],
+                // ["SO2", "(ppm)"],
+                // ["Flow", "(Pa)"],
+                // ["Height", "(m)"],
+                if(skey=="Height"){
+                    scalarVarry.forEach(function(value) {
+                        if(value>=0&&value<0.2){
+                            scalar.push(0);
+                        }else if(value>=0.2&&value<0.5){
+                            scalar.push(1);
+                        }else if(value>=0.5&&value<1){
+                            scalar.push(2);
+                        }else if(value>=1){
+                            scalar.push(3);
+                        }else{
+                            scalar.push(0);
+                        }
+                    });
+                }               
+            });
+        }else if(stype =="Fire"){
+            let tscalar=[];
+            let so2scalar=[];
+            let co2scalar=[];
+            this.scalar.forEach(function(scalarVarry, skey) {
+              // Temperature,SO2,CO2
+                if(skey=="Temperature"){
+                    scalarVarry.forEach(function(value) {
+                        if(value>=0&&value<40){
+                            tscalar.push(0);
+                        }else if(value>=40&&value<45){
+                            tscalar.push(1);
+                        }else if(value>=45&&value<50){
+                            tscalar.push(2);
+                        }else if(value>=50){
+                            tscalar.push(3);
+                        }else{
+                            tscalar.push(0);
+                        }
+                    });
+                } 
+                if(skey=="CO2"){
+                    scalarVarry.forEach(function(value) {
+                        if(value>=0.04&&value<0.1){
+                            co2scalar.push(0);
+                        }else if(value>=0.1&&value<0.2){
+                            co2scalar.push(1);
+                        }else if(value>=0.2&&value<0.5){
+                            co2scalar.push(2);
+                        }else if(value>=0.5){
+                            co2scalar.push(3);
+                        }else{
+                            co2scalar.push(0);
+                        }
+                    });
+                } 
+                if(skey=="SO2"){
+                    scalarVarry.forEach(function(value) {
+                        if(value>=0.5&&value<3){
+                            so2scalar.push(0);
+                        }else if(value>=3&&value<50){
+                            so2scalar.push(1);
+                        }else if(value>=50&&value<500){
+                            so2scalar.push(2);
+                        }else if(value>=500){
+                            so2scalar.push(3);
+                        }else{
+                            so2scalar.push(0);
+                        }
+                    });
+                } 
+             });
+             for (let index = 0; index < tscalar.length; index++) {
+                let tm = [];
+                tm.push(tscalar[index]);
+                if(so2scalar.length>0){
+                    tm.push(so2scalar[index]);
+                }
+                if(co2scalar.length>0){
+                    tm.push(co2scalar[index]);
+                }
+                scalar.push(Math.max(...tm)); 
+                 
+             }
+         
+        }else if(stype =="Gass"){
+
+        }
+        this.gjScalar;
+    }
+
 }
 
 export function createFireControl() {

+ 48 - 7
src/control/vtkModel.js

@@ -8,6 +8,7 @@ import vtkActor from "@kitware/vtk.js/Rendering/Core/Actor";
 import vtkMapper from "@kitware/vtk.js/Rendering/Core/Mapper";
 import vtkScalarBarActor from "@kitware/vtk.js/Rendering/Core/ScalarBarActor";
 import vtkColorTransferFunction from "@kitware/vtk.js/Rendering/Core/ColorTransferFunction";
+import vtkLookupTable from '@kitware/vtk.js/Common/Core/LookupTable';
 import { Representation } from "@kitware/vtk.js/Rendering/Core/Property/Constants";
 import vtkPolyData from "@kitware/vtk.js/Common/DataModel/PolyData";
 
@@ -49,7 +50,7 @@ export class VtkModel {
     this.isSelectPipe = false;
     //管道节点选择对象
     this.selectObj = null;
-//X,Y
+    //X,Y
       this.epageX=null;
       this.epageY=null;
     //结果选择的点数据
@@ -87,16 +88,15 @@ export class VtkModel {
     this.actor2.setMapper(this.mapper);
 
 
-    //结果数据
+    //结果数据渲染
     this.jgActor = vtkActor.newInstance();
     this.jgMapper = vtkMapper.newInstance();
     this.jgActor.getProperty().setRepresentation(Representation.SURFACE); //面    
-
-
     this.scalarBarActor = vtkScalarBarActor.newInstance();
-    this.scalarBarActor.setGenerateTicks(this.generateTicks(5));
+    this.scalarBarActor.setGenerateTicks(this.generateTicks(10));
     this.scalarBarActor.setDrawAboveRangeSwatch(true);
     this.scalarBarActor.setDrawNanAnnotation(false);
+    this.scalarBarActor.setDrawAboveRangeSwatch(false);
     this.scalarBarActor.setBoxPosition([1, 0]);
     // 修改设条颜色
     const ctf = vtkColorTransferFunction.newInstance();
@@ -106,11 +106,36 @@ export class VtkModel {
     ctf.addRGBPoint(3.0, 1.0, 0.5, 0.0);
     ctf.addRGBPoint(4.0, 1.0, 0.0, 0.0);
     this.jgMapper.setLookupTable(ctf);
+    this.jgActor.setMapper(this.jgMapper);
     const lut = this.jgMapper.getLookupTable();
     this.scalarBarActor.setScalarsToColors(lut);
-    this.jgActor.setMapper(this.jgMapper);
 
 
+    //告警数据渲染
+    this.gjActor = vtkActor.newInstance();
+    this.gjMapper = vtkMapper.newInstance();
+    this.gjActor.getProperty().setRepresentation(Representation.SURFACE); //面    
+    this.gjscalarBarActor = vtkScalarBarActor.newInstance();
+    this.gjscalarBarActor.setGenerateTicks(this.generateTicks(4));
+    this.gjscalarBarActor.setDrawAboveRangeSwatch(true);
+    this.gjscalarBarActor.setDrawNanAnnotation(false);
+    this.gjscalarBarActor.setDrawAboveRangeSwatch(false);
+    this.gjscalarBarActor.setBoxPosition([1, 0]);
+    this.gjMapper.setLookupTable(vtkLookupTable.newInstance());  
+    const gjlut = this.gjMapper.getLookupTable();
+    gjlut.setNumberOfColors(parseInt(4, 10));
+    // hueRange: [0.0, 0.66667],  //色调范围
+    // saturationRange: [1.0, 1.0],//饱和度
+    // valueRange: [1.0, 1.0], 
+    // alphaRange: [1.0, 1.0], //透明度
+    gjlut.setAlphaRange([1,1]);
+    gjlut.setValueRange([0.5,1]);
+    gjlut.setHueRange([0.66667,0.0]);//蓝色到红色
+    gjlut.setHueRange([0.3375,0.0]);//绿色到红色
+    this.gjscalarBarActor.setScalarsToColors(gjlut);
+    this.gjMapper.setInterpolateScalarsBeforeMapping(true);//有无渐变
+    this.gjActor.setMapper(this.gjMapper);
+
     this.ways = [];
     this.wayActors = [];
 
@@ -549,11 +574,23 @@ export class VtkModel {
     return 0;
   }
 
-
+  clearAllShowGj() {
+    this.renderer.addActor(this.gjActor);
+    this.renderer.addActor(this.gjscalarBarActor);
+    this.renderer.removeActor(this.jgActor);
+    this.renderer.removeActor(this.scalarBarActor);
+    this.wayClearShow();
+    this.modelClearShow();
+    this.isJg = true; //显示结果
+    document.removeEventListener("mousemove", throttleMouseHandler);
+  }
 
   clearModeAddJg() {
     this.renderer.addActor(this.jgActor);
     this.renderer.addActor(this.scalarBarActor);
+
+    this.renderer.removeActor(this.gjActor);
+    this.renderer.removeActor(this.gjscalarBarActor)
     this.wayClearShow();
     this.modelClearShow();
     this.isJg = true; //显示结果
@@ -562,6 +599,8 @@ export class VtkModel {
   clearJgAddMode() {
     this.renderer.removeActor(this.scalarBarActor);
     this.renderer.removeActor(this.jgActor);
+    this.renderer.removeActor(this.gjActor);
+    this.renderer.removeActor(this.gjscalarBarActor)
     this.clearArrow();
     this.modelShow();
     this.wayClearShow();
@@ -570,6 +609,8 @@ export class VtkModel {
   clearAll() {
     this.renderer.removeActor(this.jgActor);
     this.renderer.removeActor(this.scalarBarActor);
+    this.renderer.removeActor(this.gjActor);
+    this.renderer.removeActor(this.gjscalarBarActor)
     this.clearArrow();
     this.modelClearShow();
     this.wayClearShow();

+ 43 - 2
src/view/components/InfoAnimation.vue

@@ -521,7 +521,7 @@ async function readJob() {
       if (res.returnCode == "000000000") {
         //成功
         if(res.state=='1'){
-          vtkmodel.clearModeAddJg(); //隐藏模版显示结果
+         vtkmodel.clearModeAddJg(); //隐藏模版显示结果
         monitor.value = true;
         job.value = res;
         reddate(new Date());
@@ -610,14 +610,17 @@ function vtkScalarRead() {
     .getScalrsByStep(fcon.step)
     .then((result) => {
       // console.log(fcon.scalar);
+    
       velocityRead() ;
-      vtkShow();
+      // vtkShow();
+      gjVtkShow();
     })
     .catch((err) => {
       console.log(err);
     });
 }
 function vtkShow() {
+  
   console.log("执行了");
   const scalarBarActor = vtkmodel.scalarBarActor;
   const mapper = vtkmodel.jgMapper;
@@ -653,9 +656,47 @@ function vtkShow() {
   actor.getProperty().setOpacity(count.value); //设置错误的透明度使得页面重新加载  不设置不刷新页面
   actor.getProperty().setOpacity(0.5);
   // vtkmodel.renderer.resetCamera();
+  vtkmodel.clearModeAddJg();
   vtkmodel.renderWindow.render();
 }
 
+//告警数据渲染
+function gjVtkShow() {
+  fcon.intgjScalar(props.classradio);
+  console.log("执行了");
+  const scalarBarActor = vtkmodel.gjscalarBarActor;
+  const mapper = vtkmodel.gjMapper;
+  const actor = vtkmodel.gjActor;
+  if (!fcon.scalar) {
+    return;
+  }
+  
+  const scalarArray = fcon.gjScalar;
+  if (!scalarArray || !fcon.polydata) {
+    return;
+  }
+console.log("告警"+fcon.gjScalar);
+
+  const dataArray = vtkDataArray.newInstance({
+    name: "告警",
+    size: fcon.polydata.getNumberOfPoints(),
+  });
+
+  dataArray.setData(scalarArray);
+  fcon.polydata.getPointData().setScalars(dataArray);
+  mapper.setInputData(fcon.polydata);
+  getMinMax(scalarArray);
+  mapper.setScalarRange(
+    parseFloat(min.value.toFixed(3)),
+    parseFloat(max.value.toFixed(3))
+  ); //设置范围
+  scalarBarActor.setAxisLabel(formInline.value.region);
+  mapper.clearColorArrays(); //强制重建颜色
+  actor.getProperty().setOpacity(count.value); //设置错误的透明度使得页面重新加载  不设置不刷新页面
+  actor.getProperty().setOpacity(0.5);
+  vtkmodel.clearAllShowGj();
+  vtkmodel.renderWindow.render();
+}
 function getMinMax(scalars) {
   // console.log("getMinMax:",scalars);
   min.value = scalars[0];

+ 52 - 14
src/view/index/first-left.vue

@@ -819,24 +819,23 @@ function velocityRead() {
 }
 function getMinMax(scalars) {
   // console.log("getMinMax:",scalars);
-  min.value = 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;
-    }
-  }
+  min.value = Math.min(...scalars);
+  max.value =  Math.max(...scalars);
+  // 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;
+  //   }
+  // }
   if( min.value== max.value){
      max.value=min.value+1;
   }
   console.log("max,min:", max.value, min.value);
 }
 function vtkShow() {
-
   const scalarBarActor = vtkmodel.scalarBarActor;
   const mapper = vtkmodel.jgMapper;
   const actor = vtkmodel.jgActor;
@@ -853,7 +852,7 @@ function vtkShow() {
     name: formInline.value.region,
     size: fcon.polydata.getNumberOfPoints(),
   });
-  console.log("执行了");
+  console.log("执行了11");
   // console.log(dataArray);
   dataArray.setData(scalarArray);
   fcon.polydata.getPointData().setScalars(dataArray);
@@ -870,10 +869,48 @@ function vtkShow() {
   actor.getProperty().setOpacity(count.value); //设置错误的透明度使得页面重新加载  不设置不刷新页面
   actor.getProperty().setOpacity(0.5);
   // vtkmodel.renderer.resetCamera();
+  vtkmodel.clearModeAddJg();
   vtkmodel.renderWindow.render();
   
 }
+//告警数据渲染
+function gjVtkShow() {
+   console.log("告警 执行了");
+  fcon.intgjScalar(props.classradio);
+ 
+  const scalarBarActor = vtkmodel.gjscalarBarActor;
+  const mapper = vtkmodel.gjMapper;
+  const actor = vtkmodel.gjActor;
+  if (!fcon.scalar) {
+    return;
+  }
+  
+  const scalarArray = fcon.gjScalar;
+  if (!scalarArray || !fcon.polydata) {
+    return;
+  }
+console.log("告警"+fcon.gjScalar);
 
+  const dataArray = vtkDataArray.newInstance({
+    name: "告警",
+    size: fcon.polydata.getNumberOfPoints(),
+  });
+
+  dataArray.setData(scalarArray);
+  fcon.polydata.getPointData().setScalars(dataArray);
+  mapper.setInputData(fcon.polydata);
+  getMinMax(scalarArray);
+  mapper.setScalarRange(
+    parseFloat(min.value.toFixed(3)),
+    parseFloat(max.value.toFixed(3))
+  ); //设置范围
+  scalarBarActor.setAxisLabel("告警");
+  mapper.clearColorArrays(); //强制重建颜色
+  actor.getProperty().setOpacity(count.value); //设置错误的透明度使得页面重新加载  不设置不刷新页面
+  actor.getProperty().setOpacity(0.5);
+  vtkmodel.clearAllShowGj();
+  vtkmodel.renderWindow.render();
+}
 function vtkGridRead() {
   fcon.aid = aid.value;
   fcon
@@ -889,7 +926,8 @@ function vtkScalarRead() {
     .getScalrsByStep(fcon.step)
     .then((result) => {
       // velocityRead() ;
-      vtkShow();
+      // vtkShow();
+      gjVtkShow();
     })
     .catch((err) => {
      // console.log(err);