code: def capsule(height=1.0,
              radius=1.0,
              count=[32, 32]):
      
      height = float(height)
      radius = float(radius)
      count = np.array(count, dtype=np.int)
      count += np.mod(count, 2)
  
      # create a theta where there is a double band around the equator
      # so that we can offset the top and bottom of a sphere to
      # get a nicely meshed capsule
      theta = np.linspace(0, np.pi, count[0])
      center = np.clip(np.arctan(tol.merge / radius),
                       tol.merge, np.inf)
      offset = np.array([-center, center]) + (np.pi / 2)
      theta = np.insert(theta,
                        int(len(theta) / 2),
                        offset)
  
      capsule = uv_sphere(radius=radius,
                          count=count,
                          theta=theta)
  
      top = capsule.vertices[:, 2] > tol.zero
      capsule.vertices[top] += [0, 0, height]
  
      return capsule
docs: Create a mesh of a capsule, or a cylinder with hemispheric ends.
  
      Parameters
      ----------
      height : float
        Center to center distance of two spheres
      radius : float
        Radius of the cylinder and hemispheres
      count : (2,) int
        Number of sections on latitude and longitude
  
      Returns
      ----------
      capsule : trimesh.Trimesh
        Capsule geometry with:
          - cylinder axis is along Z
          - one hemisphere is centered at the origin
          - other hemisphere is centered along the Z axis at height