智慧水务管理系统 - 精河县供水工程综合管理平台

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. import destroyObject from "../Core/destroyObject.js";
  2. import Event from "../Core/Event.js";
  3. import EventHelper from "../Core/EventHelper.js";
  4. import BoxGeometryUpdater from "./BoxGeometryUpdater.js";
  5. import CorridorGeometryUpdater from "./CorridorGeometryUpdater.js";
  6. import CylinderGeometryUpdater from "./CylinderGeometryUpdater.js";
  7. import EllipseGeometryUpdater from "./EllipseGeometryUpdater.js";
  8. import EllipsoidGeometryUpdater from "./EllipsoidGeometryUpdater.js";
  9. import PlaneGeometryUpdater from "./PlaneGeometryUpdater.js";
  10. import PolygonGeometryUpdater from "./PolygonGeometryUpdater.js";
  11. import PolylineVolumeGeometryUpdater from "./PolylineVolumeGeometryUpdater.js";
  12. import RectangleGeometryUpdater from "./RectangleGeometryUpdater.js";
  13. import WallGeometryUpdater from "./WallGeometryUpdater.js";
  14. /** @type {GeometryUpdater[]} */
  15. const geometryUpdaters = [
  16. BoxGeometryUpdater,
  17. CylinderGeometryUpdater,
  18. CorridorGeometryUpdater,
  19. EllipseGeometryUpdater,
  20. EllipsoidGeometryUpdater,
  21. PlaneGeometryUpdater,
  22. PolygonGeometryUpdater,
  23. PolylineVolumeGeometryUpdater,
  24. RectangleGeometryUpdater,
  25. WallGeometryUpdater,
  26. ];
  27. /**
  28. * Manages a set of "updater" classes for the {@link GeometryVisualizer} for each entity
  29. *
  30. * @private
  31. * @param {Entity} entity
  32. * @param {Scene} scene
  33. */
  34. function GeometryUpdaterSet(entity, scene) {
  35. this.entity = entity;
  36. this.scene = scene;
  37. const updaters = new Array(geometryUpdaters.length);
  38. const geometryChanged = new Event();
  39. const eventHelper = new EventHelper();
  40. for (let i = 0; i < updaters.length; i++) {
  41. const updater = new geometryUpdaters[i](entity, scene);
  42. eventHelper.add(updater.geometryChanged, (geometry) => {
  43. geometryChanged.raiseEvent(geometry);
  44. });
  45. updaters[i] = updater;
  46. }
  47. this.updaters = updaters;
  48. this.geometryChanged = geometryChanged;
  49. this.eventHelper = eventHelper;
  50. this._removeEntitySubscription = entity.definitionChanged.addEventListener(
  51. GeometryUpdaterSet.prototype._onEntityPropertyChanged,
  52. this,
  53. );
  54. }
  55. GeometryUpdaterSet.prototype._onEntityPropertyChanged = function (
  56. entity,
  57. propertyName,
  58. newValue,
  59. oldValue,
  60. ) {
  61. const updaters = this.updaters;
  62. for (let i = 0; i < updaters.length; i++) {
  63. updaters[i]._onEntityPropertyChanged(
  64. entity,
  65. propertyName,
  66. newValue,
  67. oldValue,
  68. );
  69. }
  70. };
  71. GeometryUpdaterSet.prototype.forEach = function (callback) {
  72. const updaters = this.updaters;
  73. for (let i = 0; i < updaters.length; i++) {
  74. callback(updaters[i]);
  75. }
  76. };
  77. GeometryUpdaterSet.prototype.destroy = function () {
  78. this.eventHelper.removeAll();
  79. const updaters = this.updaters;
  80. for (let i = 0; i < updaters.length; i++) {
  81. updaters[i].destroy();
  82. }
  83. this._removeEntitySubscription();
  84. destroyObject(this);
  85. };
  86. /**
  87. * Add the provided updater to the default list of updaters if not already included
  88. * @param {GeometryUpdater} updater
  89. */
  90. GeometryUpdaterSet.registerUpdater = function (updater) {
  91. if (!geometryUpdaters.includes(updater)) {
  92. geometryUpdaters.push(updater);
  93. }
  94. };
  95. /**
  96. * Remove the provided updater from the default list of updaters if included
  97. * @param {GeometryUpdater} updater
  98. */
  99. GeometryUpdaterSet.unregisterUpdater = function (updater) {
  100. if (geometryUpdaters.includes(updater)) {
  101. const index = geometryUpdaters.indexOf(updater);
  102. geometryUpdaters.splice(index, 1);
  103. }
  104. };
  105. export default GeometryUpdaterSet;