我有一个组件和它们之间关系的图表。用户从根组件开始导航。他在组件上点击展开按钮,以显示与当前组件相关的新组件。
问题在于当用户决定折叠一个节点时。我必须选择要隐藏的子树,并同时保持图表处于一致状态,以便没有展开的节点与图表中的另一个节点缺失关系。
现在,如果存在环形/循环结构,则我很难选择子树。为简单起见,我选择它们扩展的顺序。因此,如果A展开为B和C,折叠A将隐藏它创建的节点和边缘。现在考虑以下情况。
[-]表示扩展状态,[+]表示尚未扩展状态。A已经展开以显示B和C。然后展开B以显示D。C被展开,创建了C和已经存在节点D之间的链接,并创建了节点E。现在用户决定折叠B。由于按扩展顺序,D是B的子项,所以它将折叠并隐藏D。这会使图形处于不一致状态,因为C具有到D的边缘,但D不再存在,即使我删除CD边缘,它仍会不一致。如果我折叠C。如果E再次是一个循环链接,例如到A,将产生相同的问题。
问题在于当用户决定折叠一个节点时。我必须选择要隐藏的子树,并同时保持图表处于一致状态,以便没有展开的节点与图表中的另一个节点缺失关系。
现在,如果存在环形/循环结构,则我很难选择子树。为简单起见,我选择它们扩展的顺序。因此,如果A展开为B和C,折叠A将隐藏它创建的节点和边缘。现在考虑以下情况。
[-]表示扩展状态,[+]表示尚未扩展状态。A已经展开以显示B和C。然后展开B以显示D。C被展开,创建了C和已经存在节点D之间的链接,并创建了节点E。现在用户决定折叠B。由于按扩展顺序,D是B的子项,所以它将折叠并隐藏D。这会使图形处于不一致状态,因为C具有到D的边缘,但D不再存在,即使我删除CD边缘,它仍会不一致。如果我折叠C。如果E再次是一个循环链接,例如到A,将产生相同的问题。
/-----B[-]-----\
A[-] D[+]
\-----C[-]-----/
\
E[+]
大家有什么想法,如何解决这个问题。用户需要通过图形导航,并应该能够折叠,但我被循环节点的问题所困扰,在这种情况下,如果折叠循环中的任何节点,将使图形处于不一致状态。