iVis-at-Bilkent / cytoscape.js-expand-collapse

A Cytoscape.js extension to expand/collapse nodes for better management of complexity of compound graphs
MIT License
126 stars 37 forks source link

Collapse edges between collapsed nodes #11

Open superbobry opened 8 years ago

superbobry commented 8 years ago

Currently the edges between collapsed nodes are left "as-is", i.e. if two nodes were collapsed into a supernode, the supernode has two incoming (or outgoing) edges. I wonder if it is possible to collapse the edges if the other side of each edge points to another supernode?

image

ugurdogrusoz commented 8 years ago

When compound nodes are collapsed, we create one meta edge per inter-graph edge coming out of / going into the collapsed compound. In case there are multiple such edges, we end up with multiple meta edges (multiple meta edges with the same source and target). We could implement an option named collapseMetaEdges to not generate more than one meta edge when true. Notice that this applies to situations where only one end is a meta node.

superbobry commented 8 years ago

Thank you for a quick reply! I like the idea of having an extra option and I'm fine with it applying in the case where there is a single meta node.

aindlq commented 8 years ago

As a workaround you can play around with meta edge styling. E.g

    {
      'selector': 'edge.meta',
      'style': {
        'curve-style': 'unbundled-bezier',
        'control-point-distances': '0 0 0',
      },
    },

This way, at least visually edges will be collapsed into one.

superbobry commented 8 years ago

Thanks, @aindlq, I'll give that a try!

On a slightly unrelated note: the fact that edges are replaced by meta edges seems to somehow break the qtip plugin. I.e. the following does NOT result in tooltips for meta edges:

cy.edges().qtip({
    content: function() { return "foobar"; },
    position: {my: "top center", at: "bottom center"},
    style: {classes: "qtip-bootstrap"},
    show: {event: "mouseover"},
    hide: {event: "mouseout"}
});

Is this a known issue?

aindlq commented 8 years ago

Are you doing this when you already have "meta" edges in cy.edges() or in the beginning when all nodes are expanded? If later is the case, you need to make sure that you initialize qtip on these new meta edges as well.

superbobry commented 8 years ago

If later is the case, you need to make sure that you initialize qtip on these new meta edges as well.

This was indeed the case. Thank you!

pmackay commented 6 years ago

We could implement an option named collapseMetaEdges to not generate more than one meta edge when true.

@ugurdogrusoz may I ask if support for this option has progressed at all?

ugurdogrusoz commented 6 years ago

Unfortunately we don't have resources for this at the moment.

paanday commented 6 years ago

How to initialize qtip on new meta-edges after collapse or expand? can you provide the code

Does666 commented 5 years ago

@aindlq

As a workaround you can play around with meta edge styling. E.g

    {
      'selector': 'edge.meta',
      'style': {
        'curve-style': 'unbundled-bezier',
        'control-point-distances': '0 0 0',
      },
    },

This way, at least visually edges will be collapsed into one.

Why only set curve-style to unbundled-bezier work ? I set it to bezier and this workaround not works. But I think unbundled-bezier looks ugly.

ephraimrothschild commented 1 year ago

Is there any progress on this?