Поверните 3d объект в фигуре Matlab, нажав и удерживая среднюю кнопку мыши - PullRequest
0 голосов
/ 09 марта 2020

У меня есть 3D-график, и я хотел бы использовать среднюю клавишу нажатия и удерживания для его поворота, но вращение немедленно отключается при отпускании средней клавиши

ниже приведен фрагмент кода

obj=plot3(...);  % any 3d plot command
set(obj,'ButtonDownFcn',@startrotate);

function startrotate(src,evnt)
if strcmp(get(gcf,'SelectionType'), 'extend')
    rotate3d on;
    set(gcbf,'WindowButtonUpFcn',@stoprotate);
    return;
end

function stoprotate(src,hrot)
if strcmp(get(gcf,'SelectionType'), 'extend')
    rotate3d off;
    set(gcbf,'WindowButtonUpFcn','');
end

однако, я получаю сообщение об ошибке:

Warning: Setting the "WindowButtonUpFcn" property is not permitted while this mode is active. 

, когда rotate3d включен, есть ли способ зафиксировать событие «вверх по кнопке» на рисунке matlab / gui window?

Обновление 03/10/2020 Следуя предложению @Hoki, я внес следующие изменения

function startrotate(src,evnt)
if strcmp(get(gcf,'SelectionType'), 'extend')
    disp('start rotate');
    h=rotate3d;
    h.ActionPostCallback= @stoprotate;
    h.Enable = 'on';
    return;
end

function stoprotate(src,hrot)
if strcmp(get(gcf,'SelectionType'), 'extend')
    disp('stop rotate');
    h=rotate3d;
    h.Enable='off';
end

, но получил ошибку "The current mode can not be interrupted «. Похоже, я не могу отключить вращение в обратном вызове ActionPostCallback. Можно ли как-нибудь отключить вращение, когда средняя кнопка нажата?

...