이 질문을 해결하기 위해 아직 일반 "다시 그리기"콜백을 찾지는 못했지만 모든 상황에서 (거의 모든)이 목표를 달성 할 수있는 4 가지 콜백 그룹 *을 함께 구성했습니다.
set(zoom(ax),'ActionPostCallback',@(x,y) myCallbackFcn(ax));
2를 셋업 pan callback function : 주어진 축 ax = gca()
,
1. 설정 zoom callback function 감독 by @Jonas 같은 개체에 대한
set(pan(ax),'ActionPostCallback',@(x,y) myCallbackFcn(ax));
3. 설정을 figure resize callback function :
set(
getParentFigure(ax)
,'ResizeFcn',@(x,y) myCallbackFcn(ax));
4. 편집 : 더 이상 R2014b에서 작동하지 않지만 그림에 컬러 바를 추가하는 경우 (그림 크기 또는 축 줌/팬을 변경하지 않고 축 위치를 변경하는 경우)에만 필요합니다. 나는 대체품을 찾지 않았다. 마지막으로 축 위치 속성 자체에 undocumented property listener을 설정하십시오. 여기에는 중요한 트릭이 하나 있습니다 : 우리는 handle.listener
객체의 핸들을 잡고 있어야합니다 (또는 범위를 벗어나면) 콜백을 제거합니다. Axes 객체 자체의 속성 인 UserData
은 많은 경우에 숨길 수있는 좋은 장소입니다. 나는 기본 콜백 이벤트 인수를 폐기하고 대신 익명 함수 내에서 문제의 축을 캡처 선택한 모든 경우에
hax = handle(ax);
hprop = findprop(hax,'Position');
h = handle.listener(hax,hprop,'PropertyPostSet',@(x,y) myCallbackFcn(ax));
set(ax,'UserData',h);
. 나는 이것들이 서로 다른 콜백 시나리오를 통해 전파되는 다양한 형태의 논쟁에 대처하기보다 훨씬 더 유용하다는 것을 알았다.
* 너무 많은 콜백 소스가 돌아 다니면서 무한 루프로 끝나지 않도록하기 위해 myCallbackFcn
의 시작 부분에 recursion check이있는 것이 매우 중요합니다.
고마워요, 이것이 제가 찾고 있던 것입니다! 일반 다시 그리기 콜백이 있습니까? – nibot
@nibot : ['refresh']처럼 (http://www.mathworks.com/help/techdoc/ref/refresh.html)? 또는'drawnow'가 큐를 플러시합니다. – Jonas
MatLab이 그림을 다시 그릴 때마다 내가 지정한 함수를 호출 할 수있는 방법이 있습니까? – nibot