function varargout = joinldbs(ldbs,varargin) %JOINLDBS join a set of ldbs % % this function loins a set of ldb's, where the set must have two ldb's % at least. The join is performed in the order of the ldb's in the set. % When at any moment no join is found the joining stops without given a % resulting join. % % Syntax: % [msg,newldb] = joinldbs(ldbs,varargin) % % Input: % ldbs = the set of ldb's that must be joined % varargin = a set of key/value pairs % shiftldb1 used for testing reasons, shift the node % numbering, default = 0 % shiftldb2 used for testing reasons, shift the node % numbering, default = 0 % % distance two points are supposed to coincide when the are % within this distance from each other. Default = 0. % workdir the work directory, when not given the current % directory is used % file the name of the file where to write the result to. % Writing is done in the ldb format. The file is % used as a file descriptor, so a path is allowed. % You must give the extension yourself, it is not % obliged. Default no file is plotted. % text the header text used in the ldb file. When not % given the name of the file is used. % plot plot the given ldb's (default = no) % plotnew plot the resulting ldb (default = from plot) % % Output: % varargout = the next options are available % 1) not any output argument is asked for % 2) 1 argument, this is a message % 3) a second argument. This is the resulting ldb. % Example % % See also %% Copyright notice % -------------------------------------------------------------------- % Copyright (C) 2010 Deltares % Lou Verhage % % lou.verhage@deltares.nl % % Deltares % P.O. Box 177 % 2600MH Delft % Tel: +31 (0)88 335 8273 % % Visiting adress: % Rotterdamseweg 185 % 2629 HD Delft % Tel: +31 (0)88 335 8276 % % This library is free software: you can redistribute it and/or % modify it under the terms of the GNU Lesser General Public % License as published by the Free Software Foundation, either % version 2.1 of the License, or (at your option) any later version. % % This library 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 % Lesser General Public License for more details. % % You should have received a copy of the GNU Lesser General Public % License along with this library. If not, see . % -------------------------------------------------------------------- % This tool is part of OpenEarthTools. % OpenEarthTools is an online collaboration to share and manage data and % programming tools in an open source, version controlled environment. % Sign up to recieve regular updates of this function, and to contribute % your own tools. %% Version % Created: 14 Dec 2010 % Created with Matlab version: 7.8.0.347 (R2009a) % $Id: $ % $Date: $ % $Author: $ % $Revision: $ % $HeadURL: $ % $Keywords: $ %% handle input arguments % shiftldb1 used for testing reasons, shift the node % numbering, default = 0 % shiftldb2 used for testing reasons, shift the node % numbering, default = 0 % % distance two points are supposed to coincide when the are % within this distance from each other. Default = 0. % file the name of the file where to write the result to. % Writing is done in the ldb format. The file is % used as a file descriptor, so a path is allowed. % You must give the extension yourself, it is not % obliged. Default no file is plotted. % text the header text used in the ldb file. When not % given the name of the file is used. % plot plot the given ldb's (default = no) % plotnew plot the resulting ldb (default = from plot) OPT.shiftldb1 = 0; OPT.shiftldb2 = 0; OPT.distance = 0; OPT.workdir = ''; OPT.file = ''; OPT.text = ''; OPT.plot = 'no'; OPT.plotnew = ''; OPT = setproperty(OPT,varargin{:}); if isempty(OPT.text) & ~isempty(OPT.file) [pathstr, name, ext, versn] = fileparts(OPT.file); OPT.text = name; end if isempty(OPT.plotnew) OPT.plotnew = OPT.plot; end if OPT.workdir(end:end) ~= '\' OPT.workdir = [OPT.workdir '\']; end [pWorkdir, name, ext, versn] = fileparts(OPT.workdir); if nargout > 0 for n = 1: nargout; varargout{n} = ''; end end if length(ldbs) < 2 if nargout >= 1 varargout{1} = 'Give at least two ldb file names'; return end end %first join the first two ldb's [pathstr, name, ext, versn] = fileparts(ldbs{1}); ldb1 = fullfile(pWorkdir,[name ext]); if ~exist(ldb1) msg = ldb1 = readldb(ldb1); [pathstr, name, ext, versn] = fileparts(ldbs{2}); ldb2 = fullfile(pWorkdir,[name ext]); ldb2 = readldb(ldb2); if strcmpi(OPT.plot,'yes') plot (ldb1.x,ldb1.y,'+-g'); hold on plot(ldb2.x,ldb2.y,'-ob'); axis equal grid on end msg = 'The given ldbs are combined.'; [newLdb,found] = combineldb(ldb1,ldb2,OPT); if isempty(found) newLdb.x = [ldb1.x;NaN;ldb2.x]; newLdb.y = [ldb1.y;NaN;ldb2(m).y]; msg = 'The given ldb''s are not (all) combined'; end %when there are more ldb's proceed joining if length(ldbs) > 2 for n = 3:length(ldbs); [pathstr, name, ext, versn] = fileparts(ldbs{n}); ldb = fullfile(pWorkdir,[name ext]); ldb1 = readldb(ldb); if strcmpi(OPT.plot,'yes') plotldb (ldb,'color','-ok'); end [newLdb1,found] = combineldb(newLdb,ldb1,OPT); if length(newLdb1) > 1 newLdb = newLdb1(1); msg = 'The given ldb''s are not (all) combined'; for m = 2:length(newLdb1) newLdb.x = [newLdb.x;NaN;newLdb1(m).x]; newLdb.y = [newLdb.y;NaN;newLdb1(m).y]; end else newLdb.x = newLdb1.x;%[newLdb1.x;NaN]; newLdb.y = newLdb1.y;%[newLdb1.y;;NaN]; end end end if strcmpi(OPT.plotnew,'yes') %&& ~isempty(found) plot(newLdb.x,newLdb.y,':xr'); axis equal end if ~isempty(OPT.file) [pathstr, name, ext, versn] = fileparts(OPT.file); if isempty(ext) ext = '.ldb'; end theFile = fullfile(pWorkdir,[name ext]); writeldb(theFile,OPT.text,newLdb); end