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

Uploaded CPython 3.12Windows x86-64

opensolid-0.5.0-cp312-none-manylinux_2_35_x86_64.whl (17.6 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.35+ x86-64

opensolid-0.5.0-cp312-none-macosx_14_0_arm64.whl (18.2 MB view details)

Uploaded CPython 3.12macOS 14.0+ ARM64

opensolid-0.5.0-cp312-none-macosx_13_0_x86_64.whl (20.3 MB view details)

Uploaded CPython 3.12macOS 13.0+ x86-64

File details

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

File metadata

  • Download URL: opensolid-0.5.0-cp312-none-win_amd64.whl
  • Upload date:
  • Size: 10.6 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.5.0-cp312-none-win_amd64.whl
Algorithm Hash digest
SHA256 aef28caca43195f5d0a54fcef316d2724d4661fbe2c6b0abe714a6a3ee3ce4ee
MD5 c72be38eb63e080310d5535839a8e4f5
BLAKE2b-256 1cf16f4cf077374dde959a4695d0253fb555a36a816edc24b549a3f2ac759f35

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for opensolid-0.5.0-cp312-none-manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 1f1c7e80df285035e6d29caf3f59df6a2732702041369d1ec97848bcbf4787f8
MD5 09416c485d67e01a05e61bda1f86bfa7
BLAKE2b-256 ca61119d81f3d2a8ad7d60ac146068545e01d1427c3743ad796d0284d44d4537

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for opensolid-0.5.0-cp312-none-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 f715f0da98c5675ceb38b0f1f9e8c1062cc3132123c847dea7e51f4d761fa1a9
MD5 18bc0042e78c0ae921144b6191d29ba6
BLAKE2b-256 1331005d5b71711445e0a59ab7304fc1c7156cbf6d9d0d21297aa99aa730b05b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for opensolid-0.5.0-cp312-none-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 238567829a94a4ef85e5b33b60b07f89d2b468b79aabe3326010e247eaf9693b
MD5 2ede02a84194a18ac48a8e5ccfda3237
BLAKE2b-256 0da7fd14eaad40af920ff118825d476330e482d9861d45764a89e4e5b3d97b9a

See more details on using hashes here.

Provenance

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