Ejemplo n.º 1
0
        //private static bool geoTrackIsUpdatingNow = false;
        private bool UpdateGeoTrack()
        {
            while (!Monitor.TryEnter(geoRenderer, 100))
            {
                Application.DoEvents();
                Thread.Sleep(100);
            }

            try
            {
                geoRenderer.listMarkers.Clear();
                geoRenderer.listMarkers.Add(new Tuple <GPSdata, SequencesDrawingVariants, Bgr>(actualGPSdata,
                                                                                               SequencesDrawingVariants.triangles, GeoTrackRenderer.tracksColor));

                if (geoRenderer.mapFollowsActualGPSposition)
                {
                    geoRenderer.gpsMapCenteredPoint = actualGPSdata.Clone();
                }

                ThreadSafeOperations.SetLoadingCircleState(wcUpdatimgGeoTrack, true, true, wcUpdatimgGeoTrack.Color);
                //ThreadSafeOperations.UpdateImagePanel(imgPanelGeotrack, geoRenderer.RepresentTopo(imgPanelGeotrack.Size), cbNormalizeImage.Checked);
                //ThreadSafeOperations.UpdateImagePanel(imgPanelGeotrack, geoRenderer.RepresentTopo(new Size(0, 0)), cbNormalizeImage.Checked);
                ThreadSafeOperations.UpdatePictureBox(pbGeotrack, geoRenderer.RepresentTopo(new Size(0, 0)), cbNormalizeImage.Checked);
                ThreadSafeOperations.SetLoadingCircleState(wcUpdatimgGeoTrack, false, false, wcUpdatimgGeoTrack.Color);
            }
            finally
            {
                Monitor.Exit(geoRenderer);
            }

            return(true);
        }
        private void LoadFieldData()
        {
            //if (tbFileName.Text != "")
            //{
            //    if (File.Exists(tbFileName.Text))
            //    {
            //        currFileName = tbFileName.Text;
            //    }
            //}
            //else
            //{
            //    OpenFileDialog d1 = new OpenFileDialog();
            //    d1.DefaultExt = "NetCDF files *.nc | *.nc";
            //    DialogResult res = d1.ShowDialog();
            //    if (res == System.Windows.Forms.DialogResult.Cancel) return;
            //    if (res == System.Windows.Forms.DialogResult.OK)
            //    {
            //        ThreadSafeOperations.SetTextTB(tbFileName, d1.FileName, false);
            //        currFileName = d1.FileName;
            //    }
            //}
            //
            //dmLoadedData = NetCDFoperations.ReadDenseMatrixFromFile(currFileName, fieldVarName);

            currImgData = new imageConditionAndData(dmLoadedData, null);
            currImgData.currentColorSchemeRuler = new ColorSchemeRuler(currImgData.currentColorScheme);
            currImgData.UpdateColorSchemeRuler();
            currImgData.currentColorSchemeRuler.IsMarginsFixed = false;
            currImgData.UpdateColorSchemeRuler();
            currImage = new Image <Bgr, byte>(currImgData.dataRepresentingImageColored());
            ThreadSafeOperations.UpdatePictureBox(pbCurrResult, currImage.Bitmap, true);
            sectionsList      = new List <SectionDescription>();
            currSectionPoints = new Tuple <PointD, PointD>(PointD.nullPointD(), PointD.nullPointD());
        }
Ejemplo n.º 3
0
        void bgwGraphsPresenter_DoWork(object sender, DoWorkEventArgs e)
        {
            Thread.CurrentThread.Priority = ThreadPriority.Lowest;

            graphImage = FillGraphImage(pbGraphs.Size);
            if (graphImage != null)
            {
                ThreadSafeOperations.UpdatePictureBox(pbGraphs, graphImage, false);
            }
        }
Ejemplo n.º 4
0
        private void ShowGeoTrackOnce()
        {
            // пропишем в рисователь трека имена файлов, содержащих логи данных GPS
            ThreadSafeOperations.SetLoadingCircleState(wcUpdatimgGeoTrack, true, true, wcUpdatimgGeoTrack.Color);

            while (!Monitor.TryEnter(geoRenderer, 100))
            {
                Application.DoEvents();
                Thread.Sleep(0);
            }
            try
            {
                if ((geoRenderer.lTracksData.Count == 0) || (geoRenderer.lTracksData[0].tsGPSdata.Count == 0))
                {
                    DirectoryInfo dirInfo = new DirectoryInfo(Directory.GetCurrentDirectory() + "\\logs\\");
                    foreach (FileInfo fInfo in dirInfo.EnumerateFiles("*GPS*.nc", SearchOption.TopDirectoryOnly))
                    {
                        geoRenderer.listGPSdataLogNetCDFFileNames.Add(fInfo.FullName);
                    }

                    geoRenderer.ReadGPSFiles(lblStatusString);
                }

                if ((geoRenderer.lTracksData[0].tsGPSdata.Count > 0))
                {
                    actualGPSdata = geoRenderer.lTracksData[0].tsGPSdata.DataValues.Last();
                }
                else
                {
                    actualGPSdata = new GPSdata(6000.0d, 0.0d);
                }


                geoRenderer.listMarkers.Clear();
                geoRenderer.listMarkers.Add(new Tuple <GPSdata, SequencesDrawingVariants, Bgr>(actualGPSdata,
                                                                                               SequencesDrawingVariants.triangles, GeoTrackRenderer.tracksColor));

                if (geoRenderer.mapFollowsActualGPSposition)
                {
                    geoRenderer.gpsMapCenteredPoint = actualGPSdata.Clone();
                }

                // ThreadSafeOperations.UpdateImagePanel(imgPanelGeotrack, geoRenderer.RepresentTopo(imgPanelGeotrack.Size), cbNormalizeImage.Checked);
                //ThreadSafeOperations.UpdateImagePanel(imgPanelGeotrack, geoRenderer.RepresentTopo(new Size(0, 0)), cbNormalizeImage.Checked);
                //ThreadSafeOperations.UpdatePictureBox(pbGeotrack, geoRenderer.RepresentTopo(new Size(0, 0)), cbNormalizeImage.Checked);
                ThreadSafeOperations.UpdatePictureBox(pbGeotrack, geoRenderer.RepresentTopo(pbGeotrack.Size), cbNormalizeImage.Checked);
            }
            finally
            {
                Monitor.Exit(geoRenderer);
            }

            ThreadSafeOperations.SetLoadingCircleState(wcUpdatimgGeoTrack, false, false, wcUpdatimgGeoTrack.Color);
        }
        private void MainForm_Paint(object sender, PaintEventArgs e)
        {
            if (currImage != null)
            {
                Image <Bgr, byte> currShowingImage = currImage.Copy();
                foreach (SectionDescription sectionDescription in sectionsList)
                {
                    currShowingImage.Draw(
                        new LineSegment2DF(sectionDescription.p1.PointF(), sectionDescription.p2.PointF()),
                        new Bgr(Color.Black), 2);
                }

                ThreadSafeOperations.UpdatePictureBox(pbCurrResult, currShowingImage.Bitmap, true);
            }
        }
        private void Represent()
        {
            Dictionary <string, object> dictDataToShow = NetCDFoperations.ReadDataFromFile(strLogFilename);

            long[] arrDateTimeTicksValues = new long[] { 0 };
            if (dictDataToShow.Keys.Contains("DateTime"))
            {
                arrDateTimeTicksValues = (long[])(dictDataToShow["DateTime"]);
            }
            else if (dictDataToShow.Keys.Contains("Datetime"))
            {
                arrDateTimeTicksValues = (long[])(dictDataToShow["Datetime"]);
            }
            else
            {
                MessageBox.Show("Couldn`t acces the DateTime field of the file " + strLogFilename, "",
                                MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }

            DenseVector dvSecondsVector = DenseVector.Create(arrDateTimeTicksValues.Length, i =>
            {
                DateTime dateTime1 = new DateTime(arrDateTimeTicksValues[i]);
                TimeSpan dt        = dateTime1 - dateTime1.Date;
                return(dt.TotalSeconds);
            });

            dmAccData = (DenseMatrix)dictDataToShow["AccelerometerData"];

            if (sensorsHistoryRepresentingScale < 86400)
            {
                double lastDateTimeSecondsValue = dvSecondsVector[dvSecondsVector.Count - 1];

                int searchingIndex = dvSecondsVector.Count - 1;
                for (int idx = dvSecondsVector.Count - 1; idx >= 0; idx--)
                {
                    if (lastDateTimeSecondsValue - dvSecondsVector[idx] >= sensorsHistoryRepresentingScale)
                    {
                        searchingIndex = idx;
                        break;
                    }
                }
                dvSecondsVector =
                    (DenseVector)dvSecondsVector.SubVector(searchingIndex, dvSecondsVector.Count - searchingIndex);

                dmAccData =
                    (DenseMatrix)dmAccData.SubMatrix(searchingIndex, dvSecondsVector.Count, 0, dmAccData.ColumnCount);
            }



            #region filter input data noise

            List <DenseVector> dmAccDataFiltered = new List <DenseVector>();
            Dictionary <string, DenseVector> dictCurrColumnFilteredData = new Dictionary <string, DenseVector>();

            for (int col = 0; col < dmAccData.ColumnCount; col++)
            {
                DenseVector dvVectToFilter = (DenseVector)dmAccData.Column(col);
                dictCurrColumnFilteredData = DataAnalysis.SavGolFilter(dvVectToFilter, dvSecondsVector, 6, 6, 0, 6);
                dmAccDataFiltered.Add(dictCurrColumnFilteredData["values"]);
                //dmAccData.SetColumn(col, dictCurrColumnFilteredData["values"]);
                //dvSecondsVector = dictCurrColumnFilteredData["time"];
            }

            dvSecondsVector = dictCurrColumnFilteredData["time"];
            dmAccData       = (DenseMatrix)DenseMatrix.OfColumns(dvSecondsVector.Count, dmAccData.ColumnCount, dmAccDataFiltered);

            #endregion filter input data noise



            // надо рассчитать углы отклонения отдельно - по сглаженным данным и по данным гироскопа
            DenseVector dvDataToShowDevAngleValue = (DenseVector)dmAccData.Column(6);

            if (cbFilterData.Checked)
            {
                List <double> ac = new List <double>();
            }

            if (accDeviationAngleRenderer == null)
            {
                accDeviationAngleRenderer = new MultipleScatterAndFunctionsRepresentation(pbRepresentingDevAngle.Size);
                accDeviationAngleRenderer.dvScatterXSpace.Add(dvSecondsVector);
                accDeviationAngleRenderer.dvScatterFuncValues.Add(dvDataToShowDevAngleValue);
                accDeviationAngleRenderer.scatterLineColors.Add(new Bgr(Color.Blue));
                accDeviationAngleRenderer.scatterDrawingVariants.Add(SequencesDrawingVariants.polyline);
            }
            else
            {
                if (accDeviationAngleRenderer.xSpaceMin != dvSecondsVector.Max() - sensorsHistoryRepresentingScale)
                {
                    accDeviationAngleRenderer.xSpaceMin = dvSecondsVector.Max() - sensorsHistoryRepresentingScale;

                    accDeviationAngleRenderer.dvScatterXSpace.Clear();
                    accDeviationAngleRenderer.dvScatterFuncValues.Clear();
                    accDeviationAngleRenderer.scatterLineColors.Clear();
                    accDeviationAngleRenderer.scatterDrawingVariants.Clear();

                    accDeviationAngleRenderer.dvScatterXSpace.Add(dvSecondsVector);
                    accDeviationAngleRenderer.dvScatterFuncValues.Add(dvDataToShowDevAngleValue);
                    accDeviationAngleRenderer.scatterLineColors.Add(new Bgr(Color.Blue));
                    accDeviationAngleRenderer.scatterDrawingVariants.Add(SequencesDrawingVariants.polyline);
                }
            }

            accDeviationAngleRenderer.xSpaceMin = dvSecondsVector.Max() - sensorsHistoryRepresentingScale;


            accDeviationAngleRenderer.Represent();
            ThreadSafeOperations.UpdatePictureBox(pbRepresentingDevAngle, accDeviationAngleRenderer.TheImage.Bitmap);


            DenseVector dvDataToShowAccMagnitudeDev = DenseVector.Create(dmAccData.RowCount, i =>
            {
                AccelerometerData currAccData        = new AccelerometerData(dmAccData[i, 0], dmAccData[i, 1], dmAccData[i, 2]);
                AccelerometerData calibrationAccData = new AccelerometerData(dmAccData[i, 3], dmAccData[i, 4], dmAccData[i, 5]);

                return(currAccData.AccMagnitude - calibrationAccData.AccMagnitude);
            });
            if (accDeviationMagnitudeRenderer == null)
            {
                accDeviationMagnitudeRenderer = new MultipleScatterAndFunctionsRepresentation(pbRepresentingDevMagnitude.Size);
                accDeviationMagnitudeRenderer.dvScatterXSpace.Add(dvSecondsVector);
                accDeviationMagnitudeRenderer.dvScatterFuncValues.Add(dvDataToShowAccMagnitudeDev);
                accDeviationMagnitudeRenderer.scatterLineColors.Add(new Bgr(Color.Blue));
                accDeviationMagnitudeRenderer.scatterDrawingVariants.Add(SequencesDrawingVariants.polyline);
            }
            else
            {
                if (accDeviationMagnitudeRenderer.xSpaceMin != dvSecondsVector.Max() - sensorsHistoryRepresentingScale)
                {
                    accDeviationMagnitudeRenderer.xSpaceMin = dvSecondsVector.Max() - sensorsHistoryRepresentingScale;

                    accDeviationMagnitudeRenderer.dvScatterXSpace.Clear();
                    accDeviationMagnitudeRenderer.dvScatterFuncValues.Clear();
                    accDeviationMagnitudeRenderer.scatterLineColors.Clear();
                    accDeviationMagnitudeRenderer.scatterDrawingVariants.Clear();

                    accDeviationMagnitudeRenderer.dvScatterXSpace.Add(dvSecondsVector);
                    accDeviationMagnitudeRenderer.dvScatterFuncValues.Add(dvDataToShowAccMagnitudeDev);
                    accDeviationMagnitudeRenderer.scatterLineColors.Add(new Bgr(Color.Blue));
                    accDeviationMagnitudeRenderer.scatterDrawingVariants.Add(SequencesDrawingVariants.polyline);
                }
            }

            accDeviationMagnitudeRenderer.xSpaceMin = dvSecondsVector.Max() - sensorsHistoryRepresentingScale;

            accDeviationMagnitudeRenderer.Represent();
            ThreadSafeOperations.UpdatePictureBox(pbRepresentingDevMagnitude, accDeviationMagnitudeRenderer.TheImage.Bitmap);



            AccelerometerData accCalibratedData = new AccelerometerData(dmAccData[0, 3], dmAccData[0, 4],
                                                                        dmAccData[0, 5]);
            double phiAngle = Math.Asin(accCalibratedData.xyProjectionMagnitude() / accCalibratedData.AccMagnitude);
            double tmpL     = accCalibratedData.AccMagnitude * Math.Sin(phiAngle) * Math.Cos(phiAngle);
            double tmpLz    = tmpL * Math.Sin(phiAngle);
            double tmpLx    = tmpL * Math.Cos(phiAngle) *
                              Math.Sqrt(1 +
                                        accCalibratedData.AccY * accCalibratedData.AccY /
                                        (accCalibratedData.AccX * accCalibratedData.AccX));
            double            tmpLy = tmpLx * accCalibratedData.AccY / accCalibratedData.AccX;
            AccelerometerData unitaryAccVectorZeroAngle = new AccelerometerData(tmpLx, tmpLy, tmpLz);
            unitaryAccVectorZeroAngle = unitaryAccVectorZeroAngle / unitaryAccVectorZeroAngle.AccMagnitude;
            AccelerometerData unitaryAccVectorCalibratedAcceleration = accCalibratedData / (accCalibratedData.AccMagnitude);

            DenseVector dvDataToShowAccDevDirection = DenseVector.Create(dmAccData.RowCount, i =>
            {
                AccelerometerData currAccData = new AccelerometerData(dmAccData[i, 0], dmAccData[i, 1], dmAccData[i, 2]);
                AccelerometerData currAccDataProjectionPerpendicularToCalibratedAcc = currAccData -
                                                                                      unitaryAccVectorCalibratedAcceleration *
                                                                                      (currAccData * accCalibratedData / accCalibratedData.AccMagnitude);

                double retAngle =
                    Math.Acos(currAccDataProjectionPerpendicularToCalibratedAcc * unitaryAccVectorZeroAngle /
                              currAccDataProjectionPerpendicularToCalibratedAcc.AccMagnitude);
                AccelerometerData vectProduct = unitaryAccVectorZeroAngle ^
                                                currAccDataProjectionPerpendicularToCalibratedAcc;
                if (vectProduct * unitaryAccVectorCalibratedAcceleration > 0)
                {
                    //значит угол лежит в пределах от 0 до PI - ничего не делаем
                    retAngle = retAngle + 0.0d;
                }
                else
                {
                    //векторное произведение противоположно по направлению g0 - значит, угол лежит в диапазоне от Pi до 2Pi или от -PI до PI
                    retAngle = -retAngle;
                }

                return(retAngle);
            });



            if (accDeviationDirectionRenderer == null)
            {
                accDeviationDirectionRenderer = new MultipleScatterAndFunctionsRepresentation(pbRepresentingDevDirection.Size);
                accDeviationDirectionRenderer.dvScatterXSpace.Add(dvSecondsVector);
                accDeviationDirectionRenderer.dvScatterFuncValues.Add(dvDataToShowAccDevDirection);
                accDeviationDirectionRenderer.scatterLineColors.Add(new Bgr(Color.Blue));
                accDeviationDirectionRenderer.scatterDrawingVariants.Add(SequencesDrawingVariants.polyline);
            }
            else
            {
                if (accDeviationDirectionRenderer.xSpaceMin != dvSecondsVector.Max() - sensorsHistoryRepresentingScale)
                {
                    accDeviationDirectionRenderer.xSpaceMin = dvSecondsVector.Max() - sensorsHistoryRepresentingScale;


                    accDeviationDirectionRenderer.dvScatterXSpace.Clear();
                    accDeviationDirectionRenderer.dvScatterFuncValues.Clear();
                    accDeviationDirectionRenderer.scatterLineColors.Clear();
                    accDeviationDirectionRenderer.scatterDrawingVariants.Clear();

                    accDeviationDirectionRenderer.dvScatterXSpace.Add(dvSecondsVector);
                    accDeviationDirectionRenderer.dvScatterFuncValues.Add(dvDataToShowAccDevDirection);
                    accDeviationDirectionRenderer.scatterLineColors.Add(new Bgr(Color.Blue));
                    accDeviationDirectionRenderer.scatterDrawingVariants.Add(SequencesDrawingVariants.polyline);
                }
            }

            accDeviationDirectionRenderer.xSpaceMin = dvSecondsVector.Max() - sensorsHistoryRepresentingScale;

            accDeviationDirectionRenderer.Represent();
            ThreadSafeOperations.UpdatePictureBox(pbRepresentingDevDirection, accDeviationDirectionRenderer.TheImage.Bitmap);
        }
        private void button1_Click(object sender, EventArgs e)
        {
            if (bgwPlayingPresenter != null && bgwPlayingPresenter.IsBusy)
            {
                bgwPlayingPresenter.CancelAsync();
                return;
            }

            if (accDeviationMagnitudeRenderer.verticalMarkersIndexesUsingXSpace.Count == 0)
            {
                return;
            }
            int currentDateTimeIndex = accDeviationMagnitudeRenderer.verticalMarkersIndexesUsingXSpace[0];

            ThreadSafeOperations.ToggleButtonState(btnPlayStopAccAnimation, true, "STOP", true);

            DoWorkEventHandler currDoWorkHandler = delegate(object currBGWsender, DoWorkEventArgs args)
            {
                BackgroundWorker       selfworker        = currBGWsender as BackgroundWorker;
                SimpleVectorGraphics2D frontViewRenderer = new SimpleVectorGraphics2D(pbAccSideVisualization.Size);
                frontViewRenderer.presentAxes              = false;
                frontViewRenderer.ptLeftTopSpaceCorner     = new PointD(-5.0d, 0.0d);
                frontViewRenderer.ptRightBottomSpaceCorner = new PointD(5.0d, -10.0d);

                //frontViewRenderer.listVectorsToDraw.Add(DenseVector.OfEnumerable(new double[] {1.0d, -9.0d}));
                //frontViewRenderer.listVectorsShift.Add(DenseVector.OfEnumerable(new double[] {0.0d, 0.0d}));
                //frontViewRenderer.listVectColors.Add(new Bgr(Color.Blue));

                //frontViewRenderer.Represent();
                //ThreadSafeOperations.UpdatePictureBox(pbAccSideVisualization, frontViewRenderer.TheImage.Bitmap, false);

                for (int i = currentDateTimeIndex; i < accDeviationMagnitudeRenderer.dvScatterXSpace[0].Count - 1; i++)
                {
                    if (selfworker.CancellationPending)
                    {
                        break;
                    }

                    DateTime dtStartCalculate = DateTime.Now;

                    accDeviationMagnitudeRenderer.verticalMarkersList.Clear();
                    accDeviationMagnitudeRenderer.verticalMarkersList.Add(accDeviationMagnitudeRenderer.dvScatterXSpace[0][i]);
                    accDeviationMagnitudeRenderer.verticalMarkersIndexesUsingXSpace.Clear();
                    accDeviationMagnitudeRenderer.verticalMarkersIndexesUsingXSpace.Add(i);
                    accDeviationMagnitudeRenderer.RepresentMarkers();
                    ThreadSafeOperations.UpdatePictureBox(pbRepresentingDevMagnitude,
                                                          accDeviationMagnitudeRenderer.TheImage.Bitmap, false);

                    accDeviationAngleRenderer.verticalMarkersList.Clear();
                    accDeviationAngleRenderer.verticalMarkersList.Add(accDeviationAngleRenderer.dvScatterXSpace[0][i]);
                    accDeviationAngleRenderer.verticalMarkersIndexesUsingXSpace.Clear();
                    accDeviationAngleRenderer.verticalMarkersIndexesUsingXSpace.Add(i);
                    accDeviationAngleRenderer.RepresentMarkers();
                    ThreadSafeOperations.UpdatePictureBox(pbRepresentingDevAngle, accDeviationAngleRenderer.TheImage.Bitmap,
                                                          false);

                    accDeviationDirectionRenderer.verticalMarkersList.Clear();
                    accDeviationDirectionRenderer.verticalMarkersList.Add(accDeviationDirectionRenderer.dvScatterXSpace[0][i]);
                    accDeviationDirectionRenderer.verticalMarkersIndexesUsingXSpace.Clear();
                    accDeviationDirectionRenderer.verticalMarkersIndexesUsingXSpace.Add(i);
                    accDeviationDirectionRenderer.RepresentMarkers();
                    ThreadSafeOperations.UpdatePictureBox(pbRepresentingDevDirection, accDeviationDirectionRenderer.TheImage.Bitmap,
                                                          false);

                    frontViewRenderer.listVectorsToDraw.Clear();
                    frontViewRenderer.listVectorsShift.Clear();
                    frontViewRenderer.listVectColors.Clear();

                    //int globalArrayIndex = sensorsHistoryRepresentingScale + i-1;
                    DenseVector       zeroValuesVect  = DenseVector.OfEnumerable(new double[] { 0.0d, 0.0d });
                    DenseVector       dvAccCalibrated = DenseVector.Create(3, idx => dmAccData[i, idx + 3]);
                    DenseVector       dvAccCurrent    = DenseVector.Create(3, idx => dmAccData[i, idx]);
                    AccelerometerData accCalibrated   = new AccelerometerData(dvAccCalibrated);
                    accCalibrated.AccDoubleZ = -accCalibrated.AccDoubleZ;
                    AccelerometerData currAcc = new AccelerometerData(dvAccCurrent);
                    currAcc.AccDoubleZ = -currAcc.AccDoubleZ;
                    double koeffToRealGravity = 9.81d / accCalibrated.AccMagnitude;
                    accCalibrated = accCalibrated * koeffToRealGravity;
                    currAcc       = currAcc * koeffToRealGravity;
                    AccelerometerData dAccCalibration = accCalibrated - (new AccelerometerData(0.0d, 0.0d, -9.81d));
                    currAcc       = currAcc - dAccCalibration;
                    accCalibrated = accCalibrated - dAccCalibration;

                    frontViewRenderer.listVectorsToDraw.Add(DenseVector.OfEnumerable(new double[] { accCalibrated.xyProjectionMagnitude(), accCalibrated.AccDoubleZ }));
                    frontViewRenderer.listVectorsShift.Add(zeroValuesVect);
                    frontViewRenderer.listVectColors.Add(new Bgr(Color.Blue));

                    frontViewRenderer.listVectorsToDraw.Add(DenseVector.OfEnumerable(new double[] { currAcc.xyProjectionMagnitude(), currAcc.AccDoubleZ }));
                    frontViewRenderer.listVectorsShift.Add(zeroValuesVect);
                    frontViewRenderer.listVectColors.Add(new Bgr(Color.Red));

                    frontViewRenderer.Represent();
                    ThreadSafeOperations.UpdatePictureBox(pbAccSideVisualization, frontViewRenderer.TheImage.Bitmap, false);


                    TimeSpan dtCalculationTime = DateTime.Now - dtStartCalculate;

                    double timeToWait = (accDeviationDirectionRenderer.dvScatterXSpace[0][i + 1] -
                                         accDeviationDirectionRenderer.dvScatterXSpace[0][i]) * 1000.0d
                                        - (double)(dtCalculationTime.TotalMilliseconds);


                    if (timeToWait > 0)
                    {
                        //System.Windows.Forms.Application.DoEvents();
                        Thread.Sleep(Convert.ToInt32(timeToWait));
                    }
                }
            };


            RunWorkerCompletedEventHandler currWorkCompletedHandler =
                delegate(object currBGWCompletedSender, RunWorkerCompletedEventArgs args)
            {
                ThreadSafeOperations.ToggleButtonState(btnPlayStopAccAnimation, true, "PLAY", true);
            };

            bgwPlayingPresenter = new BackgroundWorker();
            bgwPlayingPresenter.WorkerSupportsCancellation = true;
            bgwPlayingPresenter.DoWork             += currDoWorkHandler;
            bgwPlayingPresenter.RunWorkerCompleted += currWorkCompletedHandler;
            object[] BGWargs = new object[] { "", "" };
            bgwPlayingPresenter.RunWorkerAsync(BGWargs);
        }
 private void ShowImageForm_Resize(object sender, EventArgs e)
 {
     int[] SetImageSize = ThreadSafeOperations.UpdatePictureBox(pictureBox1, LocalBitmap2show, true);
     SetImageWidth  = SetImageSize[0];
     SetImageHeight = SetImageSize[1];
 }