


% -*- texinfo -*-
% @deftypefn {Function File} {[@var{cd}] =} isocolors (@var{c}, @var{v})
% @deftypefnx {Function File} {[@var{cd}] =} isocolors (@var{x}, @var{y}, @var{z}, @var{c}, @var{v})
% @deftypefnx {Function File} {[@var{cd}] =} isocolors (@var{x}, @var{y}, @var{z}, @var{r}, @var{g}, @var{b}, @var{v})
% @deftypefnx {Function File} {[@var{cd}] =} isocolors (@var{r}, @var{g}, @var{b}, @var{v})
% @deftypefnx {Function File} {[@var{cd}] =} isocolors (@dots{}, @var{p})
% @deftypefnx {Function File} isocolors (@dots{})
%
% If called with one output argument and the first input argument
% @var{c} is a three--dimensional array that contains color values and
% the second input argument @var{v} keeps the vertices of a geometry
% then return a matrix @var{cd} with color data information for the
% geometry at computed points
% @command{[x, y, z] = meshgrid (1:l, 1:m, 1:n)}. The output argument
% @var{cd} can be taken to manually set FaceVertexCData of a patch.
%
% If called with further input arguments @var{x}, @var{y} and @var{z}
% which are three--dimensional arrays of the same size than @var{c}
% then the color data is taken at those given points. Instead of the
% color data @var{c} this function can also be called with RGB values
% @var{r}, @var{g}, @var{b}. If input argumnets @var{x}, @var{y},
% @var{z} are not given then again @command{meshgrid} computed values
% are taken.
%
% Optionally, the patch handle @var{p} can be given as the last input
% argument to all variations of function calls instead of the vertices
% data @var{v}. Finally, if no output argument is given then directly
% change the colors of a patch that is given by the patch handle
% @var{p}.
%
% For example,
% @example
% function [] = isofinish (p)
% set (gca, 'DataAspectRatioMode', 'manual', ...
% 'DataAspectRatio', [1 1 1]);
% set (p, 'FaceColor', 'interp');
% %% set (p, 'FaceLighting', 'flat');
% %% light ('Position', [1 1 5]); %% Available with JHandles
%
%
% N = 15; %% Increase number of vertices in each direction
% iso = .4; %% Change isovalue to .1 to display a sphere
% lin = linspace (0, 2, N);
% [x, y, z] = meshgrid (lin, lin, lin);
% c = abs ((x-.5).^2 + (y-.5).^2 + (z-.5).^2);
% figure ; %% Open another figure window
%
% subplot (2, 2, 1); view (-38, 20);
% [f, v] = isosurface (x, y, z, c, iso);
% p = patch ('Faces', f, 'Vertices', v, 'EdgeColor', 'none');
% cdat = rand (size (c)); %% Compute random patch color data
% isocolors (x, y, z, cdat, p); %% Directly set colors of patch
% isofinish (p); %% Call user function isofinish
%
% subplot (2, 2, 2); view (-38, 20);
% p = patch ('Faces', f, 'Vertices', v, 'EdgeColor', 'none');
% [r, g, b] = meshgrid (lin, 2-lin, 2-lin);
% cdat = isocolors (x, y, z, c, v); %% Compute color data vertices
% set (p, 'FaceVertexCData', cdat); %% Set color data manually
% isofinish (p);
%
% subplot (2, 2, 3); view (-38, 20);
% p = patch ('Faces', f, 'Vertices', v, 'EdgeColor', 'none');
% cdat = isocolors (r, g, b, c, p); %% Compute color data patch
% set (p, 'FaceVertexCData', cdat); %% Set color data manually
% isofinish (p);
%
% subplot (2, 2, 4); view (-38, 20);
% p = patch ('Faces', f, 'Vertices', v, 'EdgeColor', 'none');
% r = g = b = repmat ([1:N] / N, [N, 1, N]); %% Black to white
% cdat = isocolors (x, y, z, r, g, b, v);
% set (p, 'FaceVertexCData', cdat);
% isofinish (p);
% @end example
%
% @seealso{isosurface, isonormals, isocaps}
%
% @end deftypefn