?? som_select.m
字號:
set(0,'CurrentFigure',data.fig_h); hold on; tmp=fill(rep_x,rep_y,0.8); for i=1:n set(tmp(i),... 'EdgeColor',[0 0 0],... 'FaceColor',colors(i,:),... 'ButtonDownFcn','som_select([],0,''choose'');'); end axis('equal'); axis('on'); set(gca,'XTick',1:n,'XTickLabel',names,'XAxisLocation','top'); set(data.a_h,'YLim',[-0.5,0.5],... 'XLim',[0.5 n+0.5],... 'YTickLabel',''); set(data.fig_h,'UserData',data);elseif strcmp(varargin{3},'choose') udata=get(gcf,'UserData'); if strcmp(get(gcbo,'Selected'),'off') old=findobj(get(gca,'Children'),'Type','patch'); set(old,'Selected','off'); set(gcbo,'Selected','on'); udata.curr_col=udata.colors(round(mean(get(gcbo,'XData'))),:); udata.class=mean(get(gcbo,'XData')); else set(gcbo,'Selected','off'); udata.curr_col=NaN; udata.class=0; end set(gcf,'UserData',udata);end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function data=som_select_gui()a = figure('Color',[0.8 0.8 0.8], ... 'PaperType','a4letter', ... 'Position',[586 584 560 210], ... 'Tag','SELECT_GUI');data.fig_h=a;b = axes('Parent',a, ... 'Box','on', ... 'CameraUpVector',[0 1 0], ... 'Color',[1 1 1], ... 'DataAspectRatioMode','manual', ... 'PlotBoxAspectRatio',[20 1 2], ... 'PlotBoxAspectRatioMode','manual', ... 'Position',[0.13 0.11 0.775 0.815], ... 'Tag','Axes1', ... 'WarpToFill','off', ... 'XColor',[0 0 0], ... 'XLimMode','manual', ... 'YColor',[0 0 0], ... 'YLimMode','manual', ... 'YTickLabelMode','manual', ... 'ZColor',[0 0 0]);data.a_h=b;b = uicontrol('Parent',a, ... 'Units','points', ... 'BackgroundColor',[0.701961 0.701961 0.701961], ... 'Callback','som_select([],[],''close'')', ... 'FontWeight','demi', ... 'Position',[150 12 50 20], ... 'String','CLOSE', ... 'Tag','Pushbutton1');b = uicontrol('Parent',a, ... 'Units','points', ... 'BackgroundColor',[0.701961 0.701961 0.701961], ... 'Callback','som_select([],0,''ret_mat'')',... 'FontWeight','demi', ... 'Position',[365 12 50 20], ... 'String','OK', ... 'Tag','Pushbutton2');b = uicontrol('Parent',a, ... 'Units','points', ... 'BackgroundColor',[0.701961 0.701961 0.701961], ... 'Callback','som_select([],0,''clear'')',... 'FontWeight','demi', ... 'Position',[257.5 12 50 20], ... 'String','CLEAR', ... 'Tag','Pushbutton3');b = uicontrol('Parent',a, ... 'Units','points', ... 'Position',[50 27 17 16], ... 'Callback','som_select([],[],''rb'')',... 'Style','radiobutton', ... 'Tag','Radiobutton1', ... 'Value',1);b = uicontrol('Parent',a, ... 'Units','points', ... 'BackgroundColor',[0.701961 0.701961 0.701961], ... 'Callback','som_select([],[],''rb'')',... 'Position',[50 7 17 16], ... 'Style','radiobutton', ... 'Tag','Radiobutton2');b = uicontrol('Parent',a, ... 'Units','points', ... 'BackgroundColor',[0.8 0.8 0.8], ... 'FontSize',9, ... 'FontWeight','demi', ... 'HorizontalAlignment','left', ... 'Position',[72 25 28 15], ... 'String','Select', ... 'Style','text', ... 'Tag','StaticText1');b = uicontrol('Parent',a, ... 'Units','points', ... 'BackgroundColor',[0.8 0.8 0.8], ... 'FontSize',9, ... 'FontWeight','demi', ... 'HorizontalAlignment','left', ... 'Position',[72 7 25 13.6], ... 'String','Clear', ... 'Style','text', ... 'Tag','StaticText2');%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function close_guiudata=get(get(gcbo,'Parent'),'UserData');if strcmp(udata.type,'planePlot'); set(udata.plane_h,'ButtonDownFcn','','UserData',[]); set(get(udata.plane_h,'Parent'),'ButtonDownFcn',''); delete(udata.patch_h); return;end h=findobj(get(udata.plane_h,'Children'),'Tag','SEL_PATCH');set(udata.patch_h,'ButtonDownFcn','','UserData',[]);delete(h);close(udata.fig_h);%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function draw_polyudata=get(findobj(get(0,'Children'),'Tag','SELECT_GUI'),'UserData');if isempty(udata.coords) & strcmp(get(gcf,'SelectionType'),'alt') return;endcoords(1,1) = getfield(get(gca,'CurrentPoint'),{3});coords(1,2) = getfield(get(gca,'CurrentPoint'),{1});udata.coords = cat(1,udata.coords,coords);delete(udata.poly_h);subplot(udata.plane_h);hold on;switch get(gcf,'SelectionType'); case 'normal' udata.poly_h=plot(udata.coords(:,2),udata.coords(:,1),'black',... 'ButtonDownFcn','som_select([],[],''click'')',... 'LineWidth',2); set(udata.fig_h,'UserData',udata); case 'alt' udata.coords=cat(1,udata.coords,udata.coords(1,:)); udata.poly_h=plot(udata.coords(:,2),udata.coords(:,1),'black',... 'LineWidth',2); delete(udata.poly_h); if ~isnan(udata.curr_col) tmp=sort(repmat((1:udata.msize(1))',udata.msize(2),1)); tmp(:,2)=repmat((1:udata.msize(2))',udata.msize(1),1); tmp2=tmp; if strcmp(udata.type,'planePlot') in=find(inpolygon(tmp(:,2),tmp(:,1),... udata.coords(:,2),udata.coords(:,1))); row=tmp2(in,1); col=tmp2(in,2); in=sub2ind(udata.msize,row,col); colors=reshape(get(udata.patch_h,'FaceVertexCData'),... [prod(udata.msize) 3]); if ~isnan(udata.curr_col) & ~strcmp(udata.mode,'clear') colors(in,:)=ones(length(in),1)*udata.curr_col; udata.mat(row,col)=udata.class; elseif strcmp(udata.mode,'clear') colors(in,:)=[NaN NaN NaN]; udata.mat(row,col)=0; end udata.poly_h=[]; udata.coords=[]; set(udata.patch_h,'FaceVertexCData',colors); set(udata.fig_h,'UserData',udata); return; end if strcmp(udata.lattice,'hexa'); t=find(~rem(tmp(:,1),2)); tmp(t,2)=tmp(t,2)+0.5; if any(strcmp(get(udata.patch_h,'Tag'),{'planeC','planeU'})) p=0.7*vis_patch('hexa'); else [x,y]=pol2cart(0:0.1:2*pi,0.5); p=[x';0.5]*0.7; p(:,2)=[y';0]*0.7; end else if any(strcmp(get(udata.patch_h,'Tag'),{'planeC','planeU'})) p=0.7*vis_patch('rect'); else [x,y]=pol2cart(0:0.1:2*pi,0.5); p=[x';0.5]*0.7; p(:,2)=[y';0]*0.7; end end in=find(inpolygon(tmp(:,2),tmp(:,1),udata.coords(:,2),udata.coords(:,1))); set(udata.fig_h,'UserData',udata); if strcmp(udata.mode,'select') remove_selpatches; udata=get(udata.fig_h,'UserData'); for i=1:length(in) udat.patch_h=udata.patch_h; h=patch(p(:,1)+tmp(in(i),2),p(:,2)+tmp(in(i),1),... udata.curr_col,... 'EdgeColor','black',... 'ButtonDownFcn','som_select([],[],''click'')', ... 'Tag','SEL_PATCH',... 'UserData',udat); udata.mat(tmp2(in(i),1),tmp2(in(i),2))=udata.class; end else remove_selpatches; udata=get(udata.fig_h,'UserData'); %h=findobj(get(udata.plane_h,'Children'),'Tag','SEL_PATCH'); %for i=1:length(h) % if all(get(h(i),'FaceColor')==udata.curr_col) & ... % inpolygon(mean(get(h(i),'XData')),mean(get(h(i),'YData')),... % udata.coords(:,2),udata.coords(:,1)) % coords=[floor(mean(get(h(i),'YData')))... % floor(mean(get(h(i),'XData')))]; % udata.mat(coords(1),coords(2))=0; % delete(h(i)); % end %end end end udata.poly_h=[]; udata.coords=[]; set(udata.fig_h,'UserData',udata);end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function remove_selpatchesudata=get(findobj(get(0,'Children'),'Tag','SELECT_GUI'),'UserData');h=findobj(get(udata.plane_h,'Children'),'Tag','SEL_PATCH');for i=1:length(h) if inpolygon(mean(get(h(i),'XData')),mean(get(h(i),'YData')),... udata.coords(:,2),udata.coords(:,1)); coords=[floor(mean(get(h(i),'YData')))... floor(mean(get(h(i),'XData')))]; udata.mat(coords(1),coords(2))=0; delete(h(i)); endendset(udata.fig_h,'UserData',udata);%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function [n,names,classes]=class2num(class)names = {};classes = zeros(length(class),1);for i=1:length(class) if ~isempty(class{i}), a = find(strcmp(class{i},names)); if isempty(a), names=cat(1,names,class(i)); classes(i) = length(names); else classes(i) = a; end endendn=length(names);%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function h=find_patch(a_h)h=[];tags={'planeC','planeU','planePie','planeBar','planePlot'};for i=1:5 if ~isempty(findobj(get(a_h,'Children'),'Tag',tags{i})) h=findobj(get(gca,'Children'),'Tag',tags{i}); if length(h) > 1 h=h(1); end return; endend %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function draw_classesudata=get(findobj(get(0,'Children'),'Tag','SELECT_GUI'), ... 'UserData');figure(get(udata.plane_h,'Parent'))subplot(udata.plane_h);colors=zeros(prod(udata.msize),3)+NaN;c_map=jet(length(udata.c_names));inds = find(udata.mat);for i=1:length(inds), colors(inds(i),:) = c_map(udata.mat(inds(i)),:);endif strcmp(udata.type,'planePlot'), set(udata.patch_h,'FaceVertexCData',colors); set(udata.fig_h,'UserData',udata);else hold on co = som_vis_coords(udata.lattice,udata.msize); if any(strcmp(get(udata.patch_h,'Tag'),{'planeC','planeU'})) p=0.7*vis_patch(udata.lattice); else [x,y]=pol2cart(0:0.1:2*pi,0.5); p=[x';0.5]*0.7; p(:,2)=[y';0]*0.7; end for i=1:length(inds), udat.patch_h=udata.patch_h; h=patch(p(:,1)+co(inds(i),1),p(:,2)+co(inds(i),2),... colors(inds(i),:),... 'EdgeColor','black',... 'ButtonDownFcn','som_select([],[],''click'')', ... 'Tag','SEL_PATCH',... 'UserData',udat); end end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -