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

📄 guido.m

📁 一些制作正交曲线网格的matlab源程序
💻 M
📖 第 1 页 / 共 2 页
字号:
function theResult = guido(theStruct, theFigureName, isModal, thePrecision)% guido -- Get info via Matlab struct.%  guido('demo') demonstrates itself, using the commands%   given below.%  guido(theStruct, 'theFigureName') presents a dialog%   representing the fieldnames and values of theStruct,%   a Matlab "struct" which must be compatible with%   "getinfo" and "setinfo".  If theStruct contains%   embedded structs, nested dialogs are produced for%   them as needed.  The empty-matrix [] is returned%   if the main "Cancel" button is pressed.  Also, use%   "Cancel" to escape a sub-dialog without saving its%   most recent changes.  Fields named "help_..." are%   shown in a separate dialog.  If theFigureName is%   not given or is empty, the external name of%   theStruct will be used.%  guido(theStruct, 'theFigureName', isModal) uses modal%   dialogs on non-PCWIN machines if "isModal" evaluates%   to logical(1) TRUE.  The default is to use non-modal%   dialogs, which allows interactions with other windows,%   except the Matlab command window.  In either case, the%   the routine prevents dialogs from being dismissed out%   of sequence.%  guido(theStruct, 'theFigureName', isModal, thePrecision)%   uses thePrecision (default = 4) when displaying numbers%   in an "edit" control.%% Commands used in the demonstration:%%   s.help = help(mfilename);%   s.anEdit = 'some text';%   s.aNumber = pi;%   s.aCheckbox = {'checkbox' 0};%   s.aRadiobutton = {'radiobutton' 0};%   s.aPopupmenu = {{'red', 'blue', 'green'}, 1};%   s.aSubdialog.aPopupmenu = {{10 20 30}, 1};%   guido(s, [mfilename ' demo'])% Note: the present m-file can be renamed without%  requiring any changes to the Matlab code itself. % Copyright (C) 1999 Dr. Charles R. Denham, ZYDECO.%  All Rights Reserved.%   Disclosure without explicit written consent from the%    copyright owner does not constitute publication. % Version of 15-Dec-1999 13:39:54.% Updated    25-Jan-2000 11:47:42.persistent CURRENT_STRUCTpersistent CURRENT_FIGURESLF = char(10);CR = char(13);CRLF = [CR LF];BABY_BLUE = [8 10 10]/10;if nargout > 0, theResult = []; end% Launch a demo if this is not a callback.if nargin < 1 & isempty(gcbo)	help(mfilename)	ans = feval(mfilename, 'demo');	if nargout > 0		theResult = CURRENT_STRUCT;	else		assignin('caller', 'ans', CURRENT_STRUCT)	end	returnend% Do the demo.if nargin > 0 & isequal(theStruct, 'demo')	if nargin < 2, theFigureName = [mfilename ' demo']; end	s = [];	s.help = help(mfilename);	s.anEdit = 'some text';	s.aNumber = pi;	s.aCheckbox = {'checkbox' 0};	s.aRadiobutton = {'radiobutton' 0};	s.aPopupmenu = {{'red', 'blue', 'green'}, 1};	s.aSubdialog.aPopupmenu = {{10 20 30}, 1};%	s.aSubdialog.bSubdialog.bPopupmenu = {{100 200 300}, 1};	disp(s)	assign([mfilename '_demo'], s)	result = feval(mfilename, eval([mfilename '_demo']), '', 0);	assign([mfilename '_result'], result)		if ~isempty(eval([mfilename '_result']))		result = feval(mfilename, eval([mfilename '_result']), '', 0);		assign([mfilename '_result'], result)	end	if nargout > 0		assign('theResult', [mfilename '_result'])	end	returnendif nargin > 0 & ischar(theStruct)	theCommand = lower(theStruct);endif 0 & nargin > 0 & ischar(theStruct)	switch theCommand	case '_keypress_'		theKey = get(gcbf, 'CurrentCharacter');		if any(abs(theKey) < 32)			theCommand = '_okay_';		end	endend% Dismiss dialogs in sequence.if nargin > 0 & ischar(theStruct)	switch theCommand	case {'_okay_', '_cancel_'}		CURRENT_FIGURES(~ishandle(CURRENT_FIGURES)) = [];		if ~isempty(CURRENT_FIGURES) & gcbf ~= CURRENT_FIGURES(end)			figure(CURRENT_FIGURES(end))			h = helpdlg('Dismiss dialogs in sequence.', 'Please...');			tic			while ishandle(h) & toc < 3				drawnow			end			if ishandle(h), delete(h), end			return		end	endend% Process a command: okay or cancel.if nargin > 0 & ischar(theStruct)	switch theCommand	case '_okay_'		CURRENT_STRUCT = get(gcbf, 'UserData');		theControls = findobj(gcbf, 'Type', 'uicontrol', 'Tag', mfilename);		theControls = sort(theControls);		for i = 2:2:length(theControls)			theField = get(theControls(i-1), 'String');			theControl = theControls(i);			theStyle = get(theControl, 'Style');			switch theStyle			case 'pushbutton'				okay = 0;			case 'checkbox'				theValue = get(theControl, 'Value');				okay = 1;			case 'radiobutton'				theValue = get(theControl, 'Value');				okay = 1;			case 'edit'				if isequal(theField, 'help')					okay = 0;				else					theValue = eval(get(theControl, 'String'));					okay = 1;				end			case 'popupmenu'				theValue = get(theControl, 'Value');				okay = 1;			otherwise				okay = 0;				warning([' ## Unsupported control style: ' theStyle])			end			if okay				CURRENT_STRUCT = setinfo(CURRENT_STRUCT, theField, theValue);			end		end		if ~isempty(CURRENT_FIGURES) & any(CURRENT_FIGURES == gcbf)			CURRENT_FIGURES(CURRENT_FIGURES == gcbf) = [];		end		delete(gcbf)	case '_cancel_'		CURRENT_STRUCT = [];		if ~isempty(CURRENT_FIGURES) & any(CURRENT_FIGURES == gcbf)			CURRENT_FIGURES(CURRENT_FIGURES == gcbf) = [];		end		delete(gcbf)	otherwise		disp([' ## Unknown command: ' theCommand])	end	returnend% Build the dialog if it does not already exist.if nargin > 0 & isstruct(theStruct)	theStruct = setinfo(theStruct);	if nargin < 2 | isempty(theFigureName)		theFigureName = inputname(1);		if isempty(theFigureName)			theFigureName = 'unnamed';		end	end	if isempty(theFigureName), theFigureName = mfilename; end		f = findobj('Type', 'figure', 'Name', theFigureName, 'Tag', mfilename);	if any(f)		figure(f)		return	end		if nargin < 3, isModal = 0; end	if nargin < 4, thePrecision = 4; end		if all(isModal(:)) & ~any(findstr(computer, 'PCWIN'))		theWindowStyle = 'modal';	else		theWindowStyle = 'normal';	end	theFigures = findobj('Type', 'figure', 'Tag', mfilename);	theFigure = figure( ...						'Name', theFigureName, ...						'WindowStyle', theWindowStyle, ...						'Visible', 'off', ...						'KeyPressFcn', [mfilename ' _keypress_'], ...						'CloseRequestFcn', [mfilename ' _cancel_'], ...						'Tag', mfilename);	if any(theFigures)		pos = get(theFigures(1), 'Position');		left = pos(1);		top = pos(2) + pos(4);		for i = 2:length(theFigures)			p = get(theFigures(i), 'Position');			left = max(pos(1), p(1));			top = min(top, p(2) + p(4));		end		thePosition = get(theFigure, 'Position');		thePosition(1) = left + 20;		thePosition(2) = top - thePosition(4) - 20;		set(theFigure, 'Position', thePosition)	end	theFrame = uicontrol( ...						'Style', 'frame', ...						'Units', 'normalized', ...						'Position', [0 0 1 1], ...						'BackgroundColor', BABY_BLUE);	theControls = [];	theStruct = setinfo(theStruct);   % Canonical form.	theFields = fieldnames(theStruct);	for i = 1:length(theFields)		theField = theFields{i};		theValue = getfield(theStruct, theField);		switch class(theValue)		case 'cell'			switch class(theValue{1})			case 'cell'				if length(theValue) > 1					theSetting = theValue{2};				else					theSetting = 1;					theValue = {theValue, theSetting};					theStruct = setfield(theStruct, theField, theValue);				end				theStyle = 'popupmenu';			case 'char'				switch theValue{1}				case 'checkbox'					theStyle = 'checkbox';					if length(theValue) > 1						theSetting = theValue{2};					else						theSetting = 0;					end				case 'radiobutton'					theStyle = 'radiobutton';					if length(theValue) > 1						theSetting = theValue{2};					else						theSetting = 0;					end				otherwise					error([' ## Incompatible control style: ' theValue{1}])				end			end			theControls(end+1) = uicontrol( ...						'Style', 'text', ...						'String', theField);			theControls(end+1) = uicontrol( ...						'Style', theStyle, ...						'String', theValue{1}, ...						'Value', theSetting);		case 'char'			f = findstr(theField, 'help_');			if ~any(f) | f(1) ~= 1				theControls(end+1) = uicontrol( ...							'Style', 'text', ...							'String', theField);				theControls(end+1) = uicontrol( ...							'Style', 'edit', ...							'Max', 1000, ...							'String', ['''' theValue '''']);			else				theHintName = [theField ' ' theFigureName];				theCallback = ...					['hint(get(gcbo, ''UserData''), ''' theHintName ''')'];				theControls(end+1) = uicontrol( ...							'Style', 'text', ...							'String', theField);				theControls(end+1) = uicontrol( ...							'Style', 'pushbutton', ...							'Callback', theCallback, ...							'UserData', theValue, ...							'String', 'Help...');			end		case 'double'			theControls(end+1) = uicontrol( ...						'Style', 'text', ...						'String', theField);			theControls(end+1) = uicontrol( ...						'Style', 'edit', ...						'Max', 1000, ...						'String', mat2str(theValue, thePrecision));		case 'struct'			theCallback = ...				[mfilename '(get(gcbo, ''UserData''), ''' theField ''')'];			theControls(end+1) = uicontrol( ...						'Style', 'text', ...						'String', theField);			theControls(end+1) = uicontrol( ...						'Style', 'pushbutton', ...						'String', 'More...', ...						'Callback', theCallback, ...						'UserData', theValue);		otherwise			disp(class(theValue))			error([' ## Incompatible data type. ' class(theValue)])		end	end	set(theControls(1:2:end), ...			'HorizontalAlignment', 'right', ...			'BackgroundColor', BABY_BLUE)	theControls(end+1) = uicontrol( ...			'Style', 'pushbutton', ...			'String', 'Cancel', ...			'BackgroundColor', [10 2 2]/10, ...			'Callback', [mfilename ' _cancel_']);	theControls(end+1) = uicontrol( ...			'Style', 'pushbutton', ...			'String', 'Okay', ...			'BackgroundColor', [2 10 2]/10, ...			'Callback', [mfilename ' _okay_']);	set(theControls, 'Tag', mfilename)	theLayout = [];	for i = 1:length(theControls)/2		theLayout = [(1:2:length(theControls));					(2:2:length(theControls))].';	end	theLayout = theLayout(:, [1 2 2]);	uilayout(theControls, theLayout, [1 1 18 18]/20)	pos = get(0, 'DefaultUIControlPosition');	width = pos(3) * 6;	height = 0.5 * length(theControls) * pos(4) * 20 / 15;	thePosition = get(theFigure, 'Position');	thePosition(2) = thePosition(2) + thePosition(4) - height;	thePosition(3) = width;	thePosition(4) = height;	set(theFigure, 'Position', thePosition, 'Visible', 'on', ...					'UserData', theStruct)	if any(CURRENT_FIGURES)		CURRENT_FIGURES(~ishandle(CURRENT_FIGURES)) = [];	end	CURRENT_FIGURES(end+1) = theFigure;	% Wait here for the new figure to be deleted.  By then, it will%  already have placed its contents in the persistent CURRENT_STRUCT%  item.	waitfor(theFigure)	% Now get the new info from CURRENT_STRUCT and update.		theNewStruct = CURRENT_STRUCT;		theFieldName = theFigureName;		if length(theFigures) < 1		theStruct = theNewStruct;	else		theFigure = gcf;		theStruct = get(theFigure, 'UserData');		if ~isfield(theStruct, theFieldName) & ~isequal(theField, 'help')			disp([' ## No such field: ' theField])		elseif ~isempty(theNewStruct)			theStruct = setfield(theStruct, theFieldName, theNewStruct);			set(theFigure, 'UserData', theStruct)			f = findobj(theFigure, 'Type', 'uicontrol', 'Tag', mfilename);			f = sort(f);			for i = 2:2:length(f)				theField = get(f(i-1), 'String');				if isequal(theField, theFieldName)					set(f(i), 'UserData', theNewStruct)					break				end			end		end	end		if nargout > 0		theResult = theStruct;	else		assignin('caller', 'ans', theStruct);	end	end% ---------- assign ----------%function assign(theName, theValue)% assign -- Assign a value to a name.%  assign('theName', theValue) assigns theValue%   to 'theName' in the caller's workspace. It%   avoids the need to construct an explicit%   assignment statement to be eval-ed. % Copyright (C) 1997 Dr. Charles R. Denham, ZYDECO.%  All Rights Reserved.%   Disclosure without explicit written consent from the%    copyright owner does not constitute publication. % Version of 28-May-1998 00:43:58.if nargin < 2, help(mfilename), return, end% The following scheme permits the assignment%  of items that have complicated subscripts,%  such as "a{1}(2).b{3}.c = pi".hasAns = (evalin('caller', 'exist(''ans'', ''var'')') == 1);if hasAns	ans = evalin('caller', 'ans');   % Save.endassignin('caller', 'ans', theValue)evalin('caller', [theName ' = ans;'])evalin('caller', 'clear(''ans'')')if hasAns	assignin('caller', 'ans', ans)   % Restore.end

⌨️ 快捷键说明

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