Как проверить, открыта ли фигура и как ее закрыть?
Мой 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')