/usr/include/InsightToolkit/Review/itkQuadEdgeMeshEulerOperatorSplitFacetFunction.txx is in libinsighttoolkit3-dev 3.20.1-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 | /*=========================================================================
Program: Insight Segmentation & Registration Toolkit
Module: itkQuadEdgeMeshEulerOperatorSplitFacetFunction.txx
Language: C++
Date: $Date$
Version: $Revision$
Copyright (c) Insight Software Consortium. All rights reserved.
See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notices for more information.
=========================================================================*/
#ifndef __itkQuadEdgeMeshEulerOperatorSplitFacetFunction_txx
#define __itkQuadEdgeMeshEulerOperatorSplitFacetFunction_txx
#include "itkQuadEdgeMeshEulerOperatorSplitFacetFunction.h"
namespace itk
{
template < class TMesh, class TQEType >
typename QuadEdgeMeshEulerOperatorSplitFacetFunction< TMesh, TQEType >::OutputType
QuadEdgeMeshEulerOperatorSplitFacetFunction< TMesh, TQEType >::
Evaluate( QEType* h, QEType* g )
{
//
// g->Dest() ---<----- X destPid --------- X //
// / g \ / \ \ //
// / \ dLnext \ \ //
// / \ / \ \ //
// / \ v ^ \ //
// / g->Left() \ / \ \ //
// X = X X newEdge X //
// \ h->Left() / \ \ / //
// \ / \ \ ^ //
// \ / \ \ / //
// \ / \ \ oLnext //
// \ h / \ \ / //
// X ----->--- h->Dest() X --------- orgPid //
//
if( !h || !g )
{
itkDebugMacro( "At least one of the Input is not an edge." );
return( (QEType*) 0 );
}
if( !this->m_Mesh )
{
itkDebugMacro( "No mesh present." );
return( (QEType*) 0 );
}
if( h == g )
{
itkDebugMacro( "Provided edges should be different." );
return( (QEType*) 0 );
}
if( h->GetLeft( ) != g->GetLeft( ) )
{
itkDebugMacro( "The edges are not around the same face." );
return( (QEType*) 0 );
}
if ( ( h->GetLnext( ) == g )
|| ( g->GetLnext( ) == h ) )
{
itkDebugMacro( "Provided edges should NOT be consecutive." );
return( (QEType*) 0 );
}
typedef typename MeshType::VertexRefType VertexRefType;
this->m_Mesh->DeleteFace( h->GetLeft( ) );
VertexRefType orgPid = h->GetDestination( );
VertexRefType destPid = g->GetDestination( );
// Create an new isolated edge and set it's geometry:
EdgeCellType* newEdge = new EdgeCellType;
QEType* newEdgeGeom = newEdge->GetQEGeom( );
// see the code of e.g. AddFace
newEdgeGeom->SetOrigin( orgPid );
newEdgeGeom->SetDestination( destPid );
// Insert newEdge at Org
QEType* oLnext = h->GetLnext( );
oLnext->InsertAfterNextBorderEdgeWithUnsetLeft( newEdgeGeom );
// Insert newEdge at Dest
QEType* dLnext = g->GetLnext( );
dLnext->InsertAfterNextBorderEdgeWithUnsetLeft( newEdgeGeom->GetSym( ) );
// Add the new edge to the container
this->m_Mesh->PushOnContainer( newEdge );
// Build two new faces
this->m_Mesh->AddFace( h );
this->m_Mesh->AddFace( g );
this->m_Mesh->Modified( );
return( newEdgeGeom );
}
}
#endif
// eof - itkQuadEdgeMeshEulerOperatorSplitFacetFunction.txx
|