StoragePulse
Warehouse Twin · DOU1
Pasillo
Tipo
Bahías
Utilización
Live
Índice de Capas
StoragePulse · Arquitectura Three.js
Progreso del proyecto0%
① Objetos Rack · Geometría estructural
Uprights (montantes verticales)
Columnas de perfil rectangular generadas por segmentos de línea (LineSegments). Cada bahía define 4 uprights (front/back × 2 posiciones). Correctamente parametrizados por W, D, UW, UH.
✓ FuncionalTHREE.LineSegmentsBufferGeometry
Beams (vigas horizontales)
Vigas frontales y traseras por nivel. Parametrizadas por BEAM_Y[], BHM (beam height margin). Color diferenciado del upright para lectura visual clara.
✓ FuncionalLineBasicMaterialBEAM_Y config
Beam face quads (planos de nivel)
Planos semitransparentes en la cara superior de cada viga (Q() function). Generados como Mesh con MeshBasicMaterial transparent, polygonOffset activado para evitar z-fighting.
✓ FuncionalTHREE.MeshpolygonOffset
AISLE_REGISTRY — config multi-pasillo
18 pasillos configurados (20–38). Cada uno define SIDE_A/SIDE_B independientes, LEVELS, BEAM_Y[], LH_ARR[], stacks[] reales. Tipos: DOU1_3L, 5L, 6L, 7L.
✓ Funcional18 pasillosLazy loading
AISLE_CACHE — lazy build + ocultamiento
Los grupos Three.js se construyen una sola vez y se cachean. Al cambiar de pasillo, el pasillo anterior se oculta (visible=false) sin destruir geometría. Performance O(1) tras primer build.
✓ Funcionalvisible toggleMemory cache
② Capas de Interacción · Raycasting
Raycasting hover sobre InstancedMesh
Detección de instancias individuales por instanceId. Hover card aparece en coordenadas de cursor con posicionamiento adaptativo (flip cuando toca borde de pantalla).
✓ FuncionalTHREE.RaycasterinstanceId lookup
Orbit + Pan + Zoom (pointer API)
Navegación CAD completa: orbit (1 dedo/LMB), pan (2 dedos/MMB/Shift), zoom en punto de cursor (scroll wheel / pinch). Funciona en desktop y touch mobile.
✓ Funcionalpointerdown/move/uppinch zoom
4 cámaras predefinidas con easing
ISO, FRONT, TOP, SIDE. Animación cubic ease-out al cambiar posición. Función upCam() convierte coordenadas esféricas (sph.r, sph.phi, sph.theta) a posición cartesiana.
✓ FuncionalSpherical coordsrequestAnimationFrame
Layer toggle RACK / PALLETS
Visibilidad independiente de grupos de geometría de rack y de occupancy. Toggle en topbar, estado sincronizado con AISLE_CACHE activo.
✓ Funcionalgroup.visible
Click-to-select bin + panel detalle fijo
La v1 tenía panel lateral fijo al hacer click. En v1.2 solo existe hover card flotante. Falta reimplementar panel anclado con posibilidad de "pinar" una ubicación para inspección profunda sin perder el hover en otras.
⚠ PendientePin-to-inspectSelection state
③ Mesh Coordenadas · Location / Capacity / Bin
Slot geometry — posición 3D por bin
Cada slot (binId, level, pos, depth) genera un BoxGeometry con centro (cx, cy, cz) y escala (sx, sy, sz) exactos. La posición respeta UW, PAD, halfW, DB. Slot data persiste en slots[] array.
✓ FuncionalBoxGeometryInstancedMesh
BIN_DATA schema — capacidad y características
Schema completo: hu, pb, rb, stype, ssection, max_weight, weight_used, max_vol, vol_used, last_move, count_date, pi_doc, actividades SAP (INTL/PICK/PTWY/REPL/INVE). Generación sintética funcional.
✓ Schema OKDatos sintéticos⚠ CSV real pendiente
Hover card — datos de location bin
BinID, profundidad (frente/fondo), nivel, posición, HU count, peso con barra progresiva, volumen con barra, último movimiento, actividades SAP, cycle count + PI doc.
✓ Funcional14 camposBarras peso/vol
CSV real — MHLStorageBin.csv pipe
El swap point está definido en el código (fetch + parser comentado). Faltan: mapear columnas reales del CSV exportado de SAP EWM, validar delimitador, conectar BIN_DATA al renderer.
⚠ En progresoColumn mappingBlocker: formato CSV
Coordenadas absolutas warehouse (X/Y/Z global)
Actualmente cada pasillo se renderiza desde x=0. Falta un sistema de coordenadas global que posicione cada rack en su ubicación real del almacén. Requiere plano de piso con offsets por pasillo.
○ PendienteFloor plan offsetWorld coordinates
Grid de piso del almacén (floor mesh)
Plano de referencia con grid lines para anclaje visual de los racks en el espacio 3D. GridHelper de Three.js o custom mesh con marcas de pasillo y zonas de staging.
○ PendienteGridHelperZona staging
④ Capa de Efectos · Estado físico de bins
Occupancy InstancedMesh — 4 estados
Empty (opacidad 18%), HU1 (amber), HU2 (arc blue lleno), Blocked (violet). Un InstancedMesh separado por estado para evitar instancia-por-material. count actualizado por estado.
✓ Funcional4 materialesMeshBasicMaterial
Pallet visual — escala proporcional al nivel
Cada pallet ocupa (lh * PH_FRAC) de altura del nivel, con PAD de separación en todos los ejes. Posición izq/der por pos (1=front half, 2=back half). Profundidad front/back por depth.
✓ FuncionalPH_FRAC=0.70PAD=2.5
Objetos 3D depositables — pallet shape real
Actualmente el pallet es un BoxGeometry genérico. Falta: geometría de pallet real (tablones, tacos), diferenciación visual por product type, overlay de cantidad/SKU en superficie del pallet.
⚠ BásicoPallet geometrySKU overlay
Efectos de selección / highlight bin
○ Pendiente
Highlight de instancia seleccionada: cambio de color via setColorAt() o outline pass. Estado de selección persistente (click to lock). Comparación multi-bin simultánea.
setColorAt()Outline passMulti-select
Heat-map overlay por utilización
Modo de visualización alternativo: los bins se colorean en gradiente de utilización (rojo=lleno, azul=vacío) independiente del estado de pallet. Toggle en topbar.
○ PendienteColor rampToggle mode
Animación de movimiento de pallets
Cuando un bin cambia de estado (inbound/outbound), animar el pallet en su trayectoria. Requiere sistema de eventos + TWEEN o requestAnimationFrame manual.
○ PendienteEvent systemTWEEN.js
⑤ Capa UI / Sistema / Integración
HUD metrics strip (topbar)
Pasillo activo, tipo, bahías A·B, utilización % con barra progresiva dinámica. Color semáforo: azul <65%, amber 65-85%, rose >85%.
✓ FuncionalLive update
Sidebar con grupos por RTYPE
Lista de pasillos agrupados por DD/RR/PB. Minibar de utilización por pasillo. Filter chips para filtrar por tipo. Animación fadeSlide en carga. Activo visual con borde izquierdo arc.
✓ FuncionalGroup headersFilter chips
Búsqueda de bin por ID / producto
Input de búsqueda en sidebar que filtre pasillos y haga fly-to al bin encontrado. Integración con BIN_DATA por bin ID o por ssection/stype.
○ PendienteSearch inputCamera fly-to
Vista multi-pasillo simultánea (warehouse view)
Renderizar todos los pasillos posicionados en sus coordenadas reales. Requiere floor plan con offsets y culling por frustum para performance. Vista de pájaro con nivel de detalle reducido (LOD).
○ PendienteLOD systemFrustum cullingHigh complexity
Export de estado a CSV / reporte
Generar snapshot del estado actual de todos los bins visibles: ID, utilización, peso, último movimiento. Download directo desde el browser.
○ PendienteCSV exportBlob download
Capacidad · peso
— / —
Ubicación · datos
HUs
Nivel · Pos
Peso actual
Cap. máx
Volumen
Sección
Pasillo · resumen
Peso total
Ocupación
Pasillo
Hover
Speed
— / —
HUs
Peso
Sección
Estado