Skip to content

Latest commit

 

History

History
85 lines (79 loc) · 3.67 KB

TODO.md

File metadata and controls

85 lines (79 loc) · 3.67 KB

Code Health:

  • Rewrite old tests using Google Test Framework.
  • Add more unit tests. Ideally, every method should be tested.
  • More Doxygen documentation. Document algorithms used to implement each nontrivial method, preferably with pictures.
  • Coding style.
  • Rewrite or remove old junk.

Primitives:

  • Add uniform points - Geom::UPoint.
  • Add projective transformations - Geom::Projective.
  • Add rational Bezier fragments / curves - Geom::D2U

Shapes:

  • Geom::Triangle
  • Geom::Quad
  • Geom::Polygon
  • Function that computes an Affine that maps between triangles.
  • Function that maps between Rects.
  • Function that maps between Ellipses (no skew).

Path / PathVector:

  • Built in support for arc length parametrization, computed on demand.
  • Boolean operations accessible via operators: &, |, / (or -), ^
  • Uncrossing.
  • Conversion from nonzero winding rule to even-odd winding rule.
  • Dashing - requires arc length parametrization.
  • Offset.
  • Stroke-to-path.
  • Minkowski sum.
  • Functions to facilitate node editing without conversion to a node list.
  • Approximation of arbitrary paths with cubic Beziers, quadratic Beziers or line segments, available as a path sink.
  • Approximation by lines and circular / elliptical arcs.
  • Support for per-node and per-segment user data?

Fragments:

  • Convert all uses of std::vector to D2 where applicable.
  • Consider adding push_back() for incremental building of Beziers.
  • Implement Bezier versions of SBasis methods.

Toys:

  • Better Bezier / SBasis handles.
  • Use GTK 3 to provide widgets such as checkboxes and buttons (?)

Other:

  • sweeper.h: add variants of Sweeper that accept void Item and add a version that does sweepline over two lists rather than one.
  • Rewrite conic section code to match coding style.
  • Rewrite QuadTree and RTree to make them actually usable.
  • BSP tree.
  • Interval tree - Geom::IntervalSet, Geom::IntervalMap
  • Geom::MultiInterval
  • Using the above, add regions, as seen in Cairo.
  • Add some basic 3D functionality, enough to draw a 3D box.
  • Write GDB pretty printers for all core classes. See the directory "tools"
  • Clothoid support (clothoids where the curvature is a not-necessarily linear function, perhaps piecewise SBasis, add fitting)
  • Special geometric shapes (stuff like circles, oriented rectangles, spirals, triangles, regular polygons, inkscape-like polygons, etc)
  • Constraint system for advanced handle stuff
  • complete and tidy up intersection apis
  • complete offset implementation: at this stage only the hard part has been implemented
  • conic sections: we currently support line and ellipse from xAx form, add parabola and hyperbola; intersection
  • NURBS (2geom handles division approximation of polynomials, code just needs to be added to convert between standard forms (say x/w, y/w in bernstein and pw<d2>(t))
  • T-mesh form for 2D (and higher?) piecewise polynomials
  • enhance contour tracing algorithm (sb-2d-solver)
  • transform an svg stroke in an outline (extends offset curve code to handle SVG options)
  • variable width curve tracing (variant on path along path idea)
  • collinear tangent (find a line that smoothly connects two curves); extension of bezier clipping idea
  • transform a path into a single curve (fitting) - improvements required
  • exploiting modern architecture features (cache coherence, multi-core, packet instruction set, gpgpu)
  • finish boolops (use faster and more robust sweep-window algorithm, add support for dB @ dB, dB @ B, B @ B where @ is any of the 16 boolean operators that make sense)
  • bucket fill (variant of bool ops for bucket filling)
  • path topology and numerical soundness graph