[AdgToyText] Refactored using maps
[adg.git] / docs / gnu / TODO.xml
bloba20d54ac5d06741c4d26962c3f8082bff5966f65
1 <?xml version="1.0"?>
2 <!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
3                          "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
5 <chapter id="TODO">
6 <title>Planned features</title>
7 <subtitle>A very rough roadmap of ADG features implementation</subtitle>
9 <para>The following list is roughly in implementation order. All the improvements
10 must be reflected in the demo programs, where applicable.</para>
12 <simplesect id="TODO.0.4.0">
13 <title>Road to adg-0.4.0</title>
15 <itemizedlist mark="circle">
16    <listitem override="disc">Split mathematic stuff in its own library. It will be called CPML,
17    that is Cairo Path Manipulation Library.</listitem>
18    <listitem override="disc">Avoid wrapping of cairo APIs in AdgPath.</listitem>
19    <listitem override="disc">Implement AdgToyText, a basic text entity using the cairo "toy" text API.</listitem>
20    <listitem override="disc">Implement AdgTranslatable, a shared interface for entities that
21    can be translated.</listitem>
22    <listitem override="disc">Implement AdgRotable, a shared interface for entities that can be rotated.</listitem>
23 </itemizedlist>
25 </simplesect>
27 <simplesect id="TODO.0.5.0">
28 <title>Road to adg-0.5.0</title>
30 <itemizedlist mark="circle">
31    <listitem override="disc">Develop a basic demo CPML program to visually check the results.</listitem>
32    <listitem override="disc">Provide CPML APIs for accessing cairo paths and browse their segments
33    (a contiguous line segment).</listitem>
34    <listitem override="disc">Provide CPML APIs for accessing segments and browse their primitives
35    (a single line / curve / close path).</listitem>
36    <listitem override="disc">CPML APIs to offset cairo paths: specifically, a decent
37    approximation for single Bézier curves must be implemented.</listitem>
38    <listitem override="disc">Implement APIs to get intersection points between different primitives.</listitem>
39    <listitem override="disc">Provide an abstract API (cpml_segment_intersection?) to compute the
40    intersection points between two segments. To be evaluated the way to
41    return the results (maybe using an argument to specify the maximum
42    number of intersections to return).</listitem>
43    <listitem override="disc">Generate documentation for CPML.</listitem>
44    <listitem override="disc">Merge ldim and adg-demo into a single demo program, basing the user
45    interface on GtkBuilder.</listitem>
46    <listitem override="disc">Implement AdgModel as a bare empty class. Move the actual stuff in
47    AdgTitleBlock.</listitem>
48    <listitem override="disc">Rename AdgPath to AdgStroke, being the latter a stroke representation
49    of a single AdgPath.</listitem>
50    <listitem override="disc">Implement AdgPath as an AdgModel derived class of a conceptual path.
51    Any AdgPath instance could be referenced by one or more entities.</listitem>
52    <listitem override="disc">Add arcs in CPML to transparently support, whenever possible, the
53    conversion between arcs and Bézier curves.</listitem>
54    <listitem override="disc">Add to AdgPath the basic functionality to build a path: basically a
55    bunch of methods emulating the cairo path API but without the need of
56    a yet instantiated cairo context.</listitem>
57    <listitem override="disc">Add support for the CPML arc feature in AdgPath.</listitem>
58    <listitem override="disc">Update the demo using the newly implemented AdgPath to deeply test the
59    model/entity interaction.</listitem>
60    <listitem override="disc">Add a chamfer operation to AdgPath.</listitem>
61    <listitem override="disc">Add a fillet operation to AdgPath.</listitem>
62    <listitem>Change the matrix entity API, using a cleaner approach.</listitem>
63    <listitem override="disc">Move AdgTranslatable and AdgRotable directly inside AdgEntity.</listitem>
64    <listitem>Ensure there are no bitfield flags, as they are not binding friendly.</listitem>
65    <listitem>Change building scripts to get the Gtk+ dependency optional.</listitem>
66    <listitem override="disc">Add AdgWidget, a GtkDrawingArea derived class that could accept an AdgCanvas.</listitem>
67    <listitem>Optimize the implemented entities applying the 0.3 ADG infractrusture
68    and enable caching where applicable.</listitem>
69    <listitem>Use AdgToyText to draw dimenstion quote where applicable.</listitem>
70    <listitem>Add a "beyond" property to AdgDimStyle to be used when extending the
71    baseline beyond the extension lines. If not specified, it must default
72    to 3 x arrow size.</listitem>
73    <listitem>Add a three-state enum to adg-enums.h: ADG_THREE_STATE_OFF,
74    ADG_THREE_STATE_ON and ADG_THREE_STATE_UNKNOWN.</listitem>
75    <listitem>Add the three-state "outside" property to allow forcing an outside quote.
76    In the default state, the outside must be decided by the space between
77    the extension lines: if greather than 3 x arrow size => inside arrows.</listitem>
78 </itemizedlist>
80 </simplesect>
82 <simplesect id="TODO.0.6.0">
83 <title>Road to adg-0.6.0</title>
85 <itemizedlist mark="circle">
86    <listitem>Implement the outside arrows in AdgLDim.</listitem>
87    <listitem>Rename Arrow to Marker: the latter is more generic (that is, better).</listitem>
88    <listitem>Rename StyleId to StyleType: the latter is more clear.</listitem>
89    <listitem>Implement AdgMarker as a customizable entity able to render (at least)
90    the styles defined in AdgMarkerStyleType. Also, the ARROW and TRIANGLE
91    styles should follow the director path that could be a curve. Use the
92    METAPOST solution suggested by John Hobby I don't know where, that is,
93    given <parameter>angle</parameter> and <parameter>size</parameter>, rotate the path by half <parameter>angle</parameter> in both directions,
94    look for intersection with a circle at the end of the director path
95    with radius <parameter>size</parameter>, close the resulting path and fill the arrow.</listitem>
96    <listitem>Rework styles by using GObject and properties.</listitem>
97    <listitem>Modify AdgMarkerStyle to use the newly implemented AdgMarker entity.</listitem>
98    <listitem>Implement a basic AdgHatchStyle, derived from AdgLineStyle.</listitem>
99    <listitem>Add AdgADim, the angular dimension.</listitem>
100    <listitem>Add AdgRDim, the radial dimension.</listitem>
101    <listitem>AdgPath should be an abstract class from which derive AdgPolyline,
102    the basic stroked path entity.</listitem>
103    <listitem>Add AdgHatch, an entity very similar to AdgStroke.</listitem>
104    <listitem>Add AdgToyTable, a container for AdgToyText in a framed environment.</listitem>
105    <listitem>Add AdgTitleBlock, a complex entity in paper space used to frame the
106    sheet and show the general drawing data (title, scale, date and so on).</listitem>
107 </itemizedlist>
109 </simplesect>
111 <simplesect id="TODO.unknown">
112 <title>Road to unknown</title>
114 <itemizedlist mark="circle">
115    <listitem>Add connectivity feature to AdgModel: enable dependencies of models to
116    external data. Use libgda as sample data provider.</listitem> 
117    <listitem>Add model-view interaction by providing signal propagation from AdgModel
118    to the dependent entities, so when a data changes the entities will be
119    automatically updated.</listitem>
120    <listitem>Implement AdgText, a generic text management, using pango.</listitem>
121    <listitem>Add self-intersection API for CPML segments.</listitem>
122    <listitem>Implement shape tolerances.</listitem>
123    <listitem>Add a CpmlArc primitive and some API to CpmlCurve to be able
124    to check if a curve is an arc approximation. This gives additional
125    information to do some operation, such as a proper arc offseting.</listitem>
126    <listitem>Improve Bézier offset approximation enabling the choice of approximate
127    a single curve with multiple offset curves.</listitem>
128 </itemizedlist>
130 </simplesect>
132 </chapter>