InfoVtkmodel.vue 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. <template>
  2. <div class="vtkmodel1" id="infomodel"></div>
  3. </template>
  4. <script setup>
  5. import { ref, onMounted, reactive} from "vue";
  6. import { RouterView, RouterLink } from "vue-router";
  7. import { request, uploadFile } from "@/utils/request";
  8. import { vtkmodel } from "@/control/vtkModel.js";
  9. import { throttle } from "@kitware/vtk.js/macros";
  10. import vtkSphereSource from "@kitware/vtk.js/Filters/Sources/SphereSource";
  11. import vtkActor from "@kitware/vtk.js/Rendering/Core/Actor";
  12. import vtkMapper from "@kitware/vtk.js/Rendering/Core/Mapper";
  13. import vtkLineSource from "@kitware/vtk.js/Filters/Sources/LineSource";
  14. import vtkPointSource from "@kitware/vtk.js/Filters/Sources/PointSource";
  15. import emitter from "@/utils/emitter";
  16. import { message } from '@/utils/message';
  17. onBeforeMount(()=>{
  18. })
  19. onMounted(() => {
  20. const rootContainer = document.getElementById("infomodel");
  21. // rootContainer.style.position = "relative";
  22. // rootContainer.style.width = "100%";
  23. // rootContainer.style.height = "100%";
  24. vtkmodel.initMode(rootContainer);
  25. readNodeAndPipe();
  26. vtkmodel.clearJgAddMode();
  27. emitter.emit('accident');
  28. emitter.on("RefreshVtkmodel",RefreshVtkmodel)
  29. });
  30. onUnmounted (() => {
  31. emitter.off("RefreshVtkmodel",RefreshVtkmodel)
  32. })
  33. const nodes = ref([]); //节点数据
  34. const pipes = ref([]); //管道数据
  35. const delNodes = ref([]); //无效节点
  36. const validNodes = ref([]); //有效节点
  37. const checkNodes = ref([]); //监测点
  38. const RefreshVtkmodel = () => {
  39. vtkmodel.clearAll();
  40. readNodeAndPipe();
  41. }
  42. async function readNodeAndPipe() {
  43. const params = {
  44. transCode: "D00000",
  45. count: 1000,
  46. page: 1,
  47. };
  48. await request(params)
  49. .then((res) => {
  50. if (res.returnCode == "000000000") {
  51. nodes.value = res.rows;
  52. readePipe();
  53. } else {
  54. message.error({
  55. message: res.returnMsg,
  56. });
  57. }
  58. })
  59. .catch((err) => {});
  60. }
  61. async function readePipe() {
  62. const params = {
  63. transCode: "D00001",
  64. count: 1000,
  65. page: 1,
  66. };
  67. await request(params)
  68. .then((res) => {
  69. if (res.returnCode == "000000000") {
  70. pipes.value = res.rows;
  71. lineShow();
  72. } else {
  73. message.error({
  74. message: res.returnMsg,
  75. });
  76. }
  77. })
  78. .catch((err) => {});
  79. }
  80. // 查询监测点
  81. async function readCheckNode(){
  82. const params = {
  83. transCode: 'D10004',
  84. }
  85. request(params)
  86. .then((res) => {
  87. checkNodes.value= res.rows;
  88. console.log("监测点信息:",checkNodes.value)
  89. vtkmodel.initCheckNodes(checkNodes.value);
  90. })
  91. .catch((err) => {
  92. })
  93. }
  94. // 查询传感器
  95. async function readSensor(){
  96. const params = {
  97. transCode: 'D10010',
  98. type: 'Fire'
  99. }
  100. request(params)
  101. .then((res) => {
  102. console.log("readSensor",res);
  103. res.rows.forEach(element => {
  104. vtkmodel.addSensor(element)
  105. });
  106. })
  107. .catch((err) => {
  108. })
  109. }
  110. /**
  111. * 在管道中已存在的点才可以使用
  112. */
  113. function nodeIsValid(node) {
  114. let isValid = false;
  115. pipes.value.forEach((pipe) => {
  116. if (node.id == pipe.snId || node.id == pipe.enId) {
  117. isValid = true;
  118. return isValid;
  119. }
  120. });
  121. return isValid;
  122. }
  123. function lineShow() {
  124. console.log("模板加载..");
  125. //判断NODE 是否在管道中使用
  126. nodes.value.forEach((node) => {
  127. if (!nodeIsValid(node)) {
  128. delNodes.value.push(node);
  129. } else {
  130. validNodes.value.push(node);
  131. }
  132. });
  133. vtkmodel.modelInit(validNodes.value, pipes.value);
  134. readCheckNode();
  135. readSensor();
  136. // vtkmodel.selectNodes();
  137. // vtkmodel.selectByNodeId(178);
  138. // vtkmodel.selectPipes();
  139. // vtkmodel.selectByPipeId(253);
  140. // 用于用aid直接访问项目的特殊情况
  141. emitter.emit('AccessProjectByAid');
  142. }
  143. </script>
  144. <style scoped>
  145. .vtk {
  146. position: absolute;
  147. z-index: 150;
  148. top: 70px;
  149. }
  150. span {
  151. position: absolute;
  152. top: 2px;
  153. }
  154. </style>
  155. <style>
  156. .vtkmodel1 canvas{
  157. /* background-color: rgba(51,51,51,0.7); */
  158. /* background-color:#B5C7F0 ; */
  159. background-image: url(../../src/assets/img/BJ.png)!important;
  160. background-size: 100% 100%;
  161. background-repeat: no-repeat;
  162. }
  163. </style>