DecimaterViewerWidget.cc 5.27 KB
Newer Older
1
2
3
/*===========================================================================*\
 *                                                                           *
 *                               OpenMesh                                    *
Jan Möbius's avatar
Jan Möbius committed
4
 *      Copyright (C) 2001-2013 by Computer Graphics Group, RWTH Aachen      *
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
 *                           www.openmesh.org                                *
 *                                                                           *
 *---------------------------------------------------------------------------* 
 *  This file is part of OpenMesh.                                           *
 *                                                                           *
 *  OpenMesh 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.                        *
 *                                                                           *
 *  OpenMesh 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 OpenMesh.  If not,                                    *
 *  see <http://www.gnu.org/licenses/>.                                      *
 *                                                                           *
\*===========================================================================*/ 

/*===========================================================================*\
 *                                                                           *             
 *   $Revision$                                                         *
 *   $Date$                   *
 *                                                                           *
\*===========================================================================*/
Jan Möbius's avatar
Jan Möbius committed
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


//== INCLUDES =================================================================

#ifdef _MSC_VER
#  pragma warning(disable: 4267 4311)
#endif

#include <iostream>
#include <fstream>

#include <qapplication.h>
#include <qdatetime.h>

#include <OpenMesh/Core/IO/BinaryHelper.hh>
#include <OpenMesh/Core/IO/MeshIO.hh>

#include <OpenMesh/Apps/Decimating/DecimaterViewerWidget.hh>


//== IMPLEMENTATION ========================================================== 


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

void DecimaterViewerWidget::keyPressEvent(QKeyEvent* _event)
{
  switch (_event->key())
  {
70
71
72
73
74
75
76
    case Key_H:
      std::cout << "Press '+' to increase the number of decimating steps\n"
                << "Press '-' to decrease the number of decimating steps\n"
                << "Press 'd' to perform the set number of decimating steps\n"
                << "Press 'S' to save the mesh to 'result.off'\n"
                << "Press 'q' or 'Esc' quit the application" << std::endl;
      break;
Jan Möbius's avatar
Jan Möbius committed
77
78
79
80
81
    case Key_D:
    {
      int rc;
      if ( (rc=decimater_->decimate(steps_)) )
      {
82
83
84
        decimater_->mesh().garbage_collection();
        std::cout << rc << " vertices removed!\n";
        updateGL();
Jan Möbius's avatar
Jan Möbius committed
85
86
      }
      else
87
        std::cout << "Decimation failed\n";
Jan Möbius's avatar
Jan Möbius committed
88
89
90
91
      break;
    }

    case Key_Plus:
92
93
      ++steps_;
      steps_ = std::min( steps_ , (size_t)( mesh_.n_vertices() / 10 ) );
Jan Möbius's avatar
Jan Möbius committed
94
95
96
97
98
      updateGL();
      std::cout << "# decimating steps increased to " << steps_ << std::endl;
      break;

    case Key_Minus:
99
100
      --steps_;
      steps_ = std::max( steps_ , size_t(1) );
Jan Möbius's avatar
Jan Möbius committed
101
102
103
104
105
106
107
108
109
110
111
      updateGL();
      std::cout << "# decimating steps increased to " << steps_ << std::endl;
      break;

    case Key_S:
    {
      OpenMesh::IO::Options opt;

      opt += OpenMesh::IO::Options::Binary;

      if (OpenMesh::IO::write_mesh( mesh(), "result.off", opt ))
112
        std::cout << "mesh saved in 'result.off'\n";
Jan Möbius's avatar
Jan Möbius committed
113
114
115
116
    }
    break;

    case Key_Q:
Jan Möbius's avatar
Jan Möbius committed
117
118
      qApp->quit();
      break;
Jan Möbius's avatar
Jan Möbius committed
119
120
    case Key_Escape:
      qApp->quit();      
Jan Möbius's avatar
Jan Möbius committed
121
      break;
Jan Möbius's avatar
Jan Möbius committed
122
123
    default:
      this->inherited_t::keyPressEvent(_event);
Jan Möbius's avatar
Jan Möbius committed
124
      break;
Jan Möbius's avatar
Jan Möbius committed
125
126
127
128
129
130
131
132
133
134
  }
}

void DecimaterViewerWidget::animate( void )   
{
//    updateGL();
//    timer_->start(300, true);
}

//=============================================================================