Source code for optimeed.visualize.gui.widgets.graphsVisualWidget.examplesActionOnClick.on_click_measure

from optimeed.visualize.gui.widgets.widget_graphs_visual import on_graph_click_interface
import numpy as np
from optimeed.visualize.gui.widgets.graphsVisualWidget.pyqtgraph import mkPen, TextItem
from optimeed.visualize.gui.widgets.graphsVisualWidget.pyqtgraph import GraphicsObject, Point
from PyQt5 import QtGui, QtCore


[docs]class LineItem(GraphicsObject): def __init__(self, point1, point2): GraphicsObject.__init__(self) self.point1 = point1 self.point2 = point2
[docs] def paint(self, p, *args): p.setRenderHint(QtGui.QPainter.Antialiasing) pen = mkPen("b") pen.setWidthF(pen.widthF()) p.setPen(pen) p.drawLine(self.point1, self.point2)
# p.setFont(QtGui.QFont('Helvetica', 1)) # p.drawText(self.point1, self.text) # Problem
[docs] def boundingRect(self): vr = self.viewRect() # bounds of containing ViewBox mapped to local coords. if vr is None: return QtCore.QRectF() return QtCore.QRectF(self.point1, self.point2)
[docs]class on_click_measure(on_graph_click_interface): """On Click: Measure distance. Click on two points to perform that action""" def __init__(self): self.point1 = None self.point2 = None self.theGraphVisual = None self.clicked_graph = None self.added_items = list() self.gtp1 = None self.gtp2 = None
[docs] def graph_clicked(self, the_graph_visual, index_graph, index_trace, indices_points): if self.clicked_graph is None: self.clicked_graph = index_graph self.theGraphVisual = the_graph_visual if self.clicked_graph == index_graph: theTrace = the_graph_visual.get_graph(index_graph).get_trace(index_trace) point = indices_points[0] clickedPoint = theTrace.get_point(point).pos() if self.point1 is None: self.point1 = clickedPoint self.gtp1 = (index_graph, index_trace, point) elif self.point2 is None: self.point2 = clickedPoint self.display_distance() self.gtp2 = (index_graph, index_trace, point) else: self.point1 = clickedPoint self.point2 = None self.reset_distance() self.gtp1 = (index_graph, index_trace, point) theTrace.set_brush(point, (250, 250, 0))
[docs] def reset_distance(self): for item in self.added_items: self.theGraphVisual.get_graph(self.clicked_graph).remove_feature(item) self.added_items = list() for gtp in [self.gtp1, self.gtp2]: if len(gtp): self.theGraphVisual.get_graph(gtp[0]).get_trace(gtp[1]).reset_brush(gtp[2]) self.gtp1 = list() self.gtp2 = list()
[docs] def display_distance(self): distance = np.sqrt((self.point1.x()-self.point2.x())**2 + (self.point1.y()-self.point2.y())**2) lineItem = LineItem(self.point1, self.point2) textItem = TextItem("{:#.4g}".format(distance), color="b", anchor=(0.5, 0.5)) textItem.setPos((self.point2 + self.point1)/2.0) # textItem.setParentItem(lineItem) # textItem.setAngle(np.arctan((self.point2.y()-self.point1.y())/(self.point2.x()-self.point1.x()))*180/np.pi) self.theGraphVisual.get_graph(self.clicked_graph).add_feature(lineItem) self.theGraphVisual.get_graph(self.clicked_graph).add_feature(textItem) self.added_items.append(lineItem) self.added_items.append(textItem)
[docs] def get_name(self): return "Measure distance"