Esempio n. 1
0
    private int NextIndex(int i, int j, int uOrder, int vOrder, int width, JoinType joinType)
    {
        int u = i, v = 0;

        switch (joinType)
        {
        case JoinType.FirstVRow:
            u = i;
            v = j;
            break;

        case JoinType.LastVRow:
            u = i;
            v = vOrder - j;
            break;

        case JoinType.FirstURow:
            u = j;
            v = i;
            break;

        case JoinType.LastURow:
            u = uOrder - j;
            v = i;
            break;
        }
        return(BezierGenerator.DoubleCoordinatesToIndex(u, v, width));
    }
Esempio n. 2
0
    private void CreateURow(BezierGenerator target, int addIndex)
    {
        if (addIndex > target.uOrder + 1)
        {
            return;
        }

        for (int i = 0; i <= target.vOrder; i++)
        {
            int index = BezierGenerator.DoubleCoordinatesToIndex(addIndex, i, target.uOrder + 2);
            target.controlPoints.Insert(index, Vector3.zero);
        }

        target.uOrder++;
    }
Esempio n. 3
0
    private void OnSceneGUI()
    {
        var t = target as BezierGenerator;

        m_controlPoints = new List <Vector3>(t.controlPoints);
        var uv = new Vector2(t.uOrder, t.vOrder);

        for (int i = 0; i < m_controlPoints.Count; i++)
        {
            EditorGUI.BeginChangeCheck();
            m_controlPoints[i] =
                Handles.PositionHandle(t.transform.TransformPoint(m_controlPoints[i]), Quaternion.AngleAxis(180, t.transform.up) * t.transform.rotation);
            if (EditorGUI.EndChangeCheck())
            {
                DisplaceVertices(t, m_controlPoints, i);
            }

            Vector2 coord = BezierGenerator.IndexToDoubleCoordinates(i, t.uOrder + 1);
            Handles.Label(m_controlPoints[i], "(" + (int)coord.x + "," + (int)coord.y + ")", "button");
        }

        Handles.color = Color.yellow;
        for (var v = 0; v < uv.y + 1; v++)
        {
            for (var u = 0; u < uv.x + 1; u++)
            {
                if (u > 0)
                {
                    Handles.DrawDottedLine(
                        m_controlPoints[BezierGenerator.DoubleCoordinatesToIndex(u, v, (int)uv.x + 1)],
                        m_controlPoints[BezierGenerator.DoubleCoordinatesToIndex(u - 1, v, (int)uv.x + 1)], 0.2f);
                }
                if (v > 0)
                {
                    Handles.DrawDottedLine(
                        m_controlPoints[BezierGenerator.DoubleCoordinatesToIndex(u, v, (int)uv.x + 1)],
                        m_controlPoints[BezierGenerator.DoubleCoordinatesToIndex(u, v - 1, (int)uv.x + 1)], 0.2f);
                }
            }
        }

        if (GUI.changed)
        {
            t.reDraw = true;
        }
    }
Esempio n. 4
0
    private void DisplaceVertices(BezierGenerator target, List <Vector3> cp, int cpIndex)
    {
        Vector3 delta = cp[cpIndex] - target.transform.TransformPoint(target.controlPoints[cpIndex]);

        if (_pushURow || _pushVRow)
        {
            Vector2 uvCoords = BezierGenerator.IndexToDoubleCoordinates(cpIndex, target.uOrder + 1);
            for (int j = 0; j <= (_pushURow ? target.uOrder : target.vOrder); j++)
            {
                int index = 0;

                if (_pushURow)
                {
                    index = BezierGenerator.DoubleCoordinatesToIndex(j, (int)uvCoords.y, target.uOrder + 1);
                }
                else
                {
                    index = BezierGenerator.DoubleCoordinatesToIndex((int)uvCoords.x, j, target.uOrder + 1);
                }

                if (index != cpIndex)
                {
                    if (index < cpIndex)
                    {
                        cp[index] += delta;
                    }
                    else
                    {
                        cp[index]  = target.transform.TransformPoint(cp[index]);
                        cp[index] += delta;
                    }

                    target.controlPoints[index] = target.transform.InverseTransformPoint(cp[index]);
                }
            }
        }

        target.controlPoints[cpIndex] = target.transform.InverseTransformPoint(cp[cpIndex]);
    }