Difference between revisions of "DescendantsLines"

From Gramps
Jump to: navigation, search
(maintenance)
(maintenance)
Line 46: Line 46:
 
* TEXT_PAD
 
* TEXT_PAD
 
* TEXT_LINE_PAD
 
* TEXT_LINE_PAD
* output_fmt - The output format (PNG or SVG)
+
* output_fmt - The output format (PNG, SVG, PDF or PS)
 
* output_fn - The output filename
 
* output_fn - The output filename
 
* max_gen - Maximum number of generations to include.  
 
* max_gen - Maximum number of generations to include.  
Line 52: Line 52:
 
* inc_marriages - Whether to include marriage information in the output
 
* inc_marriages - Whether to include marriage information in the output
  
=== Example ===
+
=== Examples ===
 +
* [[File:DescendantsLines-m-ep.pdf]] -- DescendantsLines, example Gramps data, inc_marriages and inc_places, PDF output.
 
* [[:Image:Charlemagne-DescendantsLines.png]] -- A family tree of Charlemagne starting from Chloderic King of Cologne. (No preview, click on "Full resolution")
 
* [[:Image:Charlemagne-DescendantsLines.png]] -- A family tree of Charlemagne starting from Chloderic King of Cologne. (No preview, click on "Full resolution")
  
Line 69: Line 70:
 
* Add a generation limit. (done in Gramps-addons)
 
* Add a generation limit. (done in Gramps-addons)
 
* Make the XML export smaller. Use filter. (done in Gramps-addons)
 
* Make the XML export smaller. Use filter. (done in Gramps-addons)
* Add option for output format. (done in Gramps-addons trunk)
+
* Add option for output format. (PNG, SVG, PDF or PS) (done in Gramps-addons trunk)
 
* Think of tree compression algorithms.
 
* Think of tree compression algorithms.
 
* Add option to include divorces.
 
* Add option to include divorces.

Revision as of 20:40, 24 January 2012

Lines of descendants chart
DescendantsLines, example Gramps data, inc_marriages and inc_places.
Shakespeare family tree, DescendantsLines
Shakespeare family tree, DescendantsLines, including event places

DescendantsLines is an in-development addon for Gramps which generates a graphical descendants tree using orthogonal edges and routing ("square edges").

History

2007: Adam Sampson has written a standalone python script for parsing data.gramps (GRAMPS XML). [1]

2010: this script needs some updates for avoiding minor issues.

A modified script is available on the addons repository. [2]

Libraries

The program DescendantsLines, as the script in which it is based, is written in Python, using PyCairo and the Python XML library. Many Gramps modules are also used.

Limitations

  1. No option for name display format
  2. Partial quoting of xml-syntax-like data. Data which resembles xml syntax (tags, etc) may cause error.
  3. Script ignores role on event (was added in 2007)
  4. Script ignores localized date handlers (using ISO date format, date quality in english)
  5. Memory limitation with a large database (DOM parsing)
  6. The last pixel column of each secondary line of each entry is wrong coloured (red instead black)
  7. The addon DescendantsLines does not use the Gramps document interface. (perhaps the Gramps document interface options should be hidden)
  8. DestinationOption does not have the usual error handling and user checking (e.g. for overwriting files)

Usage

  1. Create the directory $GRAMPSHOME/gramps/gramps34/plugins/DescendantsLines/ .
  2. Copy the files DescendantsLines.py and DescendantsLines.gpr.py from svn to the directory $GRAMPSHOME/gramps/gramps34/plugins/DescendantsLines/ .
  3. Open Gramps and generate the report -- Reports -> Graphical Reports -> Descendants Lines. Choose the output path on "Destination" (default $GRAMPSHOME/DescendantsLines.png). The "Filename" option will contain an empty file after the report is run.
  4. The script currently runs in "debug mode" so it generates copious terminal output such as "Unknown event type: ..." or "Unknown spouse: ...". These warnings are harmless.

Options

The options for the addon DescendantsLines are:

  • S_DOWN - The length of the vertical edges from descendant to spouse-bar
  • S_UP - The length of the vertical edges from spouse-bar to spouse
  • S_VPAD - Length of vertical padding spacing between spouse and spouse-bar (?)
  • FL_PAD - Length of padding spacing between S_UP edges (vertical edges from spouse-bar to spouse) and O_DOWN edges (vertical edges from spouse-bar to child-bar)
  • OL_PAD
  • O_DOWN - The length of the vertical edges from spouse-bar to child-bar
  • C_PAD - Length of padding spacing between children
  • F_PAD - Length of padding spacing between families (?)
  • C_UP - The length of the vertical edges from child to child-bar
  • SP_PAD - Length of padding spacing between spouses
  • MIN_C_WIDTH
  • TEXT_PAD
  • TEXT_LINE_PAD
  • output_fmt - The output format (PNG, SVG, PDF or PS)
  • output_fn - The output filename
  • max_gen - Maximum number of generations to include.
  • inc_places - Whether to include event places in the output
  • inc_marriages - Whether to include marriage information in the output

Examples

Development

There is an experimental try for migrating this Gtk/cairo code to a draw plugin working into Gramps (font, style, path, canvas, output formats).

Draft version is available on Addons repository as unstable (beta). [3]

The idea will be to keep the Gramps XML parsing, but with a copy of the active database and use of current report environment (output formats, style, path).

Ideas

  • Add option to include event places. (done in Gramps-addons)
  • Add option to include marriage information. (done in Gramps-addons)
  • Using the library get_event_or_fallback() methods from gen.utils. (done in Gramps-addons)
  • Add a generation limit. (done in Gramps-addons)
  • Make the XML export smaller. Use filter. (done in Gramps-addons)
  • Add option for output format. (PNG, SVG, PDF or PS) (done in Gramps-addons trunk)
  • Think of tree compression algorithms.
  • Add option to include divorces.

Needs

Pass 1: generate a tmp XML with only data needed for the report, to load it as input

  1. Enable Person selection (Gramps ID) - done
  2. Generate a temp Gramps XML database matching 'IsDescendantFamilyOf' filter rule - done
  3. Input path - done (need to set @prefix@: path_to_SVN/src on const.py)
  4. Clean-up - done
  • simple Gramps XML template with events, persons, families objects (only export primary event role reference).
  • 'localized' dates (does not follow last DTD, which uses english and ISO format).


FINISHED - it works fine!

Pass 2: use draw report environment

  1. Generate a plugins/docgen/PNGDrawDoc.py file [4]
  2. Move Gtk code to draw report (if possible)
  3. Move cairo code to draw report (if possible)
  4. Output path
  5. Clean-up, pylint, etc ...

Pass 2 (Alternate): use of user-defined (mega)-widgets

  1. Have a look at mega-widget request and implementation [5]
  2. Output path through mega-widget
  3. Clean-up, pylint, etc ...

Pass 2 (Alternate): use a DestinationOption

  1. Use a DestinationOption
  2. Ignore standard Filename option

Command Line Interface

Gramps provides a cli support for running reports and tools [6].

  • use stdin and stdout for command line import/export [7]



Feel free to contribute or improve it.