Skip to content

Commit

Permalink
Merge pull request #57 from andrsd/2d-3d
Browse files Browse the repository at this point in the history
2D/3D style interaction
  • Loading branch information
andrsd committed Jan 7, 2022
2 parents 356144b + 399647d commit 2a6eb33
Show file tree
Hide file tree
Showing 9 changed files with 74 additions and 12 deletions.
3 changes: 3 additions & 0 deletions otter/plugins/common/ExodusIIReader.py
Original file line number Diff line number Diff line change
Expand Up @@ -124,3 +124,6 @@ def getTotalNumberOfElements(self):

def getTotalNumberOfNodes(self):
return self._reader.GetTotalNumberOfNodes()

def getDimensionality(self):
return self._reader.GetDimensionality()
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
import vtk
from PyQt5 import QtCore, QtGui


class OtterInteractorStyle(vtk.vtkInteractorStyleTrackballCamera):
class OtterInteractorInterface:

def __init__(self, widget):
super().__init__()
self._widget = widget
self._last_mouse_pos = None
self._left_button_down = False
Expand All @@ -23,7 +21,6 @@ def onLeftButtonPress(self, interactor_style, event):
click_pos = interactor.GetEventPosition()
pt = QtCore.QPoint(click_pos[0], click_pos[1])
self._last_mouse_pos = pt
super().OnLeftButtonDown()

def onLeftButtonRelease(self, interactor_style, event):
self._left_button_down = False
Expand All @@ -32,7 +29,6 @@ def onLeftButtonRelease(self, interactor_style, event):
pt = QtCore.QPoint(click_pos[0], click_pos[1])
if self._last_mouse_pos == pt:
self._widget.onClicked(pt)
super().OnLeftButtonUp()

def onKeyPress(self, interactor_style, event):
interactor = interactor_style.GetInteractor()
Expand Down
19 changes: 19 additions & 0 deletions otter/plugins/common/OtterInteractorStyle2D.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import vtk
from otter.plugins.common.OtterInteractorInterface import \
OtterInteractorInterface


class OtterInteractorStyle2D(vtk.vtkInteractorStyleImage,
OtterInteractorInterface):

def __init__(self, widget):
vtk.vtkInteractorStyleImage.__init__(self)
OtterInteractorInterface.__init__(self, widget)

def onLeftButtonPress(self, interactor_style, event):
super().onLeftButtonPress(interactor_style, event)
super().OnLeftButtonDown()

def onLeftButtonRelease(self, interactor_style, event):
super().onLeftButtonRelease(interactor_style, event)
super().OnLeftButtonUp()
19 changes: 19 additions & 0 deletions otter/plugins/common/OtterInteractorStyle3D.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import vtk
from otter.plugins.common.OtterInteractorInterface import \
OtterInteractorInterface


class OtterInteractorStyle3D(vtk.vtkInteractorStyleTrackballCamera,
OtterInteractorInterface):

def __init__(self, widget):
vtk.vtkInteractorStyleImage.__init__(self)
OtterInteractorInterface.__init__(self, widget)

def onLeftButtonPress(self, interactor_style, event):
super().onLeftButtonPress(interactor_style, event)
super().OnLeftButtonDown()

def onLeftButtonRelease(self, interactor_style, event):
super().onLeftButtonRelease(interactor_style, event)
super().OnLeftButtonUp()
6 changes: 6 additions & 0 deletions otter/plugins/common/PetscHDF5Reader.py
Original file line number Diff line number Diff line change
Expand Up @@ -311,6 +311,9 @@ def getBlockInfo(self):
def getSideSetInfo(self):
return self._sideset_info

def getDimensionality(self):
return self._cell_dim


class PetscHDF5Reader(Reader):
"""
Expand Down Expand Up @@ -372,3 +375,6 @@ def getTotalNumberOfElements(self):

def getTotalNumberOfNodes(self):
return self._reader.GetTotalNumberOfNodes()

def getDimensionality(self):
return self._reader.getDimensionality()
3 changes: 3 additions & 0 deletions otter/plugins/common/Reader.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,3 +48,6 @@ def getTotalNumberOfElements(self):

def getTotalNumberOfNodes(self):
return None

def getDimensionality(self):
return None
6 changes: 6 additions & 0 deletions otter/plugins/common/VTKReader.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,3 +70,9 @@ def getTotalNumberOfElements(self):

def getTotalNumberOfNodes(self):
return self._reader.GetOutput().GetNumberOfPoints()

def getDimensionality(self):
# FIXME: get this from the cell type
# unstr_grid = self._reader.GetOutput()
# cells = unstr_grid.GetCells()
return None
20 changes: 15 additions & 5 deletions otter/plugins/mesh_inspector/MeshWindow.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@
from PyQt5 import QtCore, QtWidgets, QtGui
from vtk.qt.QVTKRenderWindowInteractor import QVTKRenderWindowInteractor
from otter.plugins.PluginWindowBase import PluginWindowBase
from otter.plugins.common.OtterInteractorStyle import OtterInteractorStyle
from otter.plugins.common.OtterInteractorStyle3D import OtterInteractorStyle3D
from otter.plugins.common.OtterInteractorStyle2D import OtterInteractorStyle2D
from otter.plugins.common.ExodusIIReader import ExodusIIReader
from otter.plugins.common.VTKReader import VTKReader
from otter.plugins.common.PetscHDF5Reader import PetscHDF5Reader
Expand Down Expand Up @@ -312,7 +313,7 @@ def setupVtk(self):
self._vtk_render_window = self._vtk_widget.GetRenderWindow()
self._vtk_interactor = self._vtk_render_window.GetInteractor()

self._vtk_interactor.SetInteractorStyle(OtterInteractorStyle(self))
self._vtk_interactor.SetInteractorStyle(OtterInteractorStyle3D(self))

# TODO: set background from preferences/templates
self._vtk_renderer.SetGradientBackground(True)
Expand Down Expand Up @@ -413,9 +414,6 @@ def onLoadFinished(self):
self._cube_axes_actor.SetBounds(*bnds)
self._vtk_renderer.AddViewProp(self._cube_axes_actor)

self._vtk_renderer.ResetCamera()
self._vtk_renderer.GetActiveCamera().Zoom(1.5)

params = {
'blocks': reader.getBlocks(),
'sidesets': reader.getSideSets(),
Expand All @@ -442,6 +440,18 @@ def onLoadFinished(self):

self.updateMenuBar()

if reader.getDimensionality() == 3:
style = OtterInteractorStyle3D(self)
else:
style = OtterInteractorStyle2D(self)
self._vtk_interactor.SetInteractorStyle(style)

camera = self._vtk_renderer.GetActiveCamera()
focal_point = camera.GetFocalPoint()
camera.SetPosition(focal_point[0], focal_point[1], 1)
camera.SetRoll(0)
self._vtk_renderer.ResetCamera()

def _addBlockActors(self):
camera = self._vtk_renderer.GetActiveCamera()
reader = self._load_thread.getReader()
Expand Down
4 changes: 2 additions & 2 deletions otter/plugins/model_inspector/ModelWindow.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
from otter.plugins.model_inspector.InputReader import InputReader
from otter.plugins.common.LoadFileEvent import LoadFileEvent
import otter.plugins.common as common
from otter.plugins.common.OtterInteractorStyle import OtterInteractorStyle
from otter.plugins.common.OtterInteractorStyle3D import OtterInteractorStyle3D
from otter.assets import Assets


Expand Down Expand Up @@ -75,7 +75,7 @@ def __init__(self, plugin):
self._vtk_render_window = self._vtk_widget.GetRenderWindow()
self._vtk_interactor = self._vtk_render_window.GetInteractor()

self._style = OtterInteractorStyle(self)
self._style = OtterInteractorStyle3D(self)
self._vtk_interactor.SetInteractorStyle(self._style)

# TODO: set background from preferences/templates
Expand Down

0 comments on commit 2a6eb33

Please sign in to comment.