Skip to main content

Library for manipulating and rendering non-uniform B-splines

Project description

BSpy

Library for manipulating and rendering B-spline curves, surfaces, and multidimensional manifolds with non-uniform knots in each dimension.

The Spline class has a method to fit multidimensional data for scalar and vector functions of single and multiple variables. It also can fit splines to functions, to solutions for ordinary differential equations (ODEs), geodesics, offsets, and lines of curvature. Spline has methods to create points, lines, circular arcs, spheres, cones, cylinders, tori, ruled surfaces, surfaces of revolution, four-sided patches, and compositions of splines. Other methods add, subtract, and multiply splines, as well as confine spline curves to a given range. There are methods to evaluate spline values, derivatives, normals, integrals, continuity, curvature, and the Jacobian, as well as methods that return spline representations of derivatives, normals, integrals, graphs, and convolutions. In addition, there are methods to manipulate the domain of splines, including trim, join, split, reparametrize, transpose, reverse, add and remove knots, elevate and extrapolate, and fold and unfold. There are methods to manipulate the range of splines, including dot product, cross product, translate, rotate, scale, and transform. Finally, there are methods to compute the zeros and contours of a spline and to intersect two splines. Splines can be saved and loaded in json format.

The SplineBlock class has methods to process an array-like collection of splines that represent a system of equations. There are highly-optimized methods to compute the contours and zeros of a spline block, as well as a variety of methods to manipulate and evaluate a spline block and its derivatives.

The BSpyConvert package converts BSpy splines and solid models to and from OpenCascade (OCCT) equivalents and a variety of geometry and CAD file formats, including STEP, IGES, and STL.

The Hyperplane class has methods to create individual hyperplanes in any dimension, along with axis-aligned hyperplanes and hypercubes.

The Manifold abstract base class for Hyperplane and Spline.

The Solid class has methods to construct n-dimensional solids from trimmed Manifold boundaries. Each solid consists of a list of boundaries and a Boolean value that indicates if the solid contains infinity. Each Boundary consists of a manifold (currently a Hyperplane or Spline) and a domain solid that trims the manifold. Solids have methods to form the intersection, union, difference, and complement of solids. There are methods to compute point containment, winding numbers, surface integrals, and volume integrals. There are also methods to translate, transform, and compute cutouts of solids. Solids can be saved and loaded in json format.

The SplineOpenGLFrame class is an OpenGLFrame with custom shaders to render spline curves, surfaces, and solids. Spline surfaces with more than 3 dependent variables will have their added dimensions rendered as colors (up to 6 dependent variables are supported). Only tested on Windows systems.

The Viewer class is a tkinter.Tk app that hosts a SplineOpenGLFrame, a tree view full of solids and splines, and a set of controls to adjust and view the selected solids and splines. Only tested on Windows systems.

The Graphics class is a graphics engine to display solids and splines. It launches a Viewer and issues commands to the viewer for use in jupyter notebooks and other scripting environments. Only tested on Windows systems.

Viewer rendering the Utah teapot

The full documentation for BSpy can be found here, its GitHub project can be found here, a test suite can be found here, and a set of examples, including a jupyter notebook, can be found here.

Release 3.0 breaking changes

  • Removed accuracy as a member of Spline
  • Spline.common_basis is now a static method (see documentation for details)
  • Spline.least_squares changed arguments (see documentation for details)
  • Spline.load always returns a list of splines

Release 4.0 breaking changes

  • Removed Spline blossom method
  • Removed DrawableSpline class
  • Changed bspyApp class name to Viewer
  • Changed Viewer listbox to use extended selection (shift and ctrl keys)
  • Changed bspyGraphics class name to Graphics
  • Moved DrawableSpine methods for adjusting spline appearance to Viewer (see documentation for details)
  • Spline.bspline_values changed arguments (see documentation for details)
  • Spline.intersect changed return values (see documentation for details)

Release 5.0 breaking changes

  • Renamed Boundary.domain member to Boundary.trim
  • Renamed Solid.slice method to Solid.compute_cutout
  • Renamed Manifold.complete_slice method to Manifold.complete_cutout (also applies to Hyperplane and Spline classes)
  • Renamed Manifold.flip_normal method to Manifold.negate_normal (also applies to Hyperplane and Spline classes)

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

bspy-5.0.1.tar.gz (118.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

bspy-5.0.1-py3-none-any.whl (124.3 kB view details)

Uploaded Python 3

File details

Details for the file bspy-5.0.1.tar.gz.

File metadata

  • Download URL: bspy-5.0.1.tar.gz
  • Upload date:
  • Size: 118.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.9.13

File hashes

Hashes for bspy-5.0.1.tar.gz
Algorithm Hash digest
SHA256 9999b80d45c8a39f9a32b6dc4f18ab2217ffacf0450dcdb8d7e276655f73851b
MD5 142ac89ca3fad00ca6c5ccdd2904bc5d
BLAKE2b-256 77fb3489a6c94c4b5be67ca174980f9457401ed1d9192d6b30f68417eb50dbd9

See more details on using hashes here.

File details

Details for the file bspy-5.0.1-py3-none-any.whl.

File metadata

  • Download URL: bspy-5.0.1-py3-none-any.whl
  • Upload date:
  • Size: 124.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.9.13

File hashes

Hashes for bspy-5.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 06b183062a29a06324a72200adda1b3437074ef8381715d8618b748f54211974
MD5 25a07b853ca850d503df293e6824d93f
BLAKE2b-256 f0c5ca89ead1f9a35b9b03a3823e8cf23b27481ae1d92b6cd8a6a3d02184c88a

See more details on using hashes here.

Supported by

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