widget for surface modifying @detail available 3 modes: add (move surface region in direction of normal) remove (move surface region in opposite direction to normal) relax (relax surface region)  
 More...
#include <MRSurfaceManipulationWidget.h>
|  | 
| MRVIEWER_API bool | onMouseDown_ (MouseButton button, int modifiers) override | 
|  | start modifying mesh surface 
 | 
|  | 
| MRVIEWER_API bool | onMouseUp_ (MouseButton button, int modifiers) override | 
|  | stop modifying mesh surface, generate history action 
 | 
|  | 
| MRVIEWER_API bool | onMouseMove_ (int mouse_x, int mouse_y) override | 
|  | update 
 | 
|  | 
| MRVIEWER_API void | postDraw_ () override | 
|  | need to visualize bad region (draw grey circle) 
 | 
|  | 
| virtual MRVIEWER_API bool | checkModifiers_ (int modifiers) const | 
|  | 
| virtual MRVIEWER_API void | appendMeshChangeHistory_ (std::shared_ptr< Mesh > newMesh, const FaceBitSet &newFaces) | 
|  | 
| void | reallocData_ (size_t size) | 
|  | 
| void | clearData_ () | 
|  | 
| void | initConnections_ () | 
|  | 
| void | resetConnections_ () | 
|  | 
| void | changeSurface_ () | 
|  | 
| void | updateUVmap_ (bool set, bool wholeMesh=false) | 
|  | 
| void | updateRegion_ (const Vector2f &mousePos) | 
|  | 
| void | abortEdit_ () | 
|  | 
| void | laplacianPickVert_ (const PointOnFace &pick) | 
|  | Laplacian. 
 | 
|  | 
| void | laplacianMoveVert_ (const Vector2f &mousePos) | 
|  | 
| void | updateVizualizeSelection_ () | 
|  | 
| void | updateRegionUVs_ (const VertBitSet ®ion) | 
|  | 
| void | updateValueChanges_ (const VertBitSet ®ion) | 
|  | 
| void | updateValueChangesPointToPoint_ (const VertBitSet ®ion) | 
|  | 
| void | updateValueChangesPointToPlane_ (const VertBitSet ®ion) | 
|  | 
| void | updateValueChangesExactDistance_ (const VertBitSet ®ion) | 
|  | 
| void | createLastStableObjMesh_ () | 
|  | 
| void | removeLastStableObjMesh_ () | 
|  | 
| void | compressChangePointsAction_ () | 
|  | 
| void | updateDistancesAndRegion_ (const Mesh &mesh, const VertBitSet &start, VertScalars &distances, VertBitSet ®ion, const VertBitSet *untouchable) | 
|  | 
widget for surface modifying @detail available 3 modes: add (move surface region in direction of normal) remove (move surface region in opposite direction to normal) relax (relax surface region) 
◆ DeviationCalculationMethod
Method for calculating mesh changes. 
| Enumerator | 
|---|
| PointToPoint | distance between the start and end points  | 
| PointToPlane | distance between the initial plane (starting point and normal to it) and the end point  | 
| ExactDistance | distance between the start and end meshes  | 
 
 
◆ WorkMode
widget work modes 
| Enumerator | 
|---|
| Add |  | 
| Remove |  | 
| Relax |  | 
| Laplacian |  | 
| Patch |  | 
 
 
◆ SurfaceManipulationWidget()
      
        
          | MRVIEWER_API MR::SurfaceManipulationWidget::SurfaceManipulationWidget | ( |  | ) |  | 
      
 
 
◆ ~SurfaceManipulationWidget()
  
  | 
        
          | virtual MRVIEWER_API MR::SurfaceManipulationWidget::~SurfaceManipulationWidget | ( |  | ) |  |  | virtual | 
 
 
◆ abortEdit_()
  
  | 
        
          | void MR::SurfaceManipulationWidget::abortEdit_ | ( |  | ) |  |  | protected | 
 
 
◆ appendMeshChangeHistory_()
  
  | 
        
          | virtual MRVIEWER_API void MR::SurfaceManipulationWidget::appendMeshChangeHistory_ | ( | std::shared_ptr< Mesh > | newMesh, |  
          |  |  | const FaceBitSet & | newFaces ) |  | protectedvirtual | 
 
called to change mesh with history record newFaces seems to be useful 
 
 
◆ changeSurface_()
  
  | 
        
          | void MR::SurfaceManipulationWidget::changeSurface_ | ( |  | ) |  |  | protected | 
 
 
◆ checkModifiers_()
  
  | 
        
          | virtual MRVIEWER_API bool MR::SurfaceManipulationWidget::checkModifiers_ | ( | int | modifiers | ) | const |  | inlineprotectedvirtual | 
 
customize modifiers check on mouse down 
- Returns
- true if widget consumes event, false if modifiers do not satisfy widget requirements 
 
 
◆ clearData_()
  
  | 
        
          | void MR::SurfaceManipulationWidget::clearData_ | ( |  | ) |  |  | protected | 
 
 
◆ compressChangePointsAction_()
  
  | 
        
          | void MR::SurfaceManipulationWidget::compressChangePointsAction_ | ( |  | ) |  |  | protected | 
 
this function is called after all modifications are finished; if we previously appended SmartChangeMeshPointsAction, then switch it from uncompressed to compressed format to occupy less amount of memory 
 
 
◆ createLastStableObjMesh_()
  
  | 
        
          | void MR::SurfaceManipulationWidget::createLastStableObjMesh_ | ( |  | ) |  |  | protected | 
 
 
◆ deviationCalculationMethod()
get method for calculating mesh changes 
 
 
◆ enableDeviationVisualization()
      
        
          | MRVIEWER_API void MR::SurfaceManipulationWidget::enableDeviationVisualization | ( | bool | enable | ) |  | 
      
 
enable visualization of mesh deviations 
 
 
◆ getMinMax()
      
        
          | MRVIEWER_API Vector2f MR::SurfaceManipulationWidget::getMinMax | ( |  | ) |  | 
      
 
get min / max point shifts for (usefull for setup palette) 
 
 
◆ getMinRadius()
  
  | 
        
          | MRVIEWER_API float MR::SurfaceManipulationWidget::getMinRadius | ( |  | ) |  |  | inline | 
 
mimum radius of editing area. 
 
 
◆ getSettings()
  
  | 
        
          | MRVIEWER_API const Settings & MR::SurfaceManipulationWidget::getSettings | ( |  | ) |  |  | inline | 
 
 
◆ ignoreOcclusion()
  
  | 
        
          | MRVIEWER_API bool MR::SurfaceManipulationWidget::ignoreOcclusion | ( |  | ) | const |  | inline | 
 
 
◆ init()
      
        
          | MRVIEWER_API void MR::SurfaceManipulationWidget::init | ( | const std::shared_ptr< ObjectMesh > & | objectMesh | ) |  | 
      
 
 
◆ initConnections_()
  
  | 
        
          | void MR::SurfaceManipulationWidget::initConnections_ | ( |  | ) |  |  | protected | 
 
 
◆ isEditOnlyCodirectedSurface()
  
  | 
        
          | bool MR::SurfaceManipulationWidget::isEditOnlyCodirectedSurface | ( |  | ) | const |  | inline | 
 
get state of an editable region restriction 
 
 
◆ laplacianMoveVert_()
  
  | 
        
          | void MR::SurfaceManipulationWidget::laplacianMoveVert_ | ( | const Vector2f & | mousePos | ) |  |  | protected | 
 
 
◆ laplacianPickVert_()
  
  | 
        
          | void MR::SurfaceManipulationWidget::laplacianPickVert_ | ( | const PointOnFace & | pick | ) |  |  | protected | 
 
 
◆ onMouseDown_()
  
  | 
        
          | MRVIEWER_API bool MR::SurfaceManipulationWidget::onMouseDown_ | ( | MouseButton | button, |  
          |  |  | int | modifiers ) |  | overrideprotected | 
 
start modifying mesh surface 
 
 
◆ onMouseMove_()
  
  | 
        
          | MRVIEWER_API bool MR::SurfaceManipulationWidget::onMouseMove_ | ( | int | mouse_x, |  
          |  |  | int | mouse_y ) |  | overrideprotected | 
 
 
◆ onMouseUp_()
  
  | 
        
          | MRVIEWER_API bool MR::SurfaceManipulationWidget::onMouseUp_ | ( | MouseButton | button, |  
          |  |  | int | modifiers ) |  | overrideprotected | 
 
stop modifying mesh surface, generate history action 
 
 
◆ palette()
  
  | 
        
          | Palette & MR::SurfaceManipulationWidget::palette | ( |  | ) |  |  | inline | 
 
get palette used for visualization point shifts 
 
 
◆ postDraw_()
  
  | 
        
          | MRVIEWER_API void MR::SurfaceManipulationWidget::postDraw_ | ( |  | ) |  |  | overrideprotected | 
 
need to visualize bad region (draw grey circle) 
 
 
◆ reallocData_()
  
  | 
        
          | void MR::SurfaceManipulationWidget::reallocData_ | ( | size_t | size | ) |  |  | protected | 
 
 
◆ removeLastStableObjMesh_()
  
  | 
        
          | void MR::SurfaceManipulationWidget::removeLastStableObjMesh_ | ( |  | ) |  |  | protected | 
 
 
◆ reset()
      
        
          | MRVIEWER_API void MR::SurfaceManipulationWidget::reset | ( |  | ) |  | 
      
 
 
◆ resetConnections_()
  
  | 
        
          | void MR::SurfaceManipulationWidget::resetConnections_ | ( |  | ) |  |  | protected | 
 
 
◆ sameValidVerticesAsInOriginMesh()
  
  | 
        
          | MRVIEWER_API bool MR::SurfaceManipulationWidget::sameValidVerticesAsInOriginMesh | ( |  | ) | const |  | inline | 
 
checks for a one-to-one correspondence between the vertices of the original grid and the modified one 
 
 
◆ setDeviationCalculationMethod()
set method for calculating mesh changes 
 
 
◆ setEditOnlyCodirectedSurface()
  
  | 
        
          | void MR::SurfaceManipulationWidget::setEditOnlyCodirectedSurface | ( | bool | edit | ) |  |  | inline | 
 
restricts editable area to vertices whose normals look into the same half-space as normal under cursor 
 
 
◆ setFixedRegion()
      
        
          | MRVIEWER_API void MR::SurfaceManipulationWidget::setFixedRegion | ( | const FaceBitSet & | region | ) |  | 
      
 
lock the mesh region (vertices in this region cannot be moved, added or deleted) 
- Note
- boundary edges can be split to improve quality of the patch 
 
 
◆ setIgnoreOcclusion()
  
  | 
        
          | MRVIEWER_API void MR::SurfaceManipulationWidget::setIgnoreOcclusion | ( | bool | ignore | ) |  |  | inline | 
 
allow the user to edit parts of object that are hidden in the current view by other objects 
 
 
◆ setSettings()
      
        
          | MRVIEWER_API void MR::SurfaceManipulationWidget::setSettings | ( | const Settings & | settings | ) |  | 
      
 
set widget settings (mesh change settings) 
 
 
◆ updateDistancesAndRegion_()
  
  | 
        
          | void MR::SurfaceManipulationWidget::updateDistancesAndRegion_ | ( | const Mesh & | mesh, |  
          |  |  | const VertBitSet & | start, |  
          |  |  | VertScalars & | distances, |  
          |  |  | VertBitSet & | region, |  
          |  |  | const VertBitSet * | untouchable ) |  | protected | 
 
 
◆ updateRegion_()
  
  | 
        
          | void MR::SurfaceManipulationWidget::updateRegion_ | ( | const Vector2f & | mousePos | ) |  |  | protected | 
 
 
◆ updateRegionUVs_()
  
  | 
        
          | void MR::SurfaceManipulationWidget::updateRegionUVs_ | ( | const VertBitSet & | region | ) |  |  | protected | 
 
 
◆ updateTexture()
      
        
          | MRVIEWER_API void MR::SurfaceManipulationWidget::updateTexture | ( |  | ) |  | 
      
 
update texture used for colorize surface (use after change colorMap in palette) 
 
 
◆ updateUVmap_()
  
  | 
        
          | void MR::SurfaceManipulationWidget::updateUVmap_ | ( | bool | set, |  
          |  |  | bool | wholeMesh = false ) |  | protected | 
 
 
◆ updateUVs()
      
        
          | MRVIEWER_API void MR::SurfaceManipulationWidget::updateUVs | ( |  | ) |  | 
      
 
update texture uv coords used for colorize surface (use after change ranges in palette) 
 
 
◆ updateValueChanges_()
  
  | 
        
          | void MR::SurfaceManipulationWidget::updateValueChanges_ | ( | const VertBitSet & | region | ) |  |  | protected | 
 
 
◆ updateValueChangesExactDistance_()
  
  | 
        
          | void MR::SurfaceManipulationWidget::updateValueChangesExactDistance_ | ( | const VertBitSet & | region | ) |  |  | protected | 
 
 
◆ updateValueChangesPointToPlane_()
  
  | 
        
          | void MR::SurfaceManipulationWidget::updateValueChangesPointToPlane_ | ( | const VertBitSet & | region | ) |  |  | protected | 
 
 
◆ updateValueChangesPointToPoint_()
  
  | 
        
          | void MR::SurfaceManipulationWidget::updateValueChangesPointToPoint_ | ( | const VertBitSet & | region | ) |  |  | protected | 
 
 
◆ updateVizualizeSelection_()
  
  | 
        
          | void MR::SurfaceManipulationWidget::updateVizualizeSelection_ | ( |  | ) |  |  | protected | 
 
 
◆ activePickedVertices_
  
  | 
        
          | VertBitSet MR::SurfaceManipulationWidget::activePickedVertices_ |  | protected | 
 
vertices that are considered under mouse in curernt frame (could be many in case of fast mouse mouvement) 
 
 
◆ appendHistoryAction_
  
  | 
        
          | bool MR::SurfaceManipulationWidget::appendHistoryAction_ = false |  | protected | 
 
true if historyAction_ is prepared but not yet appended to HistoryStore, which is done on first mouse move 
 
 
◆ badRegion_
  
  | 
        
          | bool MR::SurfaceManipulationWidget::badRegion_ = false |  | protected | 
 
need to save settings in re-initial 
 
 
◆ changedRegion_
  
  | 
        
          | VertBitSet MR::SurfaceManipulationWidget::changedRegion_ |  | protected | 
 
 
◆ connectionsInitialized_
  
  | 
        
          | bool MR::SurfaceManipulationWidget::connectionsInitialized_ = false |  | protected | 
 
 
◆ deviationCalculationMethod_
◆ editingDistanceMap_
  
  | 
        
          | VertScalars MR::SurfaceManipulationWidget::editingDistanceMap_ |  | protected | 
 
 
◆ editOnlyCodirectedSurface_
  
  | 
        
          | bool MR::SurfaceManipulationWidget::editOnlyCodirectedSurface_ = true |  | protected | 
 
 
◆ enableDeviationTexture_
  
  | 
        
          | bool MR::SurfaceManipulationWidget::enableDeviationTexture_ = false |  | protected | 
 
 
◆ firstInit_
  
  | 
        
          | bool MR::SurfaceManipulationWidget::firstInit_ = true |  | protected | 
 
 
◆ generalEditingRegion_
  
  | 
        
          | VertBitSet MR::SurfaceManipulationWidget::generalEditingRegion_ |  | protected | 
 
united region of tool application since the last mouse down 
 
 
◆ historyAction_
  
  | 
        
          | std::shared_ptr<SmartChangeMeshPointsAction> MR::SurfaceManipulationWidget::historyAction_ |  | protected | 
 
 
◆ ignoreOcclusion_
  
  | 
        
          | bool MR::SurfaceManipulationWidget::ignoreOcclusion_ = false |  | protected | 
 
allow the user to edit parts of object that are hidden in the current view by other objects 
 
 
◆ laplacian_
  
  | 
        
          | std::unique_ptr<Laplacian> MR::SurfaceManipulationWidget::laplacian_ |  | protected | 
 
 
◆ lastStableObjMesh_
  
  | 
        
          | std::shared_ptr<ObjectMesh> MR::SurfaceManipulationWidget::lastStableObjMesh_ |  | protected | 
 
 
◆ lastStableValueChanges_
  
  | 
        
          | VertScalars MR::SurfaceManipulationWidget::lastStableValueChanges_ |  | protected | 
 
 
◆ meshChangedConnection_
  
  | 
        
          | boost::signals2::scoped_connection MR::SurfaceManipulationWidget::meshChangedConnection_ |  | protected | 
 
 
◆ minRadius_
  
  | 
        
          | float MR::SurfaceManipulationWidget::minRadius_ = 1.f |  | protected | 
 
 
◆ mousePos_
  
  | 
        
          | Vector2f MR::SurfaceManipulationWidget::mousePos_ |  | protected | 
 
mouse position of last updateRegion_ 
 
 
◆ mousePressed_
  
  | 
        
          | bool MR::SurfaceManipulationWidget::mousePressed_ = false |  | protected | 
 
in selected region less than 3 points 
 
 
◆ obj_
  
  | 
        
          | std::shared_ptr<ObjectMesh> MR::SurfaceManipulationWidget::obj_ |  | protected | 
 
 
◆ originalMesh_
  
  | 
        
          | std::shared_ptr<Mesh> MR::SurfaceManipulationWidget::originalMesh_ |  | protected | 
 
 
◆ ownMeshChangedSignal_
  
  | 
        
          | bool MR::SurfaceManipulationWidget::ownMeshChangedSignal_ = false |  | protected | 
 
 
◆ palette_
  
  | 
        
          | std::shared_ptr<Palette> MR::SurfaceManipulationWidget::palette_ |  | protected | 
 
 
◆ pointsShift_
  
  | 
        
          | VertScalars MR::SurfaceManipulationWidget::pointsShift_ |  | protected | 
 
 
◆ sameValidVerticesAsInOriginMesh_
  
  | 
        
          | bool MR::SurfaceManipulationWidget::sameValidVerticesAsInOriginMesh_ = true |  | protected | 
 
 
◆ settings_
  
  | 
        
          | Settings MR::SurfaceManipulationWidget::settings_ |  | protected | 
 
 
◆ singleEditingRegion_
  
  | 
        
          | VertBitSet MR::SurfaceManipulationWidget::singleEditingRegion_ |  | protected | 
 
current (under the cursor) region of tool application 
 
 
◆ storedDown_
  
  | 
        
          | Vector2i MR::SurfaceManipulationWidget::storedDown_ |  | protected | 
 
initial position of fixed vertex 
 
 
◆ timePoint_
  
  | 
        
          | std::chrono::time_point<std::chrono::high_resolution_clock> MR::SurfaceManipulationWidget::timePoint_ |  | protected | 
 
 
◆ touchVertId_
  
  | 
        
          | VertId MR::SurfaceManipulationWidget::touchVertId_ |  | protected | 
 
 
◆ touchVertIniPos_
  
  | 
        
          | Vector3f MR::SurfaceManipulationWidget::touchVertIniPos_ |  | protected | 
 
we fix this vertex in Laplacian and move it manually 
 
 
◆ unchangeableVerts_
  
  | 
        
          | VertBitSet MR::SurfaceManipulationWidget::unchangeableVerts_ |  | protected | 
 
 
◆ unknownSign_
  
  | 
        
          | VertBitSet MR::SurfaceManipulationWidget::unknownSign_ |  | protected | 
 
cached data to avoid reallocating memory 
 
 
◆ valueChanges_
  
  | 
        
          | VertScalars MR::SurfaceManipulationWidget::valueChanges_ |  | protected | 
 
 
◆ visualizationDistanceMap_
  
  | 
        
          | VertScalars MR::SurfaceManipulationWidget::visualizationDistanceMap_ |  | protected | 
 
 
◆ visualizationRegion_
  
  | 
        
          | VertBitSet MR::SurfaceManipulationWidget::visualizationRegion_ |  | protected | 
 
vertices of triangles partially or fully highlighted with red 
 
 
The documentation for this class was generated from the following file: