Esempio n. 1
0
        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]);
                }
            }
        }