Source code for homcloud.interface.bitmap_optimal_1_cycle
import homcloud.pict.optimal_one_cycle as pict_opt1cyc
import homcloud.paraview_interface as pv_interface
import homcloud.plotly_3d as p3d
[docs]
class BitmapOptimal1Cycle(object):
"""The class represents an optimal (not volume-optimal) 1-cycle for bitmap.
Computing volume-optimal cycle is very expensive for 3-D and
higher dimensional cubical filtration. To fight against such
a huge filtration, :meth:`Pair.optimal_1_cycle` is available.
This method returns an instance of this class.
"""
def __init__(self, orig):
self.orig = orig
[docs]
def birth_time(self):
"""
Returns:
float: The birth time.
"""
return self.orig.birth_time
[docs]
def death_time(self):
"""
Returns:
float: The death time.
"""
return self.orig.death_time
[docs]
def birth_position(self):
"""
Returns:
tuple of float*N: The coordinate of birth position. (N: dimension)
"""
return self.orig.path[0]
[docs]
def path(self):
"""
Returns the path (loop) of the optimal 1-cycle.
The first item and the last item is the same as :meth:`birth_position`.
Returns:
list of coord: The list of vertices of the loop ordered by the path
"""
return self.orig.path
[docs]
def boundary_points(self):
"""
Returns:
list of coord: The list of vertices in the loop. Any vertex
in the list is unique.
"""
return self.orig.boundary_points()
[docs]
def to_paraview_node(self, gui_name=None):
"""
Construct a :class:`homcloud.paraview_interface.PipelineNode` object
to visulize an optimal 1-cycle.
You can show the optimal 1-cycle by
:meth:`homcloud.paraview_interface.show`. You can also
adjust the visual by the methods of
:class:`homcloud.paraview_interface.PipelineNode`.
Args:
gui_name (string or None): The name shown in Pipeline Browser
in paraview's GUI.
Returns:
homcloud.paraview_interface.PipelineNode: A PipelineNode object.
"""
return self.to_paraview_node_for_1cycles([self], gui_name)
[docs]
@staticmethod
def to_paraview_node_for_1cycles(cycles, gui_name=None):
"""
Construct a :class:`homcloud.paraview_interface.PipelineNode` object
to visulize multiple optimal 1-cycles.
Args:
cycles (list of :class:`Optimal1CycleForBitmap`):
The optimal 1-cycles to be visualized.
gui_name (string or None): The name shown in Pipeline Browser
in paraview's GUI.
Returns:
homcloud.paraview_interface.PipelineNode: A PipelineNode object.
"""
drawer = pict_opt1cyc.prepare_drawer_for_paraview(len(cycles))
for i, cycle in enumerate(cycles):
cycle.orig.draw(drawer, i, str(i))
f = pv_interface.TempFile(".vtk")
drawer.write(f)
f.close()
return pv_interface.VTK(f.name, gui_name, f).set_representation("Wireframe")
to_pvnode = to_paraview_node
to_pvnode_for_1cycle = to_paraview_node_for_1cycles
[docs]
def to_plotly3d_trace(self, color=None, name=""):
"""
Constructs a plotly's trace object to visualize the optimal 1-cycle
Args:
color (string or None): The name of the color
name (string): The name of the object
Returns:
plotly.graph_objects.Mesh3d: Plotly's trace object
"""
return p3d.Voxels(self.path(), color, name)
to_plotly3d = to_plotly3d_trace
[docs]
def to_pyvista_mesh(self):
"""
Constructs a PyVista's mesh object to visualize the optimal 1-cycle
Returns:
pyvista.PolyData: PyVista's mesh object
"""
import homcloud.pyvistahelper as pvhelper
return pvhelper.SparseVoxels(self.path())