% % definition for the kml_feature super (base) and sub (derived) class. % % [kml]=kml_feature(varargin) % % where the optional varargin and defaults are: % id (char, feature id, '') % name (char, name, '') % visibility (logical, visibility, true) % open (logical, open, false) % snippet (char, snippet, '') % descript (char, description, '') % styleurl (char, style url, '') % style (cell array, styles) % % note that zero arguments constructs a default instance; one % argument of the class copies the instance; and two or more % arguments constructs a new instance from the arguments. % classdef kml_feature < kml_object properties name =''; visibility=true; open =false; snippet =''; descript =''; styleurl =''; style ={}; end methods function [kml]=kml_feature(varargin) kml=kml@kml_object(varargin{:}); switch nargin % create a default object case 0 % copy the object or create the object from the input otherwise if (nargin == 1) && isa(varargin{1},class(kml)) kml=varargin{1}; else fnames=fieldnames(kml); for i=length(fieldnames(kml_object()))+1:min(nargin,length(fnames)) if isa(varargin{i},class(kml.(fnames{i}))) if ~isempty(varargin{i}) kml.(fnames{i})=varargin{i}; end else if ~isempty(inputname(i)) warning('Argument ''%s'' for property ''%s'' is a ''%s'' class object, not ''%s''.',... inputname(i),fnames{i},class(varargin{i}),class(kml.(fnames{i}))); else warning('Argument %d for property ''%s'' is a ''%s'' class object, not ''%s''.',... i ,fnames{i},class(varargin{i}),class(kml.(fnames{i}))); end end end end end end % display the object function []=disp(kml) for i=1:numel(kml) if strcmp(class(kml),'kml_feature') disp(sprintf('class ''%s'' object ''%s%s'' = \n',... class(kml),inputname(1),string_dim(kml,i))); end disp@kml_object(kml(i)); disp(sprintf(' name: ''%s''' ,kml(i).name)); disp(sprintf(' visibility: %g' ,kml(i).visibility)); disp(sprintf(' open: %g' ,kml(i).open)); disp(sprintf(' snippet: ''%s''' ,kml(i).snippet)); disp(sprintf(' descript: ''%s''' ,kml(i).descript)); disp(sprintf(' styleurl: ''%s''' ,kml(i).styleurl)); if strcmp(class(kml),'kml_feature') disp(sprintf(' style: %s %s\n' ,string_size(kml(i).style),... class(kml(i).style))); else disp(sprintf(' style: %s %s' ,string_size(kml(i).style),... class(kml(i).style))); end end end % set the properties of the object function [kml]=set(kml,varargin) kmlref=feval(class(kml)); % loop through each parameter in the input list (comparing to the reference % object in case property types have been changed) for i=1:2:length(varargin) if isfield(kmlref,varargin{i}) if isa(varargin{i+1},class(kmlref.(varargin{i}))) kml.(varargin{i})=varargin{i+1}; else if ~isempty(inputname(i+1)) warning('Argument ''%s'' for property ''%s'' is a ''%s'' class object, not ''%s''.',... inputname(i+1),varargin{i},class(varargin{i+1}),class(kmlref.(varargin{i}))); else warning('Argument %d for property ''%s'' is a ''%s'' class object, not ''%s''.',... i+1 ,varargin{i},class(varargin{i+1}),class(kmlref.(varargin{i}))); end end else warning('Property ''%s'' for class ''%s'' does not exist.',... varargin{i},class(kmlref)); end end end % write the object function []=kml_write(kml,fid,indent) if ~exist('fid','var') || isempty(fid) fid=1; end if ~exist('indent','var') || isempty(indent) indent=''; end % loop over the features for i=1:numel(kml) if strcmp(class(kml),'kml_feature') if ~isempty(kml(i).id) fprintf(fid,'%s\n',indent,kml(i).id); else fprintf(fid,'%s\n',indent); end end kml_write@kml_object(kml(i),fid,indent); if ~isempty(kml(i).name) fprintf(fid,'%s %s\n',indent,kml(i).name); end fprintf(fid,'%s %d\n',indent,kml(i).visibility); fprintf(fid,'%s %d\n',indent,kml(i).open); if ~isempty(kml(i).snippet) fprintf(fid,'%s %s\n',indent,kml(i).snippet); end if ~isempty(kml(i).descript) fprintf(fid,'%s %s\n',indent,kml(i).descript); end if ~isempty(kml(i).styleurl) fprintf(fid,'%s %s\n',indent,kml(i).styleurl); end % loop over the styles for each feature for j=1:numel(kml(i).style) if ~isempty(kml(i).style{j}) if isa(kml(i).style{j},'kml_styleselector') kml_write(kml(i).style{j},fid,[indent ' ']); else warning('kml(%d).style{%d} is a ''%s'' class object, not ''%s''.',... i,j,class(kml(i).style{j}),'kml_styleselector'); end end end if strcmp(class(kml),'kml_feature') fprintf(fid,'%s\n',indent); end end end end end