Algorithm for drawing a trees where nodes can attach to others with a depth greater than itself + 1










0















This is not a duplicate of the Reingold-tolford, since that's just for drawing normal tree like structures. specifically I am looking for an algorithm where a node can link to a node thats not only on the level below it.



I'm building a tree like structure within a canvas control in WPF.
Currently I have a structure built like this(ignore the collisions of boxes I have that fixed) that generates automatically from my data.



While this structure isn't to bad, it'd be nice to work towards something with less collisions.



Therefore are there any algorithms I can follow and work with to draw a graph like this with less collisions.



I'm calculating all positions of the boxes like this currently,



flattenedList is a List < List< Object>> hence the i, j itteration. and that object has a treePosition Property with an X and Y double.



var canvasWidthFinder = new List<int>();
//Loop through all componentversions, use indexes to calc their positions.
for (int i = 0; i < flattenedList.Count; i++)

canvasWidthFinder.Add(flattenedList[i].Count);
for (int j = 0; j < flattenedList[i].Count; j++)

flattenedList[i][j].TreePosition.YPosition = (i * 150) + 25;
flattenedList[i][j].TreePosition.XPosition = ((Canvas.ActualWidth / (flattenedList[i].Count + 1)) * (j + 1)) - (125 / 2);


Canvas.Width = (canvasWidthFinder.Max() * 160);


These values are then used to draw borders with text inside and lines drawn between the connecting ones.



Tree like graph structure.










share|improve this question
























  • Possible duplicate of What are the step to the Reingold-Tilford algorithm and how might I program it?

    – Peregrine
    Nov 14 '18 at 11:58















0















This is not a duplicate of the Reingold-tolford, since that's just for drawing normal tree like structures. specifically I am looking for an algorithm where a node can link to a node thats not only on the level below it.



I'm building a tree like structure within a canvas control in WPF.
Currently I have a structure built like this(ignore the collisions of boxes I have that fixed) that generates automatically from my data.



While this structure isn't to bad, it'd be nice to work towards something with less collisions.



Therefore are there any algorithms I can follow and work with to draw a graph like this with less collisions.



I'm calculating all positions of the boxes like this currently,



flattenedList is a List < List< Object>> hence the i, j itteration. and that object has a treePosition Property with an X and Y double.



var canvasWidthFinder = new List<int>();
//Loop through all componentversions, use indexes to calc their positions.
for (int i = 0; i < flattenedList.Count; i++)

canvasWidthFinder.Add(flattenedList[i].Count);
for (int j = 0; j < flattenedList[i].Count; j++)

flattenedList[i][j].TreePosition.YPosition = (i * 150) + 25;
flattenedList[i][j].TreePosition.XPosition = ((Canvas.ActualWidth / (flattenedList[i].Count + 1)) * (j + 1)) - (125 / 2);


Canvas.Width = (canvasWidthFinder.Max() * 160);


These values are then used to draw borders with text inside and lines drawn between the connecting ones.



Tree like graph structure.










share|improve this question
























  • Possible duplicate of What are the step to the Reingold-Tilford algorithm and how might I program it?

    – Peregrine
    Nov 14 '18 at 11:58













0












0








0


1






This is not a duplicate of the Reingold-tolford, since that's just for drawing normal tree like structures. specifically I am looking for an algorithm where a node can link to a node thats not only on the level below it.



I'm building a tree like structure within a canvas control in WPF.
Currently I have a structure built like this(ignore the collisions of boxes I have that fixed) that generates automatically from my data.



While this structure isn't to bad, it'd be nice to work towards something with less collisions.



Therefore are there any algorithms I can follow and work with to draw a graph like this with less collisions.



I'm calculating all positions of the boxes like this currently,



flattenedList is a List < List< Object>> hence the i, j itteration. and that object has a treePosition Property with an X and Y double.



var canvasWidthFinder = new List<int>();
//Loop through all componentversions, use indexes to calc their positions.
for (int i = 0; i < flattenedList.Count; i++)

canvasWidthFinder.Add(flattenedList[i].Count);
for (int j = 0; j < flattenedList[i].Count; j++)

flattenedList[i][j].TreePosition.YPosition = (i * 150) + 25;
flattenedList[i][j].TreePosition.XPosition = ((Canvas.ActualWidth / (flattenedList[i].Count + 1)) * (j + 1)) - (125 / 2);


Canvas.Width = (canvasWidthFinder.Max() * 160);


These values are then used to draw borders with text inside and lines drawn between the connecting ones.



Tree like graph structure.










share|improve this question
















This is not a duplicate of the Reingold-tolford, since that's just for drawing normal tree like structures. specifically I am looking for an algorithm where a node can link to a node thats not only on the level below it.



I'm building a tree like structure within a canvas control in WPF.
Currently I have a structure built like this(ignore the collisions of boxes I have that fixed) that generates automatically from my data.



While this structure isn't to bad, it'd be nice to work towards something with less collisions.



Therefore are there any algorithms I can follow and work with to draw a graph like this with less collisions.



I'm calculating all positions of the boxes like this currently,



flattenedList is a List < List< Object>> hence the i, j itteration. and that object has a treePosition Property with an X and Y double.



var canvasWidthFinder = new List<int>();
//Loop through all componentversions, use indexes to calc their positions.
for (int i = 0; i < flattenedList.Count; i++)

canvasWidthFinder.Add(flattenedList[i].Count);
for (int j = 0; j < flattenedList[i].Count; j++)

flattenedList[i][j].TreePosition.YPosition = (i * 150) + 25;
flattenedList[i][j].TreePosition.XPosition = ((Canvas.ActualWidth / (flattenedList[i].Count + 1)) * (j + 1)) - (125 / 2);


Canvas.Width = (canvasWidthFinder.Max() * 160);


These values are then used to draw borders with text inside and lines drawn between the connecting ones.



Tree like graph structure.







c# wpf algorithm canvas graph-algorithm






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 14 '18 at 12:13







user8478480

















asked Nov 14 '18 at 11:40









user8478480user8478480

19911




19911












  • Possible duplicate of What are the step to the Reingold-Tilford algorithm and how might I program it?

    – Peregrine
    Nov 14 '18 at 11:58

















  • Possible duplicate of What are the step to the Reingold-Tilford algorithm and how might I program it?

    – Peregrine
    Nov 14 '18 at 11:58
















Possible duplicate of What are the step to the Reingold-Tilford algorithm and how might I program it?

– Peregrine
Nov 14 '18 at 11:58





Possible duplicate of What are the step to the Reingold-Tilford algorithm and how might I program it?

– Peregrine
Nov 14 '18 at 11:58












1 Answer
1






active

oldest

votes


















1














You could represent links that skip layers by creating dummy items in the intermediate layers. Then when you display the tree you could replace each dummy item with a vertical line instead of a block.






share|improve this answer























  • It's not a bad idea though unfortunately I don't think that will work in this scenario, there are to many possibilities for boxes to be linking to other layers and after looking into it in a large amount of cases it's not helpful, and still collides. I think really this isn't even a tree so much and may not even be possible.

    – user8478480
    Nov 14 '18 at 13:17










Your Answer






StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");

StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);

else
createEditor();

);

function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);



);













draft saved

draft discarded


















StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53299415%2falgorithm-for-drawing-a-trees-where-nodes-can-attach-to-others-with-a-depth-grea%23new-answer', 'question_page');

);

Post as a guest















Required, but never shown

























1 Answer
1






active

oldest

votes








1 Answer
1






active

oldest

votes









active

oldest

votes






active

oldest

votes









1














You could represent links that skip layers by creating dummy items in the intermediate layers. Then when you display the tree you could replace each dummy item with a vertical line instead of a block.






share|improve this answer























  • It's not a bad idea though unfortunately I don't think that will work in this scenario, there are to many possibilities for boxes to be linking to other layers and after looking into it in a large amount of cases it's not helpful, and still collides. I think really this isn't even a tree so much and may not even be possible.

    – user8478480
    Nov 14 '18 at 13:17















1














You could represent links that skip layers by creating dummy items in the intermediate layers. Then when you display the tree you could replace each dummy item with a vertical line instead of a block.






share|improve this answer























  • It's not a bad idea though unfortunately I don't think that will work in this scenario, there are to many possibilities for boxes to be linking to other layers and after looking into it in a large amount of cases it's not helpful, and still collides. I think really this isn't even a tree so much and may not even be possible.

    – user8478480
    Nov 14 '18 at 13:17













1












1








1







You could represent links that skip layers by creating dummy items in the intermediate layers. Then when you display the tree you could replace each dummy item with a vertical line instead of a block.






share|improve this answer













You could represent links that skip layers by creating dummy items in the intermediate layers. Then when you display the tree you could replace each dummy item with a vertical line instead of a block.







share|improve this answer












share|improve this answer



share|improve this answer










answered Nov 14 '18 at 12:45









Robin BennettRobin Bennett

1,706313




1,706313












  • It's not a bad idea though unfortunately I don't think that will work in this scenario, there are to many possibilities for boxes to be linking to other layers and after looking into it in a large amount of cases it's not helpful, and still collides. I think really this isn't even a tree so much and may not even be possible.

    – user8478480
    Nov 14 '18 at 13:17

















  • It's not a bad idea though unfortunately I don't think that will work in this scenario, there are to many possibilities for boxes to be linking to other layers and after looking into it in a large amount of cases it's not helpful, and still collides. I think really this isn't even a tree so much and may not even be possible.

    – user8478480
    Nov 14 '18 at 13:17
















It's not a bad idea though unfortunately I don't think that will work in this scenario, there are to many possibilities for boxes to be linking to other layers and after looking into it in a large amount of cases it's not helpful, and still collides. I think really this isn't even a tree so much and may not even be possible.

– user8478480
Nov 14 '18 at 13:17





It's not a bad idea though unfortunately I don't think that will work in this scenario, there are to many possibilities for boxes to be linking to other layers and after looking into it in a large amount of cases it's not helpful, and still collides. I think really this isn't even a tree so much and may not even be possible.

– user8478480
Nov 14 '18 at 13:17



















draft saved

draft discarded
















































Thanks for contributing an answer to Stack Overflow!


  • Please be sure to answer the question. Provide details and share your research!

But avoid


  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53299415%2falgorithm-for-drawing-a-trees-where-nodes-can-attach-to-others-with-a-depth-grea%23new-answer', 'question_page');

);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

Use pre created SQLite database for Android project in kotlin

Darth Vader #20

Ondo