| 
					
				 | 
			
			
				@@ -67,6 +67,7 @@ import ColorCardDialog from "./dialog/ColorCardDialog.vue" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import ContourDialog from "./dialog/ContourDialog.vue" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import cloudChart from "@/views/threejsView/index.vue" // 云图 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import h5wasm from 'h5wasm' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import { usePltDataStore } from '@/store/modules/pltData' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 const props = defineProps({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   modelValue: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     type: Boolean, 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -208,10 +209,9 @@ const getPltData = async (fpid) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 // HDF5转Three.js格式的解析器 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 const parseHDF5ToThreeJS = (h5file) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  const pltStore = usePltDataStore() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   const result = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    "data" : { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      "datasetType": "plt", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    "data": { "datasetType": "plt" }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     metadata: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       title: h5file.attrs.title?.value || '', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       variables: JSON.parse(h5file.attrs.variables?.value || "[]"), 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -219,25 +219,21 @@ const parseHDF5ToThreeJS = (h5file) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     zones: [] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  const zones = [] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  // 新版h5wasm数据提取方法 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  // 增强型数据提取方法 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   const extractDataset = (group, name) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      // 方法1:直接访问 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      if (group[name] && group[name].value) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return group[name].value 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      // 尝试多种访问方式 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      const dataset = group.get?.(name) ||  // 方法1: get() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                     group[name]?.value ||  // 方法2: 直接访问 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                     Object.entries(group).find(([k]) => k === name)?.[1]?.value // 方法3: 遍历查找 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      // 方法2:遍历entries 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      for (const [key, obj] of Object.entries(group)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (key === name && obj?.value) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          return obj.value 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      // 特殊处理数组类型数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      if (dataset && typeof dataset === 'object' && 'value' in dataset) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return dataset.value 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-       
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      // 方法3:get方法 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      const dataset = group.get?.(name) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      return dataset?.value 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      return dataset 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } catch (e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       console.warn(`提取 ${name} 失败:`, e) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       return null 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -246,26 +242,34 @@ const parseHDF5ToThreeJS = (h5file) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   // 处理每个区域 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   for (const zoneKey of h5file.keys()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (!zoneKey.startsWith('zone_')) continue 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      // 正确获取组对象 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      const zone = h5file.get(zoneKey) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      if (!zone || typeof zone !== 'object') continue 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    const zone = h5file[zoneKey] || h5file.get(zoneKey) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    console.log(`处理 ${zoneKey}:`, zone) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      console.log(`处理 ${zoneKey}:`, zone) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    const zoneData = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      name: zoneKey, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      vertices: extractDataset(zone, 'vertices'), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      indices: extractDataset(zone, 'indices'), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      variables: {} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      const zoneData = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        name: zoneKey.replace(/^zone_\d+_/, ''), // 去除可能的zone_前缀 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        vertices: extractDataset(zone, 'vertices'), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        indices: extractDataset(zone, 'indices'), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        variables: {} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // 提取变量数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    result.metadata.variables.forEach(varName => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      zoneData.variables[varName] = extractDataset(zone, `var_${varName}`) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      // 提取变量数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      result.metadata.variables.forEach(varName => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        const data = extractDataset(zone, `var_${varName}`) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (data) zoneData.variables[varName] = data 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    result.zones.push(zoneData) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      zones.push(zoneData) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } catch (e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      console.warn(`处理区域 ${zoneKey} 时出错:`, e) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  pltStore.setZones(zones) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  result.zones = zones 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   console.log('最终解析结果:', result) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   return result 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 |