# Difference between revisions of "Lib2geom"

## What is lib2geom?

lib2geom (2Geom in private life) was initially a library developed for Inkscape, but it can provide a robust computational geometry framework for any application. It is not a rendering library, instead concentrating on high level algorithms such as computing arc length.

## Design Decisions

• Small, algebraic objects (Point/Matrix) will be mutable, whereas large objects like a pathset will be immutable. <justification here>
• We are using an original development method we've dubbed "Toy Driven Development". Under this process graphical toys are implemented which allow playing with the features of the library.

## Quick Feature List

(not complete)

• C++
• Functional programming style.
• Points
• Efficient affine transformations
• Rectangles
• Convex Hulls
• Bounded error
• General purpose paths:
• Exact elliptical arcs
• Area
• Centroid and bending moments
• Path Locations:
• Determination of special spots (e.g. maximum curvature)
• Splitting
• Point, tangent, curvature at location
• Efficient arc length and inverse arc length
• Path algebra:
• Computations such as offset curves can be written with their mathematical definition and still get a bounded error, efficient curve. (preliminary trials indicate offset done this way out performs the method used in Inkscape)
• Arbitrary distortion (with bounded error):
• Mesh distorts
• Computational distorts such as the GIMP's 'vortex' plugin
• 3d mapping (perspective, flag, sphere)
• Exact boolean ops (elliptic arcs remain elliptic arcs)
• Efficient 2d database
• Implicit function plotting
• NURBs input and output
• Tunable path simplification
• PDoF constraint system for CAD/CAGD

WorkingWith2GeomFAQ: real-life questions answered about using `2Geom` in real code
lib2geom py2geom: Python bindings to `2geom`. With this you can use the power of `2geom` in Python scripts.