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

Uploaded CPython 3.12Windows x86-64

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

Uploaded CPython 3.12manylinux: glibc 2.35+ x86-64

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

Uploaded CPython 3.12macOS 14.0+ ARM64

opensolid-0.4.0-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.4.0-cp312-none-win_amd64.whl.

File metadata

  • Download URL: opensolid-0.4.0-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.4.0-cp312-none-win_amd64.whl
Algorithm Hash digest
SHA256 33c5e5ad0df0bbebe795a82f6e8dc36fe79a50b0ca595b0e83c42ea7d7768e9c
MD5 5bd89dca17200f091ae14883db49a4fa
BLAKE2b-256 620a11400036bd85d1ea59ba3f542b066c7bcfc7b54c3d9c6e1f853ba5cd5c3b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for opensolid-0.4.0-cp312-none-manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 087d30fc525da0f855291d7ef0b0bd820abbc4fa0260c49b7b537c49c01dc90a
MD5 07d3aadbdf7d40011afee332c2b5b3a4
BLAKE2b-256 7313fead8b8fbde3fa89b78146de4fb993e88800d66c3d0891ed8927114ba711

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for opensolid-0.4.0-cp312-none-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 bdb470179e78932e18985efa93992165942e314df6c8d11e7c3f064bc913a8b2
MD5 542e0af303c8d22ae81483c5de084686
BLAKE2b-256 1f789aac701aa57fbcc7310eaafbbbbc7b15b4d848431442c10c8dbf4b523ae0

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for opensolid-0.4.0-cp312-none-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 115fae437a908d30172032ead126b55fb057a4f09257c1f7b7de44b383899e9b
MD5 1cf0340d069b8e4127ff7091bc0a3c99
BLAKE2b-256 6378b55869416a6d19abfbf3dcacf16c345ca47335053344cf7ca79925372a4f

See more details on using hashes here.

Provenance

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