public static void SetFaceColors(Color col) { col = PlayerSettings.colorSpace == ColorSpace.Linear ? col.linear : col; ProBuilderMesh[] selection = InternalUtility.GetComponents <ProBuilderMesh>(Selection.transforms); UndoUtility.RecordSelection(selection, "Apply Vertex Colors"); ProBuilderEditor editor = ProBuilderEditor.instance; if (editor && ProBuilderEditor.selectMode.ContainsFlag(SelectMode.Vertex | SelectMode.Edge | SelectMode.Face)) { switch (ProBuilderEditor.selectMode) { case SelectMode.Face: case SelectMode.TextureFace: foreach (ProBuilderMesh mesh in selection) { Color[] colors = mesh.GetColors(); foreach (int i in mesh.selectedIndexesInternal) { colors[i] = col; } mesh.colors = colors; } break; case SelectMode.Edge: case SelectMode.Vertex: foreach (var mesh in selection) { Color[] colors = mesh.GetColors(); foreach (int i in mesh.GetCoincidentVertices(mesh.selectedIndexesInternal)) { colors[i] = col; } mesh.colors = colors; } break; } } else { foreach (ProBuilderMesh pb in selection) { foreach (Face face in pb.facesInternal) { pb.SetFaceColor(face, col); } } } foreach (ProBuilderMesh pb in selection) { pb.ToMesh(); pb.Refresh(); pb.Optimize(); } EditorUtility.ShowNotification("Set Vertex Colors\n" + ColorUtility.GetColorName(col)); }
void OnSceneGUI(SceneView view) { s_Points.Clear(); var coord = OffsetElements.s_CoordinateSpace.value; var offset = OffsetElements.s_Translation.value; var handleRotation = MeshSelection.GetHandleRotation(); var camera = view.camera.transform.forward * -.01f; foreach (var selection in MeshSelection.elementSelection) { var mesh = selection.mesh; if (coord == OffsetElements.CoordinateSpace.Element) { foreach (var elements in selection.elementGroups) { s_Points.Add(elements.position + camera); s_Points.Add(elements.rotation * offset); } } else { var preview = offset; if (coord == OffsetElements.CoordinateSpace.Handle) { preview = handleRotation * offset; } else if (coord == OffsetElements.CoordinateSpace.Local) { preview = mesh.transform.TransformDirection(offset); } foreach (var elements in selection.elementGroups) { s_Points.Add(elements.position + camera); s_Points.Add(preview); } } } using (var lines = new EditorHandleDrawing.LineDrawingScope(ColorUtility.GetColor(offset))) { for (int i = 0; i < s_Points.Count; i += 2) { lines.DrawLine(s_Points[i], s_Points[i] + s_Points[i + 1]); } } using (var points = new EditorHandleDrawing.PointDrawingScope(Color.gray)) { for (int i = 0; i < s_Points.Count; i += 2) { points.Draw(s_Points[i]); } } using (var points = new EditorHandleDrawing.PointDrawingScope(ColorUtility.GetColor(offset))) { for (int i = 0; i < s_Points.Count; i += 2) { points.Draw(s_Points[i] + s_Points[i + 1]); } } }