示例#1
0
        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;
                }
            }
        }
示例#2
0
        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;
                }
            }
        }
示例#3
0
        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;
     }
 }
示例#5
0
        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);
        }
示例#6
0
        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;
                }
            }
        }
示例#7
0
 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;
         }
     }
 }
示例#8
0
        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;
 }
示例#10
0
 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;
         }
     }
 }
示例#11
0
        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;
                }
            }
        }
示例#12
0
        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;
                }

            }
        }
示例#13
0
 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;
         }
     }
 }