Algorithm for drawing a trees where nodes can attach to others with a depth greater than itself + 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.
c# wpf algorithm canvas graph-algorithm
add a comment |
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.
c# wpf algorithm canvas graph-algorithm
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
add a comment |
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.
c# wpf algorithm canvas graph-algorithm
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.
c# wpf algorithm canvas graph-algorithm
c# wpf algorithm canvas graph-algorithm
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
add a comment |
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
add a comment |
1 Answer
1
active
oldest
votes
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.
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
add a comment |
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
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
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.
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
add a comment |
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.
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
add a comment |
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.
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.
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
add a comment |
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
add a comment |
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.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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
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