MEPP2 Project
SimpleAdapterVisu.inl
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.
12 
15 
16 #include <osgGA/MultiTouchTrackballManipulator>
17 
18 #include <QKeyEvent>
19 #include <QTextEdit> // test
20 #include <QMdiSubWindow> // test
21 
22 #include <iostream>
23 
24 #include <functional>
25 #include <thread>
26 
27 #include "Visualization/SimpleViewer.h" // @todo temp for getSelectedMeshes()
28 
30 
31 
32 inline
34  Qt::WindowFlags _f)
35  : BaseAdapterVisuQt(_parent, _f)
36 {
37 #ifdef DEBUG_VISU2
38  std::cout << "*** this=" << this << " entering " << __func__ << std::endl;
39 #endif
40 
41 #ifdef DEBUG_VISU2
42  std::cout << "*** this=" << this << " leaving " << __func__ << std::endl;
43 #endif
44 }
45 
46 
47 inline
48 void
50 {
51  init(false);
52 }
53 
54 
55 inline
56 void
57 FEVV::SimpleAdapterVisu::init(const bool /*_useMdiWindows*/)
58 {
59  if(!Assert::check(
60  !bIsInit, "is already init. Leaving...", "SimpleAdapterVisu::init"))
61  {
62  return;
63  }
64 
65  if(!Assert::check(myViewer != nullptr,
66  "No viewer attached. Leaving ...",
67  "SimpleAdapterVisu::init"))
68  {
69  return;
70  }
71 
72  // installEventFilter( this ); // @FIXME removed to debug child calls.
73 
74  connect(&timerUpdate, SIGNAL(timeout()), this, SLOT(update()));
75  timerUpdate.start(10);
76 
77  // reduce fps when app is idle
78  // setActive(false, 100);
79 
80 #ifdef DEBUG_VISU
82 #endif
83 
84  // myGraphicsWindow = new osgViewer::GraphicsWindowEmbedded( this->x(),
85  // this->y(), this->width(), this->height() );
86 
87 #if(FEVV_USE_QT5) // FOR_QT6
88  osg::ref_ptr< osg::Node > _scene = static_cast< BaseViewerOSG * >(myViewer)->getRootNode();
89 
90  // MIEUX DE L'AFFECTER à osgQOpenGLWindow (ou osgQOpenGLWidget) !!! RETROUVER EXEMPLE !!!
91  QSurfaceFormat format = QSurfaceFormat::defaultFormat();
92  #ifdef OSG_GL3_AVAILABLE
93  format.setVersion(3, 2);
94  format.setProfile(QSurfaceFormat::CoreProfile);
95  format.setRenderableType(QSurfaceFormat::OpenGL);
96  format.setOption(QSurfaceFormat::DebugContext);
97  //std::cout << "----------------------> OSG_GL3_AVAILABLE, QSurfaceFormat : (3, 2) - CoreProfile" << std::endl;
98  #else
99  format.setVersion(2, 0);
100  format.setProfile(QSurfaceFormat::CompatibilityProfile);
101  format.setRenderableType(QSurfaceFormat::OpenGL);
102  format.setOption(QSurfaceFormat::DebugContext);
103  //std::cout << "----------------------> QSurfaceFormat : (2, 0) - CompatibilityProfile" << std::endl;
104  #endif
105  format.setDepthBufferSize(24);
106  //format.setAlphaBufferSize(8);
107  format.setSamples(8);
108  format.setStencilBufferSize(8);
109  format.setSwapBehavior(QSurfaceFormat::DoubleBuffer);
110  QSurfaceFormat::setDefaultFormat(format);
111  // ---
112 
113  my_osgQOpenGLWindow = new osgQOpenGLWindow(/*this*/);
114 
115  const osgQOpenGLWindow *my_osgQOpenGLWindow_const = my_osgQOpenGLWindow;
116  const Viewer *myViewer_const = myViewer;
117 
118  QObject::connect(my_osgQOpenGLWindow_const, &osgQOpenGLWindow::initialized, [ my_osgQOpenGLWindow_const, _scene, myViewer_const ]
119  {
120  //std::cout << "----------------------> QObject::connect - QObject::connect - QObject::connect" << std::endl;
121 
122  //BoxT<T> * nonConstObj = const_cast<BoxT<T> *>(constObj); // https://stackoverflow.com/questions/7311041/const-to-non-const-conversion-in-c
123  osgQOpenGLWindow *my_osgQOpenGLWindow2 = const_cast<osgQOpenGLWindow *>(my_osgQOpenGLWindow_const);
124  Viewer *myViewer2 = const_cast<Viewer *>(myViewer_const);
125 
126  osg::Camera *camera = my_osgQOpenGLWindow2->getOsgViewer()->getCamera();
127  //camera->setGraphicsContext(myGraphicsWindow);
128 
129  //const osg::GraphicsContext::Traits *traits = myGraphicsWindow->getTraits();
130 
131  camera->setClearColor(osg::Vec4(0.2, /*0.2*/0.3, 0.6, 1.0));
132  //camera->setViewport( new osg::Viewport(0, 0, my_osgQOpenGLWindow2->width(), my_osgQOpenGLWindow2->height()) );
133 
134  // set the draw and read buffers up for a double buffered window
135  // with rendering going to back buffer
136  //camera->setDrawBuffer(GL_BACK);
137  //camera->setReadBuffer(GL_BACK);
138 
139  camera->setProjectionMatrixAsPerspective(
140  30.0f,
141  static_cast< double >(my_osgQOpenGLWindow2->width()) /
142  static_cast< double >(my_osgQOpenGLWindow2->height()),
143  1.0f,
144  10000.0f);
145 
146  // picking
147  SimpleViewer *viewer = dynamic_cast< SimpleViewer* >(myViewer2);
148  viewer->hudText = new osgText::Text;
149  my_osgQOpenGLWindow2->getOsgViewer()->addEventHandler(
150  new PickHandler(viewer, viewer->hudText.get()));
151  // picking
152 
153  my_osgQOpenGLWindow2->getOsgViewer()->setSceneData(_scene);
154  my_osgQOpenGLWindow2->getOsgViewer()->addEventHandler(new osgViewer::StatsHandler);
155  my_osgQOpenGLWindow2->getOsgViewer()->setCameraManipulator(new osgGA::MultiTouchTrackballManipulator);
156 
157  // MAIS pour ces 2 fonctions, MIEUX (TODO) de revoir le positionnement des appels initiaux pour garder la compatibilité (et voir aussi si d'autres cas de fonctions similaires...)
158  SimpleWindow *sw = static_cast< SimpleWindow * >(viewer->getWindow()); sw->centerHG(viewer);
160 
161  return 0;
162  });
163 
164  //my_osgQOpenGLWindow->asWidget()->setParent(this);
165  layout->addWidget(my_osgQOpenGLWindow->asWidget());
166  //my_osgQOpenGLWindow->asWidget()->show();
167 #else
168  addViewWidget(createGraphicsWindow(0, 0, 500, 500, "Viewer"),
169  static_cast< BaseViewerOSG * >(myViewer)->getRootNode());
170 #endif
171 
172  // @todo Setting Camera, lights, etc.
173 
174  bIsInit = true;
175 }
176 
177 
178 inline
179 bool
181 {
182  return bIsInit;
183 }
184 
185 
186 inline
187 bool
189 {
190  return bIsInit && (myViewer != nullptr);
191 }
192 
193 
194 #if(FEVV_USE_QT5) // FOR_QT6
195  // empty
196 #else
197 inline
198 void
200  osg::ref_ptr< osgQt::GraphicsWindowQt > _gw,
201  osg::ref_ptr< osg::Node > _scene)
202 {
203  if(myGraphicsWindow == nullptr)
204  {
205  myGraphicsWindow = _gw.get();
206  }
207 
208  // for osgViewer::CompositeViewer
209  /*osg::ref_ptr< osgViewer::View > view = new osgViewer::View;
210  static_cast< BaseViewerOSG* >( myViewer )->addView( view );*/
211  // for osgViewer::Viewer
212  BaseViewerOSG *bv = static_cast< BaseViewerOSG * >(myViewer);
213  osgViewer::View *view = dynamic_cast< osgViewer::View * >(bv);
214 
215  osg::Camera *camera = view->getCamera();
216  camera->setGraphicsContext(myGraphicsWindow);
217 
218  const osg::GraphicsContext::Traits *traits = myGraphicsWindow->getTraits();
219 
220  camera->setClearColor(osg::Vec4(0.2, 0.2, 0.6, 1.0));
221  camera->setViewport(new osg::Viewport(0, 0, traits->width, traits->height));
222 
223  // set the draw and read buffers up for a double buffered window
224  // with rendering going to back buffer
225  camera->setDrawBuffer(GL_BACK);
226  camera->setReadBuffer(GL_BACK);
227 
228  camera->setProjectionMatrixAsPerspective(
229  30.0f,
230  static_cast< double >(traits->width) /
231  static_cast< double >(traits->height),
232  1.0f,
233  10000.0f);
234 
235  // picking
236  SimpleViewer *viewer =
237  dynamic_cast< SimpleViewer* >(myViewer);
238  viewer->hudText = new osgText::Text;
239  view->addEventHandler(
240  new PickHandler(viewer, viewer->hudText.get()));
241  // picking
242 
243  view->setSceneData(_scene);
244  view->addEventHandler(new osgViewer::StatsHandler);
245  view->setCameraManipulator(new osgGA::MultiTouchTrackballManipulator);
246  // gw->setTouchEventsEnabled( true );
247 
248  auto *osgWidget = myGraphicsWindow->getGLWidget();
249  osgWidget->setParent(this);
250 
251 #ifdef DEBUG_VISU
253 #endif
254 
255  layout->addWidget(osgWidget);
256 }
257 
258 
259 inline
260 osg::ref_ptr< osgQt::GraphicsWindowQt >
262  int _x,
263  int _y,
264  int _w,
265  int _h,
266  const std::string &_name,
267  bool _windowDecoration) const
268 {
269  osg::DisplaySettings *ds = osg::DisplaySettings::instance().get();
270  osg::ref_ptr< osg::GraphicsContext::Traits > traits =
271  new osg::GraphicsContext::Traits;
272  traits->windowName = _name;
273  traits->windowDecoration = _windowDecoration;
274  traits->x = _x;
275  traits->y = _y;
276  traits->width = _w;
277  traits->height = _h;
278  traits->doubleBuffer = true;
279  traits->alpha = ds->getMinimumNumAlphaBits();
280  traits->stencil = ds->getMinimumNumStencilBits();
281  traits->sampleBuffers = ds->getMultiSamples();
282 
283  //traits->samples = ds->getNumMultiSamples();
284  traits->samples = 4; // important : now anti-aliasing is activated here with this value
285 
286  traits->vsync = 0; // 0 = disable vsync and 1 = enable vsync
287 
288  return new osgQt::GraphicsWindowQt(traits.get());
289 }
290 #endif
291 
292 // template< typename HalfedgeGraph >
293 // void
294 // FEVV::SimpleAdapterVisu<HalfedgeGraph>::attachMesh( HalfedgeGraph& _mesh )
295 // {
296 // meshes.push_back( {_mesh, false } );
297 // }
298 
299 // template< typename HalfedgeGraph >
300 // typename FEVV::SimpleAdapterVisu<HalfedgeGraph>::Viewer*
301 // FEVV::SimpleAdapterVisu<HalfedgeGraph>::getViewer()
302 // {
303 // Assert::check( myViewer != nullptr )
304 // BOOST_ASSERT_MSG( myViewer != nullptr, "[SimpleAdapterVisu::getViewer()]
305 // No viewer attached. Leaving ..." ); if( myViewer == nullptr )
306 // {
307 // std::cerr << "[SimpleAdapterVisu::getViewer()] No viewer attached.
308 // Leaving ..." << std::endl;
309 // }
310 // return myViewer;
311 // }
312 
313 // template< typename HalfedgeGraph >
314 // typename FEVV::SimpleAdapterVisu<HalfedgeGraph>::Window*
315 // FEVV::SimpleAdapterVisu<HalfedgeGraph>::getWindow()
316 // {
317 // BOOST_ASSERT_MSG( myWindow != nullptr, "[SimpleAdapterVisu] No window
318 // attached. Leaving ..." ); if( myWindow != nullptr )
319 // {
320 // std::cerr << "[SimpleAdapterVisu] No window attached. Leaving ..." <<
321 // std::endl;
322 // }
323 // return myWindow;
324 // }
325 
329 
330 
331 #if 0
332 inline
333 void
334 FEVV::SimpleAdapterVisu::keyPressEvent(QKeyEvent *event)
335 {
336  QString keyString = event->text();
337  const char *keyData = keyString.toLocal8Bit().data();
338 
339  if(event->modifiers() == Qt::ControlModifier && event->key() == Qt::Key_S)
340  {
341  std::cout << "Received CTRL + S " << event->text().toStdString()
342  << std::endl;
343  myViewer->saveScreenshot("export_screenshot"); // @FIXME Only viewer #0
344  return;
345  }
346 
347  this->getEventQueue()->keyPress(osgGA::GUIEventAdapter::KeySymbol(*keyData));
348 }
349 
350 
351 inline
352 void
353 FEVV::SimpleAdapterVisu::keyReleaseEvent(QKeyEvent *event)
354 {
355  QString keyString = event->text();
356  const char *keyData = keyString.toLocal8Bit().data();
357 
358  this->getEventQueue()->keyRelease(
359  osgGA::GUIEventAdapter::KeySymbol(*keyData));
360 }
361 #endif
362 
363 
364 #if 0
365 inline
366 osgGA::EventQueue *
367 FEVV::SimpleAdapterVisu::getEventQueue() const
368 {
369  Assert::check(myGraphicsWindow != nullptr,
370  "myGraphicsWindow is not initialized.",
371  "SimpleAdapterVisu::getEventQueue");
372 
373  osgGA::EventQueue *eventQueue = myGraphicsWindow->getEventQueue();
374 
375  if(eventQueue)
376  {
377  return eventQueue;
378  }
379  else
380  {
381  throw std::runtime_error("Unable to obtain valid event queue");
382  }
383 }
384 #endif
385 
386 
387 inline
388 bool
390 {
391  bool handled = QWidget::event(_event);
392 
393  // if( event->type() != QEvent::Paint)
394  // std::cout << "Received event " << event->type() << std::endl;
395 
396  // This ensures that the OSG widget is always going to be repainted after the
397  // user performed some interaction. Doing this in the event handler ensures
398  // that we don't forget about some event and prevents duplicate code.
399  switch(_event->type())
400  {
401  case QEvent::KeyPress:
402  case QEvent::KeyRelease:
403  case QEvent::ShortcutOverride:
404  case QEvent::Resize:
405  // case QEvent::MouseButtonDblClick:
406  // case QEvent::MouseButtonPress:
407  // case QEvent::MouseButtonRelease:
408  // case QEvent::MouseMove:
409  // case QEvent::Wheel:
410  this->update();
411  break;
412 
413  default:
414  break;
415  }
416 
417  return handled;
418 }
419 
420 
421 inline
422 bool
424  QEvent *_event)
425 {
426  switch(_event->type())
427  {
428  // case QEvent::ChildAdded:
429  // {
430  // QChildEvent* ce = static_cast<QChildEvent*>( _event );
431  // // Install the filter to each new child object created
432  // // ce->child()->installEventFilter(this); // @FIXME removed to debug
433  // child calls. break;
434  // }
435  // case QEvent::ChildRemoved:
436  // {
437  // QChildEvent* ce = static_cast<QChildEvent*>( _event );
438  // // Remove the the filter from each new child object removed
439  // // ce->child()->removeEventFilter(this); // @FIXME removed to debug
440  // child calls. break;
441  // }
442  case QEvent::KeyPress:
443  case QEvent::KeyRelease:
444  {
445  QKeyEvent *ke = static_cast< QKeyEvent * >(_event);
446  event(ke);
447 
448  return true;
449  }
450 
451  default:
452  break;
453  }
454 
455  return QWidget::eventFilter(_obj, _event);
456 }
457 
458 // template< typename HalfedgeGraph >
459 // std::vector< HalfedgeGraph >
460 // FEVV::SimpleAdapterVisu<HalfedgeGraph>::getSelectedMeshes()
461 // {
462 // std::vector< HalfedgeGraph> result;
463 // for_each( meshes.begin(), meshes.end(),
464 // [&result](std::pair<HalfedgeGraph,bool> m)
465 // {
466 // if(m.second)
467 // {
468 // result.push_back(m.first);
469 // }
470 // } );
471 // return myViewer->getSelectedMeshes();
472 // }
473 
474 
475 inline
476 void
478 {
480  std::vector< FEVV::PMapsContainer * > properties_maps;
481 
482  auto viewer = dynamic_cast< SimpleViewer * >(myViewer);
483 
484  if(viewer)
485  {
486  meshes = viewer->getSelectedMeshes();
487  properties_maps = viewer->getSelected_properties_maps();
488  }
489 
490  if(meshes.size() > 0)
491  {
492  // case where a mesh is already loaded and selected
493  // apply the plugin to the selected mesh
494 
495  for(unsigned i = 0; i < meshes.size(); i++)
496  {
497  std::cout << "Applying filter" << std::endl;
498 
499 #ifdef FEVV_USE_CGAL
500  if(meshes[i].second == "POLYHEDRON")
501  {
502  auto mesh_ptr = static_cast< FEVV::MeshPolyhedron* >(meshes[i].first);
503  myPlugin->apply(this, mesh_ptr, properties_maps[i]);
504  }
505  if(meshes[i].second == "SURFACEMESH")
506  {
507  auto mesh_ptr = static_cast< FEVV::MeshSurface* >(meshes[i].first);
508  myPlugin->apply(this, mesh_ptr, properties_maps[i]);
509  }
510  if(meshes[i].second == "LCC")
511  {
512  auto mesh_ptr = static_cast< FEVV::MeshLCC* >(meshes[i].first);
513  myPlugin->apply(this, mesh_ptr, properties_maps[i]);
514  }
515  if(meshes[i].second == "CGALPOINTSET")
516  {
517  auto mesh_ptr = static_cast< FEVV::CGALPointSet* >(meshes[i].first);
518  myPlugin->apply(this, mesh_ptr, properties_maps[i]);
519  }
520 #endif //FEVV_USE_CGAL
521 
522 #ifdef FEVV_USE_OPENMESH
523  if(meshes[i].second == "OPENMESH")
524  {
525  auto mesh_ptr = static_cast< FEVV::MeshOpenMesh* >(meshes[i].first);
526  myPlugin->apply(this, mesh_ptr, properties_maps[i]);
527  }
528 #endif //FEVV_USE_OPENMESH
529 
530 #ifdef FEVV_USE_AIF
531  if(meshes[i].second == "AIF")
532  {
533  auto mesh_ptr = static_cast< FEVV::MeshAIF* >(meshes[i].first);
534  myPlugin->apply(this, mesh_ptr, properties_maps[i]);
535  }
536 #endif //FEVV_USE_AIF
537 
538 #ifdef FEVV_USE_PCL
539  if(meshes[i].second == "PCLPOINTCLOUD")
540  {
541  auto mesh_ptr = static_cast< FEVV::PCLPointCloud* >(meshes[i].first);
542  myPlugin->apply(this, mesh_ptr, properties_maps[i]);
543  }
544 #endif //FEVV_USE_PCL
545  }
546  }
547  else
548  {
549  // case where no viewer is opened or no mesh is loaded
550  // apply the plugin to a null mesh
551  myPlugin->apply(this, static_cast< void * >(nullptr), nullptr);
552  }
553 }
554 
555 /*template< typename HalfedgeGraph >
556 void FEVV::SimpleAdapterVisu<HalfedgeGraph>::setActive( const bool val, const
557 int freq )
558 {
559  if (val)
560  {
561  timerUpdate.setInterval(10);
562  }
563  else
564  {
565  timerUpdate.setInterval(freq);
566  }
567 }*/
FEVV::SimpleViewer::changeBackgroundColor
bool changeBackgroundColor(const Color &_color) override
Definition: SimpleViewer.inl:285
OSGDebug.hpp
FEVV::BasePlugin::apply
virtual void apply(BaseAdapterVisu *, void *, FEVV::PMapsContainer *)
Definition: BasePlugin.h:55
FEVV::CGALPointSet
CGAL::Point_set_3< CGALPointSetPoint > CGALPointSet
Definition: DataStructures_cgal_point_set.h:71
FEVV::SimpleAdapterVisu::createGraphicsWindow
osg::ref_ptr< osgQt::GraphicsWindowQt > createGraphicsWindow(int _x, int _y, int _w, int _h, const std::string &_name="", bool _windowDecoration=false) const
Definition: SimpleAdapterVisu.inl:261
BaseViewerOSG.h
FEVV::MeshLCC
CGAL::Linear_cell_complex_for_combinatorial_map< 2, 3, CGALLCCTraits, CGALItem > MeshLCC
Definition: DataStructures_cgal_linear_cell_complex.h:43
FEVV::BaseViewer
Definition: BaseViewer.h:43
FEVV::Color::Yellow
static Color Yellow(void)
Definition: Color.inl:407
FEVV::Helpers::changeBackgroundColor
void changeBackgroundColor(QWidget *_widget, const Color &_color)
Definition: QtHelpers.cpp:14
FEVV::BaseViewerOSG
Definition: BaseViewerOSG.h:47
PickHandler.h
FEVV::PCLPointCloud
pcl::PointCloud< PCLEnrichedPoint > PCLPointCloud
Definition: DataStructures_pcl_point_cloud.h:28
FEVV::BaseViewer::getWindow
Window * getWindow()
Definition: BaseViewer.h:164
FEVV::MixedMeshesVector
Functions to retrieve the name of the datastructure according to the mesh type.
Definition: SimpleViewer.h:138
FEVV::MixedMeshesVector::size
std::size_t size(void)
Definition: SimpleViewer.h:158
FEVV::MeshSurface
CGAL::Surface_mesh< CGALPoint > MeshSurface
Definition: DataStructures_cgal_surface_mesh.h:23
FEVV::SimpleWindow
SimpleWindow is a specialization of QMainWindow. This class the Main Window.
Definition: SimpleWindow.h:80
QtHelpers.h
FEVV::SimpleViewer
SimpleViewer is a specialization of osgViewer::CompositeViewer. This class is a widget where we are a...
Definition: SimpleViewer.h:180
FEVV::SimpleAdapterVisu::addViewWidget
void addViewWidget(osg::ref_ptr< osgQt::GraphicsWindowQt > _gw, osg::ref_ptr< osg::Node > _scene)
Definition: SimpleAdapterVisu.inl:199
FEVV::Color::WetAsphalt
static Color WetAsphalt(void)
Definition: Color.inl:500
FEVV::SimpleViewer::hudText
osg::ref_ptr< osgText::Text > hudText
Definition: SimpleViewer.h:774
FEVV::PickHandler
Definition: PickHandler.h:24
FEVV::SimpleAdapterVisu::isInit
bool isInit() const override
Definition: SimpleAdapterVisu.inl:180
FEVV::SimpleAdapterVisu::init
void init() override
Definition: SimpleAdapterVisu.inl:49
SimpleViewer.h
FEVV::SimpleAdapterVisu::apply
void apply(Plugin *myPlugin) override
Definition: SimpleAdapterVisu.inl:477
FEVV::Color::Red
static Color Red(void)
Definition: Color.inl:335
FEVV::Assert::check
static bool check(const bool _check, const std::string &_message, const std::string &_where="")
Definition: Assert.h:70
FEVV::SimpleWindow::centerHG
void centerHG(FEVV::SimpleViewer *viewer)
Definition: SimpleWindow.inl:2039
FEVV::SimpleAdapterVisu::eventFilter
bool eventFilter(QObject *obj, QEvent *event) override
Definition: SimpleAdapterVisu.inl:423
FEVV::BaseAdapterVisuQt
Definition: BaseAdapterVisuQt.h:22
FEVV::MeshOpenMesh
OpenMesh::PolyMesh_ArrayKernelT< MyTraits > MeshOpenMesh
Definition: DataStructures_openmesh.h:51
FEVV::SimpleAdapterVisu::event
virtual bool event(QEvent *event) override
Definition: SimpleAdapterVisu.inl:389
FEVV::DataStructures::AIF::AIFMesh
This class represents an AIF structure. AIF structure can deal with both manifold and non-manifold su...
Definition: AIFMesh.hpp:47
FEVV::BasePlugin
Definition: BasePlugin.h:38
FEVV::SimpleAdapterVisu::SimpleAdapterVisu
SimpleAdapterVisu(QWidget *_parent=0, Qt::WindowFlags _f=Qt::Widget)
Definition: SimpleAdapterVisu.inl:33
FEVV::MeshPolyhedron
CGAL::Polyhedron_3< CGALKernel, CGAL::Polyhedron_items_with_id_3 > MeshPolyhedron
Definition: DataStructures_cgal_polyhedron_3.h:33
FEVV::SimpleAdapterVisu::isValid
bool isValid() const override
Definition: SimpleAdapterVisu.inl:188