📄 v3d_import_mat.m
字号:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [x,y,z,v] = v3d_import_mat(filename)
%
% MatLab Workspace Datei importieren
% --------------------------------------------------------------------
%
% Format der Datei: MatLab spezifisch -> Import per ImportWizard
%
% Idealfall:
%
% Vektor x
% Vektor y
% Vektor z
% Matrix v - Dimension (y*x*z) bzw. in Blockkoordinaten (y-1*x-1*z-1)
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Importwizard aufrufen
s=uiimport(filename);
% Struktur in Zellen/Arrays umwandlen
ss=struct2cell(s);
% Fehlerflag anschalten
fehler=1;
% Test ob 4 Datens鋞ze und ob mehr als 1 Wert pro Vektor
if (length(ss)==4 & length(ss{1})>1 & length(ss{2})>1 & length(ss{3})>1 & length(ss{4})>1)
% finde Position der Matrix (size=3)
posv=find([length(size(ss{1}))==3 length(size(ss{2}))==3 length(size(ss{3}))==3 length(size(ss{4}))==3]==1);
% bestimme Anzahl der Vektoren (size=2)
anzxyz=length(find([length(size(ss{1}))==2 length(size(ss{2}))==2 length(size(ss{3}))==2 length(size(ss{4}))==2]==1));
% Testen ob 3 Vektoren und 1 Matrix
if (size(posv,1) & anzxyz==3)
% v setzen
v=ss{posv};
% v aus Vektor s und ss entfernen
names = fieldnames(s);
s = rmfield(s,names{posv});
% Struktur in Zellen/Arrays umwandlen
ss=struct2cell(s);
% names = feldnamen in s
names = fieldnames(s);
% Test ob x,y,z Vektoren Zeilenvektoren sind
% wenn nicht -> drehen
% Achtung Gefahr: kann dadurch 180 grad verdeht sein
if (size(ss{1},2)==1) ss{1}=rot90(ss{1}); end
if (size(ss{2},2)==1) ss{2}=rot90(ss{2}); end
if (size(ss{3},2)==1) ss{3}=rot90(ss{3}); end
% Test ob x,y und z in den Feldnamen vorhanden sind
if (strmatch('x',lower(names(:))) & strmatch('y',lower(names(:))) & strmatch('z',lower(names(:))))
clear x y z;
if strmatch('x',lower(names(1))) x=ss{1}; end
if strmatch('y',lower(names(1))) y=ss{1}; end
if strmatch('z',lower(names(1))) z=ss{1}; end
if strmatch('x',lower(names(2))) x=ss{2}; end
if strmatch('y',lower(names(2))) y=ss{2}; end
if strmatch('z',lower(names(2))) z=ss{2}; end
if strmatch('x',lower(names(3))) x=ss{3}; end
if strmatch('y',lower(names(3))) y=ss{3}; end
if strmatch('z',lower(names(3))) z=ss{3}; end
% test ob x,y,z jetzt existieren
if (exist('x') & exist('y') & exist('z'))
% keine fehlerausgabe
fehler=0;
end
elseif (length(ss{1})~=length(ss{2}) & length(ss{1})~=length(ss{3}) & length(ss{2})~=length(ss{3}))
% Ansonsten versuchen per Feldgr鲞en zu unterscheiden
% geht nur wenn Dimensionen von x,y und z sich unterscheiden
clear x y z;
% Test f黵 Mittelpunktkoordinaten
if size(v,1)==length(ss{1}) y=ss{1}; end
if size(v,2)==length(ss{1}) x=ss{1}; end
if size(v,3)==length(ss{1}) z=ss{1}; end
if size(v,1)==length(ss{2}) y=ss{2}; end
if size(v,2)==length(ss{2}) x=ss{2}; end
if size(v,3)==length(ss{2}) z=ss{2}; end
if size(v,1)==length(ss{3}) y=ss{3}; end
if size(v,2)==length(ss{3}) x=ss{3}; end
if size(v,3)==length(ss{3}) z=ss{3}; end
% test ob x,y,z jetzt existieren
if (exist('x') & exist('y') & exist('z'))
% keine fehlerausgabe
fehler=0;
else
clear x y z;
% es konnten nicht alle zugewiesen werden
% daher muessen Blockkoordinaten existieren
if size(v,1)==length(ss{1})-1 y=ss{1}; end
if size(v,2)==length(ss{1})-1 x=ss{1}; end
if size(v,3)==length(ss{1})-1 z=ss{1}; end
if size(v,1)==length(ss{2})-1 y=ss{2}; end
if size(v,2)==length(ss{2})-1 x=ss{2}; end
if size(v,3)==length(ss{2})-1 z=ss{2}; end
if size(v,1)==length(ss{3})-1 y=ss{3}; end
if size(v,2)==length(ss{3})-1 x=ss{3}; end
if size(v,3)==length(ss{3})-1 z=ss{3}; end
% test ob x,y,z jetzt existieren
if (exist('x') & exist('y') & exist('z'))
% keine fehlerausgabe
fehler=0;
end
end
end
end
end
if (fehler==0)
% Test ob Mittelpunkt oder Bl鯿ke
if (size(z,2)==size(v,3))
% Mittelpunkt
% Test ob x und y richtig in v integriert
if (size(x,2)==size(v,2) & size(y,2)==size(v,1))
% alles richtig
elseif (size(x,2)==size(v,1) & size(y,2)==size(v,2))
% x und y vertauscht
v=permute(v,[2 1 3]);
else
% ansonsten fehler
fehler=1;
end
elseif (size(z,2)==size(v,3)+1)
% Bl鯿ke
% Test ob x und y richtig in v integriert
if (size(x,2)==size(v,2)+1 & size(y,2)==size(v,1)+1)
% Bl鯿ke erstellen
[x,y,z,v]=v3d_import_block(x,y,z,v);
elseif (size(x,2)==size(v,1)+1 & size(y,2)==size(v,2)+1)
% x und y vertauscht
v=permute(v,[2 1 3]);
% Bl鯿ke erstellen
[x,y,z,v]=v3d_import_block(x,y,z,v);
else
% ansonsten fehler
fehler=1;
end
else
% ansonsten fehler
fehler=1;
end
end
% wenn Fehlerflag aktiviert
if fehler==1
% Fehlermeldung - Infodialog welches Format verlangt wird
dlg=errordlg(...
{'Es werden genau 4 Datens鋞ze ben鰐igt:', ...
'', ...
'x - Vektor x-Achse (min. 2 bzw. 3 Elemente)', ...
'y - Vektor y-Achse (min. 2 bzw. 3 Elemente)', ...
'z - Vektor z-Achse (min. 2 bzw. 3 Elemente)', ...
'v - Matrix (y * x * v) bzw. f黵 Blockkoordinaten Matrix (y-1 * x-1 * z-1)'}, ...
'Fehler');
waitfor(dlg);
% nichts zur點kgeben
x=0; y=0; z=0; v=0;
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -