Exemple #1
0
    /// <summary>
    /// Unity OnPointerDown event handler for the ColorPanelHandler.
    /// </summary>
    /// <param name="data"></param>
    public void OnPointerDown(PointerEventData data)
    {
        // Get the local position within the color panel
        Vector2 localPosition = getLocalPositionFromScreenPosition(data.position, data.pressEventCamera);

        // Check if there is a control point at the localPosition, and return it if there is one
        transferFunction.ActiveControlPoint = getClickedPoint(localPosition);

        // Deselect any highlighted points and close the color palette
        transferFunctionHandler.dehighlightPoints();
        transferFunctionHandler.closeColorPalette();

        // Left click
        if (Input.GetMouseButton(0))
        {
            if (transferFunction.ActiveControlPoint == null)
            {
                // If no point is clicked, generate a new point to be added to the transfer function
                ControlPoint newActivePoint = getColorPointFromOffset(localPosition, transferFunctionHandler.getColorPalette().getCurrentColor());
                transferFunction.addColorPoint(newActivePoint);
                controlPointRenderers.Add(new ControlPointRenderer(newActivePoint, createControlPointImage(newActivePoint)));
                transferFunction.ActiveControlPoint = newActivePoint;
            }

            // Open the color palette
            transferFunctionHandler.openColorPalette();
            transferFunctionHandler.getColorPalette().setCurrentColor(transferFunction.ActiveControlPoint.color);
            transferFunctionHandler.getColorPalette().setSliders();
        }
        // Right click
        else if (Input.GetMouseButton(1))
        {
            if (transferFunction.ActiveControlPoint != null)
            {
                if (transferFunction.ColorPoints.Count > 2)
                {
                    // Delete the active point that was clicked
                    transferFunction.removeColorPoint(transferFunction.ActiveControlPoint);

                    // Delete its associated renderer
                    for (int i = 0; i < controlPointRenderers.Count; i++)
                    {
                        if (controlPointRenderers[i].CP.Equals(transferFunction.ActiveControlPoint))
                        {
                            controlPointRenderers[i].destruct();
                            controlPointRenderers.Remove(controlPointRenderers[i]);
                        }
                    }
                }
            }
        }
    }