Как проверить, открыта ли фигура и как ее закрыть?

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

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

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

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

Ответ 1

close all

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

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

figure('name','banana')

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

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

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

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

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

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

Ответ 2

Я немного не понимаю, что вы подразумеваете под "открытым". На фигурах действительно нет "открытых" или "закрытых" состояний. Они либо существуют, либо нет. Команда 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 not closed)

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

Ответ 3

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

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

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

Ответ 4

isempty(findobj('name','Your_Figure_Name'))

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

Ответ 5

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

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

Ответ 6

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

Ответ 7

for f=1:numel(findobj('type','figure'))
    close(figure(f));
end
clear('f')