Skip to main content

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

Project description

Taperable Helix

Documentation Status

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

Package Docs

@dataclass
class Helix:
    radius: float
    pitch: float
    height: float
    taper_out_rpos: float = 0
    taper_in_rpos: float = 1
    inset_offset: float = 0
    first_t: float = 0
    last_t: float = 1

@dataclass
class HelixLocation:
    # The internal thread radius and an array of HelixLocation
    radius: Optional[float] = None
    horz_offset: float = 0
    vert_offset: float = 0


def helix(
    h: Helix, hl: Optional[HelixLocation] = None
) -> Callable[[float], Tuple[float, float, float]]:
    ...

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 = helix(h)
    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 = helix(h, 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 = helix(h, 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 = helix(h, 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

  • sphinx

  • plotly

    • numpy

    • panda

    • python-kaleido

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.

History

0.1.0 (2020-08-31)

  • First release on PyPI.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

taperable_helix-0.7.0.tar.gz (18.2 kB view details)

Uploaded Source

Built Distribution

taperable_helix-0.7.0-py2.py3-none-any.whl (7.0 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file taperable_helix-0.7.0.tar.gz.

File metadata

  • Download URL: taperable_helix-0.7.0.tar.gz
  • Upload date:
  • Size: 18.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/49.6.0.post20200814 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.7.8

File hashes

Hashes for taperable_helix-0.7.0.tar.gz
Algorithm Hash digest
SHA256 a0af13ba77d3c03e1a0d47f53383418e74cf62c90fbc3723907863ac480e9ac3
MD5 d7763fd63800a71ad70855d3a9a54621
BLAKE2b-256 def3d1ab2b511c1ff7d52ee13963cae6ba468c5ab54973fcb63241b8e61ee367

See more details on using hashes here.

File details

Details for the file taperable_helix-0.7.0-py2.py3-none-any.whl.

File metadata

  • Download URL: taperable_helix-0.7.0-py2.py3-none-any.whl
  • Upload date:
  • Size: 7.0 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/49.6.0.post20200814 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.7.8

File hashes

Hashes for taperable_helix-0.7.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 149eb63b01715a765052b2d7da817278667427ee7fa8b760c1fed8db93c12501
MD5 be0ce4a0a219291fdc78b5ada91ea002
BLAKE2b-256 f9c88da164caa34e3a5259f2bdc48ed436da5333190e2a071ae0714e45f0c723

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page