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.2.2-cp312-none-win_amd64.whl (10.5 MB view details)

Uploaded CPython 3.12Windows x86-64

opensolid-0.2.2-cp312-none-manylinux_2_35_x86_64.whl (17.3 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.35+ x86-64

opensolid-0.2.2-cp312-none-macosx_14_0_arm64.whl (18.0 MB view details)

Uploaded CPython 3.12macOS 14.0+ ARM64

opensolid-0.2.2-cp312-none-macosx_13_0_x86_64.whl (20.0 MB view details)

Uploaded CPython 3.12macOS 13.0+ x86-64

File details

Details for the file opensolid-0.2.2-cp312-none-win_amd64.whl.

File metadata

  • Download URL: opensolid-0.2.2-cp312-none-win_amd64.whl
  • Upload date:
  • Size: 10.5 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for opensolid-0.2.2-cp312-none-win_amd64.whl
Algorithm Hash digest
SHA256 ae01bfb3e524e5c064b2c6e10d17ea58c36e679155d5dc09b35cfbb1d3c2b945
MD5 29c324e34bdd64ca2a5cdd183bc554b5
BLAKE2b-256 e3eae8aedb74ff720597c68663e86d061838cf94c175dcee86550c31db7ef1b4

See more details on using hashes here.

Provenance

The following attestation bundles were made for opensolid-0.2.2-cp312-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.2.2-cp312-none-manylinux_2_35_x86_64.whl.

File metadata

File hashes

Hashes for opensolid-0.2.2-cp312-none-manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 ab5f9c20e0c8b49fc179a0bbe2f72fa57aaf210458f1442c51c91e099235366e
MD5 dd730c585297efde3b7330635911433d
BLAKE2b-256 ae07e1761a9785838c007e6cc297ffbee2eb07e4686d904691ba48fbd536465e

See more details on using hashes here.

Provenance

The following attestation bundles were made for opensolid-0.2.2-cp312-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.2.2-cp312-none-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for opensolid-0.2.2-cp312-none-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 51e7758b4a8920df648ca20db6c5ab5923c6a0cb17d11930c166b6b7c9582362
MD5 f5effaf9f9550ad8c0b55fefb311c450
BLAKE2b-256 f9850f8c6d26280d0473d6199478fdb49da243f81afb62aa6430a9a4d128f769

See more details on using hashes here.

Provenance

The following attestation bundles were made for opensolid-0.2.2-cp312-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.2.2-cp312-none-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for opensolid-0.2.2-cp312-none-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 ddb2342a02f98ffeaa3f391e6496cfa3e692563ad87369faf12c58dd471cf3dc
MD5 ae45f4ae9f295c792bd23d393b122bae
BLAKE2b-256 38ee4c5336a0609ec7d66e2a14ec2ab96c0b39c7fce6c43f288d35119fb50308

See more details on using hashes here.

Provenance

The following attestation bundles were made for opensolid-0.2.2-cp312-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