def test_parameters(self): dpl_1 = DPlugin() dpl_1.id = 1 dp_1 = DParameter(1, 'parameter1') dp_1.id = 2 dp_2 = DParameter(2, 'parameter2') dp_2.id = 3 #check: add Parameter self.assertTrue(dpl_1.add_parameter(dp_1)) self.assertTrue(dpl_1.add_parameter(dp_2)) self.assertFalse(dpl_1.add_parameter(dp_1)) self.assertFalse(dpl_1.add_parameter(dp_2)) #Check: count of parameters self.assertEqual(len(dpl_1.get_parameters().keys()), 2) #Check: rm parameter self.assertTrue(dpl_1.rm_parameter(dp_1)) self.assertEqual(len(dpl_1.get_parameters().keys()), 1) self.assertTrue(dpl_1.rm_parameter(dp_2)) self.assertEqual(len(dpl_1.get_parameters().keys()), 0)
def cb_initialize_plugin(self): self.config = self.pl_get_current_config_ref() self.pl_set_event_trigger_mode(True) self.name_mat_file = self.config['file']['value'] # Open/Create mat file self.data_to_save = {} self.parameters['start_saving'] = DParameter('start_saving', default='0', Regex=pc.REGEX_BOOL_BIN) self.parameters['save_data_for_x_ms'] = DParameter( 'save_data_for_x_ms', default='0', Regex=pc.REGEX_SINGLE_INT) self.parameters['file'] = DParameter('file', default='') self.pl_send_new_parameter_list(list(self.parameters.values())) self.time_slot = 0 self.time_start = 0 self.saving = False print('toMAT started working') return True
def cb_initialize_plugin(self): # --------------------------- # Read configuration # --------------------------- # Note: this cfg items have to exist! self.time_treshold = int (self.pl_get_config_element('update_interval')) self.value_scale = float(self.pl_get_config_element('value_scale') ) self.value_offset = float(self.pl_get_config_element('value_offset') ) self.digit_count = int (self.pl_get_config_element('digit_count') ) # if self.config['value_init']['value'] is not None: self.init_value = self.pl_get_config_element('value_init', castHandler=float) if self.init_value is None: self.init_value = 0 # -------------------------------- # Create Widget # -------------------------------- # Create Widget needed for this plugin self.LcdWidget = QtWidgets.QLCDNumber() self.LcdWidget.setSmallDecimalPoint(True) self.LcdWidget.display(self.init_value) self.LcdWidget.setContextMenuPolicy(QtCore.Qt.CustomContextMenu) self.LcdWidget.customContextMenuRequested.connect(self.show_context_menu) # This call is important, because the background structure needs to know the used widget! # In the background the qmidiwindow will becreated and the widget will be added self.pl_set_widget_for_internal_usage( self.LcdWidget ) # --------------------------- # Create Parameters # --------------------------- para_list = [] # create a parameter object self.para_treshold = DParameter('update_interval',default=self.time_treshold, Regex='[0-9]+') self.para_value_scale = DParameter('value_scale',default= self.value_scale, Regex='-?[1-9]+[0-9]*(\.?[0-9]+)?') self.para_value_offset = DParameter('value_offset',default= self.value_offset, Regex='-?\d+(\.?\d+)?') self.para_digit_count = DParameter('digit_count',default= self.digit_count, Regex='[3-9]') para_list.append(self.para_treshold) para_list.append(self.para_value_scale) para_list.append(self.para_value_offset) para_list.append(self.para_digit_count) # build parameter list to send to Core self.pl_send_new_parameter_list(para_list) # --------------------------- # Create Legend # --------------------------- self.last_time = int(round(time.time() * 1000)) return True
def test_pl_send_new_parameter_list(self): self.assertRaises(pe.WrongType, self.basePlugin.pl_send_new_parameter_list, None) self.assertRaises(pe.WrongLength, self.basePlugin.pl_send_new_parameter_list, []) parameters = [DParameter('1'), DParameter('2'), 3] self.assertRaises(pe.WrongType, self.basePlugin.pl_send_new_parameter_list, parameters) parameters = [DParameter('1'), DParameter('2'), DParameter('3')] self.assertRaises(AttributeError, self.basePlugin.pl_send_new_parameter_list, parameters)
def update_parameter_list(self, ORTDParameter): newList = {} for para_id in ORTDParameter: para_name = ORTDParameter[para_id]['ParameterName'] if para_name in self.parameters: para_object = self.parameters.pop(para_name) else: val_count = int(ORTDParameter[para_id]['NValues']) opt_object = OptionalObject(para_id, val_count) if "initial_value" in ORTDParameter[para_id]: val = ORTDParameter[para_id]['initial_value'] if val_count > 1: val = val[1:-1] init_value = list(map(float, val.split(','))) else: init_value = float(val) else: init_value = 0 para_object = DParameter(para_name, default=str(init_value), OptionalObject=opt_object) self.pl_send_new_parameter_list([para_object]) newList[para_name] = para_object toDeleteDict = self.parameters self.parameters = newList for par in toDeleteDict: self.pl_send_delete_parameter(par)
def cb_initialize_plugin(self): self.block1 = DBlock('Progress') signal = DSignal('percent') self.block1.add_signal(signal) self.block2 = DBlock('Trigger') signal = DSignal('trigger') self.block2.add_signal(signal) self.block3 = DBlock('ResetTrigger') signal = DSignal('reset') self.block3.add_signal(signal) self.block4 = DBlock('ParaToSig') signal = DSignal('parameter') self.block4.add_signal(signal) blockList = [self.block1, self.block2, self.block3, self.block4] self.pl_send_new_block_list(blockList) self.para3 = DParameter('Choose', default=0, Regex='\d+') para_l = [self.para3] self.pl_send_new_parameter_list(para_l) self.pl_set_event_trigger_mode(True) self.initialized = True return True
def pl_send_delete_parameter(self): self.assertRaises(pe.WrongType, self.basePlugin.pl_send_delete_parameter, None) self.assertRaises(AttributeError, self.basePlugin.pl_send_delete_parameter, 'DParameter') self.assertRaises(AttributeError, self.basePlugin.pl_send_delete_parameter, DParameter('DParameter'))
def cb_initialize_plugin(self): # -------------------------------- # Step 1: Create Widget # -------------------------------- # e.g. an empty QWidget will be used (remember that QtWidgets.QWidget() needs to be imported!) # Call pl_set_widget_for_internal_usage() function to tell PaPI about your widget! widget = QtWidgets.QWidget() self.pl_set_widget_for_internal_usage(widget) # important and obligatory! # -------------------------------- # Step 2: Read configuration items (startup cfg) # OPTIONAL # -------------------------------- # Please read the Documentation of pl_get_config_element() to understand what is happening here. # e.g. a configuration item named 'offset' is read. offset = self.pl_get_config_element('offset') offset = float(offset) if offset is not None else 0 # -------------------------------- # Step 3: Define parameter that are offered to PaPI # OPTIONAL # Sub-Step 1: Create Parameter Object # Sub-Step 2: Send list of Parameter Objects created to PaPI # -------------------------------- # use self. to remember the parameter object in this class/context for own usage! # e.g. parameter named parameterName1 is created! # Refer to the Doc of DParameter to read about advanced usages! self. parameter1 = DParameter('parameterName1') self. parameter2 = DParameter('parameterName2') self.pl_send_new_parameter_list([self.parameter1, self.parameter1]) # -------------------------------- # Step 5: Developer and Plugin specific configuration # OPTIONAL # -------------------------------- # -------------------------------- # Step 6: Return Value # OBLIGATORY # Return True if the everything is alright! # False will lead to PaPI not starting this Plugin! # -------------------------------- return True
def cb_initialize_plugin(self): self.event_choice = DEvent('Choice') self.pl_send_new_event_list([self.event_choice]) self.config = self.pl_get_current_config_ref() para_list = [] self.para_texts = DParameter( 'texts', default=self.config['option_texts']['value']) self.para_values = DParameter( 'values', default=self.config['option_values']['value']) para_list.append(self.para_texts) para_list.append(self.para_values) self.pl_send_new_parameter_list(para_list) self.central_widget = QWidget() self.option_texts = [] self.option_values = [] self.pre_selected_index = None if isinstance(self.config['selected_index']['value'], str): if self.config['selected_index']['value'] != '': self.pre_selected_index = int( self.config['selected_index']['value']) self.pl_set_widget_for_internal_usage(self.central_widget) self.layout = QVBoxLayout(self.central_widget) self.buttons = [] self.set_option_texts(self.config['option_texts']['value']) self.set_option_values(self.config['option_values']['value']) self.update_widget() return True
def cb_initialize_plugin(self): # Creates Slider Change Event to connect to Parameters and send it self.event_change = DEvent('Change') self.pl_send_new_event_list([self.event_change]) # get items of cfg for fist start of the Slider and cast to float self.value_max = self.pl_get_config_element('upper_bound', castHandler=float) self.value_min = self.pl_get_config_element('lower_bound', castHandler=float) self.tick_count = self.pl_get_config_element('step_count', castHandler=float) self.init_value = self.pl_get_config_element('value_init', castHandler=float) self.vertical = self.pl_get_config_element('vertical', castHandler=int) if self.vertical is not None: self.vertical = self.vertical == 1 else: self.vertical = False # Create Parameter list for change slider parameter live and send it self.para_value_max = DParameter('MaxValue', default=self.value_max, Regex=pc.REGEX_SIGNED_FLOAT_OR_INT) self.para_value_min = DParameter('MinValue', default=self.value_min, Regex=pc.REGEX_SIGNED_FLOAT_OR_INT) self.para_tick_count = DParameter('StepCount', default=self.tick_count, Regex=pc.REGEX_SINGLE_INT) self.pl_send_new_parameter_list( [self.para_tick_count, self.para_value_max, self.para_value_min]) # Set Slider widget for use in PaPI self.pl_set_widget_for_internal_usage(self.create_widget()) # return successful initialization return True
def pl_create_DParameter(self, parameter_name, default_value=0, regex=None, optional_object_to_store=None): """ Creates a DParameter for use in a PaPI Plugin :param parameter_name: Name of parameter :type parameter_name: str :param default_value: Default value for GUI to display :param regex: Regex string for GUI to filter user inputs :param optional_object_to_store: optional object to store within parameter object :return: DParameter object or None in case of error """ if isinstance(parameter_name, str): parameter = DParameter(parameter_name, default=default_value, Regex=regex, OptionalObject=optional_object_to_store) return parameter return None
def cb_initialize_plugin(self): config = self.pl_get_current_config_ref() self.t = 0 self.amax = int(config['amax']['value']) self.f = float(config['f']['value']) self.block1 = DBlock('SinMit_f1') signal = DSignal('f1_1') signal.dname = 'f1_f1DNAME' self.block1.add_signal(signal) self.block2 = DBlock('SinMit_f2') signal = DSignal('f2_1') self.block2.add_signal(signal) self.block3 = DBlock('SinMit_f3') signal = DSignal('f3_1') self.block3.add_signal(signal) signal = DSignal('f3_2') self.block3.add_signal(signal) signal = DSignal('f3_scalar') self.block3.add_signal(signal) #self.block4 = self.create_new_block('Sin4', [CORE_TIME_SIGNAL,'f3_1','f3_2', 'Scalar'], [ 'numpy_vec', 'numpy_vec', 'numpy_vec', 'int'], 100 ) blockList = [self.block1, self.block2, self.block3] self.pl_send_new_block_list(blockList) self.para3 = DParameter('Frequenz Block SinMit_f3', default= 0.3, Regex='[0-9]+.[0-9]+') para_l = [self.para3] self.pl_send_new_parameter_list(para_l) print('Sinus started working') return True
def cb_initialize_plugin(self): # -------------------------------- # Step 0: Read documentation: http://tub-control.github.io/PaPI/ # -------------------------------- # -------------------------------- # Step 1: Read configuration items (startup cfg) # OPTIONAL # -------------------------------- # Please read the Documentation of pl_get_config_element() to understand what is happening here. # e.g. a configuration item named 'offset' is read. offset = self.pl_get_config_element('offset') offset = float(offset) if offset is not None else 0 # -------------------------------- # Step 2:Define blocks for output signals and define signals of blocks! # OPTIONAL # -------------------------------- # Here: block called CPU_LOAD with 2 signals for Core1 and Core2 blockLoad = DBlock('CPU_LOAD') sig_core1 = DSignal('Load_C1') sig_core2 = DSignal('Load_C2') blockLoad.add_signal(sig_core1) blockLoad.add_signal(sig_core2) self.pl_send_new_block_list([blockLoad]) # -------------------------------- # Step 3: Define parameter that are offered to PaPI # OPTIONAL # Sub-Step 1: Create Parameter Object # Sub-Step 2: Send list of Parameter Objects created to PaPI # -------------------------------- # use self. to remember the parameter object in this class/context for own usage! # e.g. parameter named parameterName1 is created! # Refer to the Doc of DParameter to read about advanced usages! self.parameter1 = DParameter('parameterName1') self.parameter2 = DParameter('parameterName2') self.pl_send_new_parameter_list([self.parameter1, self.parameter1]) # -------------------------------- # Step 4: Set the plugin trigger mode # OPTIONAL # In most cases for IOP you will leave it default, for DPP you will set it to true # Default will mean, that PaPI will decide on it. # -------------------------------- self.pl_set_event_trigger_mode('default') # -------------------------------- # Step 5: Developer and Plugin specific configuration # OPTIONAL # -------------------------------- # -------------------------------- # Step 6: Return Value # OBLIGATORY # Return True if the everything is alright! # False will lead to PaPI not starting this Plugin! # -------------------------------- return True
def cb_initialize_plugin(self): print('ORTD', self.__id__, ':process id', os.getpid()) self.config = self.pl_get_current_config_ref() # open UDP self.HOST = self.config['address']['value'] self.SOURCE_PORT = int(self.config['source_port']['value']) self.OUT_PORT = int(self.config['out_port']['value']) self.LOCALBIND_HOST = '' # config['source_address']['value'] #CK self.sendOnReceivePort = True if self.config['SendOnReceivePort'][ 'value'] == '1' else False self.UseSocketIO = True if self.config['UseSocketIO'][ 'value'] == '1' else False if self.UseSocketIO: self.SocketIOPort = int(self.config['socketio_port']['value']) #self.sendOnReceivePort = True # NOTE: remove this #self.UseSocketIO = True # NOTE: remove this print("SendOnReceivePort = ", self.sendOnReceivePort) print("UseSocketIO = ", self.UseSocketIO) self.PAPI_SIMULINK_BLOCK = False self.separate = int(self.config['SeparateSignals']['value']) self.onlyInitialConfig = self.config['OnlyInitialConfig'][ 'value'] == '1' self.hasInitialConfig = False if (not self.sendOnReceivePort): # SOCK_DGRAM is the socket type to use for UDP sockets self.sock_parameter = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) self.sock_parameter.setblocking(1) self.ControlBlock = DBlock('ControllerSignals') self.ControlBlock.add_signal(DSignal('ControlSignalReset')) self.ControlBlock.add_signal(DSignal('ControlSignalCreate')) self.ControlBlock.add_signal(DSignal('ControlSignalSub')) self.ControlBlock.add_signal(DSignal('ControllerSignalParameter')) self.ControlBlock.add_signal(DSignal('ControllerSignalClose')) self.ControlBlock.add_signal(DSignal('ActiveTab')) self.pl_send_new_block_list([self.ControlBlock]) self.t = 0 self.pl_set_event_trigger_mode(True) self.sock_recv = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) if (not self.sendOnReceivePort): self.sock_recv.bind((self.LOCALBIND_HOST, self.SOURCE_PORT)) # CK print("UDP_Plugin-plugin listening on: ", self.LOCALBIND_HOST, ":", self.SOURCE_PORT) #CK else: print("---- Using client UDP mode (not binding to a port) ----") self.sock_recv.settimeout(1) self.thread_goOn = True self.lock = threading.Lock() self.thread = threading.Thread(target=self.thread_execute) self.thread.start() if self.UseSocketIO: print("Using socket.io connection on port", self.SocketIOPort) self.thread_socket_goOn = True self.thread_socketio = threading.Thread( target=self.thread_socketio_execute) self.blocks = {} self.Sources = {} self.parameters = {} self.signal_values = {} self.block_id = 0 self.config_complete = False self.config_buffer = {} self.timer = Timer(3, self.callback_timeout_timer) self.timer_active = False self.ConsoleBlock = DBlock('ConsoleSignals') self.ConsoleBlock.add_signal(DSignal('MainSignal')) self.pl_send_new_block_list([self.ConsoleBlock]) self.consoleIn = DParameter('consoleIn', default='') self.pl_send_new_parameter_list([self.consoleIn]) if self.UseSocketIO: self.thread_socketio.start() return True
def cb_initialize_plugin(self): # --------------------------- # Read configuration # --------------------------- # Note: this cfg items have to exist! self.config = self.pl_get_current_config_ref() self.progress_value = self.config['progress_value']['value'] self.trigger_value = self.config['trigger_value']['value'] self.reset_trigger_value = self.config['reset_trigger_value']['value'] self.show_percent = self.config['show_percent']['value'] == '1' self.show_current_max = self.config['show_current_max']['value'] == '1' self.round_digit = int(self.config['round_digit']['value']) self.min_range = float(self.config['min_rage']['value']) self.max_range = float(self.config['max_range']['value']) # -------------------------------- # Create Widget # -------------------------------- # Create Widget needed for this plugin self.progressbar = QProgressBar() self.progressbar.setRange(0, 100) self.progressbar.setTextVisible(True) self.progressbar.setValue(0) self.progressbar.setContextMenuPolicy(QtCore.Qt.CustomContextMenu) self.progressbar.customContextMenuRequested.connect( self.show_context_menu) # This call is important, because the background structure needs to know the used widget! # In the background the qmidiwindow will becreated and the widget will be added self.set_value(self.min_range) self.pl_set_widget_for_internal_usage(self.progressbar) # --------------------------- # Create Parameters # --------------------------- para_list = [] # create a parameter object self.para_trigger = DParameter('trigger', default=0) self.para_change_progress_value = DParameter( 'ProgressValue', default=self.progress_value) self.para_change_reset_value = DParameter( 'ResetValue', default=self.reset_trigger_value) self.para_change_trigger_value = DParameter('TriggerValue', default=self.trigger_value) self.para_change_min_range = DParameter( 'MinRange', default=self.min_range, Regex=pc.REGEX_SIGNED_FLOAT_OR_INT) self.para_change_max_range = DParameter( 'MaxRange', default=self.max_range, Regex=pc.REGEX_SIGNED_FLOAT_OR_INT) self.para_show_percent = DParameter( 'ShowPercent', default=self.config['show_percent']['value'], Regex=pc.REGEX_BOOL_BIN) self.para_show_current_max = DParameter( 'ShowCurrentMax', default=self.config['show_current_max']['value'], Regex=pc.REGEX_BOOL_BIN) para_list.append(self.para_trigger) para_list.append(self.para_change_progress_value) para_list.append(self.para_change_reset_value) para_list.append(self.para_change_trigger_value) para_list.append(self.para_change_min_range) para_list.append(self.para_change_max_range) para_list.append(self.para_show_percent) para_list.append(self.para_show_current_max) # build parameter list to send to Core self.pl_send_new_parameter_list(para_list) return True
def cb_initialize_plugin(self): """ Function initiate layer 0 :param config: :return: """ self.config = self.pl_get_current_config_ref() self.startup_config = self.pl_get_current_config() # --------------------------- # Read configuration # --------------------------- int_re = re.compile(r'(\d+)') self.__show_legend__ = self.config['show_legend']['value'] == '1' self.__show_grid_x__ = self.config['x-grid']['value'] == '1' self.__show_grid_y__ = self.config['y-grid']['value'] == '1' self.__rolling_plot__ = self.config['rolling_plot']['value'] == '1' self.__plot_over__ = self.pl_get_config_element('plot_over') self.__colors_selected__ = int_re.findall(self.config['color']['value']) self.__styles_selected__ = int_re.findall(self.config['style']['value']) self.__width_selected__ = int_re.findall(self.config['width']['value']) self.__buffer_size__ = int(int_re.findall(self.config['buffersize']['value'])[0]) self.__downsampling_rate__ = int(int_re.findall(self.config['downsampling_rate']['value'])[0]) self.__downsampling_rate_start__ = 0 self.__bgcolor = self.pl_get_config_element('bgcol') pos_re = re.compile(r'([0-9]+)') self.__legend_position__= pos_re.findall( self.pl_get_config_element('legend_position') ) # ---------------------------- # Set internal variables # ---------------------------- self.__tbuffer__ = collections.deque([0.0] * 0, self.__buffer_size__) # ---------------------------- # Set internal variables used for single timestamp plotting (stp) # ---------------------------- self.__stp_min_x = 0 self.__stp_max_x = 0 self.__stp_min_y = 0 self.__stp_max_y = 1 self.__stp_active__ = False # -------------------------------- # Create Layout and labels # -------------------------------- self.central_widget = QWidget() self.central_widget.setContentsMargins(0,0,0,0) self.label_widget = QWidget() self.label_widget.setContentsMargins(0,0,0,0) self.verticalLayout = QVBoxLayout() self.verticalLayout.setContentsMargins(0,0,0,0) self.verticalLayout.setSpacing(0) self.horizontalLayout = QHBoxLayout() self.horizontalLayout.setContentsMargins(0,0,0,0) self.horizontalLayout.setSpacing(0) self.space_label = QLabel() self.space_label.setMargin(0) self.space_label.setAlignment(QtCore.Qt.AlignJustify) self.space_label.setStyleSheet("QLabel { background-color : black; color : grey;" "border : 0px solid black ; border-bottom-width : 5px }") self.time_label = QLabel() self.time_label.setMargin(0) self.time_label.setAlignment(QtCore.Qt.AlignJustify) self.time_label.setStyleSheet("QLabel { background-color : black; color : grey;" "border : 0px solid black ; border-bottom-width : 5px }") self.time_label.setMaximumWidth(55) self.unit_label = QLabel() self.unit_label.setMargin(0) self.unit_label.setAlignment(QtCore.Qt.AlignLeft) self.unit_label.setStyleSheet("QLabel { background-color : black; color : grey;" "border : 0px solid black ; border-bottom-width : 5px }") self.unit_label.setText('[s]') self.central_widget.setLayout(self.verticalLayout) self.label_widget.setLayout(self.horizontalLayout) # -------------------------------- # Create PlotWidget # -------------------------------- self.__plotWidget__ = PlotWidget() self.__plotWidget__.yRangeChanged.connect(self.plot_yrange_changed) self.__plotWidget__.setWindowTitle('PlotPerformanceTitle') self.__plotWidget__.showGrid(x=self.__show_grid_x__, y=self.__show_grid_y__) self.__plotWidget__.getPlotItem().getViewBox().disableAutoRange() self.__plotWidget__.getPlotItem().getViewBox().setYRange(0,6) self.__plotWidget__.getPlotItem().setDownsampling(auto=True) # ------------------------------ # Add Widget to Layout # ------------------------------ self.horizontalLayout.addWidget(self.space_label) self.horizontalLayout.addWidget(self.time_label) self.horizontalLayout.addWidget(self.unit_label) self.verticalLayout.addWidget(self.__plotWidget__) self.verticalLayout.addWidget(self.label_widget) if not self.__papi_debug__: # self.pl_set_widget_for_internal_usage(self.__plotWidget__) self.pl_set_widget_for_internal_usage(self.central_widget) self.__plotWidget__.getPlotItem().getViewBox().enableAutoRange(axis=pg.ViewBox.YAxis, enable=False) self.__plotWidget__.getPlotItem().getViewBox().enableAutoRange(axis=pg.ViewBox.XAxis, enable=False) self.__plotWidget__.getPlotItem().getViewBox().setMouseEnabled(x=False, y=True) # --------------------------- # Create Parameters # --------------------------- self.__parameters__['x-grid'] = \ DParameter('x-grid', self.config['x-grid']['value'], Regex='^(1|0){1}$') self.__parameters__['y-grid'] = \ DParameter('y-grid', self.config['y-grid']['value'], Regex='^(1|0){1}$') self.__parameters__['color'] = \ DParameter('color', self.config['color']['value'], Regex='^\[(\s*\d\s*)+\]') self.__parameters__['style'] = \ DParameter('style', self.config['style']['value'], Regex='^\[(\s*\d\s*)+\]') self.__parameters__['width'] = \ DParameter('width', self.config['width']['value'], Regex='^\[(\s*\d\s*)+\]') self.__parameters__['rolling'] = \ DParameter('rolling', self.config['rolling_plot']['value'], Regex='^(1|0){1}') self.__parameters__['downsampling_rate'] = \ DParameter('downsampling_rate', self.__downsampling_rate__, Regex='^\d+$') self.__parameters__['buffersize'] = \ DParameter('buffersize', self.__buffer_size__, Regex='^\d+$') self.__parameters__['yRange'] = \ DParameter('yRange', self.config['yRange']['value'], Regex='^\[(\d+\.\d+)\s+(\d+\.\d+)\]$') self.__parameters__['show_legend'] = \ DParameter('show_legend', self.config['show_legend']['value'], Regex=pc.REGEX_BOOL_BIN) self.__parameters__['legend_position'] = \ DParameter('legend_position', self.pl_get_config_element('legend_position'), Regex='\(([0-9]+),([0-9]+)\)') self.__parameters__['legend_position'].connect(self.parameter_callback_legend_position) if not self.__papi_debug__: self.pl_send_new_parameter_list(list(self.__parameters__.values())) # --------------------------- # Create Legend # --------------------------- if self.__show_legend__: self.__legend__ = self.__plotWidget__.getPlotItem().addLegend() else: self.__legend__ = None self.__last_time__ = current_milli_time() self.__update_intervall__ = 20 # in milliseconds self.__last_plot_time__ = 0 self.setup_context_menu() self.__plotWidget__.setContextMenuPolicy(QtCore.Qt.CustomContextMenu) self.__plotWidget__.customContextMenuRequested.connect(self.showContextMenu) self.use_range_for_y(self.config['yRange']['value']) # ---------------------------- # Initiate for default plotting # ---------------------------- color_rgb = self.__bgcolor[1:-1] color_rgb = color_rgb.split(',') self.__plotWidget__.setBackground([int(color_rgb[0]),int(color_rgb[1]),int(color_rgb[2])]) self.initiate_update_plot() return True
def cb_initialize_plugin(self): """ Function initiate layer 0 :param config: :return: """ self.config = self.pl_get_current_config_ref() # --------------------------- # Read configuration # --------------------------- int_re = re.compile(r'(\d+)') self.__show_grid_x__ = self.config['x-grid']['value'] == '1' self.__show_grid_y__ = self.config['y-grid']['value'] == '1' self.__colors_selected__ = int_re.findall(self.config['color']['value']) self.__styles_selected__ = int_re.findall(self.config['style']['value']) # ---------------------------- # Set internal variables used for single timestamp plotting (stp) # ---------------------------- self.__plotWidget__ = pg.PlotWidget() self.__plotWidget__.setWindowTitle('StaticPlot') self.__plotWidget__.showGrid(x=self.__show_grid_x__, y=self.__show_grid_y__) self.__plotWidget__.getPlotItem().getViewBox().disableAutoRange() self.__plotWidget__.getPlotItem().getViewBox().setYRange(0,6) self.pl_set_widget_for_internal_usage(self.__plotWidget__) # --------------------------- # Create Parameters # --------------------------- self.__parameters__['x-grid'] = \ DParameter('x-grid', '[0 1]', Regex='^(1|0){1}$') self.__parameters__['y-grid'] = \ DParameter('y-grid', '[0 1]', Regex='^(1|0){1}$') self.__parameters__['color'] = \ DParameter('color', self.config['color']['value'], Regex='^\[(\s*\d\s*)+\]') self.__parameters__['style'] = \ DParameter('style', self.config['style']['value'], Regex='^\[(\s*\d\s*)+\]') self.__parameters__['yRange'] = \ DParameter('yRange', '[0,1]', Regex='^\[(\d+\.\d+)\s+(\d+\.\d+)\]$') self.pl_send_new_parameter_list(list(self.__parameters__.values())) # --------------------------- # Create Legend # --------------------------- if self.config['show_legend']['value']=='1': self.__legend__ = pg.LegendItem((100, 40), offset=(40, 1)) # args are (size, offset) self.__legend__.setParentItem(self.__plotWidget__.graphicsItem()) self.setup_context_menu() self.__plotWidget__.setContextMenuPolicy(QtCore.Qt.CustomContextMenu) self.__plotWidget__.customContextMenuRequested.connect(self.showContextMenu) self.read_json_data() return True