LabelProperties - Параметры подписывания
===================================================================

.. currentmodule:: axioma.render


.. class:: LabelProperties

	Параметры подписывания

		.. class:: SmoothPolyLine

			.. csv-table:: Параметры сглаживания ломаных линий для вывода надписей.
				:header: Наименование, Значение, Описание

				SmoothPolyLineStandard, 0, Использовать сглаживание по умолчанию
				SmoothPolyLineAbsent, 1, Не использовать сглаживание линий

		.. class:: AngleMax

			Возможные значения угла сглаживания (примерно к этому углу сводятся сегменты линии при сглаживании)

			.. csv-table:: Углы сглаживания ломаных линий :data:`AngleMax`:
				:header: Наименование, Значение, Описание

				AngleMaxNone, 0, Сглаживание не применяется
				AngleMax20, 1, 20°
				AngleMax25, 2, 25°
				AngleMax30, 3, 30°
				AngleMax38, 4, 38°
				AngleMax45, 5, 45°
				AngleMax60, 6, 60°

		.. method:: LabelProperties()

			Конструктор класса

		.. method:: isEmpty()

			Является ли пустым; считается пустым, если не определена позиция подписи

			:return: является ли пустым
			:rtype: :class:`bool`

		.. attribute:: callout

			Выноска

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

		.. attribute:: position

			Позиция подписи

			:type: :class:`~axioma.core.geometry.Point`

		.. attribute:: layout

			Положение подписи

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

		.. attribute:: smoothPolyLine

			Параметры сглаживания линий при выводе надписей. Более точно задаются параметром :attr:`axioma.render.LabelProperties.angleMax`

			:type: :class:`~axioma.render.LabelProperties.SmoothPolyLine`

		.. attribute:: reduceFontSize

			Разрешения на уменьшение размера шрифта и возможность использования вывода по центроиду

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

		.. attribute:: textProperties

			Установки, регулирующие исключительно вывод ручных подписей

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

		.. attribute:: angleMax

			Оптимальный угол сглаживания ломаных линий

			:type: :class:`~axioma.render.LabelProperties.AngleMax`

		.. attribute:: flatPlotFallback

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

			:type: :class:`bool`

		.. attribute:: flatAngle

			Предельный угол между сегментами линии, при превышении которого участок перестаёт считаться пологим

			:type: :class:`float`

.. class:: LabelLayout

	Положение подписи

	Выравнивание подписи по краям кодируется с помощью комбинации флагов :class:`PyQt5.QtCore.Qt.Edges`
		
		.. class:: Orientation

			.. csv-table:: Ориентация подписей.
				:header: Наименование, Значение, Описание

				Horizontal, 0, Выводить горизонтально по центроиду
				Parallel, 1, Выводить параллельно участку полилинии
				FollowPath, 2, Выводить вдоль полилинии

		.. class:: Placement

			Правило отрисовки подписи области

			.. csv-table:: Алгоритм выбора положения подписи области :data:`Placement`:
				:header: Наименование, Значение, Описание

				PlacementCentroid, 0, "Подпись выводится относительно центроида области"
				PlacementHorizontal, 1, "Подпись выводится внутри области горизонтально"
				PlacementVertical, 2, "Подпись выводится внутри области вертикально"
				PlacementSelect, 3, "Подпись выводится внутри области горизонтально, если положения найти не удалось, то производится поиск вертикального расположения"

		.. class:: Interior

			Правило выбора оптимального места для внутри области

			.. csv-table:: Алгоритм выбора лучшего места для подписи внутри области :data:`Interior`:
				:header: Наименование, Значение, Описание

				InteriorMax, 0, "Подпись выводится в самой широкой внутренней области"
				InteriorCentroid, 1, "Подпись выводится в ближайшей к центроиду области"

		.. class:: AntiAliasing

			Использование сглаживания при отрисовке подписи

			.. csv-table:: Алгоритм выбора сглаживания :data:`AntiAliasing`:
				:header: Наименование, Значение, Описание

				AntiAliasingUse, 0, "Всегда использовать сглаживание"
				AntiAliasingNone, 1, "Не использовать сглаживание"
				AntiAliasingNoneIfMany, 2, "Использовать сглаживание на слое, если подписей немного (меньше тысячи)"

		.. class:: ReferencePoint

			Точка отсчёта вывода подписи по ломаной линии

			.. csv-table:: Выбор участка вывода подписи :data:`ReferencePoint`:
				:header: Наименование, Значение, Описание

				RefPointGeneral, 0, "Подпись выводится на краю или посередине линии"
				RefPointCentroid, 1, "Подпись выводится на краю или посередине наидлиннейшего из пологих участков"
				RefPointFlat, 2, "Подпись выводится относительно центроида"

		.. method:: alignmentPoint()

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

			:return: установленное выравнивание подписи для точечных объектов
			:rtype: :class:`PyQt5.QtCore.Qt.Edges`

		.. method:: setAlignmentPoint([edges])

			Задать выравнивание подписи для точечных объектов. При нулевом параметре устанавливается выравнивание по центру (геоцентр располагается посередине подписи).
			Выравнивание производится относительно центроида объекта. Т.е. если задать setAlignment(Qt.BottomEdge | Qt.RightEdge), то метка будет находится слева вверху
			от геоцентра объекта.

			:param edges: комбинация флагов для выравнивания подписей точечных объектов
			:type endType: :class:`PyQt5.QtCore.Qt.Edges`
			:return: рефлексивная ссылка

		.. method:: alignmentCurve()

			Получить выравнивание подписи относительно центроида или другой точки на линии

			:return: установленное выравнивание подписи для линий
			:rtype: :class:`PyQt5.QtCore.Qt.Edges`

		.. method:: setAlignmentCurve([edges])

			Задать выравнивание подписи для линий. Зависит от режима выбора расположения линии (:class:`~axioma.render.LabelProperties.ReferencePoint`).
			Если используется выравнивание по центроиду (``refPointCentroid``), то выравнивание указывает на расположение центроида относительно линии.
			Если используется выравнивание по пологому участку (``refPointFlat``), то выравнивание указывает на расположение краёв или середины участка относительно линии.
			Аналогично задаётся выравнивание относительно всей ломаной линии в целом (``refPointGeneral``). При нулевом параметре устанавливается выравнивание по центру.
			Флаги Qt.BottomEdge и Qt.TopEdge отвечают за расположение подписи над и под линией соответственно
			(выравнивание по аналогии с точечными объектами указывается для точек на кривой, хотя для линий это и не вполне корректно).

		.. method:: alignmentArea()

			Получить выравнивание подписи относительно центроида области

			:return: установленное выравнивание подписи для областей
			:rtype: :class:`PyQt5.QtCore.Qt.Edges`

		.. method:: setAlignmentArea([edges])

			Задать выравнивание подписи для областей (может не использоваться, если вывод подписи не связан с центроидом).
			При нулевом параметре устанавливается выравнивание по центру (геоцентр располагается посередине подписи).
			Выравнивание производится относительно центроида подписи. Т.е. если задать setAlignment(Qt.BottomEdge | Qt.RightEdge), то метка будет находится слева вверху
			от геоцентра объекта.

			:param edges: комбинация флагов для выравнивания подписей областей
			:type endType: :class:`PyQt5.QtCore.Qt.Edges`
			:return: рефлексивная ссылка

		.. method:: setAlignment([edges])

			Задать единое выравнивание подписи для всех типов объектов. При нулевом параметре устанавливается выравнивание по центру (геоцентр располагается посередине подписи).
			Выравнивание производится относительно центроида объекта. Т.е. если задать setAlignment(Qt.BottomEdge | Qt.RightEdge), то метка будет находится слева вверху
			от геоцентра объекта.

			:param edges: комбинация флагов для выравнивания подписей
			:type endType: :class:`PyQt5.QtCore.Qt.Edges`
			:return: рефлексивная ссылка

		.. method:: alignment()

			Устаревший метод. Возвращает выравнивание подписей областей.

			:return: установленное выравнивание подписи для областей
			:rtype: :class:`PyQt5.QtCore.Qt.Edges`

		.. method:: offsetPoint()

			Задать смещение относительно точечного объекта (ширина - горизонтальное смещение, высота - вертикальное)

			:return: горизонтальное и вертикальное смещение в пунктах (0-24)
			:rtype: :class:`PyQt5.QtCore.QSize`

		.. method:: setOffsetPoint(offset)

			Установить смещение относительно точечного объекта (ширина - горизонтальное смещение, высота - вертикальное). Не действует,
			если задано нулевое выравнивание по центру (см. :meth:`axioma.render.LabelProperties.setAlignmentPoint`).
			Вообще выравнивание по центру горизонтально или вертикально отключает соответствующее смещение.

			:param offset: горизонтальное и вертикальное смещение в пунктах (0-24)
			:type offset: :class:`PyQt5.QtCore.QSize`
			:return: рефлексивная ссылка

		.. method:: offsetCurve()

			Вертикальное смещение подписи относительно линии (для линий горизонтальное смещение не используется)

			:return: вертикальное смещение в пунктах (0-24)
			:rtype: :class:`int`

		.. method:: setOffsetCurve(offset)

			Установить условно вертикальное смещение относительно линии (горизонтальное смещение относительно точки на линии не используется). Не действует,
			если задано нулевое выравнивание по центру (см. :meth:`axioma.render.LabelProperties.setAlignmentCurve`).

			:param offset: вертикальное смещение в пунктах (0-24)
			:type offset: :class:`int`
			:return: рефлексивная ссылка

		.. method:: offsetArea()

			Вертикальное смещение подписи относительно центроида области (ширина - горизонтальное смещение, высота - вертикальное).

			:return: горизонтальное и вертикальное смещение в пунктах (0-24)
			:rtype: :class:`PyQt5.QtCore.QSize`

		.. method:: setOffsetArea(offset)

			Установить условно вертикльное смещение относительно линии (горизонтальное смещение относительно точки на линии не используется). Не действует,
			если задано нулевое выравнивание по центру (см. :meth:`axioma.render.LabelProperties.setAlignmentArea`).
			Вообще выравнивание по центру горизонтально или вертикально отключает соответствующее смещение.
			Смещение также не используется, если используется алгоритм вывода подписи внутри области (см. :class:`~axioma.render.LabelLayout.Placement`).

			:param offset: горизонтальное и вертикальное смещение в пунктах (0-24)
			:type offset: :class:`PyQt5.QtCore.QSize`
			:return: рефлексивная ссылка

		.. method:: setOffset(offset)

			Установить единое смещение (высота совпадает с шириной) сразу для всех типов геометрий. Полезно, например, при необходимости сброса всех смещений в ноль.

			:param offset: смещение в пунктах (0-24)
			:type offset: :class:`int`
			:return: рефлексивная ссылка

		.. method:: setOffsets(offset)

			Установить единое смещение сразу для всех типов геометрий.

			:param offset: горизонтальное и вертикальное смещение в пунктах (0-24)
			:type offset: :class:`PyQt5.QtCore.QSize`
			:return: рефлексивная ссылка

		.. method:: pixelOffsetPoint(dpiX, dpiY)

			Получение смещения подписи относительно точки в пикселах

			:param dpiX: число точек на дюйм устройства по горизонтали
			:type dpiX: :class:`float`
			:param dpiY: число точек на дюйм устройства по вертикали
			:type dpiY: :class:`float`
			:return: горизонтальное и вертикальное смещение в пикселах
			:rtype: :class:`PyQt5.QtCore.QSize`

		.. method:: pixelOffsetCurve(dpi)

			Получение смещения подписи относительно линии в пикселах

			:param dpi: число точек на дюйм устройства по условной вертикали
			:type dpi: :class:`float`
			:return: вертикальное смещение в пикселах
			:rtype: :class:`int`

		.. method:: pixelOffsetArea(dpiX, dpiY)

			Получение смещения подписи относительно центроида области в пикселах

			:param dpiX: число точек на дюйм устройства по горизонтали
			:type dpiX: :class:`float`
			:param dpiY: число точек на дюйм устройства по вертикали
			:type dpiY: :class:`float`
			:return: горизонтальное и вертикальное смещение в пикселах
			:rtype: :class:`PyQt5.QtCore.QSize`

		.. method:: screenOffsetPoint()

			Получение смещения подписи относительно точки в экранных пикселах

			:return: горизонтальное и вертикальное смещение в пикселах
			:rtype: :class:`PyQt5.QtCore.QSize`

		.. method:: screenOffsetCurve()

			Получение смещения подписи относительно линии в экранных пикселах

			:return: условно вертикальное смещение в пикселах
			:rtype: :class:`int`

		.. method:: screenOffsetPoint()

			Получение смещения подписи относительно центроида области в экранных пикселах

			:return: горизонтальное и вертикальное смещение в пикселах
			:rtype: :class:`PyQt5.QtCore.QSize`

		.. method:: offset()

			Устаревший метод. Возвращает вертикальное смещение для подписей областей.

			:return: смещение для подписей областей в пунктах (0-24)
			:rtype: :class:`int`

		.. method:: orientation()

			Ориентация подписи

			:return: тип ориентации
			:rtype: :class:`~axioma.render.LabelLayout.Orientation`

		.. method:: setOrientation(orientation)

			Установить вид ориентации

			:param orientation: тип ориентации
			:type orientation: :class:`~axioma.render.LabelLayout.Orientation`
			:return: рефлексивная ссылка

		.. method:: referencePoint()

			Участок, относительно которого производится вывод подписи

			:return: тип участка
			:rtype: :class:`~axioma.render.LabelLayout.ReferencePoint`

		.. method:: setReferencePoint(referencePoint)

			Установить участок линии для вывода подписи 

			:param referencePoint: тип ориентации
			:type referencePoint: :class:`~axioma.render.LabelLayout.ReferencePoint`
			:return: рефлексивная ссылка

		.. method:: placement()

			Способ вывода надписи для области

			:return: Алгоритм выбора места для подписывания области
			:rtype: :class:`~axioma.render.LabelLayout.Placement`

		.. method:: setPlacement(placement)

			Установить участок линии для вывода подписи 

			:param placement: способ вывода подписи области
			:type placement: :class:`~axioma.render.LabelLayout.Placement`
			:return: рефлексивная ссылка

		.. method:: interior()

			Принцип выбора внутренней области подписывания

			:return: уточнение расположения внутренней области подписывания
			:rtype: :class:`~axioma.render.LabelLayout.Interior`

		.. method:: setInterior(interior)

			Установить принцип выбора внутренней области подписывания

			:param interior: принцип выбора внутренней области подписывания
			:type interior: :class:`~axioma.render.LabelLayout.Interior`
			:return: рефлексивная ссылка

		.. method:: antiAliasing()

			Использование сглаживания при отрисовке подписи

			:return: условие использования сглаживания
			:rtype: :class:`~axioma.render.LabelLayout.AntiAliasing`

		.. method:: setAntiAliasing(antiAliasing)

			Установить принцип выбора алгоритм сшлаживания

			:param antiAliasing: принцип выбора алгоритм сглаживания
			:type antiAliasing: :class:`~axioma.render.LabelLayout.AntiAliasing`
			:return: рефлексивная ссылка

.. class:: ReduceFontSize

	Разрешения на уменьшение размера шрифта при выводе надписи внутри области

		.. method:: minSize()

			Получение минимально допустимого размера шрифта

			:return: минимально допустимый размер шрифта
			:rtype: :class:`float`

		.. method:: setMinSize(minSize)

			Установка минимально допустимого размера шрифта

			:param minSize: минимально допустимый размер шрифта
			:type minSize: :class:`float`

		.. method:: distribution()

			Предельно допустимое число шрифтов на слое

			:return: предельно допустимое число шрифтов на слое
			:rtype: :class:`int`

		.. method:: setDistribution(distribution)

			Установка предельно допустимого числа шрифта на слое. Ноль означает отсутствие ограничений при выборе размеров шрифта.
			Единица означает, что допустим только базовый размер шрифта. Двойка означает возможнось использования базового и минимального размеров шрифта.
			Прочие значения создают линейно распределённый список размеров шрифта между минимальным и базовым значениями.

			:param distribution: возможное число шрифтов на слое
			:type distribution: :class:`int`

		.. method:: allowTransgress()

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

			:return: признак вывода по центроиду в случае неудачного поиска участка внутри области
			:rtype: :class:`bool`

		.. method:: setAllowTransgress(allowTransgress)

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

			:param allowTransgress: признак вывода по центроиду в случае неудачного поиска участка внутри области
			:type allowTransgress: :class:`bool`


.. class:: LabelCallout

	Выноска

		.. class:: EndType

			.. csv-table:: Тип выноски.
				:header: Наименование, Значение, Описание

				None, 0, Не отображать
				Line, 1, Линия
				Arrow, 2, Стрелка


		.. method:: LabelCallout()

			Конструктор класса

		.. method:: LabelCallout(style, endType=0)

			Конструктор класса

			:param style: стиль линии выноски
			:type style: :class:`~axioma.render.LineStringStyle`
			:param endType: тип выноски
			:type endType: :class:`~axioma.render.LabelCallout.EndType`

		.. method:: endType()

			Тип выноски

			:return: тип выноски
			:rtype: :class:`~axioma.render.LabelCallout.EndType`

		.. method:: setEndType(endType)

			Задать тип выноски

			:param endType: тип выноски
			:type endType: :class:`~axioma.render.LabelCallout.EndType`

		.. method:: isVisible()

			Видимость выноски

			:return: видимость выноски
			:rtype: :class:`bool`

		.. method:: lineStringStyle()

			Стиль линии выноски

			:return: стиль линии выноски
			:rtype: :class:`~axioma.render.LineStringStyle`

		.. method:: setLineStringStyle(lineStringStyle)

			Задать стиль линии выноски

			.. note:: для редактирования стиля используйте готовый диалог :class:`~axioma.gui.StyleEditDialog`

			:param lineStringStyle: стиль линии выноски
			:type lineStringStyle: :class:`~axioma.render.LineStringStyle`


.. class:: TextProperties

	Свойства ручных подписей

		.. method:: text()

			Текст ручной подписи

			:return: текст ручной подписи, может быть многострочным (разделитель - LF)
			:rtype: :class:`string`

		.. method:: setText(str)

			Установка текста ручной подписи

			:param str: текст ручной подписи, может быть многострочным (разделитель - LF)
			:type str: :class:`string`

		.. method:: angleDegree()

			Угол вывода ручной подписи в градусах (по часовой стрелке от оси абсцисс)

			:return: угол наклона ручной подписи в градусах
			:rtype: :class:`float`

		.. method:: angleRadian()

			Угол вывода ручной подписи в радианах (по часовой стрелке от оси абсцисс)

			:return: угол наклона ручной подписи в радианах
			:rtype: :class:`float`

		.. method:: hasAngle()

			Полусение признака ненулевого угла наклона подписи

			:return: признак ненулевого угла наклона подписи
			:rtype: :class:`bool`

		.. method:: setAngleDegree(angle)

			Установка угла вывода ручной подписи в градусах (по часовой стрелке от оси абсцисс)

			:param str: угол наклона ручной подписи в градусах
			:type str: :class:`float`

		.. method:: setAngleRadian(angle)

			Установка угла вывода ручной подписи в радианах (по часовой стрелке от оси абсцисс)

			:param str: угол наклона ручной подписи в радианах
			:type str: :class:`float`

		.. method:: removeAngle()

			Обнуление угла наклона ручной подписи
