1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
# 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<Bezier>
# 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<Point> to D2<Bezier> 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<T>
- 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<sb>>(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
|