Ignore:
Timestamp:
Mar 29, 2010, 6:34:55 PM (11 years ago)
Author:
sommeria
Message:

civ3D updated: introduction of image size
imadoc2struct: reding of image size from the xml file
set_object, view_field and related functions: improvement of projection object editing
mouse: possibility of adjusting the calibrations points with the mouse

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/geometry_calib.m

    r69 r71  
    7878% Update handles structure
    7979guidata(hObject, handles);
    80 %movegui(hObject,'east');% position the GUI ton the right of the screen
    81 % if exist('handles_uvmat','var') %& isfield(data,'ParentButton')
    82       set(hObject,'DeleteFcn',{@closefcn})%
    83 % end
     80set(hObject,'DeleteFcn',{@closefcn})%
     81
    8482%set the position of the interface
    8583if exist('pos','var')& length(pos)>2
     
    10098    end   
    10199end
    102 set(handles.ListCoord,'String',{'...'})
     100set(handles.ListCoord,'String',{'......'})
    103101if exist(inputxml,'file')
    104102    loadfile(handles,inputxml)% load the point coordiantes existing in the xml file
     
    106104
    107105set(handles.ListCoord,'KeyPressFcn',{@key_press_fcn,handles})%set keyboard action function
    108 %set(hObject,'KeyPressFcn',{'keyboard_callback',handles})%set keyboard action function on uvmat interface when geometry_calib is on top
    109 %htable=uitable(10,5)
    110 %set(htable,'ColumnNames',{'x','y','z','X(pixels)','Y(pixels)'})
     106
    111107
    112108%------------------------------------------------------------------------
     
    214210    end
    215211end
    216 CoordCell=[CoordCell;{' ',' ',' ',' ',' '}];
     212% CoordCell=[CoordCell;{' ',' ',' ',' ',' '}];
    217213Tabchar=cell2tab(CoordCell,'    |    ');%transform cells into table ready for display
     214Tabchar=[Tabchar;{'......'}];
    218215set(handles.ListCoord,'Value',1)
    219216set(handles.ListCoord,'String',Tabchar)
     217MenuPlot_Callback(handles.geometry_calib, [], handles)
    220218
    221219%
     
    227225if ~isempty(huvmat)
    228226    handles=guidata(huvmat);
    229     set(handles.MenuTools,'enable','on')
     227    set(handles.MenuMask,'enable','on')
     228    set(handles.MenuGrid,'enable','on')
    230229    set(handles.MenuObject,'enable','on')
    231230    set(handles.MenuEdit,'enable','on')
     
    298297set(hhuvmat.FixedLimits,'BackgroundColor',[0.7 0.7 0.7])
    299298uvmat('RootPath_Callback',hObject,eventdata,hhuvmat); %file input with xml reading  in uvmat
    300 
     299MenuPlot_Callback(hObject, eventdata, handles)
    301300figure(handles.geometry_calib)
    302301
     
    450449% est_kc=[1;0;0;0;0];
    451450est_dist=[1;0;0;0;0];
    452 run('D:\PROG\MATLAB\TOOLBOX_calib\go_calib_optim');
     451run(fullfile(path_UVMAT,'TOOLBOX_calib','go_calib_optim'));
    453452
    454453GeometryCalib.CalibrationType='tsai';
     
    497496    sparam=convert(t);
    498497end
    499 if ~isfield(sparam,'GeometryCalib_exe')
    500     msgbox_uvmat('ERROR',['calibration program <GeometryCalib_exe> undefined in parameter file ' xmlfile])
     498if ~isfield(sparam,'GeometryCalibBin')
     499    msgbox_uvmat('ERROR',['calibration program <GeometryCalibBin> undefined in parameter file ' xmlfile])
    501500    return
    502501end
    503 Tsai_exe=sparam.GeometryCalib_exe;
     502Tsai_exe=sparam.GeometryCalibBin;
    504503if ~exist(Tsai_exe,'file')%the binary is defined in /bin, default setting
    505504     Tsai_exe=fullfile(path_UVMAT,Tsai_exe);
    506505end
    507506if ~exist(Tsai_exe,'file')
    508     msgbox_uvmat('ERROR',['calibration program ' sparam.GeometryCalib_exe ' defined in PARAM.xml does not exist'])
     507    msgbox_uvmat('ERROR',['calibration program ' sparam.GeometryCalibBin ' defined in PARAM.xml does not exist'])
    509508    return
    510509end
     
    643642ListCoord_Callback(hObject, eventdata, handles)
    644643MenuPlot_Callback(hObject, eventdata, handles)
     644
    645645%------------------------------------------------------------------------
    646646% --- Executes on selection change in ListCoord.
    647647function ListCoord_Callback(hObject, eventdata, handles)
    648648%------------------------------------------------------------------------
     649huvmat=findobj(allchild(0),'Name','uvmat');%find the current uvmat interface handle
     650hplot=findobj(huvmat,'Tag','axes3');%main plotting axis of uvmat
     651hhh=findobj(hplot,'Tag','calib_marker');
    649652Coord_cell=get(handles.ListCoord,'String');
    650653val=get(handles.ListCoord,'Value');
    651 if length(Coord_cell)>0
    652     coord_str=Coord_cell{val};
    653     k=findstr('|',coord_str);
    654     if isempty(k)
    655         return
    656     end
    657     set(handles.XObject,'String',coord_str(1:k(1)-5))
    658     set(handles.YObject,'String',coord_str(k(1)+5:k(2)-5))
    659     set(handles.ZObject,'String',coord_str(k(2)+5:k(3)-5))
    660     set(handles.XImage,'String',coord_str(k(3)+5:k(4)-5))
    661     set(handles.YImage,'String',coord_str(k(4)+5:end))
    662     huvmat=findobj(allchild(0),'Name','uvmat');%find the current uvmat interface handle
    663     hplot=findobj(huvmat,'Tag','axes3');%main plotting axis of uvmat
    664     h_menu_coord=findobj(huvmat,'Tag','menu_coord');
    665     menu=get(h_menu_coord,'String');
    666     choice=get(h_menu_coord,'Value');
    667     if iscell(menu)
    668         option=menu{choice};
    669     else
    670         option='px'; %default
    671     end
    672     if isequal(option,'phys')
    673         XCoord=str2num(coord_str(1:k(1)-5));
    674         YCoord=str2num(coord_str(k(1)+5:k(2)-5));
    675     elseif isequal(option,'px')|| isequal(option,'')
    676         XCoord=str2num(coord_str(k(3)+5:k(4)-5));
    677         YCoord=str2num(coord_str(k(4)+5:end));
    678     else
    679         msgbox_uvmat('ERROR','the choice in menu_coord of uvmat must be px or phys ')
    680     end
    681     huvmat=findobj(allchild(0),'Name','uvmat');%find the current uvmat interface handle
    682     hplot=findobj(huvmat,'Tag','axes3');%main plotting axis of uvmat
    683     hhh=findobj(hplot,'Tag','calib_marker');
    684     if isempty(hhh)
    685         axes(hplot)
    686         line(XCoord,YCoord,'Color','m','Tag','calib_marker','LineStyle','.','Marker','o','MarkerSize',20);
    687     else
    688         set(hhh,'XData',XCoord)
    689         set(hhh,'YData',YCoord)
    690     end
     654coord_str=Coord_cell{val};
     655k=findstr('|',coord_str);
     656if isempty(k)%last line '.....' selected
     657    if ~isempty(hhh)
     658        delete(hhh)%delete the circle marker
     659    end
     660    return
     661end
     662%fill the edit boxex
     663set(handles.XObject,'String',coord_str(1:k(1)-5))
     664set(handles.YObject,'String',coord_str(k(1)+5:k(2)-5))
     665set(handles.ZObject,'String',coord_str(k(2)+5:k(3)-5))
     666set(handles.XImage,'String',coord_str(k(3)+5:k(4)-5))
     667set(handles.YImage,'String',coord_str(k(4)+5:end))
     668h_menu_coord=findobj(huvmat,'Tag','transform_fct');
     669menu=get(h_menu_coord,'String');
     670choice=get(h_menu_coord,'Value');
     671if iscell(menu)
     672    option=menu{choice};
     673else
     674    option='px'; %default
     675end
     676if isequal(option,'phys')
     677    XCoord=str2num(coord_str(1:k(1)-5));
     678    YCoord=str2num(coord_str(k(1)+5:k(2)-5));
     679elseif isequal(option,'px')|| isequal(option,'')
     680    XCoord=str2num(coord_str(k(3)+5:k(4)-5));
     681    YCoord=str2num(coord_str(k(4)+5:end));
     682else
     683    msgbox_uvmat('ERROR','the choice in menu_coord of uvmat must be px or phys ')
     684end
     685if isempty(XCoord)||isempty(YCoord)
     686     if ~isempty(hhh)
     687        delete(hhh)%delete the circle marker
     688    end
     689    return
     690end
     691xlim=get(hplot,'XLim');
     692ylim=get(hplot,'YLim');
     693ind_range=max(abs(xlim(2)-xlim(1)),abs(ylim(end)-ylim(1)))/20;%defines the size of the circle marker
     694if isempty(hhh)
     695    axes(hplot)
     696    rectangle('Curvature',[1 1],...
     697              'Position',[XCoord-ind_range/2 YCoord-ind_range/2 ind_range ind_range],'EdgeColor','m',...
     698              'LineStyle','-','Tag','calib_marker');
     699else
     700    set(hhh,'Position',[XCoord-ind_range/2 YCoord-ind_range/2 ind_range ind_range])
    691701end
    692702
     
    744754Data.CoordType='px';
    745755plot_field(Data)
    746  
    747756
    748757%------------------------------------------------------------------------
     
    750759function key_press_fcn(hObject,eventdata,handles)
    751760%------------------------------------------------------------------------
    752 hh=get(hObject,'parent');
    753 xx=double(get(hh,'CurrentCharacter')); %get the keyboard character
    754 
     761xx=double(get(handles.geometry_calib,'CurrentCharacter')); %get the keyboard character
    755762if ismember(xx,[8 127])%backspace or delete
    756763    Coord_cell=get(handles.ListCoord,'String');
    757     data=read_geometry_calib(Coord_cell);
    758     Coord=[]; %default
    759     if isfield(data,'Coord')
    760         Coord=data.Coord;
    761     end
    762764    val=get(handles.ListCoord,'Value');
    763     Coord(val,:)=[];%suppress the selected item in the list
    764     CoordCell={};
    765     for iline=1:size(Coord,1)
    766         for j=1:5
    767             CoordCell{iline,j}=num2str(Coord(iline,j),4);
    768         end
    769     end
    770     Tabchar=cell2tab(CoordCell,'    |    ');%transform cells into table ready for display
    771     val=min(size(Coord,1),val);
    772     set(handles.ListCoord,'Value',max(val,1))
    773     set(handles.ListCoord,'String',Tabchar) 
    774     ListCoord_Callback(hObject, eventdata, handles)
    775     MenuPlot_Callback(hObject,eventdata,handles)
    776 end
    777 
    778 %------------------------------------------------------------------------
    779 % --- Executes on button press in append_point.
    780 function append_point_Callback(hObject, eventdata, handles)
    781 %------------------------------------------------------------------------
    782        Coord=get(handles.ListCoord,'String');
    783        val=length(Coord);
    784        if val>=1 & isequal(Coord{val},'')
    785             val=val-1; %do not take into account blank
    786        end
    787        Coord{val+1}='';
    788        set(handles.ListCoord,'String',Coord)
    789        set(handles.ListCoord,'Value',val+1)
     765    if val<numel(Coord_cell) % the last element '...' has not been selected
     766        Coord_cell(val)=[];%remove the selected line
     767        set(handles.ListCoord,'String',Coord_cell)         
     768        ListCoord_Callback(hObject, eventdata, handles)
     769        MenuPlot_Callback(hObject,eventdata,handles)
     770    end
     771end
     772
     773% %------------------------------------------------------------------------
     774% % --- Executes on button press in append_point.
     775% function append_point_Callback(hObject, eventdata, handles)
     776% %------------------------------------------------------------------------
     777%        Coord=get(handles.ListCoord,'String');
     778%        val=length(Coord);
     779%        if val>=1 & isequal(Coord{val},'')
     780%             val=val-1; %do not take into account blank
     781%        end
     782%        Coord{val+1}='';
     783%        set(handles.ListCoord,'String',Coord)
     784%        set(handles.ListCoord,'Value',val+1)
    790785
    791786%------------------------------------------------------------------------
     
    836831ObjectData=read_geometry_calib(Coord_cell);
    837832%ObjectData=read_geometry_calib(handles);%read the interface input parameters defining the object
    838 if isequal(option,'phys')
    839     ObjectData.Coord=ObjectData.Coord(:,[1:3]);
    840 elseif isequal(option,'px')||isequal(option,'')
    841     ObjectData.Coord=ObjectData.Coord(:,[4:5]);
    842 else
    843     msgbox_uvmat('ERROR','the choice in menu_coord of uvmat must be px or phys ')
     833if ~isempty(ObjectData.Coord)
     834    if isequal(option,'phys')
     835        ObjectData.Coord=ObjectData.Coord(:,[1:3]);
     836    elseif isequal(option,'px')||isequal(option,'')
     837        ObjectData.Coord=ObjectData.Coord(:,[4:5]);
     838    else
     839        msgbox_uvmat('ERROR','the choice in menu_coord of uvmat must be '''', px or phys ')
     840    end
    844841end
    845842axes(hhuvmat.axes3)
    846843hh=findobj('Tag','calib_points');
    847 if isempty(hh)
     844if  ~isempty(ObjectData.Coord) && isempty(hh)
    848845    hh=line(ObjectData.Coord(:,1),ObjectData.Coord(:,2),'Color','m','Tag','calib_points','LineStyle','.','Marker','+');
     846elseif isempty(ObjectData.Coord)%empty list of points, suppress the plot
     847    delete(hh)
    849848else
    850849    set(hh,'XData',ObjectData.Coord(:,1))
     
    874873    Tinput=CalibData.grid;
    875874end
    876 [T,CalibData.grid]=create_grid(grid_input);%display the GUI create_grid
     875[T,CalibData.grid]=create_grid(Tinput);%display the GUI create_grid
    877876set(handles.geometry_calib,'UserData',CalibData)
    878877
    879878%grid in phys space
    880 Coord_cell=get(handles.ListCoord,'String');
    881 data=read_geometry_calib(Coord_cell);
    882 nbpoints=size(data.Coord,1); %nbre of calibration points
    883 data.Coord(1:size(T,1),1:3)=T;%update the existing list of phys coordinates from the GUI create_grid
    884 for i=1:nbpoints
    885    for j=1:5
     879Coord=get(handles.ListCoord,'String');
     880val=get(handles.ListCoord,'Value');
     881data=read_geometry_calib(Coord);
     882%nbpoints=size(data.Coord,1); %nbre of calibration points
     883data.Coord(val:val+size(T,1)-1,1:3)=T(end:-1:1,:);%update the existing list of phys coordinates from the GUI create_grid
     884% for i=1:nbpoints
     885%    for j=1:5
     886%           Coord{i,j}=num2str(data.Coord(i,j),4);%display coordiantes with 4 digits
     887%    end
     888% end
     889%update the phys coordinates starting from the selected point (down in the
     890Coord(end,:)=[]; %remove last string '.....'
     891for i=1:size(data.Coord,1)
     892    for j=1:5
    886893          Coord{i,j}=num2str(data.Coord(i,j),4);%display coordiantes with 4 digits
    887    end
    888 end
    889 for i=nbpoints+1:size(data.Coord,1)
    890     for j=1:3
    891           Coord{i,j}=num2str(data.Coord(i,j),4);%display coordiantes with 4 digits
    892     end
    893     for j=4:5
    894           Coord{i,j}='';%display coordiantes with 4 digi
    895     end
    896 end
    897 
     894    end
     895end
    898896
    899897%size(data.Coord,1)
    900898Tabchar=cell2tab(Coord,'    |    ');
    901 set(handles.ListCoord,'Value',1)
     899Tabchar=[Tabchar ;{'......'}];
    902900set(handles.ListCoord,'String',Tabchar)
    903901
    904 %-----------------------------------------------------------------------
    905 function MenuTranslatePoints_Callback(hObject, eventdata, handles)
    906 %-----------------------------------------------------------------------
    907 %hcalib=get(handles.calib_type,'parent');%handles of the GUI geometry_calib
    908 CalibData=get(handles.geometry_calib,'UserData');
    909 Tinput=[];%default
    910 if isfield(CalibData,'translate')
    911     Tinput=CalibData.translate;
    912 end
    913 T=translate_points(Tinput);%display translate_points GUI and get shift parameters
    914 CalibData.translate=T;
    915 set(handles.geometry_calib,'UserData',CalibData)
    916 %translation
    917 Coord_cell=get(handles.ListCoord,'String');
    918 data=read_geometry_calib(Coord_cell);
    919 data.Coord(:,1)=T(1)+data.Coord(:,1);
    920 data.Coord(:,2)=T(2)+data.Coord(:,2);
    921 data.Coord(:,3)=T(3)+data.Coord(:,3);
    922 data.Coord(:,[4 5])=data.Coord(:,[4 5]);
    923 for i=1:size(data.Coord,1)
    924     for j=1:5
    925           Coord{i,j}=num2str(data.Coord(i,j),4);%phys x,y,z
    926    end
    927 end
    928 Tabchar=cell2tab(Coord,'    |    ');
    929 set(handles.ListCoord,'Value',1)
    930 set(handles.ListCoord,'String',Tabchar)
    931 
    932 
    933 % --------------------------------------------------------------------
    934 function MenuRotatePoints_Callback(hObject, eventdata, handles)
    935 %hcalib=get(handles.calib_type,'parent');%handles of the GUI geometry_calib
    936 CalibData=get(handles.geometry_calib,'UserData');
    937 Tinput=[];%default
    938 if isfield(CalibData,'rotate')
    939     Tinput=CalibData.rotate;
    940 end
    941 T=rotate_points(Tinput);%display translate_points GUI and get shift parameters
    942 CalibData.rotate=T;
    943 set(handles.geometry_calib,'UserData',CalibData)
    944 %-----------------------------------------------------
    945 %rotation
    946 Phi=T(1);
    947 O_x=0;%default
    948 O_y=0;%default
    949 if numel(T)>=2
    950     O_x=T(2);%default
    951 end
    952 if numel(T)>=3
    953     O_y=T(3);%default
    954 end
    955 Coord_cell=get(handles.ListCoord,'String');
    956 data=read_geometry_calib(Coord_cell);
    957 r1=cos(pi*Phi/180);
    958 r2=-sin(pi*Phi/180);
    959 r3=sin(pi*Phi/180);
    960 r4=cos(pi*Phi/180);
    961 x=data.Coord(:,1)-O_x;
    962 y=data.Coord(:,2)-O_y;
    963 data.Coord(:,1)=r1*x+r2*y;
    964 data.Coord(:,2)=r3*x+r4*y;
    965 % data.Coord(:,[4 5])=data.Coord(:,[4 5]);
    966 for i=1:size(data.Coord,1)
    967     for j=1:5
    968           Coord{i,j}=num2str(data.Coord(i,j),4);%phys x,y,z
    969    end
    970 end
    971 Tabchar=cell2tab(Coord,'    |    ');
    972 set(handles.ListCoord,'Value',1)
    973 set(handles.ListCoord,'String',Tabchar)
    974 % --------------------------------------------------------------------
     902% -----------------------------------------------------------------------
     903% --- automatic grid dectection from local maxima of the images
    975904function MenuDetectGrid_Callback(hObject, eventdata, handles)
    976 
     905%------------------------------------------------------------------------
    977906CalibData=get(handles.geometry_calib,'UserData');
    978907grid_input=[];%default
     
    989918if nbpoints~=4
    990919    msgbox_uvmat('ERROR','four points must be selected by the mouse, beginning by the new x axis, to delimitate the phs grid area')
    991 end
    992 corners_X=(data.Coord(end-3:end,4)); %pixel absissa of the four corners
    993 corners_Y=(data.Coord(end-3:end,5));
    994 
    995 %reorder the last two points if needed
     920    return
     921end
     922corners_X=(data.Coord(end:-1:end-3,4)); %pixel absissa of the four corners
     923corners_Y=(data.Coord(end:-1:end-3,5));
     924
     925%reorder the last two points (the two first in the list) if needed
    996926angles=angle((corners_X-corners_X(1))+i*(corners_Y-corners_Y(1)));
    997927if abs(angles(4)-angles(2))>abs(angles(3)-angles(2))
     
    1015945a_X1=XY_mat\corners_X; %transformation matrix for X
    1016946x1=XY_mat*a_X1;%reconstruction
    1017 err_X1=max(abs(x1-corners_X))%error
     947err_X1=max(abs(x1-corners_X));%error
    1018948a_Y1=XY_mat\corners_Y;%transformation matrix for X
    1019949y1=XY_mat*a_Y1;
    1020 err_Y1=max(abs(y1-corners_Y))%error
     950err_Y1=max(abs(y1-corners_Y));%error
    1021951GeometryCalib.CalibrationType='linear';
    1022952GeometryCalib.CoordUnit=[];% default value, to be updated by the calling function
     
    10721002     Coord{ipoint,5}=num2str(Ypx(ipoint),4);%display coordiantes with 4 digi
    10731003end
    1074 Tabchar=cell2tab(Coord,'    |    ');
     1004Tabchar=cell2tab(Coord(end:-1:1,:),'    |    ');
     1005Tabchar=[Tabchar ;{'......'}];
    10751006set(handles.ListCoord,'Value',1)
    10761007set(handles.ListCoord,'String',Tabchar)
    10771008MenuPlot_Callback(hObject, eventdata, handles)
     1009
     1010%-----------------------------------------------------------------------
     1011function MenuTranslatePoints_Callback(hObject, eventdata, handles)
     1012%-----------------------------------------------------------------------
     1013%hcalib=get(handles.calib_type,'parent');%handles of the GUI geometry_calib
     1014CalibData=get(handles.geometry_calib,'UserData');
     1015Tinput=[];%default
     1016if isfield(CalibData,'translate')
     1017    Tinput=CalibData.translate;
     1018end
     1019T=translate_points(Tinput);%display translate_points GUI and get shift parameters
     1020CalibData.translate=T;
     1021set(handles.geometry_calib,'UserData',CalibData)
     1022%translation
     1023Coord_cell=get(handles.ListCoord,'String');
     1024data=read_geometry_calib(Coord_cell);
     1025data.Coord(:,1)=T(1)+data.Coord(:,1);
     1026data.Coord(:,2)=T(2)+data.Coord(:,2);
     1027data.Coord(:,3)=T(3)+data.Coord(:,3);
     1028data.Coord(:,[4 5])=data.Coord(:,[4 5]);
     1029for i=1:size(data.Coord,1)
     1030    for j=1:5
     1031          Coord{i,j}=num2str(data.Coord(i,j),4);%phys x,y,z
     1032   end
     1033end
     1034Tabchar=cell2tab(Coord,'    |    ');
     1035Tabchar=[Tabchar {'.....'}];
     1036%set(handles.ListCoord,'Value',1)
     1037set(handles.ListCoord,'String',Tabchar)
     1038
     1039
     1040% --------------------------------------------------------------------
     1041function MenuRotatePoints_Callback(hObject, eventdata, handles)
     1042%hcalib=get(handles.calib_type,'parent');%handles of the GUI geometry_calib
     1043CalibData=get(handles.geometry_calib,'UserData');
     1044Tinput=[];%default
     1045if isfield(CalibData,'rotate')
     1046    Tinput=CalibData.rotate;
     1047end
     1048T=rotate_points(Tinput);%display translate_points GUI and get shift parameters
     1049CalibData.rotate=T;
     1050set(handles.geometry_calib,'UserData',CalibData)
     1051%-----------------------------------------------------
     1052%rotation
     1053Phi=T(1);
     1054O_x=0;%default
     1055O_y=0;%default
     1056if numel(T)>=2
     1057    O_x=T(2);%default
     1058end
     1059if numel(T)>=3
     1060    O_y=T(3);%default
     1061end
     1062Coord_cell=get(handles.ListCoord,'String');
     1063data=read_geometry_calib(Coord_cell);
     1064r1=cos(pi*Phi/180);
     1065r2=-sin(pi*Phi/180);
     1066r3=sin(pi*Phi/180);
     1067r4=cos(pi*Phi/180);
     1068x=data.Coord(:,1)-O_x;
     1069y=data.Coord(:,2)-O_y;
     1070data.Coord(:,1)=r1*x+r2*y;
     1071data.Coord(:,2)=r3*x+r4*y;
     1072% data.Coord(:,[4 5])=data.Coord(:,[4 5]);
     1073for i=1:size(data.Coord,1)
     1074    for j=1:5
     1075          Coord{i,j}=num2str(data.Coord(i,j),4);%phys x,y,z
     1076   end
     1077end
     1078Tabchar=cell2tab(Coord,'    |    ');
     1079Tabchar=[Tabchar;{'......'}];
     1080set(handles.ListCoord,'Value',1)
     1081set(handles.ListCoord,'String',Tabchar)
     1082
    10781083
    10791084%%%%%%%%%%%%%%%%%%%%
Note: See TracChangeset for help on using the changeset viewer.