def Cylinder(center=(0., 0., 0.), direction=(1., 0., 0.), radius=0.5, height=1.0, resolution=100, **kwargs): """ Create the surface of a cylinder. 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] radius : float Radius of the cylinder. height : float Height of the cylinder. resolution : int Number of points on the circular face of the cylinder. capping : bool, optional Cap cylinder ends with polygons. Default True Returns ------- cylinder : pyvista.PolyData Cylinder surface. Examples -------- >>> import pyvista >>> import numpy as np >>> cylinder = pyvista.Cylinder(np.array([1, 2, 3]), np.array([1, 1, 1]), 1, 1) >>> cylinder.plot() # doctest:+SKIP """ capping = kwargs.get('capping', kwargs.get('cap_ends', True)) cylinderSource = vtk.vtkCylinderSource() cylinderSource.SetRadius(radius) cylinderSource.SetHeight(height) cylinderSource.SetCapping(capping) cylinderSource.SetResolution(resolution) cylinderSource.Update() surf = PolyData(cylinderSource.GetOutput()) surf.rotate_z(-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)