2011-08-17 5 views
0

저는 matlab에서 이미지 링크를 만드는 것에 대해 몇 가지 질문을했지만 패치를 링크로 만들고 싶습니다. 아래에 게시 한 코드를 시도했지만 그 작업은하지 않았습니다. 이 작품을 만드는 방법에 대한 아이디어가 있습니까?패치를 matlab에 링크 하시겠습니까?

patch([x2(i) x2(i+1) x2(i+1) x2(i)],[y3(j) y3(j) y3(j+1) y3(j+1)],[-0.01 -0.01 -0.01 -0.01],'r','FaceAlpha' ,.4,'EdgeColor','none','ButtonDownFcn', ['winopen(''' file(j,i) ''');']); 

function [filePath] = file(x, y) 
    filePath = strcat('C:\Documents and Settings\Sentinelle\My Documents\Prostate_082_31\sl5_knt1\sl5_',num2str(x),'-',num2str(y),'.ps'); 
end 

답변

1

은 일반적으로는, 콜백은 두 개의 입력 인수, 객체에 대한 핸들과 eventdata 일반적으로 빈으로 불린다. 이로 인해 오류가 발생할 수 있습니다. 이 대신에 ['winopen(''' file(j,i) ''');']을 시도해보십시오

여기
@(u,v)winopen(@()file(j,i)) 
+1

실제로 'file (j, i)'앞에'@()'이 필요하지 않습니다. – gnovice

+0

@gnovice : 네 말이 맞아. 여전히, 나는'file'이이 컨텍스트에서 배열이 아니라 함수 호출이라는 것을 분명히하고 싶다. 왜냐하면 (나는 이름에서 짐작하지 않았기 때문이다.) – Jonas

2

가 작동 예입니다 (다만 실제로 존재 무언가에 파일의 경로를 조정) :

BASE_DIR = 'C:\path\to\directory'; 
fcn = @(x,y) fullfile(BASE_DIR , sprintf('file_%d-%d.txt',x,y)); 

patch([-1 -1 1 1], [-1 1 -1 1], 'r', ... 
    'ButtonDownFcn',{@(o,e,f)winopen(f), fcn(2,1)}) 
axis([-2 2 -2 2]) 
title('Click the shape to open file...') 

enter image description here

+1

간단한 콜백이 될 것입니다 :'@ (o, e) winopen (fcn (2,1))' – gnovice

+0

사실, 나는 Jonas가 보여준 것보다 콜백을 전달하는 다른 방법을 원합니다 – Amro

0

을 문제는 위치에있다 패치의 위치는 이미지 [-0.01 -0.01 -0.01 -0.01] 뒤에 위치합니다. 링크가 이미지로 가려졌습니다. 나는 코드를 [0 0 0 0]으로 바꿨다. 그리고 이것이 내가 원하는 방식으로 작동한다.

patch([x2(i) x2(i+1) x2(i+1) x2(i)],[y3(j) y3(j) y3(j+1) y3(j+1)],[0 0 0 0],'r','FaceAlpha' ,.4,'EdgeColor','none','ButtonDownFcn', ['winopen(''' file(j,i) ''');']);