Grundsätzlich das gleiche wie oben.Was ist der Unterschied zwischen guidata (hObject, handles) und handles = guidata (hObject)?
In meiner MATLAB-GUI habe ich eine Drucktaste, die Daten aus Textfeldern abruft und sie in einem Array-Handle (genauer gesagt mehreren Wegpunkten) speichert. Ich verwende diese Matrix zu einem späteren Zeitpunkt, also brauche ich die Daten in einem Handle gespeichert.
In der Callback-Funktion rufe ich eine andere Funktion, die dies tut (um meine Hauptdatei schön und ordentlich zu halten). Hier, nach dem Speichern aller Daten im entsprechenden Handle, rufe ich guidata(hObject, handles)
an, um meine Änderungen zu speichern.
Allerdings, außerhalb der Funktion, im Rückruf, wenn ich display(handle.data)
anrufen, zeigt es mir den Griff, bevor ich den Rückruf rief, obwohl ich es aktualisiert. Jetzt einen anderen guidata(hObject, handles)
direkt im Callback anrufen ändert nichts, aber wenn ich handles = guidata(hObject)
rufe funktioniert es.
Meine Frage: WARUM? Ist es nur MATLAB?
Code:
func_addWaypoint(hObject, handles)
display(handles.cart_coords)
handles = guidata(hObject);
display(handles.free_coords)
Hinweis: die erste display()
gibt mir die alten Daten, die zweite gibt mir neuen Daten. Hier ist meine Funktion:
function func_addWaypoint(hObject,handles)
new_waypoint = nan(3,2);
coord_constraint = ones(3,2);
new_waypoint(1,1) = str2double(handles.edit_start_x1.String);
new_waypoint(2,1) = str2double(handles.edit_start_x2.String);
new_waypoint(3,1) = str2double(handles.edit_start_x3.String);
new_waypoint(1,2) = str2double(handles.edit_stop_x1.String);
new_waypoint(2,2) = str2double(handles.edit_stop_x2.String);
new_waypoint(3,2) = str2double(handles.edit_stop_x3.String);
v
for i = 1:numel(new_waypoint)
if isnan(new_waypoint(i))
new_waypoint(i) = rand() * 2 - 1;
coord_constraint(i) = 0;
end
end
handles.cart_coords = [handles.cart_coords, new_waypoint];
handles.free_coords = [handles.free_coords, coord_constraint];
guidata(hObject, handles);