⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lapsolvegui.m

📁 computation of conformal maps to polygonally bounded regions
💻 M
字号:
function bdata = lapsolvegui(varargin)
% LAPSOLVEGUI GUI implemtentation for lapsolvegui.fig.

%    FIG = LAPSOLVEGUI launch lapsolvegui GUI.
%    LAPSOLVEGUI('callback_name', ...) invoke the named callback.

%    Copyright 2002 by Toby Driscoll.
%    $Id: lapsolvegui.m 211 2002-09-18 18:34:22Z driscoll $

% Thanks to Paul Syred for suggestions on this GUI concept.

if isa(varargin{1},'polygon')

  fig = openfig(mfilename,'reuse');
  
  % Use system color scheme for figure:
  bg = get(0,'defaultUicontrolBackgroundColor');
  set(fig,'Color',bg);
  
  % Generate a structure of handles to pass to callbacks, and store it. 
  handles = guihandles(fig);
  
  % Set up initial data.
  p = varargin{1};  n = length(p);
  set(fig,'handlevis','on')
  axes(handles.Axes);  hold on, box on
  side = plot(p);
  plot(vertex(p),'b.','markersize',6)
  set(fig,'handlevis','callback')
  set(side,{'tag'},cellstr(num2str((1:n)')));
  set(side,'buttondown',...
           'lapsolvegui(''PolygonSide_Callback'',gcbo,[],guidata(gcbo))');
  set(side(1),'color','r')  
      
  set(handles.ListSides,'string',cellstr(num2str(zeros(n,1))),'value',1);
  set(handles.RadioDirichlet,'value',1)
  set(handles.EditValue,'string','0')
  set(handles.RadioNeumann,'value',0)
  
  % The radio buttons wouldn't work right for me.
  set(handles.RadioDirichlet,'style','check')
  set(handles.RadioNeumann,'style','check')
  
  set(handles.ButtonOK,'background',bg.^0.5)
  
  handles.PolygonSides = side;
  guidata(fig, handles);

  % Wait for callbacks to run and window to be dismissed:
  uiwait(fig);

  % Read off the BCs and exit.
  BC = get(handles.ListSides,'string');
  bdata = repmat(NaN,n,1);
  for k = 1:n
    if ~strcmp( BC{k}, 'N' )
      bdata(k) = str2num( BC{k} );
    end
  end
  
  close(fig)
  
elseif ischar(varargin{1}) % INVOKE NAMED SUBFUNCTION OR CALLBACK
  
  try
    if (nargout)
      [varargout{1:nargout}] = feval(varargin{:}); % FEVAL switchyard
    else
      feval(varargin{:}); % FEVAL switchyard
		end
  catch
    disp(lasterr);
  end
  
end


% --------------------------------------------------------------------
function varargout = PolygonSide_Callback(h, eventdata, handles, ...
                                          varargin)
% Check for extension of selection.
if strcmp(get(gcbf,'selectiontype'),'normal')
  target = str2num( get(h,'tag') );
else
  target = get(handles.ListSides,'value');
  new = str2num( get(h,'tag') );
  target(end+1) = new;
end

selectsides(handles,target);



% --------------------------------------------------------------------
function varargout = ListSides_Callback(h, eventdata, handles, varargin)

% Deduce the side number from the selection in the listbox.
target = get(h,'value');
selectsides(handles,target);


% --------------------------------------------------------------------
function varargout = selectsides(handles, target)

% Make sure the list box is up to date.
set(handles.ListSides,'value',target);

% Re-color every polygon side (we don't know who was selected before).
BC = get(handles.ListSides,'string');
side = handles.PolygonSides;
for k = 1:length(side)
  if strcmp(BC{k},'N')
    set(side(k),'color','k')
  else
    set(side(k),'color','b')
  end
end

% Now color selected sides.
set(side(target),'color','r')
drawnow

% Update the radio buttons and value box, unless this was a selection to
% multiple sides.
if length(target)==1
  if strcmp(BC{target},'N')
    set(handles.RadioDirichlet,'value',0)
    set(handles.EditValue,'enable','off')
    set(handles.RadioNeumann,'value',1)
  else
    set(handles.RadioDirichlet,'value',1)
    set(handles.EditValue,'enable','on','string',BC{target})
    set(handles.RadioNeumann,'value',0)
  end
end

% --------------------------------------------------------------------
function varargout = setvalue(handles, val)

target = get(handles.ListSides,'value');
BC = get(handles.ListSides,'string');
for k = 1:length(target)
  BC{target(k)} = val;
end
set(handles.ListSides,'string',BC)

 

% --------------------------------------------------------------------
function varargout = RadioDirichlet_Callback(h, eventdata, handles, varargin)

set(handles.EditValue,'enable','on')
set(handles.RadioDirichlet,'value',1)
set(handles.RadioNeumann,'value',0)
setvalue(handles,get(handles.EditValue,'string'));


% --------------------------------------------------------------------
function varargout = RadioNeumann_Callback(h, eventdata, handles, varargin)

set(handles.EditValue,'enable','off')
set(handles.RadioDirichlet,'value',0)
set(handles.RadioNeumann,'value',1)
setvalue(handles,'N');


% --------------------------------------------------------------------
function varargout = EditValue_Callback(h, eventdata, handles, varargin)

val = get(h,'string');
if isempty(str2num(val))
  % Invalid entry; reset.
  target = get(handles.ListSides,'value');
  BC = get(handles.ListSides,'string');
  set(h,'string',BC{target(1)});
else
  % Accept entry.
  val = num2str(str2num(val));  % clean it up
  set(h,'string',val)
  setvalue(handles,val)
end


% --------------------------------------------------------------------
function varargout = ButtonOK_Callback(h, eventdata, handles, varargin)

uiresume(gcbf);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -