void ConstraintDelaunayTriangulation::getTriangles( TriangulatedSurface& triangulatedSurface, bool filterExteriorParts ) const
{
    triangulatedSurface.reserve( triangulatedSurface.numTriangles() + numTriangles() );

    for ( Finite_faces_iterator it = finite_faces_begin(); it != finite_faces_end(); ++it ) {
        if ( filterExteriorParts && ( it->info().nestingLevel % 2 == 0 ) ) {
            continue ;
        }

        const Coordinate& a = it->vertex( 0 )->info().original ;

        const Coordinate& b = it->vertex( 1 )->info().original ;

        const Coordinate& c = it->vertex( 2 )->info().original ;

        // check that vertex has an original vertex
        if ( a.isEmpty() || b.isEmpty() || c.isEmpty() ) {
            BOOST_THROW_EXCEPTION( Exception(
                                       ( boost::format( "Can't convert Triangulation to TriangulatedSurface (constraint intersection found)" ) ).str()
                                   ) ) ;
        }

        triangulatedSurface.addTriangle( new Triangle( Point( a ), Point( b ), Point( c ) ) );
    }
}
void ForceValidityVisitor::visit( TriangulatedSurface& g )
{
    g.forceValidityFlag( valid_ );
    for ( size_t i = 0; i < g.numGeometries(); i++ ) {
        visit( g.geometryN( i ) );
    }
}
TriangulatedSurface ConsistentOrientationBuilder::buildTriangulatedSurface()
{
    _makeOrientationConsistent() ;
    TriangulatedSurface triangulatedSurface ;

    for ( size_t i = 0; i < numTriangles(); i++ ) {
        triangulatedSurface.addTriangle( triangleN( i ) );
    }

    return triangulatedSurface ;
}
void triangulatePolygon3D(
    const TriangulatedSurface& g,
    TriangulatedSurface& triangulatedSurface
)
{
    triangulatedSurface.addTriangles( g ) ;
}
void triangulatePolygon3D(
    const Triangle& triangle,
    TriangulatedSurface& triangulatedSurface
)
{
    /*
     * filter empty polygon
     */
    if ( triangle.isEmpty() ) {
        return ;
    }

    triangulatedSurface.addTriangle( triangle ) ;
}
Exemple #6
0
bool hasConsistentOrientation3D( const TriangulatedSurface& g )
{
    using namespace graph ;

    if ( g.isEmpty() ) {
        return true ;
    }


    GeometryGraph graph ;
    GeometryGraphBuilder graphBuilder( graph ) ;
    graphBuilder.addTriangulatedSurface( g );
    return graph::algorithm::isHalfEdge( graph ) ;
}
Exemple #7
0
void GetPointsVisitor::visit( const TriangulatedSurface& g )
{
    for ( size_t i = 0; i < g.numGeometries(); i++ ) {
        visit( g.geometryN( i ) );
    }
}
Exemple #8
0
void AffineTransform3::transform( TriangulatedSurface& surf )
{
    for ( size_t i = 0; i < surf.numGeometries(); ++i ) {
        transform( surf.geometryN( i ) );
    }
}
void ConsistentOrientationBuilder::addTriangulatedSurface( const TriangulatedSurface& triangulatedSurface )
{
    for ( size_t i = 0; i < triangulatedSurface.numGeometries(); i++ ) {
        addTriangle( triangulatedSurface.geometryN( i ) ) ;
    }
}