Changeset 1112 for trunk/src/uvmat.m
- Timestamp:
- Jan 26, 2022, 7:37:21 PM (2 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/uvmat.m
r1110 r1112 1208 1208 1209 1209 UvData=get(handles.uvmat,'UserData');%read UvData properties stored on the uvmat interface 1210 % check=0; 1211 if isfield(UvData,'XmlData')&&isfield(UvData.XmlData{1},'GeometryCalib')&& isfield(UvData.XmlData{1}.GeometryCalib,'SliceCoord') 1212 GeometryCalib=UvData.XmlData{1}.GeometryCalib; 1213 else 1214 msgbox_uvmat('ERROR','3D geometric calibration needed before defining slices') 1215 return 1216 end 1217 SliceCoord=GeometryCalib.SliceCoord; 1218 InterfaceCoord=min(SliceCoord(:,3)); 1219 if isfield(GeometryCalib,'InterfaceCoord') 1220 InterfaceCoord=GeometryCalib.InterfaceCoord(1,3); 1221 end 1222 NbSlice=size(SliceCoord,1); 1210 Slice=[]; 1211 if isfield(UvData,'XmlData') 1212 if isfield(UvData.XmlData{1},'GeometryCalib')&& isfield(UvData.XmlData{1}.GeometryCalib,'SliceCoord') 1213 Slice=UvData.XmlData{1}.GeometryCalib;%old convention < 2022 1214 elseif isfield(UvData.XmlData{1},'Slice') 1215 Slice=UvData.XmlData{1}.Slice;% new convention ( 2022) 1216 end 1217 end 1218 % default input 1219 if ~(isfield(Slice,'SliceCoord') && size(Slice.SliceCoord,2)==3) 1220 Slice.SliceCoord=[0 0 0]; 1221 end 1222 InterfaceCoord=min(Slice.SliceCoord(:,3)); 1223 if isfield(Slice,'InterfaceCoord') 1224 InterfaceCoord=Slice.InterfaceCoord(1,3); 1225 end 1226 NbSlice=size(Slice.SliceCoord,1); 1223 1227 CheckVolumeScan=0; 1224 if isfield( GeometryCalib,'CheckVolumeScan')1225 CheckVolumeScan= GeometryCalib.CheckVolumeScan;1228 if isfield(Slice,'CheckVolumeScan') 1229 CheckVolumeScan=Slice.CheckVolumeScan; 1226 1230 end 1227 1231 RefractionIndex=1.33; 1228 1232 CheckRefraction=0;% default value of the check box refraction 1229 if isfield( GeometryCalib,'RefractionIndex')1230 RefractionIndex= GeometryCalib.RefractionIndex;1233 if isfield(Slice,'RefractionIndex') 1234 RefractionIndex=Slice.RefractionIndex; 1231 1235 CheckRefraction=1; 1232 1236 end 1233 1237 SliceAngle=[0 0 0]; 1234 if isfield( GeometryCalib,'SliceAngle')1235 SliceAngle= GeometryCalib.SliceAngle;1238 if isfield(Slice,'SliceAngle') 1239 SliceAngle=Slice.SliceAngle; 1236 1240 end 1237 1241 … … 1244 1248 Bottom=ScreenSize(4)-Height-40; %put fig at top right 1245 1249 hfig=findobj(allchild(0),'Tag','set_slice'); 1246 if ~isempty(hfig),delete(hfig), end ;%delete existing version of the GUI1247 hfig=figure('name','set_slices','tag','set_slice','MenuBar','none','NumberTitle','off','Units','pixels','Position',[Left,Bottom,Width,Height],'UserData', GeometryCalib);1250 if ~isempty(hfig),delete(hfig), end %delete existing version of the GUI 1251 hfig=figure('name','set_slices','tag','set_slice','MenuBar','none','NumberTitle','off','Units','pixels','Position',[Left,Bottom,Width,Height],'UserData',Slice); 1248 1252 BackgroundColor=get(hfig,'Color'); 1249 1253 hh=0.14; % box height (relative) … … 1262 1266 'String','Z','FontUnits','points','FontSize',12,'FontWeight','bold','ForegroundColor','blue','HorizontalAlignment','right');%title 1263 1267 uicontrol('Style','edit','Units','normalized', 'Position', [2*ii+ww 0.95-2*ii-hh ww hh],'tag','num_Z_1','BackgroundColor',[1 1 1],... 1264 'String',num2str(Slice Coord(1,3)),'FontUnits','points','FontSize',12,'FontWeight','bold','TooltipString','''num_Z_1'': z position of first slice');%edit box1268 'String',num2str(Slice.SliceCoord(1,3)),'FontUnits','points','FontSize',12,'FontWeight','bold','TooltipString','''num_Z_1'': z position of first slice');%edit box 1265 1269 uicontrol('Style','edit','Units','normalized', 'Position', [3*ii+2*ww 0.95-2*ii-hh ww hh],'tag','num_Z_2','BackgroundColor',[1 1 1],... 1266 'String',num2str(Slice Coord(end,3)),'FontUnits','points','FontSize',12,'FontWeight','bold','TooltipString','''num_Z_2'': z position of last slice');%edit box1270 'String',num2str(Slice.SliceCoord(end,3)),'FontUnits','points','FontSize',12,'FontWeight','bold','TooltipString','''num_Z_2'': z position of last slice');%edit box 1267 1271 uicontrol('Style','edit','Units','normalized', 'Position', [4*ii+3*ww 0.95-2*ii-hh ww hh],'tag','num_H','BackgroundColor',[1 1 1],... 1268 1272 'String',num2str(InterfaceCoord),'Visible','off','FontUnits','points','FontSize',12,'FontWeight','bold','TooltipString','''num_H'': z position of the water surface (=Z_1 in air)');%edit box … … 1291 1295 1292 1296 uicontrol('Style','edit','Units','normalized', 'Position', [3*ii+ww 0.95-5*ii-4.2*hh ww hh],'tag','num_SliceCoord_1','BackgroundColor',[1 1 1],... 1293 'String',num2str(Slice Coord(1)),'FontUnits','points','FontSize',12,'FontWeight','bold','TooltipString','''num_SliceCoord_1'':x position of the tild origin');%edit box1297 'String',num2str(Slice.SliceCoord(1)),'FontUnits','points','FontSize',12,'FontWeight','bold','TooltipString','''num_SliceCoord_1'':x position of the tild origin');%edit box 1294 1298 uicontrol('Style','edit','Units','normalized', 'Position', [3*ii+ww 0.95-6*ii-5.2*hh ww hh],'tag','num_SliceCoord_2','BackgroundColor',[1 1 1],... 1295 'String',num2str(Slice Coord(2)),'FontUnits','points','FontSize',12,'FontWeight','bold','TooltipString','''num_SliceCoord_2'':y position of the tild origin');%edit box1299 'String',num2str(Slice.SliceCoord(2)),'FontUnits','points','FontSize',12,'FontWeight','bold','TooltipString','''num_SliceCoord_2'':y position of the tild origin');%edit box 1296 1300 1297 1301 uicontrol('Style','text','Units','normalized', 'Position', [ii 0.95-5*ii-4*hh 1.3*ww hh/2],'BackgroundColor',BackgroundColor,'Tag','Angle_title_1',... … … 1349 1353 [RootPath,SubDir,RootFile,tild,tild,tild,tild,FileExt]=fileparts_uvmat(FileName); 1350 1354 XmlFile=find_imadoc(RootPath,SubDir,RootFile,FileExt);%find name of the relevant xml file 1351 [s,errormsg]=imadoc2struct(XmlFile,'GeometryCalib');%read the xml file1352 if~isempty(errormsg)1353 msgbox_uvmat('ERROR',errormsg)1354 return1355 end1356 GeometryCalib=s.GeometryCalib;% get thegeometric calibration data1355 % [s,errormsg]=imadoc2struct(XmlFile,'Slice');%read the xml file 1356 % if~isempty(errormsg) 1357 % msgbox_uvmat('ERROR',errormsg) 1358 % return 1359 % end 1360 % Slice=s.Slice;% get thegeometric calibration data 1357 1361 1358 1362 %% read the content of the GUI set_slice … … 1361 1365 Z_plane=str2num(get(hZ,'String'));% set of Z positions explicitly entered as a Matlab vector 1362 1366 SliceData=read_GUI(hset_slice); 1363 GeometryCalib.NbSlice=SliceData.NbSlice;1364 GeometryCalib.CheckVolumeScan=SliceData.CheckVolumeScan;1367 Slice.NbSlice=SliceData.NbSlice; 1368 Slice.CheckVolumeScan=SliceData.CheckVolumeScan; 1365 1369 if numel(Z_plane)<=2 1366 1370 Z_plane=linspace(SliceData.Z(1),SliceData.Z(2),SliceData.NbSlice); … … 1368 1372 set(hZ,'String',num2str(Z_plane))% restitute the display qfter reqding by read_GUI 1369 1373 end 1370 GeometryCalib.SliceCoord=Z_plane'*[0 0 1];1371 GeometryCalib.SliceCoord(:,1)=SliceData.SliceCoord(1);1372 GeometryCalib.SliceCoord(:,2)=SliceData.SliceCoord(2);1373 GeometryCalib.SliceAngle=zeros(GeometryCalib.NbSlice,3);1374 Slice.SliceCoord=Z_plane'*[0 0 1]; 1375 Slice.SliceCoord(:,1)=SliceData.SliceCoord(1); 1376 Slice.SliceCoord(:,2)=SliceData.SliceCoord(2); 1377 Slice.SliceAngle=zeros(Slice.NbSlice,3); 1374 1378 Angle_1=linspace(SliceData.SliceAngle_1(1),SliceData.SliceAngle_1(2),SliceData.NbSlice); 1375 1379 Angle_2=linspace(SliceData.SliceAngle_2(1),SliceData.SliceAngle_2(2),SliceData.NbSlice); 1376 GeometryCalib.SliceAngle(:,1)=Angle_1';%rotation angle around x axis1377 GeometryCalib.SliceAngle(:,2)=Angle_2';%rotation angle around y axis1378 GeometryCalib.SliceAngle(:,3)=0;1380 Slice.SliceAngle(:,1)=Angle_1';%rotation angle around x axis 1381 Slice.SliceAngle(:,2)=Angle_2';%rotation angle around y axis 1382 Slice.SliceAngle(:,3)=0; 1379 1383 if SliceData.CheckRefraction 1380 GeometryCalib.InterfaceCoord=[0 0 SliceData.H];1381 GeometryCalib.RefractionIndex=SliceData.RefractionIndex;1382 elseif isfield( GeometryCalib,'RefractionIndex')1383 GeometryCalib=rmfield(GeometryCalib,'RefractionIndex');1384 GeometryCalib=rmfield(GeometryCalib,'InterfaceCoord');1384 Slice.InterfaceCoord=[0 0 SliceData.H]; 1385 Slice.RefractionIndex=SliceData.RefractionIndex; 1386 elseif isfield(Slice,'RefractionIndex') 1387 Slice=rmfield(Slice,'RefractionIndex'); 1388 Slice=rmfield(Slice,'InterfaceCoord'); 1385 1389 end 1386 1390 … … 1430 1434 check_update=0; 1431 1435 end 1432 errormsg=update_imadoc( GeometryCalib,XmlName,'GeometryCalib');% introduce the calibration data in the xml file1436 errormsg=update_imadoc(Slice,XmlName,'Slice');% introduce the calibration data in the xml file 1433 1437 if ~strcmp(errormsg,'') 1434 1438 msgbox_uvmat('ERROR',errormsg); … … 1446 1450 1447 1451 %% store the result in the xml file used for calibration 1448 errormsg=update_imadoc( GeometryCalib,XmlFile,'GeometryCalib');% introduce the calibration data in the xml file1452 errormsg=update_imadoc(Slice,XmlFile,'Slice');% introduce the calibration data in the xml file 1449 1453 if strcmp(errormsg,'') 1450 1454 msgbox_uvmat('CONFIRMATION',['slice positions saved in ' XmlFile]); … … 1925 1929 pos(:,3)=pos(:,3)+Calib.SliceCoord(3); 1926 1930 end 1927 [X,Y]=px_XYZ(Calib, pos(:,1),pos(:,2),pos(:,3));1931 [X,Y]=px_XYZ(Calib,Slice,pos(:,1),pos(:,2),pos(:,3)); 1928 1932 end 1929 1933 flagobj=~inpolygon(Xi,Yi,X',Y');%=0 inside the polygon, 1 outside … … 2479 2483 drawnow 2480 2484 if isfield(XmlDataRead, 'GeometryCalib') && ~isempty(XmlDataRead.GeometryCalib) 2481 XmlData.GeometryCalib=XmlDataRead.GeometryCalib; 2482 if isfield(XmlData.GeometryCalib,'CheckVolumeScan') && isequal(XmlData.GeometryCalib.CheckVolumeScan,1) 2485 XmlData.GeometryCalib=XmlDataRead.GeometryCalib; 2486 end 2487 XmlData.Slice=XmlData.GeometryCalib;%default 2488 if isfield(XmlDataRead, 'Slice') && ~isempty(XmlDataRead.Slice) 2489 XmlData.Slice=XmlDataRead.Slice; 2490 % check whether the GUI geometry_calib is opened 2491 % hgeometry_calib=findobj('tag','geometry_calib'); 2492 % if ~isempty(hgeometry_calib) % check whether the display of the GUI geometry_calib is consistent with the current calib param 2493 % GUserData=get(hgeometry_calib,'UserData'); 2494 % if ~(isfield(GUserData,'XmlInputFile') && strcmp(GUserData.XmlInputFile,XmlFileName)) 2495 % answer=msgbox_uvmat('INPUT_Y-N','refresh the display of the GUI geometry_calib with the new input data?'); 2496 % if strcmp(answer,'Yes') 2497 % geometry_calib(XmlFileName);%diplay the new calibration points and parameters in geometry_calib 2498 % end 2499 % end 2500 % end 2501 end 2502 if isfield(XmlData.Slice,'CheckVolumeScan') && isequal(XmlData.Slice.CheckVolumeScan,1) 2483 2503 set (handles.slices,'String','volume') 2484 2504 end 2485 % check whether the GUI geometry_calib is opened2486 hgeometry_calib=findobj('tag','geometry_calib');2487 if ~isempty(hgeometry_calib) % check whether the display of the GUI geometry_calib is consistent with the current calib param2488 GUserData=get(hgeometry_calib,'UserData');2489 if ~(isfield(GUserData,'XmlInputFile') && strcmp(GUserData.XmlInputFile,XmlFileName))2490 answer=msgbox_uvmat('INPUT_Y-N','refresh the display of the GUI geometry_calib with the new input data?');2491 if strcmp(answer,'Yes')2492 geometry_calib(XmlFileName);%diplay the new calibration points and parameters in geometry_calib2493 end2494 end2495 end2496 end2497 2505 if isfield(XmlDataRead, 'LIFCalib') 2498 2506 XmlData.LIFCalib=XmlDataRead.LIFCalib; … … 2571 2579 set(handles.TransformName,'Value',3); % phys transform by default if fixedLimits is off 2572 2580 end 2573 if isfield( GeometryCalib,'SliceCoord')2574 siz=size( GeometryCalib.SliceCoord);2581 if isfield(XmlData.Slice,'SliceCoord') 2582 siz=size(XmlData.Slice.SliceCoord); 2575 2583 if siz(1)>1 2576 2584 NbSlice=siz(1); … … 2578 2586 set(handles.slices,'Value',1) 2579 2587 end 2580 if isfield( GeometryCalib,'CheckVolumeScan') && isequal(GeometryCalib.CheckVolumeScan,1)2588 if isfield(XmlData.Slice,'CheckVolumeScan') && isequal(XmlData.Slice.CheckVolumeScan,1) 2581 2589 set(handles.num_NbSlice,'Visible','off') 2582 2590 else … … 5183 5191 Y=ObjectData.Coord(:,2); 5184 5192 if testphys 5185 [X,Y]=px_XYZ(Calib, X,Y,0);% to generalise with 3D cases5193 [X,Y]=px_XYZ(Calib,[],X,Y,0);% to generalise with 3D cases 5186 5194 end 5187 5195 flagobj=~inpolygon(Xi,Yi,X',Y');%=0 inside the polygon, 1 outside
Note: See TracChangeset
for help on using the changeset viewer.