def Sphere(radius=0.5, center=(0, 0, 0), direction=(0, 0, 1), theta_resolution=30, phi_resolution=30, start_theta=0, end_theta=360, start_phi=0, end_phi=180): """ Create a vtk Sphere Parameters ---------- radius : float, optional Sphere radius center : np.ndarray or list, optional Center in [x, y, z] direction : list or np.ndarray Direction the top of the sphere points to in [x, y, z] theta_resolution: int , optional Set the number of points in the longitude direction (ranging from start_theta to end theta). phi_resolution : int, optional Set the number of points in the latitude direction (ranging from start_phi to end_phi). start_theta : float, optional Starting longitude angle. end_theta : float, optional Ending longitude angle. start_phi : float, optional Starting latitude angle. end_phi : float, optional Ending latitude angle. Returns ------- sphere : pyvista.PolyData Sphere mesh. """ sphere = vtk.vtkSphereSource() sphere.SetRadius(radius) sphere.SetThetaResolution(theta_resolution) sphere.SetPhiResolution(phi_resolution) sphere.SetStartTheta(start_theta) sphere.SetEndTheta(end_theta) sphere.SetStartPhi(start_phi) sphere.SetEndPhi(end_phi) sphere.Update() surf = PolyData(sphere.GetOutput()) surf.rotate_y(-90) translate(surf, center, direction) return surf
def process_spider_box_unit_cell( spider: pv.PolyData = get_unit_cell_spider(), box: pv.PolyData = get_unit_cell_box(), scale: float = 1.0, rotation: List[Tuple[str, float]] = None, translation: List[Union[int, float]] = None, ) -> Tuple[pv.PolyData, pv.PolyData]: """Process the spider-box unit cell through operations including scaling, rotations, and translations. Args: spider (pv.PolyData, optional): Polydata containing the spider unit. Defaults to get_unit_cell_spider(). box (pv.PolyData, optional): Polydata containing the box unit. Defaults to get_unit_cell_box(). scale (float, optional): scaling factor. Defaults to 1.0. rotation (List[Tuple[str, float]], optional): list of steps for rotation, in the form of list of tuples, and the tuple containing the direction (``"x"``, ``"y"``, or ``"z"``) in the first element, and the degrees in the second direction. Example: ``[("x", 90), ("z", 180)]``. Under the hood, the `rotate_x <https://docs.pyvista.org/core/common.html#pyvista.Common.rotate_x>`_, `rotate_y <https://docs.pyvista.org/core/common.html#pyvista.Common.rotate_y>`_, and `rotate_z <https://docs.pyvista.org/core/common.html#pyvista.Common.rotate_z>`_ methods in ``pv.PolyData`` are called. Defaults to None. translation (List[Union[int, float]], optional): Length of 3 list or array to translate the polydata. Under the hood, the `translate <https://docs.pyvista.org/core/common.html#pyvista.Common.translate>`_ method in ``pv.PolyData`` is called. Defaults to None. Returns: Tuple[pv.PolyData, pv.PolyData]: A tuple of ``pv.Polydata`` containing the spider and box. """ spider.points *= scale box.points *= scale if isinstance(rotation, list): for step in rotation: if step[0] == "x": spider.rotate_x(step[1]) if step[0] == "y": spider.rotate_y(step[1]) if step[0] == "z": spider.rotate_z(step[1]) if isinstance(translation, list): spider.translate(translation) box.translate(translation) return (spider, box)
def Plane(center=(0, 0, 0), direction=(0, 0, 1), i_size=1, j_size=1, i_resolution=10, j_resolution=10): """ Create a plane Parameters ---------- center : list or np.ndarray Location of the centroid in [x, y, z] direction : list or np.ndarray Direction cylinder points to in [x, y, z] i_size : float Size of the plane in the i direction. j_size : float Size of the plane in the i direction. i_resolution : int Number of points on the plane in the i direction. j_resolution : int Number of points on the plane in the j direction. Returns ------- plane : pyvista.PolyData Plane mesh """ planeSource = vtk.vtkPlaneSource() planeSource.SetXResolution(i_resolution) planeSource.SetYResolution(j_resolution) planeSource.Update() surf = PolyData(planeSource.GetOutput()) surf.points[:, 0] *= i_size surf.points[:, 1] *= j_size surf.rotate_y(-90) translate(surf, center, direction) return surf