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

Uploaded CPython 3.12Windows x86-64

opensolid-0.2.1-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.1-cp312-none-macosx_14_0_arm64.whl (18.0 MB view details)

Uploaded CPython 3.12macOS 14.0+ ARM64

opensolid-0.2.1-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.1-cp312-none-win_amd64.whl.

File metadata

  • Download URL: opensolid-0.2.1-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.1-cp312-none-win_amd64.whl
Algorithm Hash digest
SHA256 07845efea856cf87afe8f90f8430b96e4860fce1cea208d444fcd8ec61cb5c2b
MD5 19f89eee97c2ad1da799a5ec99326c60
BLAKE2b-256 a64293cd3190ef45b94bb65606a7c83cc57e2f2b9f8ebad7c73d06641f7ed32b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for opensolid-0.2.1-cp312-none-manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 4fd299978ac088baef53a32388e1fd70c2095d43b96a0ebec6b680b98dd6a1b2
MD5 2d5a6ead82b207b54a674ea373bbc0f8
BLAKE2b-256 7d8097398b176f7d08c640e6670f2fbd72c2a515d6afb565531b7db5d86833af

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for opensolid-0.2.1-cp312-none-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 c2a9054339fc00c7d9b9d55c563fc779feb7053f4419e9963ffa9b03dda91f50
MD5 e48c73688986e27d5040e1659cb1f0dd
BLAKE2b-256 fb289aa0a18e8c47b00263e7e692bb82c4ca2a1928bee4993f5404375ea91ccc

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for opensolid-0.2.1-cp312-none-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 e62be7df2b6b6b101ff10979145d1a6cc6a8fa3ccf7718eb17ea2f396bccb4d8
MD5 854fa5701bacf01da2d90b2d24033099
BLAKE2b-256 3005804e584098389f3c9996c403faee4b95577ccd290410d3935cdb30a5f5df

See more details on using hashes here.

Provenance

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