Skip to main content

Filler for N-sided holes

GitHub release (with filter) Upload Python Package PyPI - Version PyPI - Downloads GitHub License

A python package to fill N-sided holes using combined subdivision schemes, based on Catmull-Clark subdivison.

See Levin, Adi. “Filling N-sided Holes Using Combined Subdivision Schemes.” (2000).

Install

Use PyPI to install subdivision-hole-filler:

pip install subdivision-hole-filler

Usage

Run the following script to fill a hole.

import numpy as np

from subdivision_hole_filler import Boundary, NsidedHoleFiller

r = 1
R = 1

boundaries = [None, None, None, None, None, None]
for d in range(3):
    def coord(u: float, d=d):
        phi = (1.0 - u / 2.0) * np.pi / 2.0
        x = r * np.cos(phi)
        y = r * np.sin(phi)
        z = r + R
        c = np.zeros(3)
        c[d] = z
        c[(d + 1) % 3] = x
        c[(d + 2) % 3] = y
        return c

    def deriv(u: float, d=d):
        vec = np.zeros(3)
        vec[d] = -1
        return np.array(vec)

    bd = Boundary()
    bd.coord = coord # A function of parametric coord `u` in [0.0, 2.0], which defines the coordinate of a point on the boundary 
    bd.deriv = deriv # A function of parametric coord `u` in [0.0, 2.0], which defines the cross boundary derivative of a point on the boundary, poining to the inside
    boundaries[d*2] = bd

for d in range(3):
    def coord(u: float, d=d):
        phi = (1.0 - u / 2.0) * np.pi / 2.0
        x = R + r - R * np.cos(phi)
        y = R + r - R * np.sin(phi)
        z = 0
        c = np.zeros(3)
        c[d] = z
        c[(d + 1) % 3] = x
        c[(d + 2) % 3] = y
        return c
    
    def deriv(u: float, d=d):
        vec = np.zeros(3)
        vec[d] = 1
        return np.array(vec)

    bd = Boundary()
    bd.coord = coord # A function of parametric coord `u` in [0.0, 2.0], which defines the coordinate of a point on the boundary 
    bd.deriv = deriv # A function of parametric coord `u` in [0.0, 2.0], which defines the cross boundary derivative of a point on the boundary, poining to the inside
    boundaries[(d + 1) % 3 * 2 + 1] = bd

filler = NsidedHoleFiller(boundaries)

center_point = np.array([r, r, r])
filler.gen_initial_mesh(center_point)

for iteration in range(3):
    filler.cmc_subdiv_for_1step(iteration=iteration)

Here is the ouput.

Release files for subdivision-hole-filler 1.0.7

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for subdivision-hole-filler 1.0.7
File Size Uploaded
subdivision_hole_filler-1.0.7.tar.gz 287.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for subdivision-hole-filler 1.0.7
File Interpreter ABI Platform
subdivision_hole_filler-1.0.7-py3-none-any.whl Python 3 none any Details

Total release size: 295.2 kB

Release files / subdivision_hole_filler-1.0.7.tar.gz

Download URL subdivision_hole_filler-1.0.7.tar.gz
Size 287.5 kB
Tags Source
SHA-256 checksum
How to use checksums
310e2de14767a11e7cc44ae6cc027f296f44a83a25ca3c3955e88290a1116f61
BLAKE2b-256 checksum
How to use checksums
13cb0361c37aeb54207853fb99625db7076ff427d64aec3672b53831a9d46a5e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/5.1.1 CPython/3.12.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Dec 2, 2024.

Transparency log

Release files / subdivision_hole_filler-1.0.7-py3-none-any.whl

Download URL subdivision_hole_filler-1.0.7-py3-none-any.whl
Size 7.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
7ca8e6359631c7702c83385fece1ea113f7e3aad2f344b44066b89063e04d991
BLAKE2b-256 checksum
How to use checksums
0484f5a6974927d9cf9153bbbd2f9cf6e64bf2dfbcd948fddde742a10911969f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/5.1.1 CPython/3.12.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Dec 2, 2024.

Transparency log

Release history Release notifications | RSS feed

This release

1.0.7 This release

2 release files

1.0.6

2 release files

1.0.5

2 release files

1.0.4

2 release files

1.0.3

2 release files

1.0.2

2 release files

1.0.1

2 release files

1.0.0

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page