Esempio n. 1
0
        private void OnMeshSelected(ManualUVSelection uvSelection)
        {
            PBMesh mesh = uvSelection.Mesh;

            PBEdge[] meshEdges = mesh.Edges;
            Dictionary <int, List <int> > faceToEdge = new Dictionary <int, List <int> >();

            Tuple <int, int>[] edges = new Tuple <int, int> [meshEdges.Length];
            for (int i = 0; i < meshEdges.Length; ++i)
            {
                PBEdge edge = meshEdges[i];
                edges[i] = new Tuple <int, int>(edge.A, edge.B);

                List <int> edgeIndices;
                if (!faceToEdge.TryGetValue(edge.FaceIndex, out edgeIndices))
                {
                    edgeIndices = new List <int>();
                    faceToEdge.Add(edge.FaceIndex, edgeIndices);
                }

                edgeIndices.Add(i);
            }

            ManualUVRenderer uvRenderer = m_meshToRenderer[mesh];

            uvRenderer.UV          = mesh.Textures;
            uvRenderer.IsSelected  = new bool[uvRenderer.UV.Length];
            uvRenderer.Edges       = edges;
            uvRenderer.FaceToEdges = faceToEdge;
            uvRenderer.Faces       = mesh.Faces.Select(f => f.Indexes).ToArray();
            uvRenderer.Refresh(false, false);
        }
Esempio n. 2
0
 private void RefreshUVRenderers()
 {
     foreach (KeyValuePair <PBMesh, ManualUVRenderer> kvp in m_meshToRenderer)
     {
         PBMesh           mesh     = kvp.Key;
         ManualUVRenderer renderer = kvp.Value;
         renderer.UV = mesh.Textures;
         renderer.Refresh(true, false);
     }
 }
Esempio n. 3
0
        private void OnModeChanged(ProBuilderToolMode oldMode)
        {
            switch (m_tool.Mode)
            {
            case ProBuilderToolMode.Vertex:
                foreach (ManualUVSelection selection in m_uvEditor.Selection)
                {
                    ManualUVRenderer uvRenderer = m_meshToRenderer[selection.Mesh];

                    uvRenderer.Mode = ManualUVRenderer.RenderMode.Vertex;
                    uvRenderer.Refresh(false, false);

                    OnUVSelectionChanged(selection);
                }
                break;

            case ProBuilderToolMode.Face:
                foreach (ManualUVSelection selection in m_uvEditor.Selection)
                {
                    ManualUVRenderer uvRenderer = m_meshToRenderer[selection.Mesh];

                    uvRenderer.Mode = ManualUVRenderer.RenderMode.Face;
                    uvRenderer.Refresh(false, false);

                    OnUVSelectionChanged(selection);
                }
                break;

            default:
                foreach (ManualUVSelection selection in m_uvEditor.Selection)
                {
                    ManualUVRenderer uvRenderer = m_meshToRenderer[selection.Mesh];

                    uvRenderer.Mode = ManualUVRenderer.RenderMode.Edge;
                    uvRenderer.Refresh(false, false);

                    OnUVSelectionChanged(selection);
                }
                break;
            }

            m_uvEditor.RefreshPivotPoint();
        }
Esempio n. 4
0
        private void OnUVSelectionChanged(ManualUVSelection selection)
        {
            ManualUVRenderer renderer = m_meshToRenderer[selection.Mesh];

            if (m_tool.Mode == ProBuilderToolMode.Vertex)
            {
                Color[] vertexColors = renderer.VertexColors;
                bool[]  isSelected   = renderer.IsSelected;
                for (int i = 0; i < vertexColors.Length; ++i)
                {
                    bool selected = selection.Vertices.Contains(i);
                    vertexColors[i] = selected ? m_selectionColor : Color.white;
                    isSelected[i]   = selected;
                }
            }
            else if (m_tool.Mode == ProBuilderToolMode.Edge)
            {
                PBEdge[] edges      = selection.Mesh.Edges;
                Color[]  edgeColors = renderer.EdgeColors;
                bool[]   isSelected = renderer.IsSelected;
                for (int i = 0; i < isSelected.Length; ++i)
                {
                    isSelected[i] = false;
                }

                for (int i = 0; i < edgeColors.Length; ++i)
                {
                    int  edgeIndex = i / 2;
                    bool selected  = selection.Edges.Contains(edgeIndex);
                    edgeColors[i] = selected ? m_selectionColor : Color.white;

                    PBEdge edge = edges[edgeIndex];
                    isSelected[edge.A] = selected;
                    isSelected[edge.B] = selected;
                }
            }
            else
            {
                Color[] vertexColors = renderer.VertexColors;
                int[][] faces        = renderer.Faces;
                bool[]  isSelected   = renderer.IsSelected;
                for (int i = 0; i < isSelected.Length; ++i)
                {
                    isSelected[i] = false;
                }
                for (int i = 0; i < vertexColors.Length; ++i)
                {
                    bool selected = selection.Faces.Contains(i);
                    vertexColors[i] = selected ? m_selectionColor : Color.white;

                    if (selected)
                    {
                        int[] faceIdexes = faces[i];
                        for (int j = 0; j < faceIdexes.Length; ++j)
                        {
                            int faceIndex = faceIdexes[j];
                            isSelected[faceIndex] = true;
                        }
                    }
                }

                Color[] edgeColors = renderer.EdgeColors;
                for (int i = 0; i < edgeColors.Length; ++i)
                {
                    edgeColors[i] = Color.white;
                }

                Dictionary <int, List <int> > faceToEdges = renderer.FaceToEdges;
                foreach (int faceIndex in selection.Faces)
                {
                    List <int> edgeIndices = faceToEdges[faceIndex];
                    for (int i = 0; i < edgeIndices.Count; ++i)
                    {
                        int edgeIndex = edgeIndices[i];
                        edgeColors[edgeIndex * 2 + 0] = m_selectionColor;
                        edgeColors[edgeIndex * 2 + 1] = m_selectionColor;
                    }
                }
            }

            renderer.Refresh(true, true);
        }