HoleInfoT.hh 4.92 KB
Newer Older
1 2 3
/*===========================================================================*\
*                                                                            *
*                              OpenFlipper                                   *
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
 *           Copyright (c) 2001-2015, RWTH-Aachen University                 *
 *           Department of Computer Graphics and Multimedia                  *
 *                          All rights reserved.                             *
 *                            www.openflipper.org                            *
 *                                                                           *
 *---------------------------------------------------------------------------*
 * This file is part of OpenFlipper.                                         *
 *---------------------------------------------------------------------------*
 *                                                                           *
 * Redistribution and use in source and binary forms, with or without        *
 * modification, are permitted provided that the following conditions        *
 * are met:                                                                  *
 *                                                                           *
 * 1. Redistributions of source code must retain the above copyright notice, *
 *    this list of conditions and the following disclaimer.                  *
 *                                                                           *
 * 2. Redistributions in binary form must reproduce the above copyright      *
 *    notice, this list of conditions and the following disclaimer in the    *
 *    documentation and/or other materials provided with the distribution.   *
 *                                                                           *
 * 3. Neither the name of the copyright holder nor the names of its          *
 *    contributors may be used to endorse or promote products derived from   *
 *    this software without specific prior written permission.               *
 *                                                                           *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS       *
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED *
 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A           *
 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER *
 * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,  *
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,       *
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR        *
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF    *
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING      *
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS        *
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.              *
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
*                                                                            *
\*===========================================================================*/


#ifndef HOLEINFO_HH
#define HOLEINFO_HH


#include <OpenFlipper/common/perObjectData.hh>
#include <OpenFlipper/common/Types.hh>

#include "HoleFillerT.hh"

template< class MeshT >
class HoleInfo : public PerObjectData
{
  
  public :
    typedef std::vector< typename MeshT::EdgeHandle > Hole;

  private :
    // the mesh
    MeshT* mesh_;
    
    // list of holes
    std::vector< Hole > holes_;

    // holeFiller
    HoleFiller< MeshT >* filler_;
 
  public :

Jan Möbius's avatar
Jan Möbius committed
71
    /// Konstruktor
Jan Möbius's avatar
Jan Möbius committed
72
    explicit HoleInfo(MeshT* _mesh);
73
  
Jan Möbius's avatar
Jan Möbius committed
74
    /// Destruktor
75 76
    ~HoleInfo();

Jan Möbius's avatar
Jan Möbius committed
77 78 79
    /** Find all holes in the mesh
     *  and store them in the internal list of holes.
     */
80 81
    void getHoles();

Jan Möbius's avatar
Jan Möbius committed
82
    /// fill hole with given index
83 84
    void fillHole(int _index, int _stages = 3 );

Jan Möbius's avatar
Jan Möbius committed
85
    /// fill hole with given boundary edgeHandle
86 87
    void fillHole(typename MeshT::EdgeHandle _eh, int _stages = 3 );

Jan Möbius's avatar
Jan Möbius committed
88
    /// fill all holes
89 90
    void fillAllHoles( int _stages = 3 );

Jan Möbius's avatar
Jan Möbius committed
91
    /// select a hole with given index
92 93
    void selectHole(int _index);

Jan Möbius's avatar
Jan Möbius committed
94 95 96 97 98 99 100 101 102 103 104
    /// Collect information to fly to a hole
    void getHolePostitionInfo(const int _index, typename MeshT::Normal& _holeNormal, typename MeshT::Point& _holeCenter) const;

    /** Collect bounding box size and boundary length of holes
     *
     * @param _index            Index of the hole
     * @param _edges            Count of boundary edges
     * @param _diagonal         Length of the hole bounding box diagonal
     * @param _boundary_Length  Boundary length of the hole
     */
    void getHoleInfo(const unsigned int _index, size_t& _edges, typename MeshT::Scalar& _diagonal, typename MeshT::Scalar& _boundaryLength) const;
105

106 107 108 109 110 111 112 113 114
    std::vector< std::vector< typename MeshT::EdgeHandle > >* holes();
};

#if defined(INCLUDE_TEMPLATES) && !defined(HOLEINFO_C)
#define HOLEINFO_TEMPLATES
#include "HoleInfoT.cc"
#endif

#endif //HOLEINFO_HH