public static void ShowOneRingOfFace(TriMesh mesh, EnumPatchType type) { List <TriMesh.Face> selected = RetrieveSelectedFace(mesh); foreach (var face in selected) { switch (type) { case EnumPatchType.Vertex: ShowOneRingOfPatch(mesh, EnumPatchType.Face, type); break; case EnumPatchType.Edge: ShowOneRingOfPatch(mesh, EnumPatchType.Face, type); break; case EnumPatchType.Face: ShowOneRingFaceOfFace(face); break; default: break; } } }
public static void ShowOneRingOfPatch(TriMesh mesh, EnumPatchType patchType, EnumPatchType searchType) { bool[] selectedFlags = CollectVertex(mesh, patchType); TriMesh.HalfEdge[] list = RetrieveOneRingHalfEdgeByPatch(mesh, selectedFlags); for (int i = 0; i < list.Length; i++) { switch (searchType) { case EnumPatchType.Vertex: list[i].ToVertex.Traits.SelectedFlag = 1; list[i].ToVertex.Traits.Color = RetrieveResult.Instance.VertexResult; break; case EnumPatchType.Edge: list[i].Edge.Traits.SelectedFlag = 1; list[i].Edge.Traits.Color = RetrieveResult.Instance.EdgeResult; break; case EnumPatchType.Face: list[i].Face.Traits.SelectedFlag = 1; list[i].Face.Traits.Color = RetrieveResult.Instance.FaceResult; break; } } }
private void oneRingPatchToolStripMenuItem_Click(object sender, EventArgs e) { EnumPatchType input = (EnumPatchType)this.toolStripComboBoxInput.SelectedItem; EnumPatchType output = (EnumPatchType)this.toolStripComboBoxOutput.SelectedItem; TriMeshUtil.ShowOneRingOfPatch(GlobalData.Instance.TriMesh, input, output); OnChanged(EventArgs.Empty); }
public static void RetrieveSingle(TriMesh mesh, EnumPatchType input, EnumPatchType output) { switch (input) { case EnumPatchType.Vertex: ShowOneRingOfVertex(mesh, output); break; case EnumPatchType.Edge: ShowOneRingOfEdge(mesh, output); break; case EnumPatchType.Face: ShowOneRingOfFace(mesh, output); break; default: break; } }
public static bool[] CollectVertex(TriMesh mesh, EnumPatchType type) { bool[] selectedFlags = new bool[mesh.Vertices.Count]; switch (type) { case EnumPatchType.Vertex: foreach (var v in mesh.Vertices) { if (v.Traits.SelectedFlag > 0) { selectedFlags[v.Index] = true; } } break; case EnumPatchType.Edge: foreach (var e in mesh.Edges) { if (e.Traits.SelectedFlag > 0) { selectedFlags[e.Vertex0.Index] = true; selectedFlags[e.Vertex1.Index] = true; } } break; case EnumPatchType.Face: foreach (var f in mesh.Faces) { if (f.Traits.SelectedFlag > 0) { foreach (var v in f.Vertices) { selectedFlags[v.Index] = true; } } } break; default: return(null); } return(selectedFlags); }
public static void ShowBoundaryOfPatch(TriMesh mesh, EnumPatchType patchType, EnumPatchType searchType) { bool[] selectedFlags; TriMesh.HalfEdge[] list = null; switch (patchType) { case EnumPatchType.Vertex: case EnumPatchType.Edge: selectedFlags = CollectVertex(mesh, patchType); list = RetrieveBoundaryHalfEdgeByPatch(mesh, selectedFlags); break; case EnumPatchType.Face: selectedFlags = CollectFace(mesh); list = RetrieveRegionBoundaryHalfEdge(mesh, selectedFlags); break; default: break; } for (int i = 0; i < list.Length; i++) { switch (searchType) { case EnumPatchType.Vertex: list[i].ToVertex.Traits.SelectedFlag = 1; list[i].ToVertex.Traits.Color = RetrieveResult.Instance.VertexResult; break; case EnumPatchType.Edge: list[i].Edge.Traits.SelectedFlag = 1; list[i].Edge.Traits.Color = RetrieveResult.Instance.EdgeResult; break; case EnumPatchType.Face: if (list[i].Opposite.Face != null) { list[i].Opposite.Face.Traits.SelectedFlag = 1; list[i].Opposite.Face.Traits.Color = RetrieveResult.Instance.FaceResult; } break; } } }
public static void ShowOneRingOfVertex(TriMesh mesh, EnumPatchType searchType) { List<TriMesh.Vertex> selected = RetrieveSelectedVertex(mesh); for (int i = 0; i < selected.Count; i++) { switch (searchType) { case EnumPatchType.Vertex: ShowOneRingVertexOfVertex(selected[i]); break; case EnumPatchType.Edge: ShowOneRingEdgeOfVertex(selected[i]); break; case EnumPatchType.Face: ShowOneRingFaceOfVertex(selected[i]); break; } } }
public static bool[] CollectVertex(TriMesh mesh, EnumPatchType type) { bool[] selectedFlags = new bool[mesh.Vertices.Count]; switch (type) { case EnumPatchType.Vertex: foreach (var v in mesh.Vertices) { if (v.Traits.SelectedFlag > 0) { selectedFlags[v.Index] = true; } } break; case EnumPatchType.Edge: foreach (var e in mesh.Edges) { if (e.Traits.SelectedFlag > 0) { selectedFlags[e.Vertex0.Index] = true; selectedFlags[e.Vertex1.Index] = true; } } break; case EnumPatchType.Face: foreach (var f in mesh.Faces) { if (f.Traits.SelectedFlag > 0) { foreach (var v in f.Vertices) { selectedFlags[v.Index] = true; } } } break; default: return null; } return selectedFlags; }
public static void ShowOneRingOfFace(TriMesh mesh, EnumPatchType type) { List<TriMesh.Face> selected = RetrieveSelectedFace(mesh); foreach (var face in selected) { switch (type) { case EnumPatchType.Vertex: ShowOneRingOfPatch(mesh, EnumPatchType.Face, type); break; case EnumPatchType.Edge: ShowOneRingOfPatch(mesh, EnumPatchType.Face, type); break; case EnumPatchType.Face: ShowOneRingFaceOfFace(face); break; default: break; } } }
public static void ShowOneRingOfEdge(TriMesh mesh, EnumPatchType type) { List <TriMesh.Edge> selected = RetrieveSelectedEdge(mesh); for (int i = 0; i < selected.Count; i++) { switch (type) { case EnumPatchType.Vertex: ShowOneRingVertexOfEdge(selected[i]); break; case EnumPatchType.Edge: ShowOneRingEdgeOfEdge(selected[i]); break; case EnumPatchType.Face: ShowOneRingFaceOfEdge(selected[i]); break; } } }