⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 editgui.m

📁 水声模型 很不错的东西
💻 M
字号:
function Obj = EditGUI(Obj)
%Allows interactive editing of an acoustic layer object
Prompt1 = {...
      'Layer name', ...
      'Is layer a bottom half-space (y/n)', ...
      'RMS roughness of top interface of layer (m)', ...
      'Read acoustic data from file (y/n)' ...
  };

Prompt2 = {...
		'Vector of Z coordinates (m, positive down, measured from top of layer)', ...
		'Vector of compressional sound speeds (m/s)', ...
		'Vector of densities (kg.m^-3)', ...
		'Vector of shear sound speeds (m/s).  Use [] for all Cs = 0.', ...
		'Vector of compressional wave absorption (dB/wavelength).  Use [] for all Ap=0.', ...
        'Vector of shear wave absorption (dB/wavelength).  Use [] for all As=0.' ...
    };

Done = 0;
Cancel = 0;
NewObj = Obj;
while ~Done
   if isempty(NewObj.Z)
		Defaults = {...
   	   '', ...
	      'n', ...
   	   '0.0', ...
       'n'
      	};
   else
	    if NewObj.IsHalfSpace
   		    HSpaceStr = 'y';
		else
   		    HSpaceStr = 'n';
		end
		Defaults = {...
            NewObj.Name, ...
	        HSpaceStr, ...
            num2str(NewObj.RMSRough), ...
            'n' ...
      	    };
   end
   
	Ans = inputdlg(Prompt1, 'Edit layer properties', 1, Defaults);

	if isempty(Ans)
        Done = 1;
        Cancel = 1;
    else
   	    NewObj.Name = Ans{1};
   	    NewObj.IsHalfSpace = strcmpi(Ans{2}, 'y');
   	    NewObj.RMSRough = str2num(Ans{3});
        AcDataFromFile = strcmpi(Ans{4}, 'y');
    end
    
    if ~Cancel
        if AcDataFromFile
            NewObj = lReadAcDataFromFile(Obj);
            if isempty(NewObj)
                Done = 1;
                Cancel = 1;
            end
        else
            if isempty(Obj.Z)
		        Defaults = {...
      	            '[0]', ...
            	    '[1500]', ...
      	            '[1024]', ...
   	                '[0]', ...
	                '[0]', ...
   	                '[0]' ...
      	            };
            else
		        Defaults = {...
      	            lVecToStr(NewObj.Z), ...
	                lVecToStr(NewObj.Cp), ...
      	            lVecToStr(NewObj.Rho), ...
   	                lVecToStr(NewObj.Cs), ...
	                lVecToStr(NewObj.Ap), ...
   	                lVecToStr(NewObj.As) ...
      	            };
            end
            Ans = inputdlg(Prompt2, 'Edit acoustic properties', 1, Defaults);
            if isempty(Ans)
                Done = 1;
                Cancel = 1;
            else
        	    NewObj.Z = str2num(Ans{1});
               	NewObj.Cp = str2num(Ans{2});
               	NewObj.Rho = str2num(Ans{3});
        	    NewObj.Cs = str2num(Ans{4});
	            NewObj.Ap = str2num(Ans{5});
   	            NewObj.As = str2num(Ans{6});
            end
        end
        if ~Cancel
   	        [Str, NewObj] = CheckOK(NewObj);
            if strcmp(Str, 'OK')
                Obj = NewObj;
                Done = 1;
            else
                h = warndlg(Str, 'Incompatible acoustic layer parameters:');
                uiwait(h);
            end
        end
      
    end
   
end


   
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function Str = lVecToStr(Vec)
Str = ['[' num2str(reshape(Vec, 1, length(Vec))) ']'] ;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function NewObj = lReadAcDataFromFile(Obj)
%Reads acoustic data from a file.  This is an ascii text file, each row of file has following columns:
%Depth Cp Density Cs Ap  As
%
%where:
%Depth is in metres
%Cp is compressional sound speed in m/s
%Density is density in kg/m^3
%Cs is shear sound speed in m/s
%Ap is compressional wave absorption in dB/wavelength
%As is shear wave absorption in dB/wavelength
%
%You don't have to specify all columns, any after the last specified will be set to defaults: 
% Cp = 1500m/s, Density = 1024m/s, Cs, Ap, As = 0

persistent DfltDir
if isempty(DfltDir)
    DfltDir = 'C:\';
end

NExpected = 6;
Here = pwd;
cd(DfltDir);
[File, Path] = uigetfile('*.*', 'Sound speed file');
cd(Here);

if File == 0
    NewObj = [];
else
    DfltDir = Path;
    InDat = load([Path File], '-ascii');
    
    Sz = size(InDat);
    NPt = Sz(1);
    NCol = Sz(2);
    
    AllDat = zeros(NPt, NExpected);
    AllDat(:, 2) = 1500;
    AllDat(:, 3) = 1024;
    AllDat(:, 1:NCol) = InDat;
    
    NewObj = Obj;
    NewObj.Z = AllDat(:, 1);
    NewObj.Cp = AllDat(:, 2);
    NewObj.Rho = AllDat(:, 3);
    NewObj.Cs = AllDat(:, 4);
	NewObj.Ap = AllDat(:, 5);
   	NewObj.As = AllDat(:, 6);
end
    
        
    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -