Changeset 8661
- Timestamp:
- 06/17/11 17:31:42 (14 years ago)
- Location:
- issm/trunk/src/m/utils/Exp
- Files:
-
- 1 added
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk/src/m/utils/Exp/expmaster.m
r5088 r8661 1 1 function expmaster(newfile,varargin) 2 %EXPMASTER - allow to create, modify, add, cut, .. segments of domain outline together 3 % 4 % this routine is used to create, modify, cut,... an Argus file (.exp) 5 % 6 % expmaster(newprofile,'optionname',optionvalue) 7 % creation of an argus file newprofile 8 % 9 % Available options: 10 % - include: include list of existing ARGUS files 11 % - color: line color (default='r') 12 % - selectioncolor: line color of selected profiles (default='b') 13 % - linestyle (default='-') 14 % - linewidth (default=0.2) 15 % - marker (default='+') 16 % - markersize (default=7) 17 % - markeredgecolor (default='r') 18 % 19 % Usage: 20 % expmaster(newfile,varargin) 21 % 22 % Example: 23 % expmaster('domain.exp','include',{'domain1.exp' 'domain2.exp'},'color','g','marker','+') 24 % 25 % See also EXPDOC 26 27 %recover options 28 options=pairoptions(varargin{:}); 29 30 %Some checks 31 if ~nargin | nargout 32 error('expmaster usage: expmaster(newfile,varargin)') 33 elseif exist(newfile,'file'), 34 %recursive call to expmaster if file already exists 35 if ~exist(options,'include'), 36 expmaster(newfile,'include',newfile,varargin{:}); 37 return; 38 end 39 40 %check modification 41 choice=input(['A file ' newfile ' already exists, do you want to modify it? (y/n)'],'s'); 42 if ~strcmpi(choice,'y'), 43 disp('no modification done ... exiting'); 44 return 45 end 46 end 47 48 %Add default options 49 options=addfielddefault(options,'color','r'); 50 options=addfielddefault(options,'selectioncolor','b'); 51 options=addfielddefault(options,'LineStyle','-'); 52 options=addfielddefault(options,'LineWidth',0.2); 53 options=addfielddefault(options,'Marker','+'); 54 options=addfielddefault(options,'MarkerSize',7); 55 options=addfielddefault(options,'MarkerEdgeColor','r'); 56 57 %put all the argus profiles given in input in one structure A 58 A=struct([]); 59 numprofiles=0; 60 numpoints=0; 61 closed=[]; 62 63 %initialize the variables with files provided by 'include' option 64 if exist(options,'include'), 65 files=getfieldvalue(options,'include'); 66 if ischar(files), files={files}; end 67 for i=1:length(files), 68 filename=files{i}; 69 if ~exist(filename,'file'), 70 error(['expmaster error message:, ' filename ' does not exist. Exiting...']); 71 else 72 %read file 73 B=expread(filename,1); 74 %go through all profiles of B 75 for i=1:size(B,2) 76 %plug profile in A 77 if numprofiles 78 A(numprofiles+1)=B(i); 79 else 80 A=B(i); 81 end 82 %update numprofiles and numpoints 83 numpoints=numpoints+length(B(i).x); 84 numprofiles=numprofiles+1; 85 %figure out if the profile is closed or not 86 if (B(i).x(1)==B(i).x(end) & B(i).y(1)==B(i).y(end) & length(B(i).x)>1 ) 87 closed(numprofiles)=1; 88 else 89 closed(numprofiles)=0; 90 end 91 end 92 end 93 end 94 end 95 96 %Get root of newfile 97 [path root ext ver]=fileparts(newfile); 98 99 %get current figure 100 if ~isempty(get(0,'children')),%if there is already a figure (return the number of opened figures) 101 set(gcf,'Renderer','zbuffer'); %fixes a bug on Mac OS X (not needed in future Matlab version) 102 P=get(gcf,'position'); 103 F=getframe(gca); 104 F=F.cdata; 105 %get current axis 106 xlim=get(gca,'Xlim'); 107 ylim=get(gca,'Ylim'); 108 %recreate x_m and y_m 109 x_m=linspace(xlim(1),xlim(2),size(F,2)); 110 y_m=linspace(ylim(2),ylim(1),size(F,1)); %getframe reverse axis... 111 %plot the data in another figure 112 figure; set(gcf,'position',P); 113 imagesc(x_m,y_m,F); set(gca,'Ydir','normal'); 114 prevplot=1; 115 prevplot2=1; 116 else 117 figure 118 prevplot=0; 119 prevplot2=0; 120 end 121 122 %plot existing profile if any 123 hold on 124 125 %Build backup structre for do and redo 126 backup=cell(1,3); 127 backup{1,1}=A; 128 backup{1,2}=numprofiles; 129 backup{1,3}=numpoints; 130 backup{1,4}=closed; 131 132 loop=1; 133 counter=1; 134 while loop 135 136 %Go through A and rule out the empty profiles 137 list=[]; 138 for i=1:size(A,2); 139 if length(A(i).x)==0 140 list(end+1)=i; 141 numprofiles=numprofiles-1; 142 end 143 end 144 A(list)=[]; 145 closed(list)=[]; 146 147 %Now erase all that have been done and plot the new structure A as it is 148 undoplots(prevplot); 149 if numprofiles 150 prevplot2=1; 151 for i=1:numprofiles 152 if length(A(i).x)==1, 153 plot(A(i).x,A(i).y,'color',getfieldvalue(options,'color'),'LineStyle',getfieldvalue(options,'LineStyle'),'LineWidth',getfieldvalue(options,'LineWidth'),... 154 'MarkerEdgeColor',getfieldvalue(options,'MarkerEdgeColor'),'MarkerSize',getfieldvalue(options,'MarkerSize'),'Marker','o'); 155 else 156 plot(A(i).x,A(i).y,'color',getfieldvalue(options,'color'),'LineStyle',getfieldvalue(options,'LineStyle'),'LineWidth',getfieldvalue(options,'LineWidth')); 157 end 158 prevplot2=prevplot2+1; 159 end 160 end 161 162 %display menu 163 title('Main Menu','FontSize',14); 164 button=menu('Menu','add a profile (open)',...%1 165 'add a contour (closed)',... %2 166 'remove a profile',... %3 167 'modify the position of a point',... %4 168 'add points inside a profile',... %5 169 'add points at the end of a profile',... %6 170 'remove points',... %7 171 'remove several points',... %8 172 'cut a segment',... %9 173 'cut a large area',... %10 174 'merge profiles',... %11 175 'close profile',... %12 176 'undo',... %13 177 'redo',... %14 178 'quit'); %15 179 180 181 %UNDO?? 182 if button==13; 183 if counter==1 184 disp('Already at oldest change'); 185 else 186 counter=counter-1; 187 A=backup{counter,1}; 188 numprofiles=backup{counter,2}; 189 numpoints=backup{counter,3}; 190 closed=backup{counter,4}; 191 end 192 end 193 194 %REDO?? 195 if button==14 196 if counter==size(backup,1) 197 disp('Already at newest change'); 198 else 199 counter=counter+1; 200 A=backup{counter,1}; 201 numprofiles=backup{counter,2}; 202 numpoints=backup{counter,3}; 203 closed=backup{counter,4}; 204 end 205 end 206 207 switch button 208 209 case 1 210 211 [A,numprofiles,numpoints,closed]=addprofile(A,numprofiles,numpoints,closed,prevplot2,root,options); 212 counter=counter+1; 213 backup{counter,1}=A; 214 backup{counter,2}=numprofiles; 215 backup{counter,3}=numpoints; 216 backup{counter,4}=closed; 217 218 case 2 219 220 [A,numprofiles,numpoints,closed]=addcontour(A,numprofiles,numpoints,closed,prevplot2,root,options); 221 counter=counter+1; 222 backup{counter,1}=A; 223 backup{counter,2}=numprofiles; 224 backup{counter,3}=numpoints; 225 backup{counter,4}=closed; 226 227 case 3 228 229 [A,numprofiles,numpoints,closed]=removeprofile(A,numprofiles,numpoints,closed,prevplot2,root,options); 230 counter=counter+1; 231 backup{counter,1}=A; 232 backup{counter,2}=numprofiles; 233 backup{counter,3}=numpoints; 234 backup{counter,4}=closed; 235 236 case 4 237 238 [A,numprofiles,numpoints,closed]=modifyposition(A,numprofiles,numpoints,closed,prevplot,root,options); 239 counter=counter+1; 240 backup{counter,1}=A; 241 backup{counter,2}=numprofiles; 242 backup{counter,3}=numpoints; 243 backup{counter,4}=closed; 244 245 case 5 246 247 [A,numprofiles,numpoints,closed]=addinsideprofile(A,numprofiles,numpoints,closed,prevplot,root,options); 248 counter=counter+1; 249 backup{counter,1}=A; 250 backup{counter,2}=numprofiles; 251 backup{counter,3}=numpoints; 252 backup{counter,4}=closed; 253 254 case 6 255 256 [A,numprofiles,numpoints,closed]=addendprofile(A,numprofiles,numpoints,closed,prevplot2,root,options); 257 counter=counter+1; 258 backup{counter,1}=A; 259 backup{counter,2}=numprofiles; 260 backup{counter,3}=numpoints; 261 backup{counter,4}=closed; 262 263 case 7 264 265 [A,numprofiles,numpoints,closed]=removepoints(A,numprofiles,numpoints,closed,prevplot,root,options); 266 counter=counter+1; 267 backup{counter,1}=A; 268 backup{counter,2}=numprofiles; 269 backup{counter,3}=numpoints; 270 backup{counter,4}=closed; 271 272 case 8 273 274 [A,numprofiles,numpoints,closed]=removeseveralpoints(A,numprofiles,numpoints,closed,prevplot,root,options); 275 counter=counter+1; 276 backup{counter,1}=A; 277 backup{counter,2}=numprofiles; 278 backup{counter,3}=numpoints; 279 backup{counter,4}=closed; 280 281 case 9 282 283 [A,numprofiles,numpoints,closed]=cutprofile(A,numprofiles,numpoints,closed,prevplot,root,options); 284 counter=counter+1; 285 backup{counter,1}=A; 286 backup{counter,2}=numprofiles; 287 backup{counter,3}=numpoints; 288 backup{counter,4}=closed; 289 290 case 10 291 292 [A,numprofiles,numpoints,closed]=cutarea(A,numprofiles,numpoints,closed,prevplot,root,options); 293 counter=counter+1; 294 backup{counter,1}=A; 295 backup{counter,2}=numprofiles; 296 backup{counter,3}=numpoints; 297 backup{counter,4}=closed; 298 299 case 11 300 301 [A,numprofiles,numpoints,closed]=mergeprofiles(A,numprofiles,numpoints,closed,prevplot,root,options); 302 counter=counter+1; 303 backup{counter,1}=A; 304 backup{counter,2}=numprofiles; 305 backup{counter,3}=numpoints; 306 backup{counter,4}=closed; 307 308 309 case 12 310 311 [A,numprofiles,numpoints,closed]=closeprofile(A,numprofiles,numpoints,closed,prevplot,root,options); 312 counter=counter+1; 313 backup{counter,1}=A; 314 backup{counter,2}=numprofiles; 315 backup{counter,3}=numpoints; 316 backup{counter,4}=closed; 317 318 %QUIT 319 case 15 320 321 loop=0; 322 323 otherwise 324 325 %do nothing 326 327 end 328 329 end 330 331 hold off 332 333 %write contour using expwrite 334 title('New file written, exiting...','FontSize',14); 335 if isempty(A) 336 disp('Profile empty, no file written') 337 else 338 expwrite(A,newfile); 339 end 340 341 %close window 342 close; 2 disp('expmaster has been renamed exptool due to the unpopularity of its name')
Note:
See TracChangeset
for help on using the changeset viewer.