0

マウス ポインターを使用してグラフの階段モデルを移動する必要があります。より具体的には、マウス ポインターを使用して水平方向の矢印マークで示されている水平プロットを移動すると、隣接するレイヤーも対応する移動する水平線と共に移動する必要があります。 ..同様に垂直軸..これをmatlabで行うにはどうすればよいですか。親切に私を助けて..

以下に記述されたコードはプロットを完全に移動しますが、他の線を邪魔することなく正確な線 (階段プロットの垂直/水平) を移動する必要があります。親切に私を助けて...

`

loglog(handles.axes1,a,b,'r')
hold on
% h=loglog(handles.axes1,x,y,'w')
h=stairs(handles.axes1,x,y,'w')
set(h,'ButtonDownFcn',@startmovit);

gui = get(gcf,'UserData');
drawnow
set(gcf,'windowbuttonmotionfcn','')
set(gcf,'windowbuttonupfcn','')

function startmovit(src,evnt)


% Unpack gui object
gui = get(gcf,'UserData');

% Remove mouse pointer
set(gcf,'PointerShapeCData',nan(16,16))
set(gcf,'Pointer','custom');

% Set callbacks
gui.currenthandle = src;
thisfig = gcbf();
set(thisfig,'WindowButtonMotionFcn',@movit)
set(thisfig,'WindowButtonUpFcn',@stopmovit);

% Store starting point of the object
gui.startpoint = get(gca,'CurrentPoint')
set(gui.currenthandle,'UserData',{get(gui.currenthandle,'XData') get(gui.currenthandle,'YData')});

% Store gui object
set(gcf,'UserData',gui);

function movit(src,evnt)
% Unpack gui object
gui = get(gcf,'UserData');

try
if isequal(gui.startpoint,[])
    return
end
catch
end

% Do "smart" positioning of the object, relative to starting point...
pos = get(gca,'CurrentPoint')-gui.startpoint
XYData = get(gui.currenthandle,'UserData')

% set(gui.currenthandle,'XData',XYData{1} + pos(1,1))
% set(gui.currenthandle,'YData',XYData{2} + pos(1,2))

set(gui.currenthandle,'XData',XYData{1} + pos(1,1))
set(gui.currenthandle,'YData',XYData{2} + pos(1,2))


% dx=XYData
% dy=XYData
% 
%  h=findobj(allchild(gca),'selected','on')
% set(h,'Xdata',get(h,'Xdata')+dx,'Ydata',get(h,'Ydata')+dy)

outData1 = get(gui.currenthandle,'XData')'
outData2 = get(gui.currenthandle,'YData')
%  newea=outData1
handles = guidata(gcf); 
drawnow;
% Store gui object
set(gcf,'UserData',gui);


function stopmovit(src,evnt)

% Clean up the evidence ...

thisfig = gcbf();
gui = get(gcf,'UserData');
set(gcf,'Pointer','arrow');
set(thisfig,'WindowButtonUpFcn','');
set(thisfig,'WindowButtonMotionFcn','');
drawnow
set(gui.currenthandle,'UserData','')
set(gcf,'UserData',[])

`

4

1 に答える 1

0

この問題は簡単には解決できません。図形ウィンドウ内のすべてのプロット要素を管理するために使用されるMatlabのプロットハンドルシステムを利用する必要があります。このプロセスでは、マウスが線を指しているときと、ユーザーがこれらの要素をクリックしてドラッグしたときに何をするかを決定します。

私が言及したキーワードのいくつかを使用していくつかの調査を行うと、最終的にこれを理解するでしょう。

于 2012-10-14T00:34:56.940 に答える