mirror of
https://github.com/fatiando/moulder.git
synced 2025-12-21 10:31:09 +08:00
Added raw error and density handles
This commit is contained in:
@@ -135,6 +135,24 @@ class Moulder(FigureCanvasQTAgg):
|
|||||||
self.predicted_line, = self.dataax.plot(self.x, self.predicted, '-r')
|
self.predicted_line, = self.dataax.plot(self.x, self.predicted, '-r')
|
||||||
self._update_data_plot()
|
self._update_data_plot()
|
||||||
|
|
||||||
|
def set_error(self, value):
|
||||||
|
"""
|
||||||
|
Callback when error slider is edited
|
||||||
|
"""
|
||||||
|
self.error = value
|
||||||
|
self._update_data_plot()
|
||||||
|
|
||||||
|
def set_density(self, value):
|
||||||
|
"""
|
||||||
|
Callback when density slider is edited
|
||||||
|
"""
|
||||||
|
if self._ipoly is not None:
|
||||||
|
self.densities[self._ipoly] = value
|
||||||
|
self.polygons[self._ipoly].set_color(self._density2color(value))
|
||||||
|
# self._update_data()
|
||||||
|
self._update_data_plot()
|
||||||
|
self.canvas.draw()
|
||||||
|
|
||||||
def _figure_setup(self):
|
def _figure_setup(self):
|
||||||
self.dataax, self.modelax = self.fig.subplots(2, 1, sharex=True)
|
self.dataax, self.modelax = self.fig.subplots(2, 1, sharex=True)
|
||||||
self.dataax.set_ylabel("Gravity Anomaly [mGal]")
|
self.dataax.set_ylabel("Gravity Anomaly [mGal]")
|
||||||
@@ -230,24 +248,6 @@ class Moulder(FigureCanvasQTAgg):
|
|||||||
self.dataax.grid(True)
|
self.dataax.grid(True)
|
||||||
self.canvas.draw()
|
self.canvas.draw()
|
||||||
|
|
||||||
def _set_error_callback(self, value):
|
|
||||||
"""
|
|
||||||
Callback when error slider is edited
|
|
||||||
"""
|
|
||||||
self.error = value
|
|
||||||
self._update_data_plot()
|
|
||||||
|
|
||||||
def _set_density_callback(self, value):
|
|
||||||
"""
|
|
||||||
Callback when density slider is edited
|
|
||||||
"""
|
|
||||||
if self._ipoly is not None:
|
|
||||||
self.densities[self._ipoly] = value
|
|
||||||
self.polygons[self._ipoly].set_color(self._density2color(value))
|
|
||||||
# self._update_data()
|
|
||||||
self._update_data_plot()
|
|
||||||
self.canvas.draw()
|
|
||||||
|
|
||||||
def _get_polygon_vertice_id(self, event):
|
def _get_polygon_vertice_id(self, event):
|
||||||
"""
|
"""
|
||||||
Find out which vertex of which polygon the event happened in.
|
Find out which vertex of which polygon the event happened in.
|
||||||
|
|||||||
82
moulder.py
82
moulder.py
@@ -1,4 +1,4 @@
|
|||||||
from __future__ import print_function
|
from __future__ import print_function, division
|
||||||
from future.builtins import super
|
from future.builtins import super
|
||||||
|
|
||||||
import os
|
import os
|
||||||
@@ -12,12 +12,14 @@ from PyQt5.QtCore import Qt
|
|||||||
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, QDoubleSpinBox
|
||||||
|
|
||||||
from figure_canvas import GravityModelCanvas
|
from figure_canvas import GravityModelCanvas
|
||||||
from interactive import Moulder
|
from interactive import Moulder
|
||||||
from configure_dialog import ConfigureMeassurementDialog
|
from configure_dialog import ConfigureMeassurementDialog
|
||||||
|
|
||||||
|
DENSITY_RANGE = [-2000, 2000]
|
||||||
|
|
||||||
|
|
||||||
class MoulderApp(QMainWindow):
|
class MoulderApp(QMainWindow):
|
||||||
|
|
||||||
@@ -31,6 +33,7 @@ class MoulderApp(QMainWindow):
|
|||||||
|
|
||||||
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,
|
||||||
width=5, height=4, dpi=100)
|
width=5, height=4, dpi=100)
|
||||||
self.setCentralWidget(self.moulder)
|
self.setCentralWidget(self.moulder)
|
||||||
|
|
||||||
@@ -48,14 +51,22 @@ class MoulderApp(QMainWindow):
|
|||||||
def init_ui(self):
|
def init_ui(self):
|
||||||
self._define_actions()
|
self._define_actions()
|
||||||
self._configure_menubar()
|
self._configure_menubar()
|
||||||
self._configure_toolbar()
|
self._configure_main_toolbar()
|
||||||
|
self._configure_secondary_toolbar()
|
||||||
|
|
||||||
def set_callbacks(self):
|
def set_callbacks(self):
|
||||||
self.configure_action.triggered.connect(
|
self.configure_action.triggered.connect(
|
||||||
self._configure_meassurement_callback)
|
self._configure_meassurement_callback)
|
||||||
self.about_action.triggered.connect(self._about_callback)
|
self.about_action.triggered.connect(self._about_callback)
|
||||||
# self.file_menu.triggered.connect(self._file_menu_callback)
|
|
||||||
self.quit_action.triggered.connect(self._quit_callback)
|
self.quit_action.triggered.connect(self._quit_callback)
|
||||||
|
self.density_slider.valueChanged.connect(
|
||||||
|
self._spin_slider_changed_callback)
|
||||||
|
self.density_spinbox.valueChanged.connect(
|
||||||
|
self._spin_slider_changed_callback)
|
||||||
|
self.error_slider.valueChanged.connect(
|
||||||
|
self._spin_slider_changed_callback)
|
||||||
|
self.error_spinbox.valueChanged.connect(
|
||||||
|
self._spin_slider_changed_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'),
|
||||||
@@ -86,12 +97,48 @@ class MoulderApp(QMainWindow):
|
|||||||
self.about_menu = self.menubar.addMenu('About')
|
self.about_menu = self.menubar.addMenu('About')
|
||||||
self.about_menu.addAction(self.about_action)
|
self.about_menu.addAction(self.about_action)
|
||||||
|
|
||||||
def _configure_toolbar(self):
|
def _configure_main_toolbar(self):
|
||||||
self.toolbar = self.addToolBar("adasd")
|
self.main_toolbar = self.addToolBar("Main Toolbar")
|
||||||
self.toolbar.addAction(self.open_action)
|
self.main_toolbar.addAction(self.open_action)
|
||||||
self.toolbar.addAction(self.save_action)
|
self.main_toolbar.addAction(self.save_action)
|
||||||
self.toolbar.addAction(self.save_as_action)
|
self.main_toolbar.addAction(self.save_as_action)
|
||||||
self.toolbar.addAction(self.configure_action)
|
self.main_toolbar.addAction(self.configure_action)
|
||||||
|
|
||||||
|
def _configure_secondary_toolbar(self):
|
||||||
|
self.density_slider = QSlider(Qt.Horizontal)
|
||||||
|
self.density_slider.setMinimum(DENSITY_RANGE[0])
|
||||||
|
self.density_slider.setMaximum(DENSITY_RANGE[1])
|
||||||
|
self.density_slider.setValue(0)
|
||||||
|
self.density_slider.setTickInterval(
|
||||||
|
(DENSITY_RANGE[1] - DENSITY_RANGE[0])/2)
|
||||||
|
self.density_slider.setTickPosition(QSlider.TicksBelow)
|
||||||
|
self.density_spinbox = QDoubleSpinBox()
|
||||||
|
self.density_spinbox.setMinimum(DENSITY_RANGE[0])
|
||||||
|
self.density_spinbox.setMaximum(DENSITY_RANGE[1])
|
||||||
|
self.density_spinbox.setValue(0)
|
||||||
|
self.density_spinbox.setSingleStep(1)
|
||||||
|
|
||||||
|
self.error_slider = QSlider(Qt.Horizontal)
|
||||||
|
self.error_slider.setMinimum(0)
|
||||||
|
self.error_slider.setMaximum(100)
|
||||||
|
self.error_slider.setValue(0)
|
||||||
|
self.error_slider.setTickInterval(10)
|
||||||
|
self.error_slider.setTickPosition(QSlider.TicksBelow)
|
||||||
|
self.error_spinbox = QDoubleSpinBox()
|
||||||
|
self.error_spinbox.setMinimum(0)
|
||||||
|
self.error_spinbox.setMaximum(100)
|
||||||
|
self.error_spinbox.setValue(0)
|
||||||
|
self.error_spinbox.setSingleStep(0.1)
|
||||||
|
|
||||||
|
self.secondary_toolbar = self.addToolBar("Secondary Toolbar")
|
||||||
|
self.secondary_toolbar.setStyleSheet('QToolBar{spacing:10px;}')
|
||||||
|
self.secondary_toolbar.addWidget(QLabel("Density [kg/m^3]:"))
|
||||||
|
self.secondary_toolbar.addWidget(self.density_slider)
|
||||||
|
self.secondary_toolbar.addWidget(self.density_spinbox)
|
||||||
|
self.secondary_toolbar.addSeparator()
|
||||||
|
self.secondary_toolbar.addWidget(QLabel("Error:"))
|
||||||
|
self.secondary_toolbar.addWidget(self.error_slider)
|
||||||
|
self.secondary_toolbar.addWidget(self.error_spinbox)
|
||||||
|
|
||||||
def _about_callback(self):
|
def _about_callback(self):
|
||||||
QMessageBox.about(self, "About Moulder",
|
QMessageBox.about(self, "About Moulder",
|
||||||
@@ -104,6 +151,21 @@ class MoulderApp(QMainWindow):
|
|||||||
self.moulder.set_meassurement_points(configure_dialog.x,
|
self.moulder.set_meassurement_points(configure_dialog.x,
|
||||||
configure_dialog.z)
|
configure_dialog.z)
|
||||||
|
|
||||||
|
def _spin_slider_changed_callback(self, value):
|
||||||
|
sender = self.sender()
|
||||||
|
if sender == self.density_slider:
|
||||||
|
self.density_spinbox.setValue(value)
|
||||||
|
self.moulder.set_density(value)
|
||||||
|
elif sender == self.density_spinbox:
|
||||||
|
self.density_slider.setValue(value)
|
||||||
|
self.moulder.set_density(value)
|
||||||
|
elif sender == self.error_slider:
|
||||||
|
self.error_spinbox.setValue(value)
|
||||||
|
self.moulder.set_error(value)
|
||||||
|
elif sender == self.error_spinbox:
|
||||||
|
self.error_slider.setValue(value)
|
||||||
|
self.moulder.set_error(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