internal static void DrawGizmo(Vector3 position, Matrix4x4 matrix, float size = -1f)
        {
            var p = matrix.MultiplyPoint3x4(position);

            size = HandleUtility.GetHandleSize(p) * size < 0f ? k_DefaultGizmoSize : size;

            using (var lineDrawer = new LineDrawingScope(Color.green, -1f, CompareFunction.Always))
            {
                lineDrawer.DrawLine(p, p + matrix.MultiplyVector(Vector3.up) * size);
                lineDrawer.SetColor(Color.red);
                lineDrawer.DrawLine(p, p + matrix.MultiplyVector(Vector3.right) * size);
                lineDrawer.SetColor(Color.blue);
                lineDrawer.DrawLine(p, p + matrix.MultiplyVector(Vector3.forward) * size);
            }
        }
        internal static void DrawGizmo(Vector3 position, Quaternion rotation, float size = -1f)
        {
            var p = position;

            size = HandleUtility.GetHandleSize(p) * size < 0f ? .5f : size;

            using (var lineDrawer = new LineDrawingScope(Color.green, -1f, CompareFunction.Always))
            {
                lineDrawer.DrawLine(p, p + rotation * Vector3.up * size);
                lineDrawer.SetColor(Color.red);
                lineDrawer.DrawLine(p, p + rotation * Vector3.right * size);
                lineDrawer.SetColor(Color.blue);
                lineDrawer.DrawLine(p, p + rotation * Vector3.forward * size);
            }
        }
Beispiel #3
0
        public static void DrawSceneSelection(SceneSelection selection)
        {
            var mesh = selection.mesh;

            if (mesh == null)
            {
                return;
            }

            var positions = mesh.positionsInternal;

            // Draw nearest edge
            if (selection.face != null)
            {
                using (new TriangleDrawingScope(s_PreselectionColor))
                {
                    GL.MultMatrix(mesh.transform.localToWorldMatrix);

                    var face = selection.face;
                    var ind  = face.indexes;

                    for (int i = 0, c = ind.Count; i < c; i += 3)
                    {
                        GL.Vertex(positions[ind[i]]);
                        GL.Vertex(positions[ind[i + 1]]);
                        GL.Vertex(positions[ind[i + 2]]);
                    }
                }
            }
            else if (selection.edge != Edge.Empty)
            {
                using (var drawingScope = new LineDrawingScope(s_PreselectionColor, -1f, CompareFunction.Always))
                {
                    GL.MultMatrix(mesh.transform.localToWorldMatrix);
                    drawingScope.DrawLine(positions[selection.edge.a], positions[selection.edge.b]);
                }
            }
            else if (selection.vertex > -1)
            {
                using (var drawingScope = new PointDrawingScope(s_PreselectionColor, CompareFunction.Always)
                {
                    matrix = mesh.transform.localToWorldMatrix
                })
                {
                    drawingScope.Draw(positions[selection.vertex]);
                }
            }
        }
Beispiel #4
0
        void DrawSceneSelectionInternal(SceneSelection selection)
        {
            var mesh = selection.mesh;

            if (mesh == null)
            {
                return;
            }

            var positions = mesh.positionsInternal;

            // Draw nearest edge
            if (selection.face != null)
            {
                using (new TriangleDrawingScope(preselectionColor))
                {
                    GL.MultMatrix(mesh.transform.localToWorldMatrix);

                    var face = selection.face;
                    var ind  = face.indexes;

                    for (int i = 0, c = ind.Count; i < c; i += 3)
                    {
                        GL.Vertex(positions[ind[i]]);
                        GL.Vertex(positions[ind[i + 1]]);
                        GL.Vertex(positions[ind[i + 2]]);
                    }
                }
            }
            else if (selection.edge != Edge.Empty)
            {
                using (var drawingScope = new LineDrawingScope(preselectionColor, -1f, CompareFunction.Always))
                {
                    GL.MultMatrix(mesh.transform.localToWorldMatrix);
                    drawingScope.DrawLine(positions[selection.edge.a], positions[selection.edge.b]);
                }
            }
            else if (selection.vertex > -1)
            {
                var size = dotCapSize;

                using (new Handles.DrawingScope(preselectionColor, mesh.transform.localToWorldMatrix))
                {
                    var pos = positions[selection.vertex];
                    Handles.DotHandleCap(-1, pos, Quaternion.identity, HandleUtility.GetHandleSize(pos) * size, Event.current.type);
                }
            }
        }