/// <summary> /// 检测帧是否加载完毕 /// </summary> /// <returns></returns>o private bool ChickFrameFinish() { for (int i = 0; i < senceModel.transform.childCount; i++) { VTK_AllFrame allFrame = senceModel.transform.GetChild(i).GetComponent <modelGameObject>().vtkAllFrame; if (!allFrame.listFrame[(GlobalVariableBackground.Instance.FrameAllIndex + 1) % GlobalVariableBackground.Instance.modelCacheCount].isAllFinish) { return(false); } } return(true); }
/// <summary> /// 获取文件列表 /// </summary> public void VTKGetFileList(Structure_LoadFile structure_loadFile) { if (structure_loadFile.FileDir == null) { return; } List <Others.MaxAndMin> listm = new List <Others.MaxAndMin>(); if (structure_loadFile.dataType == Enums.DataType.Default) { StreamReader sr; string file_name = structure_loadFile.FileDir + @"\Arr.mm"; sr = File.OpenText(file_name); string strAboutAttMaxMin = sr.ReadLine(); sr.Close(); sr.Dispose(); string[] strTempArray = strAboutAttMaxMin.Trim().Split(' '); Others.MaxAndMin mn; for (int i = 0; i < strTempArray.Length;) { mn = new Others.MaxAndMin(); mn.Attname = strTempArray[i++]; mn.Dimension = Convert.ToInt32(strTempArray[i++]); mn.isPointAtt = strTempArray[i++].Contains("point"); mn.Min = Convert.ToSingle(strTempArray[i++]); mn.Max = Convert.ToSingle(strTempArray[i++]); listm.Add(mn); } } structure_loadFile.name = GetSameName(structure_loadFile.FileDir); string extensionName = "*.qf"; //switch (structure_loadFile.fileType) //{ // case Enums.FileType.Tecplot: // extensionName = "*.dat"; // break; // case Enums.FileType.VTK: // extensionName = "*.vtk"; // break; // default: // break; //} //创建所有帧对象 VTK_AllFrame AllFrame = new VTK_AllFrame(); AllFrame.point_MaxAndMin = listm; AllFrame.modelState = new Others.ModelState(); int pointAttIndex = 0; int cellAttIndex = 0; for (int i = 0; i < listm.Count; i++) { if (listm[i].Dimension == 1) { AllFrame.modelState.isUsecolor = true; AllFrame.modelState.isPointAtt = listm[i].isPointAtt; if (listm[i].isPointAtt) { AllFrame.modelState.attIndex = pointAttIndex; } else { AllFrame.modelState.attIndex = cellAttIndex; } AllFrame.modelState.maxminIndex = i; break; } else { if (listm[i].isPointAtt) { pointAttIndex++; } else { cellAttIndex++; } } } AllFrame.listFrame = new List <VTK_Frame>(); AllFrame.name = structure_loadFile.name; //创建 场景中的 数据模型载体 GameObject newNodel = new GameObject(); newNodel.name = structure_loadFile.name; newNodel.transform.parent = transform; //挂上 功能脚本 modelGameObject modelgo = newNodel.AddComponent <modelGameObject>(); modelgo.vtkAllFrame = AllFrame; AllFrame.loadFile = structure_loadFile; DirectoryInfo folder = new DirectoryInfo(structure_loadFile.FileDir); FileInfo[] fileinfoArray = folder.GetFiles(extensionName); Array.Sort(fileinfoArray, new FileNameSort()); AllFrame.FileCount = fileinfoArray.Length; GlobalVariableBackground.Instance.FrameALLCount = fileinfoArray.Length; //加载指定缓存数量的模型数据 for (int i = 0; i < GlobalVariableBackground.Instance.modelCacheCount; i++) { GameObject goModelFrame; //生成 线程数据包 goModelFrame = GameObject.Instantiate(GlobalVariableBackground.Instance.modelPerfab); goModelFrame.transform.parent = newNodel.transform; modelFrameManager modelManager = goModelFrame.AddComponent <modelFrameManager>(); goModelFrame.AddComponent <ClickGameObjectEvent>(); modelManager.modelState = AllFrame.modelState; Others.ThreadLoadFilePack pack = new Others.ThreadLoadFilePack(); //pack.strAboutArrMAxMin = strAboutAttMaxMin; //创建 单帧 VTK_Frame frame = new VTK_Frame(); frame.point_MaxAndMin = AllFrame.point_MaxAndMin; modelManager.vtkframe = frame; frame.go = goModelFrame; modelManager.isCollider = structure_loadFile.dataType == Enums.DataType.Default; pack.vtkAllFrame = AllFrame; //填充 线程数据包-》单帧 pack.vtkFrame = frame; //填充 线程数据包-》单一文件 pack.fileAddres = fileinfoArray[i]; int fileIndex = i; AllFrame.listFrame.Add(frame); goModelFrame.name = AllFrame.name + "#" + fileIndex; frame.selfFrameIndex = fileIndex; VTKCManager m = new VTKCManager(); frame.timeStartLession = DateTime.Now; m.DisposeData(pack); //Thread t = new Thread(m.DisposeData); //t.IsBackground = true; //t.Start(pack); //ThreadPool.QueueUserWorkItem(new WaitCallback(m.DisposeData), pack as object); } folder = null; fileinfoArray = null; }