ThematicIndividualStyleParam
=============================

.. currentmodule:: axioma.render

.. class:: ThematicIndividualStyleParam

	Параметры для значения у тематического слоя по индивидуальным значениям. Содержит значение и соответствующий ему стиль оформления

	Унаследован от: :class:`ThematicColoredStyleParam`

		.. py:method:: ThematicIndividualStyleParam()

		Конструктор с пустыми значениями

		.. py:method:: ThematicIndividualStyleParam(value, color)

			Конструктор

			:param value: Значение.
			:type value: :class:`~PyQt5.QtCore.QVariant`
			:param color: Цвет оформления.
			:type color: :class:`~PyQt5.QtGui.QColor`

			Конструктор. Инициализирует параметр с заданным стилем. См.  :meth:`~axioma.render.ThematicColoredStyleParam.ThematicColoredStyleParam`

			:param value: Значение.
			:type value: :class:`~PyQt5.QtCore.QVariant`
			:param style: Стиль для значения
			:type style: :class:`~axioma.render.Style`

		.. py:attribute:: value

			Значение

			:type: :class:`~PyQt5.QtCore.QVariant`


IndividualThematicStyleProvider
================================

.. currentmodule:: axioma.render

.. class:: IndividualThematicStyleProvider

	Класс провайдера стилей для тематического слоя :class:`IndividualThematicLayer`.

	Унаследован от: :class:`ThematicStyleProvider`, :class:`SplittingThematic`

		.. py:method:: IndividualThematicStyleProvider(layer)

			Конструктор

			:param layer: Ссылка на тематический слой, к которому привязан данный провайдер стилей.
			:type layer: :class:`~axioma.render.ThematicLayer`

		.. py:method:: IndividualThematicStyleProvider(other)

			Копирующий конструктор

			:param other: Исходный экземпляр, на базе которого создается текущий экземпляр объекта.
			:type other: :class:`IndividualThematicStyleProvider`

		.. py:method:: reallocateColorByValues(preserveOldStyles = True)

			Перераспределение стилей по цвету. Цвет подбирается случайным образом. Дальнейшее переопределение возможно (см. пример ниже).

			:param preserveOldStyles: Сохранение существующих стилей. Применяется, когда количество значений увеличилось, но есть желание оставить существующие стили текущими. Если False, стили переопределяются на случайные по цвету.
			:type preserveOldStyles: :class:`bool`

		.. py:method:: thematicStyleParamsList()

			Возвращается список параметров по существующим значениям.

			:return: Список параметров.
			:rtype: :class:`list` [:class:`ThematicIndividualStyleParam`]

		.. py:method:: setThematicStyleParamsList(list)

			Замена существующего списка параметров по интервалам новым.

			:param list: Новый список с параметрами.
			:type list: :class:`list` [:class:`ThematicIndividualStyleParam`]

		.. py:method:: setThematicStyleParam(index, param)

				Замена существующего набора параметров конкретного значения по его индексу.

				:param index: Индекс параметра.
				:type index: :class:`int`
				:param param: Новые параметры заданного значения.
				:type param: :class:`ThematicIndividualStyleParam`

		.. py:method:: thematicStyleParam(index)

				Получение параметров необходимого значения по его индексу.

				:param index: Индекс требуемого параметра.
				:type index: :class:`int`
				:return: Параметры запрашиваемого интервала.
				:rtype: :class:`~axioma.render.ThematicIndividualStyleParam`

		.. py:method:: thematicStyleParamCount()

			Количество полученных параметров (значений).

			:return: Количество параметров.
			:rtype: :class:`int`

		.. py:method:: defaultStyle()

			Возвращает коллекцию стилей оформления (по типам объектов), заданный по умолчанию. В дальнейшем для каждого значения стиль можно переопределить

			:return: Коллекцию стилей
			:rtype: :class:`~axioma.render.CollectionStyle`

		.. py:method:: setDefaultStyle(style)

			Переопределение стилей по умолчанию

			:param style: Новый набор стилей оформления
			:type style: :class:`CollectionStyle`


IndividualThematicLayer
=======================

.. currentmodule:: axioma.render

.. class:: IndividualThematicLayer

	Тематический слой с распределением стилей по индивидуальным значением

	Унаследован от: :class:`~axioma.render.ThematicLayer`

		.. py:method:: IndividualThematicLayer(parent)

			Конструктор

			:param parent: Ссылка на слой, на базе которого создается данный тематический слой.
			:type parent: :class:`FeatureLayer`

		.. py:method:: IndividualThematicLayer(other)

			Копирующий конструктор

			:param other: Исходный слой, на базе которого создается новый слой.
			:type other: :class:`IndividualThematicLayer`

		.. py:method:: styleProvider()

			Возвращает текущий провайдер стилей для слоя.

			:return: Копия провайдера стиля, установленного для слоя на данный момент
			:rtype: :class:`~axioma.render.IndividualThematicLayer`

		.. py:method:: setStyleProvider(provider)

			Устанавливает новый провайдер стилей для слоя.

			:param provider: Новый провайдер стилей.
			:type provider: :class:`IndividualThematicLayer`

  
Пример использования:

  .. code-block:: python
  
      # Импорт
      from axioma.render import *
      from axioma.core.sql import *
      from axioma.mapinfo import *

      # Создание переменной для обеспечения возможности вычисления выражений
      runtime = SqlRuntime()
      
      # Добавление слоя в конец списка
      def addLayer(layer, thematic):
          layer.appendLayer(thematic);

      # Создание выражения по полю
      def makeExpressionForWorld(layer, attr):
          evaluator = FeatureExpressionEvaluator(runtime, layer.tableSchema())
          if not evaluator.setExpression(axioma.app.mainWindow.tr(attr)):
              print(evaluator.errorString())
          return evaluator

      # Индивидуальные значения. layer - базовый слой, на основе которого строится тематика
      def addIndividualThematic(layer):
          individualLayer = IndividualThematicLayer(layer) # Создание самого слоя
          individualLayer.setName(QObject().tr("Континенты по цветам")) # Имя слоя
          individualStyleProvider =  IndividualThematicStyleProvider(individualLayer) # Стиль оформления
          evaluator = makeExpressionForWorld(layer, QObject().tr("Континент"))
          if not evaluator.hasError():
              individualStyleProvider.setEvaluator(evaluator)
              individualStyleProvider.initValuesFromTable( layer.table()) # чтение из таблицы
              individualStyleProvider.reallocateColorByValues()
              if individualStyleProvider.thematicStyleParamCount(): # Заменим у первого цвет на желтый
                  param0 = individualStyleProvider.thematicStyleParam(0) 
                  param0.setColor(Qt.yellow)
                  individualStyleProvider.setThematicStyleParam( 0, param0)
              if individualStyleProvider.thematicStyleParamCount() > 1: # Заменим у второго стиль на строку MapBasic
                  param1 = individualStyleProvider.thematicStyleParam(1)
                  # Создаем стиль из строки MapBasic
                  style = MapBasicStyle().styleFromString("Brush (2,16776960,16777215) Pen (1,2,0)")
                  # Заменяем стиль
                  param1.style().setStyle(PolygonalGeometryClass(), style)
                  individualStyleProvider.setThematicStyleParam( 1, param1)
              individualLayer.setStyleProvider(individualStyleProvider)  # Установка провайдера стиля
              addLayer(layer, individualLayer)
