Ladybug geometry is a Python library that houses all of the basic geometry computation needed for Ladybug Tools core libraries.
Project description
ladybuggeometry
Ladybug geometry is a Python library that houses geometry objects used throughout the Ladybug Tools core libraries.
Installation
pip install U ladybuggeometry
API Documentation
Local Development
 Clone this repo locally
git clone git@github.com:ladybugtools/ladybuggeometry.git # or git clone https://github.com/ladybugtools/ladybuggeometry.git
 Install dependencies:
cd ladybuggeometry pip install r devrequirements.txt pip install r requirements.txt
 Run Tests:
python m pytests tests/
 Generate Documentation:
sphinxapidoc f e d 4 o ./docs ./ladybug_geometry sphinxbuild b html ./docs ./docs/_build/docs
Currently Supported Capabilities of this Library
 Vector Math
 Calculate Bounding Box (Min, Max, Center)
 Compute Area + Perimeter of Planar Geometry
 Check Concavity and Clockwise Ordering of 2D Geometry
 Triangulate Planar Geometry
 Compute Triangle + Quad Areas, Centroids, and Normals
 Move Geometry
 Rotate Geometry Around an Axis
 Mirror Geometry
 Scale Geometry from a Base Point
 Is Point Inside 2D Polygon
 3D Face Intersection with a Ray or Line
 Mesh Grid Generation from a 3D Face
 Windows Based on Ratio with a Face
 Solve Adjacencies
 Generate Louvers, Fins and Overhangs from a Face
 Check if a 3D PolyFace is a Closed Solid
 Ensure All Faces of a Solid PolyFace are Point Outwards
 Join Polylines and Polyfaces
 Check if a Point is Inside a Closed 3D Polyface
 Boolean a Set of 2D Curves (joining the naked edges around them)
Capabilities that should eventually be a part of this library
 <input type="checkbox" disabled="" /> Create Matching Zone Surfaces (intersection of surfaces with one another). OpenStudio's boost geometry has methods for this as @saeranv shows here
Officially Unsupported Capabilities for which One Must Rely on CAD Interfaces
 Conversion of Curved Surfaces to Planar Surfaces (including both single curvature and double curvature)
 Fancier Meshing (eg. gridded meshing that completely fills the base surface)
 Solid Boolean Unions (this should not be needed for anything in Ladybug Tools)
Reasons for this Library
We initially debated whether geometry computation should be placed largely on the CAD plugins or whether it should be included in the core. As we developed the core libraries out, it became clear that there are large advantages to having it in the core (ie. cross compatibility between the CAD plugins, ability to process more inputs from command line, and shear speed since the CAD libraries are made to address many more geometric use cases than are typically needed). So we have decided to include geometry computation as part of the Ladybug Tools core.
We looked into using other geometry computation libraries for the core including:
However, Rhino3dm lacks basic types of computation that is needed in the core (like generating a grid of points from a surface). Furthermore, Blender library only works in Python3 and this would break our workflows for the Grasshopper and Dynamo plugins, where rely on IronPython. Topologic seems to have many things that we need but it appears that it has C dependencies, making it unusable from IronPython. Furthermore, its dual license may create some difficulties for certain use cases of Ladybug Tools.
After considering it further, we realized that many of the calculations that we need can be done fairly easily as long as the geometry is planar. Since all of the geometry going to the engines (Radiance, E+) is eventually converted to a planar format anyway, we made the decision that the core libraries will support certain basic types of geometry computation for planar objects only. We planned to do this by taking the most relevant parts of existing open source geometry libraries, including euclid and OpenStudio. Thus this repository was born!
Project details
Release history Release notifications  RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Filename, size  File type  Python version  Upload date  Hashes 

Filename, size ladybug_geometry1.23.6py2.py3noneany.whl (125.6 kB)  File type Wheel  Python version py2.py3  Upload date  Hashes View 
Filename, size ladybuggeometry1.23.6.tar.gz (157.3 kB)  File type Source  Python version None  Upload date  Hashes View 
Hashes for ladybug_geometry1.23.6py2.py3noneany.whl
Algorithm  Hash digest  

SHA256  815fcdd3c52106db34b620c1821229ead52c52c0b2cd6a57adce98b2ecd91f1a 

MD5  d8d9f2f26fea571babe55b993654094b 

BLAKE2256  62a11b9d580599e97b98621dab4238800488733ffd127332e5a4028ed4402ed6 