15 #ifndef _OM_VISUALISER_HXX_
16 #define _OM_VISUALISER_HXX_
22 template <
class Mesh,
class Scalar>
37 template <
class Mesh,
class Vector>
40 if (!m_mesh->has_vertex_colors())
41 m_mesh->request_vertex_colors();
43 Mesh::VertexIter end = m_mesh->vertices_end();
45 std::vector<Scalar> sorted;
48 for (Mesh::VertexIter vertex = m_mesh->vertices_begin(); vertex != end; ++vertex)
50 if (m_mesh->property(vertexProperty, vertex).size() <= vectorComponent)
52 sorted.push_back(m_mesh->property(vertexProperty, vertex)[vectorComponent]);
54 std::sort(sorted.begin(), sorted.end());
57 if (ommitExtremaPercent > 0)
59 percent = 100 / ommitExtremaPercent;
60 m_maxBlue = sorted[sorted.size()/percent];
61 m_maxRed = sorted[sorted.size()-sorted.size()/percent];
65 m_maxBlue = sorted[0];
66 m_maxRed = sorted[sorted.size()];
81 m_maxGreen = (m_maxBlue + m_maxRed) / 2;
83 m_Difference = m_maxBlue;
84 m_maxBlue -= m_Difference;
85 m_maxRed -= m_Difference;
86 m_maxGreen -= m_Difference;
88 for (Mesh::VertexIter vertex = m_mesh->vertices_begin(); vertex != end; ++vertex)
90 importer.set_color(vertex,
getColor(m_mesh->property(vertexProperty, vertex)[vectorComponent]));
99 template <
class Mesh,
class Scalar>
102 if (!m_mesh->has_vertex_colors())
103 m_mesh->request_vertex_colors();
105 Mesh::VertexIter end = m_mesh->vertices_end();
107 std::vector<Scalar> sorted;
110 for (Mesh::VertexIter vertex = m_mesh->vertices_begin(); vertex != end; ++vertex)
111 sorted.push_back((Scalar)m_mesh->property(vertexProperty, vertex));
112 std::sort(sorted.begin(), sorted.end());
114 Scalar percent = 1.0;
115 if (ommitExtremaPercent > 0)
117 percent = 100 / ommitExtremaPercent;
118 m_maxBlue = sorted[sorted.size()/percent];
119 m_maxRed = sorted[sorted.size()-sorted.size()/percent];
123 m_maxBlue = sorted[0];
124 m_maxRed = sorted[sorted.size()];
139 m_maxGreen = (m_maxBlue + m_maxRed) / 2;
141 m_Difference = m_maxBlue;
142 m_maxBlue -= m_Difference;
143 m_maxRed -= m_Difference;
144 m_maxGreen -= m_Difference;
146 for (Mesh::VertexIter vertex = m_mesh->vertices_begin(); vertex != end; ++vertex)
148 importer.set_color(vertex,
getColor(m_mesh->property(vertexProperty, vertex)));
157 template <
class Mesh,
class Scalar>
160 if (!m_mesh->has_face_colors())
161 m_mesh->request_face_colors();
163 Mesh::FaceIter end = m_mesh->faces_end();
165 std::vector<Scalar> sorted;
168 for (Mesh::FaceIter face = m_mesh->faces_begin(); face != end; ++face)
169 sorted.push_back((Scalar)m_mesh->property(faceProperty, face));
170 std::sort(sorted.begin(), sorted.end());
172 Scalar percent = 1.0;
173 if (ommitExtremaPercent > 0)
175 percent = 100 / ommitExtremaPercent;
176 m_maxBlue = sorted[sorted.size()/percent];
177 m_maxRed = sorted[sorted.size()-sorted.size()/percent];
181 m_maxBlue = sorted[0];
182 m_maxRed = sorted[sorted.size()];
197 m_maxGreen = (m_maxBlue + m_maxRed) / 2;
199 m_Difference = m_maxBlue;
200 m_maxBlue -= m_Difference;
201 m_maxRed -= m_Difference;
202 m_maxGreen -= m_Difference;
204 for (Mesh::FaceIter face = m_mesh->faces_begin(); face != end; ++face)
206 importer.set_color(face,
getColor(m_mesh->property(faceProperty, face)));
215 template <
class Mesh,
class Scalar>
218 current -= m_Difference;
225 if (current > m_maxGreen)
227 r = (255.0/(m_maxRed-m_maxGreen)) * current - ((255.0 / (m_maxRed-m_maxGreen))*m_maxRed) + 255.0;
228 g = (-255.0 / (m_maxRed-m_maxGreen)) * current + ((255.0 / (m_maxRed-m_maxGreen))*m_maxRed);
233 g = (255.0/(m_maxGreen-m_maxBlue)) * current - ((255.0 / (m_maxGreen-m_maxBlue))*m_maxGreen) + 255.0;
234 b = (-255.0 / (m_maxGreen-m_maxBlue)) * current +((255.0 / (m_maxGreen-m_maxBlue))*m_maxGreen);
248 if (r > 255) r = 255;
249 if (g > 255) g = 255;
250 if (b > 255) b = 255;
252 return OpenMesh::Vec4uc((
unsigned char)r, (
unsigned char)g, (
unsigned char)b, 255);
261 template <
class Mesh,
class Scalar>
264 maxBlue = m_maxBlue + m_Difference;
265 maxGreen = m_maxGreen + m_Difference;
266 maxRed = m_maxRed + m_Difference;