user001
user001

Reputation: 1848

matlab zoom callback error associated with text function

While trying to execute generation of a series of text boxes in a post-zoom callback function in Matlab, a number of errors are generated, the trace of which is unhelpful in diagnosing and resolving the problem. When the text generation is in the main body of code as follows, the code executes properly and there is no issue executing the minimal post-zoom callback function:

string='ABCDEFGHIJKLMNOPQRSTUVWXYZ';
offset=8;
h=figure;
z=zoom(h);
set(z,'ActionPostCallback',@post_callback);
[ax,plt1,plt2]=plotyy(14:20,1:7,15:17,1:3,@bar,@bar)
ylim([0 10]);
hold on;
set(plt2,'FaceColor','r');
xLim=xlim(gca);
for i=xLim(1)+1:xLim(2)-1
    text(i,8,string(i-offset+1),'Clipping','on');
end



function post_callback(obj,evd)
    xLim = get(evd.Axes,'XLim');

However, if the text box generation is moved to the @post_callback function, a series of errors result:

string='ABCDEFGHIJKLMNOPQRSTUVWXYZ';
offset=8;
h=figure;
z=zoom(h);
set(z,'ActionPostCallback',@post_callback);
[ax,plt1,plt2]=plotyy(14:20,1:7,15:17,1:3,@bar,@bar)
ylim([0 10]);
hold on;
set(plt2,'FaceColor','r');



function post_callback(obj,evd)
xLim = get(evd.Axes,'XLim');
for i=xLim(1)+1:xLim(2)-1
    text(i,8,string(i-offset+1),'Clipping','on');
end

Those errors are, as described in this problem:

Warning: An error occurred during the mode callback. 
  > In uitools.uimode.fireActionPostCallback at 14
  In zoom>local2DButtonUpFcn at 1332
  In hgfeval at 63
  In uitools.uimode.modeWindowButtonUpFcn at 46
  In uitools.uimode.setCallbackFcn>localModeWindowButtonUpFcn at 58

Could someone please enlighten me as to the root cause of the errors?

Upvotes: 0

Views: 279

Answers (1)

patrik
patrik

Reputation: 4558

The error seems to be the same. You should try to use the debugger here. Set a breakpoint in your post callback function. However, there are a few problems in your code. Some are implementation issues, some other problems does not do what you ask them too. You seems to have some programming experience, so I guess that most implementation issue are just bugs. I will list problems and solutions.

1) I cry when I see that you use string as a variable. String is an abstract type (obselete in matlab now since later versions uses char vectors). use instead some other name like str or myString.

2) Unless offset and your variable string is not declared global, they will not be inside the scope of post_callback. Different from C or C++, a variable does not become global when defined in "main" (since you do not even define a main method). If you want to use string or offset inside of post_callback, you must define them inside their scope (inside the function).

3) the loop variable i must not be a cell. Use the method from the previous question to convert it to a double vector.

4) The loop variable i must be an integer in:

text(i,8,string(i-offset+1),'Clipping','on');

since string is defined a variable and variable indices must be integers, xLim does not necessary need to be an integer.

5) I do not think text will give the expected output here. What text does is creating a string and linking it to a point on the plot. This means that every time you zoom you will have a new text in the plot. Unless the texts are located at exactly the same place (which may be possible, but will reqire a lot of work) the plot will look really ugly. If possible, place the text strings in the way that you do in example 1 and remove it from post_callback.

Upvotes: 1

Related Questions