Exemplo n.º 1
0
        public override ScanData DoTask(ScanData source)
        {
            LastError = string.Empty;
            if (!ValidFile)
            {
                string file = ShowDialog();
                if (!string.IsNullOrEmpty(file))
                {
                    this.Filename = file;
                }
            }


            if (ValidFile)
            {
                this.Status = eTaskStatus.Working;
                UpdatePercent(0, null);
                ScanData ret = ScanDataIO.Read(this.Filename);
                this.Status = eTaskStatus.Finished;
                UpdatePercent(100, ret);
                return(ret);
            }
            else
            {
                this.Status = eTaskStatus.Error;
                LastError   = String.Format("Invalid File {0}", this.Filename);
            }
            return(null);
        }
Exemplo n.º 2
0
 private void MainForm_Load(object sender, EventArgs e)
 {
     //FillCameraComboBox();
     AlignInterface();
     this.OpenPointsDlg.DefaultExt       = ScanDataIO.GetDialogFilter();
     this.OpenPointsDlg.InitialDirectory = Program.UserDataPath;
 }
Exemplo n.º 3
0
        private void LoadDefaultScene()
        {
            string path = Path.Combine(Program.UserDataPath, "startup" + ScanDataIO.DefaultExtention);

            if (File.Exists(path))
            {
                ScanData Points = ScanDataIO.Read(path);

                Scene.Clear();
                Scene.Add(Points);
                Invalidate();
            }
        }
Exemplo n.º 4
0
        public ScanData OpenColoreddPointArray(IScene3DViewer viewer)
        {
            if (this.OpenPointsDlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                string   path   = Path.Combine(Program.UserDataPath, this.OpenPointsDlg.FileName);
                ScanData points = ScanDataIO.Read(path);

                if (viewer != null)
                {
                    viewer.Scene.Clear();
                    viewer.Scene.Add(points);
                    viewer.Invalidate();
                }
                return(points);
            }
            return(null);
        }
Exemplo n.º 5
0
        string ShowDialog()
        {
            DialogResult   result = DialogResult.Ignore;
            OpenFileDialog dlg    = new OpenFileDialog();

            dlg.Filter           = ScanDataIO.GetDialogFilter();
            dlg.InitialDirectory = Program.UserDataPath;
            dlg.CheckFileExists  = true;
            if (CallerControl != null)
            {
                CallerControl.Invoke(new Action(() => result = dlg.ShowDialog()));
            }
            else
            {
                result = dlg.ShowDialog();
            }
            if (result == DialogResult.OK)
            {
                return(dlg.FileName);
            }
            return(string.Empty);
        }
Exemplo n.º 6
0
 private void CorrectionMatrix_Load(object sender, EventArgs e)
 {
     try
     {
         if (File.Exists(QuickFileName))
         {
             ProcessScanData(ScanDataIO.Read(QuickFileName));
         }
         EnableLaser(true);
     }
     catch
     {
         EnableLaser(false);
     }
     Drag = new DragBallNavigator(PreviewPanel);
     Drag.Init();
     this.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint | ControlStyles.OptimizedDoubleBuffer | ControlStyles.Selectable, true);
     typeof(Panel).InvokeMember("DoubleBuffered",
                                BindingFlags.SetProperty | BindingFlags.Instance | BindingFlags.NonPublic,
                                null, PreviewPanel, new object[] { true });
     PreviewPanel.TabStop = true;
     this.MouseWheel     += Drag.MouseWheel;
 }
Exemplo n.º 7
0
        public override ScanData DoTask(ScanData source)
        {
            if (!HardwareAvailable)
            {
                throw new Exception(string.Format("HardWare missing : TURNTABLE:{0} LASER:{1} CAMERA:{2}", HardwarePresentTrace(TurnTable), HardwarePresentTrace(Laser), HardwarePresentTrace(Camera)));
            }



            RotationStep = (double)Math.Round(TurnTable.MinimumRotation() + (15f - TurnTable.MinimumRotation()) * ((100 - Precision) / 100f), 2);


            Settings settings = Settings.Get <Settings>();

            CameraLoc.X = settings.Read(Settings.CAMERA, Settings.X, 0f);
            CameraLoc.Y = settings.Read(Settings.CAMERA, Settings.Y, 270f);
            CameraLoc.Z = settings.Read(Settings.CAMERA, Settings.Z, 70f);

            double thres = settings.Read(Settings.LASER_COMMON, Settings.MAGNITUDE_THRESHOLD, 10);
            int    min   = settings.Read(Settings.LASER_COMMON, Settings.MIN_WIDTH, 1);
            int    max   = settings.Read(Settings.LASER_COMMON, Settings.MAX_WIDTH, 60);


            ICameraProxy camera = Settings.Get <ICameraProxy>();

            ImageProcessor = new ImageProcessor(thres, min, max);

            SizeF tableSize = new SizeF(
                (float)settings.Read(Settings.TABLE, Settings.DIAMETER, 20f),
                (float)settings.Read(Settings.TABLE, Settings.HEIGHT, 15f)
                );

            Lasers = new List <LaserInfo>(LaserId.Length);
            for (int i = 0; i < LaserId.Length; i++)
            {
                Lasers.Add(new LaserInfo(LaserId[i], CameraLoc, tableSize));
            }

            ScanData ret = new ScanData();

            UpdatePercent(0, ret);
            int fadeTime = settings.Read(Settings.LASER_COMMON, Settings.FADE_DELAY, 100);

            TurnTable.InitialiseRotation();
            int laserCount = Lasers.Count;

            // Scan all laser location,
            for (double currentAngle = 0; currentAngle < 360f; currentAngle += RotationStep)
            {
                if (this.CancelPending)
                {
                    return(ret);
                }

                Laser.TurnAll(false);   // All laser off
                Thread.Sleep(fadeTime); // wait fade laser
                Bitmap imgoff = GetCapture();
                for (int laserIndex = 0; laserIndex < laserCount; laserIndex++)
                {
                    Laser.Turn(Lasers[laserIndex].Id, true);
                    Thread.Sleep(fadeTime); // wait fade laser
                    Bitmap imgon = GetCapture();
                    Laser.Turn(Lasers[laserIndex].Id, false);

                    List <PointF> laserloc = ImageProcessor.Process(imgoff, imgon, null);

                    Point3DList samplePoints = Lasers[laserIndex].MapPoints(laserloc, UseTexture ? imgoff : null, UseCorrectionMatrix);
                    PositionPostProcess(ref samplePoints, -Utils.DEGREES_TO_RADIANS(currentAngle));
                    ScanLine line = new ScanLine(laserIndex, samplePoints);
                    line.DisplayAsLine = true;
                    ret.Add(line);
                }
                int percent = (int)((currentAngle / 360f) * 100f);
                UpdatePercent(percent, ret);
                TurnTable.Rotate(currentAngle, false);
            }
            LineSort lineSort = new LineSort();

            ret = lineSort.Run(ret, CallerControl, this.Worker, this.WorkerArg);
            if (!string.IsNullOrEmpty(FileName))
            {
                string path = Path.Combine(Program.UserDataPath, FileName);
                ScanDataIO.Write(path, ret);
            }
            return(ret);
        }
Exemplo n.º 8
0
 protected virtual void Save(ScanData source)
 {
     ScanDataIO.Write(Filename, source);
 }