Coverage for plugins/klayout-pex-plugin-gmsh/src/klayout_pex_plugins/gmsh/exporter.py: 100%
12 statements
« prev ^ index » next coverage.py v7.17.2, created at 2026-11-06 13:14 +0000
« prev ^ index » next coverage.py v7.17.2, created at 2026-11-06 13:14 +0000
1#
2# --------------------------------------------------------------------------------
3# SPDX-FileCopyrightText: 2026 Martin Jan Köhler and Harald Pretl
4# Johannes Kepler University, Institute for Integrated Circuits.
5#
6# This file is part of klayout-pex-plugin-gmsh
7# (see https://github.com/iic-jku/klayout-pex-plugin-gmsh).
8#
9# This program is free software: you can redistribute it and/or modify
10# it under the terms of the GNU General Public License as published by
11# the Free Software Foundation, either version 3 of the License, or
12# (at your option) any later version.
13#
14# This program is distributed in the hope that it will be useful,
15# but WITHOUT ANY WARRANTY; without even the implied warranty of
16# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17# GNU General Public License for more details.
18#
19# You should have received a copy of the GNU General Public License
20# along with this program. If not, see <http://www.gnu.org/licenses/>.
21# SPDX-License-Identifier: GPL-3.0-or-later
22# --------------------------------------------------------------------------------
23#
25"""The exporter ``gmsh``: the mesh on its own, for any FEM tool or for looking at."""
27from __future__ import annotations
29from typing import TYPE_CHECKING, Any, ClassVar, List, Mapping, Optional
31from klayout_pex.plugin_api.v1 import PEX25DSceneExporter
33from .mesh import write_mesh
34from .options import GmshMeshOptions, parse_options
36if TYPE_CHECKING:
37 from klayout_pex_protobuf.kpex.pex25d.pex25d_scene_pb2 import PEX25DScene
40class GmshSceneExporter(PEX25DSceneExporter):
41 """Write a gmsh volume mesh of a resolved PEX25D scene."""
43 name: ClassVar[str] = 'gmsh'
44 default_prefix: ClassVar[str] = ''
46 def export(self,
47 scene: PEX25DScene,
48 *,
49 output_dir_path: str,
50 prefix: str = '',
51 options: Optional[Mapping[str, Any]] = None) -> List[str]:
52 """Return the mesh first, then the JSON naming its physical groups."""
53 settings = parse_options(GmshMeshOptions, options, self.name)
54 result = write_mesh(scene, settings, output_dir_path, prefix or self.default_prefix)
55 return result.paths