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

Uploaded CPython 3.12Windows x86-64

opensolid-0.3.4-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.4-cp312-none-macosx_14_0_arm64.whl (18.1 MB view details)

Uploaded CPython 3.12macOS 14.0+ ARM64

opensolid-0.3.4-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.4-cp312-none-win_amd64.whl.

File metadata

  • Download URL: opensolid-0.3.4-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.4-cp312-none-win_amd64.whl
Algorithm Hash digest
SHA256 37537cfb276c23b5d960306b4b5281e8297b3a141b8b90464236dfeb9790614d
MD5 735a219ca9a3b6d1e975643e5a30bc2b
BLAKE2b-256 6209405dd48c7a6ff3d23158e39fdc4c957c2b617c9f795164591fa78fcd76bf

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for opensolid-0.3.4-cp312-none-manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 1e4d3d4858084cdf3e69d81039bcb7abd83fb16c2722119e34b6b608fa3e5694
MD5 60410be9ccfad300033ed5b32c95d0a4
BLAKE2b-256 248143d7846a0f15ffd8cd0cfdb9037e7268aec3f0812e3c18bcb8259eac2964

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for opensolid-0.3.4-cp312-none-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 880c08b6487401e9146c4995f9f03bc836ab681f603775f4fb7d0975d48159c7
MD5 0221904eab6f239cadfc9212491dd206
BLAKE2b-256 90c719690a49f3851acb0fa89148bf9ec628ae343c715ac609e6d3e2de01ceec

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for opensolid-0.3.4-cp312-none-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 7e02d724dc1439c923d642bb839b3cb55f7110ce4baaad9c636e080a8ada6f87
MD5 ded7d7606776740576b29c3195adf251
BLAKE2b-256 aa34a435b143de59e143819a1eb07cdb6a09a7c60d14c4c904ee986d337c9efe

See more details on using hashes here.

Provenance

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