diff --git a/interactive.py b/interactive.py index ed1baf6..42e07f9 100644 --- a/interactive.py +++ b/interactive.py @@ -15,12 +15,13 @@ from matplotlib.lines import Line2D from matplotlib.figure import Figure from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg from PyQt5.QtGui import QIcon -from PyQt5.QtCore import Qt +from PyQt5.QtCore import Qt, pyqtSignal from PyQt5.QtWidgets import QSizePolicy, QMainWindow, QApplication, QAction from PyQt5.QtWidgets import QMenu, QWidget, QVBoxLayout, QMessageBox from PyQt5.QtWidgets import QSlider, QHBoxLayout, QLabel, QDialog from PyQt5.QtWidgets import QDialogButtonBox + from fatiando import utils from fatiando.gravmag import talwani from fatiando.mesher import Polygon @@ -39,6 +40,9 @@ class Moulder(FigureCanvasQTAgg): 'n: New polygon', 'd: delete', 'click: select/move', 'a: add vertex', 'r: reset view', 'esc: cancel']) + # Signal when selected polygon changes + polygon_selected = pyqtSignal(float) + def __init__(self, parent, x, z, min_depth, max_depth, density_range=[-2000, 2000], width=5, height=4, dpi=100): self.fig = Figure(figsize=(width, height), dpi=dpi) @@ -322,6 +326,8 @@ class Moulder(FigureCanvasQTAgg): # and which vertice of which polygon self._ipoly, self._ivert = self._get_polygon_vertice_id(event) if self._ipoly is not None: + # Emit signal: selected polygon changed (sends density) + self.polygon_selected.emit(self.densities[self._ipoly]) # self.density_slider.set_val(self.densities[self._ipoly]) self.polygons[self._ipoly].set_animated(True) self.lines[self._ipoly].set_animated(True) diff --git a/moulder.py b/moulder.py index 933e8e4..f3cb51e 100644 --- a/moulder.py +++ b/moulder.py @@ -30,13 +30,13 @@ class MoulderApp(QMainWindow): self.setWindowIcon(QIcon.fromTheme('python-logo')) self.setGeometry(200, 200, 1024, 800) self.init_ui() - self.set_callbacks() self.moulder = Moulder(self, numpy.linspace(0, 100e3, 101), numpy.zeros(101), 0, 10000, density_range=DENSITY_RANGE, width=5, height=4, dpi=100) self.setCentralWidget(self.moulder) + self.set_callbacks() def keyPressEvent(self, event): keys_dict = {Qt.Key_N: "n", Qt.Key_R: "r", @@ -68,6 +68,7 @@ class MoulderApp(QMainWindow): self._spin_slider_changed_callback) self.error_spinbox.valueChanged.connect( self._spin_slider_changed_callback) + self.moulder.polygon_selected.connect(self._change_density_callback) def _define_actions(self): self.configure_action = QAction(QIcon.fromTheme('preferences-system'), @@ -166,6 +167,10 @@ class MoulderApp(QMainWindow): self.error_slider.setValue(self.error_slider.float_2_int(value)) self.moulder.error = value + def _change_density_callback(self, value): + self.density_spinbox.setValue(value) + self.density_slider.setValue(value) + def _quit_callback(self): answer = QMessageBox.question(self, "Quit", "Are you sure you want to quit?",