-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrbf_io.py
More file actions
33 lines (28 loc) · 990 Bytes
/
rbf_io.py
File metadata and controls
33 lines (28 loc) · 990 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# -*- coding: utf-8 -*-
import os
import pyvista as pv
def ensure_output_prefix(path: str, prefix: str = "output_") -> str:
"""If basename doesn't start with prefix, prepend it."""
d, b = os.path.dirname(path), os.path.basename(path)
if not b.startswith(prefix):
b = prefix + b
return os.path.join(d, b)
def resolve_path(path: str) -> str:
ap = os.path.abspath(path)
if not os.path.exists(ap):
raise FileNotFoundError(f"File not found: {ap}")
return ap
def load_mesh(path: str) -> pv.DataSet:
path = resolve_path(path)
return pv.read(path)
def extract_surface(mesh: pv.DataSet, triangulate: bool = True) -> pv.PolyData:
surf = mesh.extract_surface()
if triangulate:
surf = surf.triangulate()
return surf
def save_poly(poly: pv.PolyData, path: str) -> str:
path = ensure_output_prefix(path)
out = os.path.abspath(path)
os.makedirs(os.path.dirname(out), exist_ok=True)
poly.save(out)
return out