Saturday, November 9, 2024

Graph Layout and Diagramming Tools Projects

Automatic Graph Layout

Every few years (i.e. roughly 4-6) I will often end up having some project that necessitates auto-generating a big graph, in which case I again waste time going through all the layout engines checking if any do what I actually want, find that none do, and then waste time trying to tweak GraphViz parameters again...

That reminds me that it is probably time to give my own graph layout engine another go. Would've been for multilayered graphs with a particular flow structure 😜

(i.e. For those who know, it's basically a layout engine for Blender's DEG graphs, as I originally envisaged them - so the idea is to recursively group/agglomerate clusters of nodes which belong to some common entity. Then at each layer, just solve the simpler problem that exists at that level within the container (i.e. only layout the nodes under said parent container). Once we have this, we can then flush the required bounds for each nested layout up the hierarchy, and so forth).


My Own Dream Diagramming Tool

Of course, in the process, I'm reminded that a bigger priority is really to build my own diagramming tool that will fully work the way I want - with all the style presets, palettes, and interaction flows I've always dreamed of.

Oh, and to have this work multiplatform somehow, so I can use it on our locked-down work machines, but also on my phone (for quick sketches / doodles).

This is much much more a priority, as I do this *all the time*, and the existing tools are annoying for various reasons.

 

 

Wishlist for My Own Diagramming Tool

Examples of things I'd have:
* Infinite canvas by default, with auto-fit framing that dynamically-adapts to the contents (to export to a fixed size image, with potential size/aspect ratio limitations)

   * (This is a good reminder that I still haven't posted my  "Manifesto for Creative Software Tool Development" yet, as I was about to link to it here... it's coming soon I promise!)

* Sane defaults for line widths (especially arrow styling)

* No minimum margins around text in boxes

* Blender style hotkeys for selecting + manipulating items  (i.e. in particular, for decoupling selecting items vs moving items)

* Grease Pencil + Sculpt-tools

* Better connector snapping + routing behaviours

* Bigger default colour palette (i.e. 5 colour-sets, and a number of other "addons" that don't fit in that) are often not quite enough to get good diagrams, especially in more complicated cases)

* Can export to SVG / vector formats (instead of being restricted to raster)

* Multi-platform support - i.e. runs natively on desktop Windows + Linux, while being able to be run from a web browser for all other cases (i.e. including locked-down Windows IT-supplied machines) 

  * As part of multi-platform support though, that starts tying into my desire to one day build my own programming language that has built-in support for a lot of the things I end up building as standard parts of any tool I build... that is a separate post for another time...

* Better tools for grouping clusters of items together and having them move together, while making it easy to take existing items from a group to form a new one (without having them stay in-group / or being forced to ungroup everything).

* Of course, the snapping / alignment / spacing guides that are now present in Powerpoint (but absent in Inkscape) will also be present. Having gotten used to these now, it's hard to go back. I just wish they'd more consistently show me the things I care about!

   * So too will be some fine-adjustment ability (e.g. similar to the arrowkeys in Powerpoint now)

* And maybe, just maybe, somewhere in  there, there will be time to tackle the automatic graph layout problem here, as a built-in component that can still get manual overrides (and hence simplifying the problem). Maybe...


 

No comments:

Post a Comment