LegendItemComponent ==================== .. currentmodule:: axioma.render .. class:: LegendItemComponent Элемент легенды LegendItem для векторного слоя .. py:method:: LegendItemComponent(style, description, objects=-1) Конструктор :param style: Стиль оформления элемента. :type style: :class:`Style` :param description: Текстовое описание. :type description: :class:`str` :param objects: Количество объектов. Применим только для тематики по интервалам. :type objects: :class:`int` .. py:method:: LegendItemComponent(other) Копирующий конструктор :param other: Исходный объект LegendItemComponent, на базе которого необходимо сделать копию. :type other: :class:`LegendItemComponent` .. py:attribute:: style Стиль оформления :type: :class:`Style` .. py:method:: description() Описание элемента. Если методе setDescriptionChanged установлено значение, отличное от None, показывается оно, в противном случае исходное. :return: Строка с описанием :rtype: :class:`str` .. py:method:: fullDescription() Полное описание элемента. Если в конструкторе (или посредством метода setObjectCount) передано количество объектов со значением, отличающимся от -1, в описание включается и данное значение. В противном случае результат аналогичен методу description :return: Строка с описанием :rtype: :class:`str` .. py:method:: setDescription(description) Установка нового описания :param description: Описание :type description: :class:`str` .. py:method:: setDescriptionChanged(description) Замена текстового описания. При этом исходное описание сохраняется. Используется, если есть необходимость изменить тестовую подпись с возможностью его сохранение при обновлении параметров элемента легенды. :param description: Описание :type description: :class:`str` .. py:method:: setObjectCount(objects) Установка количества объектов. По-умолчанию равно -1 (количество в легенде не показывается). :param objects: Количество :type objects: :class:`bool` .. py:method:: objectCount() Количество объектов для элемента легенды :return: Значение :rtype: :class:`int` .. py:attribute:: isVisible Управляет видимостью элемента. True, если элемент показывается. :type: :class:`bool` LegendItem =========== .. currentmodule:: axioma.render .. class:: LegendItem Легенда для векторного слоя. От него наследуются: :class:`FeatureLegendItem`, :class:`ThematicLegendItem` .. py:method:: LegendItem(caption, parent=None) Конструктор :param caption: Наименование (заголовок) легенды. :type caption: :class:`str` :param parent: Владелец элемента легенды. При удалении владельца так же удаляется и сам элемент :type parent: :class:`~PyQt5.QtCore.QObject` .. py:method:: LegendItem(caption, overrideComponentsб parent=None) Конструктор :param caption: Наименование (заголовок) легенды. :type caption: :class:`str` :param overrideComponents: Список элементов легенды :type overrideComponents: :class:`list` [:class:`LegendItemComponent`] :param parent: Владелец элемента легенды. При удалении владельца так же удаляется и сам элемент :type parent: :class:`~PyQt5.QtCore.QObject` .. py:method:: LegendItem(other) Копирующий конструктор :param other: Исходный объект, на базе которого создается новый. :type other: :class:`LegendItem` .. py:method:: clone() Делает копию текущего объекта :return: Копия объекта :rtype: :class:`LegendItem` .. py:method:: rect() Прямоугольник, который занимает данный элемент легенды :return: Ограничивающий прямоугольник :rtype: :class:`~PyQt5.QtCore.QRectF` .. py:method:: rect(pos) Прямоугольник, который занимает данный элемент легенды с указанием начальной точки :param pos: Левый верхний угол :type pos: :class:`~PyQt5.QtCore.QPointF` :return: Ограничивающий прямоугольник :rtype: :class:`~PyQt5.QtCore.QRectF` .. py:method:: refreshStyleItems() Обновление значений элементов легенды .. py:method:: draw(context) Отрисовка элемента легенды в заданном контексте :param context: Контекст, в котором будет отрисован элемент легенды :type context: :class:`~axioma.render.Context` .. py:method:: draw(context, pos) Отрисовка элемента легенды в заданном контексте :param context: Контекст, в котором будет отрисован элемент легенды :type context: :class:`~axioma.render.Context` :param pos: Левый верхний угол, если есть необходимость отрисовать в другом месте :type pos: :class:`~PyQt5.QtCore.QPointF` .. py:method:: drawSelected(context) Отрисовка выделения элемента легенды в заданном контексте :param context: Контекст, в котором будет отрисовано выделение элемента легенды :type context: :class:`~axioma.render.Context` .. py:method:: drawSelected(context, pos) Отрисовка выделения элемента легенды в заданном контексте :param context: Контекст, в котором будет отрисовано выделение элемент легенды :type context: :class:`~axioma.render.Context` :param pos: Левый верхний угол, если есть необходимость отрисовать в другом месте :type pos: :class:`~PyQt5.QtCore.QPointF` .. py:method:: name() Наименование элемента легенды :return: Наименование :rtype: :class:`str` .. py:method:: baseSizeStyleElement() Базовый размер элемента. Остальные параметры масштабируются относительно этого размера :return: Размер :rtype: :class:`~PyQt5.QtCore.QSize` .. py:method:: setBaseSizeStyleElement(value) Переопределение базового размера элемента :param value: размер :type value: :class:`~PyQt5.QtCore.QSize` .. py:method:: textRender() Отрисовщик элементов легенды :return: Установленное значение :rtype: :class:`TextRenderer` .. py:method:: setTextRender(value) Установка нового значения отрисовщика элемента :param value: Новое значение :type value: :class:`TextRenderer` .. py:method:: caption() Заголовок элемента легенды :return: Заголовок :rtype: :class:`str` .. py:method:: setCaption(value) Установка нового значения заголовка элемента легенды :param value: Новое значения заголовка :type value: :class:`str` .. py:method:: subCaption() Подзаголовок элемента легенды :return: Подзаголовок :rtype: :class:`str` .. py:method:: setSubCaption(value) Установка нового значения подзаголовка элемента легенды :param value: Новое значения подзаголовка :type value: :class:`str` .. py:method:: textRenderCaption() Отрисовщик заголовка легенды :return: Установленное значение :rtype: :class:`TextRenderer` .. py:method:: setTextRenderCaption(value) Установка нового значения отрисовщика заголовка легенды :param value: Новое значение :type value: :class:`TextRenderer` .. py:method:: textRenderSubCaption() Отрисовщик подзаголовка легенды :return: Установленное значение :rtype: :class:`TextRenderer` .. py:method:: setTextRenderSubCaption(value) Установка нового значения отрисовщика подзаголовка легенды :param value: Новое значение :type value: :class:`TextRenderer` .. py:method:: basePoint() Базовая точка, относительно которой производится отрисовка элемента легенды :return: Точка :rtype: :class:`~PyQt5.QtCore.QPointF` .. py:method:: setBasePoint(value) Установка нового значения базовой точки :param value: Значение :type value: :class:`~PyQt5.QtCore.QPointF` .. py:method:: borderStyle() Стиль окантовки. Если не указан (равен None), окантовка не рисуется. По-умолчанию окантовка отсутствует :return: Стиль :rtype: :class:`LineStringStyle` .. py:method:: setBorderStyle(style) Задание стиля окантовки :param style: Стиль. Значение None убирает окантовку :type style: :class:`LineStringStyle` .. py:method:: numberColumns() Количество колонок, на которые разбиваются элементы легенды. По-умолчанию установлено значение 1. :return: Количество колонок. :rtype: :class:`int` .. py:method:: setNumberColumns(value) Задание количества колонок :param value: Количество колонок :type value: :class:`int` .. py:method:: space() Промежуток в пикселях между элементами легенды :return: Значение :rtype: :class:`int` .. py:method:: transform(transform) Преобразование (трансформирование) легенды :param transform: Матрица преобразования :type transform: :class:`~PyQt5.QtGui.QTransform` .. py:method:: setVisibledItem(index, value) Управление видимостью элемента легенды. :param index: Индекс :type index: :class:`int` :param value: True, если необходимо сделать видимым. В противном случае False :type value: :class:`bool` .. py:method:: setDescriptionItem(index, value) Изменение описания элемента легенды :param index: Индекс :type index: :class:`int` :param value: Новое описание элемента :type value: :class:`str` .. py:method:: moveItem(oldPos, newPos) Перемещение (смена позиции) элемента легенды :param oldPos: Старая позиция :type oldPos: :class:`bool` :param newPos: Новая позиция :type newPos: :class:`float` .. py:method:: styleItems() Список элементов легенды :return: Список :rtype: :class:`list` [:class:`LegendItemComponent`] .. py:method:: styleItemAt(index) Возвращает элемент по его индексу :param index: Индекс :type index: :class:`int` :return: Элемент :rtype: :class:`LegendItemComponent` .. py:method:: updateComponent(index, component) Замена существующего элемента легенды новым значением :param index: Индекс :type index: :class:`int` :param component: Замещающий элемент :type component: :class:`LegendItemComponent` .. method:: aboutToBeDestroyed() [signal] Сигнал, который срабатывает при удалении легенды Пример использования: .. code-block:: python # Импорт from axioma.render import * from PyQt5.QtCore import * from PyQt5.QtGui import * from PyQt5.QtWidgets import * class StyleDialog(QDialog): def __init__(self, parent, layers): QDialog.__init__(self, parent) self.setGeometry(200, 200, 600, 400) self.setWindowTitle('Пример легенды') self.layers = layers # Перечень слоев, для которых будет строиться легенда self.image = QImage() # временный растр, куда производится отрисовка легенды # Создание контекста def createContext(self, painter): deviceRect = sceneRect = QRectF(0,0,100,100) viewport = Viewport (deviceRect,sceneRect) return Context(painter, viewport) # Отрисовка элемента легенды def drawElement(self, fi, context, pos): r = fi.rect() fi.draw(context, pos) pos.setY(pos.y() + 10 + r.height()) return pos def renderLegend(self): # Рисуем в растр self.image = QImage(self.size(), QImage.Format_ARGB32_Premultiplied) painter = QPainter(self.image) painter.fillRect(self.image.rect(), Qt.white) context = self.createContext(painter) pos = QPoint(10, 10) for lay in self.layers: if isinstance(lay, HasStyles): # Если есть легенда fi = FeatureLegendItem(lay, lay.name(), self) pos = self.drawElement(fi, context, pos) if isinstance(lay, LayerWithThematic): thematics = lay.createLegendsList() # Перечень легенд для тематики, если таковые имеются for them in thematics: pos = self.drawElement(them, context, pos) def paintEvent(self, event): try: painter = QPainter(self) if not self.image.isNull(): painter.drawImage(0,0, self.image) except Exception as ex: print(ex) def resizeEvent(self, event): self.renderLegend() # Текущая карта mapview = axioma.app.mainWindow.mapViewManager().currentMapView() if mapview is not None: layers = mapview.map().flatLayerList() # Список слоев карты dlg = StyleDialog(axioma.app.mainWindow, layers) dlg.exec() else: QMessageBox.information(axioma.app.mainWindow, QObject().tr("Информация"), QObject().tr("Текущая карта не найдена"))