MEPP2 Project
CurvaturePlugin.h
Go to the documentation of this file.
1 // Copyright (c) 2012-2019 University of Lyon and CNRS (France).
2 // All rights reserved.
3 //
4 // This file is part of MEPP2; you can redistribute it and/or modify
5 // it under the terms of the GNU General Public License as published
6 // by the Free Software Foundation; either version 3 of the License,
7 // or (at your option) any later version.
8 //
9 // This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
10 // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
11 #pragma once
12 
13 #if(_MSC_VER >= 1400)
14 #ifndef _SCL_SECURE_NO_WARNINGS
15 #define _SCL_SECURE_NO_WARNINGS
16 #endif
17 #endif
18 
20 
21 #include <QStringList>
23 
24 #ifndef Q_MOC_RUN // MT : very important to avoid the error : ' Parse error at
25  // "BOOST_JOIN" ' -> (qt4 pb with boost)
28 
30 
31 #include "FEVV/Filters/Generic/Manifold/Curvature/curvature.hpp" // A) include the header of the filter corresponding to your operation
34 
36 
37 #ifdef FEVV_USE_CGAL
41 #endif // FEVV_USE_CGAL
42 #ifdef FEVV_USE_OPENMESH
44 #endif // FEVV_USE_OPENMESH
45 #ifdef FEVV_USE_AIF
47 #endif // FEVV_USE_AIF
48 #endif // Q_MOC_RUN
49 
50 namespace FEVV {
51 
52 class CurvaturePlugin : public QObject,
54  public BasePluginQt
55 {
56  Q_OBJECT
57  Q_INTERFACES(FEVV::Generic_PluginInterface)
58 #if(FEVV_USE_QT5) // see at the end of .cpp for QT4
59  Q_PLUGIN_METADATA(IID "CurvaturePlugin")
60 #endif
61 
62  /*public:
63  using BasePlugin::apply;*/
64 public:
66 
67  ~CurvaturePlugin() = default;
68 
69 public:
70  void init() override { init(true, false, 0.001, 2, false, true); }
71 
72  void init(bool _forceCompute,
73  bool _isGeod,
74  double _radius,
75  int _colorField, // 0 : rien, 1 : min, 2 : max
76  bool _displayMinDirections,
77  bool _displayMaxDirections)
78  {
79  *value_forceCompute = _forceCompute;
80 
81  *value_isGeod = _isGeod;
82  *value_radius = _radius;
83 
84  *value_colorField = _colorField;
85 
86  *value_displayMinDirections = _displayMinDirections;
87  *value_displayMaxDirections = _displayMaxDirections;
88  }
89 
90  void reset() override
91  {
92  init();
93 
94  emit resetSignal();
95  }
96 
97  void addParameters(BaseWindow *_window) override
98  {
99  window = _window;
100  if(window == nullptr || !window->isInit())
101  {
102  std::cerr << "BaseWindow is null or not initialized." << std::endl;
103  return;
104  }
105 
106  // window->setParam( "(Qt) Curvature: geodesic", value_isGeod,
107  // "curvature_qt_p", this ); window->setParam( "(Qt) Curvature: radius",
108  // value_radius, "curvature_qt_p", this );
109  }
110 
111  void initLUT()
112  {
113  int i = 0;
114  LUT_CourbureClust[i++] = 0.000000;
115  LUT_CourbureClust[i++] = 0.000000;
116  LUT_CourbureClust[i++] = 0.515600;
117  LUT_CourbureClust[i++] = 0.000000;
118  LUT_CourbureClust[i++] = 0.000000;
119  LUT_CourbureClust[i++] = 0.531300;
120  LUT_CourbureClust[i++] = 0.000000;
121  LUT_CourbureClust[i++] = 0.000000;
122  LUT_CourbureClust[i++] = 0.546900;
123  LUT_CourbureClust[i++] = 0.000000;
124  LUT_CourbureClust[i++] = 0.000000;
125  LUT_CourbureClust[i++] = 0.562500;
126  LUT_CourbureClust[i++] = 0.000000;
127  LUT_CourbureClust[i++] = 0.000000;
128  LUT_CourbureClust[i++] = 0.578100;
129  LUT_CourbureClust[i++] = 0.000000;
130  LUT_CourbureClust[i++] = 0.000000;
131  LUT_CourbureClust[i++] = 0.593800;
132  LUT_CourbureClust[i++] = 0.000000;
133  LUT_CourbureClust[i++] = 0.000000;
134  LUT_CourbureClust[i++] = 0.609400;
135  LUT_CourbureClust[i++] = 0.000000;
136  LUT_CourbureClust[i++] = 0.000000;
137  LUT_CourbureClust[i++] = 0.625000;
138  LUT_CourbureClust[i++] = 0.000000;
139  LUT_CourbureClust[i++] = 0.000000;
140  LUT_CourbureClust[i++] = 0.640600;
141  LUT_CourbureClust[i++] = 0.000000;
142  LUT_CourbureClust[i++] = 0.000000;
143  LUT_CourbureClust[i++] = 0.656300;
144  LUT_CourbureClust[i++] = 0.000000;
145  LUT_CourbureClust[i++] = 0.000000;
146  LUT_CourbureClust[i++] = 0.671900;
147  LUT_CourbureClust[i++] = 0.000000;
148  LUT_CourbureClust[i++] = 0.000000;
149  LUT_CourbureClust[i++] = 0.687500;
150  LUT_CourbureClust[i++] = 0.000000;
151  LUT_CourbureClust[i++] = 0.000000;
152  LUT_CourbureClust[i++] = 0.703100;
153  LUT_CourbureClust[i++] = 0.000000;
154  LUT_CourbureClust[i++] = 0.000000;
155  LUT_CourbureClust[i++] = 0.718800;
156  LUT_CourbureClust[i++] = 0.000000;
157  LUT_CourbureClust[i++] = 0.000000;
158  LUT_CourbureClust[i++] = 0.734400;
159  LUT_CourbureClust[i++] = 0.000000;
160  LUT_CourbureClust[i++] = 0.000000;
161  LUT_CourbureClust[i++] = 0.750000;
162  LUT_CourbureClust[i++] = 0.000000;
163  LUT_CourbureClust[i++] = 0.000000;
164  LUT_CourbureClust[i++] = 0.765600;
165  LUT_CourbureClust[i++] = 0.000000;
166  LUT_CourbureClust[i++] = 0.000000;
167  LUT_CourbureClust[i++] = 0.781300;
168  LUT_CourbureClust[i++] = 0.000000;
169  LUT_CourbureClust[i++] = 0.000000;
170  LUT_CourbureClust[i++] = 0.796900;
171  LUT_CourbureClust[i++] = 0.000000;
172  LUT_CourbureClust[i++] = 0.000000;
173  LUT_CourbureClust[i++] = 0.812500;
174  LUT_CourbureClust[i++] = 0.000000;
175  LUT_CourbureClust[i++] = 0.000000;
176  LUT_CourbureClust[i++] = 0.828100;
177  LUT_CourbureClust[i++] = 0.000000;
178  LUT_CourbureClust[i++] = 0.000000;
179  LUT_CourbureClust[i++] = 0.843800;
180  LUT_CourbureClust[i++] = 0.000000;
181  LUT_CourbureClust[i++] = 0.000000;
182  LUT_CourbureClust[i++] = 0.859400;
183  LUT_CourbureClust[i++] = 0.000000;
184  LUT_CourbureClust[i++] = 0.000000;
185  LUT_CourbureClust[i++] = 0.875000;
186  LUT_CourbureClust[i++] = 0.000000;
187  LUT_CourbureClust[i++] = 0.000000;
188  LUT_CourbureClust[i++] = 0.890600;
189  LUT_CourbureClust[i++] = 0.000000;
190  LUT_CourbureClust[i++] = 0.000000;
191  LUT_CourbureClust[i++] = 0.906300;
192  LUT_CourbureClust[i++] = 0.000000;
193  LUT_CourbureClust[i++] = 0.000000;
194  LUT_CourbureClust[i++] = 0.921900;
195  LUT_CourbureClust[i++] = 0.000000;
196  LUT_CourbureClust[i++] = 0.000000;
197  LUT_CourbureClust[i++] = 0.937500;
198  LUT_CourbureClust[i++] = 0.000000;
199  LUT_CourbureClust[i++] = 0.000000;
200  LUT_CourbureClust[i++] = 0.953100;
201  LUT_CourbureClust[i++] = 0.000000;
202  LUT_CourbureClust[i++] = 0.000000;
203  LUT_CourbureClust[i++] = 0.968800;
204  LUT_CourbureClust[i++] = 0.000000;
205  LUT_CourbureClust[i++] = 0.000000;
206  LUT_CourbureClust[i++] = 0.984400;
207  LUT_CourbureClust[i++] = 0.000000;
208  LUT_CourbureClust[i++] = 0.000000;
209  LUT_CourbureClust[i++] = 1.000000;
210  LUT_CourbureClust[i++] = 0.000000;
211  LUT_CourbureClust[i++] = 0.015600;
212  LUT_CourbureClust[i++] = 1.000000;
213  LUT_CourbureClust[i++] = 0.000000;
214  LUT_CourbureClust[i++] = 0.031300;
215  LUT_CourbureClust[i++] = 1.000000;
216  LUT_CourbureClust[i++] = 0.000000;
217  LUT_CourbureClust[i++] = 0.046900;
218  LUT_CourbureClust[i++] = 1.000000;
219  LUT_CourbureClust[i++] = 0.000000;
220  LUT_CourbureClust[i++] = 0.062500;
221  LUT_CourbureClust[i++] = 1.000000;
222  LUT_CourbureClust[i++] = 0.000000;
223  LUT_CourbureClust[i++] = 0.078100;
224  LUT_CourbureClust[i++] = 1.000000;
225  LUT_CourbureClust[i++] = 0.000000;
226  LUT_CourbureClust[i++] = 0.093800;
227  LUT_CourbureClust[i++] = 1.000000;
228  LUT_CourbureClust[i++] = 0.000000;
229  LUT_CourbureClust[i++] = 0.109400;
230  LUT_CourbureClust[i++] = 1.000000;
231  LUT_CourbureClust[i++] = 0.000000;
232  LUT_CourbureClust[i++] = 0.125000;
233  LUT_CourbureClust[i++] = 1.000000;
234  LUT_CourbureClust[i++] = 0.000000;
235  LUT_CourbureClust[i++] = 0.140600;
236  LUT_CourbureClust[i++] = 1.000000;
237  LUT_CourbureClust[i++] = 0.000000;
238  LUT_CourbureClust[i++] = 0.156300;
239  LUT_CourbureClust[i++] = 1.000000;
240  LUT_CourbureClust[i++] = 0.000000;
241  LUT_CourbureClust[i++] = 0.171900;
242  LUT_CourbureClust[i++] = 1.000000;
243  LUT_CourbureClust[i++] = 0.000000;
244  LUT_CourbureClust[i++] = 0.187500;
245  LUT_CourbureClust[i++] = 1.000000;
246  LUT_CourbureClust[i++] = 0.000000;
247  LUT_CourbureClust[i++] = 0.203100;
248  LUT_CourbureClust[i++] = 1.000000;
249  LUT_CourbureClust[i++] = 0.000000;
250  LUT_CourbureClust[i++] = 0.218800;
251  LUT_CourbureClust[i++] = 1.000000;
252  LUT_CourbureClust[i++] = 0.000000;
253  LUT_CourbureClust[i++] = 0.234400;
254  LUT_CourbureClust[i++] = 1.000000;
255  LUT_CourbureClust[i++] = 0.000000;
256  LUT_CourbureClust[i++] = 0.250000;
257  LUT_CourbureClust[i++] = 1.000000;
258  LUT_CourbureClust[i++] = 0.000000;
259  LUT_CourbureClust[i++] = 0.265600;
260  LUT_CourbureClust[i++] = 1.000000;
261  LUT_CourbureClust[i++] = 0.000000;
262  LUT_CourbureClust[i++] = 0.281300;
263  LUT_CourbureClust[i++] = 1.000000;
264  LUT_CourbureClust[i++] = 0.000000;
265  LUT_CourbureClust[i++] = 0.296900;
266  LUT_CourbureClust[i++] = 1.000000;
267  LUT_CourbureClust[i++] = 0.000000;
268  LUT_CourbureClust[i++] = 0.312500;
269  LUT_CourbureClust[i++] = 1.000000;
270  LUT_CourbureClust[i++] = 0.000000;
271  LUT_CourbureClust[i++] = 0.328100;
272  LUT_CourbureClust[i++] = 1.000000;
273  LUT_CourbureClust[i++] = 0.000000;
274  LUT_CourbureClust[i++] = 0.343800;
275  LUT_CourbureClust[i++] = 1.000000;
276  LUT_CourbureClust[i++] = 0.000000;
277  LUT_CourbureClust[i++] = 0.359400;
278  LUT_CourbureClust[i++] = 1.000000;
279  LUT_CourbureClust[i++] = 0.000000;
280  LUT_CourbureClust[i++] = 0.375000;
281  LUT_CourbureClust[i++] = 1.000000;
282  LUT_CourbureClust[i++] = 0.000000;
283  LUT_CourbureClust[i++] = 0.390600;
284  LUT_CourbureClust[i++] = 1.000000;
285  LUT_CourbureClust[i++] = 0.000000;
286  LUT_CourbureClust[i++] = 0.406300;
287  LUT_CourbureClust[i++] = 1.000000;
288  LUT_CourbureClust[i++] = 0.000000;
289  LUT_CourbureClust[i++] = 0.421900;
290  LUT_CourbureClust[i++] = 1.000000;
291  LUT_CourbureClust[i++] = 0.000000;
292  LUT_CourbureClust[i++] = 0.437500;
293  LUT_CourbureClust[i++] = 1.000000;
294  LUT_CourbureClust[i++] = 0.000000;
295  LUT_CourbureClust[i++] = 0.453100;
296  LUT_CourbureClust[i++] = 1.000000;
297  LUT_CourbureClust[i++] = 0.000000;
298  LUT_CourbureClust[i++] = 0.468800;
299  LUT_CourbureClust[i++] = 1.000000;
300  LUT_CourbureClust[i++] = 0.000000;
301  LUT_CourbureClust[i++] = 0.484400;
302  LUT_CourbureClust[i++] = 1.000000;
303  LUT_CourbureClust[i++] = 0.000000;
304  LUT_CourbureClust[i++] = 0.500000;
305  LUT_CourbureClust[i++] = 1.000000;
306  LUT_CourbureClust[i++] = 0.000000;
307  LUT_CourbureClust[i++] = 0.515600;
308  LUT_CourbureClust[i++] = 1.000000;
309  LUT_CourbureClust[i++] = 0.000000;
310  LUT_CourbureClust[i++] = 0.531300;
311  LUT_CourbureClust[i++] = 1.000000;
312  LUT_CourbureClust[i++] = 0.000000;
313  LUT_CourbureClust[i++] = 0.546900;
314  LUT_CourbureClust[i++] = 1.000000;
315  LUT_CourbureClust[i++] = 0.000000;
316  LUT_CourbureClust[i++] = 0.562500;
317  LUT_CourbureClust[i++] = 1.000000;
318  LUT_CourbureClust[i++] = 0.000000;
319  LUT_CourbureClust[i++] = 0.578100;
320  LUT_CourbureClust[i++] = 1.000000;
321  LUT_CourbureClust[i++] = 0.000000;
322  LUT_CourbureClust[i++] = 0.593800;
323  LUT_CourbureClust[i++] = 1.000000;
324  LUT_CourbureClust[i++] = 0.000000;
325  LUT_CourbureClust[i++] = 0.609400;
326  LUT_CourbureClust[i++] = 1.000000;
327  LUT_CourbureClust[i++] = 0.000000;
328  LUT_CourbureClust[i++] = 0.625000;
329  LUT_CourbureClust[i++] = 1.000000;
330  LUT_CourbureClust[i++] = 0.000000;
331  LUT_CourbureClust[i++] = 0.640600;
332  LUT_CourbureClust[i++] = 1.000000;
333  LUT_CourbureClust[i++] = 0.000000;
334  LUT_CourbureClust[i++] = 0.656300;
335  LUT_CourbureClust[i++] = 1.000000;
336  LUT_CourbureClust[i++] = 0.000000;
337  LUT_CourbureClust[i++] = 0.671900;
338  LUT_CourbureClust[i++] = 1.000000;
339  LUT_CourbureClust[i++] = 0.000000;
340  LUT_CourbureClust[i++] = 0.687500;
341  LUT_CourbureClust[i++] = 1.000000;
342  LUT_CourbureClust[i++] = 0.000000;
343  LUT_CourbureClust[i++] = 0.703100;
344  LUT_CourbureClust[i++] = 1.000000;
345  LUT_CourbureClust[i++] = 0.000000;
346  LUT_CourbureClust[i++] = 0.718800;
347  LUT_CourbureClust[i++] = 1.000000;
348  LUT_CourbureClust[i++] = 0.000000;
349  LUT_CourbureClust[i++] = 0.734400;
350  LUT_CourbureClust[i++] = 1.000000;
351  LUT_CourbureClust[i++] = 0.000000;
352  LUT_CourbureClust[i++] = 0.750000;
353  LUT_CourbureClust[i++] = 1.000000;
354  LUT_CourbureClust[i++] = 0.000000;
355  LUT_CourbureClust[i++] = 0.765600;
356  LUT_CourbureClust[i++] = 1.000000;
357  LUT_CourbureClust[i++] = 0.000000;
358  LUT_CourbureClust[i++] = 0.781300;
359  LUT_CourbureClust[i++] = 1.000000;
360  LUT_CourbureClust[i++] = 0.000000;
361  LUT_CourbureClust[i++] = 0.796900;
362  LUT_CourbureClust[i++] = 1.000000;
363  LUT_CourbureClust[i++] = 0.000000;
364  LUT_CourbureClust[i++] = 0.812500;
365  LUT_CourbureClust[i++] = 1.000000;
366  LUT_CourbureClust[i++] = 0.000000;
367  LUT_CourbureClust[i++] = 0.828100;
368  LUT_CourbureClust[i++] = 1.000000;
369  LUT_CourbureClust[i++] = 0.000000;
370  LUT_CourbureClust[i++] = 0.843800;
371  LUT_CourbureClust[i++] = 1.000000;
372  LUT_CourbureClust[i++] = 0.000000;
373  LUT_CourbureClust[i++] = 0.859400;
374  LUT_CourbureClust[i++] = 1.000000;
375  LUT_CourbureClust[i++] = 0.000000;
376  LUT_CourbureClust[i++] = 0.875000;
377  LUT_CourbureClust[i++] = 1.000000;
378  LUT_CourbureClust[i++] = 0.000000;
379  LUT_CourbureClust[i++] = 0.890600;
380  LUT_CourbureClust[i++] = 1.000000;
381  LUT_CourbureClust[i++] = 0.000000;
382  LUT_CourbureClust[i++] = 0.906300;
383  LUT_CourbureClust[i++] = 1.000000;
384  LUT_CourbureClust[i++] = 0.000000;
385  LUT_CourbureClust[i++] = 0.921900;
386  LUT_CourbureClust[i++] = 1.000000;
387  LUT_CourbureClust[i++] = 0.000000;
388  LUT_CourbureClust[i++] = 0.937500;
389  LUT_CourbureClust[i++] = 1.000000;
390  LUT_CourbureClust[i++] = 0.000000;
391  LUT_CourbureClust[i++] = 0.953100;
392  LUT_CourbureClust[i++] = 1.000000;
393  LUT_CourbureClust[i++] = 0.000000;
394  LUT_CourbureClust[i++] = 0.968800;
395  LUT_CourbureClust[i++] = 1.000000;
396  LUT_CourbureClust[i++] = 0.000000;
397  LUT_CourbureClust[i++] = 0.984400;
398  LUT_CourbureClust[i++] = 1.000000;
399  LUT_CourbureClust[i++] = 0.000000;
400  LUT_CourbureClust[i++] = 1.000000;
401  LUT_CourbureClust[i++] = 1.000000;
402  LUT_CourbureClust[i++] = 0.015600;
403  LUT_CourbureClust[i++] = 1.000000;
404  LUT_CourbureClust[i++] = 1.000000;
405  LUT_CourbureClust[i++] = 0.031300;
406  LUT_CourbureClust[i++] = 1.000000;
407  LUT_CourbureClust[i++] = 0.984400;
408  LUT_CourbureClust[i++] = 0.046900;
409  LUT_CourbureClust[i++] = 1.000000;
410  LUT_CourbureClust[i++] = 0.968800;
411  LUT_CourbureClust[i++] = 0.062500;
412  LUT_CourbureClust[i++] = 1.000000;
413  LUT_CourbureClust[i++] = 0.953100;
414  LUT_CourbureClust[i++] = 0.078100;
415  LUT_CourbureClust[i++] = 1.000000;
416  LUT_CourbureClust[i++] = 0.937500;
417  LUT_CourbureClust[i++] = 0.093800;
418  LUT_CourbureClust[i++] = 1.000000;
419  LUT_CourbureClust[i++] = 0.921900;
420  LUT_CourbureClust[i++] = 0.109400;
421  LUT_CourbureClust[i++] = 1.000000;
422  LUT_CourbureClust[i++] = 0.906300;
423  LUT_CourbureClust[i++] = 0.125000;
424  LUT_CourbureClust[i++] = 1.000000;
425  LUT_CourbureClust[i++] = 0.890600;
426  LUT_CourbureClust[i++] = 0.140600;
427  LUT_CourbureClust[i++] = 1.000000;
428  LUT_CourbureClust[i++] = 0.875000;
429  LUT_CourbureClust[i++] = 0.156300;
430  LUT_CourbureClust[i++] = 1.000000;
431  LUT_CourbureClust[i++] = 0.859400;
432  LUT_CourbureClust[i++] = 0.171900;
433  LUT_CourbureClust[i++] = 1.000000;
434  LUT_CourbureClust[i++] = 0.843800;
435  LUT_CourbureClust[i++] = 0.187500;
436  LUT_CourbureClust[i++] = 1.000000;
437  LUT_CourbureClust[i++] = 0.828100;
438  LUT_CourbureClust[i++] = 0.203100;
439  LUT_CourbureClust[i++] = 1.000000;
440  LUT_CourbureClust[i++] = 0.812500;
441  LUT_CourbureClust[i++] = 0.218800;
442  LUT_CourbureClust[i++] = 1.000000;
443  LUT_CourbureClust[i++] = 0.796900;
444  LUT_CourbureClust[i++] = 0.234400;
445  LUT_CourbureClust[i++] = 1.000000;
446  LUT_CourbureClust[i++] = 0.781300;
447  LUT_CourbureClust[i++] = 0.250000;
448  LUT_CourbureClust[i++] = 1.000000;
449  LUT_CourbureClust[i++] = 0.765600;
450  LUT_CourbureClust[i++] = 0.265600;
451  LUT_CourbureClust[i++] = 1.000000;
452  LUT_CourbureClust[i++] = 0.750000;
453  LUT_CourbureClust[i++] = 0.281300;
454  LUT_CourbureClust[i++] = 1.000000;
455  LUT_CourbureClust[i++] = 0.734400;
456  LUT_CourbureClust[i++] = 0.296900;
457  LUT_CourbureClust[i++] = 1.000000;
458  LUT_CourbureClust[i++] = 0.718800;
459  LUT_CourbureClust[i++] = 0.312500;
460  LUT_CourbureClust[i++] = 1.000000;
461  LUT_CourbureClust[i++] = 0.703100;
462  LUT_CourbureClust[i++] = 0.328100;
463  LUT_CourbureClust[i++] = 1.000000;
464  LUT_CourbureClust[i++] = 0.687500;
465  LUT_CourbureClust[i++] = 0.343800;
466  LUT_CourbureClust[i++] = 1.000000;
467  LUT_CourbureClust[i++] = 0.671900;
468  LUT_CourbureClust[i++] = 0.359400;
469  LUT_CourbureClust[i++] = 1.000000;
470  LUT_CourbureClust[i++] = 0.656300;
471  LUT_CourbureClust[i++] = 0.375000;
472  LUT_CourbureClust[i++] = 1.000000;
473  LUT_CourbureClust[i++] = 0.640600;
474  LUT_CourbureClust[i++] = 0.390600;
475  LUT_CourbureClust[i++] = 1.000000;
476  LUT_CourbureClust[i++] = 0.625000;
477  LUT_CourbureClust[i++] = 0.406300;
478  LUT_CourbureClust[i++] = 1.000000;
479  LUT_CourbureClust[i++] = 0.609400;
480  LUT_CourbureClust[i++] = 0.421900;
481  LUT_CourbureClust[i++] = 1.000000;
482  LUT_CourbureClust[i++] = 0.593800;
483  LUT_CourbureClust[i++] = 0.437500;
484  LUT_CourbureClust[i++] = 1.000000;
485  LUT_CourbureClust[i++] = 0.578100;
486  LUT_CourbureClust[i++] = 0.453100;
487  LUT_CourbureClust[i++] = 1.000000;
488  LUT_CourbureClust[i++] = 0.562500;
489  LUT_CourbureClust[i++] = 0.468800;
490  LUT_CourbureClust[i++] = 1.000000;
491  LUT_CourbureClust[i++] = 0.546900;
492  LUT_CourbureClust[i++] = 0.484400;
493  LUT_CourbureClust[i++] = 1.000000;
494  LUT_CourbureClust[i++] = 0.531300;
495  LUT_CourbureClust[i++] = 0.500000;
496  LUT_CourbureClust[i++] = 1.000000;
497  LUT_CourbureClust[i++] = 0.515600;
498  LUT_CourbureClust[i++] = 0.515600;
499  LUT_CourbureClust[i++] = 1.000000;
500  LUT_CourbureClust[i++] = 0.500000;
501  LUT_CourbureClust[i++] = 0.531300;
502  LUT_CourbureClust[i++] = 1.000000;
503  LUT_CourbureClust[i++] = 0.484400;
504  LUT_CourbureClust[i++] = 0.546900;
505  LUT_CourbureClust[i++] = 1.000000;
506  LUT_CourbureClust[i++] = 0.468800;
507  LUT_CourbureClust[i++] = 0.562500;
508  LUT_CourbureClust[i++] = 1.000000;
509  LUT_CourbureClust[i++] = 0.453100;
510  LUT_CourbureClust[i++] = 0.578100;
511  LUT_CourbureClust[i++] = 1.000000;
512  LUT_CourbureClust[i++] = 0.437500;
513  LUT_CourbureClust[i++] = 0.593800;
514  LUT_CourbureClust[i++] = 1.000000;
515  LUT_CourbureClust[i++] = 0.421900;
516  LUT_CourbureClust[i++] = 0.609400;
517  LUT_CourbureClust[i++] = 1.000000;
518  LUT_CourbureClust[i++] = 0.406300;
519  LUT_CourbureClust[i++] = 0.625000;
520  LUT_CourbureClust[i++] = 1.000000;
521  LUT_CourbureClust[i++] = 0.390600;
522  LUT_CourbureClust[i++] = 0.640600;
523  LUT_CourbureClust[i++] = 1.000000;
524  LUT_CourbureClust[i++] = 0.375000;
525  LUT_CourbureClust[i++] = 0.656300;
526  LUT_CourbureClust[i++] = 1.000000;
527  LUT_CourbureClust[i++] = 0.359400;
528  LUT_CourbureClust[i++] = 0.671900;
529  LUT_CourbureClust[i++] = 1.000000;
530  LUT_CourbureClust[i++] = 0.343800;
531  LUT_CourbureClust[i++] = 0.687500;
532  LUT_CourbureClust[i++] = 1.000000;
533  LUT_CourbureClust[i++] = 0.328100;
534  LUT_CourbureClust[i++] = 0.703100;
535  LUT_CourbureClust[i++] = 1.000000;
536  LUT_CourbureClust[i++] = 0.312500;
537  LUT_CourbureClust[i++] = 0.718800;
538  LUT_CourbureClust[i++] = 1.000000;
539  LUT_CourbureClust[i++] = 0.296900;
540  LUT_CourbureClust[i++] = 0.734400;
541  LUT_CourbureClust[i++] = 1.000000;
542  LUT_CourbureClust[i++] = 0.281300;
543  LUT_CourbureClust[i++] = 0.750000;
544  LUT_CourbureClust[i++] = 1.000000;
545  LUT_CourbureClust[i++] = 0.265600;
546  LUT_CourbureClust[i++] = 0.765600;
547  LUT_CourbureClust[i++] = 1.000000;
548  LUT_CourbureClust[i++] = 0.250000;
549  LUT_CourbureClust[i++] = 0.781300;
550  LUT_CourbureClust[i++] = 1.000000;
551  LUT_CourbureClust[i++] = 0.234400;
552  LUT_CourbureClust[i++] = 0.796900;
553  LUT_CourbureClust[i++] = 1.000000;
554  LUT_CourbureClust[i++] = 0.218800;
555  LUT_CourbureClust[i++] = 0.812500;
556  LUT_CourbureClust[i++] = 1.000000;
557  LUT_CourbureClust[i++] = 0.203100;
558  LUT_CourbureClust[i++] = 0.828100;
559  LUT_CourbureClust[i++] = 1.000000;
560  LUT_CourbureClust[i++] = 0.187500;
561  LUT_CourbureClust[i++] = 0.843800;
562  LUT_CourbureClust[i++] = 1.000000;
563  LUT_CourbureClust[i++] = 0.171900;
564  LUT_CourbureClust[i++] = 0.859400;
565  LUT_CourbureClust[i++] = 1.000000;
566  LUT_CourbureClust[i++] = 0.156300;
567  LUT_CourbureClust[i++] = 0.875000;
568  LUT_CourbureClust[i++] = 1.000000;
569  LUT_CourbureClust[i++] = 0.140600;
570  LUT_CourbureClust[i++] = 0.890600;
571  LUT_CourbureClust[i++] = 1.000000;
572  LUT_CourbureClust[i++] = 0.125000;
573  LUT_CourbureClust[i++] = 0.906300;
574  LUT_CourbureClust[i++] = 1.000000;
575  LUT_CourbureClust[i++] = 0.109400;
576  LUT_CourbureClust[i++] = 0.921900;
577  LUT_CourbureClust[i++] = 1.000000;
578  LUT_CourbureClust[i++] = 0.093800;
579  LUT_CourbureClust[i++] = 0.937500;
580  LUT_CourbureClust[i++] = 1.000000;
581  LUT_CourbureClust[i++] = 0.078100;
582  LUT_CourbureClust[i++] = 0.953100;
583  LUT_CourbureClust[i++] = 1.000000;
584  LUT_CourbureClust[i++] = 0.062500;
585  LUT_CourbureClust[i++] = 0.968800;
586  LUT_CourbureClust[i++] = 1.000000;
587  LUT_CourbureClust[i++] = 0.046900;
588  LUT_CourbureClust[i++] = 0.984400;
589  LUT_CourbureClust[i++] = 1.000000;
590  LUT_CourbureClust[i++] = 0.031300;
591  LUT_CourbureClust[i++] = 1.000000;
592  LUT_CourbureClust[i++] = 1.000000;
593  LUT_CourbureClust[i++] = 0.015600;
594  LUT_CourbureClust[i++] = 1.000000;
595  LUT_CourbureClust[i++] = 1.000000;
596  LUT_CourbureClust[i++] = 0.000000;
597  LUT_CourbureClust[i++] = 1.000000;
598  LUT_CourbureClust[i++] = 0.984400;
599  LUT_CourbureClust[i++] = 0.000000;
600  LUT_CourbureClust[i++] = 1.000000;
601  LUT_CourbureClust[i++] = 0.968800;
602  LUT_CourbureClust[i++] = 0.000000;
603  LUT_CourbureClust[i++] = 1.000000;
604  LUT_CourbureClust[i++] = 0.953100;
605  LUT_CourbureClust[i++] = 0.000000;
606  LUT_CourbureClust[i++] = 1.000000;
607  LUT_CourbureClust[i++] = 0.937500;
608  LUT_CourbureClust[i++] = 0.000000;
609  LUT_CourbureClust[i++] = 1.000000;
610  LUT_CourbureClust[i++] = 0.921900;
611  LUT_CourbureClust[i++] = 0.000000;
612  LUT_CourbureClust[i++] = 1.000000;
613  LUT_CourbureClust[i++] = 0.906300;
614  LUT_CourbureClust[i++] = 0.000000;
615  LUT_CourbureClust[i++] = 1.000000;
616  LUT_CourbureClust[i++] = 0.890600;
617  LUT_CourbureClust[i++] = 0.000000;
618  LUT_CourbureClust[i++] = 1.000000;
619  LUT_CourbureClust[i++] = 0.875000;
620  LUT_CourbureClust[i++] = 0.000000;
621  LUT_CourbureClust[i++] = 1.000000;
622  LUT_CourbureClust[i++] = 0.859400;
623  LUT_CourbureClust[i++] = 0.000000;
624  LUT_CourbureClust[i++] = 1.000000;
625  LUT_CourbureClust[i++] = 0.843800;
626  LUT_CourbureClust[i++] = 0.000000;
627  LUT_CourbureClust[i++] = 1.000000;
628  LUT_CourbureClust[i++] = 0.828100;
629  LUT_CourbureClust[i++] = 0.000000;
630  LUT_CourbureClust[i++] = 1.000000;
631  LUT_CourbureClust[i++] = 0.812500;
632  LUT_CourbureClust[i++] = 0.000000;
633  LUT_CourbureClust[i++] = 1.000000;
634  LUT_CourbureClust[i++] = 0.796900;
635  LUT_CourbureClust[i++] = 0.000000;
636  LUT_CourbureClust[i++] = 1.000000;
637  LUT_CourbureClust[i++] = 0.781300;
638  LUT_CourbureClust[i++] = 0.000000;
639  LUT_CourbureClust[i++] = 1.000000;
640  LUT_CourbureClust[i++] = 0.765600;
641  LUT_CourbureClust[i++] = 0.000000;
642  LUT_CourbureClust[i++] = 1.000000;
643  LUT_CourbureClust[i++] = 0.750000;
644  LUT_CourbureClust[i++] = 0.000000;
645  LUT_CourbureClust[i++] = 1.000000;
646  LUT_CourbureClust[i++] = 0.734400;
647  LUT_CourbureClust[i++] = 0.000000;
648  LUT_CourbureClust[i++] = 1.000000;
649  LUT_CourbureClust[i++] = 0.718800;
650  LUT_CourbureClust[i++] = 0.000000;
651  LUT_CourbureClust[i++] = 1.000000;
652  LUT_CourbureClust[i++] = 0.703100;
653  LUT_CourbureClust[i++] = 0.000000;
654  LUT_CourbureClust[i++] = 1.000000;
655  LUT_CourbureClust[i++] = 0.687500;
656  LUT_CourbureClust[i++] = 0.000000;
657  LUT_CourbureClust[i++] = 1.000000;
658  LUT_CourbureClust[i++] = 0.671900;
659  LUT_CourbureClust[i++] = 0.000000;
660  LUT_CourbureClust[i++] = 1.000000;
661  LUT_CourbureClust[i++] = 0.656300;
662  LUT_CourbureClust[i++] = 0.000000;
663  LUT_CourbureClust[i++] = 1.000000;
664  LUT_CourbureClust[i++] = 0.640600;
665  LUT_CourbureClust[i++] = 0.000000;
666  LUT_CourbureClust[i++] = 1.000000;
667  LUT_CourbureClust[i++] = 0.625000;
668  LUT_CourbureClust[i++] = 0.000000;
669  LUT_CourbureClust[i++] = 1.000000;
670  LUT_CourbureClust[i++] = 0.609400;
671  LUT_CourbureClust[i++] = 0.000000;
672  LUT_CourbureClust[i++] = 1.000000;
673  LUT_CourbureClust[i++] = 0.593800;
674  LUT_CourbureClust[i++] = 0.000000;
675  LUT_CourbureClust[i++] = 1.000000;
676  LUT_CourbureClust[i++] = 0.578100;
677  LUT_CourbureClust[i++] = 0.000000;
678  LUT_CourbureClust[i++] = 1.000000;
679  LUT_CourbureClust[i++] = 0.562500;
680  LUT_CourbureClust[i++] = 0.000000;
681  LUT_CourbureClust[i++] = 1.000000;
682  LUT_CourbureClust[i++] = 0.546900;
683  LUT_CourbureClust[i++] = 0.000000;
684  LUT_CourbureClust[i++] = 1.000000;
685  LUT_CourbureClust[i++] = 0.531300;
686  LUT_CourbureClust[i++] = 0.000000;
687  LUT_CourbureClust[i++] = 1.000000;
688  LUT_CourbureClust[i++] = 0.515600;
689  LUT_CourbureClust[i++] = 0.000000;
690  LUT_CourbureClust[i++] = 1.000000;
691  LUT_CourbureClust[i++] = 0.500000;
692  LUT_CourbureClust[i++] = 0.000000;
693  LUT_CourbureClust[i++] = 1.000000;
694  LUT_CourbureClust[i++] = 0.484400;
695  LUT_CourbureClust[i++] = 0.000000;
696  LUT_CourbureClust[i++] = 1.000000;
697  LUT_CourbureClust[i++] = 0.468800;
698  LUT_CourbureClust[i++] = 0.000000;
699  LUT_CourbureClust[i++] = 1.000000;
700  LUT_CourbureClust[i++] = 0.453100;
701  LUT_CourbureClust[i++] = 0.000000;
702  LUT_CourbureClust[i++] = 1.000000;
703  LUT_CourbureClust[i++] = 0.437500;
704  LUT_CourbureClust[i++] = 0.000000;
705  LUT_CourbureClust[i++] = 1.000000;
706  LUT_CourbureClust[i++] = 0.421900;
707  LUT_CourbureClust[i++] = 0.000000;
708  LUT_CourbureClust[i++] = 1.000000;
709  LUT_CourbureClust[i++] = 0.406300;
710  LUT_CourbureClust[i++] = 0.000000;
711  LUT_CourbureClust[i++] = 1.000000;
712  LUT_CourbureClust[i++] = 0.390600;
713  LUT_CourbureClust[i++] = 0.000000;
714  LUT_CourbureClust[i++] = 1.000000;
715  LUT_CourbureClust[i++] = 0.375000;
716  LUT_CourbureClust[i++] = 0.000000;
717  LUT_CourbureClust[i++] = 1.000000;
718  LUT_CourbureClust[i++] = 0.359400;
719  LUT_CourbureClust[i++] = 0.000000;
720  LUT_CourbureClust[i++] = 1.000000;
721  LUT_CourbureClust[i++] = 0.343800;
722  LUT_CourbureClust[i++] = 0.000000;
723  LUT_CourbureClust[i++] = 1.000000;
724  LUT_CourbureClust[i++] = 0.328100;
725  LUT_CourbureClust[i++] = 0.000000;
726  LUT_CourbureClust[i++] = 1.000000;
727  LUT_CourbureClust[i++] = 0.312500;
728  LUT_CourbureClust[i++] = 0.000000;
729  LUT_CourbureClust[i++] = 1.000000;
730  LUT_CourbureClust[i++] = 0.296900;
731  LUT_CourbureClust[i++] = 0.000000;
732  LUT_CourbureClust[i++] = 1.000000;
733  LUT_CourbureClust[i++] = 0.281300;
734  LUT_CourbureClust[i++] = 0.000000;
735  LUT_CourbureClust[i++] = 1.000000;
736  LUT_CourbureClust[i++] = 0.265600;
737  LUT_CourbureClust[i++] = 0.000000;
738  LUT_CourbureClust[i++] = 1.000000;
739  LUT_CourbureClust[i++] = 0.250000;
740  LUT_CourbureClust[i++] = 0.000000;
741  LUT_CourbureClust[i++] = 1.000000;
742  LUT_CourbureClust[i++] = 0.234400;
743  LUT_CourbureClust[i++] = 0.000000;
744  LUT_CourbureClust[i++] = 1.000000;
745  LUT_CourbureClust[i++] = 0.218800;
746  LUT_CourbureClust[i++] = 0.000000;
747  LUT_CourbureClust[i++] = 1.000000;
748  LUT_CourbureClust[i++] = 0.203100;
749  LUT_CourbureClust[i++] = 0.000000;
750  LUT_CourbureClust[i++] = 1.000000;
751  LUT_CourbureClust[i++] = 0.187500;
752  LUT_CourbureClust[i++] = 0.000000;
753  LUT_CourbureClust[i++] = 1.000000;
754  LUT_CourbureClust[i++] = 0.171900;
755  LUT_CourbureClust[i++] = 0.000000;
756  LUT_CourbureClust[i++] = 1.000000;
757  LUT_CourbureClust[i++] = 0.156300;
758  LUT_CourbureClust[i++] = 0.000000;
759  LUT_CourbureClust[i++] = 1.000000;
760  LUT_CourbureClust[i++] = 0.140600;
761  LUT_CourbureClust[i++] = 0.000000;
762  LUT_CourbureClust[i++] = 1.000000;
763  LUT_CourbureClust[i++] = 0.125000;
764  LUT_CourbureClust[i++] = 0.000000;
765  LUT_CourbureClust[i++] = 1.000000;
766  LUT_CourbureClust[i++] = 0.109400;
767  LUT_CourbureClust[i++] = 0.000000;
768  LUT_CourbureClust[i++] = 1.000000;
769  LUT_CourbureClust[i++] = 0.093800;
770  LUT_CourbureClust[i++] = 0.000000;
771  LUT_CourbureClust[i++] = 1.000000;
772  LUT_CourbureClust[i++] = 0.078100;
773  LUT_CourbureClust[i++] = 0.000000;
774  LUT_CourbureClust[i++] = 1.000000;
775  LUT_CourbureClust[i++] = 0.062500;
776  LUT_CourbureClust[i++] = 0.000000;
777  LUT_CourbureClust[i++] = 1.000000;
778  LUT_CourbureClust[i++] = 0.046900;
779  LUT_CourbureClust[i++] = 0.000000;
780  LUT_CourbureClust[i++] = 1.000000;
781  LUT_CourbureClust[i++] = 0.031300;
782  LUT_CourbureClust[i++] = 0.000000;
783  LUT_CourbureClust[i++] = 1.000000;
784  LUT_CourbureClust[i++] = 0.015600;
785  LUT_CourbureClust[i++] = 0.000000;
786  LUT_CourbureClust[i++] = 1.000000;
787  LUT_CourbureClust[i++] = 0.000000;
788  LUT_CourbureClust[i++] = 0.000000;
789  LUT_CourbureClust[i++] = 0.984400;
790  LUT_CourbureClust[i++] = 0.000000;
791  LUT_CourbureClust[i++] = 0.000000;
792  LUT_CourbureClust[i++] = 0.968800;
793  LUT_CourbureClust[i++] = 0.000000;
794  LUT_CourbureClust[i++] = 0.000000;
795  LUT_CourbureClust[i++] = 0.953100;
796  LUT_CourbureClust[i++] = 0.000000;
797  LUT_CourbureClust[i++] = 0.000000;
798  LUT_CourbureClust[i++] = 0.937500;
799  LUT_CourbureClust[i++] = 0.000000;
800  LUT_CourbureClust[i++] = 0.000000;
801  LUT_CourbureClust[i++] = 0.921900;
802  LUT_CourbureClust[i++] = 0.000000;
803  LUT_CourbureClust[i++] = 0.000000;
804  LUT_CourbureClust[i++] = 0.906300;
805  LUT_CourbureClust[i++] = 0.000000;
806  LUT_CourbureClust[i++] = 0.000000;
807  LUT_CourbureClust[i++] = 0.890600;
808  LUT_CourbureClust[i++] = 0.000000;
809  LUT_CourbureClust[i++] = 0.000000;
810  LUT_CourbureClust[i++] = 0.875000;
811  LUT_CourbureClust[i++] = 0.000000;
812  LUT_CourbureClust[i++] = 0.000000;
813  LUT_CourbureClust[i++] = 0.859400;
814  LUT_CourbureClust[i++] = 0.000000;
815  LUT_CourbureClust[i++] = 0.000000;
816  LUT_CourbureClust[i++] = 0.843800;
817  LUT_CourbureClust[i++] = 0.000000;
818  LUT_CourbureClust[i++] = 0.000000;
819  LUT_CourbureClust[i++] = 0.828100;
820  LUT_CourbureClust[i++] = 0.000000;
821  LUT_CourbureClust[i++] = 0.000000;
822  LUT_CourbureClust[i++] = 0.812500;
823  LUT_CourbureClust[i++] = 0.000000;
824  LUT_CourbureClust[i++] = 0.000000;
825  LUT_CourbureClust[i++] = 0.796900;
826  LUT_CourbureClust[i++] = 0.000000;
827  LUT_CourbureClust[i++] = 0.000000;
828  LUT_CourbureClust[i++] = 0.781300;
829  LUT_CourbureClust[i++] = 0.000000;
830  LUT_CourbureClust[i++] = 0.000000;
831  LUT_CourbureClust[i++] = 0.765600;
832  LUT_CourbureClust[i++] = 0.000000;
833  LUT_CourbureClust[i++] = 0.000000;
834  LUT_CourbureClust[i++] = 0.750000;
835  LUT_CourbureClust[i++] = 0.000000;
836  LUT_CourbureClust[i++] = 0.000000;
837  LUT_CourbureClust[i++] = 0.734400;
838  LUT_CourbureClust[i++] = 0.000000;
839  LUT_CourbureClust[i++] = 0.000000;
840  LUT_CourbureClust[i++] = 0.718800;
841  LUT_CourbureClust[i++] = 0.000000;
842  LUT_CourbureClust[i++] = 0.000000;
843  LUT_CourbureClust[i++] = 0.703100;
844  LUT_CourbureClust[i++] = 0.000000;
845  LUT_CourbureClust[i++] = 0.000000;
846  LUT_CourbureClust[i++] = 0.687500;
847  LUT_CourbureClust[i++] = 0.000000;
848  LUT_CourbureClust[i++] = 0.000000;
849  LUT_CourbureClust[i++] = 0.671900;
850  LUT_CourbureClust[i++] = 0.000000;
851  LUT_CourbureClust[i++] = 0.000000;
852  LUT_CourbureClust[i++] = 0.656300;
853  LUT_CourbureClust[i++] = 0.000000;
854  LUT_CourbureClust[i++] = 0.000000;
855  LUT_CourbureClust[i++] = 0.640600;
856  LUT_CourbureClust[i++] = 0.000000;
857  LUT_CourbureClust[i++] = 0.000000;
858  LUT_CourbureClust[i++] = 0.625000;
859  LUT_CourbureClust[i++] = 0.000000;
860  LUT_CourbureClust[i++] = 0.000000;
861  LUT_CourbureClust[i++] = 0.609400;
862  LUT_CourbureClust[i++] = 0.000000;
863  LUT_CourbureClust[i++] = 0.000000;
864  LUT_CourbureClust[i++] = 0.593800;
865  LUT_CourbureClust[i++] = 0.000000;
866  LUT_CourbureClust[i++] = 0.000000;
867  LUT_CourbureClust[i++] = 0.578100;
868  LUT_CourbureClust[i++] = 0.000000;
869  LUT_CourbureClust[i++] = 0.000000;
870  LUT_CourbureClust[i++] = 0.562500;
871  LUT_CourbureClust[i++] = 0.000000;
872  LUT_CourbureClust[i++] = 0.000000;
873  LUT_CourbureClust[i++] = 0.546900;
874  LUT_CourbureClust[i++] = 0.000000;
875  LUT_CourbureClust[i++] = 0.000000;
876  LUT_CourbureClust[i++] = 0.531300;
877  LUT_CourbureClust[i++] = 0.000000;
878  LUT_CourbureClust[i++] = 0.000000;
879  LUT_CourbureClust[i++] = 0.515600;
880  LUT_CourbureClust[i++] = 0.000000;
881  LUT_CourbureClust[i++] = 0.000000;
882  }
883 
884  template< typename HalfedgeGraph,
885  typename VertexCurvatureMap,
886  typename VertexColorMap,
887  typename GeometryTraits = FEVV::Geometry_traits< HalfedgeGraph > >
888  void constructColorMap(const HalfedgeGraph &g,
889  VertexCurvatureMap &v_cm,
890  VertexColorMap &v_colorm,
891  double MinNrmMinCurvature,
892  double MaxNrmMinCurvature,
893  double MinNrmMaxCurvature,
894  double MaxNrmMaxCurvature,
895  int ColorField) // 0 : rien, 1 : min, 2 : max
896  {
897  typedef boost::graph_traits< HalfedgeGraph > GraphTraits;
898  typedef typename GraphTraits::vertex_iterator vertex_iterator;
899 
900  using Vector = typename GeometryTraits::Vector;
901 
902  double R;
903  int indiceLut;
904 
905  auto iterator_pair =
906  vertices(g); // vertices() returns a vertex_iterator pair
907  vertex_iterator vi = iterator_pair.first;
908  vertex_iterator vi_end = iterator_pair.second;
909  for(; vi != vi_end; ++vi)
910  {
911  if(ColorField == 1)
912  R = (v_cm[*vi].KminCurv - MinNrmMinCurvature) /
913  (MaxNrmMinCurvature - MinNrmMinCurvature) * 255;
914  else if(ColorField == 2)
915  R = (v_cm[*vi].KmaxCurv - MinNrmMaxCurvature) /
916  (MaxNrmMaxCurvature - MinNrmMaxCurvature) * 255;
917  else
918  R = 1;
919 
920  if(R > 255)
921  R = 255;
922  indiceLut = floor(R);
923 
924  v_colorm[*vi] = Vector(LUT_CourbureClust[3 * indiceLut],
925  LUT_CourbureClust[3 * indiceLut + 1],
926  LUT_CourbureClust[3 * indiceLut + 2]);
927  }
928  }
929 
930  template< typename HalfedgeGraph, typename VertexCurvatureMap, typename GuiPropertiesMap >
931  void curvature(HalfedgeGraph *_mesh,
932  GuiPropertiesMap &m_gpm,
933  VertexCurvatureMap &v_cm,
934  double &MinNrmMinCurvature,
935  double &MaxNrmMinCurvature,
936  double &MinNrmMaxCurvature,
937  double &MaxNrmMaxCurvature)
938  {
939  std::cout << "Asking to Curvature mesh ! " << std::endl;
940 
941  auto pm = get(boost::vertex_point, *_mesh);
942 
943  double max_bb_size = Filters::get_max_bb_size(*_mesh, pm);
944 
945  auto f_nm = make_property_map(FEVV::face_normal, *_mesh);
946 
947  Filters::calculate_face_normals(*_mesh, pm, f_nm);
948 
949  Filters::calculate_curvature( // B) call the filter corresponding to your
950  // operation
951  *_mesh,
952  v_cm,
953  pm,
954  f_nm,
955  *value_isGeod,
956  *value_radius * max_bb_size,
957  MinNrmMinCurvature,
958  MaxNrmMinCurvature,
959  MinNrmMaxCurvature,
960  MaxNrmMaxCurvature); // minimum and maximum values of the minimum and
961  // maximum curvature fields (usefull for color
962  // rendering)
963 
964  // change display mode to show filter result
965  auto gui_props = get(m_gpm, 0);
966  //gui_props.display_mode = FEVV::Types::DisplayMode::VERTEX_COLOR; // not used yet...
967  //gui_props.is_visible = true; // not necessary because true by default...
968  put(m_gpm, 0, gui_props);
969 
970  std::cout << "Curvature mesh, isGeod: " << *value_isGeod
971  << " - radius: " << *value_radius << "." << std::endl;
972  }
973 
974  //#define DBG_applyHG
975 
976  template< typename HalfedgeGraph >
977  void applyHG(BaseAdapterVisu *_adapter,
978  HalfedgeGraph *_mesh,
979  FEVV::PMapsContainer *pmaps_bag)
980  {
981  bool *Cmin_max = new bool(false);
982  bool *Dmin_max = new bool(false);
983 
984  if ( (*value_colorField) == 2 ) // 0 : rien, 1 : min, 2 : max
985  *Cmin_max = true;
986  else
987  *Cmin_max = false;
989  *Dmin_max = true;
990  else
991  *Dmin_max = false;
992 
993  // set/get filter parameters from dialog window
994  DialogCurvature1 dial1;
995  dial1.setCurvature(*value_isGeod, *value_radius, *Cmin_max, *Dmin_max);
996  if(dial1.exec() == QDialog::Accepted)
997  {
998  dial1.getCurvature(*value_isGeod, *value_radius, *Cmin_max, *Dmin_max);
999 
1000  if ( (*Cmin_max) )
1001  *value_colorField = 2; // 1 : min, 2 : max
1002  else
1003  *value_colorField = 1; // 1 : min, 2 : max
1004  if ( (*Dmin_max) )
1005  {
1006  *value_displayMinDirections = false;
1008  }
1009  else
1010  {
1012  *value_displayMaxDirections = false;
1013  }
1014 
1015  delete Cmin_max;
1016  delete Dmin_max;
1017  }
1018  else
1019  {
1020  delete Cmin_max;
1021  delete Dmin_max;
1022 
1023  return; // abort applying filter
1024  }
1025 
1026  using VertexCurvatureMapHG =
1028 
1029  static std::map<
1030  std::pair< BaseAdapterVisu *, HalfedgeGraph * >,
1031  std::tuple< VertexCurvatureMapHG, std::array< double, 4 > > >
1032  map_v_cmHG; // static to allow to not recompute
1033 
1034  // create property map to store vertex color
1035  auto v_colormHG = make_property_map(FEVV::vertex_color, *_mesh);
1036  put_property_map(FEVV::vertex_color, *_mesh, *pmaps_bag, v_colormHG);
1037 
1038  // sample/nothing to do with curvature - create property map to store edge
1039  // color
1040  using VectorHG = typename Geometry_traits< HalfedgeGraph >::Vector;
1041 
1042  auto e_colormHG = make_property_map(FEVV::edge_color, *_mesh);
1043  put_property_map(FEVV::edge_color, *_mesh, *pmaps_bag, e_colormHG);
1044 
1045  typedef boost::graph_traits< HalfedgeGraph > GraphTraits;
1046  typedef typename GraphTraits::edge_iterator edge_iterator;
1047  edge_iterator eb, ee;
1048  for(boost::tie(eb, ee) = edges(*_mesh); eb != ee; ++eb)
1049  put(e_colormHG, *eb, VectorHG(1., 1., 1.)); // here white color
1050  // sample/nothing to do with curvature - create property map to store edge
1051  // color
1052 
1053  // ---
1054 
1055  const std::pair< BaseAdapterVisu *, HalfedgeGraph * > p =
1056  std::make_pair(_adapter, _mesh);
1057 
1058  if((*value_forceCompute) || (map_v_cmHG.find(p) == map_v_cmHG.end()))
1059  {
1060  auto m_gpm =
1061  get_property_map(FEVV::mesh_guiproperties, *_mesh, *pmaps_bag);
1062 
1063  map_v_cmHG[p] = std::make_tuple(
1064  FEVV::make_vertex_property_map< HalfedgeGraph,
1066  *_mesh),
1067  std::array< double, 4 >());
1068 
1069  curvature(_mesh,
1070  m_gpm,
1071  std::get< 0 >(map_v_cmHG[p]),
1072  std::get< 1 >(map_v_cmHG[p])[0],
1073  std::get< 1 >(map_v_cmHG[p])[1],
1074  std::get< 1 >(map_v_cmHG[p])[2],
1075  std::get< 1 >(map_v_cmHG[p])[3]);
1076 
1077 #ifdef DBG_applyHG
1078  {
1079  VertexCurvatureMapHG curvMap = std::get< 0 >(map_v_cmHG[p]);
1080  uint v_count = 0;
1081  auto vit = vertices(*_mesh).first;
1082  auto vit_end = vertices(*_mesh).second;
1083  for(; vit != vit_end; ++vit)
1084  {
1085  v_count++;
1086  auto curvData = get(curvMap, *vit);
1087  std::cout << "vertex #" << v_count << std::endl;
1088  std::cout << "KmaxCurv = " << curvData.KmaxCurv << std::endl;
1089  std::cout << "KminCurv = " << curvData.KminCurv << std::endl;
1090  std::cout << "VKmaxCurv = " << curvData.VKmaxCurv[0] << " "
1091  << curvData.VKmaxCurv[1] << " " << curvData.VKmaxCurv[2]
1092  << std::endl;
1093  std::cout << "VKminCurv = " << curvData.VKminCurv[0] << " "
1094  << curvData.VKminCurv[1] << " " << curvData.VKminCurv[2]
1095  << std::endl;
1096  }
1097  }
1098 #endif
1099 
1100  //QMessageBox::information(0, "", QObject::tr("Curvature calculated."));
1101  }
1102 
1103  constructColorMap(*_mesh,
1104  std::get< 0 >(map_v_cmHG[p]),
1105  v_colormHG,
1106  std::get< 1 >(map_v_cmHG[p])[0],
1107  std::get< 1 >(map_v_cmHG[p])[1],
1108  std::get< 1 >(map_v_cmHG[p])[2],
1109  std::get< 1 >(map_v_cmHG[p])[3],
1110  (*value_colorField)); // 0 : rien, 1 : min, 2 : max
1111 
1112  // --- vertex_custom_vector, vertex_custom_vector_color and vertex_custom_vector_param
1114  {
1115  using VertexCustomVectorMap =
1117  HalfedgeGraph >::pmap_type;
1118 
1119  using VertexCustomVectorColorMap =
1121  HalfedgeGraph >::pmap_type;
1122 
1123  using VertexCustomVectorParamMap =
1125  HalfedgeGraph >::pmap_type;
1126 
1127  using vertex_iterator = typename GraphTraits::vertex_iterator;
1128 
1129  VertexCustomVectorMap v_CVm;
1131 
1132  VertexCustomVectorColorMap v_CVCm;
1134 
1135  VertexCustomVectorParamMap v_CVPm;
1137 
1138  VertexCurvatureMapHG curvMap = std::get< 0 >(map_v_cmHG[p]);
1139 
1140  auto iterator_pair = vertices(*_mesh); // vertices() returns a vertex_iterator pair
1141  vertex_iterator vi = iterator_pair.first;
1142  vertex_iterator vi_end = iterator_pair.second;
1143  for (; vi != vi_end; ++vi)
1144  {
1145  auto curvData = get(curvMap, *vi);
1146 
1148  {
1149  v_CVm[*vi] = VectorHG(curvData.VKminCurv[0], curvData.VKminCurv[1], curvData.VKminCurv[2]);
1150  v_CVCm[*vi] = VectorHG(139/255.0f, 195/255.0f, 74/255.0f); // LightGreen
1151  }
1152  else if (*value_displayMaxDirections)
1153  {
1154  v_CVm[*vi] = VectorHG(curvData.VKmaxCurv[0], curvData.VKmaxCurv[1], curvData.VKmaxCurv[2]);
1155  v_CVCm[*vi] = VectorHG(243/255.0f, 156/255.0f, 18/255.0f); // Orange
1156  }
1157 
1158  v_CVPm[*vi] = VectorHG(0.25f, 0.25f, 0.08f); // B_CV, E_CV, M_CV
1159  }
1160 
1161  put_property_map(FEVV::vertex_custom_vector, *_mesh, *pmaps_bag, v_CVm);
1162 
1163  put_property_map(FEVV::vertex_custom_vector_color, *_mesh, *pmaps_bag, v_CVCm);
1164 
1165  put_property_map(FEVV::vertex_custom_vector_param, *_mesh, *pmaps_bag, v_CVPm);
1166  }
1167  // --- vertex_custom_vector, vertex_custom_vector_color and vertex_custom_vector_param
1168 
1169  // ---
1170 
1171  auto viewer = dynamic_cast< SimpleViewer * >(_adapter->getViewer());
1172  if(viewer)
1173  {
1174  // sample/nothing to do with curvature - change GUI flags before draw
1175  //viewer->m_Lighting = false;
1176  //viewer->m_SmoothFlat_Shading = false;
1177 
1178  viewer->draw_or_redraw_mesh(_mesh, pmaps_bag, true, false);
1179  }
1180 
1181  //reset();
1182 
1183 #if(FEVV_USE_QT5)
1184  // empty
1185 #else
1186  viewer->frame(); // necessary or not ?
1187 #endif
1188  }
1189 
1190 #ifdef FEVV_USE_OPENMESH
1191  void apply(BaseAdapterVisu *_adapter,
1192  MeshOpenMesh *_mesh,
1193  FEVV::PMapsContainer *pmaps_bag) override
1194  {
1195  applyHG< MeshOpenMesh >(_adapter, _mesh, pmaps_bag);
1196  }
1197 #endif
1198 
1199 #ifdef FEVV_USE_CGAL
1200  void apply(BaseAdapterVisu *_adapter,
1201  MeshLCC *_mesh,
1202  FEVV::PMapsContainer *pmaps_bag) override
1203  {
1204  applyHG< MeshLCC >(_adapter, _mesh, pmaps_bag);
1205  }
1206 
1207  void apply(BaseAdapterVisu *_adapter,
1208  MeshSurface *_mesh,
1209  FEVV::PMapsContainer *pmaps_bag) override
1210  {
1211  applyHG< MeshSurface >(_adapter, _mesh, pmaps_bag);
1212  }
1213 
1214  void apply(BaseAdapterVisu *_adapter,
1215  MeshPolyhedron *_mesh,
1216  FEVV::PMapsContainer *pmaps_bag) override
1217  {
1218  applyHG< MeshPolyhedron >(_adapter, _mesh, pmaps_bag);
1219  }
1220 #endif
1221 
1222 #ifdef FEVV_USE_AIF
1223  void apply(BaseAdapterVisu *_adapter,
1224  MeshAIF *_mesh,
1225  FEVV::PMapsContainer *pmaps_bag) override
1226  {
1227  applyHG< MeshAIF >(_adapter, _mesh, pmaps_bag);
1228  }
1229 #endif
1230 
1231 
1232  QStringList Generic_plugins() const override
1233  {
1234  return QStringList() << "CurvaturePlugin";
1235  }
1236 
1237  bool Generic_plugin(const QString &/*plugin*/) override
1238  {
1239  SimpleWindow *sw = static_cast< SimpleWindow * >(window);
1240  // dynamic_cast fails under OS X
1241  sw->onModificationParam("curvature_qt_p", this);
1242  sw->onApplyButton();
1243 
1244  return true;
1245  }
1246 
1247 signals:
1248  void resetSignal();
1249 
1250 protected:
1251  bool *value_forceCompute = new bool(true);
1252 
1253  bool *value_isGeod = new bool(false);
1254  double *value_radius = new double(0.0);
1255 
1256  int *value_colorField = new int(0);
1257 
1258  bool *value_displayMinDirections = new bool(false);
1259  bool *value_displayMaxDirections = new bool(false);
1260 
1261  // ---
1262 
1264  double LUT_CourbureClust[3 * 256];
1265 };
1266 
1267 } // namespace FEVV
1268 
FEVV::BaseWindow::isInit
virtual bool isInit() const
Definition: BaseWindow.h:103
FEVV::DataStructures::AIF::vertices
std::pair< typename boost::graph_traits< FEVV::DataStructures::AIF::AIFMesh >::vertex_iterator, typename boost::graph_traits< FEVV::DataStructures::AIF::AIFMesh >::vertex_iterator > vertices(const FEVV::DataStructures::AIF::AIFMesh &sm)
Returns the iterator range of the vertices of the mesh.
Definition: Graph_traits_aif.h:172
FEVV::vertex_custom_vector_param
@ vertex_custom_vector_param
Definition: properties.h:61
FEVV::put_property_map
void put_property_map(PropertyT p, const MeshT &, PMapsContainer &pmaps, const typename PMap_traits< PropertyT, MeshT >::pmap_type &pmap)
Definition: properties.h:664
FEVV::CurvaturePlugin::addParameters
void addParameters(BaseWindow *_window) override
Definition: CurvaturePlugin.h:97
FEVV::CurvaturePlugin::value_displayMaxDirections
bool * value_displayMaxDirections
Definition: CurvaturePlugin.h:1259
Vector
AIFMesh::Vector Vector
Definition: Graph_properties_aif.h:22
FEVV::get_property_map
PMap_traits< PropertyT, MeshT >::pmap_type get_property_map(PropertyT p, const MeshT &, const PMapsContainer &pmaps)
Definition: properties.h:646
FEVV::SimpleWindow::onApplyButton
void onApplyButton()
Definition: SimpleWindow.inl:525
FEVV::Filters::v_Curv
Definition: curvature.hpp:41
FEVV::MeshLCC
CGAL::Linear_cell_complex_for_combinatorial_map< 2, 3, CGALLCCTraits, CGALItem > MeshLCC
Definition: DataStructures_cgal_linear_cell_complex.h:43
FEVV::DataStructures::AIF::edges
std::pair< typename boost::graph_traits< FEVV::DataStructures::AIF::AIFMesh >::edge_iterator, typename boost::graph_traits< FEVV::DataStructures::AIF::AIFMesh >::edge_iterator > edges(const FEVV::DataStructures::AIF::AIFMesh &sm)
Returns the iterator range of the edges of the mesh.
Definition: Graph_traits_aif.h:238
FEVV::CurvaturePlugin::resetSignal
void resetSignal()
FEVV::BasePluginQt
This class is intended to provide some standard message boxes to all plugins.
Definition: BasePluginQt.h:30
SimpleWindow.h
FEVV::CurvaturePlugin::value_radius
double * value_radius
Definition: CurvaturePlugin.h:1254
FEVV::DialogCurvature1
Definition: DialogCurvature1.h:23
FEVV::BaseAdapterVisu::getViewer
virtual Viewer * getViewer()
Definition: BaseAdapterVisu.h:130
properties_linear_cell_complex.h
FEVV::Geometry_traits< HalfedgeGraph >
FEVV::vertex_custom_vector_color_t
vertex_custom_vector_color_t
Definition: properties.h:57
FEVV::CurvaturePlugin
Definition: CurvaturePlugin.h:55
FEVV::CurvaturePlugin::Generic_plugin
bool Generic_plugin(const QString &) override
Definition: CurvaturePlugin.h:1237
FEVV::MeshSurface
CGAL::Surface_mesh< CGALPoint > MeshSurface
Definition: DataStructures_cgal_surface_mesh.h:23
FEVV::BaseAdapterVisu
Definition: BaseAdapterVisu.h:27
calculate_face_normals.hpp
properties_aif.h
FEVV::SimpleWindow
SimpleWindow is a specialization of QMainWindow. This class the Main Window.
Definition: SimpleWindow.h:80
FEVV::PMapsContainer
std::map< std::string, boost::any > PMapsContainer
Definition: properties.h:99
curvature.hpp
FEVV::SimpleViewer::draw_or_redraw_mesh
void draw_or_redraw_mesh(HalfedgeGraph *_g, PMapsContainer *_pmaps, bool _redraw=false, bool _recomputeNT_if_redraw=false, std::string _mesh_filename=std::string(""), bool _recreateOSGobj_if_redraw=true, float _step=0.)
Definition: SimpleViewer.inl:3415
FEVV::CurvaturePlugin::value_displayMinDirections
bool * value_displayMinDirections
Definition: CurvaturePlugin.h:1258
FEVV::Filters::calculate_curvature
void calculate_curvature(const HalfedgeGraph &g, VertexCurvatureMap &v_cm, const PointMap &pm, const FaceNormalMap &f_nm, bool is_geod, double radius, double &min_nrm_min_curvature, double &max_nrm_min_curvature, double &min_nrm_max_curvature, double &max_nrm_max_curvature, const GeometryTraits &gt)
Calculate the curvature for a mesh.
Definition: curvature.hpp:312
FEVV::get
FEVV::PCLPointCloudPointMap::value_type get(const FEVV::PCLPointCloudPointMap &pm, FEVV::PCLPointCloudPointMap::key_type key)
Specialization of get(point_map, key) for PCLPointCloud.
Definition: Graph_properties_pcl_point_cloud.h:117
FEVV::SimpleViewer
SimpleViewer is a specialization of osgViewer::CompositeViewer. This class is a widget where we are a...
Definition: SimpleViewer.h:180
properties_polyhedron_3.h
FEVV::SimpleWindow::onModificationParam
void onModificationParam(std::string _pluginName, BasePlugin *_plugin)
Definition: SimpleWindow.inl:505
FEVV::CurvaturePlugin::applyHG
void applyHG(BaseAdapterVisu *_adapter, HalfedgeGraph *_mesh, FEVV::PMapsContainer *pmaps_bag)
Definition: CurvaturePlugin.h:977
FEVV
Interfaces for plugins These interfaces will be used for different plugins.
Definition: Assert.h:16
FEVV::CurvaturePlugin::reset
void reset() override
Definition: CurvaturePlugin.h:90
FEVV::vertex_custom_vector_color
@ vertex_custom_vector_color
Definition: properties.h:57
properties_surface_mesh.h
FEVV::Filters::get_max_bb_size
double get_max_bb_size(const HalfedgeGraph &g, PointMap &pm, GeometryTraits &gt)
Gets the maximum size of the object bounding box.
Definition: get_max_bb_size.hpp:36
FEVV::CurvaturePlugin::value_colorField
int * value_colorField
Definition: CurvaturePlugin.h:1256
FEVV::vertex_custom_vector_param_t
vertex_custom_vector_param_t
Definition: properties.h:61
FEVV::edge_color
@ edge_color
Definition: properties.h:73
FEVV::CurvaturePlugin::value_isGeod
bool * value_isGeod
Definition: CurvaturePlugin.h:1253
FEVV::vertex_color
@ vertex_color
Definition: properties.h:47
FEVV::CurvaturePlugin::curvature
void curvature(HalfedgeGraph *_mesh, GuiPropertiesMap &m_gpm, VertexCurvatureMap &v_cm, double &MinNrmMinCurvature, double &MaxNrmMinCurvature, double &MinNrmMaxCurvature, double &MaxNrmMaxCurvature)
Definition: CurvaturePlugin.h:931
SimpleViewer.h
FEVV::vertex_custom_vector_t
vertex_custom_vector_t
Definition: properties.h:53
FEVV::make_vertex_property_map
Vertex_pmap_traits< MeshT, ValueT >::pmap_type make_vertex_property_map(const MeshT &m)
Definition: properties.h:736
FEVV::Filters::calculate_face_normals
void calculate_face_normals(const HalfedgeGraph &g, const PointMap &pm, FaceNormalMap fnm, const GeometryTraits &gt)
Calculate "some" normal of all the faces of the considered mesh and populate the argument provided Fa...
Definition: calculate_face_normals.hpp:40
FEVV::DataStructures::AIF::AIFVector
Definition: AIFProperties.h:173
FEVV::CurvaturePlugin::init
void init() override
Definition: CurvaturePlugin.h:70
FEVV::Vertex_pmap
typename Vertex_pmap_traits< MeshT, ValueT >::pmap_type Vertex_pmap
Definition: properties.h:607
BasePluginQt.h
properties_openmesh.h
FEVV::CurvaturePlugin::constructColorMap
void constructColorMap(const HalfedgeGraph &g, VertexCurvatureMap &v_cm, VertexColorMap &v_colorm, double MinNrmMinCurvature, double MaxNrmMinCurvature, double MinNrmMaxCurvature, double MaxNrmMaxCurvature, int ColorField)
Definition: CurvaturePlugin.h:888
FEVV::CurvaturePlugin::~CurvaturePlugin
~CurvaturePlugin()=default
FEVV::MeshOpenMesh
OpenMesh::PolyMesh_ArrayKernelT< MyTraits > MeshOpenMesh
Definition: DataStructures_openmesh.h:51
FEVV::put
void put(FEVV::PCLPointCloudPointMap &pm, FEVV::PCLPointCloudPointMap::key_type key, const FEVV::PCLPointCloudPointMap::value_type &value)
Specialization of put(point_map, key, value) for PCLPointCloud.
Definition: Graph_properties_pcl_point_cloud.h:126
FEVV::Generic_PluginInterface
Definition: PluginInterface.h:37
FEVV::CurvaturePlugin::initLUT
void initLUT()
Definition: CurvaturePlugin.h:111
FEVV::BasePluginQt::apply
virtual void apply(BaseAdapterVisu *, void *, FEVV::PMapsContainer *) override
Definition: BasePluginQt.h:108
get_max_bb_size.hpp
FEVV::vertex_custom_vector
@ vertex_custom_vector
Definition: properties.h:53
FEVV::CurvaturePlugin::value_forceCompute
bool * value_forceCompute
Definition: CurvaturePlugin.h:1251
PluginInterface.h
FEVV::_PMap_traits
Definition: properties.h:376
FEVV::DialogCurvature1::getCurvature
void getCurvature(bool &geod, double &radius, bool &Cmin_max, bool &Dmin_max)
Definition: DialogCurvature1.cpp:48
FEVV::BasePlugin::window
BaseWindow * window
Definition: BasePlugin.h:138
FEVV::DialogCurvature1::setCurvature
void setCurvature(bool geod, double radius, bool Cmin_max, bool Dmin_max)
Definition: DialogCurvature1.cpp:30
FEVV::BaseWindow
Definition: BaseWindow.h:25
properties.h
FEVV::CurvaturePlugin::CurvaturePlugin
CurvaturePlugin()
Definition: CurvaturePlugin.h:65
FEVV::MeshPolyhedron
CGAL::Polyhedron_3< CGALKernel, CGAL::Polyhedron_items_with_id_3 > MeshPolyhedron
Definition: DataStructures_cgal_polyhedron_3.h:33
FEVV::make_property_map
PMap_traits< PropertyT, MeshT >::pmap_type make_property_map(PropertyT, const MeshT &m)
Definition: properties.h:630
DialogCurvature1.h
FEVV::CurvaturePlugin::LUT_CourbureClust
double LUT_CourbureClust[3 *256]
Look-up table for color rendering (from blue to red)
Definition: CurvaturePlugin.h:1264
FEVV::CurvaturePlugin::Generic_plugins
QStringList Generic_plugins() const override
Definition: CurvaturePlugin.h:1232
FEVV::MeshAIF
FEVV::DataStructures::AIF::AIFMesh MeshAIF
Definition: DataStructures_aif.h:19
FEVV::mesh_guiproperties
@ mesh_guiproperties
Definition: properties.h:93
FEVV::CurvaturePlugin::init
void init(bool _forceCompute, bool _isGeod, double _radius, int _colorField, bool _displayMinDirections, bool _displayMaxDirections)
Definition: CurvaturePlugin.h:72
FEVV::face_normal
@ face_normal
Definition: properties.h:77