BarSizeParam
=================

.. currentmodule:: axioma.render

.. class:: BarSizeParam

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

		.. py:method:: BarSizeParam()

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

		.. py:method:: BarSizeParam(scale, value, size)

			Конструктор

			:param scale: Значение масштаба карты 
			:type scale: :class:`float`
			:param value: Значение, соответствующая масштабу карты и размеру диаграммы
			:type value: :class:`float`
			:param size: Максимальный размер диаграммы
			:type size: :class:`float`

		.. py:attribute:: mapScale

			Значение масштаба карты 

			:type: float 

		.. py:attribute:: value

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

			:type: float 

		.. py:attribute:: size

			Максимальный размер диаграммы

			:type: :class:`~axioma.render.UnitValue` 


BarThematicStyleProvider
========================

.. currentmodule:: axioma.render

.. class:: BarThematicStyleProvider

	Класс провайдера стилей для тематического слоя :class:`~axioma.render.BarThematicLayer` в виде столбчатой диаграммы.

	Унаследован от: :class:`~axioma.render.ThematicStyleProvider`, :class:`~axioma.render.AllocationThematic`,  :class:`~axioma.render.OrientationThematic`

		.. py:method:: BarThematicStyleProvider(layer)

			Конструктор

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

		.. py:method:: BarThematicStyleProvider(other)

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

			:param other: Исходный объект BarThematicStyleProvider, на базе которого необходимо сделать копию.
			:type other: :class:`BarThematicStyleProvider`

		.. py:method:: setExpressions(list)

			Задание списка выражений и соответствующих им стилей для каждого результирующего сегмента

			:param QList<ThematicColorExpressionParam> list: Список, содержащий параметры.
			:type list: :class:`list` [:class:`ThematicColorExpressionParam`]

		.. py:method:: setSizeParam(v)

			Задание параметров масштабирования 

			:param v: Новое значение.
			:type v: :class:`~axioma.render.BarSizeParam`

		.. py:method:: sizeParam()

			Текущие параметры масштабирования 

			:return: Установленные параметры масштабирования
			:rtype: :class:`~axioma.render.BarSizeParam`

		.. py:method:: isStacked()

			Располагать ли столбчатые диаграммы стопкой

			:return: True, если да. В противном случае False
			:rtype: :class:`bool`

		.. py:method:: setIsStacked(value)

		Установить вид расположения столбцов диаграммы. True, если необходимо расположить в виде стопки. По умолчанию False

		:param value: Значение
		:type value: :class:`bool`

		.. py:method:: calculateMaximum(table)

			Расчет максимального значения по заданным выражениям по всем записям таблицы

			:param table: Анализируемая таблица
			:type table: :class:`~axioma.core.dp.Table`
			:return: Рассчитанное значение
			:rtype: :class:`float`

		.. py:method:: thematicColorExpressionParams()

			Список параметров по анализируемым сегментам 

			:return: Список
			:rtype: :class:`list` [:class:`~axioma.render.ThematicColorExpressionParam`]

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

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

			:param ind: Индекс параметра
			:type ind: :class:`int`
			:param param: Параметр
			:type param: :class:`~axioma.render.ThematicColorExpressionParam`

		.. py:method:: thematicStyleParam(index)

			Запрос параметров сегмента по его индексу

			:param index: Индекс
			:type index: :class:`int`
			:return: Полученный по индексу параметр
			:rtype: :class:`~axioma.render.ThematicColorExpressionParam`

		.. py:method:: isGraduired()

			Является ли диаграмма масштабируемой в зависимости от полученного значения выражения

			:return: True, если размеры всех диаграмм тематического слоя имеют одинаковый размер. False, если размер масштабируется по выражению
			:rtype: :class:`bool`

		.. py:method:: setIsGraduired(value)

			Установить признак необходимости масштабирования диаграммы

			:param value: True, если производить масштабирование не требуется. False в противном случае
			:type value: :class:`bool`

BarThematicLayer
=================

.. currentmodule:: axioma.render

.. class:: BarThematicLayer

	Тематический слой в виде столбчатой диаграммы.

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

		.. py:method:: BarThematicLayer(parent)

			Конструктор

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

		.. py:method:: BarThematicLayer(other)

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

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

		.. py:method:: styleProvider()

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

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

		.. py:method:: setStyleProvider(provider)

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

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



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

  .. 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

    # Создание пар стиль - выражение
    def makeStylePair(layer, color, attr):
        style = polygonStyleForColor(color)
        expr = makeExpressionForWorld(layer, attr)
        return ThematicColorExpressionParam(style, expr)


    # Создание списка выражений по цветам
    def makeExpressionListForWorld(layer):
        list = []
        list.append(makeStylePair(layer, Qt.red, QObject().tr("Население")))
        list.append(makeStylePair(layer, Qt.blue, QObject().tr("Pop_Male")))
        list.append(makeStylePair(layer, Qt.green, QObject().tr("Pop_Fem")))
        return list

    # Столбчатая диаграмма
    def addBarThematic(layer):
        barLayer = BarThematicLayer(layer)
        barStyleProvider =  BarThematicStyleProvider(barLayer)
        barStyleProvider.setExpressions(makeExpressionListForWorld(layer)) # Установим выражения
        if len(barStyleProvider.thematicColorExpressionParams()) > 1:
            barStyleProvider.setIsStacked(True) # Стопкой
            barStyleProvider.setAllocationType(AllocationThematic.AT_LINEAR) # Распределение значений
            sizeParam = barStyleProvider.sizeParam() 
            sizeParam.value = barStyleProvider.calculateMaximum(layer.table()) # максимальное значение
            sizeParam.mapScale = 160000000 # для масштаба
            sizeParam.diameter = UnitValue(Unit.cm(), 1.0) # размер в сантиметрах
            barStyleProvider.setSizeParam(sizeParam)
            barLayer.setStyleProvider(barStyleProvider)  # Установка провайдера стиля
            addLayer(layer, barLayer)
