LabelPlacementPolicy - Настройки автоматической расстановки подписей
======================================================================

.. currentmodule:: axioma.render

.. class:: LabelSection

    Типы геометрий, используемых при выводе подписей

    .. csv-table:: Типы геометрий подписей :data:`LabelSection`:
        :header: "Тип", "Значение", "Описание"

        ``SectionArea``, 0, "Геометрические объекты, имеющие площадь (области)"
        ``SectionCurve``, 1, "Геометрические объекты, имеющие длину (линии)"
        ``SectionPoint``, 2, "Точечные геометрические объекты"


.. class:: CollectionRule

        Правило вывода одного из типов геометрических объектов коллекции

            .. class:: Rule

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

                .. csv-table:: Правило выбора геометрических объектов :data:`LabelingAlgorithmType`:
                    :header: "Правило", "Значение", "Описание", "Примечание"

                    ``RuleDisabled``, 0, "Не подписывать", ""
                    ``RuleBig``, 1, "Подписывать самый большой по площади или длине объект", "Для точек правило аналогично выбору ближайшей к центроиду точки"
                    ``RuleNearToCentroid``, 2, "Подписывать ближайший к центроиду объект", "Для линий правило учитывает длину объекта, т.е. если линия ближе к центроиду, но процент свеса не подходит для подписи, то такая линия не учитывается"
                    ``RuleEvery``, 3, "Подписывать каждый из объектов коллекции", ""
                    ``RuleAtCenter``, 4, "Подписывать в геометрическом центре набора объектов", "Используется только для точек коллекции"
                    ``RuleConvexHull``, 5, "Подписывать группу точек как область", "Используется только для точек коллекции; область образуется путём построения выпуклой оболочки точек"

            .. attribute:: section

                Тип геометрических объектов коллекции, для которых задаётся правило выбора

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

            .. attribute:: rule

                Правило выбора, применяемое к указанному типу геометрических объектов коллекции

                :type: :class:`~axioma.render.CollectionRule.Rule`


.. class:: LabelPlacementPolicy

        Настройки автоматической расстановки подписей
            
            .. class:: LabelingAlgorithmType
            
                Алгоритм расстановки подписей в окне карты
            
                .. csv-table:: Алгоритм расстановки подписей :data:`LabelingAlgorithmType`:
                    :header: "Наименование величины", "Значение", "Описание"

                    ``AllowOverlap``, 0, "Разрешить перекрытия"
                    ``DisallowOverlap``, 1, "Запретить перекрытия"
                    ``TryOtherPosition``, 2, "Пробовать другое положение"

            .. class:: LabelingDisplayMode

                Режим отображения автоматических подписей
                
                .. csv-table:: Режим отображения автоматических подписей :data:`LabelingDisplayMode`:
                    :header: "Наименование величины", "Значение", "Описание", "Дополнительно"
                    
                    ``ShowLabeling``, 0, "Показать подписи", "visible == ``True``, visibleRange.enabled() == ``False``"
                    ``HideLabeling``, 1, "Скрыть подписи", "visible == ``False``"
                    ``ShowInLimitLabeling``, 2, "Показывать подписи в пределах", "visible == ``True``, visibleRange.enabled() == ``True``"

            .. class:: ClipPolicy

                Использование отображаемой области карты при формировании подписей

                .. csv-table:: Правила обрезки геометрий автоматических подписей :data:`ClipPolicy`:
                    :header: "Правило", "Значение", "Описание"

                    ``ClipUse``, 0, "Использовать обрезку геометрий по видимой части карты (в этом случае подписи именуются динамическими)"
                    ``ClipSkip``, 1, "Использовать статические подписи (расчёт положения подписи ведётся по всей шеометрии безотносительно отображённой на экране части)"

            .. class:: Duplicates

                Разрешение дублирующихся подписей (по тексту)

                .. csv-table:: Правила учёта повтора подписей :data:`Duplicates`:
                    :header: "Правило", "Значение", "Описание"

                    ``DuplicatesAllow``, 0, "На слое разрешены любые дубликаты"
                    ``DuplicatesInterLayer``, 1, "Разрешены копии подписей на других слоях, на текущем слое дубли запрещены"
                    ``DuplicatesIntraLayer``, 2, "Разрешены копии подписей на текущем слое, при наличии дубля на ранее выведенном слое вывод подписи запрещён"
                    ``DuplicatesDisable``, 3, "Дубликаты подписей на данном слое запрещены"


            .. attribute:: visible

                Видимость подписей (при чтении проверяется видимость хотя бы одного типа: точек, линий или областей, при установке разрешается отображение всех типов)

                :type: :class:`bool`

            .. attribute:: visibleArea

                Видимость подписей у областей

                :type: :class:`bool`

            .. attribute:: visibleCurve

                Видимость подписей у линий

                :type: :class:`bool`

            .. attribute:: visiblePoint

                Видимость подписей у точек

                :type: :class:`bool`

            .. attribute:: labelingType

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

                :type: :class:`~axioma.render.LabelPlacementPolicy.LabelingAlgorithmType`

            .. attribute:: visibleRange

                Пределы отображения

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

            .. attribute:: collectionRules

                Список правил выбора элементов коллекции для подписывания. Порядок в списке важен.
                Если используется выбор одного из типов геометрий коллекции для подписывания (см. :attr:`axioma.render.LabelPlacementPolicy.labelEverySection`),
                то порядок соответствует приоритету выбора. Например, если заданы правила для линий, точек и областей, а в коллекции линии отсутствуют,
                то будут выбраны точки, если же и их нет, - области. Если же используется вывод по всем геометрическим типам коллекции, то порядок влияет
                на обработку правила наложения подписей (см. :class:`~axioma.render.LabelPlacementPolicy.LabelingAlgorithmType`).

                :type: :class:`list` [:class:`~axioma.render.CollectionRule`]

            .. attribute:: labelEverySection

                Признак использования всех геометрических типов коллекции для подписывания (по умолчанию подписывается только какой-то один тип в соответствии
                с правилам :attr:`axioma.render.LabelPlacementPolicy.collectionRules`).

                :type: :class:`bool`

            .. attribute:: overhang

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

                :type: :class:`int`

            .. attribute:: clipPolicyArea

                Правило обрезки областей по видимой части карты.

                :type: :class:`axioma.render.LabelPlacementPolicy.ClipPolicy`

            .. attribute:: clipPolicyCurve

                Правило обрезки линий по видимой части карты.

                :type: :class:`axioma.render.LabelPlacementPolicy.ClipPolicy`

            .. attribute:: clipPolicyCollection

                Правило обрезки коллекций по видимой части карты.

                :type: :class:`axioma.render.LabelPlacementPolicy.ClipPolicy`

            .. method:: isVisible(map_viewport)

                Видимость в области карты; определяется как:

                .. code-block:: python

                    visible and visibleRange.isVisible(map_viewport)

                :param map_viewport: :class:`~axioma.render.MapViewport`
                :rtype: :class:`bool`

            .. method:: labelingDisplayMode()

                Режим отображения подписей

                :rtype: :class:`~axioma.render.LabelPlacementPolicy.LabelingDisplayMode`

            .. method:: setLabelingDisplayMode(display_mode)

                Задать режим отображения подписей

                :param display_mode: :class:`~axioma.render.LabelPlacementPolicy.LabelingDisplayMode`
