I have a graph structure which is copied N times, and each copy has intersection points with the other copies. In practice this graph structure is never visualized in its entirety (it is comprised of tens of thousand of nodes) but instead a path or set of paths is highlighted.
It is important to differentiate between which copy of the graph that the current path is going through though, and I’m still trying to sort out the best way to visualize this. My current concept involves showing each copy of the graph as a lane (like in the swim lanes example) but I want the lanes to fill the diagram. Here’s a very basic version of what it should end up looking like:
Right now I’m using TreeLayout though, and it looks like SwimLaneLayout is based off LayeredDigraphLayout, which isn’t suitable for my needs here.
I imagine it might be enough to just use groups here, but I’m not sure how to force them to be completely non-interactive and fill the entirety of the background in the way I’m describing. How might I do that?
I’m not sure I understand what you want, but it sounds like you could just use simple Parts, each one holding a thick horizontal line Shape. You would need to position each one at the appropriate vertical position, and you would set the Shape’s width to the Diagram.documentBounds.width, and the height to zero.
That positioning would naturally be done as a final step in a layout. But I’m still unclear what you want to do for a layout.
Well, so my example was just drawing out lines to delineate the boundaries. In practice I’d like the background color to be separate for each lane.
In terms of layout, the most important thing would just be for elements of a given lane to be forced to remain in their lane. e.g. no node or group in the “top” lane can be moved to other lanes. I imagine this could be a constraint I could set (I’ve seen examples that do this) but I’m not sure how well it might handle the addition of new nodes and the layout of those nodes when they are forced around like this.
OK, use rectangular Shapes instead. Or use Groups, if you really want to, probably without a Placeholder.
There are several examples of Node.dragComputation that will hopefully give you enough of an idea for how to implement keeping nodes within the designated areas.