Home > freetb4matlab > plot > isonormals.m

isonormals

PURPOSE ^

%

SYNOPSIS ^

function varargout = isonormals(varargin)

DESCRIPTION ^

% -*- texinfo -*-
% @deftypefn  {Function File} {[@var{n}] =} isonormals (@var{val}, @var{v})
% @deftypefnx {Function File} {[@var{n}] =} isonormals (@var{val}, @var{p})
% @deftypefnx {Function File} {[@var{n}] =} isonormals (@var{x}, @var{y}, @var{z}, @var{val}, @var{v})
% @deftypefnx {Function File} {[@var{n}] =} isonormals (@var{x}, @var{y}, @var{z}, @var{val}, @var{p})
% @deftypefnx {Function File} {[@var{n}] =} isonormals (@dots{}, 'negate')
% @deftypefnx {Function File} isonormals (@dots{}, @var{p})
%
% If called with one output argument and the first input argument
% @var{val} is a three--dimensional array that contains the data for an
% isosurface geometry and the second input argument @var{v} keeps the
% vertices of an isosurface then return the normals @var{n} in form of
% a matrix with the same size than @var{v} at computed points
% @command{[x, y, z] = meshgrid (1:l, 1:m, 1:n)}.  The output argument
% @var{n} can be taken to manually set @var{VertexNormals} of a patch.
%
% If called with further input arguments @var{x}, @var{y} and @var{z}
% which are three--dimensional arrays with the same size than @var{val}
% then the volume data is taken at those given points.  Instead of the
% vertices data @var{v} a patch handle @var{p} can be passed to this
% function.
%
% If given the string input argument 'negate' as last input argument
% then compute the reverse vector normals of an isosurface geometry.
%
% If no output argument is given then directly redraw the 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, 'VertexNormals', -get(p,'VertexNormals')); %% Revert normals
%   set (p, 'FaceColor', 'interp');
%   %% set (p, 'FaceLighting', 'phong');
%   %% 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, cdat] = isosurface (x, y, z, c, iso, y);
% p = patch ('Faces', f, 'Vertices', v, 'FaceVertexCData', cdat, ...
%        'FaceColor', 'interp', 'EdgeColor', 'none');
% isofinish (p); %% Call user function isofinish
%
% subplot (2, 2, 2); view (-38, 20);
% p = patch ('Faces', f, 'Vertices', v, 'FaceVertexCData', cdat, ...
%        'FaceColor', 'interp', 'EdgeColor', 'none');
% isonormals (x, y, z, c, p); %% Directly modify patch
% isofinish (p);
%
% subplot (2, 2, 3); view (-38, 20);
% p = patch ('Faces', f, 'Vertices', v, 'FaceVertexCData', cdat, ...
%        'FaceColor', 'interp', 'EdgeColor', 'none');
% n = isonormals (x, y, z, c, v); %% Compute normals of isosurface
% set (p, 'VertexNormals', n);    %% Manually set vertex normals
% isofinish (p);
%
% subplot (2, 2, 4); view (-38, 20);
% p = patch ('Faces', f, 'Vertices', v, 'FaceVertexCData', cdat, ...
%        'FaceColor', 'interp', 'EdgeColor', 'none');
% isonormals (x, y, z, c, v, 'negate'); %% Use reverse directly
% isofinish (p);
% @end example
%
% @seealso {isosurface, isocolors, isocaps, marching_cube}
%
% @end deftypefn

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:
Generated on Sat 16-May-2009 00:04:49 by m2html © 2003