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); }
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); } }
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(); }
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); }