xline Delete Issue

Batuhan Coskun
Batuhan Coskun Altair Community Member
edited August 2023 in Community Q&A

Hi everyone,

I face a problem, when I delete xline in figure. I want to create new xline when push the button, then remove the old xline. I use GUI button for this. When I push the button, it is work for two steps. However, when I push it third time, it is not remove the xline. Then, it works up to two steps. After that I face this problem again. Only one curve should remain in the figure. However, It holds ('Curve 2, Curve 4, Curve 5, Curve 7, Curve 9......') in the figure. If I write delete and create command in OML Command Window, I don't face any problem. I face a problem, when I call this command with function. Is this a bug about Compose ?

 

I am sharing this code in the below.

global second_line;

global sc_Value;

function button_callback(handle,callstate)

      global second_line;

      global sc_Value;

      try

           delete(second_line);

      end

      second_line=xline(get(sc_Value,'value'));

end

Answers

  • RSGarciarivas
    RSGarciarivas
    Altair Employee
    edited August 2023

    Hi Batuhan,

    Can you share the full GUI so I can test a possible solution on my side?

    Rafael

  • Batuhan Coskun
    Batuhan Coskun Altair Community Member
    edited August 2023

    Hi Rafael Sánchez,

    I am sorry for the late reply. I can't share the full GUI model. However, I am sharing an example about it. You can examine it below.

     

    -----------------------------------------------------------------------------------------------------------

    global first line

     

    Dialog = figure ('units', 'pixels', 'position', [0 0 410 310]...

    ,'numbertitle','off', 'name','Dialog');

    undock (Dialog);

     

    uiPushButton = uicontrol ('parent', Dialog, 'style', 'pushbutton'...

     ,'string','TEST'...

     ,'backgroundimage',''...

     ,'callback', 'uiPushButton_callback', 'interruptible','off'...

     ,'enable', 'on'...

     ,'units', 'normalized', 'position',[0.30 0.20 0.25 0.10]...

     ,'fontname', 'MS Shell Dlg', 'fontangle','regular', 'fontweight', 'normal', 'fontsize',8.25 ...

     ,'backgroundcolor', [246 246 246] ...

     , 'tag','','tooltipstring','','userdata',[],'visible','on');

     

    figure 2

    x = [0 1 2 3 4 5]

    y = [5 2 8 4 1 12]

    plot(x,y)

     

    function uiPushButton_callback(handle,callstate)

       global first_line

       try

           delete(first_line);

       end

       first_line = xline(rand,'color','k');

    end

  • RSGarciarivas
    RSGarciarivas
    Altair Employee
    edited August 2023

    Hi Rafael Sánchez,

    I am sorry for the late reply. I can't share the full GUI model. However, I am sharing an example about it. You can examine it below.

     

    -----------------------------------------------------------------------------------------------------------

    global first line

     

    Dialog = figure ('units', 'pixels', 'position', [0 0 410 310]...

    ,'numbertitle','off', 'name','Dialog');

    undock (Dialog);

     

    uiPushButton = uicontrol ('parent', Dialog, 'style', 'pushbutton'...

     ,'string','TEST'...

     ,'backgroundimage',''...

     ,'callback', 'uiPushButton_callback', 'interruptible','off'...

     ,'enable', 'on'...

     ,'units', 'normalized', 'position',[0.30 0.20 0.25 0.10]...

     ,'fontname', 'MS Shell Dlg', 'fontangle','regular', 'fontweight', 'normal', 'fontsize',8.25 ...

     ,'backgroundcolor', [246 246 246] ...

     , 'tag','','tooltipstring','','userdata',[],'visible','on');

     

    figure 2

    x = [0 1 2 3 4 5]

    y = [5 2 8 4 1 12]

    plot(x,y)

     

    function uiPushButton_callback(handle,callstate)

       global first_line

       try

           delete(first_line);

       end

       first_line = xline(rand,'color','k');

    end

    Hi Batuhan. Instead of trying to delete the line, I would toggle its visibility off. You can try something like this:

    close all, clear, clc

    Dialog = figure('units', 'pixels', 'position', [0 0 410 310]...
    ,'numbertitle','off', 'name','Dialog');

    undock(Dialog);

    uiPushButton = uicontrol('parent', Dialog, 'style', 'pushbutton'...
    ,'string','TEST'...
    ,'backgroundimage',''...
    ,'callback', 'uiPushButton_callback', 'interruptible','off'...
    ,'enable', 'on'...
    ,'units', 'normalized', 'position',[0.30 0.20 0.25 0.10]...
    ,'fontname', 'MS Shell Dlg', 'fontangle','regular', 'fontweight', 'normal', 'fontsize',8.25 ...
    ,'backgroundcolor', [246 246 246] ...
    , 'tag','','tooltipstring','','userdata',[],'visible','on');

    % Create new figure and axes
    fig = figure(2);
    ax = axes(fig, 'tag', 'Axes');

    % Mock data for figure
    x = [0 1 2 3 4 5];
    y = [5 2 8 4 1 12];

    % Plot mock data on axes
    h = plot(ax, x,y);

    function uiPushButton_callback(handle,callstate)
        
        % Get axes handle within this function
        ax = findobj('tag', 'Axes');
        % Get handles of lines currently present
        presentLines = get(ax, 'children');
        
        % Disable most recently-added line if there's more than 1
        if numel(presentLines) > 1
            lastLine = get(ax, 'children')(1);
            set(lastLine, 'visible', 'off');
        end
        
        % Create new line
        newLine = xline(ax, rand, 'color', 'k');
        
    end

    I'm attaching the script as well.

    Rafael