void OnSceneGUI()
    {
        if (uvModifier == null)
        {
            uvModifier = (SVGUVModifier)target;
            if (uvModifier == null)
            {
                return;
            }
        }

        if (!uvModifier.enabled)
        {
            return;
        }
        if (uvModifier.svgTransform == null)
        {
            return;
        }

        var e = Event.current;

        if (e.type == EventType.ValidateCommand && e.commandName == "FrameSelected")
        {
            e.Use();
        }

        SVGTransform2D trs = new SVGTransform2D(uvModifier.svgTransform);

        if (_editMode)
        {
            if (!uvModifier.worldSpace)
            {
                trs = SVGTransform2D.DecomposeMatrix(uvModifier.transform.localToWorldMatrix * uvModifier.svgTransform.matrix);
            }
            SVGHandles.TransformHandle(trs);
            if (!uvModifier.worldSpace)
            {
                trs = SVGTransform2D.DecomposeMatrix(uvModifier.transform.worldToLocalMatrix * uvModifier.svgTransform.matrix);
            }
        }

        if (!trs.Compare(uvModifier.svgTransform))
        {
            Undo.RecordObject(target, "SVG UV Modify");
            uvModifier.svgTransform.SetTransform(trs);
            EditorUtility.SetDirty(target);
            GUI.changed = true;
        }

        if (Event.current.type == EventType.ExecuteCommand)
        {
            if (Event.current.commandName == "UndoRedoPerformed")
            {
                Repaint();
                SceneView.RepaintAll();
            }
        }
    }
示例#2
0
        protected virtual void PrepareForRendering(Mesh sharedMesh, bool force)
        {
            if (sharedMesh == null)
            {
                return;
            }

            int vertexCount = sharedMesh.vertexCount;

            tempTransform.SetTransform(svgTransform);

            if (worldSpace)
            {
                tempTransform = SVGTransform2D.DecomposeMatrix(transform.worldToLocalMatrix * svgTransform.matrix);
            }

            Quaternion rotation = Quaternion.Euler(0f, 0f, -tempTransform.rotation);
            Vector2    scale    = new Vector2((tempTransform.scale.x == 0f) ? 0f : 1f / tempTransform.scale.x,
                                              (tempTransform.scale.y == 0f) ? 0f : 1f / tempTransform.scale.y);

            Vector3[] vertices = sharedMesh.vertices;
            Vector2[] uv       = sharedMesh.uv;
            if (uv == null || uv.Length != vertices.Length)
            {
                uv = new Vector2[vertices.Length];
            }

            for (int i = 0; i < vertexCount; i++)
            {
                uv[i].x = -vertices[i].x + tempTransform.position.x;
                uv[i].y = -vertices[i].y + tempTransform.position.y;

                uv[i] = rotation * uv[i];

                uv[i].x *= scale.x;
                uv[i].y *= scale.y;

                uv[i].x += 0.5f;
                uv[i].y += 0.5f;
            }

            sharedMesh.uv = uv;
            lastMatrix    = svgTransform.matrix;
        }
        protected virtual void PrepareForRendering (Mesh sharedMesh, bool force) {
            if(sharedMesh == null) return;

            int vertexCount = sharedMesh.vertexCount;
            tempTransform.SetTransform(svgTransform);

            if(worldSpace)
            {
                tempTransform = SVGTransform2D.DecomposeMatrix(transform.worldToLocalMatrix * svgTransform.matrix);
            }

            Quaternion rotation = Quaternion.Euler(0f, 0f, -tempTransform.rotation);
            Vector2 scale = new Vector2((tempTransform.scale.x == 0f) ? 0f : 1f / tempTransform.scale.x, 
                                        (tempTransform.scale.y == 0f) ? 0f : 1f / tempTransform.scale.y);

            Vector3[] vertices = sharedMesh.vertices;
            Vector2[] uv = sharedMesh.uv;
            if(uv == null || uv.Length != vertices.Length) uv = new Vector2[vertices.Length];

            for (int i = 0; i < vertexCount; i++)
            {
                uv[i].x = -vertices[i].x + tempTransform.position.x;
                uv[i].y = -vertices[i].y + tempTransform.position.y;
                
                uv[i] = rotation * uv[i];
                
                uv[i].x *= scale.x;
                uv[i].y *= scale.y;
                
                uv[i].x += 0.5f;
                uv[i].y += 0.5f;
            }
            
            sharedMesh.uv = uv;
            lastMatrix = svgTransform.matrix;
        }