mirror of
https://github.com/fatiando/moulder.git
synced 2025-12-21 18:41:07 +08:00
Added polygon_selected signal and connection
This commit is contained in:
@@ -15,12 +15,13 @@ from matplotlib.lines import Line2D
|
|||||||
from matplotlib.figure import Figure
|
from matplotlib.figure import Figure
|
||||||
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg
|
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg
|
||||||
from PyQt5.QtGui import QIcon
|
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 QSizePolicy, QMainWindow, QApplication, QAction
|
||||||
from PyQt5.QtWidgets import QMenu, QWidget, QVBoxLayout, QMessageBox
|
from PyQt5.QtWidgets import QMenu, QWidget, QVBoxLayout, QMessageBox
|
||||||
from PyQt5.QtWidgets import QSlider, QHBoxLayout, QLabel, QDialog
|
from PyQt5.QtWidgets import QSlider, QHBoxLayout, QLabel, QDialog
|
||||||
from PyQt5.QtWidgets import QDialogButtonBox
|
from PyQt5.QtWidgets import QDialogButtonBox
|
||||||
|
|
||||||
|
|
||||||
from fatiando import utils
|
from fatiando import utils
|
||||||
from fatiando.gravmag import talwani
|
from fatiando.gravmag import talwani
|
||||||
from fatiando.mesher import Polygon
|
from fatiando.mesher import Polygon
|
||||||
@@ -39,6 +40,9 @@ class Moulder(FigureCanvasQTAgg):
|
|||||||
'n: New polygon', 'd: delete', 'click: select/move', 'a: add vertex',
|
'n: New polygon', 'd: delete', 'click: select/move', 'a: add vertex',
|
||||||
'r: reset view', 'esc: cancel'])
|
'r: reset view', 'esc: cancel'])
|
||||||
|
|
||||||
|
# Signal when selected polygon changes
|
||||||
|
polygon_selected = pyqtSignal(float)
|
||||||
|
|
||||||
def __init__(self, parent, x, z, min_depth, max_depth,
|
def __init__(self, parent, x, z, min_depth, max_depth,
|
||||||
density_range=[-2000, 2000], width=5, height=4, dpi=100):
|
density_range=[-2000, 2000], width=5, height=4, dpi=100):
|
||||||
self.fig = Figure(figsize=(width, height), dpi=dpi)
|
self.fig = Figure(figsize=(width, height), dpi=dpi)
|
||||||
@@ -322,6 +326,8 @@ class Moulder(FigureCanvasQTAgg):
|
|||||||
# and which vertice of which polygon
|
# and which vertice of which polygon
|
||||||
self._ipoly, self._ivert = self._get_polygon_vertice_id(event)
|
self._ipoly, self._ivert = self._get_polygon_vertice_id(event)
|
||||||
if self._ipoly is not None:
|
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.density_slider.set_val(self.densities[self._ipoly])
|
||||||
self.polygons[self._ipoly].set_animated(True)
|
self.polygons[self._ipoly].set_animated(True)
|
||||||
self.lines[self._ipoly].set_animated(True)
|
self.lines[self._ipoly].set_animated(True)
|
||||||
|
|||||||
@@ -30,13 +30,13 @@ class MoulderApp(QMainWindow):
|
|||||||
self.setWindowIcon(QIcon.fromTheme('python-logo'))
|
self.setWindowIcon(QIcon.fromTheme('python-logo'))
|
||||||
self.setGeometry(200, 200, 1024, 800)
|
self.setGeometry(200, 200, 1024, 800)
|
||||||
self.init_ui()
|
self.init_ui()
|
||||||
self.set_callbacks()
|
|
||||||
|
|
||||||
self.moulder = Moulder(self, numpy.linspace(0, 100e3, 101),
|
self.moulder = Moulder(self, numpy.linspace(0, 100e3, 101),
|
||||||
numpy.zeros(101), 0, 10000,
|
numpy.zeros(101), 0, 10000,
|
||||||
density_range=DENSITY_RANGE,
|
density_range=DENSITY_RANGE,
|
||||||
width=5, height=4, dpi=100)
|
width=5, height=4, dpi=100)
|
||||||
self.setCentralWidget(self.moulder)
|
self.setCentralWidget(self.moulder)
|
||||||
|
self.set_callbacks()
|
||||||
|
|
||||||
def keyPressEvent(self, event):
|
def keyPressEvent(self, event):
|
||||||
keys_dict = {Qt.Key_N: "n", Qt.Key_R: "r",
|
keys_dict = {Qt.Key_N: "n", Qt.Key_R: "r",
|
||||||
@@ -68,6 +68,7 @@ class MoulderApp(QMainWindow):
|
|||||||
self._spin_slider_changed_callback)
|
self._spin_slider_changed_callback)
|
||||||
self.error_spinbox.valueChanged.connect(
|
self.error_spinbox.valueChanged.connect(
|
||||||
self._spin_slider_changed_callback)
|
self._spin_slider_changed_callback)
|
||||||
|
self.moulder.polygon_selected.connect(self._change_density_callback)
|
||||||
|
|
||||||
def _define_actions(self):
|
def _define_actions(self):
|
||||||
self.configure_action = QAction(QIcon.fromTheme('preferences-system'),
|
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.error_slider.setValue(self.error_slider.float_2_int(value))
|
||||||
self.moulder.error = 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):
|
def _quit_callback(self):
|
||||||
answer = QMessageBox.question(self, "Quit",
|
answer = QMessageBox.question(self, "Quit",
|
||||||
"Are you sure you want to quit?",
|
"Are you sure you want to quit?",
|
||||||
|
|||||||
Reference in New Issue
Block a user