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

Uploaded CPython 3.12Windows x86-64

opensolid-0.7.1-cp312-none-manylinux_2_35_x86_64.whl (17.6 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.35+ x86-64

opensolid-0.7.1-cp312-none-macosx_14_0_arm64.whl (18.2 MB view details)

Uploaded CPython 3.12macOS 14.0+ ARM64

opensolid-0.7.1-cp312-none-macosx_13_0_x86_64.whl (20.3 MB view details)

Uploaded CPython 3.12macOS 13.0+ x86-64

File details

Details for the file opensolid-0.7.1-cp312-none-win_amd64.whl.

File metadata

  • Download URL: opensolid-0.7.1-cp312-none-win_amd64.whl
  • Upload date:
  • Size: 10.7 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.7.1-cp312-none-win_amd64.whl
Algorithm Hash digest
SHA256 5b0a2ef6b9bde07011a239c5cb8442c826d88c809cf0fe9049f210ef8ea8aa80
MD5 26ed60e38b3a9482ea2fee077b4694c2
BLAKE2b-256 aa0566c10064bf0fe3303fb1b27c20b6610e18edd7c13412ee7b1ff17d011925

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for opensolid-0.7.1-cp312-none-manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 b729b3d034ae5f8c8d9f5d6c4fd4039bfee57d8c50212dadd771653050701ba8
MD5 431ed64749b1694633dcd39a0c7c3a0a
BLAKE2b-256 10f0214dfa32b20f43329a1105ab15db437b4d16e15e528c5d29d6f293b8d1c8

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for opensolid-0.7.1-cp312-none-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 950361c85549f4c07dc0772b748860f4c4499496a1c74fa22038502e70c6c985
MD5 82aea4c0d9d4469e67ed604efa19d87a
BLAKE2b-256 fa632912609b367e47658278614b62b1f91e94973e9d335dd8c1c1df368f0aed

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for opensolid-0.7.1-cp312-none-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 f560b7539d8eed0a5ea3b43945b1710dee03d6801366ae6ae544838720537dd5
MD5 cfec0ca683de46175b4585917c139592
BLAKE2b-256 5639cb3b355ecdf69b80ad3af28e7eb9942e0ce41a5d53079ccf3ab8d7e4b734

See more details on using hashes here.

Provenance

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