DensitySizeParam
=================

.. currentmodule:: axioma.render

.. class:: DensitySizeParam

	Параметры, описывающие количество (плотность) точек и соответствующее им вычисленное значение выражения.

		.. py:method:: DensitySizeParam()

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

		.. py:method:: DensitySizeParam(points, value)

			Конструктор

			:param points: Количество  точек, заполняющих объект
			:type points: :class:`int`
			:param value: Максимальное значение, соответствующее данному количеству точек
			:type value: :class:`~PyQt5.QtCore.QVariant`
  
DensityStyleParam
=================

.. currentmodule:: axioma.render

.. class:: DensityStyleParam

	Вид (стиль) точек, которыми будет заполняться площадной объект

		.. csv-table:: Форма точки :class:`FormType`:
			:header: "Наименование величины", "Значение", "Описание"

			ftRound, 0, "Круглая"
			ftSquare, 1, "Квадратная"

		.. py:method:: DensityStyleParam()

		Конструктор со значениями по умолчанию (черные круглые точки размером 1)

		.. py:method:: DensityStyleParam(form, color, size)

			Конструктор

			:param form: Вид формы точки.
			:type form: :class:`FormType`
			:param color: Цвет точки
			:type color: :class:`QColor`
			:param size: Размер точки
			:type size: :class:`~axioma.render.UnitSize`

		.. py:attribute:: formType

			Вид формы точки.

			:type: FormType 

		.. py:attribute:: color

			Цвет точки

			:type: :class:`~PyQt5.QtGui.QColor`

		.. py:attribute:: name

			Размер точки

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


DensityThematicStyleProvider
=============================

.. currentmodule:: axioma.render

.. class:: DensityThematicStyleProvider

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

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

		.. py:method:: DensityThematicStyleProvider()

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

		.. py:method:: DensityThematicStyleProvider(other)

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

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

		.. py:method:: densitySizeParam()

			Параметры плотности точек

			:return: Заданные ранее параметры
			:rtype: :class:`~axioma.render.DensitySizeParam`

		.. py:method:: setDensitySizeParam(value)

			Задание новых параметров по плотности

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

		.. py:method:: evaluator()

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

			:return: Выражение
			:rtype: :class:`FeatureExpressionEvaluator`

		.. py:method:: setEvaluator(expression)

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

			:param expression: Задание выражения, по которому будут вычисляться значения при анализе таблицы.
			:type expression: :class:`FeatureExpressionEvaluator`

		.. py:method:: calculateMaximum(table)

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

			:param table: Таблица, из которой читаются значения по заданному ранее выражению.
			:type table: :class:`~axioma.core.dp.Table`
			:return: Максимальное значение по выражению по результатам анализа
			:rtype: :class:`~PyQt5.QtCore.QVariant`

		.. py:method:: setDensityStyleParam(par)

			Задание новых значений по стилю точек заполнения

			:param par: Новое значение
			:type par: :class:`DensityStyleParam`

		.. py:method:: densityStyleParam()

			Установленное значение стиля заполнения

			:return: Структура со стилем оформления
			:rtype: :class:`~axioma.render.DensityStyleParam`


DensityThematicLayer
====================

.. currentmodule:: axioma.render

.. class:: DensityThematicLayer

	Тематический слой с заполнением полигональных объектов точками, плотность которых зависит от вычисленного значения по выражению

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

		.. py:method:: DensityThematicLayer(parent)

			Конструктор

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

		.. py:method:: DensityThematicLayer(other)

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

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

		.. py:method:: styleProvider()

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

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

		.. py:method:: setStyleProvider(provider)

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

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

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

  .. 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 addDensityThematic(layer):
          print("Density thematic..." )
          densityLayer = DensityThematicLayer(layer) # Создание самого слоя
          densityStyleProvider =  DensityThematicStyleProvider(densityLayer) # Стиль оформления
          evaluator = makeExpressionForWorld(layer, QObject().tr("Население"))
          if not evaluator.hasError():
              densityStyleProvider.setEvaluator(evaluator);
              maxVal = densityStyleProvider.calculateMaximum( layer.table()) # Максимальное значение
              densityStyleProvider.setDensitySizeParam(DensitySizeParam(100, maxVal)) # 100 точек для максимального значения
              styleParam = DensityStyleParam(DensityStyleParam.ftRound, Qt.red, UnitSize(Unit.point(), 3)) # Круглые красные точки в 3 пикселя
              densityStyleProvider.setDensityStyleParam(styleParam)
              densityLayer.setStyleProvider(densityStyleProvider) # Установка провайдера стиля
              addLayer(layer, densityLayer)
