[Master Index] [Index for Toolbox]

tessellation_outwards

(Toolbox/tessellation_outwards.m in BrainStorm 2.0 (Alpha))


Function Synopsis

[NFV, status] = tessellation_outwards(FV);

Help Text

TESSELLATION_OUTWARDS - Ensure that tessellation ordering is "outwards"
 function [NFV, status] = tessellation_outwards(FV);

 For a given faces-vertices structure FV, test to see if the majority of
 tesselations are ordered such that the right-hand (counter clockwise) ordering
 yields surface normals outwards from the boundary.

 NFV is the new FV structure. If status = 0, then tessellation was already
 ordered outwards, and NFV = FV. If status = 1, then the normals were pointed
 inwards, and the [1 2 3] orderings were reversed to be [1 3 2], reversing the
 normals.

 Assumes that the surface represented by FV is a closed manifold, and that the
 majority of triangle normals point in the same direction. This may not be true
 in a highly convoluted surface, but should generally hold for the smoother
 surfaces used in BEMs (inner skull, outer skull, scalp).

 This function ASSUMES that all triangles are already consistently ordered in
 the same direction, and does a fast GLOBAL test to see which direction the
 normals are pointed.  If the majority of normals are found to be pointing
 inwards to the center of the vertices, then the ordering of ALL triangles are
 reversed. Individual triangle orderings are not examined. To check the
 ordering of each triangle, use the more extensive tessellation_stats, which
 locally tests every triangle to see if it is consistently ordered relative to
 its neighbors. 

 See also TESSELLATION_STATS

Cross-Reference Information

This function calls
This function is called by

Listing of function C:\BrainStorm_2001\Toolbox\tessellation_outwards.m

function [NFV, status] = tessellation_outwards(FV);
%TESSELLATION_OUTWARDS - Ensure that tessellation ordering is "outwards"
% function [NFV, status] = tessellation_outwards(FV);
%
% For a given faces-vertices structure FV, test to see if the majority of
% tesselations are ordered such that the right-hand (counter clockwise) ordering
% yields surface normals outwards from the boundary.
%
% NFV is the new FV structure. If status = 0, then tessellation was already
% ordered outwards, and NFV = FV. If status = 1, then the normals were pointed
% inwards, and the [1 2 3] orderings were reversed to be [1 3 2], reversing the
% normals.
%
% Assumes that the surface represented by FV is a closed manifold, and that the
% majority of triangle normals point in the same direction. This may not be true
% in a highly convoluted surface, but should generally hold for the smoother
% surfaces used in BEMs (inner skull, outer skull, scalp).
%
% This function ASSUMES that all triangles are already consistently ordered in
% the same direction, and does a fast GLOBAL test to see which direction the
% normals are pointed.  If the majority of normals are found to be pointing
% inwards to the center of the vertices, then the ordering of ALL triangles are
% reversed. Individual triangle orderings are not examined. To check the
% ordering of each triangle, use the more extensive tessellation_stats, which
% locally tests every triangle to see if it is consistently ordered relative to
% its neighbors. 
%
% See also TESSELLATION_STATS

%<autobegin> ---------------------- 14-Jun-2004 17:12:40 -----------------------
% --------- Automatically Generated Comments Block Using AUTO_COMMENTS ---------
%
% CATEGORY: Visualization
%
% Alphabetical list of external functions (non-Matlab):
%   toolbox\tessellation_stats.m
%
% At Check-in: $Author: Mosher $  $Revision: 4 $  $Date: 6/14/04 3:38p $
%
% This software is part of BrainStorm Toolbox Version 2.0 (Alpha) 14-Jun-2004
% 
% Principal Investigators and Developers:
% ** Richard M. Leahy, PhD, Signal & Image Processing Institute,
%    University of Southern California, Los Angeles, CA
% ** John C. Mosher, PhD, Biophysics Group,
%    Los Alamos National Laboratory, Los Alamos, NM
% ** Sylvain Baillet, PhD, Cognitive Neuroscience & Brain Imaging Laboratory,
%    CNRS, Hopital de la Salpetriere, Paris, France
% 
% See BrainStorm website at http://neuroimage.usc.edu for further information.
% 
% Copyright (c) 2004 BrainStorm by the University of Southern California
% This software distributed  under the terms of the GNU General Public License
% as published by the Free Software Foundation. Further details on the GPL
% license can be found at http://www.gnu.org/copyleft/gpl.html .
% 
% FOR RESEARCH PURPOSES ONLY. THE SOFTWARE IS PROVIDED "AS IS," AND THE
% UNIVERSITY OF SOUTHERN CALIFORNIA AND ITS COLLABORATORS DO NOT MAKE ANY
% WARRANTY, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO WARRANTIES OF
% MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, NOR DO THEY ASSUME ANY
% LIABILITY OR RESPONSIBILITY FOR THE USE OF THIS SOFTWARE.
%<autoend> ------------------------ 14-Jun-2004 17:12:40 -----------------------


% ----------------------------- Script History ---------------------------------
% 27-May-2004 JCM Creation
% ----------------------------- Script History ---------------------------------


[mF,nF] = size(FV.faces);
[mV,nV] = size(FV.vertices);

if nF ~= 3 | nV ~= 3,
   error(sprintf('Fields .vertices and .faces must contain 3 columns'));
end

% map to the output

NFV = FV; 

% Find the center of the tesselations
BoundedCenter = mean(FV.vertices);

% remove the mean from all vertices
FV.vertices = FV.vertices - BoundedCenter(ones(mV,1),:);

% Calculate the face normals of these centered tessellations
[FaceNormal, FaceArea, FaceCenter] =  tessellation_stats(FV,0);

% Each face center and face normal is now in the centered coordinates.
% Easy to see which way these normals mostly face.

% sign of the dot product
Direction = sign(sum(FaceNormal .* FaceCenter)); 

if sum(Direction) < 0,
   % the majority of directions are inwards, reverse the ordering
   status = 1; % reversing the direction
   NFV.faces = NFV.faces(:,[1 3 2]);
else
   status = 0; % no reversal needed
   % the majority are outwards, do nothing
end


Produced by color_mat2html, a customized BrainStorm 2.0 (Alpha) version of mat2html on Tue Oct 12 12:05:14 2004
Cross-Directory links are: ON