~ubuntu-branches/ubuntu/trusty/blender/trusty

« back to all changes in this revision

Viewing changes to intern/decimation/intern/LOD_EdgeCollapser.h

  • Committer: Package Import Robot
  • Author(s): Jeremy Bicha
  • Date: 2013-03-06 12:08:47 UTC
  • mfrom: (1.5.1) (14.1.8 experimental)
  • Revision ID: package-import@ubuntu.com-20130306120847-frjfaryb2zrotwcg
Tags: 2.66a-1ubuntu1
* Resynchronize with Debian (LP: #1076930, #1089256, #1052743, #999024,
  #1122888, #1147084)
* debian/control:
  - Lower build-depends on libavcodec-dev since we're not
    doing the libav9 transition in Ubuntu yet

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*
2
 
 * ***** BEGIN GPL LICENSE BLOCK *****
3
 
 *
4
 
 * This program is free software; you can redistribute it and/or
5
 
 * modify it under the terms of the GNU General Public License
6
 
 * as published by the Free Software Foundation; either version 2
7
 
 * of the License, or (at your option) any later version.
8
 
 *
9
 
 * This program is distributed in the hope that it will be useful,
10
 
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11
 
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
 
 * GNU General Public License for more details.
13
 
 *
14
 
 * You should have received a copy of the GNU General Public License
15
 
 * along with this program; if not, write to the Free Software Foundation,
16
 
 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17
 
 *
18
 
 * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
19
 
 * All rights reserved.
20
 
 *
21
 
 * The Original Code is: all of this file.
22
 
 *
23
 
 * Contributor(s): none yet.
24
 
 *
25
 
 * ***** END GPL LICENSE BLOCK *****
26
 
 */
27
 
 
28
 
/** \file decimation/intern/LOD_EdgeCollapser.h
29
 
 *  \ingroup decimation
30
 
 */
31
 
 
32
 
 
33
 
#ifndef __LOD_EDGECOLLAPSER_H__
34
 
#define __LOD_EDGECOLLAPSER_H__
35
 
 
36
 
// This is a helper class that collapses edges of a 2 - manifold mesh.
37
 
 
38
 
#include "LOD_MeshPrimitives.h"
39
 
#include "MEM_NonCopyable.h"
40
 
#include <vector>
41
 
#include <functional>
42
 
 
43
 
class LOD_ManMesh2;
44
 
 
45
 
class LOD_EdgeCollapser 
46
 
: public  MEM_NonCopyable
47
 
{
48
 
 
49
 
public :
50
 
                        
51
 
        static
52
 
                LOD_EdgeCollapser * 
53
 
        New(
54
 
        );
55
 
 
56
 
        // returns via arguments the set of modified
57
 
        // verts,edges and faces.
58
 
 
59
 
                bool
60
 
        CollapseEdge(
61
 
                LOD_EdgeInd ei,
62
 
                LOD_ManMesh2 &mesh,
63
 
                std::vector<LOD_EdgeInd> &      degenerate_edges,
64
 
                std::vector<LOD_FaceInd> &      degenerate_faces,
65
 
                std::vector<LOD_VertexInd> & degenerate_vertices,
66
 
                std::vector<LOD_EdgeInd> &      new_edges,
67
 
                std::vector<LOD_FaceInd> &      update_faces,
68
 
                std::vector<LOD_VertexInd> & update_vertices
69
 
        );
70
 
 
71
 
private :
72
 
 
73
 
        LOD_EdgeCollapser(
74
 
        );
75
 
 
76
 
        // Test to see if the result of collapsing the
77
 
        // edge produces 2 junctions in the mesh i.e. where
78
 
        // an edge is shared by more than 2 polygons
79
 
 
80
 
        // We count the number of coincedent edge pairs that
81
 
        // result from the collapse of collapse_edge.
82
 
 
83
 
        // If collapse edge is a boundary edge then the number of
84
 
        // coincedent pairs should be 1
85
 
        // else it should be 2.
86
 
 
87
 
                bool
88
 
        TJunctionTest(
89
 
                LOD_ManMesh2 &mesh,
90
 
                std::vector<LOD_EdgeInd> &e_v0v1,
91
 
                LOD_EdgeInd collapse_edge
92
 
        );
93
 
 
94
 
        // here's the definition of the sort function
95
 
        // we use to determine coincedent edges
96
 
 
97
 
        // assumes the edges are normalized i.e. m_verts[0] <= m_verts[1]
98
 
 
99
 
        struct less : std::binary_function<LOD_Edge, LOD_Edge, bool> {
100
 
                        bool 
101
 
                operator()(
102
 
                        const LOD_Edge& a,
103
 
                        const LOD_Edge& b
104
 
                ) const {
105
 
                                
106
 
                        if (int(a.m_verts[0]) == int(b.m_verts[0])) {
107
 
                                return (int(a.m_verts[1]) < int(b.m_verts[1]));
108
 
                        } else {
109
 
                                return (int(a.m_verts[0]) < int(b.m_verts[0]));
110
 
                        }
111
 
                }
112
 
        };
113
 
 
114
 
};
115
 
 
116
 
#endif
117