HelloWorld.vue 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. <template>
  2. <div>
  3. <div ref="vtkContainer" />
  4. </div>
  5. </template>
  6. <script>
  7. import * as d3 from 'd3-scale';
  8. import { formatDefaultLocale } from 'd3-format';
  9. import { onMounted } from 'vue';
  10. import '@kitware/vtk.js/Rendering/Profiles/Geometry';
  11. import vtkFullScreenRenderWindow from '@kitware/vtk.js/Rendering/Misc/FullScreenRenderWindow';
  12. import vtkActor from '@kitware/vtk.js/Rendering/Core/Actor';
  13. import vtkMapper from '@kitware/vtk.js/Rendering/Core/Mapper';
  14. import vtkUnstructuredDataReader from '../reader/UnstructuredDataReader.js';
  15. import vtkScalarBarActor from '@kitware/vtk.js/Rendering/Core/ScalarBarActor';
  16. import vtkLookupTable from '@kitware/vtk.js/Common/Core/LookupTable';
  17. import vtkDataArray from '@kitware/vtk.js/Common/Core/DataArray.js';
  18. import vtkColorTransferFunction from '@kitware/vtk.js/Rendering/Core/ColorTransferFunction';
  19. export default {
  20. name: 'HelloWorld',
  21. //体制
  22. setup() {
  23. //安装时
  24. onMounted(() => {
  25. const fullScreenRenderer = vtkFullScreenRenderWindow.newInstance();
  26. const renderer = fullScreenRenderer.getRenderer();
  27. const renderWindow = fullScreenRenderer.getRenderWindow();
  28. const resetCamera = renderer.resetCamera;
  29. const render = renderWindow.render;
  30. const mapper = vtkMapper.newInstance();
  31. const actor = vtkActor.newInstance();
  32. const reader = vtkUnstructuredDataReader.newInstance();
  33. const scalarName ="Pressure";
  34. var scalars;
  35. reader.setUrl('data/Fire/POST0.vtk').then(() => {
  36. const polydata = reader.getOutputData(0);
  37. scalars = reader.getOutputData(1);
  38. const scalarArray=scalars.get(scalarName);
  39. const dataArray = vtkDataArray.newInstance({
  40. name:scalarName,
  41. size:polydata.getNumberOfPoints()
  42. });
  43. dataArray.setData(scalarArray);
  44. polydata.getPointData().setScalars(dataArray);
  45. actor.setMapper(mapper);
  46. mapper.setInputData(polydata);
  47. renderer.addActor(actor);
  48. let lut = mapper.getLookupTable();
  49. const scalarBarActor = vtkScalarBarActor.newInstance();
  50. renderer.addActor(scalarBarActor);
  51. scalarBarActor.setScalarsToColors(lut);
  52. console.log("lut:",lut.getRange());
  53. // Change the number of ticks (TODO: add numberOfTicks to ScalarBarActor)
  54. function generateTicks(numberOfTicks) {
  55. return (helper) => {
  56. const lastTickBounds = helper.getLastTickBounds();
  57. // compute tick marks for axes
  58. const scale = d3
  59. .scaleLinear()
  60. .domain([0.0, 1.0])
  61. .range([lastTickBounds[0], lastTickBounds[1]]);
  62. const samples = scale.ticks(numberOfTicks);
  63. const ticks = samples.map((tick) => scale(tick));
  64. // Replace minus "\u2212" with hyphen-minus "\u002D" so that parseFloat() works
  65. formatDefaultLocale({ minus: '\u002D' });
  66. const format = scale.tickFormat(
  67. ticks[0],
  68. ticks[ticks.length - 1],
  69. numberOfTicks
  70. );
  71. const tickStrings = ticks
  72. .map(format)
  73. .map((tick) => Number(parseFloat(tick).toPrecision(12)).toPrecision()); // d3 sometimes adds unwanted whitespace
  74. helper.setTicks(ticks);
  75. helper.setTickStrings(tickStrings);
  76. };
  77. }
  78. scalarBarActor.setGenerateTicks(generateTicks(5));
  79. scalarBarActor.setAxisLabel(scalarName);
  80. scalarBarActor.setDrawAboveRangeSwatch(true);
  81. const ctf = vtkColorTransferFunction.newInstance();
  82. ctf.addRGBPoint(0.0, 0.0, 0.0, 1.0);
  83. ctf.addRGBPoint(1.0, 1.0, 0.0, 0.0);
  84. mapper.setLookupTable(ctf);
  85. lut = mapper.getLookupTable();
  86. scalarBarActor.setScalarsToColors(lut);
  87. resetCamera();
  88. render();
  89. for (let index = 1; index <= 60; index++) {
  90. var flag =true;
  91. while(flag){
  92. flag=false;
  93. const reader = vtkUnstructuredDataReader.newInstance();
  94. reader.setUrl('data/Fire/POST'+index+'.vtk').then(() => {
  95. console.log("index:",index);
  96. const polydata = mapper.getInputData();
  97. // console.log("polydata:",polydata);
  98. const scalars = reader.getOutputData(1);
  99. // console.log("scalars:",scalars);
  100. const scalarArray=scalars.get(scalarName);
  101. // console.log("polydata.getNumberOfPoints():",polydata.getNumberOfPoints());
  102. const dataArray = vtkDataArray.newInstance({
  103. name:scalarName,
  104. size:polydata.getNumberOfPoints()
  105. });
  106. dataArray.setData(scalarArray);
  107. polydata.getPointData().setScalars(dataArray);
  108. // mapper.setInputData(polydata);
  109. renderWindow.render();
  110. flag=true;
  111. });
  112. }
  113. }
  114. });
  115. renderWindow.render();
  116. });
  117. return ;
  118. }
  119. }
  120. </script>
  121. <style scoped>
  122. .controls {
  123. position: absolute;
  124. top: 25px;
  125. left: 25px;
  126. background: white;
  127. padding: 12px;
  128. }
  129. </style>