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); }
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; } }
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; } } }
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); }
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; }
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(); }
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); }
public Off_Writer(string path, GeometryObject geometryObject) { Path = path; GeometryObject = geometryObject; Write(); }
public Off_Loader(string path) { Path = path; GeometryObject = new GeometryObject(); Load(); }