"""Classes for handling geometry.
Geometric objects (see :class:`GeometricObject`) are usually
used in :class:`~ihm.restraint.GeometricRestraint` objects.
"""
[docs]
class Center(object):
"""Define the center of a geometric object in Cartesian space.
:param float x: x coordinate
:param float y: y coordinate
:param float z: z coordinate
"""
def __init__(self, x, y, z):
self.x, self.y, self.z = x, y, z
[docs]
class GeometricObject(object):
"""A generic geometric object. See also :class:`Sphere`, :class:`Torus`,
:class:`Axis`, :class:`Plane`.
Geometric objects are typically assigned to one or more
:class:`~ihm.restraint.GeometricRestraint` objects.
:param str name: A short user-provided name.
:param str description: A brief description of the object.
"""
type = 'other'
def __init__(self, name=None, description=None):
self.name, self.description = name, description
[docs]
class Sphere(GeometricObject):
"""A sphere in Cartesian space.
:param center: Coordinates of the center of the sphere.
:type center: :class:`Center`
:param radius: Radius of the sphere.
:param transformation: Rotation and translation that moves the sphere
from the original center to its final location, if any.
:type transformation: :class:`Transformation`
:param str name: A short user-provided name.
:param str description: A brief description of the object.
"""
type = 'sphere'
def __init__(self, center, radius, transformation=None,
name=None, description=None):
super(Sphere, self).__init__(name, description)
self.center, self.transformation = center, transformation
self.radius = radius
[docs]
class Torus(GeometricObject):
"""A torus in Cartesian space.
:param center: Coordinates of the center of the torus.
:type center: :class:`Center`
:param major_radius: The major radius - the distance from the center of
the tube to the center of the torus.
:param minor_radius: The minor radius - the radius of the tube.
:param transformation: Rotation and translation that moves the torus
(which by default lies in the xy plane) from the original
center to its final location, if any.
:type transformation: :class:`Transformation`
:param str name: A short user-provided name.
:param str description: A brief description of the object.
"""
type = 'torus'
def __init__(self, center, major_radius, minor_radius, transformation=None,
name=None, description=None):
super(Torus, self).__init__(name, description)
self.center, self.transformation = center, transformation
self.major_radius, self.minor_radius = major_radius, minor_radius
[docs]
class HalfTorus(GeometricObject):
"""A section of a :class:`Torus`. This is defined as a surface over part
of the torus with a given thickness, and is often used to represent
a membrane.
:param thickness: The thickness of the surface.
:param inner: True if the surface is the 'inner' half of the torus
(i.e. closer to the center), False for the outer surface, or
None for some other section (described in `description`).
See :class:`Torus` for a description of the other parameters.
"""
type = 'half-torus'
def __init__(self, center, major_radius, minor_radius, thickness,
transformation=None, inner=None, name=None, description=None):
super(HalfTorus, self).__init__(name, description)
self.center, self.transformation = center, transformation
self.major_radius, self.minor_radius = major_radius, minor_radius
self.thickness, self.inner = thickness, inner
[docs]
class Axis(GeometricObject):
"""One of the three Cartesian axes - see :class:`XAxis`, :class:`YAxis`,
:class:`ZAxis`.
:param transformation: Rotation and translation that moves the axis
from the original Cartesian axis to its final location, if any.
:type transformation: :class:`Transformation`
:param str name: A short user-provided name.
:param str description: A brief description of the object.
"""
type = 'axis'
def __init__(self, transformation=None, name=None, description=None):
super(Axis, self).__init__(name, description)
self.transformation = transformation
[docs]
class XAxis(Axis):
"""The x Cartesian axis.
See :class:`GeometricObject` for a description of the parameters.
"""
axis_type = 'x-axis'
[docs]
class YAxis(Axis):
"""The y Cartesian axis.
See :class:`GeometricObject` for a description of the parameters.
"""
axis_type = 'y-axis'
[docs]
class ZAxis(Axis):
"""The z Cartesian axis.
See :class:`GeometricObject` for a description of the parameters.
"""
axis_type = 'z-axis'
[docs]
class Plane(GeometricObject):
"""A plane in Cartesian space - see :class:`XYPlane`, :class:`YZPlane`,
:class:`XZPlane`.
:param transformation: Rotation and translation that moves the plane
from the original position to its final location, if any.
:type transformation: :class:`Transformation`
:param str name: A short user-provided name.
:param str description: A brief description of the object.
"""
type = 'plane'
def __init__(self, transformation=None, name=None, description=None):
super(Plane, self).__init__(name, description)
self.transformation = transformation
[docs]
class XYPlane(Plane):
"""The xy plane in Cartesian space.
See :class:`GeometricObject` for a description of the parameters.
"""
plane_type = 'xy-plane'
[docs]
class YZPlane(Plane):
"""The yz plane in Cartesian space.
See :class:`GeometricObject` for a description of the parameters.
"""
plane_type = 'yz-plane'
[docs]
class XZPlane(Plane):
"""The xz plane in Cartesian space.
See :class:`GeometricObject` for a description of the parameters.
"""
plane_type = 'xz-plane'