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

Uploaded CPython 3.12Windows x86-64

opensolid-0.2.0-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.0-cp312-none-macosx_14_0_arm64.whl (17.9 MB view details)

Uploaded CPython 3.12macOS 14.0+ ARM64

opensolid-0.2.0-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.0-cp312-none-win_amd64.whl.

File metadata

  • Download URL: opensolid-0.2.0-cp312-none-win_amd64.whl
  • Upload date:
  • Size: 10.4 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.0-cp312-none-win_amd64.whl
Algorithm Hash digest
SHA256 07a729bc789085641cd07c198e6079dec326b54d54e669bdb2d93d722aebd85a
MD5 f326881c936d242257639b2cb1d7fa88
BLAKE2b-256 b939285f1ba12ecc0ad5a6ab4851bfd0837448701e18ccbefeb892f8620f7e84

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for opensolid-0.2.0-cp312-none-manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 112fc505b125c14c51873e4a2694b4d15c236187daa330741e026930ed155dc8
MD5 dc6ebc047dec7fb167c4832c720341aa
BLAKE2b-256 31e7b3d4bdec1547ab1f59c93ff360b17167f9757520e68f59eadf54ced6504f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for opensolid-0.2.0-cp312-none-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 202d0c547748c7e6b906e26c4af590ac2e3fe0abd01f2b508959d62f85aba59b
MD5 53aeb26b202544ff5c1ec4a4e68c0704
BLAKE2b-256 64f335a93562d130dcaf33ef04a0714977e0e51d7cb17dbd73737c37a37dd7db

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for opensolid-0.2.0-cp312-none-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 a3fbd8725914de0a0cb08d695a00143afe011f7cd96ab012191a36991c247cd5
MD5 96e0212544c4bad622753c30373dcaa9
BLAKE2b-256 4d85828119b073978bcb5afe17dc3d99568e8d668d9d5da731d9a6ba536563bb

See more details on using hashes here.

Provenance

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