Skip to main content

An under-development 2D/3D CAD library

Project description

OpenSolid is an under-development 2D/3D CAD library. This package contains its official Python bindings. The bindings (and OpenSolid itself) are still under active development, but you’re welcome to try them out!

The package contains a single opensolid module containing a variety of classes representing geometric values and quantities, such as Length, Angle, Point2d, and Direction2d. Each class and function has a brief docstring, but here’s a brief sampling of some of the operations you can do:

>>> from opensolid import *

# Define some Length values
>>> width = Length.meters(5)
>>> height = Length.centimeters(10)

# Multiply those to get an Area value
>>> width * height
Area.square_meters(0.5)

# All values are stored in SI units internally,
# so you can mix and match units freely
>>> Length.centimeters(100) + Length.inches(10)
Length.meters(1.254)

# You can request that any length be converted into
# a value in specific units (giving back a plain 'float')
>>> Length.meters(2).in_inches()
78.74015748031496

# Define a couple of points in 2D from their
# X and Y coordinates, given in centimeters
>>> p1 = Point2d.centimeters(50, 60)
>>> p2 = Point2d.centimeters(100, 80)

# Measure the distance between the points
>>> p1.distance_to(p2)
Length.meters(0.5385164807134505)

# Build up a parametric curve (expression);
# 'Curve.t' is the curve parameter, which
# ranges from 0 to 1, so here x will range
# from 0 to 5.
>>> x = 5 * Curve.t
>>> y = x.squared() - 5 * x + 1

# Evaluate the curve at t=0.5
>>> y.evaluate(0.5)
-5.25

# Find the values of t for which y=0. For this, we need
# to set up a tolerance value. (A tolerance is needed
# for cases where e.g. the curve decreases to a tiny
# value like 1e-9 before increasing again; should that
# be considered a solution or not? Similarly, if the
# curve decreases to -1e9 and then increases again,
# should that be considered two zeros or just one? See
# the documentation of Curve.zeros for more info.)
>>> with Tolerance(1e-6):
...     # Get the location of each zero, i.e. the
...     # value of t (not x!) for which y is zero
...     roots = [zero.location() for zero in y.zeros()]
>>> roots
[0.041742430504416, 0.9582575694955838]

# Find the values of x at which y is zero,
# by evaluating x at those roots
>>> [x.evaluate(t) for t in roots]
[0.20871215252208, 4.7912878474779195]

# Check that y is in fact zero at those roots
>>> [y.evaluate(root) for root in roots]
[0.0, 0.0]

# Construct a displacement (vector with length units)
# from its components in meters
>>> d = Displacement2d.meters(1, 2)

# To get the direction of a vector, we also need to
# define a tolerance (any vector with magnitude
# smaller than this value will be considered 'zero'
# and therefore have no direction, so attempting to
# get its direction will raise an exception).
>>> with Tolerance(Length.nanometer):
...     d.direction()
Direction2d.degrees(63.434948822922)

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

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

opensolid-0.8.0-py3-none-win_amd64.whl (10.8 MB view details)

Uploaded Python 3Windows x86-64

opensolid-0.8.0-py3-none-manylinux_2_35_x86_64.whl (18.2 MB view details)

Uploaded Python 3manylinux: glibc 2.35+ x86-64

opensolid-0.8.0-py3-none-macosx_14_0_arm64.whl (18.3 MB view details)

Uploaded Python 3macOS 14.0+ ARM64

opensolid-0.8.0-py3-none-macosx_13_0_x86_64.whl (20.5 MB view details)

Uploaded Python 3macOS 13.0+ x86-64

File details

Details for the file opensolid-0.8.0-py3-none-win_amd64.whl.

File metadata

  • Download URL: opensolid-0.8.0-py3-none-win_amd64.whl
  • Upload date:
  • Size: 10.8 MB
  • Tags: Python 3, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for opensolid-0.8.0-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 e53181ae43198486d344b9c2b0437a73e432730f48f45ac6a91e9fa93c259b24
MD5 b5e72239346eb62cfc1a1d2a1c3b83f0
BLAKE2b-256 c1909f11a549322fe789e27d7c869b7dc83be62210e121b34ca0c8fc9354b69f

See more details on using hashes here.

Provenance

The following attestation bundles were made for opensolid-0.8.0-py3-none-win_amd64.whl:

Publisher: main.yml on ianmackenzie/opensolid

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file opensolid-0.8.0-py3-none-manylinux_2_35_x86_64.whl.

File metadata

File hashes

Hashes for opensolid-0.8.0-py3-none-manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 143e0c36f7402a9f85b9e18ecb128793e53489e1a7f76d50e071a632f6996021
MD5 2d3dac3a0192e3cdeeb53d9da1efd24b
BLAKE2b-256 9ccd9a9736e54533ddee5a7db4ec556bdf44fc15a6234945f71efcab88264552

See more details on using hashes here.

Provenance

The following attestation bundles were made for opensolid-0.8.0-py3-none-manylinux_2_35_x86_64.whl:

Publisher: main.yml on ianmackenzie/opensolid

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file opensolid-0.8.0-py3-none-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for opensolid-0.8.0-py3-none-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 f35709bf82a9918a7a14c08da9c59b5da60630e7f10c3941158ad58ec4addbcf
MD5 d9a326c421f7dcfb5a06dde67865ac3a
BLAKE2b-256 a7ad576be501f469a97cff4d1857d9a0b8a41d01538306dc17915b8a8a2ea1cf

See more details on using hashes here.

Provenance

The following attestation bundles were made for opensolid-0.8.0-py3-none-macosx_14_0_arm64.whl:

Publisher: main.yml on ianmackenzie/opensolid

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file opensolid-0.8.0-py3-none-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for opensolid-0.8.0-py3-none-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 8f663c5fac9a2759229916accf80ef525c0ba4fdddf261593e1a772c522d3a73
MD5 9b4fe5bf668bb4a34506da01e8e4b5bd
BLAKE2b-256 4aed2bb2712d3b2c2cf3bb84b8440f56f37a220bcf9d98313e85e25047358a29

See more details on using hashes here.

Provenance

The following attestation bundles were made for opensolid-0.8.0-py3-none-macosx_13_0_x86_64.whl:

Publisher: main.yml on ianmackenzie/opensolid

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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