VectorMapRenderer
===================

.. currentmodule:: axioma.render

.. class:: VectorMapRenderer

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

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

		.. py:method:: VectorMapRenderer()

			Конструктор

		.. py:method:: blockingRender(map, context)

			Синхронное рисование карты. Растровые слои при отрисовке игнорируются.

			:param map: Карта, которая должна быть отрисована
			:type map: :class:`~axioma.render.Map`
			:param context: Контекст, в котором будет отрисована карта
			:type context: :class:`~axioma.render.MapContext`

.. note:: При отрисовке площадных объектов с заливкой в виде растровой текстуры, заливка игнорируется.

Пример отрисовка в SVG:

  .. code-block:: python

    def createLayer(name):
        table = axioma.core.open_json({'src': name})
        return render.createLayerForDataObject(table)

    try:
        layerWorld = createLayer('world.tab')
        layerWorldcap = createLayer('worldcap.tab')
        layerRail = createLayer('railway.tab')
        br = layerWorld.boundingRect()  # rect слоя
        sceneRect = QRectF(br.left(), br.top(), br.width(), br.height())
        size = QSize(1000, 1000*br.height()/br.width())
        imRect = QRect(0, 0, size.width(), size.height())
        map = Map()  # временная карта
        # добавляем слои в карту
        map.rootLayerGroup().append(layerRail)
        map.rootLayerGroup().append(layerWorldcap)
        map.rootLayerGroup().append(layerWorld)
        viewport = MapViewport(QRectF(imRect), sceneRect, layerWorld.coordSystem())
        # Вывод в svg
        generator = QSvgGenerator()
        generator.setFileName('out_vector.svg')
        generator.setSize(size);
        generator.setViewBox(QRect(QPoint(0, 0) , size));
        painter_svg = QPainter()
        painter_svg.begin(generator)
        context_svg = MapContext(painter_svg, viewport)  # контекст, куда рисуем
        vectorRenderer = VectorMapRenderer()
        vectorRenderer.render(map, context_svg)  # отрисовка карты
        #layerWorld.renderVector(context_svg) # Отрисовка слоя (не создавая renderer)
        painter_svg.end()
    except Exception as ex:
        print(ex)
