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

Uploaded CPython 3.12Windows x86-64

opensolid-0.2.4-cp312-none-manylinux_2_35_x86_64.whl (17.4 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.35+ x86-64

opensolid-0.2.4-cp312-none-macosx_14_0_arm64.whl (18.0 MB view details)

Uploaded CPython 3.12macOS 14.0+ ARM64

opensolid-0.2.4-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.2.4-cp312-none-win_amd64.whl.

File metadata

  • Download URL: opensolid-0.2.4-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.4-cp312-none-win_amd64.whl
Algorithm Hash digest
SHA256 167179a77886190ca603e96ab536840f86ccbc733d62be7a7f9e3435addc9834
MD5 82d478cc3620d3246e0e3151c2a46822
BLAKE2b-256 e1167a4fff750d7f17f4e0f35045b789eae11f05200e4243611e947fb5facf0b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for opensolid-0.2.4-cp312-none-manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 188c68c85f895c0a42e3b9afa116ab0360281ca011235f6af659b3a55f1cc6e7
MD5 eb677e813b7a13327d4e19a9f776b61f
BLAKE2b-256 6009c663fb1a87e771cdab03f0151ae859ee155fab90fc733bfaed01f424a15c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for opensolid-0.2.4-cp312-none-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 f59171c30649c7a56f7d8c8fd01f12f678008412bf64c83a2fafc8ca2e41bfb2
MD5 8fbf4d69737ab8c4579a91c9f1268233
BLAKE2b-256 c65a91eebd818c41910d767396499d4f5ea25eb90d056ea23a0714db4855aea4

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for opensolid-0.2.4-cp312-none-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 8a99c0d3c6fdc135c57f0353c9cce9fbea3b341f7bdd1d5a9ea0219d2d54d060
MD5 ac328baef606f4fe4c509c93186d11f3
BLAKE2b-256 1c4ba3b9a1a9b71d9e12188713606154aa863715a664771326f86bf4aa381ec4

See more details on using hashes here.

Provenance

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