Beispiel #1
0
        public bool Load_Mesh()
        {
            Model_Loader loader;

            string[] paths = null;
            string   dir   = System.Environment.CurrentDirectory;

            //string dir = @"D:\workspace_cs\Han_Obj_Viewer\refer\hw1_realse\";
            if (!MeshFileSelect(out paths, dir))
            {
                return(false);
            }
            //loader = new Off_Loader(@"D:\workspace_cs\Han_Obj_Viewer\refer\hw1_realse\281.off");
            foreach (string path in paths)
            {
                string extension = Path.GetExtension(path);
                string filename  = Path.GetFileName(path);
                if (extension == ".obj")
                {
                    loader = new Obj_Loader(path);
                }
                else if (extension == ".off")
                {
                    loader = new Off_Loader(path);
                }
                else
                {
                    MessageBox.Show("Error loading: " + path);
                    continue;
                }

                displayMode = DisplayMode.DEFAULT;

                while (geometryRoot.ContainsKey(filename))
                {
                    filename += "_";
                }
                geometryRoot.Add(filename, loader.GeometryObject);
                currentGeometryObject = geometryRoot[filename];
                ToolStripItem newitem = currentMeshToolStripMenuItem.DropDownItems.Add(filename);

                foreach (ToolStripItem item in currentMeshToolStripMenuItem.DropDownItems)
                {
                    item.BackColor = SystemColors.Control;
                }
                newitem.BackColor = SystemColors.ControlDarkDark;

                MarkedLines.Clear();
                MarkedPoints.Clear();
            }
            return(true);
        }
Beispiel #2
0
        private void sAToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Form_SA form_SA = new Form_SA(geometryRoot, 100);

            form_SA.ShowDialog();
            if (form_SA.Finished)
            {
                TWO_MESHS_sourceObj = form_SA.TWO_MESHS_sourceObj;
                TWO_MESHS_targetObj = form_SA.TWO_MESHS_targetObj;

                displayMode = DisplayMode.TWO_MESHS;
            }
        }
Beispiel #3
0
 private void changeCurrentMesh(string filename)
 {
     displayMode           = DisplayMode.DEFAULT;
     currentGeometryObject = geometryRoot[filename];
     foreach (ToolStripItem item in currentMeshToolStripMenuItem.DropDownItems)
     {
         if (item.Text == filename)
         {
             item.BackColor = SystemColors.ControlDarkDark;
         }
         else
         {
             item.BackColor = SystemColors.Control;
         }
     }
 }
Beispiel #4
0
        private bool initICP()
        {
            if (TWO_MESHS_sourceObj == null || TWO_MESHS_targetObj == null)
            {
                Form_ICPMeshSelection form_Selection = new Form_ICPMeshSelection(geometryRoot);
                if (form_Selection.ShowDialog() != DialogResult.OK)
                {
                    return(false);
                }
                TWO_MESHS_sourceObj = geometryRoot[form_Selection.source];
                TWO_MESHS_targetObj = geometryRoot[form_Selection.target];

                SVDLoops = form_Selection.SVDLoops;

                SourceSamples = form_Selection.SourceSamples;
                TargetSamples = form_Selection.TargetSamples;
            }


            TWO_MESHS_sourceObj.Transform = new Transform();
            TWO_MESHS_targetObj.Transform = new Transform();

            inputMat_source = TWO_MESHS_sourceObj.ToSampledDataMat(SourceSamples);
            inputMat_target = TWO_MESHS_targetObj.ToSampledDataMat(TargetSamples);

            //checkMat_source = TWO_MESHS_sourceObj.ToSampledDataMat(NCheck);
            //checkMat_target = TWO_MESHS_targetObj.ToSampledDataMat(NCheck);

            PCATrans_source = Utils_PCA.DoPCA(inputMat_source);
            PCATrans_target = Utils_PCA.DoPCA(inputMat_target);

            //PCATrans_source = correctPCATransform(inputMat_source, inputMat_target, PCATrans_source, PCATrans_target);

            PCA_InvTransMat_source = PCATrans_source.GetMatrix().Inverse() as DenseMatrix;

            PCA_TransMat_target    = PCATrans_target.GetMatrix();
            PCA_InvTransMat_target = PCA_TransMat_target.Inverse() as DenseMatrix;

            inputMat_source = PCA_InvTransMat_source * inputMat_source;
            inputMat_target = PCA_InvTransMat_target * inputMat_target;

            errList = new List <double>();

            SVD_TransMat = DenseMatrix.CreateIdentity(4);

            return(true);
        }
Beispiel #5
0
        private void resetToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Form_ICPMeshSelection form_Selection = new Form_ICPMeshSelection(geometryRoot);

            form_Selection.DisableSVD();
            if (form_Selection.ShowDialog() != DialogResult.OK)
            {
                return;
            }
            TWO_MESHS_sourceObj = geometryRoot[form_Selection.source];
            TWO_MESHS_targetObj = geometryRoot[form_Selection.target];

            TWO_MESHS_sourceObj.Transform = new Transform();
            TWO_MESHS_targetObj.Transform = new Transform();

            displayMode = DisplayMode.TWO_MESHS;
        }
Beispiel #6
0
        private void Write()
        {
            Transform   Trans   = GeometryObject.Transform;
            DenseMatrix dataMat = GeometryObject.ToDataMat();

            dataMat = Trans.GetMatrix() * dataMat;

            StreamWriter writer = new StreamWriter(Path);

            for (int i = 0; i < dataMat.ColumnCount; i++)
            {
                writer.WriteLine(String.Format("v {0} {1} {2}", dataMat[0, i].ToDecimalStr(), dataMat[1, i].ToDecimalStr(), dataMat[2, i].ToDecimalStr()));
            }
            for (int i = 0; i < GeometryObject.Triangles.Count; i++)
            {
                writer.WriteLine(String.Format("f {0} {1} {2}", GeometryObject.Triangles[i].P0.Id + 1, GeometryObject.Triangles[i].P1.Id + 1, GeometryObject.Triangles[i].P2.Id + 1));
            }
            writer.Close();
        }
Beispiel #7
0
        private bool initSA()
        {
            if (TWO_MESHS_sourceObj == null || TWO_MESHS_targetObj == null)
            {
                Form_SAMeshSelection form_Selection = new Form_SAMeshSelection(geometryRoot);
                if (form_Selection.ShowDialog() != DialogResult.OK)
                {
                    return(false);
                }
                TWO_MESHS_sourceObj = geometryRoot[form_Selection.source];
                TWO_MESHS_targetObj = geometryRoot[form_Selection.target];

                SourceSamples = form_Selection.SourceSamples;
                TargetSamples = form_Selection.TargetSamples;
            }

            TWO_MESHS_sourceObj.Transform = new Transform();
            TWO_MESHS_targetObj.Transform = new Transform();

            inputMat_source = TWO_MESHS_sourceObj.ToSampledDataMat(SourceSamples);
            inputMat_target = TWO_MESHS_targetObj.ToSampledDataMat_WithNormal(TargetSamples, out inputNormalMat_target);

            PCATrans_source = Utils_PCA.DoPCA(inputMat_source);
            PCATrans_target = Utils_PCA.DoPCA(inputMat_target);

            //PCATrans_source = correctPCATransform(inputMat_source, inputMat_target, PCATrans_source, PCATrans_target);

            PCA_InvTransMat_source = PCATrans_source.GetMatrix().Inverse() as DenseMatrix;

            PCA_TransMat_target    = PCATrans_target.GetMatrix();
            PCA_InvTransMat_target = PCA_TransMat_target.Inverse() as DenseMatrix;

            inputMat_source = PCA_InvTransMat_source * inputMat_source;
            inputMat_target = PCA_InvTransMat_target * inputMat_target;

            inputNormalMat_target = PCATrans_target.ToRotationMatrix().Inverse() * inputNormalMat_target as DenseMatrix;
            return(true);
        }
Beispiel #8
0
 public Off_Writer(string path, GeometryObject geometryObject)
 {
     Path           = path;
     GeometryObject = geometryObject;
     Write();
 }
 public Off_Loader(string path)
 {
     Path           = path;
     GeometryObject = new GeometryObject();
     Load();
 }