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

Uploaded CPython 3.12Windows x86-64

opensolid-0.3.3-cp312-none-manylinux_2_35_x86_64.whl (17.5 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.35+ x86-64

opensolid-0.3.3-cp312-none-macosx_14_0_arm64.whl (18.1 MB view details)

Uploaded CPython 3.12macOS 14.0+ ARM64

opensolid-0.3.3-cp312-none-macosx_13_0_x86_64.whl (20.1 MB view details)

Uploaded CPython 3.12macOS 13.0+ x86-64

File details

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

File metadata

  • Download URL: opensolid-0.3.3-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.3.3-cp312-none-win_amd64.whl
Algorithm Hash digest
SHA256 cfa26698015db28b1cc9dbf7462d6aeaccd9d0a9305912521da7f8663fdb40eb
MD5 f9b171d39dca96bb425ecbc40ed6a4cc
BLAKE2b-256 4561b96016a82de81096338af5c9780da3f02dc0a72bca60f6481e4e0ea2293f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for opensolid-0.3.3-cp312-none-manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 3b6155cc1e338704b919203a5136fe5cd1380289e9c67e6c3d3c210516f1225a
MD5 0bc445f7f54d0315e2f1b49343012d42
BLAKE2b-256 aaf068743f5931cd5d3099d51d649e59bdfccc797b482a2b63c93394b7276fd3

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for opensolid-0.3.3-cp312-none-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 22cd133c29278a5e38de56db5c4d10d05da6c1fea155d7e779fc618ec2af75fe
MD5 9a288dba43c9f2760b8173d24d6325e2
BLAKE2b-256 b0250ba2e510538cfe6c0791851dc938ad2ce52b21a30dbb806832f96a3b8337

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for opensolid-0.3.3-cp312-none-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 a0a0ded405b22763ac199d586961499dfea68f48d71c99564ae2356e0af41323
MD5 38d046c86f8ac6df077a7676d553d63b
BLAKE2b-256 f12f71468a4de0ac555f3cca346f1b348d4e9963c59d82a38ef0572bcd9ef7b1

See more details on using hashes here.

Provenance

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