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

Uploaded CPython 3.12Windows x86-64

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

Uploaded CPython 3.12macOS 14.0+ ARM64

opensolid-0.2.3-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.3-cp312-none-win_amd64.whl.

File metadata

  • Download URL: opensolid-0.2.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.2.3-cp312-none-win_amd64.whl
Algorithm Hash digest
SHA256 7e2f6864c43ec9c14866d1b4534cf88cc4c5090914831914f7c44e1e042ed230
MD5 522431079b89ec5969b5f05b5c74d8af
BLAKE2b-256 4cc03561e601cd070f5981c5af0ae657a20d4e2d2c1d718676fe5bb3d04b538e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for opensolid-0.2.3-cp312-none-manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 ebc5e5ab9d389cca54cdfba790bf4358ea782b1828129911dcf49ebf0a7d05dd
MD5 e0f99e59f88be94e60fc62cf49d2192c
BLAKE2b-256 38f8f691740b016931e112c96aaf28caab136579ce0f6612c932277fbf600654

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for opensolid-0.2.3-cp312-none-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 bbd78e1683747399e7a5eedb874651fc9533f33500c00fcea9cf6d95c70be0be
MD5 24017b5d5bc64a07ae0ece5e605c1397
BLAKE2b-256 4c9fd8323354082f480125b0d8f319bfef00978bfb5d04ca0f7fefd1b6eaf864

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for opensolid-0.2.3-cp312-none-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 bc4c7711983a522ceb7ef38c24dcdd64bb1c2c0f84e2148172fb04e3bccdd80a
MD5 0fb38858efddc8766cacee31eecea19f
BLAKE2b-256 f85d906ea442f41cd1e426ce1d836ebd263e9f695873e9b62f9406f7389af9b0

See more details on using hashes here.

Provenance

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