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