Markers find their own location, and have their own colour.

pull/1/head
Rune B. Broberg 2019-08-29 15:04:40 +02:00
rodzic 6b30732853
commit 30d56ed470
3 zmienionych plików z 53 dodań i 76 usunięć

Wyświetl plik

@ -1,27 +1,30 @@
# Copyright (c) $year Rune B. Broberg
import collections
from typing import List
from PyQt5 import QtGui, QtWidgets, QtCore
Datapoint = collections.namedtuple('Datapoint', 'freq re im')
class Marker:
name = "Marker"
frequency = ""
frequency = 0
color = QtGui.QColor()
location = -1
def __init__(self, name, initialColor, frequency=""):
super().__init__()
self.name = name
self.color = initialColor
self.frequency = frequency
if frequency.isnumeric():
self.frequency = int(frequency)
self.frequencyInput = QtWidgets.QLineEdit(frequency)
self.frequencyInput.setAlignment(QtCore.Qt.AlignRight)
self.frequencyInput.returnPressed.connect(lambda: self.setFrequency(self.frequencyInput.text()))
self.btnColorPicker = QtWidgets.QPushButton("")
self.btnColorPicker.setFixedWidth(20)
p = self.btnColorPicker.palette()
p.setColor(QtGui.QPalette.ButtonText, self.color)
self.btnColorPicker.setPalette(p)
self.setColor(initialColor)
self.btnColorPicker.clicked.connect(lambda: self.setColor(QtWidgets.QColorDialog.getColor()))
self.layout = QtWidgets.QHBoxLayout()
@ -29,10 +32,21 @@ class Marker:
self.layout.addWidget(self.btnColorPicker)
def setFrequency(self, frequency):
self.frequency = frequency
self.frequency = int(frequency)
def setColor(self, color):
self.color = color
p = self.btnColorPicker.palette()
p.setColor(QtGui.QPalette.ButtonText, self.color)
self.btnColorPicker.setPalette(p)
def getRow(self):
return (QtWidgets.QLabel(self.name), self.layout)
return (QtWidgets.QLabel(self.name), self.layout)
def findLocation(self, data: List[Datapoint]):
self.location = -1
stepsize = data[1].freq-data[0].freq
for i in range(len(data)):
if abs(data[i].freq-self.frequency) <= (stepsize/2):
self.location = i
return

Wyświetl plik

@ -31,6 +31,7 @@ class NanoVNASaver(QtWidgets.QWidget):
self.values = []
self.frequencies = []
self.data : List[Datapoint] = []
self.markers = []
self.serialPort = "COM11"
# self.serialSpeed = "115200"
@ -92,13 +93,17 @@ class NanoVNASaver(QtWidgets.QWidget):
marker_control_box.setMaximumWidth(400)
marker_control_layout = QtWidgets.QFormLayout(marker_control_box)
self.marker1 = Marker("Marker 1", QtGui.QColor(255, 0, 20))
label, layout = self.marker1.getRow()
marker1 = Marker("Marker 1", QtGui.QColor(255, 0, 20))
label, layout = marker1.getRow()
marker_control_layout.addRow(label, layout)
self.markers.append(marker1)
self.marker2 = Marker("Marker 2", QtGui.QColor(20, 0, 255))
label, layout = self.marker2.getRow()
marker2 = Marker("Marker 2", QtGui.QColor(20, 0, 255))
label, layout = marker2.getRow()
marker_control_layout.addRow(label, layout)
self.markers.append(marker2)
self.smithChart.setMarkers(self.markers)
self.marker1label = QtWidgets.QLabel("")
marker_control_layout.addRow(QtWidgets.QLabel("Marker 1: "), self.marker1label)
@ -161,6 +166,7 @@ class NanoVNASaver(QtWidgets.QWidget):
right_column.addWidget(self.smithChart)
self.worker.signals.updated.connect(self.dataUpdated)
self.worker.signals.finished.connect(self.sweepFinished)
def exportFile(self):
print("Save file to " + self.fileNameInput.text())
@ -198,7 +204,13 @@ class NanoVNASaver(QtWidgets.QWidget):
self.serial.timeout = 0.05
self.serialLock.release()
sleep(0.25)
sleep(0.05)
frequencies = self.readValues("frequencies")
self.sweepStartInput.setText(str(frequencies[0]))
self.sweepEndInput.setText(str(frequencies[100]))
self.sweep()
return
@ -285,18 +297,6 @@ class NanoVNASaver(QtWidgets.QWidget):
self.serialLock.release()
return values[1:102]
def setMarker1Color(self, color):
self.smithChart.marker1Color = color
p = self.btnMarker1ColorPicker.palette()
p.setColor(QtGui.QPalette.ButtonText, color)
self.btnMarker1ColorPicker.setPalette(p)
def setMarker2Color(self, color):
self.smithChart.marker2Color = color
p = self.btnMarker2ColorPicker.palette()
p.setColor(QtGui.QPalette.ButtonText, color)
self.btnMarker2ColorPicker.setPalette(p)
def saveData(self, data):
if self.dataLock.acquire(blocking=True):
self.data = data
@ -306,6 +306,8 @@ class NanoVNASaver(QtWidgets.QWidget):
def dataUpdated(self):
if self.dataLock.acquire(blocking=True):
for m in self.markers:
m.findLocation(self.data)
self.smithChart.setData(self.data)
self.sweepProgressBar.setValue(self.worker.percentage)
else:

Wyświetl plik

@ -4,6 +4,8 @@ from typing import List
from PyQt5 import QtWidgets, QtGui, QtCore
from Marker import Marker
Datapoint = collections.namedtuple('Datapoint', 'freq re im')
class SmithChart(QtWidgets.QWidget):
@ -22,10 +24,7 @@ class SmithChart(QtWidgets.QWidget):
self.values = []
self.frequencies = []
self.data : List[Datapoint] = []
self.marker1 = -1
self.marker2 = -1
self.marker1Location = -1
self.marker2Location = -1
self.markers : List[Marker] = []
self.marker1Color = QtGui.QColor(255, 0, 20)
self.marker2Color = QtGui.QColor(20, 0, 255)
@ -77,42 +76,17 @@ class SmithChart(QtWidgets.QWidget):
marker1 = -1
marker2 = -1
for i in range(len(self.data)):
# TODO: Make this check for being "nearest" neater
if self.marker1 != -1 and abs(int(self.data[i].freq) - self.marker1) < (int(self.data[2].freq) - int(self.data[1].freq)):
if marker1 != -1:
# Are we closer than the other spot?
if abs(int(self.data[i].freq) - self.marker1) < abs(int(self.data[marker1].freq) - self.marker1):
marker1 = i
else:
marker1 = i
if self.marker2 != -1 and abs(int(self.data[i].freq) - self.marker2) < (int(self.data[2].freq) - int(self.data[1].freq)):
if marker2 != -1:
# Are we closer than the other spot?
if abs(int(self.data[i].freq) - self.marker2) < abs(int(self.data[marker2].freq) - self.marker2):
marker2 = i
else:
marker2 = i
x = self.width()/2 + self.data[i].re * self.chartWidth/2
y = self.height()/2 + self.data[i].im * -1 * self.chartHeight/2
qp.drawPoint(int(x), int(y))
# Now draw the markers
if marker1 != -1:
highlighter.setColor(self.marker1Color)
qp.setPen(highlighter)
x = self.width() / 2 + self.data[marker1].re * self.chartWidth / 2
y = self.height() / 2 + self.data[marker1].im * -1 * self.chartHeight / 2
qp.drawPoint(int(x), int(y))
self.marker1Location = marker1
if marker2 != -1:
highlighter.setColor(self.marker2Color)
qp.setPen(highlighter)
x = self.width() / 2 + self.data[marker2].re * self.chartWidth / 2
y = self.height() / 2 + self.data[marker2].im * -1 * self.chartHeight / 2
qp.drawPoint(int(x), int(y))
self.marker2Location = marker2
for m in self.markers:
if m.location != -1:
highlighter.setColor(m.color)
qp.setPen(highlighter)
x = self.width() / 2 + self.data[m.location].re * self.chartWidth / 2
y = self.height() / 2 + self.data[m.location].im * -1 * self.chartHeight / 2
qp.drawPoint(int(x), int(y))
def setValues(self, values, frequencies):
print("### Updating values ###")
@ -125,18 +99,5 @@ class SmithChart(QtWidgets.QWidget):
self.data = data
self.update()
def setMarker1(self, value):
self.marker1Location = -1
if value.isnumeric():
self.marker1 = int(value)
else:
self.marker1 = -1
self.update()
def setMarker2(self, value):
self.marker2Location = -1
if value.isnumeric():
self.marker2 = int(value)
else:
self.marker2 = -1
self.update()
def setMarkers(self, markers):
self.markers = markers