Esempio n. 1
0
        public override MeshSelection Unselect(Material material)
        {
            MeshSelection selection = IMeshEditorExt.Select(material);

            selection.FacesToEdges(true);

            foreach (KeyValuePair <ProBuilderMesh, IList <Edge> > kvp in selection.UnselectedEdges.ToArray())
            {
                m_edgeSelection.FindCoincidentEdges(kvp.Key);
                IList <Edge> edges = m_edgeSelection.GetCoincidentEdges(kvp.Value).ToList();

                for (int i = edges.Count - 1; i >= 0; i--)
                {
                    Edge edge = edges[i];
                    if (!m_edgeSelection.IsSelected(kvp.Key, edge))
                    {
                        edges.Remove(edge);
                    }
                }

                if (edges.Count == 0)
                {
                    selection.UnselectedEdges.Remove(kvp.Key);
                }
                else
                {
                    m_edgeSelection.Remove(kvp.Key, edges);
                }
            }
            if (selection.UnselectedEdges.Count == 0)
            {
                return(null);
            }
            return(selection);
        }
Esempio n. 2
0
        public MeshSelection ToEdges(bool invert, bool partial = false)
        {
            MeshSelection selection = new MeshSelection(this);

            if (selection.HasFaces)
            {
                selection.FacesToEdges(invert);
            }
            else if (selection.HasVertices)
            {
                selection.VerticesToEdges(invert, partial);
            }
            else
            {
                selection.SelectedFaces.Clear();
                selection.UnselectedFaces.Clear();
                selection.SelectedIndices.Clear();
                selection.UnselectedIndices.Clear();
            }
            return(selection);
        }
Esempio n. 3
0
        public void Merge(MeshSelection selection, bool partial)
        {
            if (HasFaces)
            {
                if (selection.HasEdges)
                {
                    selection.EdgesToFaces(false, partial);
                }
                else if (selection.HasVertices)
                {
                    selection.VerticesToFaces(false, partial);
                }

                foreach (KeyValuePair <ProBuilderMesh, IList <int> > kvp in selection.SelectedFaces)
                {
                    ProBuilderMesh mesh  = kvp.Key;
                    IList <int>    faces = kvp.Value;

                    if (!SelectedFaces.ContainsKey(mesh))
                    {
                        SelectedFaces.Add(mesh, faces);
                    }
                    else
                    {
                        IList <int> existingFaces = SelectedFaces[mesh].ToList();
                        MergeLists(faces, existingFaces);
                        SelectedFaces[mesh] = existingFaces;
                    }
                }

                foreach (KeyValuePair <ProBuilderMesh, IList <int> > kvp in selection.UnselectedFaces)
                {
                    ProBuilderMesh mesh  = kvp.Key;
                    IList <int>    faces = kvp.Value;

                    if (!UnselectedFaces.ContainsKey(mesh))
                    {
                        UnselectedFaces.Add(mesh, faces);
                    }
                    else
                    {
                        IList <int> existingFaces = UnselectedFaces[mesh].ToList();
                        MergeLists(faces, existingFaces);
                        UnselectedFaces[mesh] = existingFaces;
                    }
                }
            }
            else if (HasEdges)
            {
                if (selection.HasFaces)
                {
                    selection.FacesToEdges(false);
                }
                else if (selection.HasVertices)
                {
                    selection.VerticesToEdges(false, partial);
                }

                foreach (KeyValuePair <ProBuilderMesh, IList <Edge> > kvp in selection.SelectedEdges)
                {
                    ProBuilderMesh mesh  = kvp.Key;
                    IList <Edge>   edges = kvp.Value;

                    if (!SelectedEdges.ContainsKey(mesh))
                    {
                        SelectedEdges.Add(mesh, edges);
                    }
                    else
                    {
                        IList <Edge> existingEdges = SelectedEdges[mesh].ToList();
                        MergeLists(edges, existingEdges);
                        SelectedEdges[mesh] = existingEdges;
                    }
                }

                foreach (KeyValuePair <ProBuilderMesh, IList <Edge> > kvp in selection.UnselectedEdges)
                {
                    ProBuilderMesh mesh  = kvp.Key;
                    IList <Edge>   edges = kvp.Value;

                    if (!UnselectedEdges.ContainsKey(mesh))
                    {
                        UnselectedEdges.Add(mesh, edges);
                    }
                    else
                    {
                        IList <Edge> existingEdges = UnselectedEdges[mesh].ToList();
                        MergeLists(edges, existingEdges);
                        UnselectedEdges[mesh] = existingEdges;
                    }
                }
            }
            else if (HasVertices)
            {
                if (selection.HasFaces)
                {
                    selection.FacesToVertices(false);
                }
                else if (selection.HasEdges)
                {
                    selection.EdgesToVertices(false);
                }

                foreach (KeyValuePair <ProBuilderMesh, IList <int> > kvp in selection.SelectedIndices)
                {
                    ProBuilderMesh mesh    = kvp.Key;
                    IList <int>    indexes = kvp.Value;

                    if (!SelectedIndices.ContainsKey(mesh))
                    {
                        SelectedIndices.Add(mesh, indexes);
                    }
                    else
                    {
                        IList <int> existingIndexes = SelectedIndices[mesh].ToList();
                        MergeLists(indexes, existingIndexes);
                        SelectedIndices[mesh] = existingIndexes;
                    }
                }

                foreach (KeyValuePair <ProBuilderMesh, IList <int> > kvp in selection.SelectedIndices)
                {
                    ProBuilderMesh mesh    = kvp.Key;
                    IList <int>    indexes = kvp.Value;

                    if (!UnselectedIndices.ContainsKey(mesh))
                    {
                        UnselectedIndices.Add(mesh, indexes);
                    }
                    else
                    {
                        IList <int> existingIndexes = UnselectedIndices[mesh].ToList();
                        MergeLists(indexes, existingIndexes);
                        UnselectedIndices[mesh] = existingIndexes;
                    }
                }
            }
        }