Invalid object handle error

12 vues (au cours des 30 derniers jours)
Julián Francisco
Julián Francisco le 23 Déc 2011
I have the following code which is a graphic rendering of the movement of a satellite around the Earth.
function ex
global state;
fh = figure('Menu','none','Toolbar','none','Units','characters');
hPanAni = uipanel('parent',fh,'Units','characters','Position',...
[22.6 10.4 53 23],'title','Controls','FontSize',11,...
'FontAngle','italic','FontWeight','bold');
hIniAni = uicontrol(hPanAni,'Style','pushbutton','Units','normalized',...
'Position',[0.14 0.75 0.5 0.12],'String','Spin',...
'FontSize',10,'Callback',@hIniAniCallback);
hFinAni = uicontrol(hPanAni,'Style','pushbutton','Units','normalized',...
'Position',[0.14 0.5 0.5 0.12],'String','Stop',...
'FontSize',10,'Callback',@hFinAniCallback);
hResetAni = uicontrol(hPanAni,'Style','pushbutton','Units','normalized',...
'Position',[0.14 0.25 0.5 0.12],'String','Reset',...
'FontSize',10,'Callback',@hResetAniCallback);
hPantSim = uipanel('Parent',fh,'Units','characters',...
'Position',[107.87 8 157.447 42],'BorderType','none','title',...
'Screen','FontSize',11,'FontAngle','italic',...
'FontWeight','bold');
hPantSimInt = uipanel('Parent',hPantSim,'Units','normalized','Position',...
[0 0 1 1],'BorderType','line','BackgroundColor','black');
ah4 = axes('Parent',hPantSimInt,'Units','normalized','Position',...
[0 0 1 1],'Color','none','Visible','off','DataAspectRatio',...
[1 1 1],'NextPlot','add');
rotate3d(ah4);
hgrot = hgtransform('Parent',ah4);
T1 = 0:pi/100:2*pi;
Y = zeros(numel(T1),3);
Y(:,1) = 7000*cos(T1);
Y(:,2) = 7000*sin(T1);
xmin = min(Y(:,1));
ymin = min(Y(:,2));
zmin = min(Y(:,3));
xmax = max(Y(:,1));
ymax = max(Y(:,2));
zmax = max(Y(:,3));
Resf = 6378;
xmin2 = min(xmin,-Resf);
xmax2 = max(xmax,Resf);
ymin2 = min(ymin,-Resf);
ymax2 = max(ymax,Resf);
zmin2 = min(zmin,-Resf);
zmax2 = max(zmax,Resf);
set(ah4,'XLim',[xmin2 xmax2],'YLim',[ymin2 ymax2],'ZLim',[zmin2 zmax2]);
maptext = imread('tierra.jpg');
[X_im, map] = rgb2ind(maptext,128);
[x_esf,y_esf,z_esf] = sphere(50);
x_esf = Resf*x_esf;
y_esf = Resf*y_esf;
z_esf = Resf*z_esf;
props.FaceColor= 'texture';
props.EdgeColor = 'none';
props.Parent = hgrot;
props.Cdata = flipud(X_im); % it is necesary to do this for getting the
% appropiate image on the sphere
surface(x_esf,y_esf,z_esf,props);
colormap(map);
axis equal vis3d;
view(3);
az = 0;
Fin = numel(T1);
k = 2;
ind_ini = 0;
state = 0;
handles.tray = zeros(1,Fin);
handles.psat = line('parent',ah4,'XData',Y(1,1), 'YData',Y(1,2),...
'ZData',Y(1,3),'Marker','o', 'MarkerSize',10,'MarkerFaceColor','b');
function hIniAniCallback(hObject,evt)
if (ind_ini == 1)
return;
end
ind_ini = 1;
state = 0;
while (k<Fin)
az = az + 0.01745329252;
set(hgrot,'Matrix',makehgtform('zrotate',az));
handles.tray(k) = line([Y(k-1,1) Y(k,1)],[Y(k-1,2) Y(k,2)],...
[Y(k-1,3) Y(k,3)],...
'Color','red','LineWidth',3);
set(handles.psat,'XData',Y(k,1),'YData',Y(k,2),'ZData',Y(k,3));
pause(0.02);
k = k + 1,
if (state == 1)
state = 0;
break;
end
end
end
function hFinAniCallback(hObject,evt)
ind_ini = 0;
state = 1;
end
function hResetAniCallback(hObject,evt)
set([handles.tray,handles.psat],'Visible','off');
k = 2;
ind_ini = 0;
state = 1;
az = 0;
set(hgrot,'Matrix',makehgtform('zrotate',az));
handles.psat = line('parent',ah4,'XData',Y(1,1), 'YData',Y(1,2),...
'ZData',Y(1,3),'Marker','o', 'MarkerSize',10,'MarkerFaceColor','b');
end
end
However, when I copy it to my main program I get the following error message:
??? Error using ==> surface Invalid object handle
Error in ==> simorbiv8v3>hIniPropCallback at 1911 surface(x_esf,y_esf,z_esf,props);
??? Error while evaluating uicontrol Callback
I do not understand what is happening.
  1 commentaire
Walter Roberson
Walter Roberson le 25 Déc 2011
Is this question still active? I note that you just edited it, but I thought fixing the cla problem was the solution ?

Connectez-vous pour commenter.

Réponse acceptée

Walter Roberson
Walter Roberson le 23 Déc 2011
Command
dbstop if error
and then run the code. When it stops at that line, examine props.Parent and in particular check ishandle(props.Parent) . If it says that it is not a handle, chase further up to ah4 and make sure that it is still a handle, then up to hPantSimInt and then to hPantSim and then to fh
  4 commentaires
Walter Roberson
Walter Roberson le 24 Déc 2011
I don't understand about the global part. You do not show any global for hgrot or for props, but you do show hgtransform being called explicitly.
At what point in the sequence of commands does ishandle(hgrot) become false? Is it true immediately before the surface() call?
Julián Francisco
Julián Francisco le 25 Déc 2011
@Walter Roberson: The code shown is a part of the code for the main program and it needs to be modified (the hgrot variable should be declared as global one). Now the problem is fixed (as seen in my answer). Thank you for your help.

Connectez-vous pour commenter.

Plus de réponses (1)

Julián Francisco
Julián Francisco le 24 Déc 2011
Finally, I have found that there was a cla command line, which was the guilty of the error, in the main program before the surface call.

Catégories

En savoir plus sur Specifying Target for Graphics Output dans Help Center et File Exchange

Produits

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by