ThematicRangeStyleParam
========================

.. currentmodule:: axioma.render

.. class:: ThematicRangeStyleParam

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

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

		.. py:method:: ThematicRangeStyleParam(min_value, max_value, style)

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

			:param min_value: Минимальное значение для интервала
			:type min_value: :class:`~PyQt5.QtCore.QVariant`
			:param max_value: Максимальное значение для интервала
			:type max_value: :class:`~PyQt5.QtCore.QVariant`
			:param style: Стиль для интервала
			:type style: :class:`~axioma.render.Style`

		.. py:attribute:: minValue

		Минимальное значение для интервала типа QVariant

		.. py:attribute:: maxValue

		Максимальное значение для интервала типа QVariant

		.. py:attribute:: objects


RangeThematicStyleProvider
==========================

.. currentmodule:: axioma.render

.. class:: RangeThematicStyleProvider

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

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

		.. csv-table:: Тип распределения значений :data:`TypeSplitting`:
				:header: "Наименование величины", "Значение", "Описание"
			
				TS_EQUAL_INTERVAL, 1, "Равномерный разброс значений"
				TS_EQUAL_COUNT, 2, "Равное количество записей"
				TS_MANUAL, 3, "Ручное задание интервалов"

		.. py:method:: RangeThematicStyleProvider(layer)

			Конструктор

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

		.. py:method:: RangeThematicStyleProvider(other)

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

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

		.. py:method:: typeSplitting()

			Возвращает установленный тип распределения значений

			:return: Значение.
			:rtype: :data:`TypeSplitting`

		.. py:method:: setTypeSplitting(value)

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

			:param value: Допустимые значения см. в таблице выше.
			:type value: :class:`TypeSplitting`

		.. py:method:: initIntervals(ranges, preservedExistedStyle = False)

			Автоматическое разбиение на интервалы в соответствие с ранее заданными параметрами оформления.

			:param ranges: Количество интервалов.
			:type ranges: :class:`int`
			:param preservedExistedStyle: Если стили уже установлены, постараться их сохранить.
			:type preservedExistedStyle: :class:`bool`

		.. py:method:: splitValuesToIntervals()

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

		.. py:method:: colorMin()

			Возвращается цвет для минимального значения. Используется как одна из базовых величин при распределении значений по интервалам.

			:return: Цвет для минимального значения.
			:rtype: :class:`QColor`

		.. py:method:: setColorMin(color)

			Задается цвет для минимального значения. После задания необходимо повторно инициализировать, выполнив initIntervals

			:param color: Новое значение для цвета.
			:type color: :class:`QColor`

		.. py:method:: colorMax()

			Возвращается цвет для максимального значения. Используется как одна из базовых величин при распределении значений по интервалам.

			:return: Цвет для максимального значения.
			:rtype: :class:`QColor`

		.. py:method:: setColorMax(color)

			Задается цвет для максимального значения. После задания необходимо повторно инициализировать, выполнив initIntervals

			:param color: Новое значение для цвета.
			:type color: :class:`QColor`

		.. py:method:: colorBreak()

			Возвращается промежуточный цвет, если таковой был задан ранее.

			:return: Цвет.
			:rtype: :class:`QColor`

		.. py:method:: breakRange()

			Возвращается номер интервала, для которого задан промежуточный цвет.

			:return: Интервал.
			:rtype: :class:`int`

		.. py:method:: setBreakParameters(color, range)

			Задается промежуточный цвет и номер интервала, которому он соответствует. Далее, при распределении цветов, он устанавливается для интервала range, остальные цвета получаются в виде градиента от установленных. После задания необходимо повторно инициализировать, выполнив initIntervals

			:param color: Новое значение для цвета.
			:type color: :class:`QColor`
			:param range: Номер интервала.
			:type range: :class:`int`

		.. py:method:: thematicStyleParamsList()

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

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

		.. py:method:: setThematicStyleParamsList(list)

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

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

		.. py:method:: thematicStyleParam(index)

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

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

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

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

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

		.. py:method:: rangesCount()

			Количество интервалов.

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

		.. py:method:: reallocateColorBySettingParams()

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

		.. py:method:: calculateValuesCountByIntervals()

			Перераспределение полученных ранее из таблицы значений после смены типа распределения TypeSplitting.

		.. py:method:: defaultStyle()

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

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

		.. py:method:: setDefaultStyle(style)

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

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


RangeThematicLayer
===================

.. currentmodule:: axioma.render

.. class:: RangeThematicLayer

	Тематический слой с распределением по интервалам и с распределением по цветовой гамме

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

		.. py:method:: RangeThematicLayer(parent)

			Конструктор

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

		.. py:method:: RangeThematicLayer(other)

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

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

		.. py:method:: styleProvider()

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

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

		.. py:method:: setStyleProvider(provider)

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

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

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

  .. 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 addRangeThematic(layer):
          rangeLayer = RangeThematicLayer(layer) # Создание самого слоя
          rangeStyleProvider =  RangeThematicStyleProvider(rangeLayer) # Стиль оформления
          evaluator = makeExpressionForWorld(layer, QObject().tr("Население"))
          if not evaluator.hasError():
              rangeStyleProvider.setEvaluator(evaluator);
              rangeStyleProvider.setTypeSplitting(RangeThematicStyleProvider.TS_EQUAL_COUNT);
              rangeStyleProvider.initValuesFromTable( layer.table()) # чтение из таблицы
              rangeStyleProvider.setColorMin(Qt.red) # цвет минимума
              rangeStyleProvider.setBreakParameters(Qt.green, 6) # Разрыв по цвету
              rangeStyleProvider.setColorMax(Qt.yellow) # цвет максимума
              rangeStyleProvider.initIntervals(12); # Количество интервалов
              rangeStyleProvider.splitValuesToIntervals() # Разбиение полученых значений по интервалам
              rangeLayer.setStyleProvider(rangeStyleProvider)  # Установка провайдера стиля
              addLayer(layer, rangeLayer)


Пример с явным указанием параметров каждого интервала:

  .. code-block:: python

      ...

      def colorToMapbasic(color):
          return QColor(color).rgb() - 0xFF000000

      def addRangeThematicManual(layer):
          print("Range manual range thematic..." )
          rangeLayer = RangeThematicLayer(layer) # Создание самого слоя
          rangeStyleProvider =  RangeThematicStyleProvider(rangeLayer) # Стиль оформления
          evaluator = makeExpressionForWorld(layer, QObject().tr("Население"))
          if not evaluator.hasError():
              rangeStyleProvider.setEvaluator(evaluator);
              rangeStyleProvider.setTypeSplitting(RangeThematicStyleProvider.TS_EQUAL_COUNT);
              rangeStyleProvider.initValuesFromTable( layer.table()) # чтение из таблицы
          # Явно устанавливаем интервалы и соотвествующие им стили      
              style1 = MapBasicStyle().styleFromString("Pen (1, 2, 0) Brush (2, %d)"  % ( colorToMapbasic(Qt.red)))
              style2 = MapBasicStyle().styleFromString("Pen (1, 2, 0) Brush (2, %d)"  % ( colorToMapbasic(Qt.blue)))
              style3 = MapBasicStyle().styleFromString("Pen (1, 2, 0) Brush (2, %d)"  % ( colorToMapbasic(Qt.green)))
              p1 = ThematicRangeStyleParam(0, 1326796, style1)
              p2 = ThematicRangeStyleParam(1326796, 8954000, style2)
              p3 = ThematicRangeStyleParam(8954000, 1130510638, style3)
              pars = [p1, p2, p3] # Массив с параметрами интервалов
              rangeStyleProvider.setThematicStyleParamsList(pars)
              rangeLayer.setStyleProvider(rangeStyleProvider)  # Установка провайдера стиля
              rangeLayer.setName('Интервалы по параметрам')
              addLayer(layer, rangeLayer)
