def section(self,
                plane_normal,
                plane_origin):
        """
        Returns a 3D cross section of the current mesh and a plane
        defined by origin and normal.

        Parameters
        ---------
        plane_normal: (3) vector for plane normal
          Normal vector of section plane
        plane_origin : (3,) float
          Point on the cross section plane

        Returns
        ---------
        intersections: Path3D or None
          Curve of intersection
        """
        # turn line segments into Path2D/Path3D objects
        from .exchange.load import load_path

        # return a single cross section in 3D
        lines, face_index = intersections.mesh_plane(
            mesh=self,
            plane_normal=plane_normal,
            plane_origin=plane_origin,
            return_faces=True)

        # if the section didn't hit the mesh return None
        if len(lines) == 0:
            return None

        # otherwise load the line segments into a Path3D object
        path = load_path(lines)

        # add the face index info into metadata
        path.metadata['face_index'] = face_index

        return path
Returns a 3D cross section of the current mesh and a plane
        defined by origin and normal.

        Parameters
        ---------
        plane_normal: (3) vector for plane normal
          Normal vector of section plane
        plane_origin : (3,) float
          Point on the cross section plane

        Returns
        ---------
        intersections: Path3D or None
          Curve of intersection