[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

- tessellation_stats C:\BrainStorm_2001\Toolbox\tessellation_stats.m

- bem_xfer C:\BrainStorm_2001\Toolbox\bem_xfer.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