/// <summary> /// Worker method. /// </summary> protected override void WorkerMethod() { string[] vtkFiles = Directory.GetFiles(m_inputDir, "*.vtk"); if ((vtkFiles == null) || (vtkFiles.Length == 0)) { return; } // Write the color parameters to a file string outputDir = CreateOutputDir(m_inputDir); string colorParamsFile = Path.Combine(outputDir, "ColorParams.txt"); File.WriteAllText(colorParamsFile, m_colorBuilder.GetLastSavedCode().Replace("\n", "\r\n")); string paramsFile = Path.Combine(m_inputDir, "Params.txt"); if (File.Exists(paramsFile)) { File.Copy(paramsFile, Path.Combine(outputDir, Path.GetFileName(paramsFile))); } WaveFunction.ColorDelegate colorFunc = (re, im, maxAmpl) => { return(m_colorBuilder.CalcColor(re, im, maxAmpl)); }; if (colorFunc(1, 1, 1) == Color.Empty) { colorFunc = null; } m_numFilesToProcess = vtkFiles.Length; int chunkSize = Environment.ProcessorCount; for (int iStart = 0; iStart < m_numFilesToProcess; iStart += chunkSize) { int iEnd = Math.Min(iStart + chunkSize, m_numFilesToProcess); Parallel.For(iStart, iEnd, i => { // Re-color one file string inputFile = vtkFiles[i]; WaveFunction wf = WaveFunction.ReadFromVtkFile(inputFile); string outFile = Path.Combine(outputDir, Path.GetFileName(inputFile)); wf.SaveToVtkFile(outFile, WaveFunction.WfSaveFormat.AMPLITUDE_AND_COLOR, colorFunc); }); // Report progress to the caller m_currentFileIndex = iEnd - 1; ReportProgress(); if (IsCancelled) { return; } } }
/// <summary> /// Worker method. /// </summary> protected override void WorkerMethod() { string[] vtkFiles = Directory.GetFiles(m_inputDir, "*.vtk"); if ((vtkFiles == null) || (vtkFiles.Length == 0)) { return; } m_outputDir = CreateOutputDir(m_inputDir); string paramsFile = Path.Combine(m_inputDir, "Params.txt"); if (File.Exists(paramsFile)) { File.Copy(paramsFile, Path.Combine(m_outputDir, Path.GetFileName(paramsFile))); } m_numFilesToProcess = vtkFiles.Length; int chunkSize = Environment.ProcessorCount; for (int iStart = 0; iStart < m_numFilesToProcess; iStart += chunkSize) { int iEnd = Math.Min(iStart + chunkSize, m_numFilesToProcess); Parallel.For(iStart, iEnd, i => { // Upsample one file, and save the result string inputFile = vtkFiles[i]; WaveFunction wf = WaveFunction.ReadFromVtkFile(inputFile); wf = Upsample(wf, m_upsampFactor); string outFile = Path.Combine(m_outputDir, Path.GetFileName(inputFile)); wf.SaveToVtkFile(outFile, WaveFunction.WfSaveFormat.REAL_AND_IMAG); }); // Report progress to the caller m_currentFileIndex = iEnd - 1; ReportProgress(); if (IsCancelled) { return; } } }