PGS
PGS copied to clipboard
Processing Geometry Suite
Processing Geometry Suite
Processing Geometry Suite is a software project that provides easy access to 2D geometric algorithms in the form of a Processing library.
The focus of the library is on visualisation rather than providing underlying data structures. To this end all methods in the library are static and most of them take in and return PShapes
or PVectors
.
Docs are hosted via GitHub Pages here.
Overview
Library functionality is split over the following classes:
-
PGS_CirclePacking
- Circle packings of shapes, subject to varying constraints and patterns of tangencies
-
PGS_Coloring
- Minimal colorings of meshes (or mesh-like shapes)
-
PGS_Construction
- Construct uncommon/interesting 2D primitives
-
PGS_Contour
- Methods that produce various contours from shapes: medial axes, straight skeletons, offset curves, etc.
-
PGS_Conversion
- Conversion between Processing PShapes and JTS Geometries
-
PGS_Meshing
- Mesh generation (excluding triangulation) from shapes
-
PGS_Morphology
- Methods that affect the geometry or topology of shapes (buffering, simplification, smoothing, etc.)
-
PGS_Optimsation
- Solve geometric optimisation problems, such as finding the maximum inscribed circle, or the closest vertex to a coordinate
-
PGS_PointSet
- Generates sets of 2D points having a variety of different distributions and constraints
-
PGS_Processing
- Methods that process a shape in some way: compute hulls, partition, slice, etc.
-
PGS_ShapeBoolean
- Boolean set-operations for 2D shapes
-
PGS_ShapePredicates
- Various shape metrics (area, circularity, etc.) and predicates ("do these shapes intersect?")
-
PGS_Tiling
- Tiling, tessellation and subdivision of the plane using periodic or non-periodic geometric shapes.
-
PGS_Transformation
- Various geometric and affine transformations that affect vertex coordinates
-
PGS_Triangulation
- Delaunay triangulation (constrained and refined) and earcut triangulation of shapes and point sets
-
PGS_Voronoi
- Voronoi Diagrams of shapes and point sets
Installation
Processing IDE — Quick
Download the latest PGS.jar from releases and simply drag-and-drop it onto the Processing IDE.
Processing IDE — Permanently
Download the latest PGS.jar from releases and save it to Documents\Processing\libraries\PGS\library
.
Result: Documents\Processing\libraries\PGS\library\PGS.jar
.
(Note the .jar and the folder must be called PGS
— rename the .jar if this is not the case).
Maven/Gradle
PGS is hosted as an artifact for use in Maven or Gradle projects via Jitpack — follow the instructions there (very easy).
Examples
A number of example Processing sketches are provided in examples.
Illustrations
Much of the functionality (but by no means all) is demonstrated below:
2D Boolean Operations
Union | Intersection | Subtraction | Symmetric Difference |
![]() |
![]() |
![]() |
![]() |
Complement | Mesh Union | ||
![]() |
![]() |
Transformation
Rotate Around | Translate To | Touch Scale | |
![]() |
![]() |
![]() |
![]() |
Rotate a shape around its centroid or an arbitrary point. | Translate a shape such that its centroid matches some position. | Scale one shape such that it touches another. | |
Resize | Homothetic Transformation | Shear | |
![]() |
![]() |
![]() |
|
Projection-transform a shape with respect to a fixed point. |
Geometric Predicates & Metrics
Intersects | Contains Shape | Contains Point |
![]() Do shapes intersect with each other? |
![]() Does one shape fully contain another? |
![]() For individual points and point sets. |
Metrics
- Length/perimeter
- Width & Height
- Diameter
- Circularity
- Similarity
- Holes
- Is simple?
- Is convex?
- Distance
- Area
- Centroid
Contour
Isolines | Offset Curves | ||
![]() |
![]() |
![]() |
![]() |
Isolines from intra-shape euclidean distance, or point sets. | Inner and exterior offset curves; based on miter, bevel or round offset styles. | ||
Voronoi Diagram | Circle-site Voronoi Diagram | ||
![]() |
![]() |
![]() |
![]() |
Straight Skeleton | Medial Axis | ||
![]() |
![]() |
![]() |
|
Medial axis transform with feature pruning via distance, area or axial angle. |
Morphology
Buffer | Erosion-Dilation | Minkowski Addition | ||
![]() |
![]() |
![]() |
![]() |
|
A negative followed by a positive buffer (in a single operation). | Minkowski sum and difference (a.k.a buffer one shape using another shape; the examples add a rotating & growing triangle). | |||
Smoothing | Gaussian Smoothing | Rounding | ||
![]() |
![]() |
![]() |
![]() |
|
Radial Warp | Field Warp | |||
![]() |
![]() |
![]() |
![]() |
|
Simplification | Chaikin Cutting | Interpolation | ||
![]() |
![]() |
![]() |
![]() |
Geometry Processing
Points on Perimeter | Point on Perimeter | Densification | |
![]() |
![]() |
![]() |
![]() |
Find N points (evenly distributed) along the perimeter of a shape, or points every D distance (with optional perpendicular offset). | Find a point some fraction along the perimeter of a shape (with perpendicular offset). | ||
Perimeter Extraction | Partitioning | Splitting | Slicing |
![]() |
![]() |
![]() |
![]() |
Partition a shape into simple (convex) polygons. | Subdivide (recursively) a shape into quadrants. | Slice a shape in two along a given line. | |
Constrained Random Point Set | Segment Set Intersection | ||
![]() |
![]() |
![]() |
![]() |
Generate constrained random point sets where all points lie within a shape. Points can be distributed entirely randomly or according to grid with configurable tightness. | Find all points of intersection between a collection of line segments. | ||
Concave Hull | Convex Hull | ||
![]() |
![]() |
![]() |
![]() |
Concave hull of point sets via breadth-first or depth-first approaches. | |||
Snap Hull | Shape Intersection | Polygonize Lines | |
![]() |
![]() |
![]() |
![]() |
A convex hull with some level of shape-feature snapping. | Find all points of intersection between two shapes. | Find the polygonal faces formed by a set of intersecting line segments. |
Triangulation
Delaunay Triangulation | Earcut Triangulation | ||
![]() |
![]() |
![]() |
![]() |
Poisson Delaunay Triangulation | |||
![]() |
|||
Delaunay triangulation of shapes where steiner points generated by poisson disk sampling are inserted. |
Meshing
Urquhart Faces | Gabriel Faces | Triangulation Dual | |
![]() |
![]() |
![]() |
![]() |
Polygon faces of an Urquhart Graph (derived from a triangulation). | Polygon faces of a Gabriel Graph (derived from a triangulation). | ||
Centroid Quadrangulation | Edge Collapse Quadrangulation | Split Quadrangulation | Spiral Quadrangulation |
![]() |
![]() |
![]() |
![]() |
Geometric Optimisation
Maximum Inscribed Circle | Minimum Bounding Rectangle | Maximum Inscribed Rectangle | |
![]() |
![]() |
![]() |
![]() |
Minimum Bounding Circle | Minimum Bounding Ellipse | ||
![]() |
![]() |
![]() |
![]() |
Minimum Bounding Triangle | Envelope | Problem of Apollonius | |
![]() |
![]() |
![]() |
![]() |
Closest Vertex | Closest Point Pair | Farthest Point Pair | |
![]() |
![]() |
![]() |
Circle Packing
Front Chain | Trinscribed | ||
![]() |
![]() |
![]() |
![]() |
Maximum Inscribed | Stochastic | ||
![]() |
![]() |
![]() |
![]() |
Square Lattice | Hex Lattice | ||
![]() |
![]() |
![]() |
![]() |
Coloring
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
Construction
Supercircle | Supershape | Star | |
![]() |
![]() |
![]() |
![]() |
Random Convex Polygon | Heart | Ring | Linear Spiral |
![]() |
![]() |
![]() |
![]() |
Fermat Spiral | Sierpinski Curve | ||
![]() |
![]() |
Point Sets
Random | Gaussian | Square Grid | Hex Grid |
![]() |
![]() |
![]() |
![]() |
Phyllotaxis | Poisson | Hexagon | Ring |
![]() |
![]() |
![]() |
![]() |
Halton LDS | Hammersley LDS | Plastic LDS | Jittered Plastic LDS |
![]() |
![]() |
![]() |
![]() |
N-Rooks LDS | Distance Prune | ||
![]() |
![]() |
Tiling & Subdivision
Random Quad Subdivision | Random Rect Subdivision | Random Triangle Subdivision | Islamic Tiling |
![]() |
![]() |
![]() |
![]() |
Doyle Spiral | Hexagon Tiling | Penrose Tiling | |
![]() |
![]() |
![]() |
![]() |