Source code for abm_shape_collection.construct_mesh_from_coeffs
import numpy as np
import pandas as pd
from aicsshparam import shtools
from vtk import ( # pylint: disable=no-name-in-module
vtkPolyData,
vtkTransform,
vtkTransformPolyDataFilter,
)
[docs]def construct_mesh_from_coeffs(
coeffs: pd.DataFrame,
order: int,
prefix: str = "",
suffix: str = "",
scale: float = 1.0,
) -> vtkPolyData:
"""
Construct a mesh from spherical harmonic coefficients.
Parameters
----------
coeffs
Spherical harmonic coefficients.
order
Order of the spherical harmonics coefficient parametrization.
prefix
Prefix string for all coefficient columns.
suffix
Suffix string for all coefficient columns.
scale
Scale factor for mesh points.
Returns
-------
:
Mesh object.
"""
coeffs_map = np.zeros((2, order + 1, order + 1), dtype=np.float32)
for lix in range(order + 1):
for mix in range(order + 1):
coeffs_map[0, lix, mix] = coeffs[f"{prefix}shcoeffs_L{lix}M{mix}C{suffix}"]
coeffs_map[1, lix, mix] = coeffs[f"{prefix}shcoeffs_L{lix}M{mix}S{suffix}"]
mesh, _ = shtools.get_reconstruction_from_coeffs(coeffs_map)
if scale != 1.0:
transform = vtkTransform()
transform.Scale((scale, scale, scale))
transform_filter = vtkTransformPolyDataFilter()
transform_filter.SetInputData(mesh)
transform_filter.SetTransform(transform)
transform_filter.Update()
mesh = transform_filter.GetOutput(0)
return mesh