Пример #1
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);
    }
Пример #2
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();
        }
    }
Пример #3
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);
    }
Пример #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();
        }
    }
Пример #5
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();
        }
    }
Пример #6
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();
        }
    }