[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

    tessellation_stats                 C:\BrainStorm_2001\Toolbox\tessellation_stats.m

This function is called by

    bem_xfer                           C:\BrainStorm_2001\Toolbox\bem_xfer.m

### 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 Nov 2 16:17:59 2004
Cross-Directory links are: ON