Source code for aerocaps.geom.plane

from aerocaps.geom.point import Point3D, Origin3D
from aerocaps.geom.vector import Vector3D
from aerocaps.units.length import Length

import pyvista as pv


__all__ = [
    "Plane",
    "PlaneX",
    "PlaneY",
    "PlaneZ"
]


[docs] class Plane:
[docs] def __init__(self, p0: Point3D, p1: Point3D, p2: Point3D): """ Creates a plane from three points Parameters ---------- p0: Point3D First point (origin of the plane) p1: Point3D Second point p2: Point3D Third point """ self.p0 = p0 self.p1 = p1 self.p2 = p2
@property def origin(self) -> Point3D: return self.p0
[docs] def compute_normal(self) -> Vector3D: """ Computes the unit vector normal to the plane Returns ------- Vector3D Unit normal vector """ v01 = Vector3D(p0=self.p0, p1=self.p1) v02 = Vector3D(p0=self.p0, p1=self.p2) v_out = v01.cross(v02) return v_out.get_normalized_vector()
@classmethod def plane_parallel_X(cls, distance_from_origin: Length): return cls( p0=Point3D(x=distance_from_origin, y=Length(m=0.0), z=Length(m=0.0)), p1=Point3D(x=distance_from_origin, y=Length(m=1.0), z=Length(m=0.0)), p2=Point3D(x=distance_from_origin, y=Length(m=0.0), z=Length(m=1.0)) ) @classmethod def plane_parallel_Y(cls, distance_from_origin: Length): return cls( p0=Point3D(x=Length(m=0.0), y=distance_from_origin, z=Length(m=0.0)), p1=Point3D(x=Length(m=0.0), y=distance_from_origin, z=Length(m=1.0)), p2=Point3D(x=Length(m=1.0), y=distance_from_origin, z=Length(m=0.0)) ) @classmethod def plane_parallel_Z(cls, distance_from_origin: Length): return cls( p0=Point3D(x=Length(m=0.0), y=Length(m=0.0), z=distance_from_origin), p1=Point3D(x=Length(m=1.0), y=Length(m=0.0), z=distance_from_origin), p2=Point3D(x=Length(m=0.0), y=Length(m=1.0), z=distance_from_origin) )
[docs] def plot(self, plot: pv.Plotter, plane_kwargs: dict = None, mesh_kwargs: dict = None) -> pv.PolyData: """ Plots the plane on the scene Parameters ---------- plot: :obj:`pyvista.Plotter` instance plane_kwargs: Keyword arguments to pass to the :obj:`pyvista.Plane` constructor. Default: ``None`` mesh_kwargs: Keyword arguments to pass to :obj:`pyvista.Plotter.add_mesh`. Default: ``None`` Returns ------- pv.PolyData The plane mesh object """ mesh = pv.Plane(self.origin.as_array(), self.compute_normal().as_array(), **plane_kwargs if plane_kwargs is not None else dict()) plot.add_mesh(mesh, **mesh_kwargs if mesh_kwargs is not None else dict()) return mesh
[docs] class PlaneX(Plane):
[docs] def __init__(self): super().__init__( p0=Origin3D(), p1=Point3D(x=Length(m=0.0), y=Length(m=1.0), z=Length(m=0.0)), p2=Point3D(x=Length(m=0.0), y=Length(m=0.0), z=Length(m=1.0)) )
[docs] class PlaneY(Plane):
[docs] def __init__(self): super().__init__( p0=Origin3D(), p1=Point3D(x=Length(m=0.0), y=Length(m=0.0), z=Length(m=1.0)), p2=Point3D(x=Length(m=1.0), y=Length(m=0.0), z=Length(m=0.0)) )
[docs] class PlaneZ(Plane):
[docs] def __init__(self): super().__init__( p0=Origin3D(), p1=Point3D(x=Length(m=1.0), y=Length(m=0.0), z=Length(m=0.0)), p2=Point3D(x=Length(m=0.0), y=Length(m=1.0), z=Length(m=0.0)) )