Skip to content

winksaville/py-taperable-helix

Repository files navigation

Taperable Helix

Documentation Status

Generate helixes that can optionally taper to a point at each end.

Examples

def helical_line(
    radius: float = 5, pitch: float = 2, height: float = 6, num_points: int = 100
) -> List[Tuple[float, float, float]]:
    h: Helix = Helix(radius=radius, pitch=pitch, height=height)
    f = h.helix()
    points = list(map(f, linspace(start=0, stop=1, num=num_points, dtype=float)))
    # print(f"helical_line: points={points}")
    return points

https://raw.githubusercontent.com/winksaville/py-taperable-helix/master/data/helical_line.webp

def helical_triangle(
    radius: float = 1,
    pitch: float = 2,
    height: float = 4,
    num_points: int = 100,
    tri_height: float = 0.2,
    tri_width: float = 0.2,
) -> Tuple[
    List[Tuple[float, float, float]],
    List[Tuple[float, float, float]],
    List[Tuple[float, float, float]],
]:

    # Create three helixes that taper to a point

    # Create the base Helix
    h: Helix = Helix(
        radius=radius, pitch=pitch, height=height, taper_out_rpos=0.1, taper_in_rpos=0.9
    )

    # The Upper points, horz_offset defaults to 0
    fU = h.helix(HelixLocation(vert_offset=tri_height / 2))
    points_fU = list(map(fU, linspace(h.first_t, h.last_t, num=100, dtype=float)))

    # The Lower points, again horz_offset defaults to 0
    fL = h.helix(HelixLocation(vert_offset=-tri_height / 2))
    points_fL = list(map(fL, linspace(h.first_t, h.last_t, num=100, dtype=float)))

    # The Middle point, change vert_offset to 0
    fM = h.helix(HelixLocation(horz_offset=tri_width))
    points_fM = list(map(fM, linspace(h.first_t, h.last_t, num=100, dtype=float)))

    return (points_fU, points_fM, points_fL)

https://raw.githubusercontent.com/winksaville/py-taperable-helix/master/data/helical_tri.webp

Prerequisites

Using

  • python >= 3.7

Development and Examples

See dev-requirements.in for most up to date list:

  • pip-tools
  • bump2version
  • wheel
  • isort
  • black
  • flake8
  • tox
  • tox-conda
  • coverage
  • Sphinx~=3.2
  • sphinx-autodoc-typehints~=1.11
  • sphinx-prompt~=1.3
  • sphinx_substitution_extensions>=2020.09.30, <2021.12.00
  • twine
  • pytest
  • pytest-runner

Credits

This code originated from a post by Adam Urbanczyk to the CadQuery forum and this package was created with Cookiecutter and the audreyr/cookiecutter-pypackage project template.

About

Generate a helixes that can taper to a point

Resources

License

Stars

Watchers

Forks

Packages

No packages published