% % definition for the kml_style sub (derived) class. % % [kml]=kml_style(varargin) % % where the optional varargin and defaults are: % id (char, style id, '') % icon (char, icon style, '') % label (char, label style, '') % line (char, line style, '') % poly (char, poly style, '') % balloon (char, balloon style, '') % list (char, list style, '') % % 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_style < kml_styleselector properties % icon =kml_iconstyle.empty(); % label =kml_labelstyle.empty(); icon =[]; label =[]; line =kml_linestyle.empty(); poly =kml_polystyle.empty(); % balloon =kml_balloonstyle.empty(); % list =kml_liststyle.empty(); balloon =[]; list =[]; end methods function [kml]=kml_style(varargin) kml=kml@kml_styleselector(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_style()); for i=length(fieldnames(kml_styleselector()))+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) disp(sprintf('class ''%s'' object ''%s%s'' = \n',... class(kml),inputname(1),string_dim(kml,i))); disp@kml_styleselector(kml(i)); disp(sprintf(' icon: %s %s' ,string_size(kml(i).icon),... class(kml(i).icon))); disp(sprintf(' label: %s %s' ,string_size(kml(i).label),... class(kml(i).label))); disp(sprintf(' line: %s %s' ,string_size(kml(i).line),... class(kml(i).line))); disp(sprintf(' poly: %s %s' ,string_size(kml(i).poly),... class(kml(i).poly))); disp(sprintf(' balloon: %s %s' ,string_size(kml(i).balloon),... class(kml(i).balloon))); disp(sprintf(' list: %s %s\n' ,string_size(kml(i).list),... class(kml(i).list))); end end % return the fieldnames of the object function [fnames]=fieldnames(kml) % fieldnames for a sub (derived) class list those before super (base) fnames=fieldnames(kml_styleselector()); fnames={fnames{:} ... 'icon' ... 'label' ... 'line' ... 'poly' ... 'balloon' ... 'list' ... }'; end % set the properties of the object function [kml]=setprops(kml,varargin) kmlref=feval(class(kml)); fnames=fieldnames(kmlref); % 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 ismember(varargin{i},fnames) && (i+1 <= length(varargin)) 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+2),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+2 ,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 styles for i=1:numel(kml) kmli=kml(i); if ~isempty(kmli.id) fprintf(fid,'%s\n',indent); end end % string write the object function [sbuf]=kml_swrite(kml,sbuf,indent) if ~exist('sbuf','var') || isempty(sbuf) sbuf=string_buf; end if ~exist('indent','var') || isempty(indent) indent=''; end % loop over the styles for i=1:numel(kml) kmli=kml(i); if ~isempty(kmli.id) sbuf=add(sbuf,sprintf('%s\n',indent)); end end % delete the object function []=delete(kml) % loop over the styles for i=numel(kml):-1:1 kmli=kml(i); % if isa(kmli.icon,'kml_iconstyle') % delete(kmli.icon); % else % warning('kml(%d).icon is a ''%s'' class object, not ''%s''.',... % i,class(kmli.icon),'kml_iconstyle'); % end % kmli.icon =kml_iconstyle.empty(); % if isa(kmli.label,'kml_labelstyle') % delete(kmli.label); % else % warning('kml(%d).label is a ''%s'' class object, not ''%s''.',... % i,class(kmli.label),'kml_labelstyle'); % end % kmli.label =kml_labelstyle.empty(); if isa(kmli.line,'kml_linestyle') delete(kmli.line); else warning('kml(%d).line is a ''%s'' class object, not ''%s''.',... i,class(kmli.line),'kml_linestyle'); end kmli.line =kml_linestyle.empty(); if isa(kmli.poly,'kml_polystyle') delete(kmli.poly); else warning('kml(%d).poly is a ''%s'' class object, not ''%s''.',... i,class(kmli.poly),'kml_polystyle'); end kmli.poly =kml_polystyle.empty(); % if isa(kmli.balloon,'kml_balloonstyle') % delete(kmli.balloon); % else % warning('kml(%d).balloon is a ''%s'' class object, not ''%s''.',... % i,class(kmli.balloon),'kml_balloonstyle'); % end % kmli.balloon =kml_balloonstyle.empty(); % if isa(kmli.list,'kml_liststyle') % delete(kmli.list); % else % warning('kml(%d).list is a ''%s'' class object, not ''%s''.',... % i,class(kmli.list),'kml_liststyle'); % end % kmli.list =kml_liststyle.empty(); end end end end