Как проверить, открыта ли фигура и как ее закрыть? - PullRequest
11 голосов
/ 23 января 2009

Мой м-файл открывает цифры в зависимости от параметров. Иногда это одна цифра, иногда она открывает 2 цифры.

Если пользователь вызывает функцию, появляются цифры. Если он снова вызывает функцию с другими параметрами, я очищаю цифры с помощью clf перед новыми графиками.

Если второй вызов настроен на рисование только одной фигуры, второй (открытый предыдущим вызовом) остается серым (из-за clf).

Есть ли способ проверить, открыт ли он, и закрыть его?

Ответы [ 7 ]

18 голосов
/ 23 января 2009
close all

Закроет все открытые фигуры.

Вы можете использовать findobj() для поиска объектов, которые могут существовать, указав параметры поиска. Например:

figure('name','banana')

Создает фигуру с именем банан.

close(findobj('type','figure','name','orange'))

Ничего не делает, потому что нет открытых фигур с именем оранжевый.

close(findobj('type','figure','name','banana'))

Закрывает фигуру.

Вы можете указать параметры поиска для удовлетворения ваших потребностей.

14 голосов
/ 23 января 2009

Мне немного неясно, что вы подразумеваете под "открытым". Фигуры на самом деле не имеют «открытых» или «закрытых» состояний. Они либо существуют, либо их нет. Команда FIGURE вернет дескриптор фигуры, которую она делает:

hFig = figure(...your arguments here...);

Вы также можете получить дескриптор фигуры из функции FINDOBJ , которая найдет все графические объекты, соответствующие значениям свойств, которые вы передаете ей:

hFig = findobj(...your property/value pairs here...);

Вы можете избавиться от фигуры с помощью одной из следующих команд:

close(hFig);
delete(hFig);

Вы можете проверить, была ли фигура закрыта / удалена с помощью функции ISHANDLE :

ishandle(hFig)  %# Returns 'true' if the figure exists, 'false' if it doesn't

Фигуры также могут быть "видимыми" или "невидимыми". У них есть 'Visible' свойство , которое вы можете получить или установить значение:

get(hFig,'Visible')        %# Returns 'on' or 'off'
set(hFig,'Visible','off')  %# Makes a figure invisible, but it still
                           %#   exists (i.e. it's not closed)

Если вы хотите проверить, минимизирована ли цифра, это может быть немного сложнее. Я полагаю, что есть некоторые файлы, которые могут помочь вам в этом на MathWorks File Exchange: вот один , чтобы проверить.

4 голосов
/ 23 января 2009

В MATLAB вы можете получить информацию о «корне». Фигуры являются потомками root (дескриптор root равен 0), они являются единственными потомками root.

http://www.mathworks.com/help/techdoc/creating_plots/f7-41259.html

Зная это, вы можете попробовать этот код, который ищет дочерние элементы root и выдает список.

>> close all
>> get(0,'children')
ans =
   Empty matrix: 0-by-1
>> figure(1)
>> get(0,'children')
ans =
     1
>> figure(3)
>> get(0,'children')
ans =
     3
     1

Я думаю, вы найдете самый прямой способ выяснить, какие цифры открыты.

2 голосов
/ 05 января 2010
isempty(findobj('name','Your_Figure_Name'))

если ответ 0, то ваша фигура открыта

1 голос
/ 03 апреля 2013

Если внутри вашего метода вы создаете фигуру без «имени»:

function [] = myMethod()
    myFigure = figure()
end

вы не сможете получить доступ к дескриптору myFigure в следующий раз. Итак:

function [] = myMethod()
    if ishandle(myFigure) % will fault, cant find variable myFigure
        close(myFigure)  % will fault
        delete(myFigure) % will fault
    end

    myFigure = figure()
end

gnvoice не был на 100% ясен, когда сказал:

Вы можете проверить, была ли фигура закрыта / удалена, используя функцию ISHANDLE:

Он означает, что вы можете проверить только ПОСЛЕ того, как вы восстановили ручку:

function [] = createMyFigure()
    recoveredHandle = findobj('type','figure', 'Name', 'myFigureName')
    close(recoveredHandle)
    delete(recoveredHandle)
    ishandle(recoveredHandle)

    myFigure = figure('Name','myFigureName') % now create figure
end
0 голосов
/ 02 апреля 2016
for f=1:numel(findobj('type','figure'))
    close(figure(f));
end
clear('f')
0 голосов
/ 23 января 2009

Для закрытия фигуры есть функция «закрыть». Я все еще ищу один, чтобы проверить, открыта ли фигура.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...