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

Uploaded CPython 3.12Windows x86-64

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

Uploaded CPython 3.12macOS 14.0+ ARM64

opensolid-0.3.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.3.0-cp312-none-win_amd64.whl.

File metadata

  • Download URL: opensolid-0.3.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.3.0-cp312-none-win_amd64.whl
Algorithm Hash digest
SHA256 ab6eb2293036ea12f5c6be1c069a80fb4fbf04e605a1aa11b8f4e59700d05964
MD5 bf7dd81665204df82429499c42907bc9
BLAKE2b-256 5e25ffc32647201cb888838758bfc19722e2d4c3fedde8814004fda773bb683f

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for opensolid-0.3.0-cp312-none-manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 f22736bf8bd85429b64f27dd648ef588e8a0816183a23decfe55dde49f08182f
MD5 4cd5ec81a3bdf3caf12a797cdfcbf591
BLAKE2b-256 e70bb6714ef54aadec50f838c14513d7115b239ced331c1bc9c050cb8ae6bf36

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for opensolid-0.3.0-cp312-none-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 38984e857cb26d88ec5c3ebc24b73633f944e7b5eede8486f29ba923bedbe6a6
MD5 ce407e8d2a48d82d90ba964a1e071573
BLAKE2b-256 2da154252a1da20b889ed5730471228b1c258795f1b53961bae7cfcec4e9798d

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for opensolid-0.3.0-cp312-none-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 37fb85f75ca4911a46ea4bd19ac9733a499e620288784a11893613c28618c045
MD5 0eb033f1845bda0aa740cef3528d2305
BLAKE2b-256 bee6b9674a505e7a8024635edfc4e74ee22ff0df7e4db22d54ca8098d84ddf11

See more details on using hashes here.

Provenance

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