Source code for sec_interp.exporters.svg_exporter

from __future__ import annotations

"""SVG exporter module for vector graphics."""

from pathlib import Path

from qgis.core import QgsMapRendererCustomPainterJob
from qgis.PyQt.QtCore import QRectF, QSize
from qgis.PyQt.QtGui import QPainter
from qgis.PyQt.QtSvg import QSvgGenerator

from sec_interp.logger_config import get_logger

from .base_exporter import BaseExporter

logger = get_logger(__name__)


[docs] class SVGExporter(BaseExporter): """Exporter for SVG vector format."""
[docs] def get_supported_extensions(self) -> list[str]: """Get supported SVG extension.""" return [".svg"]
[docs] def export(self, output_path: Path, map_settings) -> bool: """Export map to SVG. Args: output_path: Output file path map_settings: QgsMapSettings instance configured for rendering Returns: True if export successful, False otherwise """ try: width = self.get_setting("width", 800) height = self.get_setting("height", 600) title = self.get_setting("title", "Section Interpretation Preview") description = self.get_setting("description", "Generated by SecInterp QGIS Plugin") # Setup SVG generator generator = QSvgGenerator() generator.setFileName(str(output_path)) generator.setSize(QSize(width, height)) generator.setViewBox(QRectF(0, 0, width, height)) generator.setTitle(title) generator.setDescription(description) # Setup painter painter = QPainter() if not painter.begin(generator): return False try: painter.setRenderHint(QPainter.Antialiasing) # Render map job = QgsMapRendererCustomPainterJob(map_settings, painter) job.start() job.waitForFinished() # Draw legend if available show_legend = self.get_setting("show_legend", True) legend_renderer = self.get_setting("legend_renderer") if legend_renderer and show_legend: legend_renderer.draw_legend(painter, QRectF(0, 0, width, height)) return True finally: painter.end() except Exception: logger.exception(f"SVG export failed for {output_path}") return False