def addData(self, msg): # TODO what to do for things that can't be numerically expressed? just ascii strings, i guess? for line in self.lines: newDataPoint = Messaging.getFloat(msg, line.fieldInfo, line.fieldSubindex) try: newTime = float(msg.hdr.GetTime() / 1000.0) if newTime != 0: self.useHeaderTime = 1 if not self.useHeaderTime: newTime = elapsedSeconds() except AttributeError: # if header has no time, fallback to PC time. newTime = elapsedSeconds() # add data in the array until MAX_LENGTH is reached, then drop data off start of array # such that plot appears to scroll. The array size is limited to MAX_LENGTH. if len(line.dataArray) >= MsgPlot.MAX_LENGTH: line.dataArray[:-1] = line.dataArray[ 1:] # shift data in the array one sample left line.dataArray[-1] = newDataPoint line.timeArray[:-1] = line.timeArray[ 1:] # shift data in the array one sample left line.timeArray[-1] = newTime else: line.dataArray.append(newDataPoint) line.timeArray.append(newTime) if not self.pause: line.curve.setData(line.timeArray, line.dataArray) line.curve.setPos(line.ptr1, 0)
def addData(self, msg): # TODO what to do for things that can't be numerically expressed? just ascii strings, i guess? for line in self.lines: try: newDataPoint = Messaging.getFloat(msg, line.fieldInfo, line.fieldSubindex) except ValueError: print("ERROR! Plot of %s.%s cannot accept value %s" % (self.msgClass.MsgName(), line.fieldInfo.name, Messaging.get(msg, line.fieldInfo, line.fieldSubindex))) continue try: timestamp = msg.hdr.GetTime() if Messaging.findFieldInfo(msg.hdr.fields, "Time").units == "ms": timestamp = timestamp / 1000.0 newTime = float(elapsedSeconds(timestamp)) if newTime != 0: self.useHeaderTime = 1 if not self.useHeaderTime: newTime = elapsedSeconds(datetime.now().timestamp()) except AttributeError: # if header has no time, fallback to PC time. newTime = elapsedSeconds(datetime.now().timestamp()) # add data in the array until MAX_LENGTH is reached, then drop data off start of array # such that plot appears to scroll. The array size is limited to MAX_LENGTH. if len(line.dataArray) >= MsgPlot.MAX_LENGTH: line.dataArray[:-1] = line.dataArray[ 1:] # shift data in the array one sample left line.dataArray[-1] = newDataPoint line.timeArray[:-1] = line.timeArray[ 1:] # shift data in the array one sample left line.timeArray[-1] = newTime else: line.dataArray.append(newDataPoint) line.timeArray.append(newTime) if not self.pause: timeArray = line.timeArray dataArray = line.dataArray count = self.timeSlider.value() if len(line.dataArray) > count: timeArray = timeArray[-count:] dataArray = dataArray[-count:] line.curve.setData(timeArray, dataArray) line.curve.setPos(line.ptr1, 0)
def addData(self, msg): # TODO what to do for things that can't be numerically expressed? just ascii strings, i guess? for line in self.lines: try: newDataPoint = Messaging.getFloat(msg, line.fieldInfo, line.fieldSubindex) except ValueError: print("ERROR! Plot of %s.%s cannot accept value %s" % ( self.msgClass.MsgName(), line.fieldInfo.name, Messaging.get(msg, line.fieldInfo, line.fieldSubindex))) continue try: timestamp = msg.hdr.GetTime() if Messaging.findFieldInfo(msg.hdr.fields, "Time").units == "ms": timestamp = timestamp / 1000.0 newTime = float(elapsedSeconds(timestamp)) if newTime != 0: self.useHeaderTime = 1 if not self.useHeaderTime: newTime = elapsedSeconds(datetime.now().timestamp()) except AttributeError: # if header has no time, fallback to PC time. newTime = elapsedSeconds(datetime.now().timestamp()) # add data in the array until MAX_LENGTH is reached, then drop data off start of array # such that plot appears to scroll. The array size is limited to MAX_LENGTH. if len(line.dataArray) >= MsgPlot.MAX_LENGTH: line.dataArray[:-1] = line.dataArray[1:] # shift data in the array one sample left line.dataArray[-1] = newDataPoint line.timeArray[:-1] = line.timeArray[1:] # shift data in the array one sample left line.timeArray[-1] = newTime else: line.dataArray.append(newDataPoint) line.timeArray.append(newTime) if not self.pause: self.refreshLine(line)