diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 18:24:48 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 18:24:48 +0000 |
commit | cca66b9ec4e494c1d919bff0f71a820d8afab1fa (patch) | |
tree | 146f39ded1c938019e1ed42d30923c2ac9e86789 /src/3rdparty/2geom/README.md | |
parent | Initial commit. (diff) | |
download | inkscape-cca66b9ec4e494c1d919bff0f71a820d8afab1fa.tar.xz inkscape-cca66b9ec4e494c1d919bff0f71a820d8afab1fa.zip |
Adding upstream version 1.2.2.upstream/1.2.2upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/3rdparty/2geom/README.md')
-rw-r--r-- | src/3rdparty/2geom/README.md | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/src/3rdparty/2geom/README.md b/src/3rdparty/2geom/README.md new file mode 100644 index 0000000..a4444e6 --- /dev/null +++ b/src/3rdparty/2geom/README.md @@ -0,0 +1,123 @@ +# 2Geom: easy 2D graphics library + +## What is this? + +2Geom is a C++ 2D geometry library geared towards robust processing of +computational geometry data associated with vector graphics. The primary +design consideration is ease of use and clarity. It is dual-licensed +under LGPL 2.1 and MPL 1.1. + +The library is descended from a set of geometric routines present in +Inkscape, a vector graphics editor based around the Scalable Vector +Graphics format, the most widespread vector graphics interchange format +on the Web and a W3C Recommendation. Due to this legacy, not all parts +of the API form a coherent whole (yet). + +Rendering is outside the scope of this library, and it is assumed +something like libcairo or similar is employed for this. 2geom +concentrates on higher level algorithms and geometric computations. + + +## Features List + +* C++ 17 +* 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 + + +## Dependencies + +To build 2Geom, you will need: + +* C++ 17 +* [Boost](http://www.boost.org/) (headers only) +* [glib](https://wiki.gnome.org/Projects/GLib) +* [GNU Scientific Library](http://www.gnu.org/software/gsl/) +* [double-conversion](https://github.com/google/double-conversion) +* [cairo](https://www.cairographics.org/) +* [Ragel](http://www.colm.net/open-source/ragel/) (if you want to modify the SVG path parser) +* [GTK+ 2](http://www.gtk.org/) (for demo programs) + + +## Building + +2Geom uses CMake as the build and configuration system. To build, type: + + mkdir build && cd build + cmake .. + make + +To run tests and performance tests: + + make test + make perf + +**Note**: Tests are disabled by default. To enable tests pass `-D2GEOM_TESTING=ON` to `cmake` command. + +Also check out some of the interactive programs in src/toys. + +Documentation is generated from source comments using Doxygen. +Run `doxygen` in the project root to generate documentation in +`doc/html`. + + +## API / ABI Stability + +Version 1.0 of 2Geom marks its first official release. With this +release the library's API/ABI is considered stable: + + * All public APIs will not be renamed or have their parameters changed + without providing backwards-compatible aliases. + + * New functionality added to these APIs will not change their meaning + or fundamental behaviors. + + * If an API needs to be removed or replaced, it will be declared + deprecated but will remain in the API until the next major version. + Warnings will be issued when the deprecated method is called. + + * We'll only break backwards compatibility of these APIs if a bug or + security hole makes it completely unavoidable. + +Improvements that would break the API/ABI will be noted in our bug +tracker, for a future release. + +2Geom does not follow Semantic Versioning. Instead, version numbers +match major Inkscape release versions. + + +## Further information + +Communications related to 2Geom development happen on a +[SourceForge mailing list](https://lists.sourceforge.net/lists/listinfo/lib2geom-devel). + +The primary user of 2Geom is [Inkscape](https://inkscape.org/en/). +API-breaking changes to 2Geom will require corresponding changes to +Inkscape. |