Skip to content

Commit 2ba0494

Browse files
authored
Merge pull request #280 from k-dominik/auto-2d3d-tilewidth
Set tilewidth automatically for 2D and 3D data
2 parents 2b55981 + 96154e4 commit 2ba0494

File tree

3 files changed

+41
-8
lines changed

3 files changed

+41
-8
lines changed

volumina/imageScene2D.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@
4040
from volumina.tiling import Tiling, TileProvider
4141
from volumina.layerstack import LayerStackModel
4242
from volumina.pixelpipeline.imagepump import StackedImageSources
43-
from volumina.utility import preferences
4443

4544
import datetime
4645
import threading
@@ -296,7 +295,7 @@ def cacheSize(self):
296295

297296
def setTileWidth(self, tileWidth):
298297
self._tileWidth = tileWidth
299-
preferences.set("ImageScene2D", "tileWidth", tileWidth)
298+
self.reset()
300299

301300
def tileWidth(self):
302301
return self._tileWidth
@@ -400,7 +399,7 @@ def __init__(
400399
self._offsetX = 0
401400
self._offsetY = 0
402401
self.name = name
403-
self._tileWidth = preferences.get("ImageScene2D", "tileWidth", default=512)
402+
self._tileWidth = 256
404403

405404
self._stackedImageSources = StackedImageSources(LayerStackModel())
406405
self._showTileOutlines = False

volumina/volumeEditor.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,10 @@ def showCropLines(self, visible):
255255
for view in self.imageViews:
256256
view.showCropLines(visible)
257257

258+
def setTileWidth(self, tileWidth):
259+
for i in self.imageScenes:
260+
i.setTileWidth(tileWidth)
261+
258262
def cleanUp(self):
259263
QApplication.processEvents()
260264
for scene in self._imageViews:

volumina/volumeEditorWidget.py

Lines changed: 35 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@
5959
from .pixelpipeline.datasources import ArraySource
6060
from .volumeEditor import VolumeEditor
6161
from volumina.utility import ShortcutManager
62+
from volumina.utility import preferences
6263

6364

6465
class __TimerEventEater(QObject):
@@ -269,6 +270,8 @@ def onShapeChanged():
269270
self.editor.imageViews[i].setHudVisible(self.hudsShown[i])
270271
self.quadview.statusBar.crosshairsCheckbox.setChecked(False)
271272

273+
self._updateTileWidth()
274+
272275
self.quadview.statusBar.crosshairsCheckbox.setVisible(True)
273276

274277
if self.editor.cropModel.cropZero() or None in self.editor.cropModel.get_roi_3d()[0]:
@@ -324,6 +327,33 @@ def _rubberBandZoom(self):
324327
self.editor.imageViews[self.editor._lastImageViewFocus]._cursorBackup
325328
)
326329

330+
def _updateTileWidth(self):
331+
tile_width = self._getTileWidth()
332+
self.editor.setTileWidth(tile_width)
333+
334+
def _getTileWidthConfigKeyDefault(self):
335+
singletons_spacial = sum(1 for dim in self.editor.posModel.shape if dim == 1)
336+
assert singletons_spacial in range(2)
337+
if singletons_spacial == 0:
338+
# 3D data
339+
key = "tileWidth3D"
340+
default = 256
341+
else:
342+
# 2D data
343+
key = "tileWidth"
344+
default = 512
345+
return key, default
346+
347+
def _getTileWidth(self):
348+
key, default = self._getTileWidthConfigKeyDefault()
349+
tile_width = preferences.get("ImageScene2D", key, default=default)
350+
return tile_width
351+
352+
def _setTileWidth(self, value):
353+
key, _ = self._getTileWidthConfigKeyDefault()
354+
preferences.set("ImageScene2D", key, value)
355+
self._updateTileWidth()
356+
327357
def _toggleHUDs(self, checked):
328358
for v in self.editor.imageViews:
329359
v.setHudVisible(checked)
@@ -576,9 +606,10 @@ def changeTileWidth():
576606
dlg.setWindowTitle("Viewer Tile Width")
577607
dlg.setModal(True)
578608

609+
saved = self._getTileWidth()
579610
spinBox = QSpinBox(parent=dlg)
580611
spinBox.setRange(128, 10 * 1024)
581-
spinBox.setValue(self.editor.imageScenes[0].tileWidth())
612+
spinBox.setValue(saved)
582613

583614
ctrl_layout = QHBoxLayout()
584615
ctrl_layout.addSpacerItem(QSpacerItem(10, 0, QSizePolicy.Expanding))
@@ -597,12 +628,11 @@ def changeTileWidth():
597628
dlg_layout.addWidget(button_box)
598629

599630
dlg.setLayout(dlg_layout)
631+
spinBox.setFocus()
600632

601633
if dlg.exec_() == QDialog.Accepted:
602-
for s in self.editor.imageScenes:
603-
if s.tileWidth != spinBox.value():
604-
s.setTileWidth(spinBox.value())
605-
s.reset()
634+
if spinBox.value() != saved:
635+
self._setTileWidth(spinBox.value())
606636

607637
self._viewMenu.addAction("Set Tile Width...").triggered.connect(changeTileWidth)
608638

0 commit comments

Comments
 (0)