@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.
- package/dist/bundle/index.js +33146 -1
- package/dist/cjs/_virtual/_rollupPluginBabelHelpers.js +432 -1
- package/dist/cjs/node_modules/@2112-lab/pathfinder/dist/index.esm.js +1448 -1
- package/dist/cjs/node_modules/three/examples/jsm/controls/OrbitControls.js +1853 -1
- package/dist/cjs/node_modules/three/examples/jsm/exporters/GLTFExporter.js +3537 -1
- package/dist/cjs/node_modules/three/examples/jsm/exporters/OBJExporter.js +305 -1
- package/dist/cjs/node_modules/three/examples/jsm/exporters/PLYExporter.js +542 -1
- package/dist/cjs/node_modules/three/examples/jsm/exporters/STLExporter.js +218 -1
- package/dist/cjs/node_modules/three/examples/jsm/loaders/DRACOLoader.js +683 -1
- package/dist/cjs/node_modules/three/examples/jsm/loaders/GLTFLoader.js +4811 -1
- package/dist/cjs/node_modules/three/examples/jsm/loaders/RGBELoader.js +480 -1
- package/dist/cjs/node_modules/three/examples/jsm/renderers/CSS2DRenderer.js +309 -1
- package/dist/cjs/node_modules/three/examples/jsm/utils/BufferGeometryUtils.js +120 -1
- package/dist/cjs/src/analysis/analysis.js +560 -1
- package/dist/cjs/src/analysis/testing.js +958 -1
- package/dist/cjs/src/core/centralPlant.js +1149 -1
- package/dist/cjs/src/core/debugLogger.js +175 -1
- package/dist/cjs/src/core/mathUtils.js +574 -1
- package/dist/cjs/src/core/nameUtils.js +93 -1
- package/dist/cjs/src/data/export.js +716 -1
- package/dist/cjs/src/data/import.js +380 -1
- package/dist/cjs/src/data/numerics.js +522 -1
- package/dist/cjs/src/helpers/sceneHelper.js +572 -1
- package/dist/cjs/src/index.js +69 -1
- package/dist/cjs/src/managers/components/animationManager.js +123 -1
- package/dist/cjs/src/managers/components/componentManager.js +332 -1
- package/dist/cjs/src/managers/components/pathfindingManager.js +1441 -1
- package/dist/cjs/src/managers/controls/TransformControls.js +1063 -1
- package/dist/cjs/src/managers/controls/cameraControlsManager.js +79 -1
- package/dist/cjs/src/managers/controls/dragDropManager.js +1026 -1
- package/dist/cjs/src/managers/controls/keyboardControlsManager.js +395 -1
- package/dist/cjs/src/managers/controls/transformControlsManager.js +1807 -1
- package/dist/cjs/src/managers/environment/environmentManager.js +714 -1
- package/dist/cjs/src/managers/environment/textureConfig.js +229 -1
- package/dist/cjs/src/managers/scene/sceneExportManager.js +264 -1
- package/dist/cjs/src/managers/scene/sceneInitializationManager.js +346 -1
- package/dist/cjs/src/managers/scene/sceneOperationsManager.js +1509 -1
- package/dist/cjs/src/managers/scene/sceneTooltipsManager.js +661 -1
- package/dist/cjs/src/managers/system/disposalManager.js +444 -1
- package/dist/cjs/src/managers/system/hotReloadManager.js +291 -1
- package/dist/cjs/src/managers/system/performanceMonitor.js +863 -1
- package/dist/cjs/src/rendering/modelPreloader.js +369 -1
- package/dist/cjs/src/rendering/rendering2D.js +631 -1
- package/dist/cjs/src/rendering/rendering3D.js +685 -1
- package/dist/esm/_virtual/_rollupPluginBabelHelpers.js +396 -1
- package/dist/esm/node_modules/@2112-lab/pathfinder/dist/index.esm.js +1444 -1
- package/dist/esm/node_modules/three/examples/jsm/controls/OrbitControls.js +1849 -1
- package/dist/esm/node_modules/three/examples/jsm/exporters/GLTFExporter.js +3533 -1
- package/dist/esm/node_modules/three/examples/jsm/exporters/OBJExporter.js +301 -1
- package/dist/esm/node_modules/three/examples/jsm/exporters/PLYExporter.js +538 -1
- package/dist/esm/node_modules/three/examples/jsm/exporters/STLExporter.js +214 -1
- package/dist/esm/node_modules/three/examples/jsm/loaders/DRACOLoader.js +679 -1
- package/dist/esm/node_modules/three/examples/jsm/loaders/GLTFLoader.js +4807 -1
- package/dist/esm/node_modules/three/examples/jsm/loaders/RGBELoader.js +476 -1
- package/dist/esm/node_modules/three/examples/jsm/renderers/CSS2DRenderer.js +304 -1
- package/dist/esm/node_modules/three/examples/jsm/utils/BufferGeometryUtils.js +116 -1
- package/dist/esm/src/analysis/analysis.js +536 -1
- package/dist/esm/src/analysis/testing.js +954 -1
- package/dist/esm/src/core/centralPlant.js +1144 -1
- package/dist/esm/src/core/debugLogger.js +167 -1
- package/dist/esm/src/core/mathUtils.js +570 -1
- package/dist/esm/src/core/nameUtils.js +87 -1
- package/dist/esm/src/data/export.js +712 -1
- package/dist/esm/src/data/import.js +356 -1
- package/dist/esm/src/data/numerics.js +518 -1
- package/dist/esm/src/helpers/sceneHelper.js +547 -1
- package/dist/esm/src/index.js +35 -1
- package/dist/esm/src/managers/components/animationManager.js +119 -1
- package/dist/esm/src/managers/components/componentManager.js +328 -1
- package/dist/esm/src/managers/components/pathfindingManager.js +1417 -1
- package/dist/esm/src/managers/controls/TransformControls.js +1057 -1
- package/dist/esm/src/managers/controls/cameraControlsManager.js +75 -1
- package/dist/esm/src/managers/controls/dragDropManager.js +1002 -1
- package/dist/esm/src/managers/controls/keyboardControlsManager.js +371 -1
- package/dist/esm/src/managers/controls/transformControlsManager.js +1782 -1
- package/dist/esm/src/managers/environment/environmentManager.js +690 -1
- package/dist/esm/src/managers/environment/textureConfig.js +202 -1
- package/dist/esm/src/managers/scene/sceneExportManager.js +260 -1
- package/dist/esm/src/managers/scene/sceneInitializationManager.js +322 -1
- package/dist/esm/src/managers/scene/sceneOperationsManager.js +1485 -1
- package/dist/esm/src/managers/scene/sceneTooltipsManager.js +637 -1
- package/dist/esm/src/managers/system/disposalManager.js +440 -1
- package/dist/esm/src/managers/system/hotReloadManager.js +287 -1
- package/dist/esm/src/managers/system/performanceMonitor.js +858 -1
- package/dist/esm/src/rendering/modelPreloader.js +364 -1
- package/dist/esm/src/rendering/rendering2D.js +627 -1
- package/dist/esm/src/rendering/rendering3D.js +661 -1
- package/package.json +1 -1
|
@@ -1 +1,547 @@
|
|
|
1
|
-
import{createClass as
|
|
1
|
+
import { createClass as _createClass, objectSpread2 as _objectSpread2, classCallCheck as _classCallCheck } from '../../_virtual/_rollupPluginBabelHelpers.js';
|
|
2
|
+
import * as THREE from 'three';
|
|
3
|
+
import { getHardcodedUuid } from '../core/nameUtils.js';
|
|
4
|
+
|
|
5
|
+
var SceneHelper = /*#__PURE__*/function () {
|
|
6
|
+
function SceneHelper() {
|
|
7
|
+
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
8
|
+
_classCallCheck(this, SceneHelper);
|
|
9
|
+
// Core Three.js references
|
|
10
|
+
this.scene = options.scene || null;
|
|
11
|
+
this.camera = options.camera || null;
|
|
12
|
+
this.renderer = options.renderer || null;
|
|
13
|
+
this.controls = options.controls || null;
|
|
14
|
+
|
|
15
|
+
// Manager references
|
|
16
|
+
this.transformManager = options.transformManager || null;
|
|
17
|
+
this.componentManager = options.componentManager || null;
|
|
18
|
+
this.pathfindingManager = options.pathfindingManager || null;
|
|
19
|
+
|
|
20
|
+
// Scene data
|
|
21
|
+
this.currentSceneData = options.currentSceneData || null;
|
|
22
|
+
|
|
23
|
+
// Logger
|
|
24
|
+
this.logger = options.logger || console;
|
|
25
|
+
|
|
26
|
+
// Initialize state
|
|
27
|
+
this.isInitialized = false;
|
|
28
|
+
this.selectedObject = null;
|
|
29
|
+
this.sceneObjects = [];
|
|
30
|
+
this.logger.info('๐ง SceneHelper initialized');
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Initialize the scene helper with Three.js components
|
|
35
|
+
* @param {Object} components - Object containing scene, camera, renderer, etc.
|
|
36
|
+
*/
|
|
37
|
+
return _createClass(SceneHelper, [{
|
|
38
|
+
key: "initialize",
|
|
39
|
+
value: function initialize(components) {
|
|
40
|
+
this.scene = components.scene;
|
|
41
|
+
this.camera = components.camera;
|
|
42
|
+
this.renderer = components.renderer;
|
|
43
|
+
this.controls = components.controls;
|
|
44
|
+
this.transformManager = components.transformManager;
|
|
45
|
+
this.componentManager = components.componentManager;
|
|
46
|
+
this.pathfindingManager = components.pathfindingManager;
|
|
47
|
+
this.currentSceneData = components.currentSceneData;
|
|
48
|
+
this.isInitialized = true;
|
|
49
|
+
this.logger.info('โ
SceneHelper initialized with scene components');
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Update scene data reference
|
|
54
|
+
* @param {Object} sceneData - Current scene data
|
|
55
|
+
*/
|
|
56
|
+
}, {
|
|
57
|
+
key: "updateSceneData",
|
|
58
|
+
value: function updateSceneData(sceneData) {
|
|
59
|
+
this.currentSceneData = sceneData;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Check if the scene helper is properly initialized
|
|
64
|
+
* @returns {boolean} True if initialized
|
|
65
|
+
*/
|
|
66
|
+
}, {
|
|
67
|
+
key: "isReady",
|
|
68
|
+
value: function isReady() {
|
|
69
|
+
return this.isInitialized && this.scene && this.camera && this.renderer;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// ===== SCENE OBJECT OPERATIONS =====
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Get all scene objects with filtering options
|
|
76
|
+
* @param {Object} options - Filtering options
|
|
77
|
+
* @returns {Array} Array of scene objects
|
|
78
|
+
*/
|
|
79
|
+
}, {
|
|
80
|
+
key: "getSceneObjects",
|
|
81
|
+
value: function getSceneObjects() {
|
|
82
|
+
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
83
|
+
if (!this.scene) {
|
|
84
|
+
this.logger.warn('โ ๏ธ Scene not available for object retrieval');
|
|
85
|
+
return [];
|
|
86
|
+
}
|
|
87
|
+
var _options$includeCompo = options.includeComponents,
|
|
88
|
+
includeComponents = _options$includeCompo === void 0 ? true : _options$includeCompo,
|
|
89
|
+
_options$includeConne = options.includeConnectors,
|
|
90
|
+
includeConnectors = _options$includeConne === void 0 ? true : _options$includeConne,
|
|
91
|
+
_options$includeGatew = options.includeGateways,
|
|
92
|
+
includeGateways = _options$includeGatew === void 0 ? true : _options$includeGatew,
|
|
93
|
+
_options$includeHelpe = options.includeHelpers,
|
|
94
|
+
includeHelpers = _options$includeHelpe === void 0 ? false : _options$includeHelpe,
|
|
95
|
+
_options$includeInvis = options.includeInvisible,
|
|
96
|
+
includeInvisible = _options$includeInvis === void 0 ? false : _options$includeInvis,
|
|
97
|
+
_options$componentTyp = options.componentTypesFilter,
|
|
98
|
+
componentTypesFilter = _options$componentTyp === void 0 ? null : _options$componentTyp;
|
|
99
|
+
var objects = [];
|
|
100
|
+
this.scene.traverse(function (object) {
|
|
101
|
+
// Skip objects without valid userData
|
|
102
|
+
if (!object.userData) return;
|
|
103
|
+
var componentType = object.userData.componentType;
|
|
104
|
+
var isVisible = object.visible;
|
|
105
|
+
|
|
106
|
+
// Apply visibility filter
|
|
107
|
+
if (!includeInvisible && !isVisible) return;
|
|
108
|
+
|
|
109
|
+
// Apply component type filters
|
|
110
|
+
if (componentType === 'component' && !includeComponents) return;
|
|
111
|
+
if (componentType === 'connector' && !includeConnectors) return;
|
|
112
|
+
if (componentType === 'gateway' && !includeGateways) return;
|
|
113
|
+
if (componentType === 'helper' && !includeHelpers) return;
|
|
114
|
+
|
|
115
|
+
// Apply specific component types filter
|
|
116
|
+
if (componentTypesFilter && Array.isArray(componentTypesFilter)) {
|
|
117
|
+
if (!componentTypesFilter.includes(componentType)) return;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
// Skip internal objects and helpers by name
|
|
121
|
+
if (object.name && (object.name.includes('helper') || object.name.includes('Helper') || object.name.includes('controls') || object.name === 'CameraGimbal' || object.type === 'GridHelper' || object.type === 'AxesHelper')) {
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
objects.push({
|
|
125
|
+
uuid: getHardcodedUuid(object),
|
|
126
|
+
name: object.name || 'Unnamed Object',
|
|
127
|
+
type: object.type,
|
|
128
|
+
object: object,
|
|
129
|
+
componentType: componentType,
|
|
130
|
+
position: object.position.clone(),
|
|
131
|
+
rotation: object.rotation.clone(),
|
|
132
|
+
scale: object.scale.clone(),
|
|
133
|
+
visible: isVisible,
|
|
134
|
+
userData: _objectSpread2({}, object.userData)
|
|
135
|
+
});
|
|
136
|
+
});
|
|
137
|
+
return objects;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Get scene objects in a hierarchical structure
|
|
142
|
+
* @param {Object} options - Filtering options
|
|
143
|
+
* @returns {Array} Hierarchical array of scene objects
|
|
144
|
+
*/
|
|
145
|
+
}, {
|
|
146
|
+
key: "getSceneObjectsHierarchy",
|
|
147
|
+
value: function getSceneObjectsHierarchy() {
|
|
148
|
+
if (!this.scene) {
|
|
149
|
+
this.logger.warn('โ ๏ธ Scene not available for hierarchy retrieval');
|
|
150
|
+
return [];
|
|
151
|
+
}
|
|
152
|
+
var _createHierarchy = function createHierarchy(object) {
|
|
153
|
+
var _object$userData;
|
|
154
|
+
var level = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
|
|
155
|
+
// Skip internal objects and helpers
|
|
156
|
+
if (object.name && (object.name.includes('helper') || object.name.includes('Helper') || object.name.includes('controls') || object.name === 'CameraGimbal') || object.type === 'GridHelper' || object.type === 'AxesHelper') {
|
|
157
|
+
return null;
|
|
158
|
+
}
|
|
159
|
+
var componentType = (_object$userData = object.userData) === null || _object$userData === void 0 ? void 0 : _object$userData.componentType;
|
|
160
|
+
var shouldInclude = object.type === 'Scene' || componentType === 'component' || componentType === 'connector' || componentType === 'gateway';
|
|
161
|
+
if (!shouldInclude && object.type !== 'Scene') {
|
|
162
|
+
return null;
|
|
163
|
+
}
|
|
164
|
+
var hierarchyItem = {
|
|
165
|
+
uuid: getHardcodedUuid(object),
|
|
166
|
+
name: object.name || 'Unnamed Object',
|
|
167
|
+
type: object.type,
|
|
168
|
+
object: object,
|
|
169
|
+
componentType: componentType || 'other',
|
|
170
|
+
level: level,
|
|
171
|
+
visible: object.visible,
|
|
172
|
+
children: []
|
|
173
|
+
};
|
|
174
|
+
|
|
175
|
+
// Process children
|
|
176
|
+
if (object.children && object.children.length > 0) {
|
|
177
|
+
object.children.forEach(function (child) {
|
|
178
|
+
var childItem = _createHierarchy(child, level + 1);
|
|
179
|
+
if (childItem) {
|
|
180
|
+
hierarchyItem.children.push(childItem);
|
|
181
|
+
}
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
return hierarchyItem;
|
|
185
|
+
};
|
|
186
|
+
|
|
187
|
+
// Start from scene children to avoid including the scene root
|
|
188
|
+
var hierarchy = [];
|
|
189
|
+
if (this.scene.children && this.scene.children.length > 0) {
|
|
190
|
+
this.scene.children.forEach(function (child) {
|
|
191
|
+
var childItem = _createHierarchy(child, 0);
|
|
192
|
+
if (childItem) {
|
|
193
|
+
hierarchy.push(childItem);
|
|
194
|
+
}
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
return hierarchy;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
/**
|
|
201
|
+
* Find an object in the scene by UUID
|
|
202
|
+
* @param {string} uuid - Object UUID to find
|
|
203
|
+
* @returns {Object|null} Found object or null
|
|
204
|
+
*/
|
|
205
|
+
}, {
|
|
206
|
+
key: "findObjectByUuid",
|
|
207
|
+
value: function findObjectByUuid(uuid) {
|
|
208
|
+
if (!this.scene || !uuid) return null;
|
|
209
|
+
var foundObject = null;
|
|
210
|
+
this.scene.traverse(function (object) {
|
|
211
|
+
if (getHardcodedUuid(object) === uuid) {
|
|
212
|
+
foundObject = object;
|
|
213
|
+
return; // Stop traversal
|
|
214
|
+
}
|
|
215
|
+
});
|
|
216
|
+
return foundObject;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
/**
|
|
220
|
+
* Find objects by name (supports partial matching)
|
|
221
|
+
* @param {string} name - Object name to search for
|
|
222
|
+
* @param {boolean} exactMatch - Whether to use exact matching
|
|
223
|
+
* @returns {Array} Array of matching objects
|
|
224
|
+
*/
|
|
225
|
+
}, {
|
|
226
|
+
key: "findObjectsByName",
|
|
227
|
+
value: function findObjectsByName(name) {
|
|
228
|
+
var exactMatch = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
229
|
+
if (!this.scene || !name) return [];
|
|
230
|
+
var foundObjects = [];
|
|
231
|
+
this.scene.traverse(function (object) {
|
|
232
|
+
if (object.name) {
|
|
233
|
+
var matches = exactMatch ? object.name === name : object.name.toLowerCase().includes(name.toLowerCase());
|
|
234
|
+
if (matches) {
|
|
235
|
+
foundObjects.push(object);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
});
|
|
239
|
+
return foundObjects;
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
/**
|
|
243
|
+
* Find objects by component type
|
|
244
|
+
* @param {string} componentType - Component type to search for
|
|
245
|
+
* @returns {Array} Array of matching objects
|
|
246
|
+
*/
|
|
247
|
+
}, {
|
|
248
|
+
key: "findObjectsByComponentType",
|
|
249
|
+
value: function findObjectsByComponentType(componentType) {
|
|
250
|
+
if (!this.scene || !componentType) return [];
|
|
251
|
+
var foundObjects = [];
|
|
252
|
+
this.scene.traverse(function (object) {
|
|
253
|
+
var _object$userData2;
|
|
254
|
+
if (((_object$userData2 = object.userData) === null || _object$userData2 === void 0 ? void 0 : _object$userData2.componentType) === componentType) {
|
|
255
|
+
foundObjects.push(object);
|
|
256
|
+
}
|
|
257
|
+
});
|
|
258
|
+
return foundObjects;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
// ===== OBJECT SELECTION AND TRANSFORM =====
|
|
262
|
+
|
|
263
|
+
/**
|
|
264
|
+
* Check if an object is selectable for transformation
|
|
265
|
+
* @param {Object} object - Three.js object to check
|
|
266
|
+
* @returns {boolean} True if object can be selected
|
|
267
|
+
*/
|
|
268
|
+
}, {
|
|
269
|
+
key: "isSelectableObject",
|
|
270
|
+
value: function isSelectableObject(object) {
|
|
271
|
+
var _object$userData3;
|
|
272
|
+
if (!object || !object.parent) return false;
|
|
273
|
+
|
|
274
|
+
// Check for different component types
|
|
275
|
+
var componentType = (_object$userData3 = object.userData) === null || _object$userData3 === void 0 ? void 0 : _object$userData3.componentType;
|
|
276
|
+
var isComponent = componentType === 'component';
|
|
277
|
+
var isConnector = componentType === 'connector';
|
|
278
|
+
var isGateway = componentType === 'gateway';
|
|
279
|
+
|
|
280
|
+
// Check if it's a valid mesh or object3D
|
|
281
|
+
var isValidType = (object.isMesh || object.isObject3D) && object.visible;
|
|
282
|
+
return isValidType && (isComponent || isConnector || isGateway);
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
/**
|
|
286
|
+
* Select an object for transformation
|
|
287
|
+
* @param {Object} object - Three.js object to select
|
|
288
|
+
* @returns {boolean} True if selection was successful
|
|
289
|
+
*/
|
|
290
|
+
}, {
|
|
291
|
+
key: "selectObject",
|
|
292
|
+
value: function selectObject(object) {
|
|
293
|
+
if (!object || !this.isSelectableObject(object)) {
|
|
294
|
+
this.logger.warn('โ ๏ธ Cannot select invalid object');
|
|
295
|
+
return false;
|
|
296
|
+
}
|
|
297
|
+
this.selectedObject = object;
|
|
298
|
+
|
|
299
|
+
// Use transform manager if available
|
|
300
|
+
if (this.transformManager) {
|
|
301
|
+
this.transformManager.selectObject(object);
|
|
302
|
+
}
|
|
303
|
+
this.logger.info("\u2705 Object selected: ".concat(object.name, " (").concat(object.uuid, ")"));
|
|
304
|
+
return true;
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
/**
|
|
308
|
+
* Deselect the currently selected object
|
|
309
|
+
*/
|
|
310
|
+
}, {
|
|
311
|
+
key: "deselectObject",
|
|
312
|
+
value: function deselectObject() {
|
|
313
|
+
if (this.transformManager) {
|
|
314
|
+
this.transformManager.deselectObject();
|
|
315
|
+
}
|
|
316
|
+
this.selectedObject = null;
|
|
317
|
+
this.logger.info('โ
Object deselected');
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
/**
|
|
321
|
+
* Get the currently selected object
|
|
322
|
+
* @returns {Object|null} Selected object or null
|
|
323
|
+
*/
|
|
324
|
+
}, {
|
|
325
|
+
key: "getSelectedObject",
|
|
326
|
+
value: function getSelectedObject() {
|
|
327
|
+
return this.selectedObject;
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
/**
|
|
331
|
+
* Get transform data for the selected object
|
|
332
|
+
* @returns {Object|null} Transform data or null
|
|
333
|
+
*/
|
|
334
|
+
}, {
|
|
335
|
+
key: "getSelectedTransform",
|
|
336
|
+
value: function getSelectedTransform() {
|
|
337
|
+
if (!this.transformManager || !this.selectedObject) return null;
|
|
338
|
+
return this.transformManager.getTransformData();
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
// ===== CAMERA AND VIEWPORT OPERATIONS =====
|
|
342
|
+
|
|
343
|
+
/**
|
|
344
|
+
* Focus camera on an object
|
|
345
|
+
* @param {Object} object - Three.js object to focus on
|
|
346
|
+
* @param {Object} options - Focus options
|
|
347
|
+
*/
|
|
348
|
+
}, {
|
|
349
|
+
key: "focusOnObject",
|
|
350
|
+
value: function focusOnObject(object) {
|
|
351
|
+
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
352
|
+
if (!object || !this.camera || !this.controls) {
|
|
353
|
+
this.logger.warn('โ ๏ธ Cannot focus on object: missing components');
|
|
354
|
+
return;
|
|
355
|
+
}
|
|
356
|
+
var _options$distance = options.distance,
|
|
357
|
+
distance = _options$distance === void 0 ? 10 : _options$distance,
|
|
358
|
+
_options$animate = options.animate,
|
|
359
|
+
animate = _options$animate === void 0 ? true : _options$animate,
|
|
360
|
+
_options$duration = options.duration,
|
|
361
|
+
duration = _options$duration === void 0 ? 1000 : _options$duration;
|
|
362
|
+
|
|
363
|
+
// Get object world position
|
|
364
|
+
var objectPosition = new THREE.Vector3();
|
|
365
|
+
object.getWorldPosition(objectPosition);
|
|
366
|
+
|
|
367
|
+
// Calculate camera position
|
|
368
|
+
var cameraPosition = objectPosition.clone().add(new THREE.Vector3(distance, distance, distance));
|
|
369
|
+
if (animate && this.controls.transitionTo) {
|
|
370
|
+
// Animate camera transition if supported
|
|
371
|
+
this.controls.transitionTo(cameraPosition, objectPosition, duration);
|
|
372
|
+
} else {
|
|
373
|
+
// Immediate camera positioning
|
|
374
|
+
this.camera.position.copy(cameraPosition);
|
|
375
|
+
this.camera.lookAt(objectPosition);
|
|
376
|
+
if (this.controls.target) {
|
|
377
|
+
this.controls.target.copy(objectPosition);
|
|
378
|
+
this.controls.update();
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
this.logger.info("\uD83C\uDFA5 Camera focused on object: ".concat(object.name));
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
/**
|
|
385
|
+
* Fit all objects in camera view
|
|
386
|
+
*/
|
|
387
|
+
}, {
|
|
388
|
+
key: "fitAllObjectsInView",
|
|
389
|
+
value: function fitAllObjectsInView() {
|
|
390
|
+
if (!this.camera || !this.controls) {
|
|
391
|
+
this.logger.warn('โ ๏ธ Cannot fit objects in view: missing camera or controls');
|
|
392
|
+
return;
|
|
393
|
+
}
|
|
394
|
+
var box = new THREE.Box3();
|
|
395
|
+
var objects = this.getSceneObjects({
|
|
396
|
+
includeHelpers: false
|
|
397
|
+
});
|
|
398
|
+
if (objects.length === 0) {
|
|
399
|
+
this.logger.warn('โ ๏ธ No objects to fit in view');
|
|
400
|
+
return;
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
// Calculate bounding box of all objects
|
|
404
|
+
objects.forEach(function (_ref) {
|
|
405
|
+
var object = _ref.object;
|
|
406
|
+
box.expandByObject(object);
|
|
407
|
+
});
|
|
408
|
+
|
|
409
|
+
// Calculate center and size
|
|
410
|
+
var center = box.getCenter(new THREE.Vector3());
|
|
411
|
+
var size = box.getSize(new THREE.Vector3());
|
|
412
|
+
|
|
413
|
+
// Calculate distance needed to fit all objects
|
|
414
|
+
var maxDim = Math.max(size.x, size.y, size.z);
|
|
415
|
+
var distance = maxDim / (2 * Math.tan(Math.PI * this.camera.fov / 360));
|
|
416
|
+
|
|
417
|
+
// Position camera
|
|
418
|
+
this.camera.position.copy(center);
|
|
419
|
+
this.camera.position.z += distance * 1.5;
|
|
420
|
+
if (this.controls.target) {
|
|
421
|
+
this.controls.target.copy(center);
|
|
422
|
+
this.controls.update();
|
|
423
|
+
}
|
|
424
|
+
this.logger.info("\uD83C\uDFA5 Camera fitted to ".concat(objects.length, " objects"));
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
// ===== SCENE DATA OPERATIONS =====
|
|
428
|
+
|
|
429
|
+
/**
|
|
430
|
+
* Get components with dimensions from scene data
|
|
431
|
+
* @returns {Array} Array of components with dimension data
|
|
432
|
+
*/
|
|
433
|
+
}, {
|
|
434
|
+
key: "getComponentsWithDimensions",
|
|
435
|
+
value: function getComponentsWithDimensions() {
|
|
436
|
+
if (!this.currentSceneData) return [];
|
|
437
|
+
var components = [];
|
|
438
|
+
this.scene.traverse(function (object) {
|
|
439
|
+
if (object.userData && object.userData.componentType === 'component' && object.userData.dimensions) {
|
|
440
|
+
components.push({
|
|
441
|
+
name: object.name || 'Unnamed Component',
|
|
442
|
+
uuid: getHardcodedUuid(object),
|
|
443
|
+
position: object.position.clone(),
|
|
444
|
+
rotation: object.rotation.clone(),
|
|
445
|
+
dimensions: object.userData.dimensions,
|
|
446
|
+
boundingBox: object.userData.adaptedBoundingBox,
|
|
447
|
+
libraryId: object.userData.libraryId,
|
|
448
|
+
object: object
|
|
449
|
+
});
|
|
450
|
+
}
|
|
451
|
+
});
|
|
452
|
+
return components;
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
/**
|
|
456
|
+
* Get scene statistics
|
|
457
|
+
* @returns {Object} Scene statistics
|
|
458
|
+
*/
|
|
459
|
+
}, {
|
|
460
|
+
key: "getSceneStats",
|
|
461
|
+
value: function getSceneStats() {
|
|
462
|
+
if (!this.scene) return {};
|
|
463
|
+
var stats = {
|
|
464
|
+
totalObjects: 0,
|
|
465
|
+
components: 0,
|
|
466
|
+
connectors: 0,
|
|
467
|
+
gateways: 0,
|
|
468
|
+
meshes: 0,
|
|
469
|
+
materials: 0,
|
|
470
|
+
textures: 0,
|
|
471
|
+
lights: 0,
|
|
472
|
+
cameras: 0
|
|
473
|
+
};
|
|
474
|
+
this.scene.traverse(function (object) {
|
|
475
|
+
var _object$userData4, _object$userData5, _object$userData6;
|
|
476
|
+
stats.totalObjects++;
|
|
477
|
+
if (((_object$userData4 = object.userData) === null || _object$userData4 === void 0 ? void 0 : _object$userData4.componentType) === 'component') stats.components++;
|
|
478
|
+
if (((_object$userData5 = object.userData) === null || _object$userData5 === void 0 ? void 0 : _object$userData5.componentType) === 'connector') stats.connectors++;
|
|
479
|
+
if (((_object$userData6 = object.userData) === null || _object$userData6 === void 0 ? void 0 : _object$userData6.componentType) === 'gateway') stats.gateways++;
|
|
480
|
+
if (object.isMesh) stats.meshes++;
|
|
481
|
+
if (object.isLight) stats.lights++;
|
|
482
|
+
if (object.isCamera) stats.cameras++;
|
|
483
|
+
if (object.material) stats.materials++;
|
|
484
|
+
});
|
|
485
|
+
return stats;
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
// ===== UTILITY METHODS =====
|
|
489
|
+
|
|
490
|
+
/**
|
|
491
|
+
* Log scene information for debugging
|
|
492
|
+
*/
|
|
493
|
+
}, {
|
|
494
|
+
key: "debugSceneInfo",
|
|
495
|
+
value: function debugSceneInfo() {
|
|
496
|
+
var _this$selectedObject;
|
|
497
|
+
var stats = this.getSceneStats();
|
|
498
|
+
var objects = this.getSceneObjects();
|
|
499
|
+
this.logger.info('๐ Scene Debug Information:');
|
|
500
|
+
this.logger.info(' Statistics:', stats);
|
|
501
|
+
this.logger.info(' Objects:', objects.length);
|
|
502
|
+
this.logger.info(' Selected:', ((_this$selectedObject = this.selectedObject) === null || _this$selectedObject === void 0 ? void 0 : _this$selectedObject.name) || 'None');
|
|
503
|
+
this.logger.info(' Scene Data:', this.currentSceneData ? 'Available' : 'Not Available');
|
|
504
|
+
}
|
|
505
|
+
|
|
506
|
+
/**
|
|
507
|
+
* Check if scene has any visible objects
|
|
508
|
+
* @returns {boolean} True if scene has visible objects
|
|
509
|
+
*/
|
|
510
|
+
}, {
|
|
511
|
+
key: "hasVisibleObjects",
|
|
512
|
+
value: function hasVisibleObjects() {
|
|
513
|
+
var _this = this;
|
|
514
|
+
if (!this.scene) return false;
|
|
515
|
+
var hasVisible = false;
|
|
516
|
+
this.scene.traverse(function (object) {
|
|
517
|
+
var _object$userData7;
|
|
518
|
+
if (object.visible && (_object$userData7 = object.userData) !== null && _object$userData7 !== void 0 && _object$userData7.componentType && object !== _this.scene) {
|
|
519
|
+
hasVisible = true;
|
|
520
|
+
}
|
|
521
|
+
});
|
|
522
|
+
return hasVisible;
|
|
523
|
+
}
|
|
524
|
+
|
|
525
|
+
/**
|
|
526
|
+
* Dispose of the scene helper
|
|
527
|
+
*/
|
|
528
|
+
}, {
|
|
529
|
+
key: "dispose",
|
|
530
|
+
value: function dispose() {
|
|
531
|
+
this.scene = null;
|
|
532
|
+
this.camera = null;
|
|
533
|
+
this.renderer = null;
|
|
534
|
+
this.controls = null;
|
|
535
|
+
this.transformManager = null;
|
|
536
|
+
this.componentManager = null;
|
|
537
|
+
this.pathfindingManager = null;
|
|
538
|
+
this.currentSceneData = null;
|
|
539
|
+
this.selectedObject = null;
|
|
540
|
+
this.sceneObjects = [];
|
|
541
|
+
this.isInitialized = false;
|
|
542
|
+
this.logger.info('๐งน SceneHelper disposed');
|
|
543
|
+
}
|
|
544
|
+
}]);
|
|
545
|
+
}();
|
|
546
|
+
|
|
547
|
+
export { SceneHelper, SceneHelper as default };
|
package/dist/esm/src/index.js
CHANGED
|
@@ -1 +1,35 @@
|
|
|
1
|
-
export
|
|
1
|
+
export { CentralPlant } from './core/centralPlant.js';
|
|
2
|
+
export { DebugLogger, logger, modelLogger, pathfinderLogger, transformLogger } from './core/debugLogger.js';
|
|
3
|
+
export { findObjectByHardcodedUuid, generateUuidFromName, getHardcodedUuid } from './core/nameUtils.js';
|
|
4
|
+
export { MathUtils } from './core/mathUtils.js';
|
|
5
|
+
export { SceneInitializationManager } from './managers/scene/sceneInitializationManager.js';
|
|
6
|
+
export { SceneOperationsManager } from './managers/scene/sceneOperationsManager.js';
|
|
7
|
+
export { SceneExportManager } from './managers/scene/sceneExportManager.js';
|
|
8
|
+
export { SceneTooltipsManager } from './managers/scene/sceneTooltipsManager.js';
|
|
9
|
+
export { ComponentManager } from './managers/components/componentManager.js';
|
|
10
|
+
export { AnimationManager } from './managers/components/animationManager.js';
|
|
11
|
+
export { PathfindingManager } from './managers/components/pathfindingManager.js';
|
|
12
|
+
export { createTransformControls } from './managers/controls/transformControlsManager.js';
|
|
13
|
+
export { KeyboardControlsManager } from './managers/controls/keyboardControlsManager.js';
|
|
14
|
+
export { CameraControlsManager } from './managers/controls/cameraControlsManager.js';
|
|
15
|
+
export { default as DragDropManager } from './managers/controls/dragDropManager.js';
|
|
16
|
+
export { EnvironmentManager } from './managers/environment/environmentManager.js';
|
|
17
|
+
export { loadTextureSetAndCreateMaterial } from './managers/environment/textureConfig.js';
|
|
18
|
+
export { HotReloadManager } from './managers/system/hotReloadManager.js';
|
|
19
|
+
export { DisposalManager } from './managers/system/disposalManager.js';
|
|
20
|
+
export { PerformanceMonitor } from './managers/system/performanceMonitor.js';
|
|
21
|
+
export { default as modelPreloader } from './rendering/modelPreloader.js';
|
|
22
|
+
import * as rendering2D from './rendering/rendering2D.js';
|
|
23
|
+
export { rendering2D as Rendering2D };
|
|
24
|
+
import * as rendering3D from './rendering/rendering3D.js';
|
|
25
|
+
export { rendering3D as Rendering3D };
|
|
26
|
+
import * as _import from './data/import.js';
|
|
27
|
+
export { _import as ImportUtils };
|
|
28
|
+
import * as _export from './data/export.js';
|
|
29
|
+
export { _export as ExportUtils };
|
|
30
|
+
import * as numerics from './data/numerics.js';
|
|
31
|
+
export { numerics as Numerics };
|
|
32
|
+
import * as analysis from './analysis/analysis.js';
|
|
33
|
+
export { analysis as Analysis };
|
|
34
|
+
import * as testing from './analysis/testing.js';
|
|
35
|
+
export { testing as Testing };
|