Beispiel #1
0
    /// <summary>
    /// 初始化帧到第一帧
    /// </summary>
    private void modelInitReloadALLFrame()
    {
        GlobalVariableBackground.Instance.conManager.WriteLog("帧初始化开始");
        if (vtkAllFrame.listFrame.Count == 0)
        {
            return;
        }
        lastIndex = 0;
        GlobalVariableBackground.Instance.FrameAllIndex = 0;
        //vtkAllFrame.ClearListFrame();
        //vtkAllFrame.listFrame =new List<VTK_Frame>();
        for (int i = 0; i < GlobalVariableBackground.Instance.modelCacheCount; i++)
        {
            modelFrameManager modelFrameManager = transform.GetChild(i).GetComponent <modelFrameManager>();
            if (modelFrameManager == null)
            {
                transform.GetChild(i).gameObject.AddComponent <modelFrameManager>();
                modelFrameManager.vtkframe   = new VTK_Frame();
                modelFrameManager.isCollider = vtkAllFrame.loadFile.dataType == Enums.DataType.Default;
            }
            else
            {
                if (modelFrameManager.isCutModelGO)
                {
                    //transform.GetChild(i) 里面含有切割生成的对象
                    continue;
                }
            }
            VTK_Frame vtkframe = modelFrameManager.vtkframe;
            vtkframe.go = transform.GetChild(i).gameObject;

            //vtkAllFrame.listFrame.Add(vtkframe);
            Others.ThreadLoadFilePack pack = new Others.ThreadLoadFilePack();

            //填充 线程数据包-》单帧
            pack.vtkFrame = vtkframe;

            pack.vtkAllFrame = vtkAllFrame;

            DirectoryInfo folder = new DirectoryInfo(vtkAllFrame.loadFile.FileDir);
            FileInfo[]    fileinfoArray;
            fileinfoArray = folder.GetFiles("*.qf");

            Array.Sort(fileinfoArray, new FileNameSort());

            //填充 线程数据包-》单一文件
            pack.fileAddres = fileinfoArray[i];
            //
            vtkframe.selfFrameIndex = i;

            VTKCManager m = new VTKCManager();
            vtkframe.timeStartLession = DateTime.Now;
            ThreadPool.QueueUserWorkItem(new WaitCallback(m.DisposeData), pack as object);
        }
        //GlobalVariableBackground.Instance.conManager.WriteLog("帧初始化任务分发完毕");
    }
Beispiel #2
0
    private void modelReloadNewFile(int oldCount, int NewCount)
    {
        //指定 单帧
        int newIndex = NewCount % GlobalVariableBackground.Instance.modelCacheCount;

        if (vtkAllFrame.listFrame[newIndex].selfFrameIndex == NewCount)
        {
            return;
        }


        DirectoryInfo folder = new DirectoryInfo(vtkAllFrame.loadFile.FileDir);


        FileInfo[] fileinfoArray;
        fileinfoArray = folder.GetFiles("*.qf");


        Array.Sort(fileinfoArray, new FileNameSort());

        vtkAllFrame.listFrame[newIndex].selfFrameIndex = NewCount;

        Others.ThreadLoadFilePack pack = new Others.ThreadLoadFilePack();
        //填充 线程数据包-》单帧
        pack.vtkAllFrame          = vtkAllFrame;
        pack.vtkFrame             = vtkAllFrame.listFrame[newIndex];
        pack.vtkFrame.isAllFinish = false;

        //填充 线程数据包-》单一文件
        pack.fileAddres = fileinfoArray[NewCount];
        //
        pack.vtkFrame.timeStartLession = System.DateTime.Now;
        VTKCManager m = new VTKCManager();

        //m.DisposeData(pack);

        //ThreadPool.QueueUserWorkItem(new WaitCallback(m.DisposeData), pack as object);

        if (vtkAllFrame.loadFile.dataType == Enums.DataType.Water && vtkAllFrame.modelState.isSmooth)
        {
            Others.ThreadSmoothModePack packsm = new Others.ThreadSmoothModePack();
            packsm.fileAddres  = pack.fileAddres;
            packsm.smoothCount = 20;
            packsm.vtkAllFrame = pack.vtkAllFrame;
            packsm.vtkFrame    = pack.vtkFrame;
            Thread t = new Thread(m.SmoothDispose);
            t.IsBackground = true;
            t.Start(packsm);
        }
        else
        {
            Thread t = new Thread(m.DisposeData);
            t.IsBackground = true;
            t.Start(pack);
        }
    }
    public void DisposeData(object pack)
    {
        Others.ThreadLoadFilePack package = pack as Others.ThreadLoadFilePack;

        package.vtkFrame.timeLoadStart = DateTime.Now;

        loadQFFile(package.fileAddres.FullName, package.vtkFrame);

        package.vtkFrame.timeLoadQFEnd = DateTime.Now;

        package.vtkFrame.isLoadFinish = true;
    }
Beispiel #4
0
    /// <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;
    }
Beispiel #5
0
    private void modelInitReloadAllFrameByIndex(int indexFrame)
    {
        int min, max = 0;
        int half = GlobalVariableBackground.Instance.modelCacheCount / 2;

        if (indexFrame - half < 0)
        {
            min = 0;
            max = GlobalVariableBackground.Instance.modelCacheCount - 1;
        }
        else if (indexFrame + half > vtkAllFrame.FileCount)
        {
            min = vtkAllFrame.FileCount - 1 - GlobalVariableBackground.Instance.modelCacheCount;
            max = vtkAllFrame.FileCount - 1;
        }
        else
        {
            min = indexFrame - half;
            max = indexFrame + half;
        }
        for (int i = min; i <= max; i++)
        {
            int childIndex = i % GlobalVariableBackground.Instance.modelCacheCount;
            modelFrameManager modelFrameManager = transform.GetChild(childIndex).GetComponent <modelFrameManager>();
            if (modelFrameManager == null)
            {
                transform.GetChild(childIndex).gameObject.AddComponent <modelFrameManager>();
                modelFrameManager.vtkframe   = new VTK_Frame();
                modelFrameManager.isCollider = vtkAllFrame.loadFile.dataType == Enums.DataType.Default;
            }
            else
            {
                if (modelFrameManager.isCutModelGO)
                {
                    //transform.GetChild(i) 里面含有切割生成的对象
                    continue;
                }
            }
            VTK_Frame vtkframe = modelFrameManager.vtkframe;
            vtkframe.go = transform.GetChild(childIndex).gameObject;
            Others.ThreadLoadFilePack pack = new Others.ThreadLoadFilePack();
            pack.vtkFrame    = vtkframe;
            pack.vtkAllFrame = vtkAllFrame;
            DirectoryInfo folder = new DirectoryInfo(vtkAllFrame.loadFile.FileDir);
            FileInfo[]    fileinfoArray;
            fileinfoArray = folder.GetFiles("*.qf");

            Array.Sort(fileinfoArray, new FileNameSort());

            //填充 线程数据包-》单一文件
            pack.fileAddres         = fileinfoArray[i];
            vtkframe.selfFrameIndex = i;
            VTKCManager m = new VTKCManager();
            vtkframe.timeStartLession = DateTime.Now;

            if (vtkAllFrame.modelState.isSmooth && vtkAllFrame.loadFile.dataType == Enums.DataType.Water)
            {
                Others.ThreadSmoothModePack packsm = new Others.ThreadSmoothModePack();
                packsm.fileAddres  = pack.fileAddres;
                packsm.smoothCount = 20;
                packsm.vtkAllFrame = pack.vtkAllFrame;
                packsm.vtkFrame    = pack.vtkFrame;
                m.SmoothDispose(packsm);
                //ThreadPool.QueueUserWorkItem(new WaitCallback(m.SmoothDispose), packsm as object);
                //Thread t = new Thread(m.SmoothDispose);
                //t.IsBackground = true;
                //t.Start(packsm);
            }
            else
            {
                ThreadPool.QueueUserWorkItem(new WaitCallback(m.DisposeData), pack as object);
            }
        }
    }