Как узнать, сколько фигур в настоящее время открыто? - PullRequest
6 голосов
/ 09 января 2012

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

Ответы [ 2 ]

8 голосов
/ 09 января 2012

Использование:

numel(get(0,'Children'));

Вы также можете использовать то, что предлагает @triazotan, используя функцию findobj . Однако это будет медленнее, потому что вам нужно пройти через все ваши объекты.

Edit: Я решил посмотреть, как работает findobj . Это гораздо более сложный способ прохождения всех объектов в get (0, 'Children')
Вот небольшой дайджест из файла, который вызывается из findobj : Посмотрите встроенную функцию ('get', 0, 'ShowHiddenHandles') * , которая по сути является get (0, 'Children') в середине:

function h = findobjhelper( varargin )

%Copyright 2009-2010 The MathWorks, Inc.

allowHVHandles = true;

nin = nargin;
rootHandleVis = builtin( 'get', 0, 'ShowHiddenHandles' );

% See if 'flat' keyword is present 
hasflat = false;
if (nin > 1) 
    if strcmp( varargin{2}, 'flat' ) % Does the 'flat' keyword exist
        hasflat = true;
    end
end

if nin == 0
    if feature('HgUsingMatlabClasses')
        h = findobjinternal( 0, '-function', @findobjfilter );  
    else
        h = findobjinternal(0);
    end

Таким образом, использование findobj явно является излишним.

3 голосов
/ 09 января 2012

Я не знаю прямого пути, но вы можете попробовать:

length(findobj('Type','figure'))

(то есть подсчитать количество дескрипторов цифр, возвращаемых findobj)

...