Exemple #1
0
        /// <summary>
        /// Starts a rigid registration.
        /// </summary>
        /// <param name="sender">The sender of an event.</param>
        /// <param name="e">Event arguments.</param>
        private void toolsRegistrationRigidMenuItem_Click(object sender, EventArgs e)
        {
            RigidSettingsForm rigidSettingsForm = new RigidSettingsForm(this.model3DBean.ModelListBean);

            rigidSettingsForm.ShowDialog(this);

            if (rigidSettingsForm.DialogResult == DialogResult.OK)
            {
                this.statusProgressBar.Visible = true;
                this.statusLabel.Text          = "Registration task is in progress.";

                for (int i = 0; i < rigidSettingsForm.SourceModels.Count; i++)
                {
                    for (int j = 0; j < rigidSettingsForm.TargetModels.Count; j++)
                    {
                        BackgroundWorker worker = new BackgroundWorker();
                        worker.RunWorkerCompleted += this.ReportTaskCompleted;
                        worker.DoWork             += (obj, args) =>
                        {
                            RigidArgs rigidArgs = (RigidArgs)args.Argument;

                            FileReader  fileReader  = new FileReader();
                            Model3DData sourceModel = fileReader.ReadModel(rigidArgs.SourceModel.EditPath);
                            Model3DData targetModel = fileReader.ReadModel(rigidArgs.TargetModel.EditPath);

                            List <Vector <float> > sourceVertexBuffer = sourceModel.GetVertices();
                            List <Vector <float> > targetVertexBuffer = targetModel.GetVertices();

                            RigidRegistration rigidRegistration = new RigidRegistration(rigidArgs.MappingAlgorithm, rigidArgs.NumberOfIterations);
                            sourceVertexBuffer = rigidRegistration.ComputeRegistration(sourceVertexBuffer, targetVertexBuffer);

                            sourceModel.SetVertices(sourceVertexBuffer);
                            ObjFileWriter fileWriter = new ObjFileWriter(rigidArgs.SourceModel.EditPath);
                            fileWriter.WriteModel(sourceModel.Model);
                            fileWriter.Close();

                            rigidArgs.SourceModel.Changed  = true;
                            rigidArgs.SourceModel.Exported = false;
                        };

                        worker.RunWorkerAsync(new RigidArgs(rigidSettingsForm.SourceModels[i], rigidSettingsForm.TargetModels[j], rigidSettingsForm.PointMappingAlgorithm, rigidSettingsForm.MaxIterations));
                    }
                }
            }
        }