from ddg.geometry import euclidean_models
from ddg.geometry.spheres import SphereLike
from ddg.nets import (
DiscreteDomain,
DiscreteNet,
EmptyDomain,
EmptyNet,
NetCollection,
PointNet,
)
from .geometry.spheres import circle_to_halfedge, sphere_to_icosphere
from .nets import discrete_domain_to_halfedge, discrete_net_to_halfedge
[docs]def to_halfedge(object_, **kwargs):
"""
Converts an object to a primitive halfedge surface
depending to its type.
"""
if isinstance(object_, SphereLike):
if isinstance(object_.geometry, euclidean_models.ProjectiveModel):
if object_.is_circle():
return circle_to_halfedge(object_, **kwargs)
else:
return sphere_to_icosphere(object_, **kwargs)
elif isinstance(object_, (DiscreteNet, EmptyNet, PointNet, NetCollection)):
return discrete_net_to_halfedge(object_, **kwargs)
elif isinstance(object_, (DiscreteDomain, EmptyDomain)):
return discrete_domain_to_halfedge(object_, **kwargs)
else:
raise TypeError(
f"Object of type {type(object_)} could not be converted to halfedge."
)