Exemplo n.º 1
0
    HairyPlotterTriangle RaycastTriangle()
    {
        // This transform from GUI space to scene camera ray
        Ray r = HandleUtility.GUIPointToWorldRay(Event.current.mousePosition);

        // Iterate over each triangle in plotter
        for (int i = 0; i < plotter.TriangleCount; ++i)
        {
            // Grab triangle
            HairyPlotterTriangle triangle = plotter.GetTriangle(i);

            // Intersect ray
            if (HairyPlotter.RayIntersectsTriangle(
                    r,
                    triangle.GetVertex(0).Position,
                    triangle.GetVertex(1).Position,
                    triangle.GetVertex(2).Position
                    ))
            {
                // Found!
                plotter.CurrentAction = HairyPlotterActions.None;

                // Destroy triangle
                return(triangle);
            }
        }

        return(null);
    }
Exemplo n.º 2
0
    HairyPlotterTriangle RaycastTriangle()
    {
        // This transform from GUI space to scene camera ray
        Ray       r = HandleUtility.GUIPointToWorldRay(Event.current.mousePosition);
        Transform t = plotter.transform;         // this for position gizmo vertices and triangles according parent game object world coordinates

        // Iterate over each triangle in plotter
        for (int i = 0; i < plotter.TriangleCount; ++i)
        {
            // Grab triangle
            HairyPlotterTriangle triangle = plotter.GetTriangle(i);

            // Intersect ray
            if (HairyPlotter.RayIntersectsTriangle(
                    r,
                    t.TransformPoint(triangle.GetVertex(0).Position),
                    t.TransformPoint(triangle.GetVertex(1).Position),
                    t.TransformPoint(triangle.GetVertex(2).Position)
                    ))
            {
                // Found!
                plotter.CurrentAction = HairyPlotterActions.None;
                return(triangle);
            }
        }

        return(null);
    }
Exemplo n.º 3
0
    public void DestroyTriangle(HairyPlotterTriangle triangle)
    {
        if (triangle != null)
        {
            // Mark dirty
            Dirty = true;

            // Clear hover state
            if (triangleHover == triangle)
            {
                triangleHover = null;
            }

            // Remove selection
            triangleSelection.Remove(triangle);

            // Remove triangle from mesh
            triangles.Remove(triangle);

            // Remove triangle from it's three vertices
            triangle.GetVertex(0).RemoveTriangle(triangle);
            triangle.GetVertex(1).RemoveTriangle(triangle);
            triangle.GetVertex(2).RemoveTriangle(triangle);

            // Clear link between triangle and vertices
            triangle.ClearVertices();

            // Update
            UpdateVertexIndexes();
        }
    }
Exemplo n.º 4
0
    void DrawTriangles()
    {
        if (plotter.HoveredTriangle != null)
        {
            HairyPlotterTriangle tri = plotter.HoveredTriangle;

            highlightMaterial.SetPass(0);

            GL.Begin(GL.TRIANGLES);
            GL.Color(TriangleHoverColor);
            GL.Vertex(tri.GetVertex(0).Position);
            GL.Vertex(tri.GetVertex(1).Position);
            GL.Vertex(tri.GetVertex(2).Position);
            GL.End();
        }

        List <HairyPlotterTriangle> selectedTriangles = plotter.SelectedTriangles;

        if (selectedTriangles.Count > 0)
        {
            GL.Begin(GL.TRIANGLES);
            GL.Color(TriangleSelectedColor);

            for (int i = 0; i < selectedTriangles.Count; ++i)
            {
                HairyPlotterTriangle tri = selectedTriangles[i];
                GL.Vertex(tri.GetVertex(0).Position);
                GL.Vertex(tri.GetVertex(1).Position);
                GL.Vertex(tri.GetVertex(2).Position);
            }

            GL.End();
        }
    }
Exemplo n.º 5
0
    void DrawTriangles()
    {
        if (plotter.HoveredTriangle != null)
        {
            HairyPlotterTriangle tri = plotter.HoveredTriangle;
            Transform            t   = plotter.transform; // this for position gizmo vertices and triangles according parent game object world coordinates
            highlightMaterial.SetPass(0);

            GL.Begin(GL.TRIANGLES);
            GL.Color(TriangleHoverColor);
            GL.Vertex(t.TransformPoint(tri.GetVertex(0).Position));
            GL.Vertex(t.TransformPoint(tri.GetVertex(1).Position));
            GL.Vertex(t.TransformPoint(tri.GetVertex(2).Position));
            GL.End();
        }

        List <HairyPlotterTriangle> selectedTriangles = plotter.SelectedTriangles;

        if (selectedTriangles.Count > 0)
        {
            GL.Begin(GL.TRIANGLES);
            GL.Color(TriangleSelectedColor);
            Transform t = plotter.transform;             // this for position gizmo vertices and triangles according parent game object world coordinates
            for (int i = 0; i < selectedTriangles.Count; ++i)
            {
                HairyPlotterTriangle tri = selectedTriangles[i];
                GL.Vertex(t.TransformPoint(tri.GetVertex(0).Position));
                GL.Vertex(t.TransformPoint(tri.GetVertex(1).Position));
                GL.Vertex(t.TransformPoint(tri.GetVertex(2).Position));
            }

            GL.End();
        }
    }
Exemplo n.º 6
0
    public void RemoveSelection(HairyPlotterTriangle triangle)
    {
        if (triangle == null)
        {
            return;
        }

        triangleSelection.Remove(triangle);
    }
Exemplo n.º 7
0
    public HairyPlotterTriangle CreateTriangle(HairyPlotterVertex v0, HairyPlotterVertex v1, HairyPlotterVertex v2)
    {
        // Create tri
        HairyPlotterTriangle triangle = new HairyPlotterTriangle(this);

        // Set vertices for triangle
        triangle.SetVertices(v0, v1, v2);

        // Add to triangle list
        triangles.Add(triangle);

        // Return
        return(triangle);
    }
Exemplo n.º 8
0
    public void AddSelection(HairyPlotterTriangle triangle)
    {
        if (triangle == null)
        {
            return;
        }

        if (triangleHover == triangle)
        {
            triangleHover = null;
        }

        triangleSelection.Add(triangle);
    }
Exemplo n.º 9
0
    public bool ToggleSelected(HairyPlotterTriangle triangle)
    {
        if (triangle == null)
            return false;

        if (IsSelected(triangle))
        {
            RemoveSelection(triangle);
        }
        else
        {
            AddSelection(triangle);
        }

        return true;
    }
Exemplo n.º 10
0
    void OnSceneGUI()
    {
        if (!plotter)
        {
            return;
        }

        plotter.InitEditing();

        if (plotter.CurrentAction == HairyPlotterActions.None)
        {
            plotter.SetTriangleHover(HoverTriangle());

            if (plotter.ToggleSelected(PickTriangle()))
            {
                Repaint();
            }

            if (plotter.HoveredTriangle != null)
            {
                SceneView.lastActiveSceneView.Repaint();
            }
        }

        if (plotter.CurrentAction == HairyPlotterActions.TriangleSwitch)
        {
            HairyPlotterTriangle triangle = PickTriangle();

            if (triangle != null)
            {
                List <HairyPlotterVertex> vertices = plotter.SelectedVertices;

                if (vertices.Count == 2)
                {
                    triangle.SwitchVertices(vertices[0], vertices[1]);
                    plotter.ClearVertexSelection();
                }
                else
                {
                    Debug.LogWarning("Switch In Triangle requires exactly two selected vertices");
                }
            }
        }

        DrawTriangles();
    }
Exemplo n.º 11
0
    public bool ToggleSelected(HairyPlotterTriangle triangle)
    {
        if (triangle == null)
        {
            return(false);
        }

        if (IsSelected(triangle))
        {
            RemoveSelection(triangle);
        }
        else
        {
            AddSelection(triangle);
        }

        return(true);
    }
Exemplo n.º 12
0
 public void AddTriangle(HairyPlotterTriangle triangle)
 {
     triangles.Add(triangle);
 }
Exemplo n.º 13
0
 public void ClearTriangles()
 {
     triangles.Clear();
     triangleHover = null;
     Dirty = true;
 }
Exemplo n.º 14
0
    public void DestroyTriangle(HairyPlotterTriangle triangle)
    {
        if (triangle != null)
        {
            // Mark dirty
            Dirty = true;

            // Clear hover state
            if (triangleHover == triangle)
                triangleHover = null;

            // Remove selection
            triangleSelection.Remove(triangle);

            // Remove triangle from mesh
            triangles.Remove(triangle);

            // Remove triangle from it's three vertices
            triangle.GetVertex(0).RemoveTriangle(triangle);
            triangle.GetVertex(1).RemoveTriangle(triangle);
            triangle.GetVertex(2).RemoveTriangle(triangle);

            // Clear link between triangle and vertices
            triangle.ClearVertices();

            // Update
            UpdateVertexIndexes();
        }
    }
Exemplo n.º 15
0
    public HairyPlotterTriangle CreateTriangle(HairyPlotterVertex v0, HairyPlotterVertex v1, HairyPlotterVertex v2)
    {
        // Create tri
        HairyPlotterTriangle triangle = new HairyPlotterTriangle(this);

        // Set vertices for triangle
        triangle.SetVertices(v0, v1, v2);

        // Add to triangle list
        triangles.Add(triangle);

        // Return
        return triangle;
    }
Exemplo n.º 16
0
 public void SetTriangleHover(HairyPlotterTriangle triangle)
 {
     triangleHover = triangle;
 }
Exemplo n.º 17
0
    public void RemoveSelection(HairyPlotterTriangle triangle)
    {
        if (triangle == null)
            return;

        triangleSelection.Remove(triangle);
    }
Exemplo n.º 18
0
 public void AddTriangle(HairyPlotterTriangle triangle)
 {
     triangles.Add(triangle);
 }
Exemplo n.º 19
0
 public bool IsSelected(HairyPlotterTriangle triangle)
 {
     return triangle != null && triangleSelection.Contains(triangle);
 }
Exemplo n.º 20
0
 public void SetTriangleHover(HairyPlotterTriangle triangle)
 {
     triangleHover = triangle;
 }
Exemplo n.º 21
0
    void OnSceneGUI()
    {
        if (!plotter)
        {
            return;
        }

        plotter.InitEditing();

        if (plotter.CurrentAction == HairyPlotterActions.None)
        {
            // don't hover triangle when moving vertices
            if (allowMoveVerts)
            {
                plotter.SetTriangleHover(null);
            }
            else
            {
                plotter.SetTriangleHover(HoverTriangle());
            }

            if (plotter.ToggleSelected(PickTriangle()) && !allowMoveVerts)
            {
                Repaint();
            }

            if (plotter.HoveredTriangle != null)
            {
                SceneView.lastActiveSceneView.Repaint();
            }

            // detect if dragging a single vertex or selected vertices and update position/s according mouse position
            if (Event.current.button == 0)
            {
                KeyCode   _keyCode = Event.current.keyCode;
                EventType _type    = Event.current.type;

                if (_type == EventType.MouseDown)
                {
                    // pick selected vertices?
                    if (_keyCode == KeyCode.LeftShift || _keyCode == KeyCode.RightShift)
                    {
                        // use plotter.SelectedVertices
                    }
                    // or pick single vertex
                    else
                    {
                        hoveredVertex = PickVertex();
                    }
                    // set flag for allow moving vertices
                    allowMoveVerts = true;
                }
                // on mouse up finish the edition
                else if (_type == EventType.MouseUp)
                {
                    allowMoveVerts = false;
                    hoveredVertex  = null;
                }
                // while dragging mouse update vertex position
                else if (_type == EventType.MouseDrag && allowMoveVerts)
                {
                    Ray       r = HandleUtility.GUIPointToWorldRay(Event.current.mousePosition);
                    Transform t = plotter.transform;                     // this for position gizmo vertices and triangles according parent game object world coordinates
                    Vector2   p = t.InverseTransformPoint(r.origin);     // use inverse trasnform because then we transform again for displaying

                    // moving selected vertices?
                    if (_keyCode == KeyCode.LeftShift || _keyCode == KeyCode.RightShift)
                    {
                        for (int i = 0, c = plotter.SelectedVertices.Count; i < c; ++i)
                        {
                            plotter.SelectedVertices[i].Position.x = p.x;
                            plotter.SelectedVertices[i].Position.y = p.y;
                            if (HairyPlotterEditor.KeepUVOnVertsMove)
                            {
                                plotter.SelectedVertices[i].Uv.x = 0.5f + p.x;
                                plotter.SelectedVertices[i].Uv.y = 0.5f + p.y;
                            }
                        }
                    }
                    // or single vertex?
                    else if (hoveredVertex != null)
                    {
                        hoveredVertex.Position.x = p.x;
                        hoveredVertex.Position.y = p.y;
                        if (HairyPlotterEditor.KeepUVOnVertsMove)
                        {
                            hoveredVertex.Uv.x = 0.5f + p.x;
                            hoveredVertex.Uv.y = 0.5f + p.y;
                        }
                    }
                    plotter.Dirty = true;
                    plotter.ResetSelectionPosition();
                }
            }
        }

        if (plotter.CurrentAction == HairyPlotterActions.TriangleSwitch)
        {
            HairyPlotterTriangle triangle = PickTriangle();

            if (triangle != null)
            {
                List <HairyPlotterVertex> vertices = plotter.SelectedVertices;

                if (vertices.Count == 2)
                {
                    triangle.SwitchVertices(vertices[0], vertices[1]);
                    plotter.ClearVertexSelection();
                }
                else
                {
                    Debug.LogWarning("Switch In Triangle requires exactly two selected vertices");
                }
            }
        }

        DrawTriangles();
    }
Exemplo n.º 22
0
 public bool IsSelected(HairyPlotterTriangle triangle)
 {
     return(triangle != null && triangleSelection.Contains(triangle));
 }
Exemplo n.º 23
0
 public void ClearTriangles()
 {
     triangles.Clear();
     triangleHover = null;
     Dirty         = true;
 }
Exemplo n.º 24
0
 public void RemoveTriangle(HairyPlotterTriangle triangle)
 {
     triangles.Remove(triangle);
 }
Exemplo n.º 25
0
    public void AddSelection(HairyPlotterTriangle triangle)
    {
        if (triangle == null)
            return;

        if (triangleHover == triangle)
        {
            triangleHover = null;
        }

        triangleSelection.Add(triangle);
    }
Exemplo n.º 26
0
 public void RemoveTriangle(HairyPlotterTriangle triangle)
 {
     triangles.Remove(triangle);
 }