Changeset 648 for trunk/src/get_field.m
- Timestamp:
- Jun 9, 2013, 10:31:58 PM (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/get_field.m
r646 r648 22 22 function varargout = get_field(varargin) 23 23 24 % Last Modified by GUIDE v2.5 0 2-Jun-2013 14:00:3924 % Last Modified by GUIDE v2.5 09-Jun-2013 11:15:54 25 25 26 26 % Begin initialization code - DO NOT EDIT … … 45 45 %------------------------------------------------------------------------ 46 46 % --- Executes just before get_field is made visible. 47 %------------------------------------------------------------------------ 47 48 function get_field_OpeningFcn(hObject, eventdata, handles,filename,ParamIn) 48 %------------------------------------------------------------------------ 49 global nb_builtin % nbre of functions to include by default in the menu of functions called by RUN 50 51 %% Choose default command line output for get_field 49 50 %% GUI settings 52 51 handles.output = 'Cancel'; 53 54 %% Update handles structure55 52 guidata(hObject, handles); 56 53 set(hObject,'WindowButtonDownFcn',{'mouse_down'}) % allows mouse action with right button (zoom for uicontrol display) 57 54 58 %% settings for 'slave' mode, called by uvmat, or 'master' mode 59 if exist('filename','var') && ischar(filename) %transfer input file name in slave mode 60 set(handles.inputfile,'String',filename)% prefill the input file name 61 Field=nc2struct(filename,[]);% reads the field structure, without the variables 62 if isfield(Field,'Txt') 63 msgbox_uvmat('ERROR',['get_field/nc2struct/' Field.Txt]) 64 else 65 if ~exist('ParamIn','var') 66 ParamIn=[]; 67 end 68 Field_input(handles,Field,ParamIn); 69 end 70 else %master mode 71 set(handles.inputfile,'String','') 72 end 73 74 %% put the GUI on the lower right of the sceen 75 set(hObject,'Unit','pixel') 76 pos_view_field=get(hObject,'Position'); 77 set(0,'Unit','pixels') 78 ScreenSize=get(0,'ScreenSize'); 79 pos_view_field(1)=ScreenSize(1)+ScreenSize(3)-pos_view_field(3); 80 pos_view_field(2)=ScreenSize(2); 81 set(hObject,'Position',pos_view_field) 82 set(handles.get_field,'WindowStyle','modal')% Make the GUI modal 83 drawnow 84 uiwait(handles.get_field); 85 86 %------------------------------------------------------------------------ 87 % --- update the display when a new field is introduced. 88 function Field_input(handles,Field,ParamIn) 89 %------------------------------------------------------------------------ 90 91 %% fill the list and values of dimensions 92 if isfield(Field,'ListDimName')&&~isempty(Field.ListDimName) 93 Tabcell(:,1)=Field.ListDimName; 94 for iline=1:length(Field.ListDimName) 95 Tabcell{iline,2}=num2str(Field.DimValue(iline)); 96 end 97 Tabchar=cell2tab(Tabcell,' = '); 98 set(handles.dimensions,'String',Tabchar) 55 %% enter input data 56 set(handles.inputfile,'String',filename)% fill the input file name 57 Field=nc2struct(filename,[]);% reads the field structure, without the variables 58 if isfield(Field,'Txt') 59 msgbox_uvmat('ERROR',['get_field/nc2struct/' Field.Txt])% display error message for input fiel reading 60 return 99 61 end 100 62 if ~isfield(Field,'ListVarName') 101 63 return 102 64 end 103 104 %% fill the list of variables 105 Txt=Field.ListVarName; 106 set(handles.variables,'Value',1) 107 set(handles.variables,'String',[{'*'} Txt]) 108 variables_Callback(handles.variables,[], handles) 109 set(handles.ordinate,'String',Txt) 110 set(handles.vector_x,'String',Txt) 111 set(handles.vector_y,'String',Txt ) 112 set(handles.vector_z,'String',[{''} Txt ]) 113 set(handles.vec_color,'String',[{''} Txt ]) 114 set(handles.XVarName,'String',Txt ) 115 set(handles.YVarName,'String',Txt ) 116 set(handles.ZVarName,'String',Txt ) 117 set(handles.scalar,'Value',1) 118 set(handles.scalar,'String', Txt ) 65 if ~exist('ParamIn','var') 66 ParamIn=[]; 67 end 68 69 %% look at singletons and variables with a single dimension 70 Field.Display=Field; 71 Field.Check0D=zeros(size(Field.ListVarName));% =1 for arrays with a single value 72 NbVar=numel(Field.VarDimName); 73 for ilist=1:NbVar 74 if ischar(Field.VarDimName{ilist}) 75 Field.VarDimName{ilist}={Field.VarDimName{ilist}}; %transform string into cell 76 end 77 NbDim=numel(Field.VarDimName{ilist}); 78 check_singleton=false(1,NbDim); 79 for idim=1:NbDim 80 dim_index=strcmp(Field.VarDimName{ilist}{idim},Field.ListDimName);%index in the list of dimensions 81 check_singleton(idim)=isequal(Field.DimValue(dim_index),1);%check_singleton=1 for singleton 82 end 83 Field.Check0D(ilist)=(isequal(check_singleton,ones(1,NbDim)));% =1 if the variable reduces to a single value 84 if ~Field.Check0D(ilist) 85 Field.Display.VarDimName{ilist}=Field.VarDimName{ilist}(~check_singleton);% eliminate singletons in the list of variable dimensions 86 end 87 %Field.NbDim(ilist)=numel(Field.VarDimNameNonSingleton{ilist});%nbre of array dimensions after elimination of singletons 88 end 89 if numel(Field.VarAttribute)<NbVar% complement VarAttribute by blanjs if neded 90 Field.VarAttribute(numel(Field.VarAttribute)+1:NbVar)=cell(1,NbVar-numel(Field.VarAttribute)); 91 end 92 Field.Display.ListVarName=Field.ListVarName(~Field.Check0D); 93 Field.Display.VarAttribute=Field.VarAttribute(~Field.Check0D); 94 Field.Display.VarDimName=Field.Display.VarDimName(~Field.Check0D); 95 Field.Display.DimValue=Field.DimValue(Field.DimValue~=1); 96 Field.Display.ListDimName=Field.ListDimName(Field.DimValue~=1); 119 97 120 98 %% analyse the input field cells 121 [CellInfo,NbDim,errormsg]=find_field_cells(Field );122 if ~isempty(errormsg) 99 [CellInfo,NbDim,errormsg]=find_field_cells(Field.Display); 100 if ~isempty(errormsg) 123 101 msgbox_uvmat('ERROR',['get_field / Field_input / find_field_cells: ' errormsg]) 124 102 return 125 end 103 end 126 104 [Field.MaxDim,imax]=max(NbDim); 127 % look at variables with a single dimension128 for ilist=1:numel(Field.VarDimName)129 if ischar(Field.VarDimName{ilist})130 Field.VarDimName{ilist}={Field.VarDimName{ilist}}; %transform string into cell131 end132 NbDim=numel(Field.VarDimName{ilist});% TODO eliminate singleton dimensions133 check_singleton=false(1,NbDim);134 for idim=1:NbDim135 dim_index=strcmp(Field.VarDimName{ilist}{idim},Field.ListDimName);136 check_singleton(idim)=isequal(Field.DimValue(dim_index),1);137 end138 Field.VarDimName{ilist}=Field.VarDimName{ilist}(~check_singleton);139 Field.NbDim(ilist)=numel(Field.VarDimName{ilist});140 if Field.NbDim(ilist)==1141 Field.VarDimName{ilist}=cell2mat(Field.VarDimName{ilist});142 end143 end144 SingleVarName=Field.ListVarName(Field.NbDim==1);%list of variables with a single dim145 MultiVarName=Field.ListVarName(Field.NbDim>1);146 check_dim=zeros(size(Field.VarDimName));147 for ilist=1:numel(Field.VarDimName);148 if iscell(Field.VarDimName{ilist})% exclude single dim149 for idim=1:numel(Field.VarDimName{ilist})150 check_dim=check_dim|strcmp(Field.VarDimName{ilist}{idim},Field.VarDimName);151 end152 end153 end154 Field.SingleVarName=Field.ListVarName(find(check_dim));%list of variables with a single dim155 Field.SingleDimName=Field.VarDimName(find(check_dim));% corresponding list of dimensions for variables with a single dim156 Field.MaxDim=max(Field.NbDim);157 105 158 106 %% set time mode … … 166 114 check_time(ilist)=~isempty(find(regexp(Field.ListGlobalAttribute{ilist},'Time'),1)); 167 115 end 168 Field. ListNumAttributes=Field.ListGlobalAttribute(check_numvalue);% select the attributes with float numerical value169 if ~isempty(Field. ListNumAttributes)116 Field.Display.ListGlobalAttribute=Field.ListGlobalAttribute(check_numvalue);% select the attributes with float numerical value 117 if ~isempty(Field.Display.ListGlobalAttribute) 170 118 ListSwitchVarIndexTime=[ListSwitchVarIndexTime; {'attribute'}];% the time can be chosen as a global attribute 171 119 end … … 174 122 ListSwitchVarIndexTime=[ListSwitchVarIndexTime;{'variable'};{'dim index'}];% the time can be chosen as a dim index 175 123 end 176 if Field.MaxDim>=4% for dim >=4, one dim is proposed as time 177 option=nboption+1; 178 elseif ~isempty(find(check_time, 1)) 179 option=2; 124 if ~isempty(find(check_time, 1)) 125 set(handles.SwitchVarIndexTime,'Value',2); 180 126 else 181 option=1;127 set(handles.SwitchVarIndexTime,'Value',1); 182 128 end 183 129 set(handles.SwitchVarIndexTime,'String',ListSwitchVarIndexTime) 184 set(handles.SwitchVarIndexTime,'Value',option)185 130 set(handles.get_field,'UserData',Field);% record the finput field structure 186 SwitchVarIndexTime_Callback([],[], handles) 187 188 %% set z coordinate menu if relevant 189 if Field.MaxDim>=3 190 set(handles.vector_z,'Visible','on') 191 set(handles.vector_z,'String',[{''} Txt ]) 192 set(handles.ZVarName,'Visible','on') 193 set(handles.SwitchVarIndexZ,'Visible','on') 194 set(handles.Z_title,'Visible','on') 195 else 196 set(handles.vector_z,'Visible','off') 197 set(handles.ZVarName,'Visible','off') 198 % set(handles.SwitchVarIndexZ,'Visible','off') 199 set(handles.Z_title,'Visible','off') 200 end 131 SwitchVarIndexTime_Callback([], [], handles) 201 132 202 133 %% set vector menu (priority) if detected or scalar menu for space dim >=2, or usual (x,y) plot for 1D fields 134 set(handles.vector_x,'String',Field.Display.ListVarName)% fill the menu of x vector components 135 set(handles.vector_y,'String',Field.Display.ListVarName)% fill the menu of y vector components 136 set(handles.vector_z,'String',[{''} Field.ListVarName])% fill the menu of y vector components 137 set(handles.vec_color,'String',[{''} Field.ListVarName])% fill the menu of y vector components 138 set(handles.scalar,'Value',1)% fill the menu of y vector components 139 set(handles.scalar,'String',Field.ListVarName)% fill the menu of y vector components 140 set(handles.ordinate,'Value',1)% fill the menu of y vector components 141 set(handles.ordinate,'String',Field.ListVarName)% fill the menu of y vector components 203 142 if Field.MaxDim>=2 % case of 2D (or 3D) fields 204 if isfield(CellInfo{imax},'VarIndex_coord_x')&& isfield(CellInfo{imax},'VarIndex_coord_y') 205 set(handles.XVarName,'Value',CellInfo{imax}.VarIndex_coord_x(1)) 206 set(handles.YVarName,'Value',CellInfo{imax}.VarIndex_coord_y(1)) 207 end 208 if isfield(CellInfo{imax},'VarIndex_vector_x') && isfield(CellInfo{imax},'VarIndex_vector_y') 143 if isfield(CellInfo{imax},'VarIndex_vector_x') && isfield(CellInfo{imax},'VarIndex_vector_y') 209 144 set(handles.FieldOption,'Value',3)% set vector selection option 210 145 set(handles.vector_x,'Value',CellInfo{imax}.VarIndex_vector_x(1)) … … 218 153 end 219 154 155 %% fill the general list of dimensions, variables, attributes 156 if isfield(Field,'ListDimName')&&~isempty(Field.ListDimName) 157 Tabcell(:,1)=Field.ListDimName; 158 for iline=1:length(Field.ListDimName) 159 Tabcell{iline,2}=num2str(Field.DimValue(iline)); 160 end 161 Tabchar=cell2tab(Tabcell,' = '); 162 set(handles.dimensions,'String',Tabchar) 163 end 164 set(handles.variables,'Value',1) 165 set(handles.variables,'String',[{'*'} Field.ListVarName]) 166 variables_Callback(handles.variables,[], handles)% list the global attributes 167 168 %% fill menus for coordinates and time 169 FieldOption_Callback(handles.variables,[], handles)% list the global attributes 170 % if isfield(CellInfo{imax},'VarIndex_coord_x')&& isfield(CellInfo{imax},'VarIndex_coord_y') 171 % set(handles.Coord_x,'Value',CellInfo{imax}.VarIndex_coord_x(1)) 172 % set(handles.Coord_y,'Value',CellInfo{imax}.VarIndex_coord_y(1)) 173 % end 220 174 221 175 %% Make choices in menus from input 222 if exist('ParamIn','var')&&~isempty(ParamIn) 223 fill_GUI(ParamIn,handles.get_field); 224 end 225 FieldOption_Callback([],[],handles) 176 % if exist('ParamIn','var')&&~isempty(ParamIn) 177 % fill_GUI(ParamIn,handles.get_field); 178 % end 179 %FieldOption_Callback([],[],handles) 180 181 182 %% put the GUI on the lower right of the sceen 183 set(hObject,'Unit','pixel') 184 pos_view_field=get(hObject,'Position'); 185 set(0,'Unit','pixels') 186 ScreenSize=get(0,'ScreenSize'); 187 pos_view_field(1)=ScreenSize(1)+ScreenSize(3)-pos_view_field(3); 188 pos_view_field(2)=ScreenSize(2); 189 set(hObject,'Position',pos_view_field) 190 set(handles.get_field,'WindowStyle','modal')% Make the GUI modal 191 drawnow 192 uiwait(handles.get_field); 193 194 return 195 196 SwitchVarIndexTime_Callback([],[], handles) 197 198 %% set z coordinate menu if relevant 199 if Field.MaxDim>=3 200 set(handles.vector_z,'Visible','on') 201 set(handles.vector_z,'String',Field.ListVarName(~Field.Check0D)) 202 set(handles.Coord_z,'Visible','on') 203 set(handles.SwitchVarIndexZ,'Visible','on') 204 set(handles.Z_title,'Visible','on') 205 else 206 set(handles.vector_z,'Visible','off') 207 set(handles.Coord_z,'Visible','off') 208 set(handles.Z_title,'Visible','off') 209 end 210 211 212 213 %------------------------------------------------------------------------ 226 214 227 215 %------------------------------------------------------------------------ … … 232 220 delete(handles.get_field) 233 221 222 %------------------------------------------------------------------------ 223 % --- Executes when user attempts to close get_field. 224 %------------------------------------------------------------------------ 225 function get_field_CloseRequestFcn(hObject, eventdata, handles) 226 227 if isequal(get(handles.get_field, 'waitstatus'), 'waiting') 228 % The GUI is still in UIWAIT, us UIRESUME 229 uiresume(handles.get_field); 230 else 231 % The GUI is no longer waiting, just close it 232 delete(handles.get_field); 233 end 234 235 %--------------------------------------------------------- 236 % --- Executes on button press in OK. 237 %------------------------------------------------------------------------ 238 function OK_Callback(hObject, eventdata, handles) 239 240 handles.output=read_GUI(handles.get_field); 241 guidata(hObject, handles);% Update handles structure 242 uiresume(handles.get_field); 243 drawnow 234 244 235 245 % ----------------------------------------------------------------------- … … 250 260 Tabcell{iline,1}=Field.ListGlobalAttribute{iline}; 251 261 if isfield(Field, Field.ListGlobalAttribute{iline}) 252 eval(['val=Field.' Field.ListGlobalAttribute{iline} ';'])262 val=Field.(Field.ListGlobalAttribute{iline}); 253 263 if ischar(val);% attribute value is char string 254 264 Tabcell{iline,2}=val; … … 285 295 if ~isempty(Tabcell) 286 296 Tabchar=cell2tab(Tabcell,'='); 287 Tabchar=[{''};Tabchar];297 % Tabchar=[{''};Tabchar]; 288 298 end 289 299 set(handles.attributes,'Value',1);% select the first item … … 319 329 end 320 330 321 322 323 %------------------------------------------------------------------------ 324 % --- Executes on button press in CheckPlot1D. 325 function CheckPlot1D_Callback(hObject, eventdata, handles) 326 %------------------------------------------------------------------------ 327 val=get(handles.CheckPlot1D,'Value'); 328 if isequal(val,0) 329 set(handles.Panel1Dplot,'Visible','off') 331 %------------------------------------------------------------------------ 332 % --- Executes on selection change in FieldOption. 333 %------------------------------------------------------------------------ 334 function FieldOption_Callback(hObject, eventdata, handles) 335 336 FieldList=get(handles.FieldOption,'String'); 337 FieldOption=FieldList{get(handles.FieldOption,'Value')}; 338 switch FieldOption 339 case '1D plot' 340 set(handles.PanelOrdinate,'Visible','on') 341 pos=get(handles.PanelOrdinate,'Position'); 342 pos(1)=2; 343 pos_coord=get(handles.Coordinates,'Position'); 344 pos(2)=pos_coord(2)-pos(4)-2; 345 set(handles.PanelOrdinate,'Position',pos) 346 set(handles.PanelScalar,'Visible','off') 347 set(handles.PanelVectors,'Visible','off') 348 set(handles.Coord_y,'Visible','off') 349 set(handles.Y_title,'Visible','off') 350 set(handles.Coord_z,'Visible','off') 351 set(handles.Z_title,'Visible','off') 352 ordinate_Callback(hObject, eventdata, handles) 353 case 'scalar' 354 set(handles.PanelOrdinate,'Visible','off') 355 set(handles.PanelScalar,'Visible','on') 356 set(handles.PanelVectors,'Visible','off') 357 pos=get(handles.PanelScalar,'Position'); 358 pos(1)=2; 359 pos_coord=get(handles.Coordinates,'Position'); 360 pos(2)=pos_coord(2)-pos(4)-2; 361 set(handles.PanelScalar,'Position',pos) 362 set(handles.Coord_y,'Visible','on') 363 set(handles.Y_title,'Visible','on') 364 scalar_Callback(hObject, eventdata, handles) 365 case 'vectors' 366 set(handles.PanelOrdinate,'Visible','off') 367 set(handles.PanelScalar,'Visible','off') 368 set(handles.PanelVectors,'Visible','on') 369 pos=get(handles.PanelVectors,'Position'); 370 pos(1)=2; 371 pos_coord=get(handles.Coordinates,'Position'); 372 pos(2)=pos_coord(2)-pos(4)-2; 373 set(handles.PanelVectors,'Position',pos) 374 set(handles.Coord_y,'Visible','on') 375 set(handles.Y_title,'Visible','on') 376 vector_Callback(handles) 377 end 378 379 %------------------------------------------------------------------------ 380 function ordinate_Callback(hObject, eventdata, handles) 381 %------------------------------------------------------------------------ 382 Field=get(handles.get_field,'UserData'); 383 y_index=get(handles.ordinate,'Value'); 384 y_menu=get(handles.ordinate,'String'); 385 YName=y_menu{y_index}; 386 387 %% set list of possible coordinates 388 test_component=zeros(size(Field.Display.VarDimName));%=1 when variable #ilist is eligible as unstructured coordinate 389 test_coord=zeros(size(Field.Display.VarDimName)); %=1 when variable #ilist is eligible as structured coordiante 390 ListCoord={''}; 391 dim_var=Field.Display.VarDimName{y_index};%list of dimensions of the selected variable 392 393 for ilist=1:numel(Field.Display.VarDimName) 394 dimnames=Field.Display.VarDimName{ilist}; %list of dimensions for variable #ilist 395 if isequal(dimnames,dim_var) 396 test_component(ilist)=1; 397 elseif numel(dimnames)==1 && ~isempty(find(strcmp(dimnames{1},dim_var)))%variable ilist is a 1D array which can be coordinate variable 398 test_coord(ilist)=1; 399 end 400 end 401 var_component=find(test_component);% list of variable indices elligible as unstructured coordinates 402 var_coord=find(test_coord);% % list of variable indices elligible as structured coordinates 403 ListCoord=Field.Display.ListVarName([var_component var_coord]); 404 405 %% set default coord selection 406 if numel(find(test_coord))>3 407 set(handles.SwitchVarIndexTime,'Value',3)% the last dim must be considered as time 408 end 409 if numel(var_component)<2 410 if numel(test_coord)<2 411 ListCoord={''}; 412 else 413 set(handles.Coord_x,'Value',2) 414 set(handles.Coord_y,'Value',1) 415 end 330 416 else 331 332 end 333 334 %------------------------------------------------------------------------ 335 function ordinate_Callback(hObject, eventdata, handles) 336 %------------------------------------------------------------------------ 417 coord_val=1; 418 for ilist=1:numel(var_component) 419 ivar=var_component(ilist); 420 if isfield(Field.Display,'VarAttribute') && numel(Field.Display.VarAttribute)>=ivar && isfield(Field.Display.VarAttribute{ivar},'Role') 421 Role=Field.Display.VarAttribute{ivar}.Role; 422 if strcmp(Role,'coord_x') 423 coord_val=ilist; 424 end 425 end 426 end 427 set(handles.Coord_x,'Value',coord_val) 428 end 429 set(handles.Coord_x,'String',ListCoord) 430 431 432 %% set list of time coordinates 433 menu=get(handles.SwitchVarIndexTime,'String'); 434 TimeOption=menu{get(handles.SwitchVarIndexTime,'Value')}; 435 switch TimeOption 436 case 'variable' 437 if numel(find(test_coord))<3 438 ListTime={''}; 439 else 440 ListTime=Field.Display.ListVarName(find(test_coord,end)); 441 end 442 set(handles.TimeName,'Value',1) 443 set(handles.TimeName,'String',ListTime) 444 case 'dim index' 445 if numel(find(test_coord))<3 446 ListTime={''}; 447 else 448 ListTime=Field.Display.VarDimName{find(test_coord,end)}; 449 end 450 set(handles.TimeName,'Value',1) 451 set(handles.TimeName,'String',ListTime) 452 end 453 update_field(handles,YName) 454 455 %------------------------------------------------------------------------ 456 % --- Executes on selection change in scalar menu. 457 %------------------------------------------------------------------------ 458 function scalar_Callback(hObject, eventdata, handles) 459 337 460 Field=get(handles.get_field,'UserData'); 338 list=get(handles.ordinate,'String'); 339 yindex=get(handles.ordinate,'Value'); 340 yindex=name2index(list{yindex(1)},Field.ListVarName); 341 if ~isempty(yindex) 342 set(handles.variables,'Value',yindex+1) 343 variables_Callback(hObject, eventdata, handles) 344 end 345 [CellInfo,NbDim,errormsg]=find_field_cells(Field); 346 %[CellVarIndex,NbDim,VarRole,errormsg]=find_field_cells(Field); 347 for icell=1:numel(CellInfo) 348 VarIndex=CellInfo{icell}.VarIndex; 349 if ~isempty(find(VarIndex==yindex,1)) && (isempty(CellInfo{icell}.VarIndex_coord_x)||~isequal(CellInfo{icell}.VarIndex_coord_x,VarIndex)) 350 cell_select=icell; 351 break 352 end 353 end 354 %val=get(handles.abscissa,'Value'); 355 %set(handles.abscissa,'Value',min(val,2)); 356 coord_x_index=CellInfo{cell_select}.VarIndex_coord_x; 357 coord_x_index=coord_x_index(coord_x_index~=0); 358 %set(handles.XVarName,'String',[{''}; (Field.ListVarName(coord_x_index))'; (Field.ListVarName(VarIndex))']) 359 set(handles.XVarName,'String',[(Field.ListVarName(coord_x_index))'; (Field.ListVarName(VarIndex))']) 360 361 %------------------------------------------------------------------------ 362 % --- Executes on button press in CheckScalar. 363 function CheckScalar_Callback(hObject, eventdata, handles) 364 %------------------------------------------------------------------------ 365 val=get(handles.CheckScalar,'Value'); 366 if isequal(val,0) 367 set(handles.PanelScalar,'Visible','off') 461 scalar_index=get(handles.scalar,'Value'); 462 scalar_menu=get(handles.scalar,'String'); 463 ScalarName=scalar_menu{scalar_index}; 464 465 %% set list of possible coordinates 466 test_component=zeros(size(Field.Display.VarDimName));%=1 when variable #ilist is eligible as unstructured coordinate 467 test_coord=zeros(size(Field.Display.VarDimName)); %=1 when variable #ilist is eligible as structured coordiante 468 ListCoord={''}; 469 dim_var=Field.Display.VarDimName{scalar_index};%list of dimensions of the selected variable 470 471 for ilist=1:numel(Field.Display.VarDimName) 472 dimnames=Field.Display.VarDimName{ilist}; %list of dimensions for variable #ilist 473 if isequal(dimnames,dim_var) 474 test_component(ilist)=1; 475 elseif numel(dimnames)==1 && ~isempty(find(strcmp(dimnames{1},dim_var)))%variable ilist is a 1D array which can be coordinate variable 476 test_coord(ilist)=1; 477 end 478 end 479 var_component=find(test_component);% list of variable indices elligible as unstructured coordiantes 480 var_coord=find(test_coord);% % list of variable indices elligible as structured coordinates 481 ListCoord=Field.Display.ListVarName([var_component var_coord]); 482 483 %% set default coord selection 484 if numel(find(test_coord))>3 485 set(handles.SwitchVarIndexTime,'Value',3)% the last dim must be considered as time 486 end 487 if numel(var_component)<2 488 if numel(test_coord)<2 489 ListCoord={''}; 490 else 491 set(handles.Coord_x,'Value',2) 492 set(handles.Coord_y,'Value',1) 493 end 368 494 else 369 370 end 371 372 %------------------------------------------------------------------------ 373 % --- Executes on button press in CheckVector. 374 function CheckVector_Callback(hObject, eventdata, handles) 375 %------------------------------------------------------------------------ 376 val=get(handles.CheckVector,'Value'); 377 if isequal(val,0) 378 set(handles.PanelVectors,'Visible','off') 379 else 380 381 end 382 383 384 %------------------------------------------------------------------------ 385 % --- Executes on selection change in scalar menu. 386 function scalar_Callback(hObject, eventdata, handles) 387 %------------------------------------------------------------------------ 388 Field=get(handles.get_field,'UserData'); 389 index=get(handles.scalar,'Value'); 390 string=get(handles.scalar,'String'); 391 VarName=string{index}; 392 update_field(hObject, eventdata, handles,VarName) 393 394 %eliminate time 395 TimeDimName='';%default 396 397 % SwitchVarIndexTime=get(handles.SwitchVarIndexTime,'String'); 398 % TimeVarOption=SwitchVarIndexTime{get(handles.SwitchVarIndexTime,'Value')}; 399 List=get(handles.TimeVarName,'String'); 400 if get(handles.CheckDimensionTime) 401 TimeDimName=List{get(handles.TimeVarName,'Value')}; 402 elseif ~get(handles.CheckAttributeTime) 403 TimeVarName=List{get(handles.TimeVarName,'Value')}; 404 end 405 % A completer 406 % if strcmp(get(handles.TimeDimensionMenu,'Visible'),'on') 407 % TimeDimList=get(handles.TimeDimensionMenu,'String'); 408 % TimeDimIndex=get(handles.TimeDimensionMenu,'Value'); 409 % TimeDimName=TimeDimList{TimeDimIndex}; 410 % end 411 412 %check possible coordinates 413 Field=get(handles.get_field,'UserData'); 414 dim_scalar=Field.VarDimName{index};%list of dimensions of the selected scalar 415 test_coord=ones(size(Field.VarDimName)); %=1 when variable #ilist is eligible as coordinate 416 for ilist=1:numel(Field.VarDimName) 417 dimnames=Field.VarDimName{ilist}; %list of dimensions for variable #ilist 418 if isequal(dimnames,TimeDimName) 419 test_coord(ilist)=0;%mark time variables fo elimination 420 end 421 if ischar(dimnames) 422 dimnames={dimnames}; 423 end 424 for idim=1:numel(dimnames) 425 if isempty(find(strcmp(dimnames{idim},dim_scalar),1))%dimension not found in the scalar variable 426 test_coord(ilist)=0; 427 break 428 end 429 end 430 end 431 test_coord(index)=0;%the coordinate variable must be different from the scalar 432 433 string_coord=[{''};string(test_coord==1)]; 434 val=get(handles.XVarName,'Value'); 435 if val>numel(string_coord) 436 set(handles.XVarName,'Value',1) 437 end 438 set(handles.XVarName,'String',string_coord); 439 val=get(handles.ZVarName,'Value'); 440 if val>numel(string_coord) 441 set(handles.ZVarName,'Value',1) 442 end 443 set(handles.ZVarName,'String',string_coord); 444 val=get(handles.ZVarName,'Value'); 445 if val>numel(string_coord) 446 set(handles.ZVarName,'Value',1) 447 end 448 set(handles.YVarName,'String',string_coord); 449 450 451 %------------------------------------------------------------------------ 452 % --- Executes on selection change in abscissa. 453 function abscissa_Callback(hObject, eventdata, handles) 454 %------------------------------------------------------------------------ 455 hselect_field=get(handles.inputfile,'parent'); 456 Field=get(hselect_field,'UserData');%current input field 457 xdispindex=get(handles.abscissa,'Value');%index in the list of abscissa 458 % test_2D=get(handles.CheckVector,'Value');% =1 for vector fields 459 % test_scalar=get(handles.CheckScalar,'Value');% =1 for scalar fields 460 %if isequal(xdispindex,1)% blank selection, no selected TimeVariable for abscissa 461 % Txt=Field.ListVarName; 462 % set(handles.ordinate,'String',[{''} Txt ])% display all the varaibles in the list of ordinates 463 % xindex=[]; 464 % else 465 xlist=get(handles.abscissa,'String');%list of abscissa 466 VarName=xlist{xdispindex}; %selected variable name 467 update_field(hObject, eventdata, handles,VarName) 468 % xindex=name2index(xname,Field.ListVarName); %index of the selection in the total list of variables 469 % if ~isempty(xindex) 470 % set(handles.variables,'Value',xindex+1) 471 % variables_Callback(hObject, eventdata, handles) 472 % end 473 % set(handles.variables,'Value',xindex+1)%outline in the list of variables 474 % variables_Callback(hObject, eventdata, handles) %display properties of the TimeVariable (dim, attributes) 475 % if ~test_2D & ~test_scalar% look for possible varaibles to OK in ordinate 476 % index=Field.VarDimIndex{xindex};%dimension indices of the TimeVariable selected for abscissa 477 % VarIndex=[]; 478 % for ilist=1:length(Field.VarDimIndex)%detect 479 % index_i=Field.VarDimIndex{ilist}; 480 % if ~isempty(index_i) 481 % if isequal(index_i(1),index(1))%if the first dimension of the TimeVariable coincide with the selected one, OK is possible 482 % VarIndex=[VarIndex ilist]; 483 % end 484 % end 485 % end 486 % % set(handles.ordinate,'Value',1) 487 % set(handles.ordinate,'String',Field.ListVarName(VarIndex)) 488 % end 489 % end 490 % 491 % update_UserData(handles) 492 493 494 495 %------------------------------------------------------------------------ 496 % --- Executes on selection change in XVarName. 497 function XVarName_Callback(hObject, eventdata, handles) 498 %------------------------------------------------------------------------ 499 index=get(handles.XVarName,'Value'); 500 string=get(handles.XVarName,'String'); 501 VarName=string{index}; 502 update_field(hObject, eventdata, handles,VarName) 503 504 %------------------------------------------------------------------------ 505 % --- Executes on selection change in ZVarName. 506 function ZVarName_Callback(hObject, eventdata, handles) 507 %------------------------------------------------------------------------ 508 index=get(handles.ZVarName,'Value'); 509 string=get(handles.ZVarName,'String'); 510 VarName=string{index}; 511 update_field(hObject, eventdata, handles,VarName) 512 513 %------------------------------------------------------------------------ 514 % --- Executes on selection change in YVarName. 515 function YVarName_Callback(hObject, eventdata, handles) 516 %------------------------------------------------------------------------ 517 index=get(handles.YVarName,'Value'); 518 string=get(handles.YVarName,'String'); 519 VarName=string{index}; 520 update_field(hObject, eventdata, handles,VarName) 495 coord_val=[1 2]; 496 for ilist=1:numel(var_component) 497 ivar=var_component(ilist); 498 if isfield(Field.Display,'VarAttribute') && numel(Field.Display.VarAttribute)>=ivar && isfield(Field.Display.VarAttribute{ivar},'Role') 499 Role=Field.Display.VarAttribute{ivar}.Role; 500 if strcmp(Role,'coord_x') 501 coord_val(1)=ilist; 502 elseif strcmp(Role,'coord_y') 503 coord_val(2)=ilist; 504 end 505 end 506 end 507 set(handles.Coord_x,'Value',coord_val(1)) 508 set(handles.Coord_y,'Value',coord_val(2)) 509 end 510 511 set(handles.Coord_y,'String',ListCoord) 512 set(handles.Coord_x,'String',ListCoord) 513 514 515 %% set list of time coordinates 516 menu=get(handles.SwitchVarIndexTime,'String'); 517 TimeOption=menu{get(handles.SwitchVarIndexTime,'Value')}; 518 switch TimeOption 519 case 'variable' 520 if numel(find(test_coord))<3 521 ListTime={''}; 522 else 523 ListTime=Field.Display.ListVarName(find(test_coord,end)); 524 end 525 set(handles.TimeName,'Value',1) 526 set(handles.TimeName,'String',ListTime) 527 case 'dim index' 528 if numel(find(test_coord))<3 529 ListTime={''}; 530 else 531 ListTime=Field.Display.VarDimName{find(test_coord,end)}; 532 end 533 set(handles.TimeName,'Value',1) 534 set(handles.TimeName,'String',ListTime) 535 end 536 update_field(handles,ScalarName) 537 538 % --- Executes on button press in check_rgb. 539 function check_rgb_Callback(hObject, eventdata, handles) 540 521 541 522 542 %------------------------------------------------------------------------ … … 524 544 function vector_x_Callback(hObject, eventdata, handles) 525 545 %------------------------------------------------------------------------ 526 index=get(handles.vector_x,'Value'); 527 string=get(handles.vector_x,'String'); 528 VarName=string{index}; 529 530 %check possible coordinates 531 Field=get(handles.get_field,'UserData'); 532 dim_var=Field.VarDimName{index};%list of dimensions of the selected variable 533 test_coord=ones(size(Field.VarDimName)); %=1 when variable #ilist is eligible as coordinate 534 test_component=ones(size(Field.VarDimName)); %=1 when variable #ilist is eligible as other vector component 535 for ilist=1:numel(Field.VarDimName) 536 dimnames=Field.VarDimName{ilist}; %list of dimensions for variable #ilist 537 if ~isequal(dimnames,dim_var) 538 test_component(ilist)=0; 539 end 540 for idim=1:numel(dimnames) 541 if isempty(find(strcmp(dimnames{idim},dim_var),1))%dimension not found in the scalar variable 542 test_coord(ilist)=0; 543 break 544 end 545 end 546 end 547 %eliminate time 548 if get(handles.TimeVariable,'Value') 549 TimeName=get(handles.TimeName,'String'); 550 index_time=find(strcmp( TimeName,Field.ListVarName)); 551 test_coord(index_time)=0; 552 end 553 vlength=numel(string(test_component==1)); 554 val=get(handles.vector_y,'Value'); 555 if val>vlength 556 set(handles.vector_y,'Value',1) 557 end 558 set(handles.vector_y,'String',[string(test_component==1)]) 559 val=get(handles.vector_z,'Value'); 560 if val>vlength+1 561 set(handles.vector_z,'Value',1) 562 end 563 set(handles.vector_z,'String',[{''};string(test_component==1)]) 564 val=get(handles.vec_color,'Value'); 565 if val>vlength+1 566 set(handles.vec_color,'Value',1) 567 end 568 set(handles.vec_color,'String',[{''};string(test_component==1)]) 569 string_coord=[{''};string(test_coord==1)]; 570 val=get(handles.XVarName,'Value'); 571 if val>numel(string_coord) 572 set(handles.XVarName,'Value',1) 573 end 574 set(handles.XVarName,'Visible','on'); 575 set(handles.XVarName,'String',string_coord); 576 val=get(handles.YVarName,'Value'); 577 if val>numel(string_coord) 578 set(handles.YVarName,'Value',1) 579 end 580 set(handles.YVarName,'Visible','on'); 581 set(handles.YVarName,'String',string_coord); 582 val=get(handles.TimeVarName,'Value'); 583 if val>numel(string_coord) 584 set(handles.TimeVarName,'Value',1) 585 end 586 set(handles.TimeVarName,'String',string_coord); 587 588 update_field(hObject, eventdata, handles,VarName) 589 590 %------------------------------------------------------------------------ 591 % --- Executes on selection change in vector_y. 546 vector_x_menu=get(handles.vector_x,'String'); 547 vector_x_index=get(handles.vector_x,'Value'); 548 vector_x=vector_x_menu{vector_x_index}; 549 vector_Callback(handles) 550 update_field(handles,vector_x) 551 552 %------------------------------------------------------------------------ 553 % --- Executes on selection change in vector_x. 592 554 function vector_y_Callback(hObject, eventdata, handles) 593 555 %------------------------------------------------------------------------ 594 index=get(handles.vector_y,'Value'); 595 string=get(handles.vector_y,'String'); 596 VarName=string{index}; 597 update_field(hObject, eventdata, handles,VarName) 556 vector_y_menu=get(handles.vector_x,'String'); 557 vector_y_index=get(handles.vector_x,'Value'); 558 vector_y=vector_y_menu{vector_y_index}; 559 vector_Callback(handles) 560 update_field(handles,vector_y) 598 561 599 562 %------------------------------------------------------------------------ … … 601 564 function vector_z_Callback(hObject, eventdata, handles) 602 565 %------------------------------------------------------------------------ 603 index=get(handles.vector_z,'Value'); 604 string=get(handles.vector_z,'String'); 605 VarName=Astring{index}; 606 update_field(hObject, eventdata, handles,VarName) 607 608 %------------------------------------------------------------------------ 609 % --- Executes on selection change in coord_x_vectors. 610 function coord_x_vectors_Callback(hObject, eventdata, handles) 611 %------------------------------------------------------------------------ 612 index=get(handles.coord_x_vectors,'Value'); 613 string=get(handles.coord_x_vectors,'String'); 614 VarName=string{index}; 615 update_field(hObject, eventdata, handles,VarName) 616 617 %------------------------------------------------------------------------ 618 % --- Executes on selection change in coord_y_vectors. 619 function coord_y_vectors_Callback(hObject, eventdata, handles) 620 %------------------------------------------------------------------------ 621 index=get(handles.coord_y_vectors,'Value'); 622 string=get(handles.coord_y_vectors,'String'); 623 VarName=string{index}; 624 update_field(hObject, eventdata, handles,VarName) 625 626 %------------------------------------------------------------------------ 627 % --- Executes on selection change in YVarName. 628 function TimeVarName_Callback(hObject, eventdata, handles) 629 %------------------------------------------------------------------------ 630 index=get(handles.TimeVarName,'Value'); 631 string=get(handles.TimeVarName,'String'); 632 VarName=string{index}; 633 update_field(hObject, eventdata, handles,VarName) 566 vector_z_menu=get(handles.vector_z,'String'); 567 vector_z_index=get(handles.vector_z,'Value'); 568 vector_z=vector_z_menu{vector_z_index}; 569 vector_Callback(handles) 570 update_field(handles,vector_z) 634 571 635 572 %------------------------------------------------------------------------ … … 640 577 string=get(handles.vec_color,'String'); 641 578 VarName=string{index}; 642 update_field(hObject, eventdata, handles,VarName) 579 vector_Callback(handles) 580 update_field(handles,VarName) 581 582 %------------------------------------------------------------------------ 583 % --- Executes on selection change in vector_x or vector_y 584 function vector_Callback( handles) 585 %------------------------------------------------------------------------ 586 Field=get(handles.get_field,'UserData'); 587 vector_x_index=get(handles.vector_x,'Value'); 588 vector_y_index=get(handles.vector_y,'Value'); 589 vec_color_index=get(handles.vec_color,'Value'); 590 591 %% set list of possible coordinates 592 test_component=zeros(size(Field.Display.VarDimName));%=1 when variable #ilist is eligible as unstructured coordinate 593 test_coord=zeros(size(Field.Display.VarDimName)); %=1 when variable #ilist is eligible as structured coordiante 594 check_consistent=1;%check that the selected vector components (and possibly color var) have the same dimensiosn 595 ListCoord={''}; 596 dim_var=Field.Display.VarDimName{vector_x_index};%list of dimensions of the selected variable 597 if ~isequal(dim_var,Field.Display.VarDimName{vector_y_index}) 598 check_consistent=0; 599 elseif vec_color_index~=1 && ~isequal(dim_var,Field.Display.VarDimName{vec_color_index}) 600 check_consistent=0; 601 end 602 if check_consistent 603 for ilist=1:numel(Field.Display.VarDimName) 604 dimnames=Field.Display.VarDimName{ilist}; %list of dimensions for variable #ilist 605 if isequal(dimnames,dim_var) 606 test_component(ilist)=1; 607 elseif numel(dimnames)==1 && ~isempty(find(strcmp(dimnames{1},dim_var)))%variable ilist is a 1D array which can be coordinate variable 608 test_coord(ilist)=1; 609 end 610 end 611 var_component=find(test_component);% list of variable indices elligible as unstructured coordiantes 612 var_coord=find(test_coord);% % list of variable indices elligible as structured coordinates 613 ListCoord=Field.Display.ListVarName([var_component var_coord]); 614 615 %% set default coord selection 616 if numel(find(test_coord))>3 617 set(handles.SwitchVarIndexTime,'Value',3)% the last dim must be considered as time 618 end 619 if numel(var_component)<2 620 if numel(test_coord)<2 621 ListCoord={''}; 622 else 623 set(handles.Coord_x,'Value',2) 624 set(handles.Coord_y,'Value',1) 625 end 626 else 627 coord_val=[1 2]; 628 for ilist=1:numel(var_component) 629 ivar=var_component(ilist); 630 if isfield(Field.Display,'VarAttribute') && numel(Field.Display.VarAttribute)>=ivar && isfield(Field.Display.VarAttribute{ivar},'Role') 631 Role=Field.Display.VarAttribute{ivar}.Role; 632 if strcmp(Role,'coord_x') 633 coord_val(1)=ilist; 634 elseif strcmp(Role,'coord_y') 635 coord_val(2)=ilist; 636 end 637 end 638 end 639 set(handles.Coord_x,'Value',coord_val(1)) 640 set(handles.Coord_y,'Value',coord_val(2)) 641 end 642 end 643 set(handles.Coord_y,'String',ListCoord) 644 set(handles.Coord_x,'String',ListCoord) 645 646 647 %% set list of time coordinates 648 menu=get(handles.SwitchVarIndexTime,'String'); 649 TimeOption=menu{get(handles.SwitchVarIndexTime,'Value')}; 650 switch TimeOption 651 case 'variable' 652 if numel(find(test_coord))<3 653 ListTime={''}; 654 else 655 ListTime=Field.Display.ListVarName(find(test_coord,end)); 656 end 657 set(handles.TimeName,'Value',1) 658 set(handles.TimeName,'String',ListTime) 659 case 'dim index' 660 if numel(find(test_coord))<3 661 ListTime={''}; 662 else 663 ListTime=Field.Display.VarDimName{find(test_coord,end)}; 664 end 665 set(handles.TimeName,'Value',1) 666 set(handles.TimeName,'String',ListTime) 667 end 668 669 %------------------------------------------------------------------------ 670 % --- Executes on selection change in SwitchVarIndexX. 671 %------------------------------------------------------------------------ 672 function SwitchVarIndexX_Callback(hObject, eventdata, handles) 673 674 %------------------------------------------------------------------------ 675 % --- Executes on selection change in Coord_x. 676 function Coord_x_Callback(hObject, eventdata, handles) 677 %------------------------------------------------------------------------ 678 index=get(handles.Coord_x,'Value'); 679 string=get(handles.Coord_x,'String'); 680 VarName=string{index}; 681 update_field(handles,VarName) 682 683 %------------------------------------------------------------------------ 684 % --- Executes on selection change in Coord_y. 685 function Coord_y_Callback(hObject, eventdata, handles) 686 %------------------------------------------------------------------------ 687 index=get(handles.Coord_y,'Value'); 688 string=get(handles.Coord_y,'String'); 689 VarName=string{index}; 690 update_field(handles,VarName) 691 692 %------------------------------------------------------------------------ 693 % --- Executes on selection change in Coord_z. 694 function Coord_z_Callback(hObject, eventdata, handles) 695 %------------------------------------------------------------------------ 696 index=get(handles.Coord_z,'Value'); 697 string=get(handles.Coord_z,'String'); 698 VarName=string{index}; 699 update_field(handles,VarName) 700 701 %------------------------------------------------------------------------ 702 % --- Executes on selection change in SwitchVarIndexTime. 703 %------------------------------------------------------------------------ 704 function SwitchVarIndexTime_Callback(hObject, eventdata, handles) 705 Field=get(handles.get_field,'UserData'); 706 menu=get(handles.SwitchVarIndexTime,'String'); 707 option=menu{get(handles.SwitchVarIndexTime,'Value')}; 708 709 switch option 710 case 'file index' 711 set(handles.TimeName, 'Visible','off')% the time is taken as the file index 712 case 'attribute' 713 set(handles.TimeName, 'Visible','on')% timeName menu represents the available attributes 714 time_index=[]; 715 PreviousList=get(handles.TimeName, 'String'); 716 index=[]; 717 if ~isempty(PreviousList) 718 PreviousAttr=PreviousList{get(handles.TimeName, 'Value')}; 719 index=find(strcmp(PreviousAttr,Field.Display.ListGlobalAttributes)); 720 end 721 if isempty(index) 722 time_index=find(~cellfun('isempty',regexp(Field.Display.ListGlobalAttribute,'Time')));% index of the attributes containing the string 'Time' 723 end 724 if ~isempty(time_index) 725 set(handles.TimeName,'Value',time_index(1)) 726 else 727 set(handles.TimeName,'Value',1) 728 end 729 set(handles.TimeName, 'String',Field.Display.ListGlobalAttribute) 730 case 'variable'% TimeName menu represents the available variables 731 set(handles.TimeName, 'Visible','on') 732 TimeVarName=Field.Display.SingleVarName;% slist of variables with a single dimension (candidate for time) 733 List=get(handles.TimeName,'String'); 734 option=List{get(handles.TimeName,'Value')}; 735 ind=find(strcmp(option,TimeVarName)); 736 if isempty(ind) 737 set(handles.TimeName, 'Value',1); 738 else 739 set(handles.TimeName, 'Value',ind); 740 end 741 set(handles.TimeName, 'String',TimeVarName) 742 case 'dim index'% TimeName menu represents the available dimensions 743 set(handles.TimeName, 'Visible','on') 744 TimeVarName=Field.Display.SingleDimName; 745 List=get(handles.TimeName,'String'); 746 option=List{get(handles.TimeName,'Value')}; 747 ind=find(strcmp(option,TimeVarName)); 748 if isempty(ind) 749 set(handles.TimeName, 'Value',1); 750 else 751 set(handles.TimeName, 'Value',ind); 752 end 753 set(handles.TimeName, 'String',TimeVarName) 754 end 643 755 644 756 %----------------------------------------------------------------------- 645 function update_field(h Object, eventdata, handles,VarName)757 function update_field(handles,VarName) 646 758 %----------------------------------------------------------------------- 647 759 Field=get(handles.get_field,'UserData'); … … 649 761 if ~isempty(index) 650 762 set(handles.variables,'Value',index+1) 651 variables_Callback(hObject, eventdata, handles) 652 end 653 654 %------------------------------------------------------------------------ 655 % update the UserData Field for use of the selected variables outsde get_field (taken from RUN_Callback) 656 function update_UserData(handles) 657 %------------------------------------------------------------------------ 658 return 659 % global SubField 660 hselect_field=get(handles.inputfile,'parent');%handle of the get_field interface 661 Field=get(hselect_field,'UserData');% read the current field Structure in the get_field interface 662 if isfield(Field,'VarAttribute') 663 VarAttribute=Field.VarAttribute; 664 else 665 VarAttribute={}; 666 end 667 668 669 % select the indices of field variables for 2D plots 670 test_CheckPlot1D=get(handles.CheckPlot1D,'Value'); 671 test_scalar=get(handles.CheckScalar,'Value'); 672 test_vector=get(handles.CheckVector,'Value'); 673 674 %transform if needed (calibration) 675 list=get(handles.menu_coord,'String'); 676 index=get(handles.menu_coord,'Value'); 677 transform=list{index}; 678 if ~isequal(transform,'') 679 Field=feval(transform,Field); 680 end 681 VarIndex.u=[]; 682 VarIndex.v=[]; 683 VarIndex.w=[]; 684 VarIndex.A=[]; 685 VarIndex_tot=[]; 686 iuA=[]; 687 if test_scalar 688 Astring=get(handles.scalar,'String'); 689 Aindex=get(handles.scalar,'Value');%selected indices in the ordinate listbox 690 list_var=Astring(Aindex); 691 VarIndex.A=name2index(list_var,Field.ListVarName);%index of the variable A in ListVarName 692 VarIndex_tot= [VarIndex_tot VarIndex.A]; 693 DimIndex=Field.VarDimIndex{VarIndex.A};%dimension indices of the variable 694 DimValue=Field.DimValue(DimIndex); 695 ind=find(DimValue==1); 696 DimIndex(ind)=[];%Mremove singleton 697 end 698 if test_vector 699 Ustring=get(handles.vector_x,'String'); 700 Uindex=get(handles.vector_x,'Value'); %selected indices in the ordinate listbox 701 list_var=Ustring{Uindex};%name of the selected scalar 702 VarIndex.u=name2index(list_var,Field.ListVarName); 703 Vstring=get(handles.vector_y,'String'); 704 Vindex=get(handles.vector_y,'Value'); %selected indices in the ordinate listbox 705 list_var=Ustring{Vindex};%name of the selected scalar 706 VarIndex.v=name2index(list_var,Field.ListVarName); 707 if isequal(VarIndex.u,VarIndex.A)|isequal(VarIndex.v,VarIndex.A) 708 iuA=VarIndex.A; %same variable used for vector and scalar 709 VarIndex_tot(iuA)=[]; 710 end 711 VarIndex_tot=[VarIndex_tot VarIndex.u VarIndex.v]; 712 %dimensions 713 DimIndex_u=Field.VarDimIndex{VarIndex.u};%dimension indices of the variable 714 DimValue=Field.DimValue(DimIndex_u); 715 ind=find(DimValue==1); 716 DimIndex_u(ind)=[];%Mremove singleton 717 DimIndex_v=Field.VarDimIndex{VarIndex.v};%dimension indices of the variable 718 DimValue=Field.DimValue(DimIndex_v); 719 ind=find(DimValue==1); 720 DimIndex_v(ind)=[];%Mremove singleton 721 if ~isequal(DimIndex_u,DimIndex_v) 722 msgbox_uvmat('ERROR','inconsistent dimensions for u and v') 723 set(handles.vector_y,'Value',1); 724 return 725 elseif test_scalar & ~isequal(DimIndex_u,DimIndex) 726 msgbox_uvmat('ERROR','inconsistent dimensions for vector and scalar represented as vector color') 727 set(handles.scalar,'Value',1); 728 return 729 end 730 DimIndex=DimIndex_u; 731 %TODO possibility of selecting 3 times the same TimeVariable for u, v, w components 732 end 733 734 735 % select the TimeVariable index (or indices) for z coordinates 736 test_grid=0; 737 if test_scalar | test_vector 738 nbdim=length(DimIndex); 739 if nbdim > 3 740 msgbox_uvmat('ERROR','array with more than three dimensions, not supported') 741 return 742 else 743 perm_ind=1:nbdim; 744 end 745 if nbdim==3 746 zstring=get(handles.coord_z_vectors_scalar,'String'); 747 zindex=get(handles.coord_z_vectors_scalar,'Value'); %selected indices in the ordinate listbox 748 list_var=zstring(zindex); 749 VarIndex_z=name2index(list_var,Field.ListVarName);%index of the selected variable 750 if isequal(VarIndex.A,VarIndex_z)|isequal(VarIndex.u,VarIndex_z)|isequal(VarIndex.v,VarIndex_z)|isequal(VarIndex.w,VarIndex_z) 751 if zindex ~= 1 752 set(handles.coord_z_vectors_scalar,'Value',1)%ordinate cannot be the same as scalar or vector components 753 return 754 end 755 else 756 VarIndex_tot=[VarIndex_tot VarIndex_z]; 757 DimIndex_z=Field.VarDimIndex{VarIndex_z}; 758 DimValue=Field.DimValue(DimIndex_z); 759 ind=find(DimValue==1); 760 DimIndex_z(ind)=[];%Mremove singleton 761 if isequal(DimIndex_z,DimIndex) 762 VarAttribute{VarIndex_z}.Role='coord_z';%unstructured coordinates 763 elseif length(DimIndex_z)==1 764 VarAttribute{VarIndex_z}.Role=Field.ListDimName{DimIndex_z}; %dimension variable 765 ind_z=find(DimIndex==DimIndex_z(1)); 766 perm_ind(ind_z)=1; 767 test_grid=1; 768 else 769 msgbox_uvmat('ERROR','multiple dimensions for the z coordinate') 770 return 771 end 772 end 773 % if ~isempty(VarIndex_z) 774 % DimIndex_z=Field.VarDimIndex{VarIndex_z};%dimension indices of the TimeVariable 775 % if length(DimIndex_z)==1 & nbdim==3 %dimension TimeVariable 776 % VarAttribute{VarIndex_z}.Role=Field.ListDimName{DimIndex_z}; 777 % ind_z=find(DimIndex==DimIndex_z(1)); 778 % perm_ind(ind_z)=1; 779 % test_grid=1; 780 % end 781 % end 782 end 783 end 784 785 % select the TimeVariable index (or indices) for ordinate 786 ystring=get(handles.ordinate,'String'); 787 yindex=get(handles.ordinate,'Value'); %selected indices in the ordinate listbox 788 list_var=ystring(yindex); 789 VarIndex.y=name2index(list_var,Field.ListVarName); 790 if isequal(VarIndex.A,VarIndex.y) 791 set(handles.ZVarName,'Value',1) 792 elseif isequal(VarIndex.u,VarIndex.y)||isequal(VarIndex.v,VarIndex.y)||isequal(VarIndex.w,VarIndex.y) 793 set(handles.coord_y_vectors,'Value',1)%ordinate cannot be the same as scalar or vector components 794 else 795 for ivar=1:length(VarIndex.y) 796 VarAttribute{VarIndex.y(ivar)}.Role='coord_y'; 797 end 798 VarIndex_tot=[VarIndex_tot VarIndex.y]; 799 end 800 if (test_scalar | test_vector) & ~isempty(VarIndex.y) 801 DimIndex_y=Field.VarDimIndex{VarIndex.y};%dimension indices of the variable 802 if length(DimIndex_y)==1 803 ind_y=find(DimIndex==DimIndex_y(1)); 804 test_grid=1; 805 if nbdim==3 806 VarAttribute{VarIndex.y}.Role=Field.ListDimName{DimIndex_y}; 807 perm_ind(ind_y)=2; 808 elseif nbdim==2 809 VarAttribute{VarIndex.y}.Role=Field.ListDimName{DimIndex_y}; 810 perm_ind(ind_y)=1; 811 end 812 elseif test_grid 813 msgbox_uvmat('ERROR','the dimension of the y coordinate variable should be 1') 814 end 815 end 816 817 %select the TimeVariable index for the abscissa 818 xstring=get(handles.abscissa,'String'); 819 xindex=get(handles.abscissa,'Value'); 820 list_var=xstring(xindex); 821 VarIndex.x=name2index(list_var,Field.ListVarName);%var index corresponding to var name list_var 822 if length(VarIndex.x)==1 823 DimIndex_x=Field.VarDimIndex{VarIndex.x}; 824 DimValue=Field.DimValue(DimIndex_x); 825 ind=find(DimValue==1); 826 DimIndex_x(ind)=[];%Mremove singleton 827 VarAttribute{VarIndex.x}.Role=Field.ListDimName{DimIndex_x}; %dimension variable 828 % VarAttribute{VarIndex.x}.Role='coord_x';%default (may be modified) 829 index_detect=find(VarIndex_tot==VarIndex.x); 830 else 831 index_detect=[];%coord x variable not already used 832 end 833 if isempty(index_detect) 834 VarIndex_tot=[VarIndex_tot VarIndex.x]; 835 elseif ~test_CheckPlot1D 836 VarIndex.x=[]; 837 set(handles.abscissa,'Value',1)%vchosen abscissa already chosen, suppres it as abscissa 838 end 839 840 if (test_scalar | test_vector) & ~isempty(VarIndex.x) 841 DimIndex_x=Field.VarDimIndex{VarIndex.x};%dimension indices of the variable 842 if length(DimIndex_x)==1 843 ind_x=find(DimIndex==DimIndex_x(1)); 844 if nbdim==3 845 %VarAttribute{VarIndex.x}.Role=Field.ListDimName{DimIndex_x}; 846 perm_ind(ind_x)=3; 847 elseif nbdim==2 848 %VarAttribute{VarIndex.x}.Role=Field.ListDimName{DimIndex_x}; 849 perm_ind(ind_x)=2; 850 end 851 if isequal(perm_ind,1:nbdim) 852 test_grid=0; 853 end 854 DimIndex=DimIndex(perm_ind); 855 elseif test_grid 856 msgbox_uvmat('ERROR','the dimension of the x coordinate variable should be 1') 857 end 858 if isequal(DimIndex_x,DimIndex) 859 VarAttribute{VarIndex.x}.Role='coord_x';%unstructured coordinates 860 end 861 end 862 863 %defined the selected sub-field SubField 864 SubField.ListGlobalAttribute{1}='InputFile'; 865 SubField.InputFile=get(handles.inputfile,'String'); 866 SubField.ListDimName=Field.ListDimName; 867 SubField.DimValue=Field.DimValue; 868 SubField.ListVarName=Field.ListVarName(VarIndex_tot); 869 SubField.VarDimIndex=Field.VarDimIndex(VarIndex_tot); 870 871 testperm=0; 872 testattr=0; 873 for ivar=VarIndex.u 874 VarAttribute{ivar}.Role='vector_x'; 875 testattr=1; 876 if test_grid 877 VarDimIndex{ivar}=DimIndex; %permute dimensions 878 testperm=1; 879 end 880 end 881 for ivar=VarIndex.v 882 VarAttribute{ivar}.Role='vector_y'; 883 testattr=1; 884 if test_grid 885 VarDimIndex{ivar}=DimIndex;%permute dimensions 886 testperm=1; 887 end 888 end 889 for ivar=VarIndex.A 890 if test_grid 891 VarDimIndex{ivar}=DimIndex;%permute dimensions 892 testperm=1; 893 end 894 if isempty(iuA) 895 VarAttribute{ivar}.Role='scalar';%Role =scalar 896 testattr=1; 897 else 898 VarAttribute=[VarAttribute VarAttribute(ivar)]; %duplicate the attribute for a new variable 899 nbattr=length(VarAttribute); 900 VarAttribute{nbattr}.Role='scalar'; 901 testattr=1; 902 end 903 end 904 if testperm 905 SubField.VarDimIndex=VarDimIndex(VarIndex_tot); 906 end 907 if testattr 908 SubField.VarAttribute=VarAttribute(VarIndex_tot); 909 end 910 set(hselect_field,'UserData',Field) 911 912 %--------------------------------------------------------- 913 % --- Executes on button press in OK. 914 915 function OK_Callback(hObject, eventdata, handles) 916 %--------------------------------------------------------- 917 918 handles.output=read_GUI(handles.get_field); 919 guidata(hObject, handles);% Update handles structure 920 uiresume(handles.get_field); 921 drawnow 922 return 923 924 %%%% SKIPPED %%%% 925 hfield=[]; 926 huvmat=findobj(allchild(0),'tag','uvmat'); 927 hseries=findobj(allchild(0),'tag','series'); 928 check_series=0; 929 % look for the status of the GUI uvmat 930 if ~isempty(huvmat) 931 hh=guidata(huvmat); 932 FieldMenu=get(hh.FieldName,'String'); 933 FieldName=FieldMenu{get(hh.FieldName,'Value')}; 934 if strcmp(FieldName,'get_field...') 935 hfield=hh.FieldName; %FieldName on uvmat 936 elseif strcmp(get(hh.FieldName_1,'Visible'),'on') 937 FieldMenu=get(hh.FieldName_1,'String'); 938 if ~isempty(FieldMenu) 939 FieldName=FieldMenu{get(hh.FieldName_1,'Value')}; 940 if strcmp(FieldName,'get_field...') 941 hfield=hh.FieldName_1; %FieldName_1 on uvmat 942 end 943 end 944 end 945 end 946 % if no filed data is concerned on uvmat, look at the GUI series 947 if isempty(hfield) && ~isempty(hseries) 948 check_series=1; 949 hh=guidata(hseries); 950 FieldMenu=get(hh.FieldName,'String'); 951 FieldName=FieldMenu{get(hh.FieldName,'Value')}; 952 if strcmp(FieldName,'get_field...') 953 hfield=hh.FieldName; %FieldName on series 954 else 955 FieldMenu=get(hh.FieldName_1,'String'); 956 FieldName=FieldMenu{get(hh.FieldName_1,'Value')}; 957 if strcmp(FieldName,'get_field...') 958 hfield=hh.FieldName_1; %FieldName_1 on series 959 end 960 end 961 end 962 if ~isempty(hfield) 963 get_field_GUI=read_GUI(handles.get_field); 964 if isfield(get_field_GUI,'PanelVectors') 965 set(hh.Coord_x,'value',1) 966 set(hh.Coord_y,'value',1) 967 set(hh.Coord_x,'String',{get_field_GUI.PanelVectors.coord_x_vectors}) 968 set(hh.Coord_y,'String',{get_field_GUI.PanelVectors.coord_y_vectors}) 969 UName=get_field_GUI.PanelVectors.vector_x; 970 VName=get_field_GUI.PanelVectors.vector_y; 971 menu_str=[{['vec(' UName ',' VName ')']};{UName};{VName};{['norm(' UName ',' VName ')']};{'get_field...'}]; 972 menu_color=[{''};{UName};{VName};{['norm(' UName ',' VName ')']}]; 973 set(hfield,'Value',1) 974 set(hfield,'String',menu_str) 975 if ~check_series 976 ind_menu=find(strcmp(get_field_GUI.PanelVectors.vec_color,menu_color)); 977 if ~isempty(ind_menu) 978 set(hh.ColorScalar,'Value',ind_menu) 979 else 980 set(hh.ColorScalar,'Value',1) 981 end 982 set(hh.ColorScalar,'String',menu_color) 983 end 984 elseif isfield(get_field_GUI,'PanelScalar') 985 set(hh.Coord_x,'value',1) 986 set(hh.Coord_y,'value',1) 987 set(hh.Coord_x,'String',{get_field_GUI.PanelScalar.coord_x_scalar}) 988 set(hh.Coord_y,'String',{get_field_GUI.PanelScalar.coord_y_scalar}) 989 AName=get_field_GUI.PanelScalar.scalar; 990 menu=get(hfield,'String'); 991 ind_select=find(strcmp(AName,menu)); 992 if isempty(ind_select) 993 menu=[menu(1:end-1);{AName};{'get_field...'}]; 994 ind_select=numel(menu)-1; 995 end 996 set(hfield,'Value',ind_select); 997 set(hfield,'String',menu); 998 elseif isfield(get_field_GUI,'Panel1Dplot') 999 set(hh.Coord_x,'Value',1) 1000 set(hh.Coord_x,'String',{get_field_GUI.Panel1Dplot.abscissa}) 1001 set(hh.Coord_y,'String',get_field_GUI.Panel1Dplot.ordinate) 1002 set(hh.Coord_y,'Max', numel(get_field_GUI.Panel1Dplot.ordinate)) 1003 set(hh.Coord_y,'Value',1:numel(get_field_GUI.Panel1Dplot.ordinate)) 1004 set(hfield,'Value',1) 1005 set(hfield,'String',[{''};{'get_field...'}]) 1006 end 1007 if ~check_series && strcmp(get(gcbf,'tag'),'get_field')%get_field is not called by another GUI (uvmat) 1008 uvmat('run0_Callback',hObject,eventdata,hh); %refresh uvmat 1009 end 1010 end 1011 delete(handles.get_field) 1012 1013 763 variables_Callback(handles.variables, [], handles) 764 end 1014 765 1015 766 %------------------------------------------------- … … 1036 787 end 1037 788 end 1038 1039 1040 % -----------------------------------------------------------------------1041 function TimeName_Callback(hObject, eventdata, handles)1042 1043 scalar_Callback(hObject, eventdata, handles)% suppress time variable from possible spatial coordinates1044 vector_x_Callback(hObject, eventdata, handles)1045 1046 %------------------------------------------------------------------------1047 % --- Executes on button press in TimeAttribute.1048 function TimeAttribute_Callback(hObject, eventdata, handles)1049 %------------------------------------------------------------------------1050 val=get(handles.TimeAttribute,'Value');1051 if val1052 set(handles.TimeAttributeMenu,'Visible','on')1053 Field=get(handles.get_field,'UserData');1054 time_value=zeros(size(Field.ListGlobalAttribute));1055 test_time=zeros(size(Field.ListGlobalAttribute));1056 for ilist=1:numel(Field.ListGlobalAttribute)1057 if isnumeric(eval(['Field.' Field.ListGlobalAttribute{ilist}]))1058 eval(['time_val=Field.' Field.ListGlobalAttribute{ilist} ';'])1059 if ~isempty(time_val)1060 time_value(ilist)=time_val;1061 test_time(ilist)=1;1062 end1063 end1064 end1065 ListTimeAttribute=Field.ListGlobalAttribute(test_time==1);1066 attr_index=get(handles.TimeAttributeMenu,'Value');1067 if attr_index>numel(ListTimeAttribute)1068 attr_index=1;1069 set(handles.TimeAttributeMenu,'Value',1);1070 end1071 if isempty(ListTimeAttribute)1072 set(handles.TimeAttributeMenu,'String',{''})1073 set(handles.TimeValue,'Visible','off')1074 else1075 set(handles.TimeValue,'Visible','on')1076 set(handles.TimeAttributeMenu,'String',ListTimeAttribute)1077 set(handles.TimeValue,'String',num2str(time_value(attr_index)))1078 end1079 set(handles.TimeDimension,'Value',0)1080 TimeDimension_Callback(hObject, eventdata, handles)1081 set(handles.TimeVariable,'Value',0)1082 TimeVariable_Callback(hObject, eventdata, handles)1083 else1084 set(handles.TimeAttributeMenu,'Visible','off')1085 set(handles.TimeValue,'Visible','off')1086 end1087 1088 %------------------------------------------------------------------------1089 % --- Executes on selection change in TimeAttributeMenu.1090 function TimeAttributeMenu_Callback(hObject, eventdata, handles)1091 ListTimeAttribute=get(handles.TimeAttributeMenu,'String');1092 index=get(handles.TimeAttributeMenu,'Value');1093 AttrName=ListTimeAttribute{index};1094 Field=get(handles.get_field,'UserData');1095 eval(['time_val=Field.' AttrName ';'])1096 set(handles.TimeValue,'String',num2str(time_val))1097 %------------------------------------------------------------------------1098 1099 %------------------------------------------------------------------------1100 % --- Executes on button press in TimeVariable.1101 function TimeDimension_Callback(hObject, eventdata, handles)1102 %------------------------------------------------------------------------1103 val=get(handles.TimeDimension,'Value');%=1 if check box TimeDimension is selected1104 if val %if check box TimeDimension is selected1105 Field=get(handles.get_field,'UserData');% structure describing the currently opened field1106 previous_menu=get(handles.TimeDimensionMenu,'String');1107 if ~isequal(previous_menu,Field.ListDimName)%update the list of available dimensions in the menu1108 ind_select=find(strcmpi('time',Field.ListDimName),1);% look for a dimension named 'time' or 'Time'1109 if isempty(ind_select)1110 ind_select=1;% select the first item in the list if 'time' is not found1111 end1112 set(handles.TimeDimensionMenu,'Value',ind_select);1113 set(handles.TimeDimensionMenu,'String',Field.ListDimName)% put the list of available dimensions in the menu1114 end1115 set(handles.TimeDimensionMenu,'Visible','on')% the menu is made visible1116 set(handles.TimeIndexValue,'Visible','on')% the time matrix index value selected is made visible1117 TimeDimensionMenu_Callback(hObject, eventdata, handles)1118 set(handles.TimeAttribute,'Value',0) %deselect alternative options for time1119 set(handles.TimeVariable,'Value',0)1120 TimeAttribute_Callback(hObject, eventdata, handles)1121 else1122 set(handles.TimeDimensionMenu,'Visible','off')1123 set(handles.TimeIndexValue,'Visible','off')1124 end1125 %1126 % %------------------------------------------------------------------------1127 % % --- Executes on selection change in TimeDimensionMenu.1128 % function TimeDimensionMenu_Callback(hObject, eventdata, handles)1129 % %------------------------------------------------------------------------1130 % index=get(handles.TimeDimensionMenu,'Value');1131 % DimList=get(handles.TimeDimensionMenu,'String');1132 % DimName=DimList{index};1133 % Field=get(handles.get_field,'UserData');1134 % DimIndex=find(strcmp(DimName,Field.ListDimName),1);1135 % ref_index=round(Field.DimValue(DimIndex)/2);1136 % set(handles.TimeIndexValue,'String',num2str(ref_index))1137 % scalar_Callback(hObject, eventdata, handles)1138 % vector_x_Callback(hObject, eventdata, handles)% update menus of coordinates (remove time)1139 % % look for a corresponding time variable and value1140 % time_test=zeros(size(Field.VarDimName));1141 % for ilist=1:numel(Field.VarDimName)1142 % if isequal(Field.VarDimName{ilist},{DimName})1143 % time_test(ilist)=1;1144 % end1145 % end1146 % ListVariable=Field.ListVarName(time_test==1);1147 % set(handles.TimeVariableMenu,'Value',1)1148 % if isempty(ListVariable)1149 % set(handles.TimeVariableMenu,'String',{''})1150 % set(handles.TimeVarValue,'String','')1151 % else1152 % set(handles.TimeVariableMenu,'String',ListVariable)1153 % TimeVarName=ListVariable{1};1154 % VarIndex=find(strcmp(TimeVarName,Field.ListVarName),1);%index in the list of variables1155 % inputfile=get(handles.inputfile,'String');% read the input file1156 % SubField=nc2struct(inputfile,{TimeVarName});1157 % eval(['TimeValue=SubField.' TimeVarName '(ref_index);'])1158 % set(handles.TimeVarValue,'Visible','on')1159 % set(handles.TimeVariableMenu,'Visible','on')1160 % set(handles.TimeVarValue,'String',num2str(TimeValue))1161 % end1162 %1163 %1164 % % % -----------------------------------------------------------------------1165 % % % --- Executes on button press in TimeVariable.1166 % % function TimeVariable_Callback(hObject, eventdata, handles)1167 % % % -----------------------------------------------------------------------1168 % % val=get(handles.TimeVariable,'Value');1169 % % if val1170 % % Field=get(handles.get_field,'UserData');1171 % % time_test=zeros(size(Field.VarDimName));1172 % % for ilist=1:numel(Field.VarDimName)1173 % % if isequal(numel(Field.VarDimName{ilist}),1)%select variables with a single dimension1174 % % time_test(ilist)=1;1175 % % end1176 % % end1177 % % ind_test=find(time_test);1178 % % if isempty(time_test)1179 % % set(handles.TimeVariable,'Value',0)1180 % % set(handles.TimeVariableMenu,'Visible','off')1181 % % set(handles.TimeVarValue,'Visible','off')1182 % % else1183 % % set(handles.TimeVariableMenu,'Visible','on')1184 % % set(handles.TimeVarValue,'Visible','on')1185 % % if get(handles.TimeVariableMenu,'Value')>numel(ind_test)1186 % % set(handles.TimeVariableMenu,'Value',1)1187 % % end1188 % % set(handles.TimeVariableMenu,'String',Field.ListVarName(ind_test))1189 % % TimeVariableMenu_Callback(hObject, eventdata, handles)1190 % % set(handles.TimeDimension,'Value',0) %deseselect alternative option sfor time1191 % % set(handles.TimeAttribute,'Value',0)1192 % % TimeAttribute_Callback(hObject, eventdata, handles)1193 % % end1194 % % else1195 % % set(handles.TimeVariableMenu,'Visible','off')1196 % % set(handles.TimeVarValue,'Visible','off')1197 % % end1198 %1199 % % -----------------------------------------------------------------------1200 % % --- Executes on selection change in TimeVariableMenu.1201 % function TimeVariableMenu_Callback(hObject, eventdata, handles)1202 % % -----------------------------------------------------------------------1203 % ListVar=get(handles.TimeVariableMenu,'String');1204 % index=get(handles.TimeVariableMenu,'Value');1205 % TimeVariable=ListVar{index};% name of the selected variable1206 % if isempty(TimeVariable)% case of blank selection1207 % return1208 % end1209 % Field=get(handles.get_field,'UserData'); %index of1210 % VarIndex=find(strcmp(TimeVariable,Field.ListVarName),1);%index in the list of variables1211 % DimName=Field.VarDimName{VarIndex}; % dimension corresponding to the variable1212 % set(handles.TimeDimensionMenu,'Value',1)1213 % set(handles.TimeDimensionMenu,'String',DimName)1214 % inputfile=get(handles.inputfile,'String');% read the input file1215 % SubField=nc2struct(inputfile,{TimeVariable});1216 % eval(['TimeDimension=numel(SubField.' TimeVariable ');'])1217 % ref_index=round(TimeDimension/2);1218 % eval(['TimeValue=SubField.' TimeVariable '(ref_index);'])1219 % set(handles.TimeIndexValue,'String',num2str(ref_index))1220 % set(handles.TimeVarValue,'String',num2str(TimeValue))1221 1222 1223 % --- Executes on button press in check_rgb.1224 function check_rgb_Callback(hObject, eventdata, handles)1225 1226 1227 % --- Executes when user attempts to close get_field.1228 function get_field_CloseRequestFcn(hObject, eventdata, handles)1229 if isequal(get(handles.get_field, 'waitstatus'), 'waiting')1230 % The GUI is still in UIWAIT, us UIRESUME1231 uiresume(handles.get_field);1232 else1233 % The GUI is no longer waiting, just close it1234 delete(handles.get_field);1235 end1236 1237 1238 1239 %------------------------------------------------------------------------1240 % --- Executes on selection change in SwitchVarIndexX.1241 %------------------------------------------------------------------------1242 function SwitchVarIndexX_Callback(hObject, eventdata, handles)1243 1244 %------------------------------------------------------------------------1245 % --- Executes on selection change in SwitchVarIndexTime.1246 %------------------------------------------------------------------------1247 function SwitchVarIndexTime_Callback(hObject, eventdata, handles)1248 1249 menu=get(handles.SwitchVarIndexTime,'String');1250 option=menu{get(handles.SwitchVarIndexTime,'Value')};1251 Field=get(handles.get_field,'UserData');1252 switch option1253 case 'file index'1254 set(handles.TimeVarName, 'Visible','off')1255 case 'attribute'1256 set(handles.TimeVarName, 'Visible','on')1257 time_index=[];1258 PreviousList=get(handles.TimeVarName, 'String');1259 index=[];1260 if ~isempty(PreviousList)1261 PreviousAttr=PreviousList{get(handles.TimeVarName, 'Value')};1262 index=find(strcmp(PreviousAttr,Field.ListNumAttributes));1263 end1264 if isempty(index)1265 time_index=find(~cellfun('isempty',regexp(Field.ListNumAttributes,'Time')));% index of the attributes containing the string 'Time'1266 end1267 if ~isempty(time_index)1268 set(handles.TimeVarName,'Value',time_index(1))1269 else1270 set(handles.TimeVarName,'Value',1)1271 end1272 set(handles.TimeVarName, 'String',Field.ListNumAttributes)1273 case 'variable'1274 set(handles.TimeVarName, 'Visible','on')1275 TimeVarName=Field.SingleVarName;1276 List=get(handles.TimeVarName,'String');1277 option=List{get(handles.TimeVarName,'Value')};1278 ind=find(strcmp(option,TimeVarName));1279 if isempty(ind)1280 set(handles.TimeVarName, 'Value',1);1281 else1282 set(handles.TimeVarName, 'Value',ind);1283 end1284 set(handles.TimeVarName, 'String',TimeVarName)1285 case 'dim index'1286 set(handles.TimeVarName, 'Visible','on')1287 TimeVarName=Field.SingleDimName;1288 List=get(handles.TimeVarName,'String');1289 option=List{get(handles.TimeVarName,'Value')};1290 ind=find(strcmp(option,TimeVarName));1291 if isempty(ind)1292 set(handles.TimeVarName, 'Value',1);1293 else1294 set(handles.TimeVarName, 'Value',ind);1295 end1296 set(handles.TimeVarName, 'String',TimeVarName)1297 end1298 1299 % --- Executes on selection change in FieldOption.1300 function FieldOption_Callback(hObject, eventdata, handles)1301 FieldList=get(handles.FieldOption,'String');1302 FieldOption=FieldList{get(handles.FieldOption,'Value')};1303 switch FieldOption1304 case '1D plot'1305 set(handles.Panel1Dplot,'Visible','on')1306 pos=get(handles.Panel1Dplot,'Position');1307 pos(1)=2;1308 pos_coord=get(handles.Coordinates,'Position');1309 pos(2)=pos_coord(2)-pos(4)-2;1310 set(handles.Panel1Dplot,'Position',pos)1311 set(handles.PanelScalar,'Visible','off')1312 set(handles.PanelVectors,'Visible','off')1313 set(handles.YVarName,'Visible','off')1314 % set(handles.SwitchVarIndexY,'Visible','off')1315 set(handles.Y_title,'Visible','off')1316 set(handles.ZVarName,'Visible','off')1317 % set(handles.SwitchVarIndexZ,'Visible','off')1318 set(handles.Z_title,'Visible','off')1319 case 'scalar'1320 set(handles.Panel1Dplot,'Visible','off')1321 set(handles.PanelScalar,'Visible','on')1322 set(handles.PanelVectors,'Visible','off')1323 pos=get(handles.PanelScalar,'Position');1324 pos(1)=2;1325 pos_coord=get(handles.Coordinates,'Position');1326 pos(2)=pos_coord(2)-pos(4)-2;1327 set(handles.PanelScalar,'Position',pos)1328 set(handles.YVarName,'Visible','on')1329 set(handles.Y_title,'Visible','on')1330 case 'vectors'1331 set(handles.Panel1Dplot,'Visible','off')1332 set(handles.PanelScalar,'Visible','off')1333 set(handles.PanelVectors,'Visible','on')1334 pos=get(handles.PanelVectors,'Position');1335 pos(1)=2;1336 pos_coord=get(handles.Coordinates,'Position');1337 pos(2)=pos_coord(2)-pos(4)-2;1338 set(handles.PanelVectors,'Position',pos)1339 set(handles.YVarName,'Visible','on')1340 set(handles.Y_title,'Visible','on')1341 end
Note: See TracChangeset
for help on using the changeset viewer.