Algorithm for drawing a trees where nodes can attach to others with a depth greater than itself + 1
up vote
0
down vote
favorite
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 |
up vote
0
down vote
favorite
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 at 11:58
add a comment |
up vote
0
down vote
favorite
up vote
0
down vote
favorite
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 at 12:13
asked Nov 14 at 11:40
user8478480
19011
19011
Possible duplicate of What are the step to the Reingold-Tilford algorithm and how might I program it?
– Peregrine
Nov 14 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 at 11:58
Possible duplicate of What are the step to the Reingold-Tilford algorithm and how might I program it?
– Peregrine
Nov 14 at 11:58
Possible duplicate of What are the step to the Reingold-Tilford algorithm and how might I program it?
– Peregrine
Nov 14 at 11:58
add a comment |
1 Answer
1
active
oldest
votes
up vote
1
down vote
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 at 13:17
add a comment |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
1
down vote
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 at 13:17
add a comment |
up vote
1
down vote
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 at 13:17
add a comment |
up vote
1
down vote
up vote
1
down vote
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 at 12:45
Robin Bennett
1,382112
1,382112
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 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 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 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 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.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- 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 at 11:58