CanvasCross class

This is a sub-class of the Canvas_2D class, to deal especifically with axes that present only 2D behavior, on the Cross process app.

Contents

Author

History

@version 1.00

Initial version (1.00): September 2022

Initially prepared for the course CIV 2801 - Fundamentos de Computação Gráfica, 2021, second term, Department of Civil Engineering, PUC-Rio.

Class definition

classdef CanvasCross < Canvas_2D

Public properties - mouse events

    properties (Access = public)
        control = [];               % handle to Cross control object
        firstPosition = [];         % x and y coordinates of the first pointer position.
        firstPositionGiven = false; % flag indicating that first point was selected.
    end

Constructor method

    methods
        function this = CanvasCross(ax,fig,fcn,control)
            if (nargin == 0)
                ax  = [];
                fig = [];
                fcn = [];
            elseif (nargin <= 2)
                fcn = [];
            end
            this = this@Canvas_2D(ax,fig,fcn);
            this.control = control;
        end
    end

Public methods

Implementation of the abstract methods declared in super-class Canvas.

    methods
        %------------------------------------------------------------------
        % Mouse button down callback - related to axes object
        % Input:
        % * this  = handle to this canvas object
        % * obj   = handle to graphical object that was clicked on
        % * event = struct with event data
        function ax_onButtonDown(~,~,~)
        end

        %------------------------------------------------------------------
        % Mouse button down callback - generic callback, called from an
        % Emouse object.
        % Input:
        % * this  = handle to this canvas object
        % * pt    = current cursor coordinates
        % * whichMouseButton = 'left', 'right', 'center', 'double click'
        function onButtonDown(this,pt,whichMouseButton)
            switch whichMouseButton
                case 'left'
                    % Store first position coordinates
                    this.firstPosition = pt;

                    % Set boolean flag
                    this.firstPositionGiven = true;

                    % Call Cross control button down method
                    this.control.onButtonDown(this,pt);
            end
        end

        %------------------------------------------------------------------
        % Mouse button up callback - generic callback, called from an
        % Emouse object.
        % Input:
        % * this  = handle to this canvas object
        % * pt    = current cursor coordinates
        % * whichMouseButton = 'left', 'right', 'center', 'double click'
        function onButtonUp(this,pt,~)
            % Call Cross control button up method
            this.control.onButtonUp(this,pt);

            % Set boolean flag
            this.firstPositionGiven = false;
        end

        %------------------------------------------------------------------
        % Mouse move callback - generic callback, called from an
        % Emouse object.
        % Input:
        % * this  = handle to this canvas object
        % * pt    = current cursor coordinates
        function onMouseMove(this,pt)
            % Check if mouse is collecting second point
            if this.firstPositionGiven
                % Check if second point is different from first
                if all(this.firstPosition(1:2,1) ~= pt(1:2,1))
                    % Call Cross control mouse move method
                    this.control.onMouseMove(this,pt);
                end
            else
                % If mouse is not collecting second point, change
                % mouse pointer depending on current action.
                this.control.setMousePointer(this,this.fig,pt);
            end
        end

        %------------------------------------------------------------------
        % Mouse scroll callback - generic callback, called from an
        % Emouse object.
        % Input:
        % * this  = handle to this canvas object
        % * pt    = current cursor coordinates
        function onMouseScroll(~,~)
        end
    end
end