Mercurial > hg > human-echolocation
diff private/EDB1plotmodel.m @ 0:90220f7249fc
Initial commit
author | Timos Papadopoulos <tp@isvr.soton.ac.uk> |
---|---|
date | Sat, 16 Nov 2013 18:25:24 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/private/EDB1plotmodel.m Sat Nov 16 18:25:24 2013 +0000 @@ -0,0 +1,337 @@ +function EDB1plotmodel(eddatafile,plotoptions,plotoptions2,plotoptions3) +% EDB1plotmodel - Plots a model which is given in an eddatafile. +% +% Input parameters: +% eddatafile (optional) The input file. If not specified, a file +% opening window will be presented. +% plotoptions (optional) An integer that can give extra options: +% if bit0 = 1 (= 1) => plot sources +% if bit1 = 1 (= 2) => plot receivers +% if bit2 = 1 (= 4) => plot plane normal vectors +% if bit3 = 1 (= 8) => print plane numbers +% if bit4 = 1 (=16) => print edge numbers +% if bit5 = 1 (=32) => print corner numbers +% if bit6 = 1 (=64) => print plane numbers using the +% CAD file numbering +% if bit7 = 1 (=128)=> print corner numbers using the +% CAD file numbering +% if bit8 = 1 (=256) => offedges are not included +% if bit9 = 1 (=512) => only offedges are included +% if plotoptions == -1 => plot edge by edge +% if plotoptions == -2 => plot plane by plane +% Example: the integer 11 = 8+2+1 +% so sources, receivers, and plane numbers will be plotted. +% plotoptions2 (optional) A matrix with two columns of 1 or many integers, the first +% giving the source numbers to be plotted and the +% second giving the receiver numbers to be +% plotted. The first in the sequence will be +% plotted with a black color. +% Alternatively, if plotoptions = -1, then +% plotoptions2 can be used to give a list of +% edges to plot. +% Alternatively, if plotoptions = -2, then +% plotoptions2 can be used to give a list of +% planes to plot. +% plotoptions3 (optional) A vector with two or three values, giving the +% view position for the 3D plot view. +% +% Sources and receivers are taken from an sdatafile and an rdatafile, the file name of +% which is assumed to be similar to the eddatafile. +% +% Uses functions EDB1strpend, EDB1myvalueinput +% +% ---------------------------------------------------------------------------------------------- +% This file is part of the Edge Diffraction Toolbox by Peter Svensson. +% +% The Edge Diffraction Toolbox is free software: you can redistribute it and/or modify +% it under the terms of the GNU General Public License as published by the Free Software +% Foundation, either version 3 of the License, or (at your option) any later version. +% +% The Edge Diffraction Toolbox is distributed in the hope that it will be useful, +% but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +% FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +% +% You should have received a copy of the GNU General Public License along with the +% Edge Diffraction Toolbox. If not, see <http://www.gnu.org/licenses/>. +% ---------------------------------------------------------------------------------------------- +% Peter Svensson (svensson@iet.ntnu.no) 20110704 +% +% EDB1plotmodel(eddatafile,plotoptions,plotoptions2,plotoptions3); + +%-------------------------------------------------------------- +% Read the eddatafile + +if nargin == 0 | (nargin >= 1 & isstr(eddatafile) ~= 1) + [eddatafile,eddatafilepath] = uigetfile('*eddata.mat','Please select the eddatafile'); + [eddatafilepath,temp1,temp2] = fileparts(eddatafilepath); + if ~isstr(eddatafile) | isempty(eddatafile) + return + end +else + [eddatafilepath,eddatafile,fileext] = fileparts(eddatafile); + eddatafile = [eddatafile,fileext]; +end +Filestem = EDB1strpend(eddatafile,'_eddata'); + +disp(['eddatafile is ',eddatafilepath,filesep,eddatafile]) + +if nargin == 1 + if isstr(eddatafile) ~= 1 + plotoptions = eddatafile; + else + plotoptions = 0; + end + plotoptions2 = []; + plotoptions3 = []; +elseif nargin == 0 + plotoptions = 0; + plotoptions2 = []; + plotoptions3 = []; +elseif nargin == 2 + plotoptions2 = []; + plotoptions3 = []; +elseif nargin == 3 + nplotoptions2 = size(plotoptions2); + plotoptions3 = []; +else + nplotoptions2 = size(plotoptions2); +end + +plotedgesequence = 0; +plotplanesequence = 0; +if plotoptions < 0 + if plotoptions == -1 + plotedgesequence = 1; + elseif plotoptions == -2 + plotplanesequence = 1; + end + plotoptions = 0; +end +plotsources = bitget(plotoptions,1); +plotreceivers = bitget(plotoptions,2); +plotnvecs = bitget(plotoptions,3); +plotplnumbers = bitget(plotoptions,4); +plotednumbers = bitget(plotoptions,5); +plotconumbers = bitget(plotoptions,6); +plotplCADnumbers = bitget(plotoptions,7); +plotcoCADnumbers = bitget(plotoptions,8); +plotnooffedges = bitget(plotoptions,9); +plotonlyoffedges = bitget(plotoptions,10); + +if plotplCADnumbers, plotplnumbers = 1; end +if plotcoCADnumbers, plotconumbers = 1; end + +%-------------------------------------------------------------------------- +% Load the needed input files + +if ~isempty(eddatafilepath) + eval(['load ',eddatafilepath,filesep,eddatafile]) +else + eval(['load ',eddatafile]) +end + +ncornersperplanevec = double(ncornersperplanevec); +if plotsources + sdatafile = [eddatafilepath,filesep,Filestem,'_sdata_1.mat']; + if exist(sdatafile) == 2 + allsources = []; + sfilecounter = 1; + while exist(sdatafile) == 2 + eval(['load ',sdatafile]) + allsources = [allsources;sources]; + sfilecounter = sfilecounter +1; + sdatafile = [eddatafilepath,filesep,Filestem,'_sdata_',int2str(sfilecounter),'.mat'] + end + sources = allsources; + else + sdatafile = [eddatafilepath,filesep,Filestem,'_sdata.mat']; + if exist(sdatafile) == 2 + eval(['load ',sdatafile]) + else + error(['ERROR: The sdata file named ',sdatafile,' could not be opened']) + end + end +end +if plotreceivers + rdatafile = [eddatafilepath,filesep,Filestem,'_rdata_1.mat']; + if exist(rdatafile) == 2 + allreceivers = []; + rfilecounter = 1; + while exist(rdatafile) == 2 + eval(['load ',rdatafile]) + allreceivers = [allreceivers;receivers]; + rfilecounter = rfilecounter +1; + rdatafile = [eddatafilepath,filesep,Filestem,'_rdata_',int2str(rfilecounter),'.mat'] + end + receivers = allreceivers; + else + rdatafile = [eddatafilepath,filesep,Filestem,'_rdata.mat']; + if exist(rdatafile) == 2 + eval(['load ',rdatafile]) + else + error(['ERROR: The rdata file named ',rdatafile,' could not be opened']) + end + end +end + +if plotplCADnumbers | plotcoCADnumbers + cadgeofile = [eddatafilepath,Filestem,'_cadgeo.mat']; + if exist(cadgeofile) == 2 + eval(['load ',cadgeofile]) + else + error(['ERROR: The cadgeo file named ',cadgeofile,' could not be opened']) + end +end + +%-------------------------------------------------------------- + +[ncorners,slask] = size(corners); +[nedges,slask] = size(edgecorners); +[nplanes,slask] = size(planenvecs); + +planelist = 1:nplanes; + +if isempty(plotoptions3) + viewpos = EDB1myvalueinput('From which point do you want to watch the model? (x y z, or az el, with spaces inbetween) ',-1); +else + viewpos = plotoptions3; +end + +hold off +for ii = 1:nedges + co1 = edgecorners(ii,1); + co2 = edgecorners(ii,2); + iv = [co1;co2]; + plot3(corners(iv,1),corners(iv,2),corners(iv,3)) + if ii ==1 + view(viewpos) + hold + end +end + +if plotedgesequence + for ii = 1:nedges + co1 = edgecorners(ii,1); + co2 = edgecorners(ii,2); + iv = [co1;co2]; + h = plot3(corners(iv,1),corners(iv,2),corners(iv,3)); + set(h,'LineWidth',2) + disp(['Edge no. ',int2str(ii),' Closed wedge angle: ',num2str(closwedangvec(ii)*180/pi)]) + pause + set(h,'LineWidth',1) + + end +end +if plotplanesequence + if ~isempty(plotoptions2) + listofplanes = plotoptions2; + else + listofplanes = [1:nplanes]; + end + for jj = listofplanes + edgelist = edgesatplane(jj,:); + edgelist = edgelist(find(edgelist)); + for ii = edgelist + co1 = edgecorners(ii,1); + co2 = edgecorners(ii,2); + iv = [co1;co2]; + h = plot3(corners(iv,1),corners(iv,2),corners(iv,3)); + set(h,'LineWidth',2) + end + disp(['Plane no. ',int2str(jj)]) + pause + + % For some reason it doesnt work to replot the same list of edges + % with a thinner linewidth; even trying out with replotting the + % edges with another color just replots one of the edges?? + % Therefore the inelegant method of replotting the whole model. + hold off + for ii = 1:nedges + co1 = edgecorners(ii,1); + co2 = edgecorners(ii,2); + iv = [co1;co2]; + plot3(corners(iv,1),corners(iv,2),corners(iv,3)) + if ii ==1 + view(viewpos) + hold + end + end + + + + end +end + +if plotnvecs + for ii = 1:nplanes + midpoint = mean(corners(planecorners(ii,1:(ncornersperplanevec(ii))),:)); + + endpoint = midpoint + planenvecs(ii,:); + bothpoints = [midpoint;endpoint]; + plot3(bothpoints(:,1),bothpoints(:,2),bothpoints(:,3)); + plot3(midpoint(1),midpoint(2),midpoint(3),'ro'); + end +end + +if plotplnumbers + for ii = 1:nplanes + midpoint = mean(corners(planecorners(ii,1:ncornersperplanevec(ii)),:)); + endpoint = midpoint + planenvecs(ii,:)*0.1; + if plotplCADnumbers == 1 + text(endpoint(1),endpoint(2),endpoint(3),int2str(planenumbers(ii))); + else + text(endpoint(1),endpoint(2),endpoint(3),int2str(ii)); + end + + end +end + +if plotednumbers + iv = [1:nedges]; + if plotnooffedges, iv(offedges) = []; end + if plotonlyoffedges, iv = offedges; end + iv = iv(:).'; + + for ii = iv + midpoint = mean(corners(edgecorners(ii,1:2),:)); + text(midpoint(1),midpoint(2),midpoint(3),int2str(ii)); + end +end + +if plotconumbers + for ii = 1:ncorners + if plotcoCADnumbers == 1 + text(corners(ii,1),corners(ii,2),corners(ii,3),int2str(cornernumbers(ii))) + else + text(corners(ii,1),corners(ii,2),corners(ii,3),int2str(ii)) + end + end + +end + +if plotsources == 1 + if isempty(plotoptions2) + plot3(sources(:,1),sources(:,2),sources(:,3),'*'); + else + if nplotoptions2 == 1 + plot3(sources(plotoptions2(1),1),sources(plotoptions2(1),2),sources(plotoptions2(1),3),'*') + else + plot3(sources(plotoptions2(1,1),1),sources(plotoptions2(1,1),2),sources(plotoptions2(1,1),3),'k*') + plot3(sources(plotoptions2(2:nplotoptions2,1),1),sources(plotoptions2(2:nplotoptions2,1),2),sources(plotoptions2(2:nplotoptions2,1),3),'*') + end + end +end + +if plotreceivers == 1 + if isempty(plotoptions2) + plot3(receivers(:,1),receivers(:,2),receivers(:,3),'ro'); + else + if nplotoptions2 == 1 + plot3(receivers(plotoptions2(2),1),receivers(plotoptions2(2),2),receivers(plotoptions2(2),3),'ro'); + else + plot3(receivers(plotoptions2(1,2),1),receivers(plotoptions2(1,2),2),receivers(plotoptions2(1,2),3),'ko'); + plot3(receivers(plotoptions2(2:nplotoptions2,2),1),receivers(plotoptions2(2:nplotoptions2,2),2),receivers(plotoptions2(2:nplotoptions2,2),3),'ro'); + + end + end +end