doxygen: intern/boolop tagged
[blender.git] / intern / boolop / intern / BOP_Edge.cpp
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 boolop/intern/BOP_Edge.cpp
29  *  \ingroup boolopintern
30  */
31
32  
33 #include "BOP_Edge.h"
34
35 /**
36  * Constructs a new edge.
37  * @param v1 vertex index
38  * @param v2 vertex index
39  */
40 BOP_Edge::BOP_Edge(BOP_Index v1, BOP_Index v2) 
41 {
42         m_vertexs[0] = v1;
43         m_vertexs[1] = v2;
44 }
45
46 /**
47  * Adds a new face index to this edge.
48  * @param i face index
49  */
50 void BOP_Edge::addFace(BOP_Index i) 
51 {
52         if (!containsFace(i))
53                 m_faces.push_back(i);
54 }
55
56 /**
57  * Returns if this edge contains the specified face index.
58  * @param i face index
59  * @return true if this edge contains the specified face index, false otherwise
60  */
61 bool BOP_Edge::containsFace(BOP_Index i)
62 {
63         int pos=0;
64         for(BOP_IT_Indexs it = m_faces.begin();it!=m_faces.end();pos++,it++) {
65                 if ((*it) == i)
66                 return true;
67         }
68         
69         return false;
70 }
71
72 /**
73  * Replaces an edge vertex index.
74  * @param oldIndex old vertex index
75  * @param newIndex new vertex index
76  */
77 void BOP_Edge::replaceVertexIndex(BOP_Index oldIndex, BOP_Index newIndex) 
78 {
79         if (m_vertexs[0] == oldIndex) m_vertexs[0] = newIndex;
80         else if (m_vertexs[1] == oldIndex) m_vertexs[1] = newIndex;
81 }
82
83 #ifdef BOP_NEW_MERGE
84
85 /**
86  * Returns if this edge contains the specified face index.
87  * @param i face index
88  * @return true if this edge contains the specified face index, false otherwise
89  */
90 bool BOP_Edge::removeFace(BOP_Index i)
91 {
92         int pos=0;
93         for(BOP_IT_Indexs it = m_faces.begin();it!=m_faces.end();pos++,it++) {
94                 if ((*it) == i) {
95                         m_faces.erase(it);
96                         return true;
97                 }
98         }
99         
100         return false;
101 }
102
103 #endif
104
105 #ifdef BOP_DEBUG
106
107 #include <iostream>
108 using namespace std;
109
110 /**
111  * Implements operator <<.
112  */
113 ostream &operator<<(ostream &stream, BOP_Edge *e)
114 {
115         stream << "Edge[" << e->getVertex1() << "," << e->getVertex2();
116 #ifdef BOP_NEW_MERGE
117         if(e->m_used)
118                 stream << "] (used)";
119         else
120                 stream << "] (unused)";
121 #endif
122         return stream;
123 }
124 #endif
125
126