示例#1
0
 private void DrawStreamLineChange(object sender, EventArgs e)
 {
     if (sls != null)
     {
         //Debug.WriteLine("sls: " + sls.GetStreamLines().Count);
         if (displayStreamLines.Checked && sls.GetStreamLines().Count > 0)
         {
             List <StreamLine> temp = new List <StreamLine>();
             for (int i = 0; i < sls.GetStreamLines().Count; i += streamLineDensity.Value)
             {
                 temp.Add(sls.GetStreamLines()[i]);
             }
             //Debug.WriteLine("Drawing " + temp.Count + " streamlines");
             picture.DrawStream(true, temp);
         }
         else
         {
             picture.DrawStream(false, null);
         }
         int valx = int.Parse(xAxisValue.Text);
         int valy = int.Parse(yAxisValue.Text);
         int valz = int.Parse(zAxisValue.Text);
         picture.RotateObject(Deg2Rad(valx), Deg2Rad(valy), Deg2Rad(valz));
         picture.DrawScaledObjectOn(canvas);
     }
 }
示例#2
0
        public List <Thread> PrepareField(ManualResetEvent notifier, StreamLines sls, int maxThreads)
        {
            List <StreamLine> streamLines = sls.GetStreamLines();

            if (streamLines.Count > 0)
            {
                bulkList = new List <SeedPoint>(streamLines.Count * streamLines[0].Points.Count);
            }
            else
            {
                Debug.WriteLine("[WARNING] No streamsLines were created previously");
                bulkList = new List <SeedPoint>();
            }
            double minFTLE = double.PositiveInfinity;
            double maxFTLE = double.NegativeInfinity;

            foreach (StreamLine sl in streamLines)
            {
                foreach (SeedPoint sp in sl.Points)
                {
                    if (!double.IsNaN(sp.FTLE))
                    {
                        if (sp.FTLE < minFTLE)
                        {
                            minFTLE = sp.FTLE;
                        }
                        if (sp.FTLE > maxFTLE)
                        {
                            maxFTLE = sp.FTLE;
                        }
                    }
                }
            }
            Debug.WriteLine("MinFTLE: " + minFTLE + "; MaxFTLE: " + maxFTLE);
            foreach (StreamLine sl in streamLines)
            {
                foreach (SeedPoint sp in sl.Points)
                {
                    if (double.IsNaN(sp.FTLE))
                    {
                        sp.FTLE = maxFTLE;
                    }
                }
            }
            List <Thread> threads = new List <Thread>(streamLines.Count);

            semaphore = new Semaphore(maxThreads, maxThreads);
            foreach (StreamLine sl in streamLines)
            {
                Thread t = new Thread(AnalyzeLine);
                t.Start(new List <object> {
                    sl, notifier
                });
                threads.Add(t);
            }
            return(threads);
        }