GeneralMeshFixing.cc 4.7 KB
Newer Older
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

/*===========================================================================*\
 *                                                                            *
 *                              OpenFlipper                                   *
 *      Copyright (C) 2001-2011 by Computer Graphics Group, RWTH Aachen       *
 *                           www.openflipper.org                              *
 *                                                                            *
 *--------------------------------------------------------------------------- *
 *  This file is part of OpenFlipper.                                         *
 *                                                                            *
 *  OpenFlipper is free software: you can redistribute it and/or modify       *
 *  it under the terms of the GNU Lesser General Public License as            *
 *  published by the Free Software Foundation, either version 3 of            *
 *  the License, or (at your option) any later version with the               *
 *  following exceptions:                                                     *
 *                                                                            *
 *  If other files instantiate templates or use macros                        *
 *  or inline functions from this file, or you compile this file and          *
 *  link it with other files to produce an executable, this file does         *
 *  not by itself cause the resulting executable to be covered by the         *
 *  GNU Lesser General Public License. This exception does not however        *
 *  invalidate any other reasons why the executable file might be             *
 *  covered by the GNU Lesser General Public License.                         *
 *                                                                            *
 *  OpenFlipper is distributed in the hope that it will be useful,            *
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of            *
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the             *
 *  GNU Lesser General Public License for more details.                       *
 *                                                                            *
 *  You should have received a copy of the GNU LesserGeneral Public           *
 *  License along with OpenFlipper. If not,                                   *
 *  see <http://www.gnu.org/licenses/>.                                       *
 *                                                                            *
\*===========================================================================*/

/*===========================================================================*\
 *                                                                            *
 *   $Revision: 15713 $                                                       *
 *   $LastChangedBy: moebius $                                                *
 *   $Date: 2012-10-25 12:58:58 +0200 (Do, 25 Okt 2012) $                     *
 *                                                                            *
\*===========================================================================*/




#include "MeshRepairPlugin.hh"
#include "MeshFixingT.hh"


//-----------------------------------------------------------------------------

void MeshRepairPlugin::fixNonManifoldVertices(int _objectId)
{
  TriMesh* triMesh = 0;
  PolyMesh* polyMesh = 0;

  PluginFunctions::getMesh(_objectId, triMesh);
  PluginFunctions::getMesh(_objectId, polyMesh);
  if (triMesh)
    fixNonManifoldVertices(triMesh);
  else if (polyMesh)
    fixNonManifoldVertices(polyMesh);
  else
  {
    emit log(LOGERR, tr("Unsupported Object Type."));
    return;
  }

  emit updatedObject(_objectId, UPDATE_ALL);
  emit createBackup(_objectId, "fixTopology", UPDATE_ALL);
  emit scriptInfo("fixTopology(" + QString::number(_objectId) + ")");
}

//-----------------------------------------------------------------------------

void
MeshRepairPlugin::fixMesh(int _objectId, double _epsilon) {
  // get the target mesh
   TriMesh* triMesh = 0;

   PluginFunctions::getMesh(_objectId,triMesh);

   if (triMesh) {
     MeshFixing<TriMesh> fixer(*triMesh,_epsilon);

     if ( !fixer.fix() )
       emit log(LOGERR, "Fixmesh encountered Problems! Object: " + QString::number(_objectId) + ".");

     // Recompute normals
     triMesh->update_normals();

     emit updatedObject(_objectId, UPDATE_ALL);
     emit createBackup(_objectId, "Fixed mesh", UPDATE_ALL);

     emit scriptInfo( "fixMesh(" + QString::number(_objectId) + ", " + QString::number(_epsilon) + ")" );

   } else
     emit log( LOGERR,tr("Unsupported Object Type for mesh fixing!") );

}

//-----------------------------------------------------------------------------