@2112-lab/central-plant 0.1.4 → 0.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/dist/bundle/index.js +33146 -1
  2. package/dist/cjs/_virtual/_rollupPluginBabelHelpers.js +432 -1
  3. package/dist/cjs/node_modules/@2112-lab/pathfinder/dist/index.esm.js +1448 -1
  4. package/dist/cjs/node_modules/three/examples/jsm/controls/OrbitControls.js +1853 -1
  5. package/dist/cjs/node_modules/three/examples/jsm/exporters/GLTFExporter.js +3537 -1
  6. package/dist/cjs/node_modules/three/examples/jsm/exporters/OBJExporter.js +305 -1
  7. package/dist/cjs/node_modules/three/examples/jsm/exporters/PLYExporter.js +542 -1
  8. package/dist/cjs/node_modules/three/examples/jsm/exporters/STLExporter.js +218 -1
  9. package/dist/cjs/node_modules/three/examples/jsm/loaders/DRACOLoader.js +683 -1
  10. package/dist/cjs/node_modules/three/examples/jsm/loaders/GLTFLoader.js +4811 -1
  11. package/dist/cjs/node_modules/three/examples/jsm/loaders/RGBELoader.js +480 -1
  12. package/dist/cjs/node_modules/three/examples/jsm/renderers/CSS2DRenderer.js +309 -1
  13. package/dist/cjs/node_modules/three/examples/jsm/utils/BufferGeometryUtils.js +120 -1
  14. package/dist/cjs/src/analysis/analysis.js +560 -1
  15. package/dist/cjs/src/analysis/testing.js +958 -1
  16. package/dist/cjs/src/core/centralPlant.js +1149 -1
  17. package/dist/cjs/src/core/debugLogger.js +175 -1
  18. package/dist/cjs/src/core/mathUtils.js +574 -1
  19. package/dist/cjs/src/core/nameUtils.js +93 -1
  20. package/dist/cjs/src/data/export.js +716 -1
  21. package/dist/cjs/src/data/import.js +380 -1
  22. package/dist/cjs/src/data/numerics.js +522 -1
  23. package/dist/cjs/src/helpers/sceneHelper.js +572 -1
  24. package/dist/cjs/src/index.js +69 -1
  25. package/dist/cjs/src/managers/components/animationManager.js +123 -1
  26. package/dist/cjs/src/managers/components/componentManager.js +332 -1
  27. package/dist/cjs/src/managers/components/pathfindingManager.js +1441 -1
  28. package/dist/cjs/src/managers/controls/TransformControls.js +1063 -1
  29. package/dist/cjs/src/managers/controls/cameraControlsManager.js +79 -1
  30. package/dist/cjs/src/managers/controls/dragDropManager.js +1026 -1
  31. package/dist/cjs/src/managers/controls/keyboardControlsManager.js +395 -1
  32. package/dist/cjs/src/managers/controls/transformControlsManager.js +1807 -1
  33. package/dist/cjs/src/managers/environment/environmentManager.js +714 -1
  34. package/dist/cjs/src/managers/environment/textureConfig.js +229 -1
  35. package/dist/cjs/src/managers/scene/sceneExportManager.js +264 -1
  36. package/dist/cjs/src/managers/scene/sceneInitializationManager.js +346 -1
  37. package/dist/cjs/src/managers/scene/sceneOperationsManager.js +1509 -1
  38. package/dist/cjs/src/managers/scene/sceneTooltipsManager.js +661 -1
  39. package/dist/cjs/src/managers/system/disposalManager.js +444 -1
  40. package/dist/cjs/src/managers/system/hotReloadManager.js +291 -1
  41. package/dist/cjs/src/managers/system/performanceMonitor.js +863 -1
  42. package/dist/cjs/src/rendering/modelPreloader.js +369 -1
  43. package/dist/cjs/src/rendering/rendering2D.js +631 -1
  44. package/dist/cjs/src/rendering/rendering3D.js +685 -1
  45. package/dist/esm/_virtual/_rollupPluginBabelHelpers.js +396 -1
  46. package/dist/esm/node_modules/@2112-lab/pathfinder/dist/index.esm.js +1444 -1
  47. package/dist/esm/node_modules/three/examples/jsm/controls/OrbitControls.js +1849 -1
  48. package/dist/esm/node_modules/three/examples/jsm/exporters/GLTFExporter.js +3533 -1
  49. package/dist/esm/node_modules/three/examples/jsm/exporters/OBJExporter.js +301 -1
  50. package/dist/esm/node_modules/three/examples/jsm/exporters/PLYExporter.js +538 -1
  51. package/dist/esm/node_modules/three/examples/jsm/exporters/STLExporter.js +214 -1
  52. package/dist/esm/node_modules/three/examples/jsm/loaders/DRACOLoader.js +679 -1
  53. package/dist/esm/node_modules/three/examples/jsm/loaders/GLTFLoader.js +4807 -1
  54. package/dist/esm/node_modules/three/examples/jsm/loaders/RGBELoader.js +476 -1
  55. package/dist/esm/node_modules/three/examples/jsm/renderers/CSS2DRenderer.js +304 -1
  56. package/dist/esm/node_modules/three/examples/jsm/utils/BufferGeometryUtils.js +116 -1
  57. package/dist/esm/src/analysis/analysis.js +536 -1
  58. package/dist/esm/src/analysis/testing.js +954 -1
  59. package/dist/esm/src/core/centralPlant.js +1144 -1
  60. package/dist/esm/src/core/debugLogger.js +167 -1
  61. package/dist/esm/src/core/mathUtils.js +570 -1
  62. package/dist/esm/src/core/nameUtils.js +87 -1
  63. package/dist/esm/src/data/export.js +712 -1
  64. package/dist/esm/src/data/import.js +356 -1
  65. package/dist/esm/src/data/numerics.js +518 -1
  66. package/dist/esm/src/helpers/sceneHelper.js +547 -1
  67. package/dist/esm/src/index.js +35 -1
  68. package/dist/esm/src/managers/components/animationManager.js +119 -1
  69. package/dist/esm/src/managers/components/componentManager.js +328 -1
  70. package/dist/esm/src/managers/components/pathfindingManager.js +1417 -1
  71. package/dist/esm/src/managers/controls/TransformControls.js +1057 -1
  72. package/dist/esm/src/managers/controls/cameraControlsManager.js +75 -1
  73. package/dist/esm/src/managers/controls/dragDropManager.js +1002 -1
  74. package/dist/esm/src/managers/controls/keyboardControlsManager.js +371 -1
  75. package/dist/esm/src/managers/controls/transformControlsManager.js +1782 -1
  76. package/dist/esm/src/managers/environment/environmentManager.js +690 -1
  77. package/dist/esm/src/managers/environment/textureConfig.js +202 -1
  78. package/dist/esm/src/managers/scene/sceneExportManager.js +260 -1
  79. package/dist/esm/src/managers/scene/sceneInitializationManager.js +322 -1
  80. package/dist/esm/src/managers/scene/sceneOperationsManager.js +1485 -1
  81. package/dist/esm/src/managers/scene/sceneTooltipsManager.js +637 -1
  82. package/dist/esm/src/managers/system/disposalManager.js +440 -1
  83. package/dist/esm/src/managers/system/hotReloadManager.js +287 -1
  84. package/dist/esm/src/managers/system/performanceMonitor.js +858 -1
  85. package/dist/esm/src/rendering/modelPreloader.js +364 -1
  86. package/dist/esm/src/rendering/rendering2D.js +627 -1
  87. package/dist/esm/src/rendering/rendering3D.js +661 -1
  88. package/package.json +1 -1
@@ -1 +1,661 @@
1
- import{createClass as i,toConsumableArray as t,objectSpread2 as e,classCallCheck as n,defineProperty as o}from"../../_virtual/_rollupPluginBabelHelpers.js";import*as r from"three";import{logger as s}from"../core/debugLogger.js";var a=function(){return i(function i(){var s=this,a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};n(this,i),o(this,"lighting",{addAmbient:function(){var i,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:4210752,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:.4,n=new r.AmbientLight(t,e);return null===(i=s.scene)||void 0===i||i.add(n),n},addDirectional:function(){var i,e,n,o,a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},d=a.color,v=void 0===d?16777215:d,h=a.intensity,l=void 0===h?1:h,u=a.position,c=void 0===u?[10,10,5]:u,f=a.target,p=void 0===f?[0,0,0]:f,m=a.castShadow,w=void 0===m||m,g=a.shadowMapSize,y=void 0===g?2048:g,S=a.shadowCameraNear,M=void 0===S?.5:S,x=a.shadowCameraFar,k=void 0===x?50:x,C=a.shadowCameraLeft,P=void 0===C?-10:C,D=a.shadowCameraRight,b=void 0===D?10:D,R=a.shadowCameraTop,_=void 0===R?10:R,B=a.shadowCameraBottom,j=void 0===B?-10:B,z=new r.DirectionalLight(v,l);return(i=z.position).set.apply(i,t(c)),(e=z.target.position).set.apply(e,t(p)),w&&(z.castShadow=!0,z.shadow.mapSize.width=y,z.shadow.mapSize.height=y,z.shadow.camera.near=M,z.shadow.camera.far=k,z.shadow.camera.left=P,z.shadow.camera.right=b,z.shadow.camera.top=_,z.shadow.camera.bottom=j),null===(n=s.scene)||void 0===n||n.add(z),null===(o=s.scene)||void 0===o||o.add(z.target),z},addPoint:function(){var i,e,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},o=n.color,a=void 0===o?16777215:o,d=n.intensity,v=void 0===d?1:d,h=n.distance,l=void 0===h?0:h,u=n.decay,c=void 0===u?2:u,f=n.position,p=void 0===f?[0,10,0]:f,m=n.castShadow,w=void 0!==m&&m,g=n.shadowMapSize,y=void 0===g?1024:g,S=new r.PointLight(a,v,l,c);return(i=S.position).set.apply(i,t(p)),w&&(S.castShadow=!0,S.shadow.mapSize.width=y,S.shadow.mapSize.height=y,S.shadow.camera.near=.1,S.shadow.camera.far=25),null===(e=s.scene)||void 0===e||e.add(S),S},addSpot:function(){var i,e,n,o,a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},d=a.color,v=void 0===d?16777215:d,h=a.intensity,l=void 0===h?1:h,u=a.distance,c=void 0===u?0:u,f=a.angle,p=void 0===f?Math.PI/3:f,m=a.penumbra,w=void 0===m?0:m,g=a.decay,y=void 0===g?2:g,S=a.position,M=void 0===S?[0,10,0]:S,x=a.target,k=void 0===x?[0,0,0]:x,C=a.castShadow,P=void 0===C||C,D=a.shadowMapSize,b=void 0===D?1024:D,R=new r.SpotLight(v,l,c,p,w,y);return(i=R.position).set.apply(i,t(M)),(e=R.target.position).set.apply(e,t(k)),P&&(R.castShadow=!0,R.shadow.mapSize.width=b,R.shadow.mapSize.height=b,R.shadow.camera.near=.5,R.shadow.camera.far=50),null===(n=s.scene)||void 0===n||n.add(R),null===(o=s.scene)||void 0===o||o.add(R.target),R}}),o(this,"materials",{createStandard:function(){var i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return new r.MeshStandardMaterial(e({color:16777215,metalness:0,roughness:.5},i))},createPhysical:function(){var i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return new r.MeshPhysicalMaterial(e({color:16777215,metalness:0,roughness:.5,clearcoat:0,clearcoatRoughness:0},i))},createBasic:function(){var i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return new r.MeshBasicMaterial(e({color:16777215},i))},createShader:function(){var i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return new r.ShaderMaterial({vertexShader:i.vertexShader||"\n void main() {\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n }\n ",fragmentShader:i.fragmentShader||"\n void main() {\n gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);\n }\n ",uniforms:i.uniforms||{}})}}),o(this,"geometry",{createBox:function(){var i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1;return new r.BoxGeometry(i,t,e)},createSphere:function(){var i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:32,e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:16;return new r.SphereGeometry(i,t,e)},createCylinder:function(){var i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1,n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:32;return new r.CylinderGeometry(i,t,e,n)},createPlane:function(){var i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;return new r.PlaneGeometry(i,t)}}),o(this,"renderTargets",{create:function(i,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=new r.WebGLRenderTarget(i,t,e({minFilter:r.LinearFilter,magFilter:r.LinearFilter,format:r.RGBAFormat,type:r.UnsignedByteType},n)),a="rt_".concat(Date.now(),"_").concat(Math.random().toString(36).substr(2,9));return s.renderTargets.set(a,o),{id:a,renderTarget:o}},get:function(i){return s.renderTargets.get(i)},remove:function(i){var t=s.renderTargets.get(i);t&&(t.dispose(),s.renderTargets.delete(i))}}),o(this,"animation",{createMixer:function(i){return s.animationMixer=new r.AnimationMixer(i),s.animationMixer},addClip:function(i){if(!s.animationMixer)throw new Error("Animation mixer not created");return s.animationMixer.clipAction(i)},update:function(i){s.animationMixer&&s.animationMixer.update(i)}}),o(this,"screenshot",{toDataURL:function(){var i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"image/png",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;return s.renderer?s.renderer.domElement.toDataURL(i,t):""},toBlob:function(){var i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"image/png",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;return s.renderer?new Promise(function(e){s.renderer.domElement.toBlob(e,i,t)}):Promise.resolve(null)}}),this.options=e({antialias:!0,alpha:!0,shadowMapEnabled:!0,shadowMapType:r.PCFSoftShadowMap,toneMapping:r.ACESFilmicToneMapping,toneMappingExposure:1,outputColorSpace:r.SRGBColorSpace},a),this.renderer=null,this.scene=null,this.camera=null,this.controls=null,this.renderTargets=new Map,this.postProcessing={composer:null,passes:[]},this.stats={triangles:0,geometries:0,textures:0,calls:0,frameTime:0},this.animationMixer=null,this.clock=new r.Clock},[{key:"initializeRenderer",value:function(i){this.renderer&&this.dispose();try{return this.renderer=new r.WebGLRenderer({antialias:this.options.antialias,alpha:this.options.alpha,preserveDrawingBuffer:!1,powerPreference:"high-performance"}),this.renderer.setPixelRatio(Math.min(window.devicePixelRatio,2)),this.renderer.setSize(i.clientWidth,i.clientHeight),this.renderer.setClearColor(0,0),this.options.shadowMapEnabled&&(this.renderer.shadowMap.enabled=!0,this.renderer.shadowMap.type=this.options.shadowMapType),this.renderer.toneMapping=this.options.toneMapping,this.renderer.toneMappingExposure=this.options.toneMappingExposure,this.renderer.outputColorSpace=this.options.outputColorSpace,this.renderer.useLegacyLights=!1,i.appendChild(this.renderer.domElement),s.info("✅ 3D Renderer initialized"),this.renderer}catch(i){throw s.error("❌ Failed to initialize 3D renderer:",i),i}}},{key:"createScene",value:function(){var i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=i.background,e=void 0===t?null:t,n=i.environment,o=void 0===n?null:n,a=i.fog,d=void 0===a?null:a;return this.scene=new r.Scene,e&&("string"==typeof e?this.scene.background=new r.Color(e):e.isTexture&&(this.scene.background=e)),o&&o.isTexture&&(this.scene.environment=o),d&&("linear"===d.type?this.scene.fog=new r.Fog(d.color,d.near,d.far):"exponential"===d.type&&(this.scene.fog=new r.FogExp2(d.color,d.density))),s.info("✅ 3D Scene created"),this.scene}},{key:"createCamera",value:function(){var i,e,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"perspective",o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},a=null===(i=this.renderer)||void 0===i||null===(i=i.domElement)||void 0===i?void 0:i.parentElement,d=a?a.clientWidth/a.clientHeight:1;if("perspective"===n){var v=o.fov,h=void 0===v?75:v,l=o.near,u=void 0===l?.1:l,c=o.far,f=void 0===c?1e3:c;o.position,this.camera=new r.PerspectiveCamera(h,d,u,f)}else if("orthographic"===n){var p=o.left,m=void 0===p?-10:p,w=o.right,g=void 0===w?10:w,y=o.top,S=void 0===y?10:y,M=o.bottom,x=void 0===M?-10:M,k=o.near,C=void 0===k?.1:k,P=o.far,D=void 0===P?1e3:P;o.position,this.camera=new r.OrthographicCamera(m,g,S,x,C,D)}this.camera&&((e=this.camera.position).set.apply(e,t(position)),s.info("✅ ".concat(n," camera created")));return this.camera}},{key:"render",value:function(){var i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;if(this.renderer){var n=i||this.scene,o=t||this.camera;if(n&&o){var r=performance.now(),s=this.clock.getDelta();this.animation.update(s),this.renderer.render(n,o,e),this.stats.frameTime=performance.now()-r,this.updateRenderStats()}}}},{key:"updateRenderStats",value:function(){if(this.renderer){var i=this.renderer.info;this.stats.triangles=i.render.triangles,this.stats.geometries=i.memory.geometries,this.stats.textures=i.memory.textures,this.stats.calls=i.render.calls}}},{key:"getRenderStats",value:function(){return e({},this.stats)}},{key:"resize",value:function(i,t){if(this.renderer){if(this.renderer.setSize(i,t),this.camera){if(this.camera.isPerspectiveCamera)this.camera.aspect=i/t;else if(this.camera.isOrthographicCamera){var e=i/t;this.camera.left=-10*e,this.camera.right=10*e,this.camera.top=10,this.camera.bottom=-10}this.camera.updateProjectionMatrix()}this.renderTargets.forEach(function(e){e.setSize(i,t)})}}},{key:"dispose",value:function(){this.renderTargets.forEach(function(i){i.dispose()}),this.renderTargets.clear(),this.animationMixer&&(this.animationMixer.stopAllAction(),this.animationMixer=null),this.renderer&&(this.renderer.dispose(),this.renderer.forceContextLoss(),this.renderer.domElement.parentElement&&this.renderer.domElement.parentElement.removeChild(this.renderer.domElement),this.renderer=null),this.scene=null,this.camera=null,this.controls=null,s.info("✅ 3D Rendering disposed")}}])}();export{a as Rendering3D};
1
+ import { createClass as _createClass, toConsumableArray as _toConsumableArray, objectSpread2 as _objectSpread2, classCallCheck as _classCallCheck, defineProperty as _defineProperty } from '../../_virtual/_rollupPluginBabelHelpers.js';
2
+ import * as THREE from 'three';
3
+ import { logger } from '../core/debugLogger.js';
4
+
5
+ var Rendering3D = /*#__PURE__*/function () {
6
+ function Rendering3D() {
7
+ var _this = this;
8
+ var _options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
9
+ _classCallCheck(this, Rendering3D);
10
+ /**
11
+ * Lighting utilities
12
+ */
13
+ _defineProperty(this, "lighting", {
14
+ /**
15
+ * Add ambient light
16
+ * @param {number|string} color - Light color
17
+ * @param {number} intensity - Light intensity
18
+ * @returns {THREE.AmbientLight} Ambient light
19
+ */
20
+ addAmbient: function addAmbient() {
21
+ var _this$scene;
22
+ var color = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0x404040;
23
+ var intensity = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0.4;
24
+ var light = new THREE.AmbientLight(color, intensity);
25
+ (_this$scene = _this.scene) === null || _this$scene === void 0 || _this$scene.add(light);
26
+ return light;
27
+ },
28
+ /**
29
+ * Add directional light
30
+ * @param {Object} options - Light options
31
+ * @returns {THREE.DirectionalLight} Directional light
32
+ */
33
+ addDirectional: function addDirectional() {
34
+ var _light$position, _light$target$positio, _this$scene2, _this$scene3;
35
+ var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
36
+ var _options$color = options.color,
37
+ color = _options$color === void 0 ? 0xffffff : _options$color,
38
+ _options$intensity = options.intensity,
39
+ intensity = _options$intensity === void 0 ? 1 : _options$intensity,
40
+ _options$position = options.position,
41
+ position = _options$position === void 0 ? [10, 10, 5] : _options$position,
42
+ _options$target = options.target,
43
+ target = _options$target === void 0 ? [0, 0, 0] : _options$target,
44
+ _options$castShadow = options.castShadow,
45
+ castShadow = _options$castShadow === void 0 ? true : _options$castShadow,
46
+ _options$shadowMapSiz = options.shadowMapSize,
47
+ shadowMapSize = _options$shadowMapSiz === void 0 ? 2048 : _options$shadowMapSiz,
48
+ _options$shadowCamera = options.shadowCameraNear,
49
+ shadowCameraNear = _options$shadowCamera === void 0 ? 0.5 : _options$shadowCamera,
50
+ _options$shadowCamera2 = options.shadowCameraFar,
51
+ shadowCameraFar = _options$shadowCamera2 === void 0 ? 50 : _options$shadowCamera2,
52
+ _options$shadowCamera3 = options.shadowCameraLeft,
53
+ shadowCameraLeft = _options$shadowCamera3 === void 0 ? -10 : _options$shadowCamera3,
54
+ _options$shadowCamera4 = options.shadowCameraRight,
55
+ shadowCameraRight = _options$shadowCamera4 === void 0 ? 10 : _options$shadowCamera4,
56
+ _options$shadowCamera5 = options.shadowCameraTop,
57
+ shadowCameraTop = _options$shadowCamera5 === void 0 ? 10 : _options$shadowCamera5,
58
+ _options$shadowCamera6 = options.shadowCameraBottom,
59
+ shadowCameraBottom = _options$shadowCamera6 === void 0 ? -10 : _options$shadowCamera6;
60
+ var light = new THREE.DirectionalLight(color, intensity);
61
+ (_light$position = light.position).set.apply(_light$position, _toConsumableArray(position));
62
+ (_light$target$positio = light.target.position).set.apply(_light$target$positio, _toConsumableArray(target));
63
+ if (castShadow) {
64
+ light.castShadow = true;
65
+ light.shadow.mapSize.width = shadowMapSize;
66
+ light.shadow.mapSize.height = shadowMapSize;
67
+ light.shadow.camera.near = shadowCameraNear;
68
+ light.shadow.camera.far = shadowCameraFar;
69
+ light.shadow.camera.left = shadowCameraLeft;
70
+ light.shadow.camera.right = shadowCameraRight;
71
+ light.shadow.camera.top = shadowCameraTop;
72
+ light.shadow.camera.bottom = shadowCameraBottom;
73
+ }
74
+ (_this$scene2 = _this.scene) === null || _this$scene2 === void 0 || _this$scene2.add(light);
75
+ (_this$scene3 = _this.scene) === null || _this$scene3 === void 0 || _this$scene3.add(light.target);
76
+ return light;
77
+ },
78
+ /**
79
+ * Add point light
80
+ * @param {Object} options - Light options
81
+ * @returns {THREE.PointLight} Point light
82
+ */
83
+ addPoint: function addPoint() {
84
+ var _light$position2, _this$scene4;
85
+ var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
86
+ var _options$color2 = options.color,
87
+ color = _options$color2 === void 0 ? 0xffffff : _options$color2,
88
+ _options$intensity2 = options.intensity,
89
+ intensity = _options$intensity2 === void 0 ? 1 : _options$intensity2,
90
+ _options$distance = options.distance,
91
+ distance = _options$distance === void 0 ? 0 : _options$distance,
92
+ _options$decay = options.decay,
93
+ decay = _options$decay === void 0 ? 2 : _options$decay,
94
+ _options$position2 = options.position,
95
+ position = _options$position2 === void 0 ? [0, 10, 0] : _options$position2,
96
+ _options$castShadow2 = options.castShadow,
97
+ castShadow = _options$castShadow2 === void 0 ? false : _options$castShadow2,
98
+ _options$shadowMapSiz2 = options.shadowMapSize,
99
+ shadowMapSize = _options$shadowMapSiz2 === void 0 ? 1024 : _options$shadowMapSiz2;
100
+ var light = new THREE.PointLight(color, intensity, distance, decay);
101
+ (_light$position2 = light.position).set.apply(_light$position2, _toConsumableArray(position));
102
+ if (castShadow) {
103
+ light.castShadow = true;
104
+ light.shadow.mapSize.width = shadowMapSize;
105
+ light.shadow.mapSize.height = shadowMapSize;
106
+ light.shadow.camera.near = 0.1;
107
+ light.shadow.camera.far = 25;
108
+ }
109
+ (_this$scene4 = _this.scene) === null || _this$scene4 === void 0 || _this$scene4.add(light);
110
+ return light;
111
+ },
112
+ /**
113
+ * Add spotlight
114
+ * @param {Object} options - Light options
115
+ * @returns {THREE.SpotLight} Spotlight
116
+ */
117
+ addSpot: function addSpot() {
118
+ var _light$position3, _light$target$positio2, _this$scene5, _this$scene6;
119
+ var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
120
+ var _options$color3 = options.color,
121
+ color = _options$color3 === void 0 ? 0xffffff : _options$color3,
122
+ _options$intensity3 = options.intensity,
123
+ intensity = _options$intensity3 === void 0 ? 1 : _options$intensity3,
124
+ _options$distance2 = options.distance,
125
+ distance = _options$distance2 === void 0 ? 0 : _options$distance2,
126
+ _options$angle = options.angle,
127
+ angle = _options$angle === void 0 ? Math.PI / 3 : _options$angle,
128
+ _options$penumbra = options.penumbra,
129
+ penumbra = _options$penumbra === void 0 ? 0 : _options$penumbra,
130
+ _options$decay2 = options.decay,
131
+ decay = _options$decay2 === void 0 ? 2 : _options$decay2,
132
+ _options$position3 = options.position,
133
+ position = _options$position3 === void 0 ? [0, 10, 0] : _options$position3,
134
+ _options$target2 = options.target,
135
+ target = _options$target2 === void 0 ? [0, 0, 0] : _options$target2,
136
+ _options$castShadow3 = options.castShadow,
137
+ castShadow = _options$castShadow3 === void 0 ? true : _options$castShadow3,
138
+ _options$shadowMapSiz3 = options.shadowMapSize,
139
+ shadowMapSize = _options$shadowMapSiz3 === void 0 ? 1024 : _options$shadowMapSiz3;
140
+ var light = new THREE.SpotLight(color, intensity, distance, angle, penumbra, decay);
141
+ (_light$position3 = light.position).set.apply(_light$position3, _toConsumableArray(position));
142
+ (_light$target$positio2 = light.target.position).set.apply(_light$target$positio2, _toConsumableArray(target));
143
+ if (castShadow) {
144
+ light.castShadow = true;
145
+ light.shadow.mapSize.width = shadowMapSize;
146
+ light.shadow.mapSize.height = shadowMapSize;
147
+ light.shadow.camera.near = 0.5;
148
+ light.shadow.camera.far = 50;
149
+ }
150
+ (_this$scene5 = _this.scene) === null || _this$scene5 === void 0 || _this$scene5.add(light);
151
+ (_this$scene6 = _this.scene) === null || _this$scene6 === void 0 || _this$scene6.add(light.target);
152
+ return light;
153
+ }
154
+ });
155
+ /**
156
+ * Material utilities
157
+ */
158
+ _defineProperty(this, "materials", {
159
+ /**
160
+ * Create standard material
161
+ * @param {Object} options - Material options
162
+ * @returns {THREE.MeshStandardMaterial} Standard material
163
+ */
164
+ createStandard: function createStandard() {
165
+ var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
166
+ return new THREE.MeshStandardMaterial(_objectSpread2({
167
+ color: 0xffffff,
168
+ metalness: 0.0,
169
+ roughness: 0.5
170
+ }, options));
171
+ },
172
+ /**
173
+ * Create physical material
174
+ * @param {Object} options - Material options
175
+ * @returns {THREE.MeshPhysicalMaterial} Physical material
176
+ */
177
+ createPhysical: function createPhysical() {
178
+ var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
179
+ return new THREE.MeshPhysicalMaterial(_objectSpread2({
180
+ color: 0xffffff,
181
+ metalness: 0.0,
182
+ roughness: 0.5,
183
+ clearcoat: 0.0,
184
+ clearcoatRoughness: 0.0
185
+ }, options));
186
+ },
187
+ /**
188
+ * Create basic material
189
+ * @param {Object} options - Material options
190
+ * @returns {THREE.MeshBasicMaterial} Basic material
191
+ */
192
+ createBasic: function createBasic() {
193
+ var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
194
+ return new THREE.MeshBasicMaterial(_objectSpread2({
195
+ color: 0xffffff
196
+ }, options));
197
+ },
198
+ /**
199
+ * Create shader material
200
+ * @param {Object} options - Material options
201
+ * @returns {THREE.ShaderMaterial} Shader material
202
+ */
203
+ createShader: function createShader() {
204
+ var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
205
+ return new THREE.ShaderMaterial({
206
+ vertexShader: options.vertexShader || "\n void main() {\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n }\n ",
207
+ fragmentShader: options.fragmentShader || "\n void main() {\n gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);\n }\n ",
208
+ uniforms: options.uniforms || {}
209
+ });
210
+ }
211
+ });
212
+ /**
213
+ * Geometry utilities
214
+ */
215
+ _defineProperty(this, "geometry", {
216
+ /**
217
+ * Create box geometry
218
+ * @param {number} width - Width
219
+ * @param {number} height - Height
220
+ * @param {number} depth - Depth
221
+ * @returns {THREE.BoxGeometry} Box geometry
222
+ */
223
+ createBox: function createBox() {
224
+ var width = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;
225
+ var height = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
226
+ var depth = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
227
+ return new THREE.BoxGeometry(width, height, depth);
228
+ },
229
+ /**
230
+ * Create sphere geometry
231
+ * @param {number} radius - Radius
232
+ * @param {number} widthSegments - Width segments
233
+ * @param {number} heightSegments - Height segments
234
+ * @returns {THREE.SphereGeometry} Sphere geometry
235
+ */
236
+ createSphere: function createSphere() {
237
+ var radius = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;
238
+ var widthSegments = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 32;
239
+ var heightSegments = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 16;
240
+ return new THREE.SphereGeometry(radius, widthSegments, heightSegments);
241
+ },
242
+ /**
243
+ * Create cylinder geometry
244
+ * @param {number} radiusTop - Top radius
245
+ * @param {number} radiusBottom - Bottom radius
246
+ * @param {number} height - Height
247
+ * @param {number} radialSegments - Radial segments
248
+ * @returns {THREE.CylinderGeometry} Cylinder geometry
249
+ */
250
+ createCylinder: function createCylinder() {
251
+ var radiusTop = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;
252
+ var radiusBottom = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
253
+ var height = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
254
+ var radialSegments = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 32;
255
+ return new THREE.CylinderGeometry(radiusTop, radiusBottom, height, radialSegments);
256
+ },
257
+ /**
258
+ * Create plane geometry
259
+ * @param {number} width - Width
260
+ * @param {number} height - Height
261
+ * @returns {THREE.PlaneGeometry} Plane geometry
262
+ */
263
+ createPlane: function createPlane() {
264
+ var width = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;
265
+ var height = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
266
+ return new THREE.PlaneGeometry(width, height);
267
+ }
268
+ });
269
+ /**
270
+ * Render target utilities
271
+ */
272
+ _defineProperty(this, "renderTargets", {
273
+ /**
274
+ * Create render target
275
+ * @param {number} width - Width
276
+ * @param {number} height - Height
277
+ * @param {Object} options - Render target options
278
+ * @returns {THREE.WebGLRenderTarget} Render target
279
+ */
280
+ create: function create(width, height) {
281
+ var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
282
+ var renderTarget = new THREE.WebGLRenderTarget(width, height, _objectSpread2({
283
+ minFilter: THREE.LinearFilter,
284
+ magFilter: THREE.LinearFilter,
285
+ format: THREE.RGBAFormat,
286
+ type: THREE.UnsignedByteType
287
+ }, options));
288
+ var id = "rt_".concat(Date.now(), "_").concat(Math.random().toString(36).substr(2, 9));
289
+ _this.renderTargets.set(id, renderTarget);
290
+ return {
291
+ id: id,
292
+ renderTarget: renderTarget
293
+ };
294
+ },
295
+ /**
296
+ * Get render target by ID
297
+ * @param {string} id - Render target ID
298
+ * @returns {THREE.WebGLRenderTarget} Render target
299
+ */
300
+ get: function get(id) {
301
+ return _this.renderTargets.get(id);
302
+ },
303
+ /**
304
+ * Remove render target
305
+ * @param {string} id - Render target ID
306
+ */
307
+ remove: function remove(id) {
308
+ var renderTarget = _this.renderTargets.get(id);
309
+ if (renderTarget) {
310
+ renderTarget.dispose();
311
+ _this.renderTargets.delete(id);
312
+ }
313
+ }
314
+ });
315
+ /**
316
+ * Animation utilities
317
+ */
318
+ _defineProperty(this, "animation", {
319
+ /**
320
+ * Create animation mixer
321
+ * @param {THREE.Object3D} object - Object to animate
322
+ * @returns {THREE.AnimationMixer} Animation mixer
323
+ */
324
+ createMixer: function createMixer(object) {
325
+ _this.animationMixer = new THREE.AnimationMixer(object);
326
+ return _this.animationMixer;
327
+ },
328
+ /**
329
+ * Add animation clip
330
+ * @param {THREE.AnimationClip} clip - Animation clip
331
+ * @returns {THREE.AnimationAction} Animation action
332
+ */
333
+ addClip: function addClip(clip) {
334
+ if (!_this.animationMixer) {
335
+ throw new Error('Animation mixer not created');
336
+ }
337
+ return _this.animationMixer.clipAction(clip);
338
+ },
339
+ /**
340
+ * Update animations
341
+ * @param {number} deltaTime - Delta time
342
+ */
343
+ update: function update(deltaTime) {
344
+ if (_this.animationMixer) {
345
+ _this.animationMixer.update(deltaTime);
346
+ }
347
+ }
348
+ });
349
+ /**
350
+ * Screenshot utilities
351
+ */
352
+ _defineProperty(this, "screenshot", {
353
+ /**
354
+ * Capture screenshot as data URL
355
+ * @param {string} format - Image format
356
+ * @param {number} quality - Image quality (0-1)
357
+ * @returns {string} Data URL
358
+ */
359
+ toDataURL: function toDataURL() {
360
+ var format = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'image/png';
361
+ var quality = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1.0;
362
+ if (!_this.renderer) return '';
363
+ return _this.renderer.domElement.toDataURL(format, quality);
364
+ },
365
+ /**
366
+ * Capture screenshot as blob
367
+ * @param {string} format - Image format
368
+ * @param {number} quality - Image quality (0-1)
369
+ * @returns {Promise<Blob>} Image blob
370
+ */
371
+ toBlob: function toBlob() {
372
+ var format = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'image/png';
373
+ var quality = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1.0;
374
+ if (!_this.renderer) return Promise.resolve(null);
375
+ return new Promise(function (resolve) {
376
+ _this.renderer.domElement.toBlob(resolve, format, quality);
377
+ });
378
+ }
379
+ });
380
+ this.options = _objectSpread2({
381
+ antialias: true,
382
+ alpha: true,
383
+ shadowMapEnabled: true,
384
+ shadowMapType: THREE.PCFSoftShadowMap,
385
+ toneMapping: THREE.ACESFilmicToneMapping,
386
+ toneMappingExposure: 1.0,
387
+ outputColorSpace: THREE.SRGBColorSpace
388
+ }, _options);
389
+ this.renderer = null;
390
+ this.scene = null;
391
+ this.camera = null;
392
+ this.controls = null;
393
+ this.renderTargets = new Map();
394
+ this.postProcessing = {
395
+ composer: null,
396
+ passes: []
397
+ };
398
+ this.stats = {
399
+ triangles: 0,
400
+ geometries: 0,
401
+ textures: 0,
402
+ calls: 0,
403
+ frameTime: 0
404
+ };
405
+ this.animationMixer = null;
406
+ this.clock = new THREE.Clock();
407
+ }
408
+
409
+ /**
410
+ * Initialize renderer
411
+ * @param {HTMLElement} container - Container element
412
+ * @returns {THREE.WebGLRenderer} Renderer instance
413
+ */
414
+ return _createClass(Rendering3D, [{
415
+ key: "initializeRenderer",
416
+ value: function initializeRenderer(container) {
417
+ if (this.renderer) {
418
+ this.dispose();
419
+ }
420
+ try {
421
+ this.renderer = new THREE.WebGLRenderer({
422
+ antialias: this.options.antialias,
423
+ alpha: this.options.alpha,
424
+ preserveDrawingBuffer: false,
425
+ powerPreference: 'high-performance'
426
+ });
427
+
428
+ // Configure renderer
429
+ this.renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2));
430
+ this.renderer.setSize(container.clientWidth, container.clientHeight);
431
+ this.renderer.setClearColor(0x000000, 0);
432
+
433
+ // Shadow mapping
434
+ if (this.options.shadowMapEnabled) {
435
+ this.renderer.shadowMap.enabled = true;
436
+ this.renderer.shadowMap.type = this.options.shadowMapType;
437
+ }
438
+
439
+ // Tone mapping
440
+ this.renderer.toneMapping = this.options.toneMapping;
441
+ this.renderer.toneMappingExposure = this.options.toneMappingExposure;
442
+ this.renderer.outputColorSpace = this.options.outputColorSpace;
443
+
444
+ // Physical lights
445
+ this.renderer.useLegacyLights = false;
446
+ container.appendChild(this.renderer.domElement);
447
+ logger.info('✅ 3D Renderer initialized');
448
+ return this.renderer;
449
+ } catch (error) {
450
+ logger.error('❌ Failed to initialize 3D renderer:', error);
451
+ throw error;
452
+ }
453
+ }
454
+
455
+ /**
456
+ * Create and configure scene
457
+ * @param {Object} options - Scene options
458
+ * @returns {THREE.Scene} Scene instance
459
+ */
460
+ }, {
461
+ key: "createScene",
462
+ value: function createScene() {
463
+ var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
464
+ var _options$background = options.background,
465
+ background = _options$background === void 0 ? null : _options$background,
466
+ _options$environment = options.environment,
467
+ environment = _options$environment === void 0 ? null : _options$environment,
468
+ _options$fog = options.fog,
469
+ fog = _options$fog === void 0 ? null : _options$fog;
470
+ this.scene = new THREE.Scene();
471
+ if (background) {
472
+ if (typeof background === 'string') {
473
+ this.scene.background = new THREE.Color(background);
474
+ } else if (background.isTexture) {
475
+ this.scene.background = background;
476
+ }
477
+ }
478
+ if (environment && environment.isTexture) {
479
+ this.scene.environment = environment;
480
+ }
481
+ if (fog) {
482
+ if (fog.type === 'linear') {
483
+ this.scene.fog = new THREE.Fog(fog.color, fog.near, fog.far);
484
+ } else if (fog.type === 'exponential') {
485
+ this.scene.fog = new THREE.FogExp2(fog.color, fog.density);
486
+ }
487
+ }
488
+ logger.info('✅ 3D Scene created');
489
+ return this.scene;
490
+ }
491
+
492
+ /**
493
+ * Create camera
494
+ * @param {string} type - Camera type ('perspective' or 'orthographic')
495
+ * @param {Object} options - Camera options
496
+ * @returns {THREE.Camera} Camera instance
497
+ */
498
+ }, {
499
+ key: "createCamera",
500
+ value: function createCamera() {
501
+ var _this$renderer;
502
+ var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'perspective';
503
+ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
504
+ var container = (_this$renderer = this.renderer) === null || _this$renderer === void 0 || (_this$renderer = _this$renderer.domElement) === null || _this$renderer === void 0 ? void 0 : _this$renderer.parentElement;
505
+ var aspect = container ? container.clientWidth / container.clientHeight : 1;
506
+ if (type === 'perspective') {
507
+ var _options$fov = options.fov,
508
+ fov = _options$fov === void 0 ? 75 : _options$fov,
509
+ _options$near = options.near,
510
+ near = _options$near === void 0 ? 0.1 : _options$near,
511
+ _options$far = options.far,
512
+ far = _options$far === void 0 ? 1000 : _options$far;
513
+ options.position;
514
+ this.camera = new THREE.PerspectiveCamera(fov, aspect, near, far);
515
+ } else if (type === 'orthographic') {
516
+ var _options$left = options.left,
517
+ left = _options$left === void 0 ? -10 : _options$left,
518
+ _options$right = options.right,
519
+ right = _options$right === void 0 ? 10 : _options$right,
520
+ _options$top = options.top,
521
+ top = _options$top === void 0 ? 10 : _options$top,
522
+ _options$bottom = options.bottom,
523
+ bottom = _options$bottom === void 0 ? -10 : _options$bottom,
524
+ _options$near2 = options.near,
525
+ _near = _options$near2 === void 0 ? 0.1 : _options$near2,
526
+ _options$far2 = options.far,
527
+ _far = _options$far2 === void 0 ? 1000 : _options$far2;
528
+ options.position;
529
+ this.camera = new THREE.OrthographicCamera(left, right, top, bottom, _near, _far);
530
+ }
531
+ if (this.camera) {
532
+ var _this$camera$position;
533
+ (_this$camera$position = this.camera.position).set.apply(_this$camera$position, _toConsumableArray(position));
534
+ logger.info("\u2705 ".concat(type, " camera created"));
535
+ }
536
+ return this.camera;
537
+ }
538
+ }, {
539
+ key: "render",
540
+ value:
541
+ /**
542
+ * Render scene
543
+ * @param {THREE.Scene} scene - Scene to render (optional)
544
+ * @param {THREE.Camera} camera - Camera to use (optional)
545
+ * @param {THREE.WebGLRenderTarget} renderTarget - Render target (optional)
546
+ */
547
+ function render() {
548
+ var scene = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
549
+ var camera = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
550
+ var renderTarget = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
551
+ if (!this.renderer) return;
552
+ var renderScene = scene || this.scene;
553
+ var renderCamera = camera || this.camera;
554
+ if (!renderScene || !renderCamera) return;
555
+
556
+ // Update stats
557
+ var startTime = performance.now();
558
+
559
+ // Update animations
560
+ var deltaTime = this.clock.getDelta();
561
+ this.animation.update(deltaTime);
562
+
563
+ // Render
564
+ this.renderer.render(renderScene, renderCamera, renderTarget);
565
+
566
+ // Update stats
567
+ this.stats.frameTime = performance.now() - startTime;
568
+ this.updateRenderStats();
569
+ }
570
+
571
+ /**
572
+ * Update render statistics
573
+ */
574
+ }, {
575
+ key: "updateRenderStats",
576
+ value: function updateRenderStats() {
577
+ if (!this.renderer) return;
578
+ var info = this.renderer.info;
579
+ this.stats.triangles = info.render.triangles;
580
+ this.stats.geometries = info.memory.geometries;
581
+ this.stats.textures = info.memory.textures;
582
+ this.stats.calls = info.render.calls;
583
+ }
584
+
585
+ /**
586
+ * Get render statistics
587
+ * @returns {Object} Render stats
588
+ */
589
+ }, {
590
+ key: "getRenderStats",
591
+ value: function getRenderStats() {
592
+ return _objectSpread2({}, this.stats);
593
+ }
594
+
595
+ /**
596
+ * Resize renderer
597
+ * @param {number} width - New width
598
+ * @param {number} height - New height
599
+ */
600
+ }, {
601
+ key: "resize",
602
+ value: function resize(width, height) {
603
+ if (!this.renderer) return;
604
+ this.renderer.setSize(width, height);
605
+ if (this.camera) {
606
+ if (this.camera.isPerspectiveCamera) {
607
+ this.camera.aspect = width / height;
608
+ } else if (this.camera.isOrthographicCamera) {
609
+ var aspect = width / height;
610
+ this.camera.left = -10 * aspect;
611
+ this.camera.right = 10 * aspect;
612
+ this.camera.top = 10;
613
+ this.camera.bottom = -10;
614
+ }
615
+ this.camera.updateProjectionMatrix();
616
+ }
617
+
618
+ // Update render targets
619
+ this.renderTargets.forEach(function (renderTarget) {
620
+ renderTarget.setSize(width, height);
621
+ });
622
+ }
623
+ }, {
624
+ key: "dispose",
625
+ value:
626
+ /**
627
+ * Dispose of all resources
628
+ */
629
+ function dispose() {
630
+ // Dispose render targets
631
+ this.renderTargets.forEach(function (renderTarget) {
632
+ renderTarget.dispose();
633
+ });
634
+ this.renderTargets.clear();
635
+
636
+ // Dispose animation mixer
637
+ if (this.animationMixer) {
638
+ this.animationMixer.stopAllAction();
639
+ this.animationMixer = null;
640
+ }
641
+
642
+ // Dispose renderer
643
+ if (this.renderer) {
644
+ this.renderer.dispose();
645
+ this.renderer.forceContextLoss();
646
+ if (this.renderer.domElement.parentElement) {
647
+ this.renderer.domElement.parentElement.removeChild(this.renderer.domElement);
648
+ }
649
+ this.renderer = null;
650
+ }
651
+
652
+ // Clear references
653
+ this.scene = null;
654
+ this.camera = null;
655
+ this.controls = null;
656
+ logger.info('✅ 3D Rendering disposed');
657
+ }
658
+ }]);
659
+ }();
660
+
661
+ export { Rendering3D };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@2112-lab/central-plant",
3
- "version": "0.1.4",
3
+ "version": "0.1.6",
4
4
  "description": "Utility modules for the Central Plant Application",
5
5
  "main": "dist/bundle/index.js",
6
6
  "module": "dist/esm/index.js",