コード例 #1
0
    def browseForLocation(self):
        location = QFileDialog.getOpenFileName(filter="*.bag;;*", directory=os.path.dirname(self.demoLocation.text()))[0]
        if len(location) == 0:
            return

        self.demoLocation.setText(location)
        self.loadLocation()
コード例 #2
0
ファイル: ros_pack_graph.py プロジェクト: javierdiazp/myros
    def _load_dot(self, file_name=None):
        if file_name is None:
            file_name, _ = QFileDialog.getOpenFileName(self._widget, self.tr('Open graph from file'), None, self.tr('DOT graph (*.dot)'))
            if file_name is None or file_name == '':
                return

        try:
            fh = open(file_name, 'rb')
            dotcode = fh.read()
            fh.close()
        except IOError:
            return

        # disable controls customizing fetched ROS graph
        self._widget.depth_combo_box.setEnabled(False)
        self._widget.directions_combo_box.setEnabled(False)
        self._widget.package_type_combo_box.setEnabled(False)
        self._widget.filter_line_edit.setEnabled(False)
        self._widget.with_stacks_check_box.setEnabled(False)
        self._widget.mark_check_box.setEnabled(False)
        self._widget.colorize_check_box.setEnabled(False)
        self._widget.hide_transitives_check_box.setEnabled(False)

        self._update_graph(dotcode)
        self._redraw_graph_scene()
コード例 #3
0
ファイル: ros_graph.py プロジェクト: javierdiazp/myros
    def _load_dot(self, file_name=None):
        if file_name is None:
            file_name, _ = QFileDialog.getOpenFileName(
                self._widget, self.tr('Open graph from file'), None,
                self.tr('DOT graph (*.dot)'))
            if file_name is None or file_name == '':
                return

        try:
            fh = open(file_name, 'rb')
            dotcode = fh.read()
            fh.close()
        except IOError:
            return

        # disable controls customizing fetched ROS graph
        self._widget.graph_type_combo_box.setEnabled(False)
        self._widget.filter_line_edit.setEnabled(False)
        self._widget.topic_filter_line_edit.setEnabled(False)
        self._widget.namespace_cluster_check_box.setEnabled(False)
        self._widget.actionlib_check_box.setEnabled(False)
        self._widget.dead_sinks_check_box.setEnabled(False)
        self._widget.leaf_topics_check_box.setEnabled(False)
        self._widget.quiet_check_box.setEnabled(False)

        self._update_graph_view(dotcode)
コード例 #4
0
 def load_file(self):
     filename = QFileDialog.getOpenFileName(self, self.tr("Open File"),
                                            "../", self.tr("Yaml (*.yaml)"))
     self.filelist.append(filename[0])
     self.filenames.append(os.path.basename(filename[0]))
     self.fileLabel.setText('Files: ' + str(self.filenames))
     self.fileLabel.setWordWrap(True)
コード例 #5
0
    def _on_import_perspective(self):
        file_name, _ = QFileDialog.getOpenFileName(
            self._menu_manager.menu, self.tr('Import perspective from file'),
            None, self.tr('Perspectives (*.perspective)'))
        if file_name is None or file_name == '':
            return

        perspective_name = os.path.basename(file_name)
        suffix = '.perspective'
        if perspective_name.endswith(suffix):
            perspective_name = perspective_name[:-len(suffix)]
        if perspective_name in self.perspectives:
            perspective_name = self._choose_new_perspective_name(False)
            if perspective_name is None:
                return

        self._create_perspective(perspective_name, clone_perspective=False)

        # read perspective from file
        file_handle = open(file_name, 'r')
        #data = eval(file_handle.read())
        data = json.loads(file_handle.read())
        self._convert_values(data, self._import_value)

        new_settings = self._get_perspective_settings(perspective_name)
        self._set_dict_on_settings(data, new_settings)

        self.switch_perspective(perspective_name,
                                settings_changed=True,
                                save_before=True)
コード例 #6
0
ファイル: gui.py プロジェクト: tud-amr/spencer-yolo
 def loadDatabase(self, unused=None):
     # Load database
     filename = QFileDialog.getOpenFileName(
         self.widget,
         caption="Load track database",
         filter="*.tracks",
         directory=self.defaultDatabaseDirectory)[0]
     self.loadGivenDatabase(filename)
コード例 #7
0
 def on_open_xml_clicked(self):
     (fileName, _) = QFileDialog.getOpenFileName(
         self, "Load launch file", self.__current_path,
         "Config files (*.launch);;All files (*)")
     if fileName:
         self.__current_path = os.path.dirname(fileName)
         nm.settings().launch_history_add(fileName)
         self.load_signal.emit(fileName, [], None)
コード例 #8
0
 def on_open_xml_clicked(self):
     (fileName, _) = QFileDialog.getOpenFileName(self,
                                                 "Load launch file",
                                                 self.__current_path,
                                                 "Config files (*.launch);;All files (*)")
     if fileName:
         self.__current_path = os.path.dirname(fileName)
         self.launchlist_model.add2LoadHistory(fileName)
         self.load_signal.emit(fileName)
コード例 #9
0
    def browseForLocation(self):
        location = QFileDialog.getOpenFileName(
            filter="*.bag;;*",
            directory=os.path.dirname(self.demoLocation.text()))[0]
        if len(location) == 0:
            return

        self.demoLocation.setText(location)
        self.loadLocation()
コード例 #10
0
 def on_open_xml_clicked(self):
     (fileName, _) = QFileDialog.getOpenFileName(self,
                                                 "Load launch file",
                                                 self.__current_path,
                                                 "Config files (*.launch);;All files (*)")
     if fileName:
         self.__current_path = os.path.dirname(fileName)
         nm.settings().launch_history_add(fileName)
         self.load_signal.emit(fileName, [], None)
コード例 #11
0
    def load_file(self):
        filename = QFileDialog.getOpenFileName(self, self.tr("Open File"), "../", self.tr("Yaml (*.yaml)"))
	if os.path.basename(filename[0].encode("ascii")) == "":
	    return

	self.filelist.append(filename[0])
	self.filenames.append(os.path.basename(filename[0].encode("ascii")))
	self.fileLabel.setText('Files: ' + str(self.filenames))
        self.fileLabel.setWordWrap(True)	
コード例 #12
0
 def _handle_load_clicked(self, checked):
     filename = QFileDialog.getOpenFileName(self, self.tr('Load from File'), '.', self.tr('rqt_console message file {.csv} (*.csv)'))
     if filename[0] != '':
         try:
             handle = open(filename[0])
         except IOError as e:
             qWarning(str(e))
             return
         self.pause_button.setChecked(True)
         self._handle_pause_clicked(True)
         self._datamodel.load_from_file(handle)
         handle.close()
         self.update_status()
コード例 #13
0
    def _import(self):
        file_path, _ = QFileDialog.getOpenFileName(self, self.tr('Import custom graph'),
                                                   None, self.tr('DOT graph (*.dot)'))

        if file_path is None or file_path == '':
            return

        custom_graph = Graph(self._dot_processor, file_path, file_path)
        self.decision_graphs[custom_graph.source] = custom_graph
        self._current_graph = custom_graph

        self.decision_graphs_combo_box.addItem(custom_graph.source)
        self.decision_graphs_combo_box.setCurrentIndex(self.decision_graphs_combo_box.findText(custom_graph.source))
コード例 #14
0
    def _import(self):
        file_path, _ = QFileDialog.getOpenFileName(self, self.tr('Import custom graph'),
                                                   None, self.tr('DOT graph (*.dot)'))

        if file_path is None or file_path == '':
            return

        custom_graph = Graph(self._dot_processor, file_path, file_path)
        self.decision_graphs[custom_graph.source] = custom_graph
        self._current_graph = custom_graph

        self.decision_graphs_combo_box.addItem(custom_graph.source)
        self.decision_graphs_combo_box.setCurrentIndex(self.decision_graphs_combo_box.findText(custom_graph.source))
コード例 #15
0
    def _load_dot(self, file_name=None):
        if file_name is None:
            file_name, _ = QFileDialog.getOpenFileName(
                self._widget, self.tr('Open tree from DOT file'), None,
                self.tr('DOT graph (*.dot)'))
            if file_name is None or file_name == '':
                return

        try:
            fhandle = open(file_name, 'rb')
            dotcode = fhandle.read()
            fhandle.close()
        except IOError:
            return
        self._update_graph_view(dotcode)
コード例 #16
0
    def _on_import_perspective(self):
        file_name, _ = QFileDialog.getOpenFileName(self._menu_manager.menu, self.tr('Import perspective from file'), None, self.tr('Perspectives (*.perspective)'))
        if file_name is None or file_name == '':
            return

        perspective_name = os.path.basename(file_name)
        suffix = '.perspective'
        if perspective_name.endswith(suffix):
            perspective_name = perspective_name[:-len(suffix)]
        if perspective_name in self.perspectives:
            perspective_name = self._choose_new_perspective_name(False)
            if perspective_name is None:
                return

        self.import_perspective_from_file(file_name, perspective_name)
コード例 #17
0
    def _load_bag(self, file_name=None):
        """Load a bag from file. If no file name is given, a dialogue will pop up and
        the user will be asked to select a file. If the bag file selected
        doesn't have any valid topic, nothing will happen. If there are valid
        topics, we load the bag and add a timeline for managing it.

        """
        if file_name is None:
            file_name, _ = QFileDialog.getOpenFileName(
                self._widget, self.tr('Open trees from bag file'), None,
                self.tr('ROS bag (*.bag)'))
        if file_name is None or file_name == "":
            return

        rospy.loginfo("Reading bag from {0}".format(file_name))
        bag = rosbag.Bag(file_name, 'r')
        # ugh...
        topics = list(bag.get_type_and_topic_info()[1].keys())
        types = []
        for i in range(0, len(bag.get_type_and_topic_info()[1].values())):
            types.append(list(bag.get_type_and_topic_info()[1].values())[i][0])

        tree_topics = []  # only look at the first matching topic
        for ind, tp in enumerate(types):
            if tp == 'py_trees_msgs/BehaviourTree':
                tree_topics.append(topics[ind])

        if len(tree_topics) == 0:
            rospy.logerr('Requested bag did not contain any valid topics.')
            return

        self.message_list = []
        self._viewing_bag = True
        rospy.loginfo('Reading behaviour trees from topic {0}'.format(
            tree_topics[0]))
        for unused_topic, msg, unused_t in bag.read_messages(
                topics=[tree_topics[0]]):
            self.message_list.append(msg)

        self.current_topic = tree_topics[0]
        self._set_timeline_buttons(first_snapshot=True,
                                   previous_snapshot=True,
                                   next_snapshot=False,
                                   last_snapshot=False)
        self._set_bag_timeline(bag)
        self._refresh_view.emit()
コード例 #18
0
    def _on_import_perspective(self):
        file_name, _ = QFileDialog.getOpenFileName(
            self._menu_manager.menu, self.tr('Import perspective from file'),
            None, self.tr('Perspectives (*.perspective)'))
        if file_name is None or file_name == '':
            return

        perspective_name = os.path.basename(file_name)
        suffix = '.perspective'
        if perspective_name.endswith(suffix):
            perspective_name = perspective_name[:-len(suffix)]
        if perspective_name in self.perspectives:
            perspective_name = self._choose_new_perspective_name(False)
            if perspective_name is None:
                return

        self.import_perspective_from_file(file_name, perspective_name)
コード例 #19
0
 def _handle_load_clicked(self):
     filename = QFileDialog.getOpenFileName(
         self, self.tr('Load from File'), '.',
         self.tr('Bag files {.bag} (*.bag)'))
     if filename[0] != '':
         bag = rosbag.Bag(filename[0])
         self.play_button.setEnabled(True)
         self.thumbs_button.setEnabled(True)
         self.zoom_in_button.setEnabled(True)
         self.zoom_out_button.setEnabled(True)
         self.zoom_all_button.setEnabled(True)
         self.faster_button.setEnabled(True)
         self.slower_button.setEnabled(True)
         self.begin_button.setEnabled(True)
         self.end_button.setEnabled(True)
         self.save_button.setEnabled(True)
         self.record_button.setEnabled(False)
         self._timeline.add_bag(bag)
コード例 #20
0
ファイル: tf_tree.py プロジェクト: Aerobota/rqt_robot_plugins
    def _load_dot(self, file_name=None):
        if file_name is None:
            file_name, _ = QFileDialog.getOpenFileName(
                self._widget,
                self.tr('Open graph from file'),
                None,
                self.tr('DOT graph (*.dot)'))
            if file_name is None or file_name == '':
                return

        try:
            fhandle = open(file_name, 'rb')
            dotcode = fhandle.read()
            fhandle.close()
        except IOError:
            return

        self._update_graph_view(dotcode)
コード例 #21
0
    def _handle_load_clicked(self):
        filename = QFileDialog.getOpenFileName(
            self, self.tr('Load from File'), '.',
            self.tr('YAML files {.yaml} (*.yaml)'))
        if filename[0] != '':
            with open(filename[0], 'r') as infile:
                try:
                    self.places_dict = yaml.load(infile)
                    for k in self._sceneItems.keys():
                        for item in self._sceneItems[k].keys():
                            self._scene.removeItem(self._sceneItems[k][item])
                    for name in self.places_dict.keys():
                        #
                        q = numpy.asarray(self.places_dict[name][3:7])
                        scene_pos = self._gridToScene(
                            self.places_dict[name][0],
                            self.places_dict[name][1], q)

                        # drawing the items
                        self._sceneItems[name] = {"text": QGraphicsTextItem()}
                        self._sceneItems[name]["text"].setDefaultTextColor(
                            QColor(0, 0, 255))
                        self._sceneItems[name]["text"].setFont(
                            QFont("Times", 10))
                        self._sceneItems[name]["text"].setPlainText(name)
                        x_c = scene_pos[0] - self._sceneItems[name][
                            "text"].boundingRect().width() / 2.0
                        self._sceneItems[name]["text"].setPos(
                            x_c, scene_pos[1])
                        self._scene.addItem(self._sceneItems[name]["text"])
                        self._sceneItems[name]["rec"] = self._scene.addRect(
                            QRectF((scene_pos[0] - 2), (scene_pos[1] - 2), 4,
                                   4))
                        line = QLineF(scene_pos[0], scene_pos[1],
                                      (scene_pos[0] -
                                       self._mag * cos(radians(scene_pos[3]))),
                                      (scene_pos[1] +
                                       self._mag * sin(radians(scene_pos[3]))))
                        self._sceneItems[name]["line"] = self._scene.addLine(
                            line, pen=QPen(Qt.red, 2))
                except yaml.scanner.ScannerError:
                    QMessageBox.critical(self, "Error!", "Invalid YAML file.")
コード例 #22
0
    def _load_dot(self, file_name=None):
        if file_name is None:
            file_name, _ = QFileDialog.getOpenFileName(self._widget, self.tr('Open graph from file'), None, self.tr('DOT graph (*.dot)'))
            if file_name is None or file_name == '':
                return

        try:
            fh = open(file_name, 'rb')
            dotcode = fh.read()
            fh.close()
        except IOError:
            return

        # disable controls customizing fetched ROS graph
        self._widget.graph_type_combo_box.setEnabled(False)
        self._widget.filter_line_edit.setEnabled(False)
        self._widget.topic_filter_line_edit.setEnabled(False)
        self._widget.namespace_cluster_check_box.setEnabled(False)
        self._widget.actionlib_check_box.setEnabled(False)
        self._widget.dead_sinks_check_box.setEnabled(False)
        self._widget.leaf_topics_check_box.setEnabled(False)
        self._widget.quiet_check_box.setEnabled(False)

        self._update_graph_view(dotcode)
コード例 #23
0
 def _handle_load_clicked(self):
     filename = QFileDialog.getOpenFileName(
         self, self.tr('Load from File'), '.',
         self.tr('Bag files {.bag} (*.bag)'))
     if filename[0] != '':
         self.load_bag(filename[0])
コード例 #24
0
    def _handle_load_clicked(self, checked):
        filename = QFileDialog.getOpenFileName(self, self.tr('Load from File'), '.', self.tr('rqt_console message file {.csv} (*.csv)'))
        if filename[0] != '':
            try:
                with open(filename[0], 'r') as h:
                    lines = h.read().splitlines()
            except IOError as e:
                qWarning(str(e))
                return False

            # extract column header
            columns = lines[0].split(';')
            if len(lines) < 2:
                return True

            # join wrapped lines
            rows = []
            last_wrapped = False
            for line in lines[1:]:
                # ignore empty lines
                if not line:
                    continue
                # check for quotes and remove them
                if line == '"':
                    has_prefix = not last_wrapped
                    has_suffix = last_wrapped
                    line = ''
                else:
                    has_prefix = line[0] == '"'
                    if has_prefix:
                        line = line[1:]
                    has_suffix = line[-1] == '"'
                    if has_suffix:
                        line = line[:-1]

                # ignore line without prefix if previous line was not wrapped
                if not has_prefix and not last_wrapped:
                    continue
                # remove wrapped line which is not continued on the next line
                if last_wrapped and has_prefix:
                    rows.pop()

                # add/append lines
                if last_wrapped:
                    rows[-1] += line
                else:
                    # add line without quote prefix
                    rows.append(line)

                last_wrapped = not has_suffix

            # generate message for each row
            messages = []
            skipped = []
            for row in rows:
                data = row.split('";"')
                msg = Message()
                msg.set_stamp_format('hh:mm:ss.ZZZ (yyyy-MM-dd)')
                for i, column in enumerate(columns):
                    value = data[i]
                    if column == 'message':
                        msg.message = value.replace('\\"', '"')
                    elif column == 'severity':
                        msg.severity = int(value)
                        if msg.severity not in Message.SEVERITY_LABELS:
                            skipped.append('Unknown severity value: %s' % value)
                            msg = None
                            break
                    elif column == 'stamp':
                        parts = value.split('.')
                        if len(parts) != 2:
                            skipped.append('Unknown timestamp format: %s' % value)
                            msg = None
                            break
                        msg.stamp = (int(parts[0]), int(parts[1]))
                    elif column == 'topics':
                        msg.topics = value.split(',')
                    elif column == 'node':
                        msg.node = value
                    elif column == 'location':
                        msg.location = value
                    else:
                        skipped.append('Unknown column: %s' % column)
                        msg = None
                        break
                if msg:
                    messages.append(msg)
            if skipped:
                qWarning('Skipped %d rows since they do not appear to be in rqt_console message file format:\n- %s' % (len(skipped), '\n- '.join(skipped)))

            if messages:
                self._model.insert_rows(messages)

                self._handle_pause_clicked(True)

            return True

        else:
            qWarning('File does not appear to be a rqt_console message file: missing file header.')
            return False
コード例 #25
0
 def open_FileDialog(self):
     filename = QFileDialog.getOpenFileName(self.parent, 'Open file',
                                            os.path.expanduser('~'))
     self.parent.filename = filename[0]
     self.parent.qimage = QImage(self.parent.filename, 'JPEG')
コード例 #26
0
    def _handle_load_clicked(self, checked):
        filename = QFileDialog.getOpenFileName(
            self, self.tr('Load from File'), '.',
            self.tr('rqt_console message file {.csv} (*.csv)'))
        if filename[0] != '':
            try:
                with open(filename[0], 'r') as h:
                    lines = h.read().splitlines()
            except IOError as e:
                qWarning(str(e))
                return False

            # extract column header
            columns = lines[0].split(';')
            if len(lines) < 2:
                return True

            # join wrapped lines
            rows = []
            last_wrapped = False
            for line in lines[1:]:
                # ignore empty lines
                if not line:
                    continue
                # check for quotes and remove them
                if line == '"':
                    has_prefix = not last_wrapped
                    has_suffix = last_wrapped
                    line = ''
                else:
                    has_prefix = line[0] == '"'
                    if has_prefix:
                        line = line[1:]
                    has_suffix = line[-1] == '"'
                    if has_suffix:
                        line = line[:-1]

                # ignore line without prefix if previous line was not wrapped
                if not has_prefix and not last_wrapped:
                    continue
                # remove wrapped line which is not continued on the next line
                if last_wrapped and has_prefix:
                    rows.pop()

                # add/append lines
                if last_wrapped:
                    rows[-1] += line
                else:
                    # add line without quote prefix
                    rows.append(line)

                last_wrapped = not has_suffix

            # generate message for each row
            messages = []
            skipped = []
            for row in rows:
                data = row.split('";"')
                msg = Message()
                msg.set_stamp_format('hh:mm:ss.ZZZ (yyyy-MM-dd)')
                for i, column in enumerate(columns):
                    value = data[i]
                    if column == 'message':
                        msg.message = value.replace('\\"', '"')
                    elif column == 'severity':
                        msg.severity = int(value)
                        if msg.severity not in Message.SEVERITY_LABELS:
                            skipped.append('Unknown severity value: %s' %
                                           value)
                            msg = None
                            break
                    elif column == 'stamp':
                        parts = value.split('.')
                        if len(parts) != 2:
                            skipped.append('Unknown timestamp format: %s' %
                                           value)
                            msg = None
                            break
                        msg.stamp = (int(parts[0]), int(parts[1]))
                    elif column == 'topics':
                        msg.topics = value.split(',')
                    elif column == 'node':
                        msg.node = value
                    elif column == 'location':
                        msg.location = value
                    else:
                        skipped.append('Unknown column: %s' % column)
                        msg = None
                        break
                if msg:
                    messages.append(msg)
            if skipped:
                qWarning(
                    'Skipped %d rows since they do not appear to be in rqt_console message file format:\n- %s'
                    % (len(skipped), '\n- '.join(skipped)))

            if messages:
                self._model.insert_rows(messages)

                self._handle_pause_clicked(True)

            return True

        else:
            qWarning(
                'File does not appear to be a rqt_console message file: missing file header.'
            )
            return False
コード例 #27
0
 def _handle_load_clicked(self):
     filename = QFileDialog.getOpenFileName(
         self, self.tr("Load from File"), ".", self.tr("Bag files {.bag} (*.bag)")
     )
     if filename[0] != "":
         self.load_bag(filename[0])
コード例 #28
0
 def _handle_load_clicked(self):
     filename = QFileDialog.getOpenFileName(self, self.tr('Load from File'), '.', self.tr('Bag files {.bag} (*.bag)'))
     if filename[0] != '':
         self.load_bag(filename[0])